From 2a55dd6dada0f79276a20b3c678ce18b7f973329 Mon Sep 17 00:00:00 2001 From: rucky Date: Mon, 16 Mar 2026 13:48:46 +0800 Subject: [PATCH] init --- .nanami-launcher.json | 7 + AFKScreen.lua | 1529 +++ ActionBars.lua | 1749 +++ Bags/Bank.lua | 2087 ++++ Bags/Container.lua | 1619 +++ Bags/Core.lua | 113 + Bags/Features.lua | 139 + Bags/Offline.lua | 337 + Bags/Sort.lua | 483 + Bindings.xml | 7 + BookUI.lua | 375 + CharacterPanel.lua | 3320 ++++++ Chat.lua | 6897 ++++++++++++ ClassSkillData.lua | 346 + Config.lua | 316 + ConfigUI.lua | 3513 ++++++ Core.lua | 524 + DarkmoonGuide.lua | 363 + DarkmoonMapMarker.lua | 2 + Factory.lua | 252 + FlightData.lua | 1012 ++ FlightMap.lua | 1282 +++ Focus.lua | 158 + GameMenu.lua | 346 + GearScore.lua | 1133 ++ IconMap.lua | 108 + InspectPanel.lua | 1590 +++ Mail.lua | 1633 +++ MapIcons.lua | 337 + MapReveal.lua | 287 + Media.lua | 47 + Merchant.lua | 1110 ++ Minimap.lua | 590 + MinimapBuffs.lua | 638 ++ MinimapButton.lua | 220 + Nanami-UI.toc | 67 + PetStableSkin.lua | 565 + QuestLogSkin.lua | 1308 +++ QuestUI.lua | 1663 +++ Roll.lua | 548 + SellPriceDB.lua | 3983 +++++++ SetupWizard.lua | 1257 +++ SocialUI.lua | 2331 ++++ SpellBookUI.lua | 983 ++ StatSummary.lua | 868 ++ Theme.lua | 269 + Tooltip.lua | 1181 ++ Trade.lua | 1268 +++ TradeSkillDB.lua | 9852 +++++++++++++++++ TradeSkillUI.lua | 2130 ++++ TrainerUI.lua | 1234 +++ Tweaks.lua | 1051 ++ Units/Party.lua | 1176 ++ Units/Pet.lua | 787 ++ Units/Player.lua | 1449 +++ Units/Raid.lua | 1064 ++ Units/TalentTree.lua | 1065 ++ Units/Target.lua | 1046 ++ Units/ToT.lua | 85 + Whisper.lua | 882 ++ WorldMap.lua | 1941 ++++ agent-tools/MAGE_WARLOCK_DRUID_skills.lua | 96 + agent-tools/TALENT_TRAINER_SKILLS.lua | 73 + agent-tools/class_trainer_skills.lua | 63 + agent-tools/class_trainer_skills_output.lua | 63 + agent-tools/parse_skills.py | 78 + img/UI-Classes-Circles.tga | Bin 0 -> 86097 bytes img/cat.tga | Bin 0 -> 262162 bytes img/df-gryphon-beta.tga | Bin 0 -> 34945 bytes img/df-gryphon.tga | Bin 0 -> 29430 bytes img/df-wyvern.tga | Bin 0 -> 25998 bytes img/dly.tga | Bin 0 -> 1048594 bytes img/fs.tga | Bin 0 -> 1048594 bytes img/gude-2026-03-05.log | 3 + img/icon.tga | Bin 0 -> 1048594 bytes img/icon2.tga | Bin 0 -> 1048594 bytes img/icon3.tga | Bin 0 -> 1048594 bytes img/icon4.tga | Bin 0 -> 1048594 bytes img/icon5.tga | Bin 0 -> 1048594 bytes img/icon6.tga | Bin 0 -> 1048594 bytes img/icon7.tga | Bin 0 -> 1048594 bytes img/icon8.tga | Bin 0 -> 1048594 bytes img/lr.tga | Bin 0 -> 1048594 bytes img/map.tga | Bin 0 -> 1048594 bytes img/ms.tga | Bin 0 -> 1048594 bytes img/qs.tga | Bin 0 -> 1048594 bytes img/qxz.tga | Bin 0 -> 1048594 bytes img/sm.tga | Bin 0 -> 1048594 bytes img/ss.tga | Bin 0 -> 1048594 bytes img/zs.tga | Bin 0 -> 1048594 bytes img/魔兽插件图标含义对照表.html | 177 + 乌龟服职业属性收益研究.pdf | Bin 0 -> 379080 bytes ... (Turtle WoW) 深度理论研究与属性收益终极报告.pdf | Bin 0 -> 320965 bytes 93 files changed, 75075 insertions(+) create mode 100644 .nanami-launcher.json create mode 100644 AFKScreen.lua create mode 100644 ActionBars.lua create mode 100644 Bags/Bank.lua create mode 100644 Bags/Container.lua create mode 100644 Bags/Core.lua create mode 100644 Bags/Features.lua create mode 100644 Bags/Offline.lua create mode 100644 Bags/Sort.lua create mode 100644 Bindings.xml create mode 100644 BookUI.lua create mode 100644 CharacterPanel.lua create mode 100644 Chat.lua create mode 100644 ClassSkillData.lua create mode 100644 Config.lua create mode 100644 ConfigUI.lua create mode 100644 Core.lua create mode 100644 DarkmoonGuide.lua create mode 100644 DarkmoonMapMarker.lua create mode 100644 Factory.lua create mode 100644 FlightData.lua create mode 100644 FlightMap.lua create mode 100644 Focus.lua create mode 100644 GameMenu.lua create mode 100644 GearScore.lua create mode 100644 IconMap.lua create mode 100644 InspectPanel.lua create mode 100644 Mail.lua create mode 100644 MapIcons.lua create mode 100644 MapReveal.lua create mode 100644 Media.lua create mode 100644 Merchant.lua create mode 100644 Minimap.lua create mode 100644 MinimapBuffs.lua create mode 100644 MinimapButton.lua create mode 100644 Nanami-UI.toc create mode 100644 PetStableSkin.lua create mode 100644 QuestLogSkin.lua create mode 100644 QuestUI.lua create mode 100644 Roll.lua create mode 100644 SellPriceDB.lua create mode 100644 SetupWizard.lua create mode 100644 SocialUI.lua create mode 100644 SpellBookUI.lua create mode 100644 StatSummary.lua create mode 100644 Theme.lua create mode 100644 Tooltip.lua create mode 100644 Trade.lua create mode 100644 TradeSkillDB.lua create mode 100644 TradeSkillUI.lua create mode 100644 TrainerUI.lua create mode 100644 Tweaks.lua create mode 100644 Units/Party.lua create mode 100644 Units/Pet.lua create mode 100644 Units/Player.lua create mode 100644 Units/Raid.lua create mode 100644 Units/TalentTree.lua create mode 100644 Units/Target.lua create mode 100644 Units/ToT.lua create mode 100644 Whisper.lua create mode 100644 WorldMap.lua create mode 100644 agent-tools/MAGE_WARLOCK_DRUID_skills.lua create mode 100644 agent-tools/TALENT_TRAINER_SKILLS.lua create mode 100644 agent-tools/class_trainer_skills.lua create mode 100644 agent-tools/class_trainer_skills_output.lua create mode 100644 agent-tools/parse_skills.py create mode 100644 img/UI-Classes-Circles.tga create mode 100644 img/cat.tga create mode 100644 img/df-gryphon-beta.tga create mode 100644 img/df-gryphon.tga create mode 100644 img/df-wyvern.tga create mode 100644 img/dly.tga create mode 100644 img/fs.tga create mode 100644 img/gude-2026-03-05.log create mode 100644 img/icon.tga create mode 100644 img/icon2.tga create mode 100644 img/icon3.tga create mode 100644 img/icon4.tga create mode 100644 img/icon5.tga create mode 100644 img/icon6.tga create mode 100644 img/icon7.tga create mode 100644 img/icon8.tga create mode 100644 img/lr.tga create mode 100644 img/map.tga create mode 100644 img/ms.tga create mode 100644 img/qs.tga create mode 100644 img/qxz.tga create mode 100644 img/sm.tga create mode 100644 img/ss.tga create mode 100644 img/zs.tga create mode 100644 img/魔兽插件图标含义对照表.html create mode 100644 乌龟服职业属性收益研究.pdf create mode 100644 乌龟服魔兽世界 (Turtle WoW) 深度理论研究与属性收益终极报告.pdf diff --git a/.nanami-launcher.json b/.nanami-launcher.json new file mode 100644 index 0000000..ba9d80a --- /dev/null +++ b/.nanami-launcher.json @@ -0,0 +1,7 @@ +{ + "packageId": "nanami-ui", + "packageName": "Nanami-UI", + "source": "bundled", + "folderName": "Nanami-UI", + "installedAt": "2026-03-04T11:12:15.763Z" +} diff --git a/AFKScreen.lua b/AFKScreen.lua new file mode 100644 index 0000000..2c330d0 --- /dev/null +++ b/AFKScreen.lua @@ -0,0 +1,1529 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: AFK Screen (AFKScreen.lua) +-- Full-screen idle screen with dancing character model & info panel +-------------------------------------------------------------------------------- + +SFrames.AFKScreen = {} +local AFK = SFrames.AFKScreen + +local FADE_SPEED = 1.25 +local PARTICLE_COUNT = 18 +local CLOCK_UPDATE_INTERVAL = 0.5 + +local CLASS_NAMES_ZH = { + ["WARRIOR"] = "战士", ["MAGE"] = "法师", ["ROGUE"] = "盗贼", + ["DRUID"] = "德鲁伊", ["HUNTER"] = "猎人", ["SHAMAN"] = "萨满", + ["PRIEST"] = "牧师", ["WARLOCK"] = "术士", ["PALADIN"] = "圣骑士", +} + +local T = SFrames.ActiveTheme + +local WORLD_BUFF_DEFS = { + ["Rallying Cry of the Dragonslayer"] = { display = "屠龙者的咆哮 (龙头)", priority = 1, color = {1, 0.85, 0.30} }, + ["屠龙者的咆哮"] = { display = "屠龙者的咆哮 (龙头)", priority = 1, color = {1, 0.85, 0.30} }, + ["巨龙杀手的战吼"] = { display = "屠龙者的咆哮 (龙头)", priority = 1, color = {1, 0.85, 0.30} }, + + ["Warchief's Blessing"] = { display = "酋长的祝福", priority = 2, color = {0.90, 0.55, 0.30} }, + ["酋长的祝福"] = { display = "酋长的祝福", priority = 2, color = {0.90, 0.55, 0.30} }, + + ["Spirit of Zandalar"] = { display = "赞达拉之魂", priority = 2, color = {0.40, 0.90, 0.45} }, + ["赞达拉之魂"] = { display = "赞达拉之魂", priority = 2, color = {0.40, 0.90, 0.45} }, + + ["Songflower Serenade"] = { display = "歌唱花小夜曲", priority = 3, color = {0.75, 0.55, 0.90} }, + ["歌唱花小夜曲"] = { display = "歌唱花小夜曲", priority = 3, color = {0.75, 0.55, 0.90} }, + + ["Mol'dar's Moxie"] = { display = "莫达尔的勇气", priority = 3, color = {0.50, 0.80, 0.55} }, + ["莫达尔的勇气"] = { display = "莫达尔的勇气", priority = 3, color = {0.50, 0.80, 0.55} }, + ["Fengus' Ferocity"] = { display = "芬古斯的凶猛", priority = 3, color = {0.85, 0.55, 0.40} }, + ["芬古斯的凶猛"] = { display = "芬古斯的凶猛", priority = 3, color = {0.85, 0.55, 0.40} }, + ["Slip'kik's Savvy"] = { display = "斯里基克的精明", priority = 3, color = {0.55, 0.70, 0.90} }, + ["斯里基克的精明"] = { display = "斯里基克的精明", priority = 3, color = {0.55, 0.70, 0.90} }, + + ["Darkmoon Faire"] = { display = "暗月马戏团", priority = 4, color = {0.65, 0.50, 0.80} }, +} + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- + +local function NextName(prefix) + if not AFK._nameCounter then AFK._nameCounter = 0 end + AFK._nameCounter = AFK._nameCounter + 1 + return "NanamiAFK_" .. prefix .. AFK._nameCounter +end + +local function GetFont() + return SFrames:GetFont() +end + +local function GetOutline() + return SFrames.Media.fontOutline or "OUTLINE" +end + +local function GetClassColor(class) + local c = SFrames.Config.colors.class[class] + if c then return c.r, c.g, c.b end + return 1, 1, 1 +end + +local function FormatDuration(seconds) + local h = math.floor(seconds / 3600) + local m = math.floor((seconds - h * 3600) / 60) + local s = math.floor(seconds - h * 3600 - m * 60) + if h > 0 then + return string.format("%d:%02d:%02d", h, m, s) + else + return string.format("%02d:%02d", m, s) + end +end + +local function GetDurabilityPercent() + local current, maximum = 0, 0 + for slot = 1, 18 do + local ok, cur, mx = pcall(function() + local hasItem = GetInventoryItemLink("player", slot) + if hasItem then + local c, m = GetInventoryItemDurability(slot) + return c, m + end + return nil, nil + end) + if ok and cur and mx and mx > 0 then + current = current + cur + maximum = maximum + mx + end + end + if maximum == 0 then return nil end + return math.floor((current / maximum) * 100) +end + +local function GetPvPRankName() + local ok, name = pcall(function() return GetPVPRankInfo(UnitPVPRank("player")) end) + if ok and name and name ~= "" then return name end + return nil +end + +-------------------------------------------------------------------------------- +-- UI Construction +-------------------------------------------------------------------------------- + +function AFK:Build() + if self.frame then return end + + local f = CreateFrame("Frame", "NanamiAFKScreen", WorldFrame) + f:SetFrameStrata("FULLSCREEN_DIALOG") + f:SetFrameLevel(100) + f:SetAllPoints(UIParent) + f:EnableMouse(true) + f:EnableKeyboard(true) + f:SetAlpha(0) + f:Hide() + self.frame = f + + -- Full-screen dark overlay + f.overlay = f:CreateTexture(nil, "BACKGROUND") + f.overlay:SetTexture("Interface\\Buttons\\WHITE8X8") + f.overlay:SetAllPoints(f) + f.overlay:SetVertexColor(T.overlayBg[1], T.overlayBg[2], T.overlayBg[3]) + f.overlay:SetAlpha(T.overlayBg[4]) + + -- Top gradient (subtle vignette) + f.topGrad = f:CreateTexture(nil, "BACKGROUND", nil, 1) + f.topGrad:SetTexture("Interface\\Buttons\\WHITE8X8") + f.topGrad:SetPoint("TOPLEFT", f, "TOPLEFT") + f.topGrad:SetPoint("TOPRIGHT", f, "TOPRIGHT") + f.topGrad:SetHeight(200) + f.topGrad:SetGradientAlpha("VERTICAL", 0, 0, 0, 0, 0.02, 0.005, 0.02, 0.6) + + -- Bottom gradient + f.botGrad = f:CreateTexture(nil, "BACKGROUND", nil, 1) + f.botGrad:SetTexture("Interface\\Buttons\\WHITE8X8") + f.botGrad:SetPoint("BOTTOMLEFT", f, "BOTTOMLEFT") + f.botGrad:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT") + f.botGrad:SetHeight(250) + f.botGrad:SetGradientAlpha("VERTICAL", 0.03, 0.01, 0.03, 0.45, 0, 0, 0, 0) + + -- Bottom accent line + f.accentLine = f:CreateTexture(nil, "ARTWORK") + f.accentLine:SetTexture("Interface\\Buttons\\WHITE8X8") + f.accentLine:SetHeight(1) + f.accentLine:SetPoint("BOTTOMLEFT", f, "BOTTOMLEFT", 0, 60) + f.accentLine:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 60) + f.accentLine:SetVertexColor(T.accentLine[1], T.accentLine[2], T.accentLine[3]) + f.accentLine:SetAlpha(T.accentLine[4]) + + -- Accent glow (soft line above the accent) + f.accentGlow = f:CreateTexture(nil, "ARTWORK", nil, -1) + f.accentGlow:SetTexture("Interface\\Buttons\\WHITE8X8") + f.accentGlow:SetHeight(30) + f.accentGlow:SetPoint("BOTTOMLEFT", f.accentLine, "TOPLEFT", 0, 0) + f.accentGlow:SetPoint("BOTTOMRIGHT", f.accentLine, "TOPRIGHT", 0, 0) + f.accentGlow:SetGradientAlpha("VERTICAL", + T.accentLine[1], T.accentLine[2], T.accentLine[3], 0.18, + T.accentLine[1], T.accentLine[2], T.accentLine[3], 0) + + self:BuildModel(f) + self:BuildInfoPanel(f) + self:BuildStatsPanel(f) + self:BuildSkillsPanel(f) + self:BuildWorldBuffPanel(f) + self:BuildClock(f) + self:BuildParticles(f) + self:BuildBrand(f) + + -- Exit hint below accent line + local hintFs = f:CreateFontString(nil, "OVERLAY") + hintFs:SetFont(GetFont(), 11, GetOutline()) + hintFs:SetPoint("BOTTOM", f, "BOTTOM", 0, 22) + hintFs:SetJustifyH("CENTER") + hintFs:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + hintFs:SetText("- 点击或按任意键退出 -") + self.hintText = hintFs + + -- Exit AFK on key press or mouse click + f:SetScript("OnKeyDown", function() + if AFK.isShowing and not AFK._exiting then + AFK:RequestExit() + end + end) + f:SetScript("OnMouseDown", function() + if AFK.isShowing and not AFK._exiting then + AFK:RequestExit() + end + end) + + -- Master OnUpdate + f:SetScript("OnUpdate", function() + AFK:OnUpdate(arg1) + end) +end + +-------------------------------------------------------------------------------- +-- 3D Character Model +-------------------------------------------------------------------------------- + +function AFK:BuildModel(parent) + local model = CreateFrame("PlayerModel", NextName("Model"), parent) + model:SetWidth(420) + model:SetHeight(520) + model:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", 30, 70) + model:SetFrameLevel(parent:GetFrameLevel() + 1) + + -- Soft darkening on the right side so the info panel is readable + local modelFade = parent:CreateTexture(nil, "ARTWORK", nil, 0) + modelFade:SetTexture("Interface\\Buttons\\WHITE8X8") + modelFade:SetPoint("TOPRIGHT", parent, "TOPRIGHT") + modelFade:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT") + modelFade:SetWidth(420) + modelFade:SetGradientAlpha("HORIZONTAL", + 0, 0, 0, 0, + T.overlayBg[1], T.overlayBg[2], T.overlayBg[3], 0.65) + + self.model = model + self.modelFacing = 0 +end + +-------------------------------------------------------------------------------- +-- Info Panel (bottom-right area above accent line) +-------------------------------------------------------------------------------- + +function AFK:BuildInfoPanel(parent) + local panel = CreateFrame("Frame", nil, parent) + panel:SetFrameLevel(parent:GetFrameLevel() + 5) + panel:SetWidth(210) + panel:SetHeight(150) + panel:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", -40, 75) + self.infoPanel = panel + + panel:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = false, tileSize = 0, edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + panel:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + panel:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) + + local yOff = -10 + local xPad = 12 + + local classIconFrame = CreateFrame("Frame", nil, panel) + classIconFrame:SetFrameLevel(panel:GetFrameLevel() + 1) + classIconFrame:SetWidth(36) + classIconFrame:SetHeight(36) + classIconFrame:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad, yOff) + local classIcon = classIconFrame:CreateTexture(nil, "OVERLAY") + classIcon:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\UI-Classes-Circles") + classIcon:SetAllPoints(classIconFrame) + classIcon:Hide() + self.classIcon = classIcon + self.classIconFrame = classIconFrame + + local nameFs = panel:CreateFontString(nil, "OVERLAY") + nameFs:SetFont(GetFont(), 16, GetOutline()) + nameFs:SetPoint("TOPLEFT", classIconFrame, "TOPRIGHT", 8, 0) + nameFs:SetJustifyH("LEFT") + self.nameText = nameFs + + local classFs = panel:CreateFontString(nil, "OVERLAY") + classFs:SetFont(GetFont(), 10, GetOutline()) + classFs:SetPoint("TOPLEFT", nameFs, "BOTTOMLEFT", 0, -2) + classFs:SetJustifyH("LEFT") + classFs:SetTextColor(T.valueColor[1], T.valueColor[2], T.valueColor[3]) + self.classText = classFs + + local sep1 = panel:CreateTexture(nil, "ARTWORK") + sep1:SetTexture("Interface\\Buttons\\WHITE8X8") + sep1:SetHeight(1) + sep1:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad, yOff - 44) + sep1:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -xPad, yOff - 44) + sep1:SetVertexColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3]) + sep1:SetAlpha(0.35) + + local rowStart = yOff - 52 + local rowGap = 15 + + local function MakeRow(label, yPos, iconKey) + if iconKey and SFrames and SFrames.CreateIcon then + local ico = SFrames:CreateIcon(panel, iconKey, 9) + ico:SetDrawLayer("OVERLAY") + ico:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad, yPos) + ico:SetVertexColor(T.labelColor[1], T.labelColor[2], T.labelColor[3]) + ico:SetAlpha(0.85) + end + + local lbl = panel:CreateFontString(nil, "OVERLAY") + lbl:SetFont(GetFont(), 9, GetOutline()) + lbl:SetPoint("TOPLEFT", panel, "TOPLEFT", iconKey and (xPad + 13) or xPad, yPos) + lbl:SetJustifyH("LEFT") + lbl:SetTextColor(T.labelColor[1], T.labelColor[2], T.labelColor[3]) + lbl:SetText(label) + + local val = panel:CreateFontString(nil, "OVERLAY") + val:SetFont(GetFont(), 9, GetOutline()) + val:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -xPad, yPos) + val:SetJustifyH("RIGHT") + val:SetTextColor(T.valueColor[1], T.valueColor[2], T.valueColor[3]) + return val + end + + self.guildText = MakeRow("公会", rowStart, "party") + self.zoneText = MakeRow("位置", rowStart - rowGap, "worldmap") + self.durText = MakeRow("耐久度", rowStart - rowGap * 2, "tank") + self.pvpText = MakeRow("军衔", rowStart - rowGap * 3, "honor") + self.playtimeText = MakeRow("游戏时长", rowStart - rowGap * 4, "hearthstone") +end + +-------------------------------------------------------------------------------- +-- Stats Panel (top-right area — character attributes) +-------------------------------------------------------------------------------- + +function AFK:BuildStatsPanel(parent) + local panel = CreateFrame("Frame", nil, parent) + panel:SetFrameLevel(parent:GetFrameLevel() + 5) + panel:SetWidth(210) + panel:SetHeight(230) + panel:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -40, -80) + self.statsPanel = panel + + panel:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = false, tileSize = 0, edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + panel:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], 0.72) + panel:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], 0.45) + + local statsIco = SFrames:CreateIcon(panel, "charsheet", 12) + statsIco:SetDrawLayer("OVERLAY") + statsIco:SetPoint("TOP", panel, "TOP", -38, -8) + statsIco:SetVertexColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + + local titleFs = panel:CreateFontString(nil, "OVERLAY") + titleFs:SetFont(GetFont(), 11, GetOutline()) + titleFs:SetPoint("LEFT", statsIco, "RIGHT", 4, 0) + titleFs:SetJustifyH("CENTER") + titleFs:SetTextColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + titleFs:SetText("- 角色属性 -") + + local sep = panel:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", panel, "TOPLEFT", 12, -22) + sep:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -12, -22) + sep:SetVertexColor(T.accentLine[1], T.accentLine[2], T.accentLine[3]) + sep:SetAlpha(0.3) + + local xPad = 14 + local yStart = -30 + local rowGap = 15 + self._statRows = {} + + local statDefs = { + { key = "hp", label = "生命值" }, + { key = "mp", label = "法力值" }, + { key = "armor", label = "护甲" }, + { divider = true }, + { key = "str", label = "力量" }, + { key = "agi", label = "敏捷" }, + { key = "sta", label = "耐力" }, + { key = "int", label = "智力" }, + { key = "spi", label = "精神" }, + { divider = true }, + { key = "melee", label = "攻击强度" }, + { key = "spell", label = "法术强度" }, + { key = "crit", label = "暴击率" }, + { key = "dodge", label = "躲闪" }, + } + + local curY = yStart + for _, def in ipairs(statDefs) do + if def.divider then + local div = panel:CreateTexture(nil, "ARTWORK") + div:SetTexture("Interface\\Buttons\\WHITE8X8") + div:SetHeight(1) + div:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad + 4, curY - 2) + div:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -xPad - 4, curY - 2) + div:SetVertexColor(0.45, 0.28, 0.40) + div:SetAlpha(0.25) + curY = curY - 8 + else + local lbl = panel:CreateFontString(nil, "OVERLAY") + lbl:SetFont(GetFont(), 9, GetOutline()) + lbl:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad, curY) + lbl:SetJustifyH("LEFT") + lbl:SetTextColor(0.58, 0.48, 0.55) + lbl:SetText(def.label) + + local val = panel:CreateFontString(nil, "OVERLAY") + val:SetFont(GetFont(), 10, GetOutline()) + val:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -xPad, curY) + val:SetJustifyH("RIGHT") + val:SetTextColor(0.92, 0.84, 0.90) + + self._statRows[def.key] = val + curY = curY - rowGap + end + end +end + +-------------------------------------------------------------------------------- +-- Skills Panel (right side, below stats — professions & weapon skills) +-------------------------------------------------------------------------------- + +function AFK:BuildSkillsPanel(parent) + local panel = CreateFrame("Frame", nil, parent) + panel:SetFrameLevel(parent:GetFrameLevel() + 5) + panel:SetWidth(210) + panel:SetHeight(200) + panel:SetPoint("TOPRIGHT", self.statsPanel, "BOTTOMRIGHT", 0, -6) + self.skillsPanel = panel + + panel:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = false, tileSize = 0, edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + panel:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], 0.72) + panel:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], 0.45) + + local skillsIco = SFrames:CreateIcon(panel, "profession", 12) + skillsIco:SetDrawLayer("OVERLAY") + skillsIco:SetPoint("TOP", panel, "TOP", -38, -8) + skillsIco:SetVertexColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + + local titleFs = panel:CreateFontString(nil, "OVERLAY") + titleFs:SetFont(GetFont(), 11, GetOutline()) + titleFs:SetPoint("LEFT", skillsIco, "RIGHT", 4, 0) + titleFs:SetJustifyH("CENTER") + titleFs:SetTextColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + titleFs:SetText("- 技能总览 -") + + local sep = panel:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", panel, "TOPLEFT", 12, -22) + sep:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -12, -22) + sep:SetVertexColor(T.accentLine[1], T.accentLine[2], T.accentLine[3]) + sep:SetAlpha(0.3) + + self._skillBars = {} +end + +function AFK:CreateSkillBar(parent, yOffset, name, rank, maxRank, barColor) + local xPad = 14 + local barWidth = 182 + local barHeight = 8 + + local lbl = parent:CreateFontString(nil, "OVERLAY") + lbl:SetFont(GetFont(), 8, GetOutline()) + lbl:SetPoint("TOPLEFT", parent, "TOPLEFT", xPad, yOffset) + lbl:SetJustifyH("LEFT") + lbl:SetTextColor(0.62, 0.52, 0.58) + lbl:SetText(name) + + local valFs = parent:CreateFontString(nil, "OVERLAY") + valFs:SetFont(GetFont(), 8, GetOutline()) + valFs:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -xPad, yOffset) + valFs:SetJustifyH("RIGHT") + valFs:SetTextColor(0.82, 0.74, 0.80) + if maxRank and maxRank > 0 then + valFs:SetText(rank .. " / " .. maxRank) + else + valFs:SetText(rank) + end + + local bgBar = parent:CreateTexture(nil, "ARTWORK") + bgBar:SetTexture("Interface\\Buttons\\WHITE8X8") + bgBar:SetWidth(barWidth) + bgBar:SetHeight(barHeight) + bgBar:SetPoint("TOPLEFT", parent, "TOPLEFT", xPad, yOffset - 10) + bgBar:SetVertexColor(T.panelBg[1], T.panelBg[2], T.panelBg[3]) + bgBar:SetAlpha(0.85) + + -- Bar fill + local fillBar = parent:CreateTexture(nil, "OVERLAY") + fillBar:SetTexture("Interface\\Buttons\\WHITE8X8") + fillBar:SetHeight(barHeight) + fillBar:SetPoint("TOPLEFT", bgBar, "TOPLEFT", 0, 0) + + local pct = 0 + if maxRank and maxRank > 0 then + pct = rank / maxRank + elseif rank and rank > 0 then + pct = 1 + end + local fillWidth = math.max(1, barWidth * pct) + fillBar:SetWidth(fillWidth) + + local cr, cg, cb = barColor[1], barColor[2], barColor[3] + fillBar:SetVertexColor(cr, cg, cb, 0.75) + + -- Subtle highlight on bar top + local shine = parent:CreateTexture(nil, "OVERLAY", nil, 1) + shine:SetTexture("Interface\\Buttons\\WHITE8X8") + shine:SetHeight(math.floor(barHeight / 2)) + shine:SetPoint("TOPLEFT", fillBar, "TOPLEFT", 0, 0) + shine:SetPoint("TOPRIGHT", fillBar, "TOPRIGHT", 0, 0) + shine:SetVertexColor(1, 1, 1, 0.08) + + return { lbl = lbl, val = valFs, bg = bgBar, fill = fillBar, shine = shine } +end + +-------------------------------------------------------------------------------- +-- World Buff Panel (center — prominent buff reminders) +-------------------------------------------------------------------------------- + +function AFK:BuildWorldBuffPanel(parent) + local panel = CreateFrame("Frame", nil, parent) + panel:SetFrameLevel(parent:GetFrameLevel() + 7) + panel:SetWidth(320) + panel:SetHeight(60) + panel:SetPoint("CENTER", parent, "CENTER", -50, 30) + self.wbPanel = panel + panel:Hide() + + panel:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = false, tileSize = 0, edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + panel:SetBackdropColor(0.06, 0.04, 0.01, 0.82) + panel:SetBackdropBorderColor(T.wbBorder[1], T.wbBorder[2], T.wbBorder[3], 0.55) + + local glow = CreateFrame("Frame", nil, parent) + glow:SetFrameLevel(parent:GetFrameLevel() + 6) + glow:SetWidth(328) + glow:SetHeight(68) + glow:SetPoint("CENTER", panel, "CENTER", 0, 0) + glow:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = false, tileSize = 0, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + glow:SetBackdropColor(0, 0, 0, 0) + glow:SetBackdropBorderColor(1, 0.82, 0.30, 0.20) + glow:Hide() + self._wbGlow = glow + + local titleFs = panel:CreateFontString(nil, "OVERLAY") + titleFs:SetFont(GetFont(), 12, GetOutline()) + titleFs:SetPoint("TOP", panel, "TOP", 0, -10) + titleFs:SetJustifyH("CENTER") + titleFs:SetTextColor(T.wbGold[1], T.wbGold[2], T.wbGold[3]) + titleFs:SetText("⚔ 世界增益 ⚔") + self.wbTitle = titleFs + + local sep = panel:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", panel, "TOPLEFT", 14, -26) + sep:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -14, -26) + sep:SetVertexColor(1, 0.78, 0.30, 0.35) + + self._wbRows = {} + self._wbPulse = 0 +end + +-------------------------------------------------------------------------------- +-- Clock & AFK Timer (top center) +-------------------------------------------------------------------------------- + +function AFK:BuildClock(parent) + local clockFrame = CreateFrame("Frame", nil, parent) + clockFrame:SetFrameLevel(parent:GetFrameLevel() + 5) + clockFrame:SetWidth(400) + clockFrame:SetHeight(150) + clockFrame:SetPoint("TOP", parent, "TOP", 0, -30) + self.clockFrame = clockFrame + + -- Main clock: local time (large) + local timeFs = clockFrame:CreateFontString(nil, "OVERLAY") + timeFs:SetFont(GetFont(), 72, GetOutline()) + timeFs:SetPoint("TOP", clockFrame, "TOP", 0, 0) + timeFs:SetJustifyH("CENTER") + timeFs:SetTextColor(T.clockColor[1], T.clockColor[2], T.clockColor[3]) + self.clockText = timeFs + + -- Sub clock: server time (below main) + local serverFs = clockFrame:CreateFontString(nil, "OVERLAY") + serverFs:SetFont(GetFont(), 18, GetOutline()) + serverFs:SetPoint("TOP", timeFs, "BOTTOM", 0, -4) + serverFs:SetJustifyH("CENTER") + serverFs:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + self.serverClockText = serverFs + + -- AFK timer + local timerFs = clockFrame:CreateFontString(nil, "OVERLAY") + timerFs:SetFont(GetFont(), 18, GetOutline()) + timerFs:SetPoint("TOP", serverFs, "BOTTOM", 0, -8) + timerFs:SetJustifyH("CENTER") + timerFs:SetTextColor(T.timerColor[1], T.timerColor[2], T.timerColor[3]) + self.timerText = timerFs + + -- Subtle decorative dots flanking the main clock + for _, side in ipairs({ -1, 1 }) do + local dot = clockFrame:CreateTexture(nil, "ARTWORK") + dot:SetTexture("Interface\\Buttons\\WHITE8X8") + dot:SetWidth(4) + dot:SetHeight(4) + dot:SetPoint("CENTER", timeFs, side > 0 and "RIGHT" or "LEFT", side * 18, 0) + dot:SetVertexColor(T.accentLine[1], T.accentLine[2], T.accentLine[3]) + dot:SetAlpha(0.5) + end +end + +-------------------------------------------------------------------------------- +-- Floating Particles (sakura / firefly effect) +-------------------------------------------------------------------------------- + +function AFK:BuildParticles(parent) + self.particles = {} + for i = 1, PARTICLE_COUNT do + local p = parent:CreateTexture(nil, "ARTWORK", nil, 2) + p:SetTexture("Interface\\Buttons\\WHITE8X8") + local size = math.random(2, 6) + p:SetWidth(size) + p:SetHeight(size) + p:SetVertexColor( + T.particleColor[1] + math.random() * 0.1 - 0.05, + T.particleColor[2] + math.random() * 0.2 - 0.1, + T.particleColor[3] + math.random() * 0.1 - 0.05 + ) + p:SetAlpha(0) + + p._baseAlpha = 0.15 + math.random() * 0.25 + p._speed = 8 + math.random() * 20 + p._drift = (math.random() - 0.5) * 40 + p._phase = math.random() * 6.28 + p._pulseSpeed = 1.5 + math.random() * 2 + p._x = math.random() * 1024 + p._y = math.random() * 768 + + p:SetPoint("CENTER", parent, "BOTTOMLEFT", p._x, p._y) + table.insert(self.particles, p) + end +end + +-------------------------------------------------------------------------------- +-- Brand / Logo (bottom-left) +-------------------------------------------------------------------------------- + +function AFK:BuildBrand(parent) + local brandIco = SFrames:CreateIcon(parent, "logo", 28) + brandIco:SetDrawLayer("OVERLAY") + brandIco:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", 20, 30) + brandIco:SetVertexColor(T.brandColor[1], T.brandColor[2], T.brandColor[3]) + brandIco:SetAlpha(0.85) + self.brandIcon = brandIco + + local brandFs = parent:CreateFontString(nil, "OVERLAY") + brandFs:SetFont(GetFont(), 16, GetOutline()) + brandFs:SetPoint("LEFT", brandIco, "RIGHT", 6, 2) + brandFs:SetJustifyH("LEFT") + brandFs:SetTextColor(T.brandColor[1], T.brandColor[2], T.brandColor[3]) + brandFs:SetAlpha(0.85) + brandFs:SetText("Nanami-UI v1.0.0") + self.brandText = brandFs + + local catFs = parent:CreateFontString(nil, "OVERLAY") + catFs:SetFont(GetFont(), 12, GetOutline()) + catFs:SetPoint("TOPLEFT", brandIco, "BOTTOMLEFT", 0, -3) + catFs:SetJustifyH("LEFT") + catFs:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + catFs:SetAlpha(0.7) + catFs:SetText("=^_^= Meow~") + self.catText = catFs +end + +-------------------------------------------------------------------------------- +-- Data Refresh +-------------------------------------------------------------------------------- + +function AFK:RefreshInfo() + local name = UnitName("player") or "Unknown" + local level = UnitLevel("player") or 0 + local _, classEn = UnitClass("player") + classEn = classEn or "WARRIOR" + + local cr, cg, cb = GetClassColor(classEn) + self.nameText:SetText(name) + self.nameText:SetTextColor(cr, cg, cb) + + local className = CLASS_NAMES_ZH[classEn] or UnitClass("player") or classEn + self.classText:SetText("Lv." .. level .. " " .. className) + + -- Class icon + local coords = SFrames.CLASS_ICON_TCOORDS and SFrames.CLASS_ICON_TCOORDS[classEn] + if coords then + self.classIcon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]) + self.classIcon:Show() + self.classIconFrame:Show() + else + self.classIcon:Hide() + end + + -- Guild + local guildName, guildRank = GetGuildInfo("player") + if guildName then + self.guildText:SetText("<" .. guildName .. "> " .. (guildRank or "")) + else + self.guildText:SetText("-") + self.guildText:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + end + + -- Zone + local zone = GetZoneText() or "" + local subZone = GetSubZoneText() or "" + if subZone ~= "" and subZone ~= zone then + self.zoneText:SetText(zone .. " - " .. subZone) + else + self.zoneText:SetText(zone) + end + + -- Durability + local dur = GetDurabilityPercent() + if dur then + local dr, dg, db = 0.4, 1, 0.4 + if dur < 25 then + dr, dg, db = 1, 0.2, 0.2 + elseif dur < 50 then + dr, dg, db = 1, 0.7, 0.2 + end + self.durText:SetText(dur .. "%") + self.durText:SetTextColor(dr, dg, db) + else + self.durText:SetText("-") + self.durText:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + end + + -- PvP Rank + local pvpRank = GetPvPRankName() + if pvpRank then + self.pvpText:SetText(pvpRank) + else + self.pvpText:SetText("-") + self.pvpText:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + end + + -- Playtime (request it; the event callback fills it in) + self.playtimeText:SetText("...") + self.playtimeText:SetTextColor(T.dimColor[1], T.dimColor[2], T.dimColor[3]) + self._waitingPlaytime = true + RequestTimePlayed() + + -- Character stats, skills & world buffs + self:RefreshStats() + self:RefreshSkills() + self:RefreshWorldBuffs() +end + +function AFK:RefreshStats() + if not self._statRows then return end + local R = self._statRows + + -- HP / MP + local hp = UnitHealthMax("player") or 0 + local mp = UnitManaMax("player") or 0 + R.hp:SetText(hp) + R.mp:SetText(mp) + + local _, pClass = UnitClass("player") + if pClass == "WARRIOR" or pClass == "ROGUE" then + R.mp:SetTextColor(0.50, 0.42, 0.48) + end + + -- Armor + local base, effectiveArmor = UnitArmor("player") + R.armor:SetText(effectiveArmor or base or 0) + + -- Primary stats + local function GetStat(id) + local base, stat, posBuff, negBuff = UnitStat("player", id) + return stat or base or 0 + end + R.str:SetText(GetStat(1)) + R.agi:SetText(GetStat(2)) + R.sta:SetText(GetStat(3)) + R.int:SetText(GetStat(4)) + R.spi:SetText(GetStat(5)) + + -- Melee attack power + local mBase, mPos, mNeg = UnitAttackPower("player") + local ap = (mBase or 0) + (mPos or 0) + (mNeg or 0) + R.melee:SetText(ap) + + -- Spell power (approximate from bonus healing / damage stats if available) + local sp = 0 + if GetSpellBonusDamage then + for school = 2, 7 do + local v = GetSpellBonusDamage(school) + if v and v > sp then sp = v end + end + end + R.spell:SetText(sp) + + -- Crit chance + local crit = 0 + if GetCritChance then crit = GetCritChance() or 0 + elseif GetMeleeCritChance then crit = GetMeleeCritChance() or 0 + end + R.crit:SetText(string.format("%.1f%%", crit)) + + -- Dodge + local dodge = GetDodgeChance and GetDodgeChance() or 0 + R.dodge:SetText(string.format("%.1f%%", dodge)) +end + +function AFK:RefreshSkills() + if not self.skillsPanel then return end + + -- Clean up old bars + if self._skillBars then + for _, bar in ipairs(self._skillBars) do + if bar.lbl then bar.lbl:Hide() end + if bar.val then bar.val:Hide() end + if bar.bg then bar.bg:Hide() end + if bar.fill then bar.fill:Hide() end + if bar.shine then bar.shine:Hide() end + end + end + self._skillBars = {} + + -- Also clean up section labels + if self._skillLabels then + for _, fs in ipairs(self._skillLabels) do fs:Hide() end + end + self._skillLabels = {} + + local tradeSkills = {} + local secondarySkills = {} + local weapons = {} + local numSkills = GetNumSkillLines and GetNumSkillLines() or 0 + local currentHeader = "" + + for i = 1, numSkills do + local name, header, isExpanded, skillRank, numTemp, skillMod, skillMax, isAbandonable = GetSkillLineInfo(i) + if header then + currentHeader = name or "" + elseif name then + local isWeapon = (currentHeader == "Weapon Skills" or currentHeader == "武器技能" + or currentHeader == "Weapons" or currentHeader == "Combat") + local isTrade = (currentHeader == "Trade Skills" or currentHeader == "专业技能" + or currentHeader == "Professions") + local isSecondary = (currentHeader == "Secondary Skills" or currentHeader == "辅助技能") + + if isWeapon and skillMax and skillMax > 0 then + table.insert(weapons, { name = name, rank = skillRank or 0, max = skillMax }) + elseif isTrade and skillMax and skillMax > 0 then + table.insert(tradeSkills, { name = name, rank = skillRank or 0, max = skillMax }) + elseif isSecondary and skillMax and skillMax > 0 then + table.insert(secondarySkills, { name = name, rank = skillRank or 0, max = skillMax }) + end + end + end + + local professions = {} + local maxProf = 3 + for _, p in ipairs(tradeSkills) do + if table.getn(professions) < maxProf then table.insert(professions, p) end + end + for _, p in ipairs(secondarySkills) do + if table.getn(professions) < maxProf then table.insert(professions, p) end + end + + local panel = self.skillsPanel + local yOff = -28 + local barSpacing = 22 + + local profColor = { 0.45, 0.75, 0.90 } + local weapColor = { 0.85, 0.60, 0.45 } + + local function AddSectionLabel(text, y) + local fs = panel:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 9, GetOutline()) + fs:SetPoint("TOPLEFT", panel, "TOPLEFT", 14, y) + fs:SetJustifyH("LEFT") + fs:SetTextColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + fs:SetAlpha(0.85) + fs:SetText(text) + table.insert(self._skillLabels, fs) + end + + if table.getn(professions) > 0 then + AddSectionLabel("专业技能", yOff) + yOff = yOff - 14 + for _, p in ipairs(professions) do + local bar = self:CreateSkillBar(panel, yOff, p.name, p.rank, p.max, profColor) + table.insert(self._skillBars, bar) + yOff = yOff - barSpacing + end + yOff = yOff - 4 + end + + -- Sort weapons by rank descending; show top 4 + table.sort(weapons, function(a, b) return a.rank > b.rank end) + local maxWeapons = 4 + if table.getn(weapons) > maxWeapons then + local trimmed = {} + for i = 1, maxWeapons do table.insert(trimmed, weapons[i]) end + weapons = trimmed + end + + if table.getn(weapons) > 0 then + AddSectionLabel("武器熟练", yOff) + yOff = yOff - 14 + for _, w in ipairs(weapons) do + local bar = self:CreateSkillBar(panel, yOff, w.name, w.rank, w.max, weapColor) + table.insert(self._skillBars, bar) + yOff = yOff - barSpacing + end + end + + local totalHeight = math.abs(yOff) + 10 + if totalHeight < 50 then totalHeight = 50 end + panel:SetHeight(totalHeight) +end + +-------------------------------------------------------------------------------- +-- World Buff Scanning & Refresh +-------------------------------------------------------------------------------- + +-- Texture-based fallback for world buff detection (server-independent) +local WORLD_BUFF_TEXTURES = { + ["Interface\\Icons\\Spell_Holy_GreaterHeal"] = { display = "屠龙者的咆哮 (龙头)", priority = 1, color = {1, 0.85, 0.30} }, + ["Interface\\Icons\\INV_Misc_Head_Dragon_01"] = { display = "屠龙者的咆哮 (龙头)", priority = 1, color = {1, 0.85, 0.30} }, + ["Interface\\Icons\\Spell_Arcane_TeleportOrgrimmar"] = { display = "酋长的祝福", priority = 2, color = {0.90, 0.55, 0.30} }, + ["Interface\\Icons\\Ability_Creature_Poison_05"] = { display = "赞达拉之魂", priority = 2, color = {0.40, 0.90, 0.45} }, + ["Interface\\Icons\\Spell_Holy_MindSoothe"] = { display = "歌唱花小夜曲", priority = 3, color = {0.75, 0.55, 0.90} }, +} + +function AFK:ScanWorldBuffs() + local found = {} + local matched = {} + + if not self._buffTip then + self._buffTip = CreateFrame("GameTooltip", "NanamiAFKBuffTip", WorldFrame, "GameTooltipTemplate") + end + + -- Build texture → remaining time mapping + local texTime = {} + if GetPlayerBuff then + for slot = 0, 31 do + local bi = GetPlayerBuff(slot, "HELPFUL") + if bi and bi >= 0 then + local tex = GetPlayerBuffTexture and GetPlayerBuffTexture(bi) + local tl = GetPlayerBuffTimeLeft and GetPlayerBuffTimeLeft(bi) + if tex then texTime[tex] = tl or 0 end + end + end + end + + -- Debug: print all buffs once per AFK session to help identify names + local debugOnce = not self._wbDebugDone + if debugOnce then self._wbDebugDone = true end + + for i = 1, 32 do + local tex = UnitBuff("player", i) + if not tex then break end + + self._buffTip:SetOwner(WorldFrame, "ANCHOR_NONE") + self._buffTip:SetUnitBuff("player", i) + local bName = NanamiAFKBuffTipTextLeft1 and NanamiAFKBuffTipTextLeft1:GetText() + self._buffTip:Hide() + + if debugOnce and bName then + local tl = texTime[tex] or 0 + if tl > 300 then + DEFAULT_CHAT_FRAME:AddMessage("|cff88aacc[NanamiAFK Debug] buff: \"" .. bName .. "\" tex: " .. tex .. " time: " .. math.floor(tl) .. "s|r") + end + end + + local def = nil + -- 1) Exact name match + if bName then + def = WORLD_BUFF_DEFS[bName] + end + -- 2) Partial name match (substring) + if not def and bName then + for pattern, d in pairs(WORLD_BUFF_DEFS) do + if string.find(bName, pattern, 1, true) then + def = d + break + end + end + end + -- 3) Texture-based fallback + if not def and tex then + def = WORLD_BUFF_TEXTURES[tex] + end + + if def and not matched[def.display] then + matched[def.display] = true + table.insert(found, { + name = def.display, + timeLeft = texTime[tex] or 0, + priority = def.priority, + color = def.color, + texture = tex, + }) + end + end + + table.sort(found, function(a, b) return a.priority < b.priority end) + return found +end + +function AFK:RefreshWorldBuffs() + if not self.wbPanel then return end + + for _, row in ipairs(self._wbRows or {}) do + if row.icon then row.icon:Hide() end + if row.nameFs then row.nameFs:Hide() end + if row.timeFs then row.timeFs:Hide() end + if row.highlight then row.highlight:Hide() end + end + self._wbRows = {} + + local buffs = self:ScanWorldBuffs() + + if table.getn(buffs) == 0 then + self.wbPanel:Hide() + if self._wbGlow then self._wbGlow:Hide() end + return + end + + local panel = self.wbPanel + local yOff = -34 + local rowHeight = 28 + local xPad = 16 + + for _, buff in ipairs(buffs) do + local isPrimary = (buff.priority == 1) + local nameSize = isPrimary and 13 or 11 + local timeSize = isPrimary and 15 or 12 + + local icon = panel:CreateFontString(nil, "OVERLAY") + icon:SetFont(GetFont(), isPrimary and 14 or 11, GetOutline()) + icon:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad, yOff) + icon:SetTextColor(buff.color[1], buff.color[2], buff.color[3]) + icon:SetText(isPrimary and "★" or "◆") + + local nameFs = panel:CreateFontString(nil, "OVERLAY") + nameFs:SetFont(GetFont(), nameSize, GetOutline()) + nameFs:SetPoint("TOPLEFT", panel, "TOPLEFT", xPad + 18, yOff) + nameFs:SetJustifyH("LEFT") + nameFs:SetTextColor(buff.color[1], buff.color[2], buff.color[3]) + nameFs:SetText(buff.name) + + local timeFs = panel:CreateFontString(nil, "OVERLAY") + timeFs:SetFont(GetFont(), timeSize, GetOutline()) + timeFs:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -xPad, yOff) + timeFs:SetJustifyH("RIGHT") + self:_SetBuffTimeColor(timeFs, buff.timeLeft) + + local highlight = nil + if isPrimary then + highlight = panel:CreateTexture(nil, "ARTWORK") + highlight:SetTexture("Interface\\Buttons\\WHITE8X8") + highlight:SetHeight(rowHeight - 4) + highlight:SetPoint("TOPLEFT", panel, "TOPLEFT", 6, yOff + 3) + highlight:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -6, yOff + 3) + highlight:SetVertexColor(1, 0.82, 0.25, 0.06) + end + + table.insert(self._wbRows, { + icon = icon, nameFs = nameFs, timeFs = timeFs, + highlight = highlight, buff = buff, + }) + yOff = yOff - rowHeight + end + + local totalH = math.abs(yOff) + 10 + if totalH < 60 then totalH = 60 end + panel:SetHeight(totalH) + panel:Show() + + if self._wbGlow then + self._wbGlow:SetHeight(totalH + 8) + self._wbGlow:Show() + end +end + +function AFK:_SetBuffTimeColor(fs, timeLeft) + if timeLeft and timeLeft > 0 then + fs:SetText(FormatDuration(timeLeft)) + if timeLeft < 600 then + fs:SetTextColor(1, 0.35, 0.30) + elseif timeLeft < 1800 then + fs:SetTextColor(1, 0.72, 0.30) + else + fs:SetTextColor(0.92, 0.88, 0.72) + end + else + fs:SetText("--:--") + fs:SetTextColor(0.50, 0.46, 0.38) + end +end + +function AFK:UpdateWorldBuffTimers() + if not self._wbRows or table.getn(self._wbRows) == 0 then return end + + local texTime = {} + if GetPlayerBuff then + for slot = 0, 31 do + local bi = GetPlayerBuff(slot, "HELPFUL") + if bi and bi >= 0 then + local tex = GetPlayerBuffTexture and GetPlayerBuffTexture(bi) + local tl = GetPlayerBuffTimeLeft and GetPlayerBuffTimeLeft(bi) + if tex then texTime[tex] = tl or 0 end + end + end + end + + for _, row in ipairs(self._wbRows) do + if row.buff and row.buff.texture then + local tl = texTime[row.buff.texture] + if tl and tl > 0 then + self:_SetBuffTimeColor(row.timeFs, tl) + if row.nameFs then row.nameFs:SetAlpha(1) end + if row.icon then row.icon:SetAlpha(1) end + elseif tl == nil then + row.timeFs:SetText("|cff665e50已消失|r") + row.timeFs:SetTextColor(0.42, 0.38, 0.32) + if row.nameFs then row.nameFs:SetAlpha(0.45) end + if row.icon then row.icon:SetAlpha(0.45) end + else + self:_SetBuffTimeColor(row.timeFs, 0) + end + end + end +end + +-------------------------------------------------------------------------------- +-- OnUpdate (master tick) +-------------------------------------------------------------------------------- + +function AFK:OnUpdate(elapsed) + if not elapsed then return end + + -- Fade logic + if self.fadeDirection then + local alpha = self.frame:GetAlpha() + alpha = alpha + self.fadeDirection * FADE_SPEED * elapsed + if self.fadeDirection > 0 and alpha >= 1 then + alpha = 1 + self.fadeDirection = nil + elseif self.fadeDirection < 0 and alpha <= 0 then + alpha = 0 + self.fadeDirection = nil + self.frame:Hide() + self.frame:EnableKeyboard(false) + self.isShowing = false + self._exiting = false + UIParent:Show() + return + end + self.frame:SetAlpha(alpha) + end + + if not self.isShowing then return end + + -- Dance initialization: apply SetSequence once after model is loaded + if self._danceWait then + self._danceWait = self._danceWait - elapsed + if self._danceWait <= 0 then + self._danceWait = nil + if self.model and self.model.SetSequence then + self.model:SetSequence(69) + end + end + end + + -- Clock & timer + self._clockElapsed = (self._clockElapsed or 0) + elapsed + if self._clockElapsed >= CLOCK_UPDATE_INTERVAL then + self._clockElapsed = 0 + + -- Main clock: local time + local localTime = date("%H:%M") + self.clockText:SetText(localTime) + + -- Sub clock: server time + local sHour, sMin = GetGameTime() + self.serverClockText:SetText("服务器 " .. string.format("%02d:%02d", sHour, sMin)) + + -- AFK duration + if self.afkStartTime then + local duration = GetTime() - self.afkStartTime + self.timerText:SetText("已离开 " .. FormatDuration(duration)) + end + + -- World buff timers + self:UpdateWorldBuffTimers() + end + + -- Particle animation + local now = GetTime() + local sw = self.frame:GetWidth() + local sh = self.frame:GetHeight() + if sw < 100 then sw = 1024 end + if sh < 100 then sh = 768 end + + for _, p in ipairs(self.particles) do + p._y = p._y + p._speed * elapsed + p._x = p._x + p._drift * elapsed + + if p._y > sh + 20 then + p._y = -20 + p._x = math.random() * sw + end + if p._x < -20 then p._x = sw + 10 end + if p._x > sw + 20 then p._x = -10 end + + p:ClearAllPoints() + p:SetPoint("CENTER", self.frame, "BOTTOMLEFT", p._x, p._y) + + local pulse = p._baseAlpha * (0.6 + 0.4 * math.sin(now * p._pulseSpeed + p._phase)) + p:SetAlpha(pulse) + end + + -- Accent line gentle pulse + if self.frame.accentLine then + local glow = 0.7 + 0.3 * math.sin(now * 1.2) + self.frame.accentLine:SetAlpha(glow * T.accentLine[4]) + end + + -- World buff panel glow pulse + if self._wbGlow and self._wbGlow:IsShown() then + self._wbPulse = (self._wbPulse or 0) + elapsed * 1.8 + local pa = 0.18 + 0.12 * math.sin(self._wbPulse) + self._wbGlow:SetBackdropBorderColor(1, 0.82, 0.30, pa) + end + + -- Hint text gentle pulse + if self.hintText then + local hAlpha = 0.4 + 0.25 * math.sin(now * 1.8) + self.hintText:SetAlpha(hAlpha) + end +end + +-------------------------------------------------------------------------------- +-- Show / Hide +-------------------------------------------------------------------------------- + +function AFK:Show() + if self.isShowing then return end + if self._exiting then return end + + -- Check config: is AFK screen enabled? + if SFramesDB and SFramesDB.afkEnabled == false then return end + + -- Only trigger in resting areas unless config allows everywhere, or manual toggle + if not self._manualTrigger then + local allowOutside = SFramesDB and SFramesDB.afkOutsideRest == true + if not allowOutside and not IsResting() then return end + end + + if not self.frame then + self:Build() + end + + self.isShowing = true + self._exiting = false + self._manualTrigger = false + self._wbDebugDone = false + self.afkStartTime = GetTime() + self._clockElapsed = 99 + + self.model:SetUnit("player") + self.model:SetCamera(1) + self.model:SetPosition(0, 0, 0) + self.model:SetFacing(0.4) + + -- WoW 1.12 AnimationData.dbc: 69 = EmoteDance; apply after model loads + self._danceWait = 0.3 + + -- Reset particles + local sw = UIParent:GetWidth() or 1024 + local sh = UIParent:GetHeight() or 768 + for _, p in ipairs(self.particles) do + p._x = math.random() * sw + p._y = math.random() * sh + end + + self:RefreshInfo() + + -- Hide the game UI (our frame is parented to WorldFrame, unaffected) + UIParent:Hide() + + -- Fade in + self.frame:SetAlpha(0) + self.frame:EnableKeyboard(true) + self.frame:Show() + self.fadeDirection = 1 +end + +function AFK:Hide() + if not self.isShowing then return end + if self._exiting then return end + self._exiting = true + self.fadeDirection = -1 + self.frame:EnableKeyboard(false) + self._danceWait = nil +end + +function AFK:ForceHide() + if self.frame then + self.frame:SetAlpha(0) + self.frame:Hide() + self.frame:EnableKeyboard(false) + end + self.isShowing = false + self.fadeDirection = nil + self._exiting = false + UIParent:Show() +end + +function AFK:RequestExit() + if self._exiting then return end + self:Hide() + self._lastActivity = GetTime() + self._isAFK = false +end + +function AFK:Toggle() + if self.isShowing then + self:RequestExit() + else + self._manualTrigger = true + self:Show() + end +end + +-------------------------------------------------------------------------------- +-- Event Handling +-------------------------------------------------------------------------------- + +function AFK:ResetIdleTimer() + self._lastActivity = GetTime() + if self.isShowing and not self._exiting then + self:RequestExit() + end +end + +function AFK:OnSystemMessage(msg) + if not msg then return end + local isNowAFK = false + if MARKED_AFK_MESSAGE then + local pattern = string.gsub(MARKED_AFK_MESSAGE, "%%s", ".+") + if string.find(msg, pattern) then isNowAFK = true end + end + if not isNowAFK and string.find(msg, "You are now AFK") then isNowAFK = true end + if not isNowAFK and string.find(msg, "暂离") then isNowAFK = true end + + if isNowAFK then + self._isAFK = true + end + + -- Detect leaving AFK: reset flag + local isNoLongerAFK = false + if CLEARED_AFK_MESSAGE and string.find(msg, CLEARED_AFK_MESSAGE, 1, true) then + isNoLongerAFK = true + end + if not isNoLongerAFK and string.find(msg, "no longer AFK") then isNoLongerAFK = true end + if not isNoLongerAFK and string.find(msg, "取消") and string.find(msg, "暂离") then isNoLongerAFK = true end + if isNoLongerAFK then + self._isAFK = false + end +end + +function AFK:OnTimePlayed(totalTime, levelTime) + if not self._waitingPlaytime then return end + self._waitingPlaytime = false + + if not self.playtimeText then return end + if not totalTime or totalTime == 0 then + self.playtimeText:SetText("-") + return + end + + local days = math.floor(totalTime / 86400) + local hours = math.floor((totalTime - days * 86400) / 3600) + local mins = math.floor((totalTime - days * 86400 - hours * 3600) / 60) + + local text = "" + if days > 0 then + text = days .. "天 " .. hours .. "小时" + elseif hours > 0 then + text = hours .. "小时 " .. mins .. "分钟" + else + text = mins .. "分钟" + end + self.playtimeText:SetText(text) + self.playtimeText:SetTextColor(T.valueColor[1], T.valueColor[2], T.valueColor[3]) +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- + +function AFK:Initialize() + self:Build() + self._isAFK = false + self._lastActivity = GetTime() + + local function MarkActive() + AFK._lastActivity = GetTime() + end + + -- Hook action bar usage + local origUseAction = UseAction + UseAction = function(a1, a2, a3) + MarkActive() + return origUseAction(a1, a2, a3) + end + + if CastSpellByName then + local origCast = CastSpellByName + CastSpellByName = function(a1, a2) + MarkActive() + return origCast(a1, a2) + end + end + + if JumpOrAscendStart then + local origJump = JumpOrAscendStart + JumpOrAscendStart = function() + MarkActive() + return origJump() + end + end + + -- Events that indicate LOCAL player activity (not other players) + local activityEvents = { + "PLAYER_STARTED_MOVING", "PLAYER_STOPPED_MOVING", + "SPELLCAST_START", "SPELLCAST_STOP", + "PLAYER_REGEN_DISABLED", "PLAYER_TARGET_CHANGED", + "LOOT_OPENED", "MERCHANT_SHOW", "BANKFRAME_OPENED", + "MAIL_SHOW", "QUEST_DETAIL", "GOSSIP_SHOW", + "TRADE_SHOW", "AUCTION_HOUSE_SHOW", + } + for _, ev in ipairs(activityEvents) do + SFrames:RegisterEvent(ev, function() AFK:ResetIdleTimer() end) + end + + -- Watcher frame: tracks cursor movement + checks idle time + local watcher = CreateFrame("Frame", "NanamiAFKWatcher", UIParent) + watcher._checkTimer = 0 + watcher._lastCursorX = 0 + watcher._lastCursorY = 0 + watcher:SetScript("OnUpdate", function() + this._checkTimer = (this._checkTimer or 0) + arg1 + if this._checkTimer < 1 then return end + this._checkTimer = 0 + + -- Detect mouse cursor movement (catches all mouse activity) + local cx, cy = GetCursorPosition() + if cx ~= this._lastCursorX or cy ~= this._lastCursorY then + this._lastCursorX = cx + this._lastCursorY = cy + AFK._lastActivity = GetTime() + if AFK.isShowing and not AFK._exiting then + AFK:RequestExit() + end + return + end + + if AFK.isShowing or AFK._exiting then return end + if SFramesDB and SFramesDB.afkEnabled == false then return end + + local delay = (SFramesDB and SFramesDB.afkDelay) or 5 + if delay <= 0 then delay = 0.01 end + + local idle = GetTime() - (AFK._lastActivity or GetTime()) + if idle >= delay * 60 then + local allowOutside = SFramesDB and SFramesDB.afkOutsideRest == true + if allowOutside or IsResting() then + AFK:Show() + end + end + end) + + -- Server AFK message as secondary instant trigger + SFrames:RegisterEvent("CHAT_MSG_SYSTEM", function() + AFK:OnSystemMessage(arg1) + end) + + SFrames:RegisterEvent("TIME_PLAYED_MSG", function() + AFK:OnTimePlayed(arg1, arg2) + end) + + SFrames:RegisterEvent("ZONE_CHANGED_NEW_AREA", function() + if AFK.isShowing and AFK.zoneText then + local zone = GetZoneText() or "" + local subZone = GetSubZoneText() or "" + if subZone ~= "" and subZone ~= zone then + AFK.zoneText:SetText(zone .. " - " .. subZone) + else + AFK.zoneText:SetText(zone) + end + end + end) + + SFrames:RegisterEvent("ZONE_CHANGED", function() + if AFK.isShowing and AFK.zoneText then + local zone = GetZoneText() or "" + local subZone = GetSubZoneText() or "" + if subZone ~= "" and subZone ~= zone then + AFK.zoneText:SetText(zone .. " - " .. subZone) + else + AFK.zoneText:SetText(zone) + end + end + end) +end diff --git a/ActionBars.lua b/ActionBars.lua new file mode 100644 index 0000000..d6638db --- /dev/null +++ b/ActionBars.lua @@ -0,0 +1,1749 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: ActionBars +-- +-- DESIGN: Blizzard's ActionButton_GetPagedID() identifies action slots by +-- checking button:GetParent():GetName(). We MUST NOT reparent multi-bar +-- buttons. Instead we reposition the original bar FRAMES and style buttons +-- in-place. Only ActionButton1-12 are safely reparented (page-based calc). +-- +-- ShapeshiftBarFrame and PetActionBarFrame are children of MainMenuBar, so +-- they become invisible when we hide MainMenuBar. We reparent them to +-- UIParent before hiding. +-------------------------------------------------------------------------------- + +SFrames.ActionBars = {} + +local AB = SFrames.ActionBars + +local DEFAULTS = { + enable = true, + buttonSize = 36, + buttonGap = 2, + smallBarSize = 27, + scale = 1.0, + barCount = 3, + showHotkey = true, + showMacroName = false, + rangeColoring = true, + showPetBar = true, + showStanceBar = true, + showRightBars = true, + alwaysShowGrid = false, + buttonRounded = false, + buttonInnerShadow = false, + hideGryphon = true, + gryphonStyle = "dragonflight", + gryphonOnTop = false, + gryphonWidth = 64, + gryphonHeight = 64, + gryphonOffsetX = 30, + gryphonOffsetY = 0, + bottomOffsetX = 0, + bottomOffsetY = 2, + rightOffsetX = -4, + rightOffsetY = -80, +} + +local BUTTONS_PER_ROW = 12 + +-- 狮鹫样式定义:每种样式包含联盟和部落纹理路径 +local GRYPHON_STYLES = { + { key = "dragonflight", label = "巨龙时代", + alliance = "Interface\\AddOns\\Nanami-UI\\img\\df-gryphon", + horde = "Interface\\AddOns\\Nanami-UI\\img\\df-wyvern" }, + { key = "dragonflight_beta", label = "巨龙时代 (Beta)", + alliance = "Interface\\AddOns\\Nanami-UI\\img\\df-gryphon-beta", + horde = "Interface\\AddOns\\Nanami-UI\\img\\df-gryphon-beta" }, + { key = "classic", label = "经典", + alliance = "Interface\\MainMenuBar\\UI-MainMenuBar-EndCap-Human", + horde = "Interface\\MainMenuBar\\UI-MainMenuBar-EndCap-Human" }, + { key = "cat", label = "猫", + alliance = "Interface\\AddOns\\Nanami-UI\\img\\cat", + horde = "Interface\\AddOns\\Nanami-UI\\img\\cat" }, +} + +local function GetGryphonTexPath(styleKey) + local faction = UnitFactionGroup and UnitFactionGroup("player") or "Alliance" + for _, s in ipairs(GRYPHON_STYLES) do + if s.key == styleKey then + return (faction == "Horde") and s.horde or s.alliance + end + end + return GRYPHON_STYLES[1].alliance +end + +-------------------------------------------------------------------------------- +-- Layout helpers +-------------------------------------------------------------------------------- +local function LayoutRow(buttons, parent, size, gap) + for i, b in ipairs(buttons) do + b:SetWidth(size) + b:SetHeight(size) + b:ClearAllPoints() + if i == 1 then + b:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", 0, 0) + else + b:SetPoint("LEFT", buttons[i - 1], "RIGHT", gap, 0) + end + end +end + +local function LayoutColumn(buttons, parent, size, gap) + for i, b in ipairs(buttons) do + b:SetWidth(size) + b:SetHeight(size) + b:ClearAllPoints() + if i == 1 then + b:SetPoint("TOPRIGHT", parent, "TOPRIGHT", 0, 0) + else + b:SetPoint("TOP", buttons[i - 1], "BOTTOM", 0, -gap) + end + end +end + +-------------------------------------------------------------------------------- +-- DB +-------------------------------------------------------------------------------- +function AB:GetDB() + if not SFramesDB then SFramesDB = {} end + if type(SFramesDB.ActionBars) ~= "table" then SFramesDB.ActionBars = {} end + local db = SFramesDB.ActionBars + for k, v in pairs(DEFAULTS) do + if db[k] == nil then db[k] = v end + end + return db +end + + +-------------------------------------------------------------------------------- +-- Style helpers +-------------------------------------------------------------------------------- +local styledButtons = {} + +local function HideNormalTexture(nt) + if not nt then return end + if nt.SetAlpha then nt:SetAlpha(0) end + if nt.SetWidth then nt:SetWidth(0) end + if nt.SetHeight then nt:SetHeight(0) end +end + +local function StyleButton(b) + if not b or styledButtons[b] then return end + styledButtons[b] = true + + local nt = _G[b:GetName() .. "NormalTexture"] + HideNormalTexture(nt) + b.SetNormalTexture = function() end + + -- pfUI approach: backdrop on a SEPARATE child frame at lower frame level + -- so it renders behind the button's own textures (Icon etc.) + if b:GetBackdrop() then b:SetBackdrop(nil) end + local level = b:GetFrameLevel() + local bd = CreateFrame("Frame", nil, b) + bd:SetFrameLevel(level > 0 and (level - 1) or 0) + bd:SetAllPoints(b) + SFrames:CreateBackdrop(bd) + b.sfBackdrop = bd + + local icon = _G[b:GetName() .. "Icon"] + if icon then + icon:ClearAllPoints() + icon:SetPoint("TOPLEFT", b, "TOPLEFT", 2, -2) + icon:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -2, 2) + icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + end + + local cd = _G[b:GetName() .. "Cooldown"] + if cd then + cd:ClearAllPoints() + cd:SetPoint("TOPLEFT", b, "TOPLEFT", 2, -2) + cd:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -2, 2) + end + + local hotkey = _G[b:GetName() .. "HotKey"] + if hotkey then + hotkey:SetFont(SFrames:GetFont(), 9, "OUTLINE") + hotkey:ClearAllPoints() + hotkey:SetPoint("TOPRIGHT", b, "TOPRIGHT", -2, -2) + end + + local count = _G[b:GetName() .. "Count"] + if count then + count:SetFont(SFrames:GetFont(), 9, "OUTLINE") + count:ClearAllPoints() + count:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -2, 2) + end + + local macroName = _G[b:GetName() .. "Name"] + if macroName then + macroName:SetFont(SFrames:GetFont(), 8, "OUTLINE") + macroName:ClearAllPoints() + macroName:SetPoint("BOTTOM", b, "BOTTOM", 0, 2) + end + + local floatingBG = _G[b:GetName() .. "FloatingBG"] + if floatingBG then floatingBG:SetAlpha(0) end + + local border = _G[b:GetName() .. "Border"] + if border then border:SetAlpha(0) end +end + +local function KillPetNormalTextures(b) + local name = b:GetName() + -- Pet buttons use NormalTexture AND NormalTexture2 + for _, suffix in ipairs({"NormalTexture", "NormalTexture2"}) do + local nt = _G[name .. suffix] + if nt and nt.SetTexture then nt:SetTexture(nil) end + if nt and nt.SetAlpha then nt:SetAlpha(0) end + if nt and nt.Hide then nt:Hide() end + end + local gnt = b.GetNormalTexture and b:GetNormalTexture() + if gnt and gnt.SetTexture then gnt:SetTexture(nil) end + if gnt and gnt.SetAlpha then gnt:SetAlpha(0) end +end + +local function StylePetButton(b) + if not b or styledButtons[b] then return end + styledButtons[b] = true + + KillPetNormalTextures(b) + b.SetNormalTexture = function() end + + -- pfUI approach: backdrop on separate child frame at lower frame level + if b.GetBackdrop and b:GetBackdrop() then b:SetBackdrop(nil) end + local level = b:GetFrameLevel() + local bd = CreateFrame("Frame", nil, b) + bd:SetFrameLevel(level > 0 and (level - 1) or 0) + bd:SetAllPoints(b) + SFrames:CreateBackdrop(bd) + b.sfBackdrop = bd + + local icon = _G[b:GetName() .. "Icon"] + if icon then + icon:ClearAllPoints() + icon:SetPoint("TOPLEFT", b, "TOPLEFT", 2, -2) + icon:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -2, 2) + icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + end + + local cd = _G[b:GetName() .. "Cooldown"] + if cd then + cd:ClearAllPoints() + cd:SetPoint("TOPLEFT", b, "TOPLEFT", 2, -2) + cd:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -2, 2) + end + + local ab = _G[b:GetName() .. "AutoCastable"] + if ab then + ab:ClearAllPoints() + ab:SetPoint("TOPLEFT", b, "TOPLEFT", -4, 4) + ab:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", 4, -4) + end + + local floatingBG = _G[b:GetName() .. "FloatingBG"] + if floatingBG then floatingBG:SetAlpha(0) end +end + + +-------------------------------------------------------------------------------- +-- Button visual effects (rounded corners + inner shadow) +-------------------------------------------------------------------------------- +local function CreateInnerShadow(btn) + if btn.sfInnerShadow then return btn.sfInnerShadow end + local shadow = {} + local thickness = 4 + + local top = btn:CreateTexture(nil, "OVERLAY") + top:SetTexture("Interface\\Buttons\\WHITE8X8") + top:SetHeight(thickness) + top:SetGradientAlpha("VERTICAL", 0, 0, 0, 0, 0, 0, 0, 0.5) + shadow.top = top + + local bot = btn:CreateTexture(nil, "OVERLAY") + bot:SetTexture("Interface\\Buttons\\WHITE8X8") + bot:SetHeight(thickness) + bot:SetGradientAlpha("VERTICAL", 0, 0, 0, 0.5, 0, 0, 0, 0) + shadow.bottom = bot + + local left = btn:CreateTexture(nil, "OVERLAY") + left:SetTexture("Interface\\Buttons\\WHITE8X8") + left:SetWidth(thickness) + left:SetGradientAlpha("HORIZONTAL", 0, 0, 0, 0.5, 0, 0, 0, 0) + shadow.left = left + + local right = btn:CreateTexture(nil, "OVERLAY") + right:SetTexture("Interface\\Buttons\\WHITE8X8") + right:SetWidth(thickness) + right:SetGradientAlpha("HORIZONTAL", 0, 0, 0, 0, 0, 0, 0, 0.5) + shadow.right = right + + btn.sfInnerShadow = shadow + return shadow +end + +local function ApplyButtonVisuals(btn, rounded, shadow) + local bd = btn.sfBackdrop + if not bd then return end + + local inset = rounded and 3 or 2 + btn.sfIconInset = inset + + if rounded then + bd:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + else + bd:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + end + local A = SFrames.ActiveTheme + if A and A.panelBg then + bd:SetBackdropColor(A.panelBg[1], A.panelBg[2], A.panelBg[3], A.panelBg[4] or 0.9) + bd:SetBackdropBorderColor(A.panelBorder[1], A.panelBorder[2], A.panelBorder[3], A.panelBorder[4] or 1) + else + bd:SetBackdropColor(0.1, 0.1, 0.1, 0.9) + bd:SetBackdropBorderColor(0, 0, 0, 1) + end + + local name = btn:GetName() + if name then + local icon = _G[name .. "Icon"] + if icon then + icon:ClearAllPoints() + icon:SetPoint("TOPLEFT", btn, "TOPLEFT", inset, -inset) + icon:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -inset, inset) + end + local cd = _G[name .. "Cooldown"] + if cd then + cd:ClearAllPoints() + cd:SetPoint("TOPLEFT", btn, "TOPLEFT", inset, -inset) + cd:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -inset, inset) + end + end + + if btn.sfRangeOverlay then + btn.sfRangeOverlay:ClearAllPoints() + btn.sfRangeOverlay:SetPoint("TOPLEFT", btn, "TOPLEFT", inset, -inset) + btn.sfRangeOverlay:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -inset, inset) + end + + if shadow then + if not btn.sfInnerShadow then CreateInnerShadow(btn) end + local s = btn.sfInnerShadow + s.top:ClearAllPoints() + s.top:SetPoint("TOPLEFT", btn, "TOPLEFT", inset, -inset) + s.top:SetPoint("TOPRIGHT", btn, "TOPRIGHT", -inset, -inset) + s.bottom:ClearAllPoints() + s.bottom:SetPoint("BOTTOMLEFT", btn, "BOTTOMLEFT", inset, inset) + s.bottom:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -inset, inset) + s.left:ClearAllPoints() + s.left:SetPoint("TOPLEFT", btn, "TOPLEFT", inset, -inset) + s.left:SetPoint("BOTTOMLEFT", btn, "BOTTOMLEFT", inset, inset) + s.right:ClearAllPoints() + s.right:SetPoint("TOPRIGHT", btn, "TOPRIGHT", -inset, -inset) + s.right:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -inset, inset) + s.top:Show(); s.bottom:Show(); s.left:Show(); s.right:Show() + else + if btn.sfInnerShadow then + local s = btn.sfInnerShadow + s.top:Hide(); s.bottom:Hide(); s.left:Hide(); s.right:Hide() + end + end +end + + +-------------------------------------------------------------------------------- +-- Hide Blizzard chrome +-------------------------------------------------------------------------------- +function AB:HideBlizzardBars() + SHOW_MULTI_ACTIONBAR_1 = 1 + SHOW_MULTI_ACTIONBAR_2 = 1 + SHOW_MULTI_ACTIONBAR_3 = 1 + SHOW_MULTI_ACTIONBAR_4 = 1 + + -- Reparent stance/pet bars BEFORE hiding MainMenuBar (they are children of it) + if ShapeshiftBarFrame then ShapeshiftBarFrame:SetParent(UIParent) end + if PetActionBarFrame then PetActionBarFrame:SetParent(UIParent) end + + if MultiActionBar_Update then + MultiActionBar_Update() + end + + if MainMenuBar then + MainMenuBar:UnregisterAllEvents() + MainMenuBar:Hide() + MainMenuBar.Show = function() end + end + + local hideArt = { + "MainMenuBarArtFrame", + "MainMenuExpBar", + "ReputationWatchBar", + } + for _, name in ipairs(hideArt) do + local f = _G[name] + if f then + f:Hide() + if f.SetHeight then f:SetHeight(0) end + f.Show = function() end + end + end + + -- BonusActionBarFrame: keep functional for druid form switching, just hide art + if BonusActionBarFrame then + BonusActionBarFrame:SetParent(UIParent) + if BonusActionBarFrame.SetBackdrop then + BonusActionBarFrame:SetBackdrop(nil) + end + for i = 0, 4 do + local tex = _G["BonusActionBarTexture" .. i] + if tex then tex:SetAlpha(0) end + end + end + + if MultiBarBottomLeftArtFrame then MultiBarBottomLeftArtFrame:Hide() end + if MultiBarBottomRightArtFrame then MultiBarBottomRightArtFrame:Hide() end + + -- 隐藏原版狮鹫端帽(Texture 对象,非 Frame) + local endcaps = { "MainMenuBarLeftEndCap", "MainMenuBarRightEndCap" } + for _, name in ipairs(endcaps) do + local f = _G[name] + if f then + f:Hide() + f.Show = function() end + end + end + + if MainMenuBarBackpackButton then MainMenuBarBackpackButton:Hide() end + for slot = 0, 3 do + local b = _G["CharacterBag" .. slot .. "Slot"] + if b then b:Hide() end + end + if KeyRingButton then KeyRingButton:Hide() end +end + +-------------------------------------------------------------------------------- +-- Create bar structure (once) +-------------------------------------------------------------------------------- +function AB:CreateBars() + local db = self:GetDB() + local size = db.buttonSize + local gap = db.buttonGap + local rowWidth = (size + gap) * BUTTONS_PER_ROW - gap + + -- === BOTTOM BARS === + local anchor = CreateFrame("Frame", "SFramesActionBarAnchor", UIParent) + anchor:SetWidth(rowWidth) + anchor:SetHeight(size * 3 + gap * 2) + anchor:SetPoint("BOTTOM", UIParent, "BOTTOM", db.bottomOffsetX, db.bottomOffsetY) + anchor:SetScale(db.scale) + self.anchor = anchor + + -- Row 1: ActionButton1-12 (safe to reparent, uses page calc) + local row1 = CreateFrame("Frame", "SFramesMainBar", anchor) + row1:SetWidth(rowWidth) + row1:SetHeight(size) + row1:SetPoint("BOTTOMLEFT", anchor, "BOTTOMLEFT", 0, 0) + self.row1 = row1 + + self.mainButtons = {} + for i = 1, BUTTONS_PER_ROW do + local b = _G["ActionButton" .. i] + if b then + b:SetParent(row1) + StyleButton(b) + table.insert(self.mainButtons, b) + end + end + + -- === BONUS ACTION BAR (druid forms, warrior stances, etc.) === + self.bonusButtons = {} + if BonusActionBarFrame then + BonusActionBarFrame:SetParent(row1) + BonusActionBarFrame:ClearAllPoints() + BonusActionBarFrame:SetPoint("BOTTOMLEFT", row1, "BOTTOMLEFT", 0, 0) + BonusActionBarFrame:SetWidth(rowWidth) + BonusActionBarFrame:SetHeight(size) + BonusActionBarFrame:SetFrameLevel(row1:GetFrameLevel() + 5) + + for i = 1, BUTTONS_PER_ROW do + local b = _G["BonusActionButton" .. i] + if b then + StyleButton(b) + table.insert(self.bonusButtons, b) + end + end + + BonusActionBarFrame:SetScript("OnShow", function() + for i = 1, BUTTONS_PER_ROW do + local b = _G["BonusActionButton" .. i] + if b and BonusActionButton_Update then + BonusActionButton_Update(b) + end + end + local db = AB:GetDB() + local s = db.buttonSize + local g = db.buttonGap + LayoutRow(AB.bonusButtons, BonusActionBarFrame, s, g) + local btnLevel = BonusActionBarFrame:GetFrameLevel() + 1 + for _, btn in ipairs(AB.bonusButtons) do + btn:EnableMouse(true) + btn:SetFrameLevel(btnLevel) + if btn.sfBackdrop then + btn.sfBackdrop:SetFrameLevel(btnLevel - 1) + end + end + end) + end + + -- === PAGE INDICATOR === + local pi = row1:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall") + pi:SetPoint("RIGHT", row1, "LEFT", -4, 0) + pi:SetTextColor(0.9, 0.8, 0.2, 0.9) + self.pageIndicator = pi + + -- Row 2: reposition the original MultiBarBottomLeft frame + if MultiBarBottomLeft then + MultiBarBottomLeft:SetParent(anchor) + MultiBarBottomLeft:ClearAllPoints() + MultiBarBottomLeft:SetPoint("BOTTOMLEFT", row1, "TOPLEFT", 0, gap) + MultiBarBottomLeft:SetWidth(rowWidth) + MultiBarBottomLeft:SetHeight(size) + MultiBarBottomLeft:Show() + end + self.row2 = MultiBarBottomLeft + + self.bar2Buttons = {} + for i = 1, BUTTONS_PER_ROW do + local b = _G["MultiBarBottomLeftButton" .. i] + if b then + b:Show() + StyleButton(b) + table.insert(self.bar2Buttons, b) + end + end + + -- Row 3: reposition the original MultiBarBottomRight frame + if MultiBarBottomRight then + MultiBarBottomRight:SetParent(anchor) + MultiBarBottomRight:ClearAllPoints() + MultiBarBottomRight:SetPoint("BOTTOMLEFT", MultiBarBottomLeft or row1, "TOPLEFT", 0, gap) + MultiBarBottomRight:SetWidth(rowWidth) + MultiBarBottomRight:SetHeight(size) + MultiBarBottomRight:Show() + end + self.row3 = MultiBarBottomRight + + self.bar3Buttons = {} + for i = 1, BUTTONS_PER_ROW do + local b = _G["MultiBarBottomRightButton" .. i] + if b then + b:Show() + StyleButton(b) + table.insert(self.bar3Buttons, b) + end + end + + -- === 狮鹫端帽 === + local srcL = MainMenuBarLeftEndCap + local capW = (srcL and srcL.GetWidth) and srcL:GetWidth() or 128 + local capH = (srcL and srcL.GetHeight) and srcL:GetHeight() or 76 + + local gryphonTex = GetGryphonTexPath(db.gryphonStyle) + + local leftCap = CreateFrame("Frame", "SFramesGryphonLeft", UIParent) + leftCap:SetWidth(capW) + leftCap:SetHeight(capH) + local leftImg = leftCap:CreateTexture(nil, "ARTWORK") + leftImg:SetAllPoints() + leftImg:SetTexture(gryphonTex) + leftCap._sfTex = leftImg + self.gryphonLeft = leftCap + + local rightCap = CreateFrame("Frame", "SFramesGryphonRight", UIParent) + rightCap:SetWidth(capW) + rightCap:SetHeight(capH) + local rightImg = rightCap:CreateTexture(nil, "ARTWORK") + rightImg:SetAllPoints() + rightImg:SetTexture(gryphonTex) + rightImg:SetTexCoord(1, 0, 0, 1) + rightCap._sfTex = rightImg + self.gryphonRight = rightCap + + + -- === RIGHT-SIDE BARS === + local rightHolder = CreateFrame("Frame", "SFramesRightBarHolder", UIParent) + rightHolder:SetWidth(size * 2 + gap) + rightHolder:SetHeight((size + gap) * BUTTONS_PER_ROW - gap) + rightHolder:SetPoint("RIGHT", UIParent, "RIGHT", db.rightOffsetX, db.rightOffsetY) + rightHolder:SetScale(db.scale) + self.rightHolder = rightHolder + + if MultiBarRight then + MultiBarRight:SetParent(rightHolder) + MultiBarRight:ClearAllPoints() + MultiBarRight:SetPoint("TOPRIGHT", rightHolder, "TOPRIGHT", 0, 0) + MultiBarRight:Show() + end + + self.rightButtons = {} + for i = 1, BUTTONS_PER_ROW do + local b = _G["MultiBarRightButton" .. i] + if b then + b:Show() + StyleButton(b) + table.insert(self.rightButtons, b) + end + end + + if MultiBarLeft then + MultiBarLeft:SetParent(rightHolder) + MultiBarLeft:ClearAllPoints() + MultiBarLeft:SetPoint("TOPRIGHT", MultiBarRight or rightHolder, "TOPLEFT", -gap, 0) + MultiBarLeft:Show() + end + + self.leftButtons = {} + for i = 1, BUTTONS_PER_ROW do + local b = _G["MultiBarLeftButton" .. i] + if b then + b:Show() + StyleButton(b) + table.insert(self.leftButtons, b) + end + end + + -- === STANCE BAR === + local stanceHolder = CreateFrame("Frame", "SFramesStanceHolder", UIParent) + stanceHolder:SetWidth(rowWidth) + stanceHolder:SetHeight(size) + stanceHolder:SetScale(db.scale) + self.stanceHolder = stanceHolder + + self.stanceButtons = {} + for i = 1, 10 do + local b = _G["ShapeshiftButton" .. i] + if b then + b:SetParent(stanceHolder) + StyleButton(b) + table.insert(self.stanceButtons, b) + end + end + + -- === PET BAR === + local petHolder = CreateFrame("Frame", "SFramesPetHolder", UIParent) + petHolder:SetWidth(rowWidth) + petHolder:SetHeight(size) + petHolder:SetScale(db.scale) + self.petHolder = petHolder + + self.petButtons = {} + for i = 1, 10 do + local b = _G["PetActionButton" .. i] + if b then + b:SetParent(petHolder) + StylePetButton(b) + table.insert(self.petButtons, b) + end + end + +end + +-------------------------------------------------------------------------------- +-- Adaptive text sizing: scale hotkey / count / macro-name fonts to button size +-------------------------------------------------------------------------------- +local function UpdateButtonTexts(buttons, btnSize, showHotkey, showMacroName) + local fontSize = math.max(6, math.floor(btnSize * 0.25 + 0.5)) + local nameSize = math.max(6, math.floor(btnSize * 0.22 + 0.5)) + local font = SFrames:GetFont() + for _, b in ipairs(buttons) do + local bname = b:GetName() + local hotkey = _G[bname .. "HotKey"] + if hotkey then + hotkey:SetFont(font, fontSize, "OUTLINE") + if showHotkey then hotkey:Show() else hotkey:Hide() end + end + local count = _G[bname .. "Count"] + if count then + count:SetFont(font, fontSize, "OUTLINE") + end + local mn = _G[bname .. "Name"] + if mn then + mn:SetFont(font, nameSize, "OUTLINE") + if showMacroName then mn:Show() else mn:Hide() end + end + end +end + +-------------------------------------------------------------------------------- +-- Apply config +-------------------------------------------------------------------------------- +function AB:ApplyConfig() + if not self.anchor then return end + local db = self:GetDB() + + local size = db.buttonSize + local gap = db.buttonGap + local rowWidth = (size + gap) * BUTTONS_PER_ROW - gap + local colHeight = (size + gap) * BUTTONS_PER_ROW - gap + local totalHeight = db.barCount * size + (db.barCount - 1) * gap + + -- Bottom bars anchor + self.anchor:SetScale(db.scale) + self.anchor:SetWidth(rowWidth) + self.anchor:SetHeight(totalHeight) + + -- Row 1 + self.row1:SetWidth(rowWidth) + self.row1:SetHeight(size) + LayoutRow(self.mainButtons, self.row1, size, gap) + + -- Bonus bar (druid forms) — same layout as row 1, overlays when active + if self.bonusButtons and BonusActionBarFrame then + BonusActionBarFrame:SetWidth(rowWidth) + BonusActionBarFrame:SetHeight(size) + LayoutRow(self.bonusButtons, BonusActionBarFrame, size, gap) + end + + -- Row 2 + if self.row2 then + self.row2:SetWidth(rowWidth) + self.row2:SetHeight(size) + self.row2:ClearAllPoints() + self.row2:SetPoint("BOTTOMLEFT", self.row1, "TOPLEFT", 0, gap) + LayoutRow(self.bar2Buttons, self.row2, size, gap) + if db.barCount >= 2 then self.row2:Show() else self.row2:Hide() end + end + + -- Row 3 + if self.row3 then + self.row3:SetWidth(rowWidth) + self.row3:SetHeight(size) + self.row3:ClearAllPoints() + self.row3:SetPoint("BOTTOMLEFT", self.row2 or self.row1, "TOPLEFT", 0, gap) + LayoutRow(self.bar3Buttons, self.row3, size, gap) + if db.barCount >= 3 then self.row3:Show() else self.row3:Hide() end + end + + -- Right-side bars + if self.rightHolder then + self.rightHolder:SetScale(db.scale) + self.rightHolder:SetWidth(size * 2 + gap) + self.rightHolder:SetHeight(colHeight) + + if MultiBarRight then + MultiBarRight:SetWidth(size) + MultiBarRight:SetHeight(colHeight) + MultiBarRight:ClearAllPoints() + MultiBarRight:SetPoint("TOPRIGHT", self.rightHolder, "TOPRIGHT", 0, 0) + LayoutColumn(self.rightButtons, MultiBarRight, size, gap) + end + + if MultiBarLeft then + MultiBarLeft:SetWidth(size) + MultiBarLeft:SetHeight(colHeight) + MultiBarLeft:ClearAllPoints() + MultiBarLeft:SetPoint("TOPRIGHT", MultiBarRight or self.rightHolder, "TOPLEFT", -gap, 0) + LayoutColumn(self.leftButtons, MultiBarLeft, size, gap) + end + + if db.showRightBars then + self.rightHolder:Show() + else + self.rightHolder:Hide() + end + end + + -- Hotkey / macro name(使用缓存表,避免每次 ApplyConfig 都分配临时表) + if not self.allButtonsCache then + self.allButtonsCache = {} + for _, b in ipairs(self.mainButtons) do table.insert(self.allButtonsCache, b) end + if self.bonusButtons then + for _, b in ipairs(self.bonusButtons) do table.insert(self.allButtonsCache, b) end + end + for _, b in ipairs(self.bar2Buttons) do table.insert(self.allButtonsCache, b) end + for _, b in ipairs(self.bar3Buttons) do table.insert(self.allButtonsCache, b) end + for _, b in ipairs(self.rightButtons) do table.insert(self.allButtonsCache, b) end + for _, b in ipairs(self.leftButtons) do table.insert(self.allButtonsCache, b) end + for _, b in ipairs(self.stanceButtons) do table.insert(self.allButtonsCache, b) end + for _, b in ipairs(self.petButtons) do table.insert(self.allButtonsCache, b) end + end + + -- Hotkey / macro name — per-group with adaptive font size + local showHK = db.showHotkey + local showMN = db.showMacroName + local smallSize = db.smallBarSize + UpdateButtonTexts(self.mainButtons, size, showHK, showMN) + if self.bonusButtons then + UpdateButtonTexts(self.bonusButtons, size, showHK, showMN) + end + UpdateButtonTexts(self.bar2Buttons, size, showHK, showMN) + UpdateButtonTexts(self.bar3Buttons, size, showHK, showMN) + UpdateButtonTexts(self.rightButtons, size, showHK, showMN) + UpdateButtonTexts(self.leftButtons, size, showHK, showMN) + UpdateButtonTexts(self.stanceButtons, smallSize, showHK, showMN) + UpdateButtonTexts(self.petButtons, smallSize, showHK, showMN) + + -- Button visual style (rounded corners, inner shadow) + local isRounded = db.buttonRounded + local isShadow = db.buttonInnerShadow + for _, b in ipairs(self.allButtonsCache) do + ApplyButtonVisuals(b, isRounded, isShadow) + end + + -- 始终显示动作条:强制 showgrid,让空格子也显示背景框 + self:ApplyAlwaysShowGrid() + + self:ApplyPosition() + self:ApplyStanceBar() + self:ApplyPetBar() + self:ApplyGryphon() + self:UpdateBonusBar() +end + +-------------------------------------------------------------------------------- +-- Always-show-grid: 对当前所有已显示行中的空格子,强制显示背景框和格子材质 +-- 不控制哪些行显示/隐藏,只控制空格子是否绘制背景 +-------------------------------------------------------------------------------- +function AB:ApplyAlwaysShowGrid() + local db = self:GetDB() + + -- 收集所有当前参与布局的按钮(已样式化的按钮) + local allBars = { + self.mainButtons, + self.bar2Buttons, + self.bar3Buttons, + self.rightButtons, + self.leftButtons, + } + + if db.alwaysShowGrid then + for _, bar in ipairs(allBars) do + if bar then + for _, b in ipairs(bar) do + if styledButtons[b] then + -- showgrid > 0 时 Blizzard 不会隐藏空格按钮 + b.showgrid = 1 + b:Show() + -- 背景子帧始终随按钮显示 + if b.sfBackdrop then b.sfBackdrop:Show() end + end + end + end + end + else + for _, bar in ipairs(allBars) do + if bar then + for _, b in ipairs(bar) do + if styledButtons[b] then + b.showgrid = 0 + -- 恢复 Blizzard 默认:无技能的格子隐藏 + local ok, action = pcall(ActionButton_GetPagedID, b) + if ok and action and not HasAction(action) then + b:Hide() + end + end + end + end + end + end + + if BonusActionBarFrame and BonusActionBarFrame:IsShown() then + for _, b in ipairs(self.mainButtons) do + b:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Stance bar +-------------------------------------------------------------------------------- +function AB:ApplyStanceBar() + local db = self:GetDB() + local size = db.smallBarSize + local gap = db.buttonGap + + local numForms = GetNumShapeshiftForms and GetNumShapeshiftForms() or 0 + + if not db.showStanceBar or numForms == 0 then + if self.stanceHolder then self.stanceHolder:Hide() end + return + end + + self.stanceHolder:SetScale(db.scale) + local topRow = self.row1 + if db.barCount >= 3 and self.row3 then topRow = self.row3 + elseif db.barCount >= 2 and self.row2 then topRow = self.row2 end + + self.stanceHolder:ClearAllPoints() + self.stanceHolder:SetPoint("BOTTOMLEFT", topRow, "TOPLEFT", 0, gap) + + local totalW = numForms * size + (numForms - 1) * gap + self.stanceHolder:SetWidth(totalW) + self.stanceHolder:SetHeight(size) + self.stanceHolder:Show() + + for i, b in ipairs(self.stanceButtons) do + if i <= numForms then + b:SetWidth(size) + b:SetHeight(size) + b:ClearAllPoints() + if i == 1 then + b:SetPoint("BOTTOMLEFT", self.stanceHolder, "BOTTOMLEFT", 0, 0) + else + b:SetPoint("LEFT", self.stanceButtons[i - 1], "RIGHT", gap, 0) + end + b:Show() + else + b:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Pet bar +-------------------------------------------------------------------------------- +function AB:ApplyPetBar() + local db = self:GetDB() + local size = db.smallBarSize + local gap = db.buttonGap + + local hasPet = HasPetUI and HasPetUI() + if not db.showPetBar or not hasPet then + if self.petHolder then self.petHolder:Hide() end + return + end + + self.petHolder:SetScale(db.scale) + + self.petHolder:ClearAllPoints() + local numForms = GetNumShapeshiftForms and GetNumShapeshiftForms() or 0 + if db.showStanceBar and numForms > 0 and self.stanceHolder:IsShown() then + self.petHolder:SetPoint("BOTTOMLEFT", self.stanceHolder, "TOPLEFT", 0, gap) + else + local topRow = self.row1 + if db.barCount >= 3 and self.row3 then topRow = self.row3 + elseif db.barCount >= 2 and self.row2 then topRow = self.row2 end + self.petHolder:SetPoint("BOTTOMLEFT", topRow, "TOPLEFT", 0, gap) + end + + local numPet = 10 + local totalW = numPet * size + (numPet - 1) * gap + self.petHolder:SetWidth(totalW) + self.petHolder:SetHeight(size) + self.petHolder:Show() + + for i, b in ipairs(self.petButtons) do + b:SetWidth(size) + b:SetHeight(size) + b:ClearAllPoints() + if i == 1 then + b:SetPoint("BOTTOMLEFT", self.petHolder, "BOTTOMLEFT", 0, 0) + else + b:SetPoint("LEFT", self.petButtons[i - 1], "RIGHT", gap, 0) + end + b:Show() + end +end + +-------------------------------------------------------------------------------- +-- Gryphon end-caps +-------------------------------------------------------------------------------- +function AB:ApplyGryphon() + if not self.gryphonLeft or not self.gryphonRight then return end + if not self.anchor then return end + + local db = self:GetDB() + + if db.hideGryphon then + self.gryphonLeft:Hide() + self.gryphonRight:Hide() + return + end + + -- 切换纹理样式 + local texPath = GetGryphonTexPath(db.gryphonStyle) + if self.gryphonLeft._sfTex then + self.gryphonLeft._sfTex:SetTexture(texPath) + end + if self.gryphonRight._sfTex then + self.gryphonRight._sfTex:SetTexture(texPath) + self.gryphonRight._sfTex:SetTexCoord(1, 0, 0, 1) + end + + local scale = db.scale or 1.0 + local gw = db.gryphonWidth or 64 + local gh = db.gryphonHeight or 64 + + self.gryphonLeft:SetScale(scale) + self.gryphonRight:SetScale(scale) + self.gryphonLeft:SetWidth(gw) + self.gryphonLeft:SetHeight(gh) + self.gryphonRight:SetWidth(gw) + self.gryphonRight:SetHeight(gh) + + if db.gryphonOnTop then + self.gryphonLeft:SetFrameLevel(self.anchor:GetFrameLevel() + 10) + self.gryphonRight:SetFrameLevel(self.anchor:GetFrameLevel() + 10) + else + self.gryphonLeft:SetFrameLevel(0) + self.gryphonRight:SetFrameLevel(0) + end + + local ox = db.gryphonOffsetX or 30 + local oy = db.gryphonOffsetY or 0 + + self.gryphonLeft:ClearAllPoints() + self.gryphonLeft:SetPoint("BOTTOMRIGHT", self.anchor, "BOTTOMLEFT", ox, oy) + + self.gryphonRight:ClearAllPoints() + self.gryphonRight:SetPoint("BOTTOMLEFT", self.anchor, "BOTTOMRIGHT", -ox, oy) + + self.gryphonLeft:Show() + self.gryphonRight:Show() +end + +-------------------------------------------------------------------------------- +-- Slider-based position update +-------------------------------------------------------------------------------- +function AB:ApplyPosition() + local db = self:GetDB() + if self.anchor then + self.anchor:ClearAllPoints() + self.anchor:SetPoint("BOTTOM", UIParent, "BOTTOM", db.bottomOffsetX, db.bottomOffsetY) + end + if self.rightHolder then + self.rightHolder:ClearAllPoints() + self.rightHolder:SetPoint("RIGHT", UIParent, "RIGHT", db.rightOffsetX, db.rightOffsetY) + end +end + +-------------------------------------------------------------------------------- +-- Page indicator: shows which page / bonus offset the main bar is displaying +-------------------------------------------------------------------------------- +function AB:UpdatePageIndicator() + if not self.pageIndicator then return end + local page = CURRENT_ACTIONBAR_PAGE or 1 + local offset = GetBonusBarOffset and GetBonusBarOffset() or 0 + if offset > 0 and page == 1 then + self.pageIndicator:SetTextColor(1.0, 0.5, 0.0) + self.pageIndicator:SetText("B" .. offset) + else + self.pageIndicator:SetTextColor(0.9, 0.8, 0.2) + self.pageIndicator:SetText(tostring(page)) + end +end + +-------------------------------------------------------------------------------- +-- Bonus bar show/hide (warriors, druids, rogues — any class with stance/form) +-- Blizzard's ShowBonusActionBar() is triggered in MainMenuBar's OnEvent, but we +-- unregistered MainMenuBar events, so we must manage this ourselves. +-------------------------------------------------------------------------------- +function AB:UpdateBonusBar() + if not BonusActionBarFrame then return end + local offset = GetBonusBarOffset and GetBonusBarOffset() or 0 + local page = CURRENT_ACTIONBAR_PAGE or 1 + if page == 1 and offset > 0 then + for _, b in ipairs(self.mainButtons) do b:Hide() end + BonusActionBarFrame:Show() + for i = 0, 4 do + local tex = _G["BonusActionBarTexture" .. i] + if tex then tex:SetAlpha(0) end + end + local db = self:GetDB() + local size = db.buttonSize + local gap = db.buttonGap + local rowWidth = (size + gap) * BUTTONS_PER_ROW - gap + BonusActionBarFrame:ClearAllPoints() + BonusActionBarFrame:SetPoint("BOTTOMLEFT", self.row1, "BOTTOMLEFT", 0, 0) + BonusActionBarFrame:SetWidth(rowWidth) + BonusActionBarFrame:SetHeight(size) + BonusActionBarFrame:SetFrameLevel(self.row1:GetFrameLevel() + 5) + LayoutRow(self.bonusButtons, BonusActionBarFrame, size, gap) + local btnLevel = BonusActionBarFrame:GetFrameLevel() + 1 + for _, b in ipairs(self.bonusButtons) do + b:EnableMouse(true) + b:SetFrameLevel(btnLevel) + if b.sfBackdrop then + b.sfBackdrop:SetFrameLevel(btnLevel - 1) + end + end + else + BonusActionBarFrame:Hide() + for _, b in ipairs(self.mainButtons) do b:Show() end + end + self:UpdatePageIndicator() +end + +-------------------------------------------------------------------------------- +-- Range coloring - uses a separate red overlay; NEVER touches icon VertexColor +-------------------------------------------------------------------------------- +local function GetOrCreateRangeOverlay(b) + if b.sfRangeOverlay then return b.sfRangeOverlay end + local inset = b.sfIconInset or 2 + local ov = b:CreateTexture(nil, "OVERLAY") + ov:SetTexture("Interface\\Buttons\\WHITE8X8") + ov:SetPoint("TOPLEFT", b, "TOPLEFT", inset, -inset) + ov:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -inset, inset) + ov:SetVertexColor(1.0, 0.1, 0.1, 0.35) + ov:Hide() + b.sfRangeOverlay = ov + return ov +end + +function AB:SetupRangeCheck() + local rangeFrame = CreateFrame("Frame", "SFramesActionBarRangeCheck", UIParent) + rangeFrame.timer = 0 + self.rangeFrame = rangeFrame + + rangeFrame:SetScript("OnUpdate", function() + this.timer = this.timer + arg1 + if this.timer < 0.2 then return end + this.timer = 0 + + local db = AB:GetDB() + if not db.rangeColoring then return end + + local function CheckRange(buttons, idFunc) + local getID = idFunc or ActionButton_GetPagedID + if not getID then return end + for _, b in ipairs(buttons) do + local ok, action = pcall(getID, b) + if ok and action and HasAction(action) then + local inRange = IsActionInRange(action) + local ov = GetOrCreateRangeOverlay(b) + if inRange == 0 then + ov:Show() + else + ov:Hide() + end + else + if b.sfRangeOverlay then b.sfRangeOverlay:Hide() end + end + end + end + + CheckRange(AB.mainButtons) + if AB.bonusButtons and BonusActionBarFrame and BonusActionBarFrame:IsShown() then + CheckRange(AB.bonusButtons, BonusActionButton_GetPagedID) + end + CheckRange(AB.bar2Buttons) + CheckRange(AB.bar3Buttons) + end) +end + + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function AB:Initialize() + local db = self:GetDB() + if not db.enable then return end + + self:HideBlizzardBars() + self:CreateBars() + self:ApplyConfig() + self:SetupRangeCheck() + + -- Hook Blizzard ActionButton functions that reset NormalTexture. + -- These use 'this' (no explicit args in vanilla), so parameterless hook is safe. + local function SuppressNormalTexture() + if this and styledButtons[this] then + local nt = _G[this:GetName() .. "NormalTexture"] + HideNormalTexture(nt) + end + end + -- alwaysShowGrid 模式下,阻止空格子被隐藏 + local function ForceShowIfGrid() + if this and styledButtons[this] then + local adb = AB:GetDB() + if adb.alwaysShowGrid then + this.showgrid = 1 + this:Show() + if this.sfBackdrop then this.sfBackdrop:Show() end + end + end + end + local hookTargets = { + "ActionButton_Update", + "ActionButton_UpdateUsable", + "ActionButton_UpdateState", + } + for _, fn in ipairs(hookTargets) do + local orig = _G[fn] + if orig then + _G[fn] = function() + pcall(orig) + SuppressNormalTexture() + ForceShowIfGrid() + end + end + end + -- Hook ActionButton_ShowGrid / ActionButton_HideGrid + local origShowGrid = _G["ActionButton_ShowGrid"] + local origHideGrid = _G["ActionButton_HideGrid"] + + -- 判断某个按钮是否属于主动作条(ActionButton1-12) + local function IsMainButton(b) + if not b or not AB.mainButtons then return false end + for _, mb in ipairs(AB.mainButtons) do + if mb == b then return true end + end + return false + end + + -- 当前是否处于 BonusBar 激活状态(潜行、变身等) + local function IsBonusBarActive() + local offset = GetBonusBarOffset and GetBonusBarOffset() or 0 + local page = CURRENT_ACTIONBAR_PAGE or 1 + return (page == 1 and offset > 0) + end + + if origShowGrid then + _G["ActionButton_ShowGrid"] = function() + if this and this.showgrid == nil then this.showgrid = 0 end + if this and styledButtons[this] and IsMainButton(this) and IsBonusBarActive() then + SuppressNormalTexture() + return + end + pcall(origShowGrid) + SuppressNormalTexture() + end + end + if origHideGrid then + _G["ActionButton_HideGrid"] = function() + if this and this.showgrid == nil then this.showgrid = 0 end + if this and styledButtons[this] then + local adb = AB:GetDB() + if IsMainButton(this) and IsBonusBarActive() then + this.showgrid = 0 + this:Hide() + SuppressNormalTexture() + return + end + if adb.alwaysShowGrid then + this.showgrid = 1 + this:Show() + SuppressNormalTexture() + return + end + end + pcall(origHideGrid) + SuppressNormalTexture() + end + end + + -- BonusActionButton functions take an explicit button arg — must pass it through + local function SuppressNT(b) + if b and styledButtons[b] then + local nt = _G[b:GetName() .. "NormalTexture"] + HideNormalTexture(nt) + end + end + local origBonusUpdate = _G["BonusActionButton_Update"] + if origBonusUpdate then + _G["BonusActionButton_Update"] = function(button) + pcall(origBonusUpdate, button) + local b = button or this + SuppressNT(b) + if b and styledButtons[b] and AB.bonusButtons then + local db = AB:GetDB() + local size = db.buttonSize + local gap = db.buttonGap + for idx, btn in ipairs(AB.bonusButtons) do + if btn == b then + btn:SetWidth(size) + btn:SetHeight(size) + btn:ClearAllPoints() + if idx == 1 then + btn:SetPoint("BOTTOMLEFT", BonusActionBarFrame, "BOTTOMLEFT", 0, 0) + else + btn:SetPoint("LEFT", AB.bonusButtons[idx - 1], "RIGHT", gap, 0) + end + break + end + end + end + end + end + local origBonusUsable = _G["BonusActionButton_UpdateUsable"] + if origBonusUsable then + _G["BonusActionButton_UpdateUsable"] = function(button) + pcall(origBonusUsable, button) + SuppressNT(button or this) + end + end + + -- Hook PetActionBar_Update: Blizzard resets NormalTexture2 vertex color/alpha + local origPetBarUpdate = PetActionBar_Update + if origPetBarUpdate then + PetActionBar_Update = function() + pcall(origPetBarUpdate) + for _, b in ipairs(AB.petButtons or {}) do + KillPetNormalTextures(b) + end + end + end + + -- Hook MultiActionBar_Update: Blizzard 在 PLAYER_ENTERING_WORLD 等事件中调用此函数, + -- 它会根据经验条/声望条的高度重设 MultiBarBottomLeft/Right 的位置,覆盖我们的布局。 + -- 仅修正 row2/row3 的锚点,不调用 ApplyConfig 避免触发 MultiBarBottomLeft:Show 再次递归。 + local origMultiActionBarUpdate = MultiActionBar_Update + if origMultiActionBarUpdate then + local inMultiBarHook = false + MultiActionBar_Update = function() + pcall(origMultiActionBarUpdate) + if AB.anchor and not inMultiBarHook then + inMultiBarHook = true + local g = AB:GetDB().buttonGap + if AB.row2 then + AB.row2:ClearAllPoints() + AB.row2:SetPoint("BOTTOMLEFT", AB.row1, "TOPLEFT", 0, g) + end + if AB.row3 then + AB.row3:ClearAllPoints() + AB.row3:SetPoint("BOTTOMLEFT", AB.row2 or AB.row1, "TOPLEFT", 0, g) + end + inMultiBarHook = false + end + end + end + + -- Hook UIParent_ManageFramePositions: Blizzard 在进出战斗、切换地图等场景调用此 + -- 函数重排 MultiBar 位置(会考虑经验条/声望条高度),覆盖我们的布局。 + -- 在原函数执行完毕后立即修正 row2/row3 锚点。 + local origManageFramePositions = UIParent_ManageFramePositions + if origManageFramePositions then + UIParent_ManageFramePositions = function(a1, a2, a3) + origManageFramePositions(a1, a2, a3) + if AB.anchor and AB.row1 then + local g = AB:GetDB().buttonGap + if AB.row2 then + AB.row2:ClearAllPoints() + AB.row2:SetPoint("BOTTOMLEFT", AB.row1, "TOPLEFT", 0, g) + end + if AB.row3 then + AB.row3:ClearAllPoints() + AB.row3:SetPoint("BOTTOMLEFT", AB.row2 or AB.row1, "TOPLEFT", 0, g) + end + end + if SFrames and SFrames.Chat then + SFrames.Chat:ReanchorChatFrames() + end + end + end + + -- Direct event-driven bonus bar update + safety poller. + -- Events trigger immediate update; poller catches any missed state every 0.2s. + SFrames:RegisterEvent("PLAYER_ENTERING_WORLD", function() + AB:UpdateBonusBar() + AB:ApplyConfig() + AB:RefreshAllHotkeys() + end) + + SFrames:RegisterEvent("UPDATE_BINDINGS", function() + AB:RefreshAllHotkeys() + end) + + SFrames:RegisterEvent("UPDATE_BONUS_ACTIONBAR", function() + AB:UpdateBonusBar() + end) + + SFrames:RegisterEvent("ACTIONBAR_PAGE_CHANGED", function() + AB:UpdateBonusBar() + end) + + SFrames:RegisterEvent("UPDATE_SHAPESHIFT_FORMS", function() + AB:UpdateBonusBar() + AB:ApplyStanceBar() + AB:ApplyPetBar() + end) + + -- Safety poller: if Blizzard code or timing issues cause a mismatch, + -- correct it within 0.2 seconds. + local bonusPoller = CreateFrame("Frame") + bonusPoller.timer = 0 + bonusPoller:SetScript("OnUpdate", function() + this.timer = this.timer + arg1 + if this.timer < 0.2 then return end + this.timer = 0 + local offset = GetBonusBarOffset and GetBonusBarOffset() or 0 + local page = CURRENT_ACTIONBAR_PAGE or 1 + local want = (page == 1 and offset > 0) + local have = BonusActionBarFrame and BonusActionBarFrame:IsShown() + if (want and not have) or (not want and have) then + AB:UpdateBonusBar() + elseif have then + local db = AB:GetDB() + local size = db.buttonSize + local gap = db.buttonGap + local rowWidth = (size + gap) * BUTTONS_PER_ROW - gap + BonusActionBarFrame:ClearAllPoints() + BonusActionBarFrame:SetPoint("BOTTOMLEFT", AB.row1, "BOTTOMLEFT", 0, 0) + BonusActionBarFrame:SetWidth(rowWidth) + BonusActionBarFrame:SetHeight(size) + BonusActionBarFrame:SetFrameLevel(AB.row1:GetFrameLevel() + 5) + LayoutRow(AB.bonusButtons, BonusActionBarFrame, size, gap) + local btnLevel = BonusActionBarFrame:GetFrameLevel() + 1 + for _, b in ipairs(AB.bonusButtons) do + b:EnableMouse(true) + b:SetFrameLevel(btnLevel) + if b.sfBackdrop then + b.sfBackdrop:SetFrameLevel(btnLevel - 1) + end + end + for _, b in ipairs(AB.mainButtons) do + if b:IsShown() then b:Hide() end + end + end + AB:UpdatePageIndicator() + end) + + SFrames:RegisterEvent("PET_BAR_UPDATE", function() + AB:ApplyPetBar() + end) + + SFrames:RegisterEvent("UNIT_PET", function() + if arg1 == "player" then + AB:ApplyPetBar() + end + end) + + -- 进出战斗和切换区域时立即修正行间距,防止 Blizzard 布局覆盖 + local function FixRowAnchors() + if not AB.anchor or not AB.row1 then return end + local g = AB:GetDB().buttonGap + if AB.row2 then + AB.row2:ClearAllPoints() + AB.row2:SetPoint("BOTTOMLEFT", AB.row1, "TOPLEFT", 0, g) + end + if AB.row3 then + AB.row3:ClearAllPoints() + AB.row3:SetPoint("BOTTOMLEFT", AB.row2 or AB.row1, "TOPLEFT", 0, g) + end + end + + SFrames:RegisterEvent("PLAYER_REGEN_DISABLED", FixRowAnchors) + SFrames:RegisterEvent("PLAYER_REGEN_ENABLED", FixRowAnchors) + SFrames:RegisterEvent("ZONE_CHANGED", FixRowAnchors) + SFrames:RegisterEvent("ZONE_CHANGED_NEW_AREA", FixRowAnchors) + SFrames:RegisterEvent("ZONE_CHANGED_INDOORS", FixRowAnchors) +end + +-------------------------------------------------------------------------------- +-- Key Binding Mode +-- Hover any action/stance/pet button and press a key to bind it. +-- ESC exits. Right-click clears. Mouse wheel supported. +-------------------------------------------------------------------------------- +local BUTTON_BINDING_MAP = {} + +do + for i = 1, 12 do + BUTTON_BINDING_MAP["ActionButton" .. i] = "ACTIONBUTTON" .. i + BUTTON_BINDING_MAP["MultiBarBottomLeftButton" .. i] = "MULTIACTIONBAR1BUTTON" .. i + BUTTON_BINDING_MAP["MultiBarBottomRightButton" .. i] = "MULTIACTIONBAR2BUTTON" .. i + BUTTON_BINDING_MAP["MultiBarRightButton" .. i] = "MULTIACTIONBAR3BUTTON" .. i + BUTTON_BINDING_MAP["MultiBarLeftButton" .. i] = "MULTIACTIONBAR4BUTTON" .. i + end + for i = 1, 10 do + BUTTON_BINDING_MAP["ShapeshiftButton" .. i] = "SHAPESHIFTBUTTON" .. i + BUTTON_BINDING_MAP["PetActionButton" .. i] = "BONUSACTIONBUTTON" .. i + end +end + +-------------------------------------------------------------------------------- +-- Hotkey text refresh: update the HotKey FontString on buttons to reflect +-- current keybindings (works for all bars including stance and pet). +-------------------------------------------------------------------------------- +local function RefreshButtonHotkey(button) + if not button then return end + local name = button:GetName() + if not name then return end + local cmd = BUTTON_BINDING_MAP[name] + if not cmd then return end + local hotkey = _G[name .. "HotKey"] + if not hotkey then return end + local key1 = GetBindingKey(cmd) + if key1 then + local text = key1 + if GetBindingText then + text = GetBindingText(key1, "KEY_", 1) or key1 + end + hotkey:SetText(text) + else + hotkey:SetText("") + end +end + +function AB:RefreshAllHotkeys() + local function Refresh(list) + if not list then return end + for _, b in ipairs(list) do RefreshButtonHotkey(b) end + end + Refresh(self.mainButtons) + Refresh(self.bonusButtons) + Refresh(self.bar2Buttons) + Refresh(self.bar3Buttons) + Refresh(self.rightButtons) + Refresh(self.leftButtons) + Refresh(self.stanceButtons) + Refresh(self.petButtons) +end + +local IGNORE_KEYS = { + LSHIFT = true, RSHIFT = true, + LCTRL = true, RCTRL = true, + LALT = true, RALT = true, + UNKNOWN = true, +} + +local function BuildKeyString(key) + if IGNORE_KEYS[key] then return nil end + local mods = "" + if IsAltKeyDown() then mods = mods .. "ALT-" end + if IsControlKeyDown() then mods = mods .. "CTRL-" end + if IsShiftKeyDown() then mods = mods .. "SHIFT-" end + return mods .. key +end + +local function GetButtonBindingCmd(button) + if not button then return nil end + local name = button:GetName() + return name and BUTTON_BINDING_MAP[name] +end + +local function ShortKeyText(key) + if not key then return "" end + key = string.gsub(key, "SHIFT%-", "S-") + key = string.gsub(key, "CTRL%-", "C-") + key = string.gsub(key, "ALT%-", "A-") + key = string.gsub(key, "MOUSEWHEELUP", "WhlUp") + key = string.gsub(key, "MOUSEWHEELDOWN", "WhlDn") + return key +end + +local keyBindActive = false +local hoveredBindButton = nil +local keyBindOverlays = {} +local captureFrame = nil +local statusFrame = nil + +local function UpdateOverlayText(button) + local ov = keyBindOverlays[button] + if not ov then return end + local cmd = GetButtonBindingCmd(button) + if not cmd then ov.label:SetText(""); return end + local key1, key2 = GetBindingKey(cmd) + local t = "" + if key1 then t = ShortKeyText(key1) end + if key2 then t = t .. "\n" .. ShortKeyText(key2) end + ov.label:SetText(t) +end + +local function CreateBindOverlay(button) + if keyBindOverlays[button] then return keyBindOverlays[button] end + + local ov = CreateFrame("Button", nil, button) + ov:SetAllPoints(button) + ov:SetFrameLevel(button:GetFrameLevel() + 10) + ov:RegisterForClicks("RightButtonUp") + + local bg = ov:CreateTexture(nil, "BACKGROUND") + bg:SetAllPoints() + bg:SetTexture(0, 0, 0, 0.55) + + local label = ov:CreateFontString(nil, "OVERLAY") + label:SetFont(SFrames:GetFont(), 9, "OUTLINE") + label:SetPoint("CENTER", ov, "CENTER", 0, 0) + label:SetTextColor(1, 0.82, 0) + ov.label = label + + local highlight = ov:CreateTexture(nil, "HIGHLIGHT") + highlight:SetAllPoints() + highlight:SetTexture(1, 1, 1, 0.18) + + ov:SetScript("OnEnter", function() + hoveredBindButton = button + GameTooltip:SetOwner(this, "ANCHOR_TOP") + local cmd = GetButtonBindingCmd(button) + if cmd then + GameTooltip:AddLine(cmd, 1, 0.82, 0) + local k1, k2 = GetBindingKey(cmd) + if k1 then GameTooltip:AddLine("Key 1: " .. k1, 1, 1, 1) end + if k2 then GameTooltip:AddLine("Key 2: " .. k2, 0.7, 0.7, 0.7) end + end + GameTooltip:AddLine("Press key to bind / Wheel to bind", 0.5, 0.8, 0.5) + GameTooltip:AddLine("Right-click to clear", 0.8, 0.5, 0.5) + GameTooltip:Show() + end) + ov:SetScript("OnLeave", function() + hoveredBindButton = nil + GameTooltip:Hide() + end) + ov:SetScript("OnClick", function() + if arg1 == "RightButton" then + local cmd = GetButtonBindingCmd(button) + if cmd then + local k1, k2 = GetBindingKey(cmd) + if k2 then SetBinding(k2, nil) end + if k1 then SetBinding(k1, nil) end + SaveBindings(2) + UpdateOverlayText(button) + RefreshButtonHotkey(button) + DEFAULT_CHAT_FRAME:AddMessage("|cff88ccff[Nanami-UI]|r Cleared bindings for " .. cmd) + end + end + end) + + ov:EnableMouseWheel(true) + ov:SetScript("OnMouseWheel", function() + local cmd = GetButtonBindingCmd(button) + if not cmd then return end + local wheel = (arg1 > 0) and "MOUSEWHEELUP" or "MOUSEWHEELDOWN" + local mods = "" + if IsAltKeyDown() then mods = mods .. "ALT-" end + if IsControlKeyDown() then mods = mods .. "CTRL-" end + if IsShiftKeyDown() then mods = mods .. "SHIFT-" end + local keyStr = mods .. wheel + local old = GetBindingAction(keyStr) + if old and old ~= "" and old ~= cmd then SetBinding(keyStr, nil) end + SetBinding(keyStr, cmd) + SaveBindings(2) + UpdateOverlayText(button) + RefreshButtonHotkey(button) + DEFAULT_CHAT_FRAME:AddMessage("|cff88ccff[Nanami-UI]|r " .. keyStr .. " -> " .. cmd) + end) + + ov:Hide() + keyBindOverlays[button] = ov + return ov +end + +function AB:EnterKeyBindMode() + if keyBindActive then return end + keyBindActive = true + + local allButtons = {} + local function Collect(list) + if not list then return end + for _, b in ipairs(list) do table.insert(allButtons, b) end + end + Collect(self.mainButtons) + Collect(self.bar2Buttons) + Collect(self.bar3Buttons) + Collect(self.rightButtons) + Collect(self.leftButtons) + Collect(self.stanceButtons) + Collect(self.petButtons) + + for _, b in ipairs(allButtons) do + local ov = CreateBindOverlay(b) + ov:Show() + UpdateOverlayText(b) + end + + if not captureFrame then + captureFrame = CreateFrame("Frame", "SFramesKeyBindCapture", UIParent) + captureFrame:SetFrameStrata("TOOLTIP") + captureFrame:SetWidth(1) + captureFrame:SetHeight(1) + captureFrame:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 0, 0) + captureFrame:EnableKeyboard(true) + captureFrame:EnableMouse(false) + captureFrame:SetScript("OnKeyDown", function() + local key = arg1 + if key == "ESCAPE" then + AB:ExitKeyBindMode() + return + end + if not hoveredBindButton then return end + local keyStr = BuildKeyString(key) + if not keyStr then return end + local cmd = GetButtonBindingCmd(hoveredBindButton) + if not cmd then return end + local old = GetBindingAction(keyStr) + if old and old ~= "" and old ~= cmd then SetBinding(keyStr, nil) end + SetBinding(keyStr, cmd) + SaveBindings(2) + UpdateOverlayText(hoveredBindButton) + RefreshButtonHotkey(hoveredBindButton) + DEFAULT_CHAT_FRAME:AddMessage("|cff88ccff[Nanami-UI]|r " .. keyStr .. " -> " .. cmd) + end) + end + captureFrame:Show() + + if not statusFrame then + statusFrame = CreateFrame("Frame", "SFramesKeyBindStatus", UIParent) + statusFrame:SetFrameStrata("TOOLTIP") + statusFrame:SetWidth(340) + statusFrame:SetHeight(100) + statusFrame:SetPoint("TOP", UIParent, "TOP", 0, -40) + statusFrame:SetMovable(true) + statusFrame:EnableMouse(true) + statusFrame:RegisterForDrag("LeftButton") + statusFrame:SetScript("OnDragStart", function() this:StartMoving() end) + statusFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + SFrames:CreateBackdrop(statusFrame) + + local title = statusFrame:CreateFontString(nil, "OVERLAY") + title:SetFont(SFrames:GetFont(), 13, "OUTLINE") + title:SetPoint("TOP", statusFrame, "TOP", 0, -12) + title:SetText("|cffffcc00按键绑定模式|r") + + local desc = statusFrame:CreateFontString(nil, "OVERLAY") + desc:SetFont(SFrames:GetFont(), 10, "OUTLINE") + desc:SetPoint("TOP", title, "BOTTOM", 0, -6) + desc:SetWidth(300) + desc:SetJustifyH("CENTER") + desc:SetText("悬停按钮 + 按键绑定 | 右键清除 | 滚轮绑定") + desc:SetTextColor(0.82, 0.82, 0.82) + + local saveBtn = CreateFrame("Button", "SFramesKeyBindSave", statusFrame, "UIPanelButtonTemplate") + saveBtn:SetWidth(120) + saveBtn:SetHeight(26) + saveBtn:SetPoint("BOTTOM", statusFrame, "BOTTOM", 0, 10) + saveBtn:SetText("保存并退出") + saveBtn:SetScript("OnClick", function() + AB:ExitKeyBindMode() + end) + local fs = saveBtn:GetFontString() + if fs then fs:SetFont(SFrames:GetFont(), 11) end + end + statusFrame:Show() + + DEFAULT_CHAT_FRAME:AddMessage("|cff88ccff[Nanami-UI]|r 按键绑定模式已开启。悬停按钮后按键绑定,右键清除,点击保存退出。") +end + +function AB:ExitKeyBindMode() + if not keyBindActive then return end + keyBindActive = false + hoveredBindButton = nil + + for _, ov in pairs(keyBindOverlays) do + ov:Hide() + end + if captureFrame then captureFrame:Hide() end + if statusFrame then statusFrame:Hide() end + + self:RefreshAllHotkeys() + DEFAULT_CHAT_FRAME:AddMessage("|cff88ccff[Nanami-UI]|r 按键绑定已保存。") +end + +function AB:ToggleKeyBindMode() + if keyBindActive then + self:ExitKeyBindMode() + else + self:EnterKeyBindMode() + end +end + +function AB:IsKeyBindMode() + return keyBindActive +end diff --git a/Bags/Bank.lua b/Bags/Bank.lua new file mode 100644 index 0000000..2eab792 --- /dev/null +++ b/Bags/Bank.lua @@ -0,0 +1,2087 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Bank Module GUI (Bags/Bank.lua) +-- Unified custom interface for the player's Bank and extended Bank Bags +-------------------------------------------------------------------------------- + +SFrames.Bags.Bank = {} +local SFBankFrame = nil +local ItemSlots = {} +local isClosing = false -- Guard to prevent close闂傚倸鍊烽悞锕傚礈濮樿泛纾婚柛娑卞枟閸欏繘鏌嶈閹叉矠nt闂傚倸鍊烽悞锕傚礈濮樿泛纾婚柛娑卞枙缁诲棛绱掑顔界厪se recursion + +local SLOT_SIZE = 34 +local SPACING = 6 +local MARGIN = 10 +local TOP_OFFSET = 52 -- Space for title + search bar row +local BOTTOM_OFFSET = 34 -- Space for bank bag slot controls +local TEXT_EMPTY = "\231\169\186" +local TEXT_ITEM = "\231\137\169\229\147\129" +local TEXT_BANK_TITLE = "\233\147\182\232\161\140" +local TEXT_SORT = "\230\149\180\231\144\134" +local TEXT_BUY_SLOT = "\232\180\173\228\185\176\230\160\143\228\189\141" +local TEXT_UNAVAILABLE_OFFLINE = "\231\166\187\231\186\191\230\168\161\229\188\143\228\184\139\228\184\141\229\143\175\231\148\168" +local TEXT_BANK_BAG_SLOT = "\233\147\182\232\161\140\232\131\140\229\140\133\230\167\189" +local TEXT_BANK_BAG = "\233\147\182\232\161\140\232\131\140\229\140\133" +local TEXT_LOCKED_BANK_SLOT = "\229\183\178\233\148\129\229\174\154\231\154\132\233\147\182\232\161\140\232\131\140\229\140\133\230\167\189" +local TEXT_CLICK_BUY = "\231\130\185\229\135\187\232\180\173\228\185\176\232\175\165\230\160\143\228\189\141" +local TEXT_BUY_PREV_FIRST = "\232\175\183\229\133\136\232\180\173\228\185\176\229\137\141\228\184\128\228\184\170\230\160\143\228\189\141" +local TEXT_DRAG_EQUIP = "\230\139\150\229\133\165\232\131\140\229\140\133\229\143\175\232\163\133\229\164\135\229\136\176\230\173\164\230\160\143\228\189\141" +local TEXT_RIGHT_PICKUP = "\229\143\179\233\148\174\229\143\150\228\184\139\229\183\178\232\163\133\229\164\135\232\131\140\229\140\133" +local TEXT_CHARACTER = "\232\167\146\232\137\178" +local TEXT_ONLINE = "\229\156\168\231\186\191" +local TEXT_OFFLINE = "\231\166\187\231\186\191" +local TEXT_LAYOUT_ERR = "\233\147\182\232\161\140\229\184\131\229\177\128\230\155\180\230\150\176\229\164\177\232\180\165\239\188\154" +local TEXT_SLOT_UNIT = "\230\160\188" +local DEFAULT_BAG_ICON = "Interface\\Buttons\\Button-Backpack-Up" +local EMPTY_BAG_ICON = "Interface\\Icons\\INV_Misc_Bag_08" +local CHARACTER_SELECTOR_ICON = "Interface\\CHARACTERFRAME\\TemporaryPortrait-Female-Human" +local PANEL_BG_ALPHA = 0.55 +local SLOT_BG_ALPHA = 0.22 + +local _A = SFrames.ActiveTheme + +local bankSearchText = "" -- Current search filter text +local BankBagButtons = {} +local bankLayoutErrorStamp = nil + +local BANK_BAG_SIZE = 22 +local BANK_BAG_SPACING = 3 +local BANK_BAG_COUNT = 6 +local BANK_BAG_FIRST_ID = 5 +local BANK_BAG_LAST_ID = BANK_BAG_FIRST_ID + BANK_BAG_COUNT - 1 +local bankBagInvSlotCache = {} + +local function SafeBankUpdateLayout() + local ok, err = pcall(function() SFrames.Bags.Bank:UpdateLayout() end) + if not ok and err then + if bankLayoutErrorStamp ~= err then + bankLayoutErrorStamp = err + if SFrames and SFrames.Print then + SFrames:Print("闂備胶鍋撻崕濂搞€侀幋锔藉仼鐎光偓閸曨剚銆冮梺鍛婂浮閺€閬嶅蓟婵犲洦鐓ユ繛鍡樺俯閸? " .. tostring(err)) + end + end + end +end + +-- Override with clean localized error text. +SafeBankUpdateLayout = function() + local ok, err = pcall(function() SFrames.Bags.Bank:UpdateLayout() end) + if not ok and err then + if bankLayoutErrorStamp ~= err then + bankLayoutErrorStamp = err + if SFrames and SFrames.Print then + SFrames:Print(TEXT_LAYOUT_ERR .. tostring(err)) + end + end + end +end + +local function SaveBankFramePosition() + if not (SFBankFrame and SFramesDB and SFramesDB.Bags) then return end + local point, _, relPoint, x, y = SFBankFrame:GetPoint() + if not point or not relPoint then return end + SFramesDB.Bags.bankPosition = { + point = point, + relPoint = relPoint, + x = x or 0, + y = y or 0, + } +end + +local function ApplyBankFramePosition() + if not SFBankFrame then return end + SFBankFrame:ClearAllPoints() + + local pos = SFramesDB and SFramesDB.Bags and SFramesDB.Bags.bankPosition + if pos and pos.point and pos.relPoint and type(pos.x) == "number" and type(pos.y) == "number" then + SFBankFrame:SetPoint(pos.point, UIParent, pos.relPoint, pos.x, pos.y) + else + -- Default to right side; bag frame defaults to left side. + SFBankFrame:SetPoint("CENTER", UIParent, "CENTER", 360, 0) + end +end + +-- Bank sort: sorts main bank and bank bag containers +local function SortBank() + -- WoW 1.12 doesn't have SortBags() but we can do a basic consolidation + -- by using the container sort API if available + if SortBankBags then + SortBankBags() + end + if SortBags then + -- also sort player bags since items may move there + SortBags() + end +end + +local function SetTooltipFromBankContainerItem(bagID, slotID) + if not GameTooltip then return false end + GameTooltip:ClearLines() + + if GameTooltip.SetBagItem then + local ok = pcall(function() GameTooltip:SetBagItem(bagID, slotID) end) + if ok then + local left1 = _G["GameTooltipTextLeft1"] + if left1 and left1:GetText() and left1:GetText() ~= "" then + return true + end + end + end + + local link = GetContainerItemLink(bagID, slotID) + if link then + local ok = pcall(function() GameTooltip:SetHyperlink(link) end) + if ok then + local left1 = _G["GameTooltipTextLeft1"] + if left1 and left1:GetText() and left1:GetText() ~= "" then + return true + end + end + + local name = GetItemInfo(link) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + return true + end + end + + return false +end + +local function HasTooltipText() + local left1 = _G["GameTooltipTextLeft1"] + return left1 and left1:GetText() and left1:GetText() ~= "" +end + +local function GetItemNameFromLink(link) + if type(link) ~= "string" or link == "" then + return nil + end + + local name = GetItemInfo(link) + if name and name ~= "" then + return name + end + + local _, _, parsed = string.find(link, "%[(.+)%]") + if parsed and parsed ~= "" then + return parsed + end + + return nil +end + +local function IsAsciiText(text) + if type(text) ~= "string" then return false end + return string.find(text, "[\128-\255]") == nil +end + +local function TextMatchesSearch(name, query) + if not query or query == "" then return true end + if not name or name == "" then return false end + + if string.find(name, query, 1, true) then + return true + end + + -- Keep Chinese/GBK safe: only do lowercase matching for pure ASCII strings. + if IsAsciiText(name) and IsAsciiText(query) then + return string.find(string.lower(name), string.lower(query), 1, true) ~= nil + end + + return false +end + +local function GetSafeCoinText(copper) + local value = tonumber(copper) or 0 + if value <= 0 then + return "0c" + end + + if GetCoinTextureString then + local ok, text = pcall(function() return GetCoinTextureString(value) end) + if ok and text and text ~= "" then + return text + end + end + + local g = math.floor(value / 10000) + local s = math.floor(math.mod(value, 10000) / 100) + local c = math.mod(value, 100) + return string.format("%dg %ds %dc", g, s, c) +end + +local function CreateCoinDisplay(parent, frameName) + local frame = CreateFrame("Frame", frameName, parent, "SmallMoneyFrameTemplate") + frame:SetFrameStrata(parent:GetFrameStrata()) + frame:SetFrameLevel(parent:GetFrameLevel() + 30) + frame:SetWidth(140) + frame:SetHeight(16) + return frame +end + +local function SetCoinDisplayMoney(display, copper) + if not display then return end + local value = tonumber(copper) or 0 + if value < 0 then value = 0 end + + if SmallMoneyFrame_SetAmount then + local ok = pcall(function() SmallMoneyFrame_SetAmount(display, value) end) + if ok then return end + end + + if MoneyFrame_Update and display.GetName then + local frameName = display:GetName() + if frameName and frameName ~= "" then + pcall(function() MoneyFrame_Update(frameName, value) end) + end + end +end + +local function IsValidBankInvSlot(id) + return type(id) == "number" and id >= 39 and id <= 74 +end + +local function GetMainBankInvSlotID(slotID) + if not slotID or slotID <= 0 then return nil end + + local liveBtn = _G["BankFrameItem" .. slotID] + if liveBtn and liveBtn.GetID then + local id = liveBtn:GetID() + if IsValidBankInvSlot(id) then + return id + end + end + + if not BankButtonIDToInvSlotID then return nil end + + local ok, invSlot = pcall(function() return BankButtonIDToInvSlotID(slotID) end) + if ok and IsValidBankInvSlot(invSlot) then + return invSlot + end + + ok, invSlot = pcall(function() return BankButtonIDToInvSlotID(slotID, 0) end) + if ok and IsValidBankInvSlot(invSlot) then + return invSlot + end + + ok, invSlot = pcall(function() return BankButtonIDToInvSlotID(slotID, 1) end) + if ok and IsValidBankInvSlot(invSlot) then + return invSlot + end + + return nil +end + +-- Override tooltip resolution with a stronger fallback chain for main bank slots. +SetTooltipFromBankContainerItem = function(bagID, slotID, cachedLink, cachedName) + if not GameTooltip then return false end + GameTooltip:ClearLines() + + if bagID == -1 and GameTooltip.SetInventoryItem then + local invSlot = GetMainBankInvSlotID(slotID) + if invSlot then + local ok = pcall(function() GameTooltip:SetInventoryItem("player", invSlot) end) + if ok and HasTooltipText() then + return true + end + end + end + + if GameTooltip.SetBagItem then + local ok = pcall(function() GameTooltip:SetBagItem(bagID, slotID) end) + if ok and HasTooltipText() then + return true + end + end + + local link = GetContainerItemLink(bagID, slotID) or cachedLink + if link then + local ok = pcall(function() GameTooltip:SetHyperlink(link) end) + if ok and HasTooltipText() then + return true + end + + local name = GetItemInfo(link) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + return true + end + end + + if cachedName and cachedName ~= "" then + GameTooltip:SetText(cachedName, 1, 1, 1) + return true + end + + return false +end + +local function SafeGetInventoryItemLink(unit, invSlot) + if not invSlot then return nil end + local ok, link = pcall(function() return GetInventoryItemLink(unit, invSlot) end) + if ok then return link end + return nil +end + +local function SafeGetInventoryItemTexture(unit, invSlot) + if not invSlot then return nil end + local ok, tex = pcall(function() return GetInventoryItemTexture(unit, invSlot) end) + if ok then return tex end + return nil +end + +local function SafeGetInventorySlotByName(slotName) + if not GetInventorySlotInfo then return nil end + local ok, slotID = pcall(function() return GetInventorySlotInfo(slotName) end) + if ok and type(slotID) == "number" and slotID > 0 then + return slotID + end + return nil +end + +local function IsPaperdollBagPlaceholder(tex) + if type(tex) ~= "string" then return false end + local lower = string.lower(tex) + lower = string.gsub(lower, "\\", "/") + + if string.find(lower, "ui-paperdoll-slot-bag", 1, true) then + return true + end + + if string.find(lower, "paperdoll", 1, true) and + string.find(lower, "slot", 1, true) and + string.find(lower, "bag", 1, true) then + return true + end + + return false +end + +local function IsDisabledIconTexture(tex) + if type(tex) ~= "string" then return false end + local lower = string.lower(tex) + lower = string.gsub(lower, "\\", "/") + return string.find(lower, "disabled", 1, true) ~= nil +end + +local function IsDefaultBankBagPlaceholder(tex) + if type(tex) ~= "string" then return false end + local lower = string.lower(tex) + lower = string.gsub(lower, "\\", "/") + if string.find(lower, "button-backpack-up", 1, true) then + return true + end + if string.find(lower, "button-backpack-disabled", 1, true) then + return true + end + return false +end + +local function IsUsableBankBagIconTexture(tex) + if type(tex) ~= "string" or tex == "" then + return false + end + if IsPaperdollBagPlaceholder(tex) then + return false + end + if IsDisabledIconTexture(tex) then + return false + end + if IsDefaultBankBagPlaceholder(tex) then + return false + end + return true +end + +local function GetIconFromItemLink(link) + if not link then return nil end + + local _, _, _, _, _, _, _, _, tex = GetItemInfo(link) + if tex then return tex end + + local _, _, itemID = string.find(link, "item:(%d+)") + if itemID then + local _, _, _, _, _, _, _, _, tex2 = GetItemInfo("item:" .. itemID) + if tex2 then return tex2 end + end + + return nil +end + +local function IsBagItemLink(link) + if type(link) ~= "string" or link == "" then + return false + end + + local _, _, _, _, _, _, _, equipLoc = GetItemInfo(link) + return equipLoc == "INVTYPE_BAG" +end + +local function GetBagLinkState(link) + if type(link) ~= "string" or link == "" then + return "invalid" + end + + local _, _, _, _, _, _, _, equipLoc = GetItemInfo(link) + if equipLoc == "INVTYPE_BAG" then + return "bag" + end + if equipLoc == nil or equipLoc == "" then + return "unknown" + end + return "invalid" +end + +local function AddInvSlotCandidate(candidates, seen, slotID) + if type(slotID) ~= "number" or slotID <= 0 then + return + end + if seen[slotID] then + return + end + seen[slotID] = true + table.insert(candidates, slotID) +end + +local function GetLiveBankBagButton(index) + local names = { + "BankFrameBag" .. index, + "BankFrameBag" .. index .. "Slot", + } + + for _, name in ipairs(names) do + local btn = _G[name] + if btn and btn.GetObjectType and btn:GetObjectType() == "Button" then + return btn + end + end + + return nil +end + +local function AddBankInvSlotCandidate(candidates, seen, slotID) + if type(slotID) ~= "number" or slotID <= 0 then + return + end + + -- Real bank bag equipment slots are not normal character inventory slots. + if slotID <= 23 then + return + end + + AddInvSlotCandidate(candidates, seen, slotID) +end + +local function IsBankBagInvSlotID(slotID) + return type(slotID) == "number" and slotID > 23 +end + +local function GetBankBagInvSlotID(index) + if type(index) ~= "number" or index <= 0 then + return nil + end + + local cached = bankBagInvSlotCache[index] + if type(cached) == "number" and cached > 23 then + return cached + end + bankBagInvSlotCache[index] = nil + + local bagID = index + (BANK_BAG_FIRST_ID - 1) + local function TryBankButtonID(buttonID, isBank) + if not BankButtonIDToInvSlotID then return nil end + local ok, slotID = pcall(function() return BankButtonIDToInvSlotID(buttonID, isBank) end) + if ok and IsBankBagInvSlotID(slotID) then + return slotID + end + return nil + end + + local function AcceptIfBankSlot(slotID) + if IsBankBagInvSlotID(slotID) then + return slotID + end + return nil + end + + -- Primary mapping: bag container id + isBank=1. + local slot = TryBankButtonID(bagID, 1) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + -- Compatibility fallback: some clients may expect 1..N as first arg. + slot = TryBankButtonID(index, 1) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + -- Only accept legacy guesses when they actually hold a bag item. + local function AcceptIfBag(slotID) + slotID = AcceptIfBankSlot(slotID) + if not slotID then return nil end + local link = SafeGetInventoryItemLink("player", slotID) + if link and IsBagItemLink(link) then + return slotID + end + return nil + end + + slot = TryBankButtonID(bagID, nil) + slot = AcceptIfBag(slot) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + slot = TryBankButtonID(index, nil) + slot = AcceptIfBag(slot) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + if ContainerIDToInventoryID then + local ok, result = pcall(function() return ContainerIDToInventoryID(bagID) end) + if ok then + slot = AcceptIfBankSlot(result) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + end + end + + -- BankBagSlotN is a stable bank bag equipment slot token and can be empty. + slot = AcceptIfBankSlot(SafeGetInventorySlotByName("BankBagSlot" .. index)) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + -- Alternate token fallback used by a few legacy clients. + slot = AcceptIfBankSlot(SafeGetInventorySlotByName("BankBag" .. index)) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + slot = AcceptIfBag(SafeGetInventorySlotByName("BankSlot" .. index)) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + + local liveBtn = GetLiveBankBagButton(index) + if liveBtn and liveBtn.GetID then + local btnID = liveBtn:GetID() + slot = TryBankButtonID(btnID, 1) or AcceptIfBankSlot(btnID) or AcceptIfBag(btnID) + if slot then + bankBagInvSlotCache[index] = slot + return slot + end + end + + return nil +end + +local function GetLiveBankBagIconTexture(index) + local btn = GetLiveBankBagButton(index) + if btn then + local icon = _G[btn:GetName() .. "IconTexture"] or _G[btn:GetName() .. "Icon"] + if icon and icon.GetTexture then + local tex = icon:GetTexture() + if type(tex) == "string" and tex ~= "" then + return tex + end + end + end + + local directIcon = _G["BankFrameBag" .. index .. "IconTexture"] or _G["BankFrameBag" .. index .. "Icon"] + if directIcon and directIcon.GetTexture then + local tex = directIcon:GetTexture() + if type(tex) == "string" and tex ~= "" then + return tex + end + end + + return nil +end + +local function IsBankBagSlotUnlocked(index) + local purchased = 0 + if GetNumBankSlots then + purchased = GetNumBankSlots() or 0 + end + return index <= purchased +end + +local function TryPurchaseBankSlot(index) + if not PurchaseSlot then return false end + if IsBankBagSlotUnlocked(index) then return false end + local purchased = (GetNumBankSlots and GetNumBankSlots()) or 0 + local nextSlot = purchased + 1 + if index ~= nextSlot then return false end + local ok = pcall(function() PurchaseSlot() end) + return ok +end + +local function PlaceCursorItemInBankBagSlot(index) + if not CursorHasItem() then return false end + local invSlot = GetBankBagInvSlotID(index) + if not invSlot then return false end + + if EquipCursorItem then + local equipOK = pcall(function() EquipCursorItem(invSlot) end) + if equipOK and (not CursorHasItem()) then + return true + end + end + + -- This works for both placing and swapping bags in vanilla. + local ok = pcall(function() PickupBagFromSlot(invSlot) end) + if ok and (not CursorHasItem()) then + return true + end + + -- Fallback path for clients where PickupBagFromSlot doesn't place cursor item. + if PutItemInBag then + pcall(function() PutItemInBag(invSlot) end) + end + if CursorHasItem() then + pcall(function() PickupInventoryItem(invSlot) end) + end + return not CursorHasItem() +end + +local function GetOfflineBankSlotState(offlineDB, slotIndex) + local purchased = 0 + if offlineDB and type(offlineDB.bankSlots) == "number" then + purchased = math.max(0, math.floor(offlineDB.bankSlots)) + end + + if purchased <= 0 and offlineDB and offlineDB.bankBags then + for i = 1, BANK_BAG_COUNT do + local meta = offlineDB.bankBags[i] + local metaSize = 0 + if meta and type(meta.size) == "number" then + metaSize = math.max(0, math.floor(meta.size)) + end + if meta and (meta.unlocked or metaSize > 0) then + purchased = math.max(purchased, i) + end + end + end + + if purchased <= 0 and offlineDB and offlineDB.bank then + for i = 1, BANK_BAG_COUNT do + local bagData = offlineDB.bank[i + (BANK_BAG_FIRST_ID - 1)] + local size = 0 + if bagData and type(bagData.size) == "number" then + size = math.max(0, math.floor(bagData.size)) + end + if size > 0 then + purchased = math.max(purchased, i) + end + end + end + + local bagID = slotIndex + (BANK_BAG_FIRST_ID - 1) + local bagData = offlineDB and offlineDB.bank and offlineDB.bank[bagID] + local bagSlots = 0 + if bagData and type(bagData.size) == "number" then + bagSlots = math.max(0, math.floor(bagData.size)) + end + + local bagMeta = offlineDB and offlineDB.bankBags and offlineDB.bankBags[slotIndex] + if bagMeta and type(bagMeta.size) == "number" and bagMeta.size > bagSlots then + bagSlots = math.max(0, math.floor(bagMeta.size)) + end + + -- Migration fallback for old offline snapshots that did not store bankSlots: + -- any slot with positive container size implies this slot is available. + if bagSlots > 0 and slotIndex > purchased then + purchased = slotIndex + end + + local unlocked = (slotIndex <= purchased) + if (not unlocked) and bagSlots > 0 then + unlocked = true + end + if (not unlocked) and bagMeta and bagMeta.unlocked then + unlocked = true + end + + local link = nil + local tex = nil + local rawLink = bagMeta and bagMeta.link or nil + if bagSlots > 0 then + local linkState = GetBagLinkState(rawLink) + if linkState == "bag" or linkState == "unknown" then + link = rawLink + tex = bagMeta and bagMeta.texture or nil + end + end + + return unlocked, bagSlots, link, tex, purchased +end + +local function CreateBankBagButton(parent, index) + local btn = CreateFrame("Button", "SFramesBankBagBtn" .. index, parent) + btn:SetWidth(BANK_BAG_SIZE) + btn:SetHeight(BANK_BAG_SIZE) + btn.slotIndex = index + btn:SetFrameStrata(parent:GetFrameStrata()) + btn:SetFrameLevel(parent:GetFrameLevel() + 20) + + -- Rounded backdrop (matching bag slot style) + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + btn:SetBackdropColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 0.9) + btn:SetBackdropBorderColor(_A.slotBorder[1], _A.slotBorder[2], _A.slotBorder[3], _A.slotBorder[4] or 0.8) + + local icon = btn:CreateTexture(nil, "OVERLAY") + icon:SetPoint("TOPLEFT", btn, "TOPLEFT", 2, -2) + icon:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -2, 2) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetBlendMode("BLEND") + icon:SetVertexColor(1, 1, 1, 1) + icon:SetAlpha(1) + btn.icon = icon + + local lock = btn:CreateTexture(nil, "OVERLAY") + lock:SetTexture("Interface\\Buttons\\UI-GroupLoot-Pass-Up") + lock:SetWidth(12) + lock:SetHeight(12) + lock:SetPoint("CENTER", btn, "CENTER", 0, 0) + lock:Hide() + btn.lockIcon = lock + + local highlight = btn:CreateTexture(nil, "HIGHLIGHT") + highlight:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + highlight:SetBlendMode("ADD") + highlight:SetAllPoints(btn) + + btn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + btn:RegisterForDrag("LeftButton") + + btn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:ClearLines() + if SFrames.Bags.Bank.isOffline then + local data = nil + if SFrames.Bags.Bank.offlineChar and SFrames.Bags.Offline and SFrames.Bags.Offline.GetCharacterData then + data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Bank.offlineChar) + end + + local unlocked, bagSlots, bagLink = GetOfflineBankSlotState(data, this.slotIndex) + if unlocked then + local shown = false + if bagSlots > 0 and bagLink then + local _, _, itemStr = string.find(bagLink, "(item:[%-?%d:]+)") + local ok = false + if itemStr then + ok = pcall(function() GameTooltip:SetHyperlink(itemStr) end) + else + ok = pcall(function() GameTooltip:SetHyperlink(bagLink) end) + end + shown = ok and HasTooltipText() + + if not shown then + local name = GetItemNameFromLink(bagLink) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + shown = true + end + end + end + + if not shown then + if bagSlots > 0 then + GameTooltip:SetText(string.format("%s %d (%d%s)", TEXT_BANK_BAG, this.slotIndex, bagSlots, TEXT_SLOT_UNIT), 1, 1, 1) + else + GameTooltip:SetText(string.format("%s %d (%s)", TEXT_BANK_BAG_SLOT, this.slotIndex, TEXT_EMPTY), 0.9, 0.9, 0.9) + end + end + GameTooltip:AddLine(TEXT_OFFLINE, 0.75, 0.75, 0.75) + else + GameTooltip:SetText(TEXT_LOCKED_BANK_SLOT, 1, 0.2, 0.2) + GameTooltip:AddLine(TEXT_OFFLINE, 0.75, 0.75, 0.75) + end + else + local unlocked = this.unlocked + if unlocked then + local invSlot = GetBankBagInvSlotID(this.slotIndex) + local bagSlots = GetContainerNumSlots(this.slotIndex + (BANK_BAG_FIRST_ID - 1)) or 0 + local shown = false + + if bagSlots > 0 and invSlot and GameTooltip.SetInventoryItem then + local ok = pcall(function() GameTooltip:SetInventoryItem("player", invSlot) end) + if ok and HasTooltipText() then + shown = true + end + end + + if not shown then + local link = SafeGetInventoryItemLink("player", invSlot) + if bagSlots > 0 and link then + local ok = pcall(function() GameTooltip:SetHyperlink(link) end) + if ok and HasTooltipText() then + shown = true + end + end + end + + if not shown then + if bagSlots > 0 then + GameTooltip:SetText(string.format("%s %d (%d%s)", TEXT_BANK_BAG, this.slotIndex, bagSlots, TEXT_SLOT_UNIT), 1, 1, 1) + else + GameTooltip:SetText(string.format("%s %d (%s)", TEXT_BANK_BAG_SLOT, this.slotIndex, TEXT_EMPTY), 0.9, 0.9, 0.9) + end + end + GameTooltip:AddLine(TEXT_DRAG_EQUIP, 0.7, 0.7, 0.7) + GameTooltip:AddLine(TEXT_RIGHT_PICKUP, 0.7, 0.7, 0.7) + else + GameTooltip:SetText(TEXT_LOCKED_BANK_SLOT, 1, 0.2, 0.2) + local purchased = (GetNumBankSlots and GetNumBankSlots()) or 0 + local nextSlot = purchased + 1 + if this.slotIndex == nextSlot then + local cost = (GetBankSlotCost and GetBankSlotCost()) or 0 + if cost > 0 then + GameTooltip:AddLine(TEXT_CLICK_BUY, 1, 0.82, 0) + GameTooltip:AddLine(GetSafeCoinText(cost), 1, 0.82, 0) + else + GameTooltip:AddLine(TEXT_CLICK_BUY, 1, 0.82, 0) + end + else + GameTooltip:AddLine(TEXT_BUY_PREV_FIRST, 0.7, 0.7, 0.7) + end + end + end + if this.unlocked and SFBankFrame and SFBankFrame:IsVisible() then + if SFrames.Bags.Bank.isOffline then + local data = nil + if SFrames.Bags.Bank.offlineChar and SFrames.Bags.Offline and SFrames.Bags.Offline.GetCharacterData then + data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Bank.offlineChar) + end + local _, offlineBagSlots = GetOfflineBankSlotState(data, this.slotIndex) + if offlineBagSlots > 0 then + SFrames.Bags.Bank:PreviewBankBagSlots(this.slotIndex + (BANK_BAG_FIRST_ID - 1)) + end + else + local bagSlots = GetContainerNumSlots(this.slotIndex + (BANK_BAG_FIRST_ID - 1)) or 0 + if bagSlots > 0 then + SFrames.Bags.Bank:PreviewBankBagSlots(this.slotIndex + (BANK_BAG_FIRST_ID - 1)) + end + end + end + GameTooltip:Show() + end) + btn:SetScript("OnLeave", function() + GameTooltip:Hide() + if SFBankFrame and SFBankFrame:IsVisible() then + SFrames.Bags.Bank:ClearBankBagPreview() + end + end) + + btn:SetScript("OnDragStart", function() + if SFrames.Bags.Bank.isOffline then return end + if not this.unlocked then return end + local invSlot = GetBankBagInvSlotID(this.slotIndex) + if invSlot then + pcall(function() PickupBagFromSlot(invSlot) end) + end + end) + + btn:SetScript("OnReceiveDrag", function() + if SFrames.Bags.Bank.isOffline then return end + if not CursorHasItem() then return end + + if this.unlocked then + PlaceCursorItemInBankBagSlot(this.slotIndex) + else + if TryPurchaseBankSlot(this.slotIndex) then + if IsBankBagSlotUnlocked(this.slotIndex) and CursorHasItem() then + PlaceCursorItemInBankBagSlot(this.slotIndex) + end + end + end + + SafeBankUpdateLayout() + end) + + btn:SetScript("OnClick", function() + if SFrames.Bags.Bank.isOffline then return end + + if CursorHasItem() then + if this.unlocked then + PlaceCursorItemInBankBagSlot(this.slotIndex) + else + if TryPurchaseBankSlot(this.slotIndex) and IsBankBagSlotUnlocked(this.slotIndex) then + PlaceCursorItemInBankBagSlot(this.slotIndex) + end + end + SafeBankUpdateLayout() + return + end + + if this.unlocked then + local invSlot = GetBankBagInvSlotID(this.slotIndex) + if invSlot then + pcall(function() PickupBagFromSlot(invSlot) end) + end + else + TryPurchaseBankSlot(this.slotIndex) + end + + SafeBankUpdateLayout() + end) + + return btn +end + +-- Create a single item slot button +local function CreateSlot(parent, id) + local button = CreateFrame("Button", "SFramesBankSlot" .. id, parent, "ItemButtonTemplate") + button:RegisterForClicks("LeftButtonUp", "RightButtonUp") + button:RegisterForDrag("LeftButton") + + -- Rounded backdrop style (matching CharacterPanel equipment slots) + local DEFAULT_BORDER = (_A and _A.slotBorder) or { 0.25, 0.25, 0.3, 0.8 } + button:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 18, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + button:SetBackdropColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 0.9) + button:SetBackdropBorderColor(DEFAULT_BORDER[1], DEFAULT_BORDER[2], DEFAULT_BORDER[3], DEFAULT_BORDER[4]) + + -- Inset icon within the rounded border + local icon = _G[button:GetName() .. "IconTexture"] + if icon then + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:ClearAllPoints() + icon:SetPoint("TOPLEFT", button, "TOPLEFT", 4, -4) + icon:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -4, 4) + end + + local qualGlow = button:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.8) + qualGlow:SetWidth(SLOT_SIZE * 1.9) + qualGlow:SetHeight(SLOT_SIZE * 1.9) + qualGlow:SetPoint("CENTER", button, "CENTER", 0, 0) + qualGlow:Hide() + button.qualGlow = qualGlow + + function button:SetBorderColor(r, g, b, a) + self.qualGlow:SetVertexColor(r, g, b) + self.qualGlow:Show() + self._qualityBorder = true + end + function button:ShowBorder() + self._qualityBorder = true + end + function button:HideBorder() + self.qualGlow:Hide() + self._qualityBorder = false + end + + -- Hide the ugly default rounded Blizzard border + local nt = _G[button:GetName() .. "NormalTexture"] + if nt then nt:SetTexture(nil) nt:Hide() end + + -- Grey item marker (a small coin/junk icon in the corner) + local junkIcon = button:CreateTexture(nil, "OVERLAY") + junkIcon:SetTexture("Interface\\Buttons\\UI-GroupLoot-Coin-Up") + junkIcon:SetWidth(14) + junkIcon:SetHeight(14) + junkIcon:SetPoint("TOPLEFT", button, "TOPLEFT", 1, -1) + junkIcon:Hide() + button.junkIcon = junkIcon + + local previewGlow = button:CreateTexture(nil, "OVERLAY") + previewGlow:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + previewGlow:SetBlendMode("ADD") + previewGlow:SetAllPoints(button) + previewGlow:Hide() + button.previewGlow = previewGlow + + button:SetScript("OnEnter", function() + if this.bagID == nil or this.slotID == nil then return end + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:ClearLines() + + if SFrames.Bags.Bank.isOffline and SFrames.Bags.Bank.offlineChar then + local data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Bank.offlineChar) + if data and data.bank and data.bank[this.bagID] and data.bank[this.bagID].items[this.slotID] then + local link = data.bank[this.bagID].items[this.slotID].link + local shown = false + if link then + local _, _, itemStr = string.find(link, "(item:[%-?%d:]+)") + local ok = false + if itemStr then + ok = pcall(function() GameTooltip:SetHyperlink(itemStr) end) + else + ok = pcall(function() GameTooltip:SetHyperlink(link) end) + end + shown = ok and HasTooltipText() + + if not shown then + local name = GetItemNameFromLink(link) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + shown = true + end + end + + if not shown then + GameTooltip:SetText(TEXT_ITEM, 1, 1, 1) + end + else + GameTooltip:SetText(TEXT_EMPTY, 0.65, 0.65, 0.65) + end + else + GameTooltip:SetText(TEXT_EMPTY, 0.65, 0.65, 0.65) + end + else + local shown = SetTooltipFromBankContainerItem(this.bagID, this.slotID, this.itemLink, this.itemName) + if not shown then + GameTooltip:SetText(TEXT_EMPTY, 0.65, 0.65, 0.65) + end + end + if IsControlKeyDown() then + ShowInspectCursor() + end + GameTooltip:Show() + end) + + button:SetScript("OnUpdate", function() + if GameTooltip:IsOwned(this) then + if IsControlKeyDown() then + if not this.controlDownLast then + this.controlDownLast = true + ShowInspectCursor() + end + else + if this.controlDownLast then + this.controlDownLast = false + ResetCursor() + end + end + end + end) + + button:SetScript("OnLeave", function() + GameTooltip:Hide() + ResetCursor() + end) + + local cooldown = CreateFrame("Model", button:GetName().."Cooldown", button, "CooldownFrameTemplate") + cooldown:SetAllPoints(button) + + function button:SplitStack(split) + if not split or split < 1 then return end + if self.bagID == nil or self.slotID == nil then return end + if self.bagID == -1 then + SplitContainerItem(-1, self.slotID, split) + else + SplitContainerItem(self.bagID, self.slotID, split) + end + end + + button:SetScript("OnClick", function() + local bagID = this.bagID + local slotID = this.slotID + local isOffline = SFrames.Bags.Bank.isOffline + + -- Helper: get item link for this slot (works both online and offline) + local function GetSlotLink() + if isOffline and SFrames.Bags.Bank.offlineChar then + local data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Bank.offlineChar) + if data and data.bank and data.bank[bagID] and data.bank[bagID].items[slotID] then + return data.bank[bagID].items[slotID].link + end + return nil + end + if bagID == -1 then + return GetContainerItemLink(-1, slotID) + else + return GetContainerItemLink(bagID, slotID) + end + end + + if IsControlKeyDown() and arg1 == "LeftButton" then + local link = GetSlotLink() + if link and DressUpItemLink then + DressUpItemLink(link) + return + end + end + if IsShiftKeyDown() then + local eb = ChatFrameEditBox + if eb and eb.IsVisible and eb:IsVisible() then + local link = GetSlotLink() + if link then eb:Insert(link) end + return + end + if not isOffline and arg1 == "LeftButton" and (not CursorHasItem()) and OpenStackSplitFrame then + local _, itemCount = GetContainerItemInfo(bagID, slotID) + if itemCount and itemCount > 1 then + OpenStackSplitFrame(itemCount, this, "BOTTOMLEFT", "TOPLEFT") + return + end + end + end + + -- Block all other actions in offline mode + if isOffline then return end + + if arg1 == "RightButton" then + if AutoStoreBankItem then + local ok = pcall(function() AutoStoreBankItem(bagID, slotID) end) + if ok then return end + end + UseContainerItem(bagID, slotID) + else + if bagID == -1 then + PickupContainerItem(-1, slotID) + else + PickupContainerItem(bagID, slotID) + end + end + end) + + button:SetScript("OnDragStart", function() + if SFrames.Bags.Bank.isOffline then return end + if CursorHasItem() then return end + local bagID = this.bagID + local slotID = this.slotID + if bagID == -1 then + PickupContainerItem(-1, slotID) + else + PickupContainerItem(bagID, slotID) + end + end) + + button:SetScript("OnReceiveDrag", function() + if SFrames.Bags.Bank.isOffline then return end + if CursorHasItem() then + local bagID = this.bagID + local slotID = this.slotID + if bagID == -1 then + PickupContainerItem(-1, slotID) + else + PickupContainerItem(bagID, slotID) + end + end + end) + + return button +end + +function SFrames.Bags.Bank:PreviewBankBagSlots(targetBagID) + for _, btn in ipairs(ItemSlots) do + if btn and btn:IsShown() then + local icon = _G[btn:GetName() .. "IconTexture"] + local isMatch = (btn.bagID == targetBagID) + + if icon then + icon:SetVertexColor(1, 1, 1) + end + + if btn.previewGlow then + if isMatch then + btn.previewGlow:Show() + else + btn.previewGlow:Hide() + end + end + end + end +end + +function SFrames.Bags.Bank:ClearBankBagPreview() + for _, btn in ipairs(ItemSlots) do + if btn and btn:IsShown() then + local icon = _G[btn:GetName() .. "IconTexture"] + if icon then icon:SetVertexColor(1, 1, 1) end + if btn.previewGlow then btn.previewGlow:Hide() end + end + end +end + +function SFrames.Bags.Bank:UpdateBankBagButtons() + if not SFBankFrame then return end + + local isOffline = self.isOffline + local offlineDB = nil + if isOffline and self.offlineChar and SFrames.Bags.Offline and SFrames.Bags.Offline.GetCharacterData then + offlineDB = SFrames.Bags.Offline:GetCharacterData(self.offlineChar) + if not offlineDB then + isOffline = false + self.isOffline = false + self.offlineChar = nil + end + end + + local purchased = 0 + if isOffline and offlineDB then + local _, _, _, _, offPurchased = GetOfflineBankSlotState(offlineDB, 1) + purchased = offPurchased or 0 + else + purchased = (GetNumBankSlots and GetNumBankSlots()) or 0 + end + local nextSlot = purchased + 1 + local placeholderTex = "Interface\\PaperDoll\\UI-PaperDoll-Slot-Bag" + + for i = 1, BANK_BAG_COUNT do + local btn = BankBagButtons[i] + if btn then + local bagID = i + (BANK_BAG_FIRST_ID - 1) + local unlocked = false + local tex = nil + + if isOffline and offlineDB then + local bagSlots, offlineLink, offlineTex + unlocked, bagSlots, offlineLink, offlineTex = GetOfflineBankSlotState(offlineDB, i) + + if offlineLink then + tex = GetIconFromItemLink(offlineLink) + end + if (not tex) and offlineLink and IsUsableBankBagIconTexture(offlineTex) then + tex = offlineTex + end + if not tex then + tex = placeholderTex + end + else + local purchasedSlot = (i <= purchased) + local bagSlots = GetContainerNumSlots(bagID) or 0 + local invSlot = GetBankBagInvSlotID(i) + local invLink = SafeGetInventoryItemLink("player", invSlot) + local invTex = SafeGetInventoryItemTexture("player", invSlot) + local liveTex = GetLiveBankBagIconTexture(i) + + if invLink and IsBagItemLink(invLink) then + tex = GetIconFromItemLink(invLink) + if (not tex) and IsUsableBankBagIconTexture(invTex) then + tex = invTex + end + end + if (not tex) and IsUsableBankBagIconTexture(liveTex) then + tex = liveTex + end + + local hasBag = (tex ~= nil) or (bagSlots > 0) + unlocked = purchasedSlot or hasBag + + if not tex then + tex = placeholderTex + end + end + + btn.unlocked = unlocked + btn.icon:SetTexture(tex) + btn:Enable() + if btn.icon.SetDesaturated then + pcall(function() btn.icon:SetDesaturated(false) end) + end + if btn.bg then btn.bg:SetTexture(0, 0, 0, 0) end + btn:SetAlpha(1) + btn.icon:SetAlpha(1) + + if unlocked then + btn.icon:SetVertexColor(1, 1, 1, 1) + btn.lockIcon:Hide() + else + btn.icon:SetVertexColor(0.5, 0.5, 0.5, 1) + if (not isOffline) and i == nextSlot then + btn.lockIcon:Hide() + else + btn.lockIcon:Show() + end + end + + btn:Show() + end + end + + if SFBankFrame.purchaseBtn then + if isOffline then + SFBankFrame.purchaseBtn:Hide() + else + if nextSlot <= BANK_BAG_COUNT then + local cost = (GetBankSlotCost and GetBankSlotCost()) or 0 + SFBankFrame.purchaseBtn.cost = cost + SFBankFrame.purchaseBtn:Show() + else + SFBankFrame.purchaseBtn:Hide() + end + end + end +end + +-- Build/Update the item slot grid +function SFrames.Bags.Bank:UpdateLayout() + if not SFBankFrame then return end + + local cols = (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.bankColumns) or 12 + local spacing = (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.bankSpacing) or SPACING + spacing = tonumber(spacing) or SPACING + if spacing < 0 then spacing = 0 end + local slots = {} + + local isOffline = self.isOffline + local charName = self.offlineChar + local offlineDB = nil + if isOffline and charName then + offlineDB = SFrames.Bags.Offline:GetCharacterData(charName) + if not offlineDB then + isOffline = false + self.isOffline = false + self.offlineChar = nil + if SFBankFrame and SFBankFrame.RefreshCharacterSelectorText then + SFBankFrame.RefreshCharacterSelectorText() + end + end + end + + -- Update money display (online/offline) + if SFBankFrame.moneyFrame then + local copper = 0 + if isOffline and offlineDB then + copper = offlineDB.money or 0 + else + copper = GetMoney() + end + SetCoinDisplayMoney(SFBankFrame.moneyFrame, copper) + end + + local bankBags = { -1 } + for bag = BANK_BAG_FIRST_ID, BANK_BAG_LAST_ID do + table.insert(bankBags, bag) + end + for _, bag in ipairs(bankBags) do + local size = 0 + if isOffline and offlineDB then + if offlineDB.bank and offlineDB.bank[bag] then size = offlineDB.bank[bag].size end + else + if bag == -1 then + -- Try API first, fallback to hardcoded 24 + local apiSize = GetContainerNumSlots(-1) + size = (apiSize and apiSize > 0) and apiSize or 24 + else + size = GetContainerNumSlots(bag) + end + end + for slot = 1, size do + table.insert(slots, { bag = bag, slot = slot }) + end + end + + -- Apply search filter (hide non-matching items, show dim-greyed slots instead) + local searchFilter = bankSearchText or "" + if searchFilter ~= "" then + local filtered = {} + for _, meta in ipairs(slots) do + local link + if isOffline and offlineDB then + if offlineDB.bank and offlineDB.bank[meta.bag] and offlineDB.bank[meta.bag].items[meta.slot] then + link = offlineDB.bank[meta.bag].items[meta.slot].link + end + else + if meta.bag == -1 then + link = GetContainerItemLink(-1, meta.slot) + else + link = GetContainerItemLink(meta.bag, meta.slot) + end + end + -- Keep slot if it matches OR if it's empty (so empty slots remain in grid) + local keep = true + if link then + local name = GetItemInfo(link) + if not name then + local _, _, parsedName = string.find(link, "%[(.+)%]") + name = parsedName + end + keep = TextMatchesSearch(name, searchFilter) + end + if keep then + table.insert(filtered, meta) + end + end + slots = filtered + end + + local numSlots = table.getn(slots) + if numSlots == 0 then numSlots = 1 end -- Prevent zero-size window + local rows = math.ceil(numSlots / cols) + + -- Resize frame + local width = MARGIN * 2 + (cols * SLOT_SIZE) + math.max(0, (cols - 1)) * spacing + local height = MARGIN * 2 + TOP_OFFSET + (rows * SLOT_SIZE) + math.max(0, (rows - 1)) * spacing + BOTTOM_OFFSET + SFBankFrame:SetWidth(math.max(width, 160)) + SFBankFrame:SetHeight(height) + + -- Position & update slots + for i, meta in ipairs(slots) do + local btn = ItemSlots[i] + if not btn then + btn = CreateSlot(SFBankFrame, i) + ItemSlots[i] = btn + end + + btn.bagID = meta.bag + btn.slotID = meta.slot + + local row = math.floor((i - 1) / cols) + local col = math.mod((i - 1), cols) + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", SFBankFrame, "TOPLEFT", + MARGIN + col * (SLOT_SIZE + spacing), + -(MARGIN + TOP_OFFSET + row * (SLOT_SIZE + spacing))) + + -- Fetch item info + local texture, count, quality, link + if isOffline and offlineDB then + if offlineDB.bank and offlineDB.bank[meta.bag] and offlineDB.bank[meta.bag].items[meta.slot] then + local item = offlineDB.bank[meta.bag].items[meta.slot] + texture = item.texture + count = item.count + quality = item.quality + link = item.link + end + else + if meta.bag == -1 then + -- Main bank slots: GetContainerItemInfo(-1, slot) is the correct API + -- This requires the bank to already be open and data populated (0.5s delay ensures this) + local t, c, _, q = GetContainerItemInfo(-1, meta.slot) + texture = t; count = c; quality = q + link = GetContainerItemLink(-1, meta.slot) + else + local t, c, _, q = GetContainerItemInfo(meta.bag, meta.slot) + texture = t; count = c; quality = q + link = GetContainerItemLink(meta.bag, meta.slot) + end + end + + btn.itemLink = link + if link then + btn.itemName = GetItemInfo(link) + else + btn.itemName = nil + end + + SetItemButtonTexture(btn, texture) + SetItemButtonCount(btn, count) + local iconTex = _G[btn:GetName() .. "IconTexture"] + if iconTex then iconTex:SetVertexColor(1, 1, 1) end + if btn.previewGlow then btn.previewGlow:Hide() end + + -- Quality border & Grey marker + btn:HideBorder() + btn.junkIcon:Hide() + + if link then + -- Safest 1.12 generic approach: Read the color straight out of the hyperlink! + local _, _, hex = string.find(link, "|c(%x+)|H") + local parsedColor = false + + if hex and string.len(hex) == 8 then + local hexLower = string.lower(hex) + if hexLower == "ff9d9d9d" then + -- Poor / Grey Item + btn:SetBorderColor(0.5, 0.5, 0.5, 1) + btn:ShowBorder() + btn.junkIcon:Show() + parsedColor = true + elseif hexLower == "ffffffff" then + -- Common / White Item + parsedColor = true + else + -- Green, Blue, Purple, Orange + local r = tonumber(string.sub(hex, 3, 4), 16) / 255 + local g = tonumber(string.sub(hex, 5, 6), 16) / 255 + local b = tonumber(string.sub(hex, 7, 8), 16) / 255 + btn:SetBorderColor(r, g, b, 1) + btn:ShowBorder() + parsedColor = true + end + end + + -- Fallback + if not parsedColor then + local q = quality + if not q then + local _, _, itemString = string.find(link, "item:(%d+)") + if itemString then + local _, _, scanRarity = GetItemInfo("item:" .. itemString) + q = scanRarity + end + end + + if q then + if q == 0 then + btn:SetBorderColor(0.5, 0.5, 0.5, 1) + btn:ShowBorder() + btn.junkIcon:Show() + elseif q > 1 then + local r, g, b = GetItemQualityColor(q) + btn:SetBorderColor(r, g, b, 1) + btn:ShowBorder() + end + end + end + end + + -- Cooldowns + local cooldown = _G[btn:GetName() .. "Cooldown"] + if cooldown then + if isOffline then + cooldown:Hide() + else + local start, duration, enable = GetContainerItemCooldown(meta.bag, meta.slot) + if start and duration and start > 0 and duration > 0 then + CooldownFrame_SetTimer(cooldown, start, duration, enable) + cooldown:Show() + else + cooldown:Hide() + end + end + end + + btn:Show() + end + + -- Hide excess buttons + for i = numSlots + 1, table.getn(ItemSlots) do + if ItemSlots[i] then ItemSlots[i]:Hide() end + end + + self:UpdateBankBagButtons() +end + +-- Main frame initialization (called once after PLAYER_LOGIN) +function SFrames.Bags.Bank:Initialize() + if SFBankFrame then return end + + SFBankFrame = CreateFrame("Frame", "SFramesBankFrame", UIParent) + SFBankFrame:SetWidth(420) + SFBankFrame:SetHeight(200) + SFBankFrame:SetFrameStrata("HIGH") + SFBankFrame:SetToplevel(true) + SFBankFrame:EnableMouse(true) + SFBankFrame:SetMovable(true) + SFBankFrame:SetClampedToScreen(true) + SFBankFrame:RegisterForDrag("LeftButton") + SFBankFrame:SetScript("OnDragStart", function() this:StartMoving() end) + SFBankFrame:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + SaveBankFramePosition() + end) + ApplyBankFramePosition() + tinsert(UISpecialFrames, "SFramesBankFrame") + SFBankFrame:Hide() + + -- ESC menu style rounded backdrop + SFBankFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local _A = SFrames.ActiveTheme + if _A and _A.panelBg then + SFBankFrame:SetBackdropColor(_A.panelBg[1], _A.panelBg[2], _A.panelBg[3], _A.panelBg[4] or 0.95) + SFBankFrame:SetBackdropBorderColor(_A.panelBorder[1], _A.panelBorder[2], _A.panelBorder[3], _A.panelBorder[4] or 0.9) + else + SFBankFrame:SetBackdropColor(0.12, 0.06, 0.10, 0.95) + SFBankFrame:SetBackdropBorderColor(0.55, 0.30, 0.42, 0.9) + end + local bankShadow = CreateFrame("Frame", nil, SFBankFrame) + bankShadow:SetPoint("TOPLEFT", SFBankFrame, "TOPLEFT", -5, 5) + bankShadow:SetPoint("BOTTOMRIGHT", SFBankFrame, "BOTTOMRIGHT", 5, -5) + bankShadow:SetFrameLevel(math.max(SFBankFrame:GetFrameLevel() - 1, 0)) + bankShadow:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + bankShadow:SetBackdropColor(0, 0, 0, 0.55) + bankShadow:SetBackdropBorderColor(0, 0, 0, 0.4) + local scale = (SFramesDB and SFramesDB.Bags and type(SFramesDB.Bags.bankScale) == "number" and SFramesDB.Bags.bankScale) or 0.85 + SFBankFrame:SetScale(scale) + + local bankTitleIco = SFrames:CreateIcon(SFBankFrame, "gold", 14) + bankTitleIco:SetDrawLayer("OVERLAY") + bankTitleIco:SetPoint("TOPLEFT", SFBankFrame, "TOPLEFT", 10, -7) + bankTitleIco:SetVertexColor(_A.title[1], _A.title[2], _A.title[3]) + + local titleFS = SFrames:CreateFontString(SFBankFrame, 12, "LEFT") + titleFS:SetPoint("LEFT", bankTitleIco, "RIGHT", 4, 0) + titleFS:SetText(TEXT_BANK_TITLE) + titleFS:SetTextColor(_A.title[1], _A.title[2], _A.title[3]) + SFBankFrame.title = titleFS + + -- Close button + local closeBtn = CreateFrame("Button", "SFramesBankClose", SFBankFrame, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", SFBankFrame, "TOPRIGHT", 0, 0) + closeBtn:SetScript("OnClick", function() SFrames.Bags.Bank:Close() end) + + -- Money display + SFBankFrame.moneyFrame = CreateCoinDisplay(SFBankFrame, "SFramesBankMoneyFrame") + -- Temporary anchor; final anchor is set after purchase button is created. + SFBankFrame.moneyFrame:SetPoint("RIGHT", SFBankFrame, "BOTTOMRIGHT", -8, 17) + SetCoinDisplayMoney(SFBankFrame.moneyFrame, 0) + + -- Search bar (row 2: below title) + local searchEB = CreateFrame("EditBox", "SFramesBankSearchBox", SFBankFrame, "InputBoxTemplate") + searchEB:SetWidth(120) + searchEB:SetHeight(18) + searchEB:SetPoint("TOPLEFT", SFBankFrame, "TOPLEFT", 10, -27) + searchEB:SetAutoFocus(false) + searchEB:SetScript("OnEnterPressed", function() this:ClearFocus() end) + searchEB:SetScript("OnEscapePressed", function() + this:ClearFocus() + this:SetText("") + bankSearchText = "" + SafeBankUpdateLayout() + end) + searchEB:SetScript("OnTextChanged", function() + bankSearchText = this:GetText() or "" + SafeBankUpdateLayout() + end) + SFBankFrame.searchEB = searchEB + + local function CreateHeaderIconButton(name, parent, iconPath) + local btn = CreateFrame("Button", name, parent) + btn:SetWidth(18) + btn:SetHeight(18) + btn:SetFrameStrata(parent:GetFrameStrata()) + btn:SetFrameLevel(parent:GetFrameLevel() + 45) + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + btn:SetBackdropColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 0.86) + btn:SetBackdropBorderColor(_A.slotBorder[1], _A.slotBorder[2], _A.slotBorder[3], _A.slotBorder[4] or 0.8) + + local icon = btn:CreateTexture(nil, "ARTWORK") + icon:SetTexture(iconPath or "Interface\\Icons\\INV_Misc_QuestionMark") + icon:SetPoint("TOPLEFT", btn, "TOPLEFT", 2, -2) + icon:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -2, 2) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + btn.icon = icon + + local hl = btn:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + hl:SetBlendMode("ADD") + hl:SetAllPoints(btn) + + return btn + end + + -- Sort button (icon) + local sortBtn = CreateHeaderIconButton("SFramesBankSortBtn", SFBankFrame, "Interface\\Icons\\INV_Misc_Note_05") + sortBtn:SetPoint("LEFT", searchEB, "RIGHT", 6, 0) + SFrames:SetIcon(sortBtn.icon, "gold") + sortBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(TEXT_SORT, 1, 1, 1) + GameTooltip:Show() + end) + sortBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + sortBtn:SetScript("OnClick", function() + if SFrames.Bags.Sort and SFrames.Bags.Sort.StartBank then + SFrames.Bags.Sort:StartBank() + return + end + + -- Fallback for environments with a native bank sort API. + SortBank() + + local elapsed = 0 + local t = CreateFrame("Frame") + t:SetScript("OnUpdate", function() + elapsed = elapsed + arg1 + if elapsed >= 0.3 then + this:SetScript("OnUpdate", nil) + SafeBankUpdateLayout() + end + end) + end) + SFBankFrame.sortBtn = sortBtn + + -- Bank bag slots (equip/unequip + purchase flow) + for i = 1, BANK_BAG_COUNT do + local bagBtn = CreateBankBagButton(SFBankFrame, i) + if i == 1 then + bagBtn:SetPoint("BOTTOMLEFT", SFBankFrame, "BOTTOMLEFT", 8, 6) + else + bagBtn:SetPoint("LEFT", BankBagButtons[i - 1], "RIGHT", BANK_BAG_SPACING, 0) + end + BankBagButtons[i] = bagBtn + end + + local purchaseBtn = CreateHeaderIconButton("SFramesBankPurchaseBtn", SFBankFrame, "Interface\\Icons\\INV_Misc_Coin_01") + purchaseBtn:SetWidth(BANK_BAG_SIZE) + purchaseBtn:SetHeight(BANK_BAG_SIZE) + purchaseBtn:SetPoint("BOTTOMRIGHT", SFBankFrame, "BOTTOMRIGHT", -8, 6) + purchaseBtn.cost = 0 + purchaseBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:ClearLines() + GameTooltip:SetText(TEXT_BUY_SLOT, 1, 1, 1) + if SFrames.Bags.Bank.isOffline then + GameTooltip:AddLine(TEXT_UNAVAILABLE_OFFLINE, 0.75, 0.75, 0.75) + else + local cost = this.cost or 0 + if cost > 0 then + GameTooltip:AddLine(GetSafeCoinText(cost), 1, 0.82, 0) + end + GameTooltip:AddLine(TEXT_CLICK_BUY, 0.75, 0.75, 0.75) + end + GameTooltip:Show() + end) + purchaseBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + purchaseBtn:SetScript("OnClick", function() + if SFrames.Bags.Bank.isOffline then return end + if PurchaseSlot then + pcall(function() PurchaseSlot() end) + SafeBankUpdateLayout() + end + end) + SFBankFrame.purchaseBtn = purchaseBtn + + -- Keep bank money display on the same bottom row as bank bag controls. + if SFBankFrame.moneyFrame then + SFBankFrame.moneyFrame:ClearAllPoints() + SFBankFrame.moneyFrame:SetPoint("RIGHT", purchaseBtn, "LEFT", -6, 0) + end + + -- Character selector: button-triggered dropdown (stable text, avoids UIDropDown label glitches) + local function GetCurrentCharacterName() + local live = UnitName("player") + if type(live) == "string" and live ~= "" then + return live + end + local cached = SFrames.Bags.Offline:GetCurrentPlayerName() + if type(cached) == "string" and cached ~= "" then + return cached + end + return TEXT_CHARACTER + end + + local charBtn = CreateHeaderIconButton("SFramesBankCharBtn", SFBankFrame, CHARACTER_SELECTOR_ICON) + charBtn:SetPoint("TOPRIGHT", SFBankFrame, "TOPRIGHT", -8, -26) + SFBankFrame.charSelectBtn = charBtn + + local dd = CreateFrame("Frame", "SFramesBankOfflineDD", SFBankFrame, "UIDropDownMenuTemplate") + dd:Hide() + dd:SetPoint("TOPRIGHT", charBtn, "BOTTOMRIGHT", 0, 0) + + local function RefreshCharacterSelectorText() + if not SFBankFrame or not SFBankFrame.charSelectBtn then return end + if SFrames.Bags.Bank.isOffline and SFrames.Bags.Bank.offlineChar then + SFBankFrame.charSelectorLabel = SFrames.Bags.Bank.offlineChar .. " (" .. TEXT_OFFLINE .. ")" + else + SFBankFrame.charSelectorLabel = GetCurrentCharacterName() .. " (" .. TEXT_ONLINE .. ")" + end + end + SFBankFrame.RefreshCharacterSelectorText = RefreshCharacterSelectorText + + local function OnSelect() + local char = this.value + if char == "CURRENT" then + SFrames.Bags.Bank.isOffline = false + SFrames.Bags.Bank.offlineChar = nil + else + SFrames.Bags.Bank.isOffline = true + SFrames.Bags.Bank.offlineChar = char + end + RefreshCharacterSelectorText() + SafeBankUpdateLayout() + end + + UIDropDownMenu_Initialize(dd, function() + local info = UIDropDownMenu_CreateInfo and UIDropDownMenu_CreateInfo() or {} + local currentName = GetCurrentCharacterName() + info.text = currentName .. " (" .. TEXT_ONLINE .. ")" + info.value = "CURRENT" + info.func = OnSelect + info.checked = (not SFrames.Bags.Bank.isOffline) + UIDropDownMenu_AddButton(info) + + local chars = SFrames.Bags.Offline:GetCharacterList() + table.sort(chars) + for _, char in ipairs(chars) do + if char ~= currentName then + info = UIDropDownMenu_CreateInfo and UIDropDownMenu_CreateInfo() or {} + info.text = char .. " (" .. TEXT_OFFLINE .. ")" + info.value = char + info.func = OnSelect + info.checked = SFrames.Bags.Bank.isOffline and SFrames.Bags.Bank.offlineChar == char + UIDropDownMenu_AddButton(info) + end + end + end) + + charBtn:SetScript("OnClick", function() + ToggleDropDownMenu(1, nil, dd, this, 0, 0) + end) + charBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(SFBankFrame.charSelectorLabel or TEXT_CHARACTER, 1, 1, 1) + GameTooltip:Show() + end) + charBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + RefreshCharacterSelectorText() + + -- Use BANKFRAME_OPENED / CLOSED events (same as Guda) + -- IMPORTANT: WoW 1.12 needs a short delay before GetContainerItemInfo(-1,slot) + -- returns valid data after BANKFRAME_OPENED fires. + local eventFrame = CreateFrame("Frame") + eventFrame:RegisterEvent("BANKFRAME_OPENED") + eventFrame:RegisterEvent("BANKFRAME_CLOSED") + eventFrame:RegisterEvent("BAG_UPDATE") + eventFrame:RegisterEvent("PLAYERBANKSLOTS_CHANGED") + eventFrame:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED") + eventFrame:RegisterEvent("PLAYER_MONEY") + eventFrame:SetScript("OnEvent", function() + if not (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.enable) then return end + + if event == "BANKFRAME_OPENED" then + -- CRITICAL: Do NOT call BankFrame:Hide() here! + -- BankFrame has an OnHide script that calls CloseBankFrame(), which + -- immediately closes the bank session and makes GetContainerItemInfo(-1,slot) return nil. + -- Instead, move BankFrame off-screen so the session stays open but it's invisible. + local bf = _G["BankFrame"] + if bf then + bf:ClearAllPoints() + bf:SetPoint("TOPLEFT", UIParent, "TOPLEFT", -5000, 5000) + bf:EnableMouse(false) -- Prevent accidental clicks + end + -- Open once; Open() already performs a delayed refresh. + SFrames.Bags.Bank:Open() + + elseif event == "BANKFRAME_CLOSED" then + if not isClosing then + SFrames.Bags.Bank:Close() + end + + elseif event == "BAG_UPDATE" or event == "PLAYERBANKSLOTS_CHANGED" or event == "PLAYERBANKBAGSLOTS_CHANGED" or event == "PLAYER_MONEY" then + if event == "PLAYERBANKBAGSLOTS_CHANGED" then + bankBagInvSlotCache = {} + elseif event == "BAG_UPDATE" and type(arg1) == "number" and arg1 >= BANK_BAG_FIRST_ID and arg1 <= BANK_BAG_LAST_ID then + bankBagInvSlotCache = {} + end + if SFBankFrame:IsVisible() and not SFrames.Bags.Bank.isOffline then + SafeBankUpdateLayout() + end + end + end) +end + +function SFrames.Bags.Bank:Open() + if not SFBankFrame then return end + self.isOffline = false + self.offlineChar = nil + bankBagInvSlotCache = {} + if SFBankFrame and SFBankFrame.RefreshCharacterSelectorText then + SFBankFrame.RefreshCharacterSelectorText() + end + + -- Bank-open layout: bank on left, bags on right. + if SFBankFrame then + SFBankFrame:ClearAllPoints() + SFBankFrame:SetPoint("CENTER", UIParent, "CENTER", -360, 0) + end + local bagFrame = _G["SFramesBagFrame"] + if bagFrame then + bagFrame:ClearAllPoints() + bagFrame:SetPoint("CENTER", UIParent, "CENTER", 360, 0) + end + + SFBankFrame:Show() + + local elapsed = 0 + local nextRefresh = 1 + local refreshPoints = { 0.06, 0.20, 0.45, 0.85, 1.30 } + local refreshTimer = CreateFrame("Frame") + refreshTimer:SetScript("OnUpdate", function() + elapsed = elapsed + arg1 + if nextRefresh <= table.getn(refreshPoints) and elapsed >= refreshPoints[nextRefresh] then + if SFBankFrame:IsVisible() and not SFrames.Bags.Bank.isOffline then + SafeBankUpdateLayout() + end + nextRefresh = nextRefresh + 1 + end + if nextRefresh > table.getn(refreshPoints) then + this:SetScript("OnUpdate", nil) + end + end) + + -- Keep bank bag state synced: some clients delay slot/container updates. + local syncFrame = CreateFrame("Frame") + syncFrame.timer = 0 + syncFrame:SetScript("OnUpdate", function() + if not (SFBankFrame and SFBankFrame:IsVisible()) then + this.timer = 0 + return + end + if SFrames.Bags.Bank.isOffline then + this.timer = 0 + return + end + + this.timer = this.timer + (arg1 or 0) + if this.timer >= 0.5 then + this.timer = 0 + SFrames.Bags.Bank:UpdateBankBagButtons() + end + end) +end + +function SFrames.Bags.Bank:OpenOffline(charName) + if not SFBankFrame then + if self.Initialize then + self:Initialize() + end + end + if not SFBankFrame then + return false + end + + local targetChar = nil + if type(charName) == "string" and charName ~= "" then + targetChar = charName + elseif SFrames.Bags.Offline and SFrames.Bags.Offline.GetCurrentPlayerName then + targetChar = SFrames.Bags.Offline:GetCurrentPlayerName() + end + + if not targetChar or targetChar == "" then + if SFrames and SFrames.Print then + SFrames:Print(TEXT_UNAVAILABLE_OFFLINE) + end + return false + end + + local data = nil + if SFrames.Bags.Offline and SFrames.Bags.Offline.GetCharacterData then + data = SFrames.Bags.Offline:GetCharacterData(targetChar) + end + if not data then + if SFrames and SFrames.Print then + SFrames:Print(TEXT_UNAVAILABLE_OFFLINE) + end + return false + end + + self.isOffline = true + self.offlineChar = targetChar + bankBagInvSlotCache = {} + + if SFBankFrame.RefreshCharacterSelectorText then + SFBankFrame.RefreshCharacterSelectorText() + end + + -- Match live-bank layout so bag and bank are shown side by side. + SFBankFrame:ClearAllPoints() + SFBankFrame:SetPoint("CENTER", UIParent, "CENTER", -360, 0) + local bagFrame = _G["SFramesBagFrame"] + if bagFrame then + bagFrame:ClearAllPoints() + bagFrame:SetPoint("CENTER", UIParent, "CENTER", 360, 0) + end + + SFBankFrame:Show() + SafeBankUpdateLayout() + return true +end + +function SFrames.Bags.Bank:Close() + if isClosing then return end -- Already closing, prevent recursion + isClosing = true + local wasOffline = self.isOffline + if SFBankFrame then SFBankFrame:Hide() end + -- Restore BankFrame so WoW's close sequence works properly, + -- then let CloseBankFrame() trigger its own OnHide naturally. + local bf = _G["BankFrame"] + if bf then + bf:EnableMouse(true) + bf:ClearAllPoints() + bf:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + end + if (not wasOffline) and CloseBankFrame then + CloseBankFrame() -- Tell server to close bank session (triggers BankFrame OnHide and closes it) + end + isClosing = false +end + +function SFrames.Bags.Bank:Toggle() + if SFBankFrame and SFBankFrame:IsVisible() then + self:Close() + else + self:Open() + end +end + +SLASH_NANAMIBANKDBG1 = "/nanamibankdbg" +SlashCmdList["NANAMIBANKDBG"] = function() + if not (SFrames and SFrames.Print) then return end + + local purchased = (GetNumBankSlots and GetNumBankSlots()) or 0 + SFrames:Print("BankDbg purchased=" .. tostring(purchased)) + + for i = 1, BANK_BAG_COUNT do + local bagID = i + (BANK_BAG_FIRST_ID - 1) + local bagSlots = GetContainerNumSlots(bagID) or 0 + local invSlot = GetBankBagInvSlotID(i) + local link = invSlot and SafeGetInventoryItemLink("player", invSlot) or nil + local isBag = link and IsBagItemLink(link) + local liveTex = GetLiveBankBagIconTexture(i) + local unlocked = IsBankBagSlotUnlocked(i) + + local mapBag1 = nil + local mapIdx1 = nil + if BankButtonIDToInvSlotID then + local okA, resA = pcall(function() return BankButtonIDToInvSlotID(bagID, 1) end) + if okA then mapBag1 = resA end + local okB, resB = pcall(function() return BankButtonIDToInvSlotID(i, 1) end) + if okB then mapIdx1 = resB end + end + + local line = + "slot" .. i .. + " bagID=" .. tostring(bagID) .. + " size=" .. tostring(bagSlots) .. + " unlocked=" .. tostring(unlocked) .. + " invSlot=" .. tostring(invSlot) .. + " link=" .. tostring(link) .. + " isBag=" .. tostring(isBag) .. + " liveTex=" .. tostring(liveTex) .. + " map(bag,1)=" .. tostring(mapBag1) .. + " map(idx,1)=" .. tostring(mapIdx1) + + SFrames:Print(line) + end +end diff --git a/Bags/Container.lua b/Bags/Container.lua new file mode 100644 index 0000000..e951b7a --- /dev/null +++ b/Bags/Container.lua @@ -0,0 +1,1619 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Bag Container UI (Bags/Container.lua) +-------------------------------------------------------------------------------- + +SFrames.Bags.Container = {} + +local SLOT_SIZE = 36 +local SPACING = 6 +local MARGIN = 10 +local TOP_OFFSET = 52 -- Space for title + search bar + gold +local TEXT_EMPTY = "\231\169\186" +local TEXT_ITEM = "\231\137\169\229\147\129" +local TEXT_BACKPACK = "\232\131\140\229\140\133" +local TEXT_BAGS_TITLE = "\232\131\140\229\140\133" +local TEXT_BANK_TITLE = "\233\147\182\232\161\140" +local TEXT_SORT = "\230\149\180\231\144\134" +local TEXT_SETTINGS = "\232\174\190\231\189\174" +local TEXT_BAG_SLOT = "\232\131\140\229\140\133\230\167\189" +local TEXT_BAG_EMPTY = "\231\169\186" +local TEXT_BAG_SLOTS = "\230\160\188" +local TEXT_EQUIPPED_BAG = "\229\183\178\232\163\133\229\164\135\232\131\140\229\140\133" +local TEXT_HS_USE = "\231\130\185\229\135\187\228\189\191\231\148\168\231\130\137\231\159\179" +local TEXT_HS_NOT_FOUND = "\232\131\140\229\140\133\228\184\173\230\156\170\230\137\190\229\136\176\231\130\137\231\159\179\227\128\130" +local TEXT_CHARACTER = "\232\167\146\232\137\178" +local TEXT_ONLINE = "\229\156\168\231\186\191" +local TEXT_OFFLINE = "\231\166\187\231\186\191" +local PANEL_BG_ALPHA = 0.55 +local SLOT_BG_ALPHA = 0.22 +local CHARACTER_SELECTOR_ICON = "Interface\\CHARACTERFRAME\\TemporaryPortrait-Female-Human" + +local _A = SFrames.ActiveTheme + +local BagFrame = nil +local ItemSlots = {} +local playerBagInvSlots = { [1] = 20, [2] = 21, [3] = 22, [4] = 23 } + +local function IsLiveBankOpen() + local bankFrame = _G["SFramesBankFrame"] + if not bankFrame or not bankFrame:IsVisible() then return false end + if not SFrames.Bags.Bank then return false end + return not SFrames.Bags.Bank.isOffline +end + +local function SetTooltipFromContainerItem(bagID, slotID) + if not GameTooltip then return false end + GameTooltip:ClearLines() + + if GameTooltip.SetBagItem then + local ok = pcall(function() GameTooltip:SetBagItem(bagID, slotID) end) + if ok then + local left1 = _G["GameTooltipTextLeft1"] + if left1 and left1:GetText() and left1:GetText() ~= "" then + return true + end + end + end + + local link = GetContainerItemLink(bagID, slotID) + if link then + local ok = pcall(function() GameTooltip:SetHyperlink(link) end) + if ok then + local left1 = _G["GameTooltipTextLeft1"] + if left1 and left1:GetText() and left1:GetText() ~= "" then + return true + end + end + + local name = GetItemInfo(link) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + return true + end + end + + return false +end + +local function HasTooltipText() + local left1 = _G["GameTooltipTextLeft1"] + return left1 and left1:GetText() and left1:GetText() ~= "" +end + +local function GetItemNameFromLink(link) + if type(link) ~= "string" or link == "" then + return nil + end + + local name = GetItemInfo(link) + if name and name ~= "" then + return name + end + + local _, _, parsed = string.find(link, "%[(.+)%]") + if parsed and parsed ~= "" then + return parsed + end + + return nil +end + +local function ShowMerchantCursorForSlot(button) + if not button then return end + if button.bagID == nil or button.slotID == nil then return end + if SFrames.Bags.Container and SFrames.Bags.Container.isOffline then return end + if not ((MerchantFrame and MerchantFrame:IsVisible()) or (SFramesMerchantFrame and SFramesMerchantFrame:IsVisible())) then return end + + local texture, _, locked = GetContainerItemInfo(button.bagID, button.slotID) + if not texture or locked then return end + + -- Prefer container-aware API when available. + if ShowContainerSellCursor then + local ok = pcall(function() + ShowContainerSellCursor(button.bagID, button.slotID) + end) + if ok then return end + end + + -- Fallback to generic merchant sell cursor. + if ShowMerchantSellCursor then + local ok = pcall(function() + ShowMerchantSellCursor() + end) + if ok then return end + end + + -- Final fallback for clients lacking both APIs. + if SetCursor then + pcall(function() + SetCursor("BUY_CURSOR") + end) + end +end + +local function ResolvePlayerBagInvSlots() + local fallback = { [1] = 20, [2] = 21, [3] = 22, [4] = 23 } + for bagIndex = 1, 4 do + local invSlot = nil + local liveBtn = _G["CharacterBag" .. (bagIndex - 1) .. "Slot"] + + -- Most reliable when Blizzard character UI is loaded. + if liveBtn and liveBtn.GetID then + local id = liveBtn:GetID() + if type(id) == "number" and id > 0 then + invSlot = id + end + end + + if (not invSlot) and ContainerIDToInventoryID then + local ok, slotID = pcall(function() return ContainerIDToInventoryID(bagIndex) end) + if ok and type(slotID) == "number" and slotID > 0 then + invSlot = slotID + end + end + + if (not invSlot) and GetInventorySlotInfo then + local slotNames = { + "Bag" .. (bagIndex - 1) .. "Slot", + "Bag" .. bagIndex .. "Slot", + "CharacterBag" .. (bagIndex - 1) .. "Slot", + } + for _, slotName in ipairs(slotNames) do + local ok, slotID = pcall(function() return GetInventorySlotInfo(slotName) end) + if ok and type(slotID) == "number" and slotID > 0 then + invSlot = slotID + break + end + end + end + + playerBagInvSlots[bagIndex] = invSlot or fallback[bagIndex] + end +end + +local function GetLivePlayerBagIconTexture(bagIndex) + local btn = _G["CharacterBag" .. (bagIndex - 1) .. "Slot"] + if not btn then return nil end + + local icon = _G[btn:GetName() .. "IconTexture"] or _G[btn:GetName() .. "Icon"] + if icon and icon.GetTexture then + local tex = icon:GetTexture() + if tex and tex ~= "" then + return tex + end + end + + return nil +end + +local function IsDisabledIconTexture(tex) + if type(tex) ~= "string" then return false end + local lower = string.lower(tex) + lower = string.gsub(lower, "\\", "/") + return string.find(lower, "disabled", 1, true) ~= nil +end + +local function IsPaperdollBagPlaceholder(tex) + if type(tex) ~= "string" then return false end + local lower = string.lower(tex) + lower = string.gsub(lower, "\\", "/") + + if string.find(lower, "ui-paperdoll-slot-bag", 1, true) then + return true + end + + -- Some clients may return slightly different placeholder paths. + if string.find(lower, "paperdoll", 1, true) and + string.find(lower, "slot", 1, true) and + string.find(lower, "bag", 1, true) then + return true + end + + return false +end + +local function IsUsableBagIconTexture(tex) + if type(tex) ~= "string" or tex == "" then + return false + end + if IsPaperdollBagPlaceholder(tex) then + return false + end + if IsDisabledIconTexture(tex) then + return false + end + return true +end + +local function GetIconFromItemLink(link) + if not link then return nil end + + local _, _, _, _, _, _, _, _, tex = GetItemInfo(link) + if tex then return tex end + + local _, _, itemID = string.find(link, "item:(%d+)") + if itemID then + local _, _, _, _, _, _, _, _, tex2 = GetItemInfo("item:" .. itemID) + if tex2 then return tex2 end + end + + return nil +end + +local function BuildPlayerTradeLinkSet() + local links = {} + if not (TradeFrame and TradeFrame:IsVisible()) then return links end + if not GetTradePlayerItemLink then return links end + for i = 1, 6 do + local link = GetTradePlayerItemLink(i) + if link and link ~= "" then + links[link] = true + end + end + return links +end + +local function CreateCoinDisplay(parent, frameName) + local frame = CreateFrame("Frame", frameName, parent, "SmallMoneyFrameTemplate") + frame:SetFrameStrata(parent:GetFrameStrata()) + frame:SetFrameLevel(parent:GetFrameLevel() + 30) + frame:SetWidth(140) + frame:SetHeight(16) + return frame +end + +local function SetCoinDisplayMoney(display, copper) + if not display then return end + local value = tonumber(copper) or 0 + if value < 0 then value = 0 end + + if SmallMoneyFrame_SetAmount then + local ok = pcall(function() SmallMoneyFrame_SetAmount(display, value) end) + if ok then return end + end + + if MoneyFrame_Update and display.GetName then + local frameName = display:GetName() + if frameName and frameName ~= "" then + pcall(function() MoneyFrame_Update(frameName, value) end) + end + end +end + +-- Create a single item slot button +local function CreateSlot(parent, id) + local button = CreateFrame("Button", "SFramesBagSlot" .. id, parent, "ItemButtonTemplate") + button:RegisterForClicks("LeftButtonUp", "RightButtonUp") + button:RegisterForDrag("LeftButton") + + -- Rounded backdrop style (matching CharacterPanel equipment slots) + local DEFAULT_BORDER = (_A and _A.slotBorder) or { 0.25, 0.25, 0.3, 0.8 } + button:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 18, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + button:SetBackdropColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 0.9) + button:SetBackdropBorderColor(DEFAULT_BORDER[1], DEFAULT_BORDER[2], DEFAULT_BORDER[3], DEFAULT_BORDER[4]) + + -- Inset icon within the rounded border + local icon = _G[button:GetName() .. "IconTexture"] + if icon then + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:ClearAllPoints() + icon:SetPoint("TOPLEFT", button, "TOPLEFT", 4, -4) + icon:SetPoint("BOTTOMRIGHT", button, "BOTTOMRIGHT", -4, 4) + end + + local qualGlow = button:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.8) + qualGlow:SetWidth(SLOT_SIZE * 1.9) + qualGlow:SetHeight(SLOT_SIZE * 1.9) + qualGlow:SetPoint("CENTER", button, "CENTER", 0, 0) + qualGlow:Hide() + button.qualGlow = qualGlow + + function button:SetBorderColor(r, g, b, a) + self.qualGlow:SetVertexColor(r, g, b) + self.qualGlow:Show() + self._qualityBorder = true + end + function button:ShowBorder() + self._qualityBorder = true + end + function button:HideBorder() + self.qualGlow:Hide() + self._qualityBorder = false + end + + -- Hide the ugly default rounded Blizzard border + local nt = _G[button:GetName() .. "NormalTexture"] + if nt then nt:SetTexture(nil) nt:Hide() end + + -- Grey item marker (a small coin/junk icon in the corner) + local junkIcon = button:CreateTexture(nil, "OVERLAY") + junkIcon:SetTexture("Interface\\Buttons\\UI-GroupLoot-Coin-Up") + junkIcon:SetWidth(14) + junkIcon:SetHeight(14) + -- Place it on top of everything + junkIcon:SetPoint("TOPLEFT", button, "TOPLEFT", 1, -1) + junkIcon:Hide() + button.junkIcon = junkIcon + + local previewGlow = button:CreateTexture(nil, "OVERLAY") + previewGlow:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + previewGlow:SetBlendMode("ADD") + previewGlow:SetAllPoints(button) + previewGlow:Hide() + button.previewGlow = previewGlow + + local tradeText = button:CreateFontString(nil, "OVERLAY") + tradeText:SetFont("Fonts\\Zekton.ttf", 10, "OUTLINE") + if setglobal then -- check Vanilla or use default font + tradeText:SetFontObject(GameFontNormal) + end + tradeText:SetPoint("CENTER", button, "CENTER", 0, 0) + tradeText:SetText("交易") + tradeText:SetTextColor(0, 1, 0, 1) + tradeText:Hide() + button.tradeText = tradeText + + button:SetScript("OnEnter", function() + if this.bagID == nil or this.slotID == nil then return end + SFrames.Bags._hoveredSlot = this + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:ClearLines() + + if SFrames.Bags.Container.isOffline and SFrames.Bags.Container.offlineChar then + local data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Container.offlineChar) + if data and data.bags[this.bagID] and data.bags[this.bagID].items[this.slotID] then + local link = data.bags[this.bagID].items[this.slotID].link + local shown = false + if link then + local _, _, itemStr = string.find(link, "(item:[%-?%d:]+)") + local ok = false + if itemStr then + ok = pcall(function() GameTooltip:SetHyperlink(itemStr) end) + else + ok = pcall(function() GameTooltip:SetHyperlink(link) end) + end + shown = ok and HasTooltipText() + + if not shown then + local name = GetItemNameFromLink(link) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + shown = true + end + end + + if not shown then + GameTooltip:SetText(TEXT_ITEM, 1, 1, 1) + end + else + GameTooltip:SetText(TEXT_EMPTY, 0.65, 0.65, 0.65) + end + else + GameTooltip:SetText(TEXT_EMPTY, 0.65, 0.65, 0.65) + end + else + local shown = SetTooltipFromContainerItem(this.bagID, this.slotID) + if not shown then + GameTooltip:SetText(TEXT_EMPTY, 0.65, 0.65, 0.65) + end + end + if IsControlKeyDown() then + ShowInspectCursor() + else + ShowMerchantCursorForSlot(this) + end + GameTooltip:Show() + end) + + button:SetScript("OnLeave", function() + SFrames.Bags._hoveredSlot = nil + this.controlDownLast = nil + GameTooltip:Hide() + if HideContainerSellCursor and this.bagID and this.slotID then + pcall(function() + HideContainerSellCursor(this.bagID, this.slotID) + end) + end + ResetCursor() + end) + + local cooldown = CreateFrame("Model", button:GetName().."Cooldown", button, "CooldownFrameTemplate") + cooldown:SetAllPoints(button) + + function button:SplitStack(split) + if not split or split < 1 then return end + if self.bagID == nil or self.slotID == nil then return end + SplitContainerItem(self.bagID, self.slotID, split) + end + + button:SetScript("OnClick", function() + local bagID = this.bagID + local slotID = this.slotID + local isOffline = SFrames.Bags.Container.isOffline + + -- Helper: get item link for this slot (works both online and offline) + local function GetSlotLink() + if isOffline and SFrames.Bags.Container.offlineChar then + local data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Container.offlineChar) + if data and data.bags[bagID] and data.bags[bagID].items[slotID] then + return data.bags[bagID].items[slotID].link + end + return nil + end + return GetContainerItemLink(bagID, slotID) + end + + if IsControlKeyDown() and arg1 == "LeftButton" then + local link = GetSlotLink() + if link and DressUpItemLink then + DressUpItemLink(link) + return + end + end + if IsShiftKeyDown() then + local eb = ChatFrameEditBox + if eb and eb.IsVisible and eb:IsVisible() then + local link = GetSlotLink() + if link then eb:Insert(link) end + return + end + if not isOffline and arg1 == "LeftButton" and (not CursorHasItem()) and OpenStackSplitFrame then + local _, itemCount = GetContainerItemInfo(bagID, slotID) + if itemCount and itemCount > 1 then + OpenStackSplitFrame(itemCount, this, "BOTTOMLEFT", "TOPLEFT") + return + end + end + end + + -- Block all other actions in offline mode + if isOffline then return end + + if arg1 == "RightButton" then + if SFrames.Mail and SFrames.Mail.TryAddItemFromBag then + if SFrames.Mail.TryAddItemFromBag(bagID, slotID) then return end + end + if this.bagID >= 0 and IsLiveBankOpen() and AutoStoreBagItem then + local ok = pcall(function() AutoStoreBagItem(this.bagID, this.slotID) end) + if ok then return end + end + + if TradeFrame and TradeFrame:IsVisible() and not IsShiftKeyDown() then + local _, _, locked = GetContainerItemInfo(this.bagID, this.slotID) + if locked then + local link = GetSlotLink() + if link and GetTradePlayerItemLink then + local inTradeSlot = nil + for i = 1, 6 do + if GetTradePlayerItemLink(i) == link then + inTradeSlot = i + break + end + end + if inTradeSlot then + ClearCursor() + ClickTradeButton(inTradeSlot) + ClearCursor() + return + end + if BagFrame and BagFrame:IsVisible() then + SFrames.Bags.Container:UpdateLayout() + end + end + else + PickupContainerItem(this.bagID, this.slotID) + local tradeSlot = TradeFrame_GetAvailableSlot and TradeFrame_GetAvailableSlot() + if tradeSlot then ClickTradeButton(tradeSlot) end + if CursorHasItem() then ClearCursor() end + return + end + end + + if AuctionFrame and AuctionFrame:IsShown() and not IsShiftKeyDown() then + if AuctionFrameBrowse and AuctionFrameBrowse:IsShown() then + local link = GetContainerItemLink(this.bagID, this.slotID) + if link then + local _, _, itemName = string.find(link, "%[(.+)%]") + if itemName and BrowseName then + BrowseName:SetText(itemName) + if AuctionFrameBrowse_Search then AuctionFrameBrowse_Search() end + end + end + return + elseif AuctionFrameAuctions and AuctionFrameAuctions:IsShown() then + PickupContainerItem(this.bagID, this.slotID) + if AuctionsItemButton then AuctionsItemButton:Click() end + if CursorHasItem() then ClearCursor() end + return + end + end + + UseContainerItem(this.bagID, this.slotID) + else + PickupContainerItem(this.bagID, this.slotID) + end + end) + + button:SetScript("OnDragStart", function() + if SFrames.Bags.Container.isOffline then return end + if CursorHasItem() then return end + PickupContainerItem(this.bagID, this.slotID) + end) + + button:SetScript("OnReceiveDrag", function() + if SFrames.Bags.Container.isOffline then return end + if CursorHasItem() then + PickupContainerItem(this.bagID, this.slotID) + end + end) + + return button +end + +local function SaveBagFramePosition() + if not (BagFrame and SFramesDB and SFramesDB.Bags) then return end + local point, _, relPoint, x, y = BagFrame:GetPoint() + if not point or not relPoint then return end + SFramesDB.Bags.bagPosition = { + point = point, + relPoint = relPoint, + x = x or 0, + y = y or 0, + } +end + +local function ApplyBagFramePosition() + if not BagFrame then return end + BagFrame:ClearAllPoints() + + local pos = SFramesDB and SFramesDB.Bags and SFramesDB.Bags.bagPosition + if pos and pos.point and pos.relPoint and type(pos.x) == "number" and type(pos.y) == "number" then + BagFrame:SetPoint(pos.point, UIParent, pos.relPoint, pos.x, pos.y) + else + -- Default to left side; bank frame defaults to right side. + BagFrame:SetPoint("CENTER", UIParent, "CENTER", -360, 0) + end +end + +function SFrames.Bags.Container:PreviewBagSlots(targetBagID) + for _, btn in ipairs(ItemSlots) do + if btn and btn:IsShown() then + local icon = _G[btn:GetName() .. "IconTexture"] + local isMatch = (btn.bagID == targetBagID) + + if icon then + icon:SetVertexColor(1, 1, 1) + end + + if btn.previewGlow then + if isMatch then + btn.previewGlow:Show() + else + btn.previewGlow:Hide() + end + end + end + end +end + +function SFrames.Bags.Container:ClearBagPreview() + for _, btn in ipairs(ItemSlots) do + if btn and btn:IsShown() then + local icon = _G[btn:GetName() .. "IconTexture"] + if icon then icon:SetVertexColor(1, 1, 1) end + if btn.previewGlow then btn.previewGlow:Hide() end + end + end + + -- Restore search dimming state after preview. + local query = "" + if SFramesBagSearchBox and SFramesBagSearchBox.GetText then + query = SFramesBagSearchBox:GetText() or "" + end + if SFrames.Bags.Features and SFrames.Bags.Features.ApplySearch then + SFrames.Bags.Features:ApplySearch(query) + end +end + +-- Build/Update the item slot grid +function SFrames.Bags.Container:UpdateLayout() + if not BagFrame then return end + + local cols = (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.columns) or 10 + local spacing = (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.bagSpacing) or SPACING + spacing = tonumber(spacing) or SPACING + if spacing < 0 then spacing = 0 end + local slots = {} + + local isOffline = self.isOffline + local charName = self.offlineChar + local offlineDB = nil + if isOffline and charName then + offlineDB = SFrames.Bags.Offline:GetCharacterData(charName) + if not offlineDB then + isOffline = false + self.isOffline = false + self.offlineChar = nil + if BagFrame and BagFrame.RefreshCharacterSelectorText then + BagFrame.RefreshCharacterSelectorText() + end + end + end + + local tradeLinks = nil + if not isOffline and TradeFrame and TradeFrame:IsVisible() then + tradeLinks = BuildPlayerTradeLinkSet() + end + + -- Collect all slots (bags 0-4) + for bag = 0, 4 do + local size = 0 + if isOffline and offlineDB then + if offlineDB.bags[bag] then size = offlineDB.bags[bag].size end + else + size = GetContainerNumSlots(bag) + end + for slot = 1, size do + table.insert(slots, { bag = bag, slot = slot }) + end + end + + local numSlots = table.getn(slots) + if numSlots == 0 then numSlots = 1 end + local rows = math.ceil(numSlots / cols) + + -- Resize frame + local width = MARGIN * 2 + (cols * SLOT_SIZE) + math.max(0, (cols - 1)) * spacing + local height = MARGIN * 2 + TOP_OFFSET + (rows * SLOT_SIZE) + math.max(0, (rows - 1)) * spacing + 24 + BagFrame:SetWidth(math.max(width, 160)) + BagFrame:SetHeight(height) + + -- Position & update slots + for i, meta in ipairs(slots) do + local btn = ItemSlots[i] + if not btn then + btn = CreateSlot(BagFrame, i) + ItemSlots[i] = btn + end + + btn.bagID = meta.bag + btn.slotID = meta.slot + + local row = math.floor((i - 1) / cols) + local col = math.mod((i - 1), cols) + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", BagFrame, "TOPLEFT", + MARGIN + col * (SLOT_SIZE + spacing), + -(MARGIN + TOP_OFFSET + row * (SLOT_SIZE + spacing))) + + -- Fetch item info + local texture, count, quality, link, locked + if isOffline and offlineDB then + if offlineDB.bags[meta.bag] and offlineDB.bags[meta.bag].items[meta.slot] then + local item = offlineDB.bags[meta.bag].items[meta.slot] + texture = item.texture + count = item.count + quality = item.quality + link = item.link + locked = false + end + else + local t, c, l, q = GetContainerItemInfo(meta.bag, meta.slot) + texture = t; count = c; locked = l; quality = q + link = GetContainerItemLink(meta.bag, meta.slot) + end + + SetItemButtonTexture(btn, texture) + SetItemButtonCount(btn, count) + local iconTex = _G[btn:GetName() .. "IconTexture"] + + local isDesaturated = locked and (not tradeLinks) + if btn.tradeText then btn.tradeText:Hide() end + if tradeLinks and link then + local isLockedByTrade = locked and (tradeLinks[link] and true or false) + if isLockedByTrade then + if btn.tradeText then btn.tradeText:Show() end + isDesaturated = true + else + -- Ignore stale locked flags for items no longer in trade. + isDesaturated = false + SFramesBagsTooltipScanner = SFramesBagsTooltipScanner or CreateFrame("GameTooltip", "SFramesBagsTooltipScanner", nil, "GameTooltipTemplate") + SFramesBagsTooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + SFramesBagsTooltipScanner:ClearLines() + local hasItem = SFramesBagsTooltipScanner:SetBagItem(meta.bag, meta.slot) + if hasItem then + for i = 1, 10 do + local line = _G["SFramesBagsTooltipScannerTextLeft" .. i] + if line then + local text = line:GetText() + if text and (text == ITEM_SOULBOUND or text == ITEM_BIND_QUEST or text == "Quest Item") then + isDesaturated = true + break + end + else + break + end + end + end + end + elseif not isOffline and TradeFrame and TradeFrame:IsVisible() and link then + SFramesBagsTooltipScanner = SFramesBagsTooltipScanner or CreateFrame("GameTooltip", "SFramesBagsTooltipScanner", nil, "GameTooltipTemplate") + SFramesBagsTooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + SFramesBagsTooltipScanner:ClearLines() + local hasItem = SFramesBagsTooltipScanner:SetBagItem(meta.bag, meta.slot) + if hasItem then + for i = 1, 10 do + local line = _G["SFramesBagsTooltipScannerTextLeft" .. i] + if line then + local text = line:GetText() + if text and (text == ITEM_SOULBOUND or text == ITEM_BIND_QUEST or text == "Quest Item") then + isDesaturated = true + break + end + else + break + end + end + end + end + + if iconTex then + if isDesaturated then + iconTex:SetVertexColor(0.5, 0.5, 0.5) + else + iconTex:SetVertexColor(1, 1, 1) + end + end + if btn.previewGlow then btn.previewGlow:Hide() end + + -- Quality border & Grey marker + btn:HideBorder() + btn.junkIcon:Hide() + + if link then + -- 1st attempt: Safest 1.12 generic approach: Read the color straight out of the hyperlink! + -- Standard link format: |cffAABBCC|Hitem:... + local _, _, hex = string.find(link, "|c(%x+)|H") + local parsedColor = false + + if hex and string.len(hex) == 8 then + local hexLower = string.lower(hex) + if hexLower == "ff9d9d9d" then + -- Poor / Grey Item + btn:SetBorderColor(0.5, 0.5, 0.5, 1) + btn:ShowBorder() + btn.junkIcon:Show() + parsedColor = true + elseif hexLower == "ffffffff" then + -- Common / White Item (No special border) + parsedColor = true + else + -- Green, Blue, Purple, Orange + local r = tonumber(string.sub(hex, 3, 4), 16) / 255 + local g = tonumber(string.sub(hex, 5, 6), 16) / 255 + local b = tonumber(string.sub(hex, 7, 8), 16) / 255 + btn:SetBorderColor(r, g, b, 1) + btn:ShowBorder() + parsedColor = true + end + end + + -- 2nd attempt fallback: Use the API quality return values if regex fails + if not parsedColor then + local q = quality + if not q then + local _, _, itemString = string.find(link, "item:(%d+)") + if itemString then + local _, _, scanRarity = GetItemInfo("item:" .. itemString) + q = scanRarity + end + end + + if q then + if q == 0 then + btn:SetBorderColor(0.5, 0.5, 0.5, 1) + btn:ShowBorder() + btn.junkIcon:Show() + elseif q > 1 then + local r, g, b = GetItemQualityColor(q) + btn:SetBorderColor(r, g, b, 1) + btn:ShowBorder() + end + end + end + end + + -- Cooldowns + local cooldown = _G[btn:GetName() .. "Cooldown"] + if cooldown then + if isOffline then + cooldown:Hide() + else + local start, duration, enable = GetContainerItemCooldown(meta.bag, meta.slot) + if start and duration and start > 0 and duration > 0 then + CooldownFrame_SetTimer(cooldown, start, duration, enable) + cooldown:Show() + else + cooldown:Hide() + end + end + end + + btn:Show() + end + + -- Hide excess buttons + for i = numSlots + 1, table.getn(ItemSlots) do + if ItemSlots[i] then ItemSlots[i]:Hide() end + end + + if BagFrame.UpdateBagSlotIcons then + BagFrame.UpdateBagSlotIcons() + end + + -- Update money display + if BagFrame.moneyFrame then + local copper = 0 + if isOffline and offlineDB then + copper = offlineDB.money or 0 + else + copper = GetMoney() + end + SetCoinDisplayMoney(BagFrame.moneyFrame, copper) + end +end + +-- Main frame initialization (called once after PLAYER_LOGIN) +function SFrames.Bags.Container:Initialize() + if BagFrame then return end + + BagFrame = CreateFrame("Frame", "SFramesBagFrame", UIParent) + BagFrame:SetWidth(420) + BagFrame:SetHeight(200) + BagFrame:SetFrameStrata("HIGH") + BagFrame:SetToplevel(true) + BagFrame:EnableMouse(true) + BagFrame:SetMovable(true) + BagFrame:SetClampedToScreen(true) + BagFrame:RegisterForDrag("LeftButton") + BagFrame:SetScript("OnDragStart", function() this:StartMoving() end) + BagFrame:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + SaveBagFramePosition() + end) + ApplyBagFramePosition() + tinsert(UISpecialFrames, "SFramesBagFrame") + + BagFrame:SetScript("OnUpdate", function() + local btn = SFrames.Bags._hoveredSlot + if not btn then return end + if not GameTooltip:IsOwned(btn) then + SFrames.Bags._hoveredSlot = nil + return + end + if IsControlKeyDown() then + if not btn.controlDownLast then + btn.controlDownLast = true + ShowInspectCursor() + end + else + if btn.controlDownLast then + btn.controlDownLast = false + ResetCursor() + ShowMerchantCursorForSlot(btn) + end + end + end) + + -- ESC menu style rounded backdrop + BagFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local _A = SFrames.ActiveTheme + if _A and _A.panelBg then + BagFrame:SetBackdropColor(_A.panelBg[1], _A.panelBg[2], _A.panelBg[3], _A.panelBg[4] or 0.95) + BagFrame:SetBackdropBorderColor(_A.panelBorder[1], _A.panelBorder[2], _A.panelBorder[3], _A.panelBorder[4] or 0.9) + else + BagFrame:SetBackdropColor(0.12, 0.06, 0.10, 0.95) + BagFrame:SetBackdropBorderColor(0.55, 0.30, 0.42, 0.9) + end + local bagShadow = CreateFrame("Frame", nil, BagFrame) + bagShadow:SetPoint("TOPLEFT", BagFrame, "TOPLEFT", -5, 5) + bagShadow:SetPoint("BOTTOMRIGHT", BagFrame, "BOTTOMRIGHT", 5, -5) + bagShadow:SetFrameLevel(math.max(BagFrame:GetFrameLevel() - 1, 0)) + bagShadow:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + bagShadow:SetBackdropColor(0, 0, 0, 0.55) + bagShadow:SetBackdropBorderColor(0, 0, 0, 0.4) + local scale = (SFramesDB and SFramesDB.Bags and type(SFramesDB.Bags.scale) == "number" and SFramesDB.Bags.scale) or 0.85 + BagFrame:SetScale(scale) + + local titleIco = SFrames:CreateIcon(BagFrame, "backpack", 14) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("TOPLEFT", BagFrame, "TOPLEFT", 10, -7) + titleIco:SetVertexColor(_A.title[1], _A.title[2], _A.title[3]) + + local titleFS = SFrames:CreateFontString(BagFrame, 12, "LEFT") + titleFS:SetPoint("LEFT", titleIco, "RIGHT", 4, 0) + titleFS:SetText(TEXT_BAGS_TITLE) + titleFS:SetTextColor(_A.title[1], _A.title[2], _A.title[3]) + BagFrame.title = titleFS + + -- Close button + local closeBtn = CreateFrame("Button", "SFramesBagClose", BagFrame, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", BagFrame, "TOPRIGHT", 0, 0) + closeBtn:SetScript("OnClick", function() SFrames.Bags.Container:Close() end) + + -- Money display + BagFrame.moneyFrame = CreateCoinDisplay(BagFrame, "SFramesBagMoneyFrame") + BagFrame.moneyFrame:SetPoint("RIGHT", BagFrame, "BOTTOMRIGHT", -8, 17) + SetCoinDisplayMoney(BagFrame.moneyFrame, 0) + + -- Bag slot management buttons (5 slots: 0=backpack, 1-4 = equipped bags) + BagFrame.bagSlotBtns = {} + local BAG_BTN_SIZE = 22 + ResolvePlayerBagInvSlots() + local bagInvSlots = playerBagInvSlots + local bagBar = CreateFrame("Frame", "SFramesBagBar", BagFrame) + bagBar:SetWidth((BAG_BTN_SIZE * 5) + (3 * 4)) + bagBar:SetHeight(BAG_BTN_SIZE) + bagBar:SetPoint("BOTTOMLEFT", BagFrame, "BOTTOMLEFT", 8, 6) + bagBar:SetFrameStrata(BagFrame:GetFrameStrata()) + bagBar:SetFrameLevel(BagFrame:GetFrameLevel() + 40) + bagBar:EnableMouse(false) + BagFrame.bagBar = bagBar + + local function PlaceCursorItemInBagSlot(invSlot) + if not invSlot or not CursorHasItem() then return false end + + local ok = false + if EquipCursorItem then + ok = pcall(function() EquipCursorItem(invSlot) end) + if ok and (not CursorHasItem()) then + return true + end + end + + -- In vanilla this can both place and swap bag items in bag slots. + ok = pcall(function() PickupBagFromSlot(invSlot) end) + if ok and (not CursorHasItem()) then + return true + end + + if PutItemInBag then + ok = pcall(function() PutItemInBag(invSlot) end) + if ok and (not CursorHasItem()) then + return true + end + end + + -- Fallback path if PutItemInBag is unavailable. + if CursorHasItem() then + local fallbackOk = pcall(function() PickupInventoryItem(invSlot) end) + ok = fallbackOk or ok + end + + return ok and (not CursorHasItem()) + end + + for bagIndex = 0, 4 do + local bsBtn = CreateFrame("Button", "SFramesBagMgrBtn"..bagIndex, bagBar) + bsBtn:SetWidth(BAG_BTN_SIZE) + bsBtn:SetHeight(BAG_BTN_SIZE) + bsBtn:EnableMouse(true) + bsBtn:SetFrameStrata(bagBar:GetFrameStrata()) + bsBtn:SetFrameLevel(bagBar:GetFrameLevel() + 1) + + -- Anchor: first one at BOTTOMLEFT, rest chained RIGHT + if bagIndex == 0 then + bsBtn:SetPoint("TOPLEFT", bagBar, "TOPLEFT", 0, 0) + else + bsBtn:SetPoint("LEFT", _G["SFramesBagMgrBtn" .. (bagIndex-1)], "RIGHT", 3, 0) + end + bsBtn.bagID = bagIndex + + -- Rounded backdrop (matching item slot style) + bsBtn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + bsBtn:SetBackdropColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 0.9) + bsBtn:SetBackdropBorderColor(_A.slotBorder[1], _A.slotBorder[2], _A.slotBorder[3], _A.slotBorder[4] or 0.8) + + -- Icon texture inset within border + local bsIcon = bsBtn:CreateTexture(nil, "OVERLAY") + bsIcon:SetPoint("TOPLEFT", bsBtn, "TOPLEFT", 2, -2) + bsIcon:SetPoint("BOTTOMRIGHT", bsBtn, "BOTTOMRIGHT", -2, 2) + bsIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + bsIcon:SetBlendMode("BLEND") + bsIcon:SetVertexColor(1, 1, 1, 1) + bsBtn.icon = bsIcon + + local bsHighlight = bsBtn:CreateTexture(nil, "HIGHLIGHT") + bsHighlight:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + bsHighlight:SetBlendMode("ADD") + bsHighlight:SetAllPoints(bsBtn) + + bsBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:ClearLines() + if SFrames.Bags.Container.isOffline and SFrames.Bags.Container.offlineChar then + local data = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Container.offlineChar) + if this.bagID == 0 then + local slots = data and data.bags and data.bags[0] and data.bags[0].size or 0 + if slots and slots > 0 then + GameTooltip:SetText(string.format("%s (%d%s)", TEXT_BACKPACK, slots, TEXT_BAG_SLOTS), 1, 1, 1) + else + GameTooltip:SetText(TEXT_BACKPACK, 1, 1, 1) + end + else + local shown = false + local slots = data and data.bags and data.bags[this.bagID] and data.bags[this.bagID].size or 0 + local bagMeta = data and data.equippedBags and data.equippedBags[this.bagID] + + if bagMeta and bagMeta.link then + local ok = pcall(function() GameTooltip:SetHyperlink(bagMeta.link) end) + shown = ok and HasTooltipText() + + if not shown then + local name = GetItemNameFromLink(bagMeta.link) + if name and name ~= "" then + GameTooltip:SetText(name, 1, 1, 1) + shown = true + end + end + end + + if not shown then + if slots and slots > 0 then + GameTooltip:SetText(string.format("%s %d (%d%s)", TEXT_BAG_SLOT, this.bagID, slots, TEXT_BAG_SLOTS), 1, 1, 1) + else + GameTooltip:SetText(string.format("%s %d (%s)", TEXT_BAG_SLOT, this.bagID, TEXT_BAG_EMPTY), 0.6, 0.6, 0.6) + end + end + end + GameTooltip:AddLine(TEXT_OFFLINE, 0.75, 0.75, 0.75) + else + if this.bagID == 0 then + GameTooltip:SetText(TEXT_BACKPACK, 1, 1, 1) + else + local invSlot = playerBagInvSlots[this.bagID] + local shown = false + if invSlot then + if GameTooltip.SetInventoryItem then + local ok = pcall(function() GameTooltip:SetInventoryItem("player", invSlot) end) + if ok then + local left1 = _G["GameTooltipTextLeft1"] + if left1 and left1:GetText() and left1:GetText() ~= "" then + shown = true + end + end + end + + if not shown then + local bagLink = GetInventoryItemLink("player", invSlot) + if bagLink then + local ok = pcall(function() GameTooltip:SetHyperlink(bagLink) end) + if ok then + shown = true + else + local name = GetItemInfo(bagLink) or (TEXT_EQUIPPED_BAG.." "..this.bagID) + GameTooltip:SetText(name, 1, 1, 1) + shown = true + end + end + end + + if not shown then + local slots = GetContainerNumSlots(this.bagID) or 0 + if slots > 0 then + GameTooltip:SetText(string.format("%s %d (%d%s)", TEXT_BAG_SLOT, this.bagID, slots, TEXT_BAG_SLOTS), 1, 1, 1) + else + GameTooltip:SetText(string.format("%s %d (%s)", TEXT_BAG_SLOT, this.bagID, TEXT_BAG_EMPTY), 0.6, 0.6, 0.6) + end + end + else + GameTooltip:SetText(string.format("%s %d", TEXT_BAG_SLOT, this.bagID), 0.8, 0.8, 0.8) + end + end + end + if BagFrame:IsVisible() then + SFrames.Bags.Container:PreviewBagSlots(this.bagID) + end + GameTooltip:Show() + end) + bsBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + if BagFrame:IsVisible() then + SFrames.Bags.Container:ClearBagPreview() + end + end) + + bsBtn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + bsBtn:RegisterForDrag("LeftButton") + + bsBtn:SetScript("OnDragStart", function() + if this.bagID <= 0 then return end + local invSlot = playerBagInvSlots[this.bagID] + if invSlot then + pcall(function() PickupBagFromSlot(invSlot) end) + end + end) + + bsBtn:SetScript("OnReceiveDrag", function() + if not CursorHasItem() then return end + + if this.bagID == 0 then + if PutItemInBackpack then + pcall(function() PutItemInBackpack() end) + end + else + local invSlot = playerBagInvSlots[this.bagID] + PlaceCursorItemInBagSlot(invSlot) + end + + if BagFrame.UpdateBagSlotIcons then BagFrame.UpdateBagSlotIcons() end + if BagFrame:IsVisible() then SFrames.Bags.Container:UpdateLayout() end + end) + + bsBtn:SetScript("OnClick", function() + if CursorHasItem() then + if this.bagID == 0 then + if PutItemInBackpack then + pcall(function() PutItemInBackpack() end) + end + else + local invSlot = playerBagInvSlots[this.bagID] + PlaceCursorItemInBagSlot(invSlot) + end + if BagFrame.UpdateBagSlotIcons then BagFrame.UpdateBagSlotIcons() end + if BagFrame:IsVisible() then SFrames.Bags.Container:UpdateLayout() end + return + end + + if this.bagID > 0 then + local invSlot = playerBagInvSlots[this.bagID] + if invSlot then + pcall(function() PickupBagFromSlot(invSlot) end) + end + elseif arg1 == "RightButton" then + -- Backpack slot has no equip slot to pick up from. + else + SFrames.Bags.Container:Toggle() + end + end) + + BagFrame.bagSlotBtns[bagIndex] = bsBtn + end + -- Update bag slot textures whenever bag contents change + BagFrame.UpdateBagSlotIcons = function() + local isOffline = SFrames.Bags.Container.isOffline and SFrames.Bags.Container.offlineChar + local offlineDB = nil + if isOffline then + offlineDB = SFrames.Bags.Offline:GetCharacterData(SFrames.Bags.Container.offlineChar) + end + + ResolvePlayerBagInvSlots() + for bagIndex = 0, 4 do + local btn = BagFrame.bagSlotBtns[bagIndex] + if btn then + if bagIndex == 0 then + btn.icon:SetTexture("Interface\\Buttons\\Button-Backpack-Up") + elseif isOffline and offlineDB then + local slots = offlineDB.bags and offlineDB.bags[bagIndex] and offlineDB.bags[bagIndex].size or 0 + local bagMeta = offlineDB.equippedBags and offlineDB.equippedBags[bagIndex] + local tex = nil + + if bagMeta and bagMeta.link then + tex = GetIconFromItemLink(bagMeta.link) + end + if (not tex) and bagMeta and IsUsableBagIconTexture(bagMeta.texture) then + tex = bagMeta.texture + end + + if (not tex) and slots and slots > 0 then + tex = "Interface\\Icons\\INV_Misc_Bag_08" + end + if not tex then + tex = "Interface\\Icons\\INV_Misc_Bag_08" + end + btn.icon:SetTexture(tex) + else + local invSlot = playerBagInvSlots[bagIndex] + local tex = nil + local slots = GetContainerNumSlots(bagIndex) or 0 + + if invSlot then + local link = GetInventoryItemLink("player", invSlot) + tex = GetIconFromItemLink(link) + + if (not tex) and slots > 0 then + local rawTex = GetInventoryItemTexture("player", invSlot) + if type(rawTex) ~= "string" then + tex = rawTex + elseif IsUsableBagIconTexture(rawTex) then + tex = rawTex + end + end + end + + if (not tex) and slots > 0 then + local liveTex = GetLivePlayerBagIconTexture(bagIndex) + if IsUsableBagIconTexture(liveTex) then + tex = liveTex + end + end + + if tex then + btn.icon:SetTexture(tex) + else + btn.icon:SetTexture("Interface\\Icons\\INV_Misc_Bag_08") + end + end + btn:Enable() + if btn.icon.SetDesaturated then + pcall(function() btn.icon:SetDesaturated(false) end) + end + btn.icon:SetVertexColor(1, 1, 1, 1) + btn.icon:SetAlpha(1) + end + end + end + local function QueueBagSlotIconRefreshes() + if not BagFrame or not BagFrame.UpdateBagSlotIcons then return end + local elapsed = 0 + local nextRefresh = 1 + local refreshPoints = { 0.08, 0.25, 0.55 } + local refreshTimer = CreateFrame("Frame") + refreshTimer:SetScript("OnUpdate", function() + elapsed = elapsed + arg1 + if nextRefresh <= table.getn(refreshPoints) and elapsed >= refreshPoints[nextRefresh] then + if BagFrame.UpdateBagSlotIcons then + BagFrame.UpdateBagSlotIcons() + end + if BagFrame:IsVisible() then + SFrames.Bags.Container:UpdateLayout() + end + nextRefresh = nextRefresh + 1 + end + if nextRefresh > table.getn(refreshPoints) then + this:SetScript("OnUpdate", nil) + end + end) + end + BagFrame.UpdateBagSlotIcons() + QueueBagSlotIconRefreshes() + + -- Search bar + local eb = CreateFrame("EditBox", "SFramesBagSearchBox", BagFrame, "InputBoxTemplate") + eb:SetWidth(120) + eb:SetHeight(18) + eb:SetPoint("TOPLEFT", BagFrame, "TOPLEFT", 10, -26) + eb:SetAutoFocus(false) + eb:SetScript("OnEnterPressed", function() this:ClearFocus() end) + eb:SetScript("OnEscapePressed", function() this:ClearFocus(); this:SetText("") end) + eb:SetScript("OnTextChanged", function() + SFrames.Bags.Features:ApplySearch(this:GetText()) + end) + + local function CreateHeaderIconButton(name, parent, iconPath) + local btn = CreateFrame("Button", name, parent) + btn:SetWidth(18) + btn:SetHeight(18) + btn:SetFrameStrata(parent:GetFrameStrata()) + btn:SetFrameLevel(parent:GetFrameLevel() + 45) + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + btn:SetBackdropColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 0.86) + btn:SetBackdropBorderColor(_A.slotBorder[1], _A.slotBorder[2], _A.slotBorder[3], _A.slotBorder[4] or 0.8) + + local icon = btn:CreateTexture(nil, "ARTWORK") + icon:SetTexture(iconPath or "Interface\\Icons\\INV_Misc_QuestionMark") + icon:SetPoint("TOPLEFT", btn, "TOPLEFT", 2, -2) + icon:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -2, 2) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + btn.icon = icon + + local hl = btn:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + hl:SetBlendMode("ADD") + hl:SetAllPoints(btn) + + return btn + end + + -- Character selector: icon button-triggered dropdown. + local function GetCurrentCharacterName() + local live = UnitName("player") + if type(live) == "string" and live ~= "" then + return live + end + local cached = SFrames.Bags.Offline:GetCurrentPlayerName() + if type(cached) == "string" and cached ~= "" then + return cached + end + return TEXT_CHARACTER + end + + local function GetOfflineBankTargetCharacter() + if SFrames.Bags.Container.isOffline and SFrames.Bags.Container.offlineChar then + return SFrames.Bags.Container.offlineChar + end + return GetCurrentCharacterName() + end + + local charBtn = CreateHeaderIconButton("SFramesBagCharBtn", BagFrame, CHARACTER_SELECTOR_ICON) + charBtn:SetPoint("TOPRIGHT", BagFrame, "TOPRIGHT", -8, -26) + BagFrame.charSelectBtn = charBtn + + local cfgBtn = CreateHeaderIconButton("SFramesBagConfigBtn", BagFrame, "Interface\\Icons\\INV_Misc_Gear_01") + cfgBtn:SetPoint("RIGHT", charBtn, "LEFT", -4, 0) + SFrames:SetIcon(cfgBtn.icon, "settings") + cfgBtn:SetScript("OnClick", function() + if SFrames.ConfigUI and SFrames.ConfigUI.Build then + SFrames.ConfigUI:Build("bags") + end + end) + cfgBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(TEXT_SETTINGS, 1, 1, 1) + GameTooltip:Show() + end) + cfgBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + local bankBtn = CreateHeaderIconButton("SFramesBagOfflineBankBtn", BagFrame, "Interface\\Icons\\INV_Misc_Key_05") + bankBtn:SetPoint("RIGHT", cfgBtn, "LEFT", -4, 0) + SFrames:SetIcon(bankBtn.icon, "gold") + bankBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(TEXT_OFFLINE .. TEXT_BANK_TITLE, 1, 1, 1) + local target = GetOfflineBankTargetCharacter() + if target and target ~= "" and target ~= TEXT_CHARACTER then + GameTooltip:AddLine(target, 0.8, 0.8, 0.8) + end + GameTooltip:Show() + end) + bankBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + bankBtn:SetScript("OnClick", function() + if not (SFrames.Bags and SFrames.Bags.Bank) then return end + local target = GetOfflineBankTargetCharacter() + if target == TEXT_CHARACTER then + target = nil + end + if SFrames.Bags.Bank.OpenOffline then + SFrames.Bags.Bank:OpenOffline(target) + else + SFrames.Bags.Bank:Open() + end + end) + + -- Sort button (icon) + local sortBtn = CreateHeaderIconButton("SFramesBagSortBtn", BagFrame, "Interface\\Icons\\INV_Misc_Note_05") + sortBtn:SetPoint("LEFT", eb, "RIGHT", 6, 0) + SFrames:SetIcon(sortBtn.icon, "backpack") + sortBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(TEXT_SORT, 1, 1, 1) + GameTooltip:Show() + end) + sortBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + sortBtn:SetScript("OnClick", function() + if SFrames.Bags.Sort then SFrames.Bags.Sort:Start() end + end) + + local hsBtn = CreateHeaderIconButton("SFramesBagHSBtn", BagFrame, "Interface\\Icons\\INV_Misc_Rune_01") + hsBtn:SetPoint("LEFT", sortBtn, "RIGHT", 4, 0) + SFrames:SetIcon(hsBtn.icon, "hearthstone") + hsBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(TEXT_HS_USE, 1, 1, 1) + GameTooltip:Show() + end) + hsBtn:SetScript("OnLeave", function() GameTooltip:Hide() end) + + hsBtn:SetScript("OnClick", function() + for bag = 0, 4 do + for slot = 1, GetContainerNumSlots(bag) do + local link = GetContainerItemLink(bag, slot) + if link and (string.find(link, "6948") or string.find(link, "Hearthstone")) then + UseContainerItem(bag, slot) + return + end + end + end + SFrames:Print(TEXT_HS_NOT_FOUND) + end) + + local keyBtn = CreateHeaderIconButton("SFramesBagKeyBtn", BagFrame, "Interface\\Icons\\INV_Misc_Key_04") + keyBtn:SetPoint("LEFT", hsBtn, "RIGHT", 4, 0) + SFrames:SetIcon(keyBtn.icon, "key") + keyBtn:RegisterForClicks("LeftButtonUp") + keyBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText("\233\146\165\229\140\153\233\147\190", 1, 0.82, 0) + GameTooltip:Show() + end) + keyBtn:SetScript("OnLeave", function() GameTooltip:Hide() end) + keyBtn:SetScript("OnClick", function() + if SFrames.Bags._origToggleKeyRing then + SFrames.Bags._origToggleKeyRing() + elseif ToggleKeyRing then + ToggleKeyRing() + end + end) + + local dbMenu = CreateFrame("Frame", "SFramesBagDropdown", BagFrame, "UIDropDownMenuTemplate") + dbMenu:Hide() + dbMenu:SetPoint("TOPRIGHT", charBtn, "BOTTOMRIGHT", 0, 0) + + local function RefreshCharacterSelectorText() + if not BagFrame or not BagFrame.charSelectBtn then return end + if SFrames.Bags.Container.isOffline and SFrames.Bags.Container.offlineChar then + BagFrame.charSelectorLabel = SFrames.Bags.Container.offlineChar .. " (" .. TEXT_OFFLINE .. ")" + else + BagFrame.charSelectorLabel = GetCurrentCharacterName() .. " (" .. TEXT_ONLINE .. ")" + end + end + BagFrame.RefreshCharacterSelectorText = RefreshCharacterSelectorText + + local function OnDropdownClick() + local char = this.value + if char == "ONLINE" then + SFrames.Bags.Container.isOffline = false + SFrames.Bags.Container.offlineChar = nil + else + SFrames.Bags.Container.isOffline = true + SFrames.Bags.Container.offlineChar = char + end + RefreshCharacterSelectorText() + SFrames.Bags.Container:UpdateLayout() + end + + UIDropDownMenu_Initialize(dbMenu, function() + local info = UIDropDownMenu_CreateInfo and UIDropDownMenu_CreateInfo() or {} + local currentName = GetCurrentCharacterName() + + info.text = currentName .. " (" .. TEXT_ONLINE .. ")" + info.value = "ONLINE" + info.func = OnDropdownClick + info.checked = (not SFrames.Bags.Container.isOffline) + UIDropDownMenu_AddButton(info) + + local chars = SFrames.Bags.Offline:GetCharacterList() + table.sort(chars) + for _, char in ipairs(chars) do + if char ~= currentName then + info = UIDropDownMenu_CreateInfo and UIDropDownMenu_CreateInfo() or {} + info.text = char .. " (" .. TEXT_OFFLINE .. ")" + info.value = char + info.func = OnDropdownClick + info.checked = SFrames.Bags.Container.isOffline and SFrames.Bags.Container.offlineChar == char + UIDropDownMenu_AddButton(info) + end + end + end) + + charBtn:SetScript("OnClick", function() + ToggleDropDownMenu(1, nil, dbMenu, this, 0, 0) + end) + charBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(BagFrame.charSelectorLabel or TEXT_CHARACTER, 1, 1, 1) + GameTooltip:Show() + end) + charBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + RefreshCharacterSelectorText() + + -- React to bag updates while open + BagFrame:RegisterEvent("BAG_UPDATE") + BagFrame:RegisterEvent("PLAYER_MONEY") + BagFrame:RegisterEvent("BAG_UPDATE_COOLDOWN") + BagFrame:RegisterEvent("UNIT_INVENTORY_CHANGED") + BagFrame:RegisterEvent("PLAYER_ENTERING_WORLD") + BagFrame:RegisterEvent("TRADE_SHOW") + BagFrame:RegisterEvent("TRADE_CLOSED") + BagFrame:RegisterEvent("TRADE_UPDATE") + BagFrame:RegisterEvent("TRADE_PLAYER_ITEM_CHANGED") + BagFrame:RegisterEvent("TRADE_TARGET_ITEM_CHANGED") + BagFrame:RegisterEvent("TRADE_ACCEPT_UPDATE") + BagFrame:SetScript("OnEvent", function() + if BagFrame:IsVisible() then + SFrames.Bags.Container:UpdateLayout() + end + if event == "PLAYER_ENTERING_WORLD" then + if BagFrame.UpdateBagSlotIcons then BagFrame.UpdateBagSlotIcons() end + QueueBagSlotIconRefreshes() + elseif event == "BAG_UPDATE" or event == "UNIT_INVENTORY_CHANGED" then + if BagFrame.UpdateBagSlotIcons then BagFrame.UpdateBagSlotIcons() end + elseif event == "TRADE_SHOW" or event == "TRADE_CLOSED" or event == "TRADE_UPDATE" + or event == "TRADE_PLAYER_ITEM_CHANGED" or event == "TRADE_TARGET_ITEM_CHANGED" + or event == "TRADE_ACCEPT_UPDATE" then + if event == "TRADE_CLOSED" then + for _, btn in ipairs(ItemSlots) do + if btn.tradeText then btn.tradeText:Hide() end + local iconTex = _G[btn:GetName() .. "IconTexture"] + if iconTex and iconTex.SetDesaturated then + pcall(function() iconTex:SetDesaturated(false) end) + end + if iconTex then iconTex:SetVertexColor(1, 1, 1, 1) end + end + end + if BagFrame.UpdateBagSlotIcons then BagFrame.UpdateBagSlotIcons() end + QueueBagSlotIconRefreshes() + end + end) + + BagFrame:Hide() +end + +function SFrames.Bags.Container:Toggle() + if not BagFrame then return end + if BagFrame:IsVisible() then self:Close() else self:Open() end +end + +function SFrames.Bags.Container:Open() + if not BagFrame then return end + self.isOffline = false + self.offlineChar = nil + if BagFrame.RefreshCharacterSelectorText then BagFrame.RefreshCharacterSelectorText() end + -- Clear search + if SFramesBagSearchBox then SFramesBagSearchBox:SetText("") end + self:UpdateLayout() + BagFrame:Show() + local elapsed = 0 + local nextRefresh = 1 + local refreshPoints = { 0.05, 0.18, 0.40 } + local refreshTimer = CreateFrame("Frame") + refreshTimer:SetScript("OnUpdate", function() + elapsed = elapsed + arg1 + if nextRefresh <= table.getn(refreshPoints) and elapsed >= refreshPoints[nextRefresh] then + if BagFrame:IsVisible() then + if BagFrame.UpdateBagSlotIcons then + BagFrame.UpdateBagSlotIcons() + end + SFrames.Bags.Container:UpdateLayout() + end + nextRefresh = nextRefresh + 1 + end + if nextRefresh > table.getn(refreshPoints) then + this:SetScript("OnUpdate", nil) + end + end) + PlaySound("igBackPackOpen") +end + +function SFrames.Bags.Container:Close() + if not BagFrame then return end + BagFrame:Hide() + PlaySound("igBackPackClose") +end diff --git a/Bags/Core.lua b/Bags/Core.lua new file mode 100644 index 0000000..c6c91d4 --- /dev/null +++ b/Bags/Core.lua @@ -0,0 +1,113 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Bag Module Core (Bags/Core.lua) +-- Entry point, registered on PLAYER_LOGIN +-------------------------------------------------------------------------------- + +SFrames.Bags.Core = {} + +-- Ensure default config exists +if not SFrames.Config.Bags then + SFrames.Config.Bags = { + enable = true, + columns = 10, + bagSpacing = 0, + scale = 1, + sellGrey = true, + bankColumns = 12, + bankSpacing = 0, + bankScale = 1, + } +end + +local function EnsureDB() + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Bags then + SFramesDB.Bags = {} + for k, v in pairs(SFrames.Config.Bags) do + SFramesDB.Bags[k] = v + end + end + -- Fill missing keys with defaults + for k, v in pairs(SFrames.Config.Bags) do + if SFramesDB.Bags[k] == nil then + SFramesDB.Bags[k] = v + end + end +end + +local function HookBagFunctions() + -- Save original functions + local _OpenAllBags = OpenAllBags + local _CloseAllBags = CloseAllBags + local _ToggleBag = ToggleBag + local _ToggleBackpack = ToggleBackpack + local _ToggleKeyRing = ToggleKeyRing + SFrames.Bags._origToggleKeyRing = _ToggleKeyRing + + OpenAllBags = function() + if SFramesDB.Bags.enable then + SFrames.Bags.Container:Open() + else + _OpenAllBags() + end + end + + CloseAllBags = function() + if SFramesDB.Bags.enable then + SFrames.Bags.Container:Close() + else + _CloseAllBags() + end + end + + ToggleBag = function(id) + if id == -2 or id == (KEYRING_CONTAINER or -2) then + _ToggleBag(id) + return + end + if SFramesDB.Bags.enable then + SFrames.Bags.Container:Toggle() + else + _ToggleBag(id) + end + end + + ToggleBackpack = function() + if SFramesDB.Bags.enable then + SFrames.Bags.Container:Toggle() + else + _ToggleBackpack() + end + end + + -- Keyring: always use original keyring window + ToggleKeyRing = function() + _ToggleKeyRing() + end +end + +function SFrames.Bags.Core:Initialize() + SFrames:Print("Debug: Bags Core Initializing...") + EnsureDB() + if not SFramesDB.Bags.enable then + SFrames:Print("Debug: Bags are disabled in config.") + return + end + + SFrames:Print("Debug: Hooking functions...") + HookBagFunctions() + + SFrames:Print("Debug: Init Container...") + SFrames.Bags.Container:Initialize() + + SFrames:Print("Debug: Init Bank...") + if SFrames.Bags.Bank then SFrames.Bags.Bank:Initialize() end + + SFrames:Print("Debug: Init Features...") + SFrames.Bags.Features:Initialize() + + SFrames:Print("Debug: Bags Init Complete.") +end + +-- NOTE: Initialize is called from Core.lua SFrames:Initialize() on PLAYER_LOGIN. +-- Do NOT register PLAYER_LOGIN here to avoid double initialization. diff --git a/Bags/Features.lua b/Bags/Features.lua new file mode 100644 index 0000000..a711e14 --- /dev/null +++ b/Bags/Features.lua @@ -0,0 +1,139 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Bag Module Features (Bags/Features.lua) +-- Auto-sell grey + search apply (buttons are now built in Container.lua) +-------------------------------------------------------------------------------- + +SFrames.Bags.Features = {} + +function SFrames.Bags.Features:Initialize() + self:SetupAutoSell() + self:SetupAutoOpenBags() +end + +-- Auto Sell Grey Items when merchant opens +function SFrames.Bags.Features:SetupAutoSell() + local f = CreateFrame("Frame") + f:RegisterEvent("MERCHANT_SHOW") + f:SetScript("OnEvent", function() + if not (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.sellGrey) then return end + for bag = 0, 4 do + for slot = 1, GetContainerNumSlots(bag) do + local link = GetContainerItemLink(bag, slot) + if link then + -- Extract item ID from link (format: item:XXXX:...) + local _, _, itemString = string.find(link, "item:(%d+)") + if itemString then + local _, _, _, _, _, _, _, _, _, _, itemSellPrice = GetItemInfo("item:" .. itemString) + -- GetItemInfo returns quality as 5th return + local _, _, itemRarity = GetItemInfo("item:" .. itemString) + -- safer: use a scan tooltip to get quality + local scanName, _, scanRarity = GetItemInfo("item:" .. itemString) + if scanRarity and scanRarity == 0 then + local _, itemCount = GetContainerItemInfo(bag, slot) + UseContainerItem(bag, slot) + if scanName then + SFrames:Print("售出: " .. scanName .. " x" .. (itemCount or 1)) + end + end + end + end + end + end + end) +end + +-- Auto open/close bags at Bank, Merchant, Mail, AH, Trade +function SFrames.Bags.Features:SetupAutoOpenBags() + local f = CreateFrame("Frame") + f:RegisterEvent("MERCHANT_SHOW") + f:RegisterEvent("BANKFRAME_OPENED") + f:RegisterEvent("MAIL_SHOW") + f:RegisterEvent("AUCTION_HOUSE_SHOW") + f:RegisterEvent("TRADE_SHOW") + + f:RegisterEvent("MERCHANT_CLOSED") + f:RegisterEvent("BANKFRAME_CLOSED") + f:RegisterEvent("MAIL_CLOSED") + f:RegisterEvent("AUCTION_HOUSE_CLOSED") + f:RegisterEvent("TRADE_CLOSED") + + local autoOpened = false + + f:SetScript("OnEvent", function() + if not (SFramesDB and SFramesDB.Bags and SFramesDB.Bags.enable) then return end + + -- Shows + if event == "MERCHANT_SHOW" or event == "BANKFRAME_OPENED" or event == "MAIL_SHOW" or event == "AUCTION_HOUSE_SHOW" or event == "TRADE_SHOW" then + if SFramesBagFrame and not SFramesBagFrame:IsVisible() then + autoOpened = true + SFrames.Bags.Container:Open() + end + -- Closes + elseif event == "MERCHANT_CLOSED" or event == "BANKFRAME_CLOSED" or event == "MAIL_CLOSED" or event == "AUCTION_HOUSE_CLOSED" or event == "TRADE_CLOSED" then + if autoOpened then + SFrames.Bags.Container:Close() + autoOpened = false + end + end + end) +end + +-- Search filter - called from the search EditBox OnTextChanged +function SFrames.Bags.Features:ApplySearch(query) + -- In WoW 1.12 Chinese client, text is GBK encoded. + -- using string.lower on GBK strings corrupts Chinese characters because the 2nd byte + -- of Chinese characters can hit the ASCII uppercase range (A-Z). + local safeQuery = query or "" + safeQuery = string.gsub(safeQuery, "^%s+", "") + safeQuery = string.gsub(safeQuery, "%s+$", "") + if not string.find(safeQuery, "%S") then + safeQuery = "" + end + + local function ProcessSlots(prefix) + for i = 1, 250 do + local btn = _G[prefix .. i] + if not btn then break end + + local icon = _G[btn:GetName() .. "IconTexture"] + + if btn:IsShown() and icon then + if safeQuery == "" then + icon:SetVertexColor(1, 1, 1) + if btn.border then btn.border:SetAlpha(1) end + if btn.junkIcon then btn.junkIcon:SetAlpha(1) end + if btn.qualGlow then btn.qualGlow:SetAlpha(0.8) end + elseif btn.bagID ~= nil and btn.slotID ~= nil then + local link = GetContainerItemLink(btn.bagID, btn.slotID) + if link then + local name = GetItemInfo(link) + if not name then + local _, _, parsedName = string.find(link, "%[(.+)%]") + name = parsedName + end + + -- Exact substring match (safe for GBK) + if name and string.find(name, safeQuery, 1, true) then + icon:SetVertexColor(1, 1, 1) + if btn.border then btn.border:SetAlpha(1) end + if btn.junkIcon then btn.junkIcon:SetAlpha(1) end + if btn.qualGlow then btn.qualGlow:SetAlpha(0.8) end + else + icon:SetVertexColor(0.45, 0.45, 0.45) + if btn.border then btn.border:SetAlpha(0.4) end + if btn.junkIcon then btn.junkIcon:SetAlpha(0.4) end + if btn.qualGlow then btn.qualGlow:SetAlpha(0.15) end + end + else + icon:SetVertexColor(0.45, 0.45, 0.45) + if btn.border then btn.border:SetAlpha(0.4) end + if btn.junkIcon then btn.junkIcon:SetAlpha(0.4) end + if btn.qualGlow then btn.qualGlow:SetAlpha(0.15) end + end + end + end + end + end + + ProcessSlots("SFramesBagSlot") +end diff --git a/Bags/Offline.lua b/Bags/Offline.lua new file mode 100644 index 0000000..7ae6c7a --- /dev/null +++ b/Bags/Offline.lua @@ -0,0 +1,337 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Offline DB for Bag Module (Bags/Offline.lua) +-- Tracks inventory across characters and realms +-- NOTE: This file defines SFrames.Bags first - must be loaded before other Bag files +-------------------------------------------------------------------------------- + +SFrames.Bags = SFrames.Bags or {} +SFrames.Bags.Offline = {} + +local offlineFrame = CreateFrame("Frame") +offlineFrame:RegisterEvent("PLAYER_LOGIN") +offlineFrame:RegisterEvent("BAG_UPDATE") +offlineFrame:RegisterEvent("BANKFRAME_OPENED") +offlineFrame:RegisterEvent("BANKFRAME_CLOSED") +offlineFrame:RegisterEvent("PLAYERBANKSLOTS_CHANGED") +offlineFrame:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED") + +local realmName = "" +local playerName = "" +local isBankOpen = false + +local function QueueBankRefreshScans() + local elapsed = 0 + local index = 1 + local points = { 0.08, 0.25, 0.55, 0.95 } + local t = CreateFrame("Frame") + t:SetScript("OnUpdate", function() + elapsed = elapsed + (arg1 or 0) + if index <= table.getn(points) and elapsed >= points[index] then + if isBankOpen then + SFrames.Bags.Offline:ScanBags() + end + index = index + 1 + end + if index > table.getn(points) then + this:SetScript("OnUpdate", nil) + end + end) +end + +local function InitDB() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB[realmName] then SFramesGlobalDB[realmName] = {} end + if not SFramesGlobalDB[realmName][playerName] then + SFramesGlobalDB[realmName][playerName] = { + bags = {}, + bank = {}, + bankSlots = 0, + bankBags = {}, + equippedBags = {}, + money = 0 + } + end +end + +local function IsBankBagInvSlot(slotID) + return type(slotID) == "number" and slotID > 23 +end + +local function IsBagItemLink(link) + if type(link) ~= "string" or link == "" then + return false + end + local _, _, _, _, _, _, _, equipLoc = GetItemInfo(link) + return equipLoc == "INVTYPE_BAG" +end + +local function GetBagLinkState(link) + if type(link) ~= "string" or link == "" then + return "invalid" + end + local _, _, _, _, _, _, _, equipLoc = GetItemInfo(link) + if equipLoc == "INVTYPE_BAG" then + return "bag" + end + if equipLoc == nil or equipLoc == "" then + return "unknown" + end + return "invalid" +end + +local function SafeGetInventorySlotByName(slotName) + if not GetInventorySlotInfo then return nil end + local ok, slotID = pcall(function() return GetInventorySlotInfo(slotName) end) + if ok and IsBankBagInvSlot(slotID) then + return slotID + end + return nil +end + +local function ResolvePlayerBagInvSlot(index) + if type(index) ~= "number" or index < 1 or index > 4 then + return nil + end + + local liveBtn = _G["CharacterBag" .. (index - 1) .. "Slot"] + if liveBtn and liveBtn.GetID then + local id = liveBtn:GetID() + if type(id) == "number" and id > 0 then + return id + end + end + + if ContainerIDToInventoryID then + local ok, slotID = pcall(function() return ContainerIDToInventoryID(index) end) + if ok and type(slotID) == "number" and slotID > 0 then + return slotID + end + end + + local slotNames = { + "Bag" .. (index - 1) .. "Slot", + "Bag" .. index .. "Slot", + "CharacterBag" .. (index - 1) .. "Slot", + } + for _, slotName in ipairs(slotNames) do + local ok, slotID = pcall(function() return GetInventorySlotInfo(slotName) end) + if ok and type(slotID) == "number" and slotID > 0 then + return slotID + end + end + + -- Vanilla fallback. + local fallback = { [1] = 20, [2] = 21, [3] = 22, [4] = 23 } + return fallback[index] +end + +local function CaptureEquippedBagMeta(db) + if not db then return end + + db.equippedBags = {} + for index = 1, 4 do + local invSlot = ResolvePlayerBagInvSlot(index) + local link = nil + local texture = nil + if invSlot then + link = GetInventoryItemLink("player", invSlot) + texture = GetInventoryItemTexture("player", invSlot) + end + + local size = GetContainerNumSlots(index) or 0 + db.equippedBags[index] = { + link = link, + texture = texture, + size = tonumber(size) or 0, + } + end +end + +local function ResolveBankBagInvSlot(index) + if type(index) ~= "number" or index <= 0 then return nil end + local bagID = index + 4 + local function TryBankButtonID(buttonID, isBank) + if not BankButtonIDToInvSlotID then return nil end + local ok, slotID = pcall(function() return BankButtonIDToInvSlotID(buttonID, isBank) end) + if ok and IsBankBagInvSlot(slotID) then + return slotID + end + return nil + end + + local function AcceptIfBag(slotID) + if not IsBankBagInvSlot(slotID) then return nil end + local link = GetInventoryItemLink("player", slotID) + if link and IsBagItemLink(link) then + return slotID + end + return nil + end + + -- Guda-style primary mapping + local slot = TryBankButtonID(bagID, 1) + if slot then return slot end + slot = TryBankButtonID(index, 1) + if slot then return slot end + + -- Fallbacks: only when they are confirmed bag items + slot = TryBankButtonID(bagID, nil) + slot = AcceptIfBag(slot) + if slot then return slot end + + slot = TryBankButtonID(index, nil) + slot = AcceptIfBag(slot) + if slot then return slot end + + if ContainerIDToInventoryID then + local ok, s = pcall(function() return ContainerIDToInventoryID(bagID) end) + if ok then + slot = AcceptIfBag(s) + if slot then return slot end + end + end + + slot = AcceptIfBag(SafeGetInventorySlotByName("BankBagSlot" .. index)) + if slot then return slot end + slot = AcceptIfBag(SafeGetInventorySlotByName("BankSlot" .. index)) + if slot then return slot end + + local liveBtn = _G["BankFrameBag" .. index] or _G["BankFrameBag" .. index .. "Slot"] + if liveBtn and liveBtn.GetID then + slot = AcceptIfBag(liveBtn:GetID()) + if slot then return slot end + end + + return nil +end + +local function CaptureBankBagMeta(db) + if not db then return end + + local purchased = (GetNumBankSlots and GetNumBankSlots()) or 0 + db.bankSlots = tonumber(purchased) or 0 + db.bankBags = {} + + for index = 1, 7 do + local bagID = index + 4 + local size = GetContainerNumSlots(bagID) or 0 + local info = { + unlocked = (index <= db.bankSlots), + size = tonumber(size) or 0, + link = nil, + texture = nil, + } + + if info.unlocked then + local invSlot = ResolveBankBagInvSlot(index) + if invSlot then + local link = GetInventoryItemLink("player", invSlot) + local state = GetBagLinkState(link) + if (state == "bag") or (state == "unknown" and info.size > 0) then + info.link = link + info.texture = GetInventoryItemTexture("player", invSlot) + end + end + end + + db.bankBags[index] = info + end +end + +local function ScanContainer(containerID, isBank) + if not SFramesGlobalDB or realmName == "" or playerName == "" then return end + local db = SFramesGlobalDB[realmName][playerName] + local targetDB = isBank and db.bank or db.bags + local size = GetContainerNumSlots(containerID) + targetDB[containerID] = { size = size, items = {} } + for slot = 1, size do + local link = GetContainerItemLink(containerID, slot) + if link then + local texture, itemCount, locked, quality = GetContainerItemInfo(containerID, slot) + local _, _, idStr = string.find(link, "item:(%d+):") + local itemID = idStr and tonumber(idStr) or nil + targetDB[containerID].items[slot] = { id = itemID, + link = link, + count = itemCount, + texture = texture, + quality = quality + } + end + end +end + +function SFrames.Bags.Offline:ScanBags() + if realmName == "" or playerName == "" then return end + InitDB() + local db = SFramesGlobalDB[realmName] and SFramesGlobalDB[realmName][playerName] + if not db then return end + + for bag = 0, 4 do + ScanContainer(bag, false) + end + CaptureEquippedBagMeta(db) + if isBankOpen then + ScanContainer(-1, true) + for bag = 5, 11 do + ScanContainer(bag, true) + end + CaptureBankBagMeta(db) + end + db.money = GetMoney() +end + +local scanPending = false +local scanTimer = CreateFrame("Frame") +scanTimer:Hide() +local function RequestBagScan() + if scanPending then return end + scanPending = true + scanTimer.elapsed = 0 + scanTimer:Show() + scanTimer:SetScript("OnUpdate", function() + this.elapsed = this.elapsed + arg1 + if this.elapsed > 0.5 then + this:SetScript("OnUpdate", nil) + this:Hide() + scanPending = false + SFrames.Bags.Offline:ScanBags() + end + end) +end + +offlineFrame:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + realmName = GetRealmName() or "" + playerName = UnitName("player") or "" + InitDB() + SFrames.Bags.Offline:ScanBags() + elseif event == "BAG_UPDATE" or event == "PLAYERBANKSLOTS_CHANGED" or event == "PLAYERBANKBAGSLOTS_CHANGED" then + RequestBagScan() + elseif event == "BANKFRAME_OPENED" then + isBankOpen = true + RequestBagScan() + QueueBankRefreshScans() + elseif event == "BANKFRAME_CLOSED" then + isBankOpen = false + end +end) + +function SFrames.Bags.Offline:GetCharacterList() + if not SFramesGlobalDB or realmName == "" then return {} end + local chars = {} + if SFramesGlobalDB[realmName] then + for name in pairs(SFramesGlobalDB[realmName]) do + table.insert(chars, name) + end + end + return chars +end + +function SFrames.Bags.Offline:GetCharacterData(name) + if not SFramesGlobalDB or realmName == "" then return nil end + return SFramesGlobalDB[realmName] and SFramesGlobalDB[realmName][name] +end + +function SFrames.Bags.Offline:GetCurrentPlayerName() + return playerName +end diff --git a/Bags/Sort.lua b/Bags/Sort.lua new file mode 100644 index 0000000..aba630a --- /dev/null +++ b/Bags/Sort.lua @@ -0,0 +1,483 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Bag Sorting Logic (Bags/Sort.lua) +-- Manual sorting algorithm compatible with Vanilla/Turtle WoW +-------------------------------------------------------------------------------- + +SFrames.Bags.Sort = SFrames.Bags.Sort or {} + +local isSorting = false +local sortQueue = {} +local sortTimer = CreateFrame("Frame") +local sortDelay = 0.05 -- Increased speed from 0.15 to accelerate sorting. +local timeSinceLast = 0 +local activeCompleteMessage = nil +local activeCompleteUpdate = nil +local activeBagOrder = nil +local activePhase = nil +local TEXT_LOCKED = "\233\131\168\229\136\134\231\137\169\229\147\129\229\183\178\233\148\129\229\174\154\239\188\140\232\175\183\231\168\141\229\144\142\233\135\141\232\175\149\227\128\130" +local TEXT_OFFLINE_BAGS = "\231\166\187\231\186\191\230\168\161\229\188\143\228\184\139\230\151\160\230\179\149\230\149\180\231\144\134\229\156\168\231\186\191\232\131\140\229\140\133\227\128\130" +local TEXT_BAG_DONE = "\232\131\140\229\140\133\230\149\180\231\144\134\229\174\140\230\136\144\227\128\130" +local TEXT_OFFLINE_BANK = "\231\166\187\231\186\191\230\168\161\229\188\143\228\184\139\230\151\160\230\179\149\230\149\180\231\144\134\229\156\168\231\186\191\233\147\182\232\161\140\227\128\130" +local TEXT_BANK_DONE = "\233\147\182\232\161\140\230\149\180\231\144\134\229\174\140\230\136\144\227\128\130" +local itemMaxStackCache = {} + +local function GetItemSortValue(link) + if not link then return 0, "" end + + local _, _, itemString = string.find(link, "^|c%x+|H(.+)|h%[.*%]") + if not itemString then itemString = link end + + local itemName, _, itemRarity, _, itemType = GetItemInfo(itemString) + if not itemName then return 0, "" end + + local score = 0 + local _, _, itemID = string.find(link, "item:(%d+)") + if itemID == "6948" or string.find(itemName, "Hearthstone") then + score = 1000000 + else + score = score + (itemRarity or 0) * 100000 + + if itemType == "Weapon" then + score = score + 50000 + elseif itemType == "Armor" then + score = score + 40000 + elseif itemType == "Consumable" then + score = score + 30000 + elseif itemType == "Trade Goods" then + score = score + 20000 + elseif itemType == "Recipe" then + score = score + 10000 + end + end + + return score, itemName +end + +local function GetItemIdentity(link) + if not link then return nil end + local _, _, itemString = string.find(link, "|H([^|]+)|h") + if not itemString then itemString = link end + return itemString +end + +local function GetItemMaxStack(link) + local itemKey = GetItemIdentity(link) + if not itemKey then return 1 end + + if itemMaxStackCache[itemKey] then + return itemMaxStackCache[itemKey] + end + + local maxStack = 1 + local res = {GetItemInfo(itemKey)} + -- In standard vanilla, maxStack is parameter 7. In some modified schema (TBC) it is parameter 8. + local v7 = tonumber(res[7]) + local v8 = tonumber(res[8]) + if v7 and v7 > 1 then + maxStack = v7 + elseif v8 and v8 > 1 then + maxStack = v8 + end + + itemMaxStackCache[itemKey] = maxStack + return maxStack +end + +local function GetSpecialType(link, isBag) + if not link then return "Normal" end + local _, _, itemString = string.find(link, "^|c%x+|H(.+)|h%[.*%]") + if not itemString then itemString = link end + local itemName, _, _, _, itemType, itemSubType = GetItemInfo(itemString) + + if not itemType and not itemName then return "Normal" end + + local _, _, itemID = string.find(itemString, "item:(%d+)") + + if isBag then + if itemType == "Quiver" or itemType == "箭袋" then return "Ammo" end + if itemSubType == "Quiver" or itemSubType == "Ammo Pouch" or itemSubType == "箭袋" or itemSubType == "子弹袋" then return "Ammo" end + if itemSubType == "Soul Bag" or itemSubType == "灵魂袋" then return "Soul" end + if itemSubType == "Enchanting Bag" or itemSubType == "附魔材料袋" then return "Enchanting" end + if itemSubType == "Herb Bag" or itemSubType == "草药袋" then return "Herb" end + else + if itemType == "Projectile" or itemType == "弹药" then return "Ammo" end + if itemSubType == "Arrow" or itemSubType == "Bullet" or itemSubType == "箭" or itemSubType == "子弹" then return "Ammo" end + if itemID == "6265" or itemName == "Soul Shard" or itemName == "灵魂碎片" then return "Soul" end + end + + return "Normal" +end + +local function SortItemsByRule(items) + table.sort(items, function(a, b) + if a.score ~= b.score then + return a.score > b.score + elseif a.name ~= b.name then + return a.name < b.name + else + return a.count > b.count + end + end) +end + +local function ResetSortState() + isSorting = false + sortQueue = {} + activeCompleteMessage = nil + activeCompleteUpdate = nil + activeBagOrder = nil + activePhase = nil + timeSinceLast = 0 + sortTimer:Hide() +end + +local function FinishSort() + local msg = activeCompleteMessage + local updater = activeCompleteUpdate + ResetSortState() + + if msg then SFrames:Print(msg) end + if updater then updater() end +end + +function SFrames.Bags.Sort:ExecuteSimpleSort(items, bagOrder) + sortQueue = {} + + local slotPool = { Normal = {}, Ammo = {}, Soul = {}, Enchanting = {}, Herb = {} } + local allocatedStream = {} + + for _, bag in ipairs(bagOrder) do + local btype = "Normal" + if bag ~= 0 and bag ~= -1 then + local invID + if bag >= 1 and bag <= 4 then + invID = ContainerIDToInventoryID(bag) + elseif bag >= 5 and bag <= 11 then + invID = bag + 34 + end + if invID then + local ok, link = pcall(GetInventoryItemLink, "player", invID) + if ok and link then btype = GetSpecialType(link, true) end + end + end + + local bagSlots = GetContainerNumSlots(bag) or 0 + for slot = 1, bagSlots do + local s = { bag = bag, slot = slot, type = btype } + table.insert(allocatedStream, s) + if slotPool[btype] then + table.insert(slotPool[btype], s) + else + table.insert(slotPool.Normal, s) + end + end + end + + for _, item in ipairs(items) do + item.specialType = GetSpecialType(item.link, false) + end + + -- Now assign target slot to each item + for _, item in ipairs(items) do + local targetSlot = nil + + if item.specialType ~= "Normal" and slotPool[item.specialType] and table.getn(slotPool[item.specialType]) > 0 then + targetSlot = table.remove(slotPool[item.specialType], 1) + elseif table.getn(slotPool.Normal) > 0 then + targetSlot = table.remove(slotPool.Normal, 1) + end + + if targetSlot then + targetSlot.idealItem = item + end + end + + -- Build virtual moves to align physical items to targetSlots + for _, target in ipairs(allocatedStream) do + if target.idealItem then + local idealItem = target.idealItem + if idealItem.bag ~= target.bag or idealItem.slot ~= target.slot then + table.insert(sortQueue, { + fromBag = idealItem.bag, + fromSlot = idealItem.slot, + toBag = target.bag, + toSlot = target.slot, + retries = 0 + }) + + -- Reflect the virtual swap in our model so later moves stay correct. + for j = 1, table.getn(items) do + if items[j].bag == target.bag and items[j].slot == target.slot then + items[j].bag = idealItem.bag + items[j].slot = idealItem.slot + break + end + end + + idealItem.bag = target.bag + idealItem.slot = target.slot + end + end + end +end + +function SFrames.Bags.Sort:ScanItems(bagOrder, ignoreLocked) + local items = {} + + for _, bag in ipairs(bagOrder) do + local bagSlots = GetContainerNumSlots(bag) or 0 + for slot = 1, bagSlots do + local link = GetContainerItemLink(bag, slot) + local _, itemCount, locked = GetContainerItemInfo(bag, slot) + + if locked and not ignoreLocked then + return nil, TEXT_LOCKED + end + + if link then + local score, name = GetItemSortValue(link) + table.insert(items, { + bag = bag, + slot = slot, + link = link, + score = score, + name = name, + count = itemCount or 1, + stackKey = GetItemIdentity(link), + maxStack = GetItemMaxStack(link) + }) + end + end + end + + return items, nil +end + +function SFrames.Bags.Sort:BuildStackMergeMoves(items) + local grouped = {} + local moves = {} + + for _, item in ipairs(items) do + if item and item.stackKey and item.maxStack and item.maxStack > 1 and (item.count or 0) > 0 then + if not grouped[item.stackKey] then + grouped[item.stackKey] = { + maxStack = item.maxStack, + slots = {} + } + end + + if item.maxStack > grouped[item.stackKey].maxStack then + grouped[item.stackKey].maxStack = item.maxStack + end + + table.insert(grouped[item.stackKey].slots, { + bag = item.bag, + slot = item.slot, + count = item.count + }) + end + end + + for _, group in pairs(grouped) do + local slots = group.slots + if table.getn(slots) > 1 then + table.sort(slots, function(a, b) + if a.count ~= b.count then + return a.count > b.count + elseif a.bag ~= b.bag then + return a.bag < b.bag + else + return a.slot < b.slot + end + end) + + local left = 1 + local right = table.getn(slots) + while left < right do + local target = slots[left] + local source = slots[right] + + if target.count >= group.maxStack then + left = left + 1 + elseif source.count <= 0 then + right = right - 1 + else + local transfer = math.min(group.maxStack - target.count, source.count) + if transfer > 0 then + table.insert(moves, { + fromBag = source.bag, + fromSlot = source.slot, + toBag = target.bag, + toSlot = target.slot, + transferCount = transfer, + isStackMove = true + }) + target.count = target.count + transfer + source.count = source.count - transfer + end + + if source.count <= 0 then + right = right - 1 + end + if target.count >= group.maxStack then + left = left + 1 + end + end + end + end + end + + return moves +end + +function SFrames.Bags.Sort:StartPlacementPhase(ignoreLocked) + if not activeBagOrder then + FinishSort() + return + end + + local items, err = self:ScanItems(activeBagOrder, ignoreLocked) + if not items then + ResetSortState() + if err then SFrames:Print(err) end + return + end + + SortItemsByRule(items) + self:ExecuteSimpleSort(items, activeBagOrder) + + if table.getn(sortQueue) == 0 then + FinishSort() + return + end + + activePhase = "sort" + sortTimer:Show() +end + +function SFrames.Bags.Sort:StartForBags(bagOrder, completeMessage, completeUpdate) + if isSorting then return end + + isSorting = true + sortQueue = {} + timeSinceLast = 0 + activeCompleteMessage = completeMessage + activeCompleteUpdate = completeUpdate + activeBagOrder = bagOrder + activePhase = nil + + local items, err = self:ScanItems(bagOrder, false) + if not items then + ResetSortState() + if err then SFrames:Print(err) end + return + end + + local stackMoves = self:BuildStackMergeMoves(items) + if table.getn(stackMoves) > 0 then + sortQueue = stackMoves + activePhase = "stack" + sortTimer:Show() + return + end + + self:StartPlacementPhase(false) +end + +function SFrames.Bags.Sort:Start() + if SFrames.Bags.Container and SFrames.Bags.Container.isOffline then + SFrames:Print(TEXT_OFFLINE_BAGS) + return + end + + self:StartForBags( + {0, 1, 2, 3, 4}, + TEXT_BAG_DONE, + function() + if SFrames.Bags.Container then + SFrames.Bags.Container:UpdateLayout() + end + end + ) +end + +function SFrames.Bags.Sort:StartBank() + if SFrames.Bags.Bank and SFrames.Bags.Bank.isOffline then + SFrames:Print(TEXT_OFFLINE_BANK) + return + end + + self:StartForBags( + {-1, 5, 6, 7, 8, 9, 10, 11}, + TEXT_BANK_DONE, + function() + if SFrames.Bags.Bank then + SFrames.Bags.Bank:UpdateLayout() + end + end + ) +end + +sortTimer:SetScript("OnUpdate", function() + if not isSorting then + this:Hide() + return + end + + timeSinceLast = timeSinceLast + arg1 + if timeSinceLast > sortDelay then + timeSinceLast = 0 + + if table.getn(sortQueue) > 0 then + local move = sortQueue[1] + local _, _, lockedFrom = GetContainerItemInfo(move.fromBag, move.fromSlot) + local _, _, lockedTo = GetContainerItemInfo(move.toBag, move.toSlot) + + if lockedFrom or lockedTo or CursorHasItem() then + move.retries = (move.retries or 0) + 1 + if move.retries > 40 then + table.remove(sortQueue, 1) + if CursorHasItem() then + PickupContainerItem(move.fromBag, move.fromSlot) + end + end + return + end + + table.remove(sortQueue, 1) + if move.isStackMove and move.transferCount then + SplitContainerItem(move.fromBag, move.fromSlot, move.transferCount) + PickupContainerItem(move.toBag, move.toSlot) + else + PickupContainerItem(move.fromBag, move.fromSlot) + PickupContainerItem(move.toBag, move.toSlot) + if CursorHasItem() then + PickupContainerItem(move.fromBag, move.fromSlot) + if CursorHasItem() then + PickupContainerItem(move.toBag, move.toSlot) + end + end + end + else + if activePhase == "stack" then + if activeBagOrder then + for _, bag in ipairs(activeBagOrder) do + local bagSlots = GetContainerNumSlots(bag) or 0 + for slot = 1, bagSlots do + local _, _, locked = GetContainerItemInfo(bag, slot) + if locked then + return + end + end + end + end + -- After consolidation, rescan inventory and run normal sorting. + SFrames.Bags.Sort:StartPlacementPhase(true) + else + if CursorHasItem() then return end + FinishSort() + end + end + end +end) +sortTimer:Hide() diff --git a/Bindings.xml b/Bindings.xml new file mode 100644 index 0000000..2e26d22 --- /dev/null +++ b/Bindings.xml @@ -0,0 +1,7 @@ + + + if SFrames and SFrames.WorldMap and SFrames.WorldMap.ToggleNav then + SFrames.WorldMap:ToggleNav() + end + + diff --git a/BookUI.lua b/BookUI.lua new file mode 100644 index 0000000..badbb08 --- /dev/null +++ b/BookUI.lua @@ -0,0 +1,375 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Book Reading UI (BookUI.lua) +-- Replaces ItemTextFrame with Nanami-UI styled interface + page flipping +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.BookUI = {} +local BUI = SFrames.BookUI + +-------------------------------------------------------------------------------- +-- Theme (match QuestUI style) +-------------------------------------------------------------------------------- +local T = SFrames.ActiveTheme + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local FRAME_W = 340 +local FRAME_H = 400 +local HEADER_H = 34 +local BOTTOM_H = 42 +local SIDE_PAD = 14 +local CONTENT_W = FRAME_W - SIDE_PAD * 2 +local SCROLL_STEP = 40 +local BODY_FONT_SIZE = 12 +local BODY_LINE_SPACING = 2 + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local MainFrame = nil + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +local function TextHeight(fs, fallback) + if not fs then return fallback or 14 end + local h = fs.GetStringHeight and fs:GetStringHeight() + if h and h > 0 then return h end + h = fs:GetHeight() + if h and h > 1 then return h end + return fallback or 14 +end + +local function IsTrue(v) + return v == true or v == 1 +end + +local function CreateScrollArea(parent, name) + local scroll = CreateFrame("ScrollFrame", name, parent) + local content = CreateFrame("Frame", name .. "Content", scroll) + content:SetWidth(CONTENT_W) + content:SetHeight(1) + scroll:SetScrollChild(content) + + scroll:EnableMouseWheel(true) + scroll:SetScript("OnMouseWheel", function() + local cur = this:GetVerticalScroll() + local maxVal = this:GetVerticalScrollRange() + if arg1 > 0 then + this:SetVerticalScroll(math.max(0, cur - SCROLL_STEP)) + else + this:SetVerticalScroll(math.min(maxVal, cur + SCROLL_STEP)) + end + end) + + scroll.content = content + return scroll +end + +local function CreateActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 90) + btn:SetHeight(28) + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + fs:SetText(text or "") + btn.label = fs + + btn.disabled = false + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + self:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + btn:SetScript("OnMouseDown", function() + if not this.disabled then + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end + end) + btn:SetScript("OnMouseUp", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end + end) + + return btn +end + +local function HideBlizzardItemText() + if not ItemTextFrame then return end + ItemTextFrame:SetAlpha(0) + ItemTextFrame:EnableMouse(false) + ItemTextFrame:ClearAllPoints() + ItemTextFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 2000, 2000) +end + +local function UpdateBookContent() + if not MainFrame then return end + + local title = ItemTextGetItem and (ItemTextGetItem() or "") or "" + local text = ItemTextGetText and (ItemTextGetText() or "") or "" + if (not text or text == "") and ItemTextPageText and ItemTextPageText.GetText then + text = ItemTextPageText:GetText() or "" + end + if text and text ~= "" then + -- Keep paragraph gap readable: collapse 3+ consecutive newlines. + text = string.gsub(text, "\n%s*\n%s*\n+", "\n\n") + end + local pageNum = ItemTextGetPage and tonumber(ItemTextGetPage()) or 1 + if not pageNum or pageNum < 1 then pageNum = 1 end + + MainFrame.titleFS:SetText(title) + MainFrame.pageFS:SetText("第 " .. pageNum .. " 页") + MainFrame.bodyFS:SetText(text) + + MainFrame.bodyFS:ClearAllPoints() + MainFrame.bodyFS:SetPoint("TOPLEFT", MainFrame.scroll.content, "TOPLEFT", 2, -6) + MainFrame.scroll.content:SetHeight(TextHeight(MainFrame.bodyFS, 14) + 18) + MainFrame.scroll:SetVerticalScroll(0) + + local hasPrevApi = ItemTextHasPrevPage and IsTrue(ItemTextHasPrevPage()) or false + local hasNextApi = ItemTextHasNextPage and IsTrue(ItemTextHasNextPage()) or false + local canPrev = (pageNum and pageNum > 1) or hasPrevApi + MainFrame.prevBtn:SetDisabled(not canPrev) + MainFrame.nextBtn:SetDisabled(not hasNextApi) +end + +local function QueueRefresh(delay, count) + if not MainFrame then return end + MainFrame._refreshDelay = delay or 0.05 + MainFrame._refreshCount = count or 1 +end + +local function CloseBookFrame() + if MainFrame and MainFrame:IsVisible() then + MainFrame:Hide() + end + if CloseItemText then + pcall(CloseItemText) + elseif ItemTextFrame and ItemTextFrame.Hide then + pcall(ItemTextFrame.Hide, ItemTextFrame) + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function BUI:Initialize() + if MainFrame then return end + + MainFrame = CreateFrame("Frame", "SFramesBookFrame", UIParent) + MainFrame:SetWidth(FRAME_W) + MainFrame:SetHeight(FRAME_H) + MainFrame:SetPoint("LEFT", UIParent, "LEFT", 64, 0) + MainFrame:SetFrameStrata("HIGH") + MainFrame:SetToplevel(true) + MainFrame:EnableMouse(true) + MainFrame:SetMovable(true) + MainFrame:RegisterForDrag("LeftButton") + MainFrame:SetScript("OnDragStart", function() this:StartMoving() end) + MainFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + SetRoundBackdrop(MainFrame) + CreateShadow(MainFrame) + + local header = CreateFrame("Frame", nil, MainFrame) + header:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", 0, 0) + header:SetHeight(HEADER_H) + + local titleFS = header:CreateFontString(nil, "OVERLAY") + titleFS:SetFont(GetFont(), 14, "OUTLINE") + titleFS:SetPoint("LEFT", header, "LEFT", SIDE_PAD, 0) + titleFS:SetPoint("RIGHT", header, "RIGHT", -96, 0) + titleFS:SetJustifyH("LEFT") + titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + MainFrame.titleFS = titleFS + + local pageFS = header:CreateFontString(nil, "OVERLAY") + pageFS:SetFont(GetFont(), 11, "OUTLINE") + pageFS:SetPoint("RIGHT", header, "RIGHT", -30, 0) + pageFS:SetJustifyH("RIGHT") + pageFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + MainFrame.pageFS = pageFS + + local closeBtn = CreateFrame("Button", nil, MainFrame, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", 2, 2) + closeBtn:SetWidth(24); closeBtn:SetHeight(24) + + local headerSep = MainFrame:CreateTexture(nil, "ARTWORK") + headerSep:SetTexture("Interface\\Buttons\\WHITE8X8") + headerSep:SetHeight(1) + headerSep:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 6, -HEADER_H) + headerSep:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", -6, -HEADER_H) + headerSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + local contentArea = CreateFrame("Frame", nil, MainFrame) + contentArea:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", SIDE_PAD, -(HEADER_H + 4)) + contentArea:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, BOTTOM_H + 4) + MainFrame.contentArea = contentArea + + local scroll = CreateScrollArea(contentArea, "SFramesBookScroll") + scroll:SetPoint("TOPLEFT", contentArea, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", contentArea, "BOTTOMRIGHT", 0, 0) + MainFrame.scroll = scroll + + local bodyFS = scroll.content:CreateFontString(nil, "OVERLAY") + bodyFS:SetFont(GetFont(), BODY_FONT_SIZE) + if bodyFS.SetSpacing then + bodyFS:SetSpacing(BODY_LINE_SPACING) + end + bodyFS:SetWidth(CONTENT_W - 4) + bodyFS:SetJustifyH("LEFT") + bodyFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + MainFrame.bodyFS = bodyFS + + local bottomSep = MainFrame:CreateTexture(nil, "ARTWORK") + bottomSep:SetTexture("Interface\\Buttons\\WHITE8X8") + bottomSep:SetHeight(1) + bottomSep:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", 6, BOTTOM_H) + bottomSep:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -6, BOTTOM_H) + bottomSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + MainFrame.prevBtn = CreateActionBtn(MainFrame, "上一页", 90) + MainFrame.prevBtn:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", SIDE_PAD, 8) + MainFrame.prevBtn:SetScript("OnClick", function() + if this.disabled then return end + if ItemTextPrevPage then + ItemTextPrevPage() + QueueRefresh(0.05, 5) + end + end) + + MainFrame.closeBtn = CreateActionBtn(MainFrame, "关闭", 90) + MainFrame.closeBtn:SetPoint("BOTTOM", MainFrame, "BOTTOM", 0, 8) + MainFrame.closeBtn:SetScript("OnClick", function() + CloseBookFrame() + end) + + MainFrame.nextBtn = CreateActionBtn(MainFrame, "下一页", 90) + MainFrame.nextBtn:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, 8) + MainFrame.nextBtn:SetScript("OnClick", function() + if this.disabled then return end + if ItemTextNextPage then + ItemTextNextPage() + QueueRefresh(0.05, 5) + end + end) + + MainFrame:SetScript("OnHide", function() + if ItemTextFrame and ItemTextFrame:IsVisible() then + pcall(ItemTextFrame.Hide, ItemTextFrame) + end + end) + MainFrame:SetScript("OnUpdate", function() + if not this._refreshCount or this._refreshCount <= 0 then return end + this._refreshDelay = (this._refreshDelay or 0) - (arg1 or 0) + if this._refreshDelay > 0 then return end + UpdateBookContent() + this._refreshCount = this._refreshCount - 1 + if this._refreshCount > 0 then + this._refreshDelay = 0.08 + end + end) + + MainFrame:RegisterEvent("ITEM_TEXT_BEGIN") + MainFrame:RegisterEvent("ITEM_TEXT_READY") + MainFrame:RegisterEvent("ITEM_TEXT_CLOSED") + MainFrame:SetScript("OnEvent", function() + if event == "ITEM_TEXT_BEGIN" then + HideBlizzardItemText() + UpdateBookContent() + QueueRefresh(0.05, 5) + MainFrame:Show() + elseif event == "ITEM_TEXT_READY" then + HideBlizzardItemText() + UpdateBookContent() + QueueRefresh(0.05, 5) + if not MainFrame:IsVisible() then + MainFrame:Show() + end + elseif event == "ITEM_TEXT_CLOSED" then + MainFrame._refreshCount = 0 + MainFrame:Hide() + end + end) + + MainFrame:Hide() + tinsert(UISpecialFrames, "SFramesBookFrame") +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + BUI:Initialize() + end +end) diff --git a/CharacterPanel.lua b/CharacterPanel.lua new file mode 100644 index 0000000..c1440c7 --- /dev/null +++ b/CharacterPanel.lua @@ -0,0 +1,3320 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Character Panel (CharacterPanel.lua) +-- Replaces the default CharacterFrame with a modern rounded UI +-------------------------------------------------------------------------------- + +SFrames.CharacterPanel = {} + +local CP = SFrames.CharacterPanel +local panel, tabs, pages + +-------------------------------------------------------------------------------- +-- Theme +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + repColors = { + [1] = { 0.8, 0.13, 0.13 }, [2] = { 0.8, 0.3, 0.22 }, + [3] = { 0.75, 0.55, 0.15 }, [4] = { 0.9, 0.7, 0.0 }, + [5] = { 0.0, 0.6, 0.1 }, [6] = { 0.0, 0.7, 0.3 }, + [7] = { 0.0, 0.6, 0.75 }, [8] = { 0.0, 0.5, 0.9 }, + }, + resistColors = { + [2] = { 1, 0.5, 0.15 }, [3] = { 0.35, 0.9, 0.25 }, + [4] = { 0.45, 0.7, 1 }, [5] = { 0.6, 0.35, 0.9 }, + [6] = { 0.95, 0.9, 0.4 }, + }, +}) + +local FRAME_W = 340 +local FRAME_H = 490 +local HEADER_H = 28 +local TAB_H = 22 +local TAB_BAR_H = 26 +local CONTENT_TOP = -(HEADER_H + TAB_BAR_H) +local SIDE_PAD = 8 +local INNER_PAD = 4 +local CONTENT_W = FRAME_W - INNER_PAD * 2 +local SCROLL_W = CONTENT_W - 10 + +local SLOT_SIZE = 32 +local SLOT_GAP = 2 + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, [5] = { 1, 0.5, 0 }, +} + +local SLOT_LABEL = { + HeadSlot = "头部", NeckSlot = "颈部", ShoulderSlot = "肩部", + BackSlot = "背部", ChestSlot = "胸部", ShirtSlot = "衬衣", + WristSlot = "手腕", HandsSlot = "手套", WaistSlot = "腰带", + LegsSlot = "腿部", FeetSlot = "脚部", + Finger0Slot = "戒指1", Finger1Slot = "戒指2", + Trinket0Slot = "饰品1", Trinket1Slot = "饰品2", + MainHandSlot = "主手", SecondaryHandSlot = "副手", + RangedSlot = "远程", AmmoSlot = "弹药", TabardSlot = "战袍", +} + +local EQUIP_SLOTS_LEFT = { + { id = 1, name = "HeadSlot" }, { id = 2, name = "NeckSlot" }, + { id = 3, name = "ShoulderSlot" }, { id = 15, name = "BackSlot" }, + { id = 5, name = "ChestSlot" }, { id = 4, name = "ShirtSlot" }, + { id = 19, name = "TabardSlot" }, { id = 9, name = "WristSlot" }, +} +local EQUIP_SLOTS_RIGHT = { + { id = 10, name = "HandsSlot" }, { id = 6, name = "WaistSlot" }, + { id = 7, name = "LegsSlot" }, { id = 8, name = "FeetSlot" }, + { id = 11, name = "Finger0Slot" }, { id = 12, name = "Finger1Slot" }, + { id = 13, name = "Trinket0Slot" }, { id = 14, name = "Trinket1Slot" }, +} +local EQUIP_SLOTS_BOTTOM = { + { id = 16, name = "MainHandSlot" }, { id = 17, name = "SecondaryHandSlot" }, + { id = 18, name = "RangedSlot" }, { id = 0, name = "AmmoSlot" }, +} + +local TAB_NAMES = { "装备", "声望", "技能", "荣誉" } +local STAT_NAMES = { "力量", "敏捷", "耐力", "智力", "精神" } +local RESIST_NAMES = { [2] = "火焰", [3] = "自然", [4] = "冰霜", [5] = "暗影", [6] = "奥术" } +local REP_STANDING = { + [1] = "仇恨", [2] = "敌对", [3] = "不友好", [4] = "中立", + [5] = "友善", [6] = "尊敬", [7] = "崇敬", [8] = "崇拜", +} + +-------------------------------------------------------------------------------- +-- EP Stat Weights per class (Turtle WoW) +-- Physical DPS: 1 AP = 1 EP; Caster DPS: 1 SP = 1 EP +-- Source: Turtle WoW deep theorycraft & EP evaluation report +-------------------------------------------------------------------------------- +local STAT_WEIGHTS = { + WARRIOR = { + STR = 2.0, AGI = 1.5, STA = 1.0, INT = 0, SPI = 0, + ATTACKPOWER = 1.0, CRIT = 25, TOHIT = 18, + DEFENSE = 1.5, DODGE = 12, PARRY = 12, BLOCK = 8, BLOCKVALUE = 0.5, + ARMOR = 0.02, HEALTHREG = 2, HEALTH = 0.1, + }, + ROGUE = { + STR = 1.0, AGI = 2.0, STA = 0.5, INT = 0, SPI = 0, + ATTACKPOWER = 1.0, CRIT = 25, TOHIT = 18, + DODGE = 10, HEALTH = 0.067, + }, + HUNTER = { + STR = 0.5, AGI = 2.0, STA = 0.5, INT = 0.3, SPI = 0.1, + ATTACKPOWER = 1.0, RANGEDATTACKPOWER = 1.0, CRIT = 25, TOHIT = 18, + RANGEDCRIT = 25, HEALTH = 0.067, MANA = 0.033, + }, + DRUID = { + STR = 2.4, AGI = 1.5, STA = 1.0, INT = 0.5, SPI = 0.5, + ATTACKPOWER = 1.0, ATTACKPOWERFERAL = 1.0, + CRIT = 25, TOHIT = 18, + DMG = 1.0, HEAL = 0.8, SPELLCRIT = 8, SPELLTOHIT = 14, + DEFENSE = 1.2, DODGE = 10, ARMOR = 0.02, + MANAREG = 3, HEALTHREG = 2, HEALTH = 0.1, MANA = 0.033, + }, + PALADIN = { + STR = 2.0, AGI = 1.0, STA = 1.0, INT = 0.5, SPI = 0.3, + ATTACKPOWER = 1.0, CRIT = 25, TOHIT = 18, + DMG = 1.0, HEAL = 0.8, HOLYDMG = 1.0, + SPELLCRIT = 8, SPELLTOHIT = 14, + DEFENSE = 1.5, DODGE = 12, PARRY = 12, BLOCK = 8, BLOCKVALUE = 0.5, + ARMOR = 0.02, MANAREG = 3, HEALTH = 0.1, MANA = 0.033, + }, + SHAMAN = { + STR = 1.0, AGI = 1.0, STA = 0.8, INT = 0.5, SPI = 0.3, + ATTACKPOWER = 1.0, CRIT = 20, TOHIT = 15, + DMG = 1.0, HEAL = 0.8, NATUREDMG = 1.0, + SPELLCRIT = 8, SPELLTOHIT = 14, + MANAREG = 3, HEALTH = 0.1, MANA = 0.033, + }, + MAGE = { + STR = 0, AGI = 0, STA = 0.3, INT = 0.125, SPI = 0.5, + DMG = 1.0, ARCANEDMG = 1.0, FIREDMG = 1.0, FROSTDMG = 1.0, + SPELLCRIT = 8, SPELLTOHIT = 14, + MANAREG = 3, HEALTH = 0.067, MANA = 0.033, + }, + WARLOCK = { + STR = 0, AGI = 0, STA = 0.5, INT = 0.125, SPI = 0.3, + DMG = 1.0, SHADOWDMG = 1.0, FIREDMG = 1.0, + SPELLCRIT = 8, SPELLTOHIT = 14, + MANAREG = 3, HEALTH = 0.1, MANA = 0.033, + }, + PRIEST = { + STR = 0, AGI = 0, STA = 0.3, INT = 0.5, SPI = 1.0, + DMG = 0.8, HEAL = 1.0, SHADOWDMG = 0.8, HOLYDMG = 0.8, + SPELLCRIT = 8, SPELLTOHIT = 14, + MANAREG = 3, HEALTH = 0.067, MANA = 0.033, + }, +} + +local widgetId = 0 + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + local bg = bgColor or T.bg + local bd = borderColor or T.border + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function SetPixelBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + if bgColor then frame:SetBackdropColor(bgColor[1], bgColor[2], bgColor[3], bgColor[4] or 1) end + if borderColor then frame:SetBackdropBorderColor(borderColor[1], borderColor[2], borderColor[3], borderColor[4] or 1) end +end + +local function CreateShadow(parent, size) + local s = CreateFrame("Frame", nil, parent) + local sz = size or 4 + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -sz, sz) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", sz, -sz) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 } + }) + s:SetBackdropColor(0, 0, 0, 0.6) + s:SetBackdropBorderColor(0, 0, 0, 0.45) + return s +end + +local function MakeSep(parent, x1, y1, x2, y2) + local sep = parent:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", parent, "TOPLEFT", x1, y1) + sep:SetPoint("TOPRIGHT", parent, "TOPRIGHT", x2, y1) + return sep +end + +local function MakeFS(parent, size, justifyH, color) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), size or 11, "OUTLINE") + fs:SetJustifyH(justifyH or "LEFT") + local c = color or T.valueText + fs:SetTextColor(c[1], c[2], c[3]) + return fs +end + +local function NextName(p) + widgetId = widgetId + 1 + return "SFramesCP" .. (p or "") .. tostring(widgetId) +end + +local function Clamp(v, lo, hi) + if v < lo then return lo end + if v > hi then return hi end + return v +end + +-------------------------------------------------------------------------------- +-- Combat stat helpers: multi-strategy retrieval for Turtle WoW compatibility +-- 1) Standard 1.12 API (GetCritChance, etc.) +-- 2) GetCombatRatingBonus (TBC-style, Turtle WoW may support) +-- 3) Manual calc: agility/intellect base + ItemBonusLib gear bonus +-------------------------------------------------------------------------------- +local function TryAPIs(names) + for _, name in ipairs(names) do + local fn = _G[name] + if fn then + local ok, val = pcall(fn) + if ok and type(val) == "number" and val > 0 then return val end + end + end + return 0 +end +local function TryAPIsArg(names, arg1) + for _, name in ipairs(names) do + local fn = _G[name] + if fn then + local ok, val = pcall(fn, arg1) + if ok and type(val) == "number" and val > 0 then return val end + end + end + return 0 +end +local function TryCombatRating(crId) + if GetCombatRatingBonus then + local ok, val = pcall(GetCombatRatingBonus, crId) + if ok and type(val) == "number" and val > 0 then return val end + end + return 0 +end + +-- Try to get ItemBonusLib from AceLibrary (provides gear-only crit/hit/etc.) +local function GetItemBonusLib() + if AceLibrary and AceLibrary.HasInstance and AceLibrary:HasInstance("ItemBonusLib-1.0") then + return AceLibrary("ItemBonusLib-1.0") + end + return nil +end +local function GetGearBonus(key) + local lib = GetItemBonusLib() + if lib and lib.GetBonus then return lib:GetBonus(key) or 0 end + return 0 +end + +local function CalcItemEP(link, class) + local weights = STAT_WEIGHTS[class] + if not weights or not link then return 0 end + local lib = GetItemBonusLib() + if not lib or not lib.ScanItemLink then return 0 end + local ok, info = pcall(function() return lib:ScanItemLink(link) end) + if not ok or not info or not info.bonuses then return 0 end + local ep = 0 + for stat, value in pairs(info.bonuses) do + local w = weights[stat] + if w and type(value) == "number" then + ep = ep + value * w + end + end + return ep +end + +-- Turtle WoW agility → melee crit (agi per 1% crit at level 60) +local AGI_PER_MELEE_CRIT = { + WARRIOR = 20, PALADIN = 20, ROGUE = 29, HUNTER = 52.91, + DRUID = 20, SHAMAN = 20, MAGE = 0, WARLOCK = 0, PRIEST = 0, +} +local AGI_PER_RANGED_CRIT = { + HUNTER = 52.91, WARRIOR = 20, ROGUE = 29, +} +-- Turtle WoW agility → dodge (agi per 1% dodge at level 60) +local AGI_PER_DODGE = { + ROGUE = 14.5, WARRIOR = 20, PALADIN = 20, + SHAMAN = 20, DRUID = 20, HUNTER = 0, MAGE = 0, WARLOCK = 0, PRIEST = 0, +} +-- Turtle WoW intellect → spell crit (int per 1% crit at level 60) +local INT_PER_SPELL_CRIT = { + MAGE = 59.5, WARLOCK = 60.6, PRIEST = 59.5, + DRUID = 60, SHAMAN = 59.2, PALADIN = 29.5, +} +-- Turtle WoW base melee crit at level 60 (before agility) +local BASE_MELEE_CRIT = { + WARRIOR = 0, PALADIN = 0.7, ROGUE = 0, HUNTER = 0, + DRUID = 0.9, SHAMAN = 1.7, MAGE = 0, WARLOCK = 0, PRIEST = 0, +} +local BASE_SPELL_CRIT = { + MAGE = 0.2, WARLOCK = 1.7, PRIEST = 0.8, + DRUID = 1.8, SHAMAN = 2.3, PALADIN = 0, +} + +local function CalcMeleeCrit() + local _, class = UnitClass("player") + class = class or "" + local baseCrit = BASE_MELEE_CRIT[class] or 0 + local ratio = AGI_PER_MELEE_CRIT[class] or 0 + local agiCrit = 0 + if ratio > 0 then + local _, agi = UnitStat("player", 2) + agiCrit = (agi or 0) / ratio + end + local gearCrit = GetGearBonus("CRIT") + return baseCrit + agiCrit + gearCrit +end +local function CalcRangedCrit() + local _, class = UnitClass("player") + class = class or "" + local baseCrit = BASE_MELEE_CRIT[class] or 0 + local ratio = AGI_PER_RANGED_CRIT[class] or 0 + local agiCrit = 0 + if ratio > 0 then + local _, agi = UnitStat("player", 2) + agiCrit = (agi or 0) / ratio + end + local gearCrit = GetGearBonus("RANGEDCRIT") + GetGearBonus("CRIT") + return baseCrit + agiCrit + gearCrit +end +local function CalcSpellCrit() + local _, class = UnitClass("player") + class = class or "" + local baseCrit = BASE_SPELL_CRIT[class] or 0 + local ratio = INT_PER_SPELL_CRIT[class] or 0 + local intCrit = 0 + if ratio > 0 then + local _, intel = UnitStat("player", 4) + intCrit = (intel or 0) / ratio + end + local gearCrit = GetGearBonus("SPELLCRIT") + return baseCrit + intCrit + gearCrit +end + +local function SafeGetMeleeCrit() + local v = TryAPIs({ "GetCritChance", "GetMeleeCritChance", "GetPlayerCritChance" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_CRIT_MELEE or 9) + if v > 0 then return v end + return CalcMeleeCrit() +end +local function SafeGetRangedCrit() + local v = TryAPIs({ "GetRangedCritChance" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_CRIT_RANGED or 10) + if v > 0 then return v end + return CalcRangedCrit() +end +local function SafeGetSpellCrit() + local v = TryAPIsArg({ "GetSpellCritChance" }, 2) + if v > 0 then return v end + v = TryCombatRating(_G.CR_CRIT_SPELL or 11) + if v > 0 then return v end + return CalcSpellCrit() +end +local function SafeGetMeleeHit() + local v = TryAPIs({ "GetHitModifier", "GetMeleeHitModifier", "GetCombatMissChance" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_HIT_MELEE or 6) + if v > 0 then return v end + return GetGearBonus("TOHIT") +end +local function SafeGetSpellHit() + local v = TryAPIs({ "GetSpellHitModifier" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_HIT_SPELL or 8) + if v > 0 then return v end + return GetGearBonus("SPELLTOHIT") +end +local function IsCritFromAPI() + return TryAPIs({ "GetCritChance", "GetMeleeCritChance", "GetPlayerCritChance" }) > 0 + or TryCombatRating(_G.CR_CRIT_MELEE or 9) > 0 +end + +-------------------------------------------------------------------------------- +-- Talent scanning: identify hit/crit bonuses from talent trees +-- Uses both English and Chinese name matching for Turtle WoW compatibility +-------------------------------------------------------------------------------- +local TALENT_DB = { + meleeHit = { + { names = {"Precision", "精准"}, perRank = 1 }, + { names = {"Surefooted", "稳固射击", "脚踏实地"}, perRank = 1 }, + { names = {"Nature's Guidance", "自然指引", "自然引导"}, perRank = 1 }, + }, + spellHit = { + { names = {"Elemental Precision", "元素精准"}, perRank = 2 }, + { names = {"Arcane Focus", "奥术集中"}, perRank = 2 }, + { names = {"Suppression", "镇压"}, perRank = 2 }, + { names = {"Shadow Focus", "暗影集中"}, perRank = 2 }, + { names = {"Nature's Guidance", "自然指引", "自然引导"}, perRank = 1 }, + }, + meleeCrit = { + { names = {"Cruelty", "残忍"}, perRank = 1 }, + { names = {"Malice", "恶意"}, perRank = 1 }, + { names = {"Lethal Shots", "致命射击"}, perRank = 1 }, + { names = {"Conviction", "信念", "坚定信念"}, perRank = 1 }, + { names = {"Sharpened Claws", "利爪强化", "尖锐之爪"}, perRank = 2 }, + { names = {"Thundering Strikes", "雷霆一击", "雷霆之击"}, perRank = 1 }, + }, + spellCrit = { + { names = {"Arcane Instability", "奥术不稳定"}, perRank = 1 }, + { names = {"Critical Mass", "临界质量"}, perRank = 2 }, + { names = {"Holy Specialization", "神圣专精"}, perRank = 1 }, + { names = {"Tidal Mastery", "潮汐掌握"}, perRank = 1 }, + }, +} + +local _talentCache, _talentCacheTime + +local function ScanTalentBonuses() + local now = GetTime and GetTime() or 0 + if _talentCache and _talentCacheTime and (now - _talentCacheTime) < 5 then + return _talentCache + end + local r = { meleeHit = 0, spellHit = 0, meleeCrit = 0, spellCrit = 0, + talentDetails = {} } + if not GetNumTalentTabs then _talentCache = r; _talentCacheTime = now; return r end + + local function NameMatch(tname, patterns) + if not tname then return false end + for _, p in ipairs(patterns) do + if string.find(tname, p, 1, true) then return true end + end + return false + end + + for cat, entries in pairs(TALENT_DB) do + if cat ~= "talentDetails" then + for tab = 1, GetNumTalentTabs() do + for i = 1, GetNumTalents(tab) do + local name, _, _, _, rank, maxRank = GetTalentInfo(tab, i) + if name and rank and rank > 0 then + for _, entry in ipairs(entries) do + if NameMatch(name, entry.names) then + local bonus = rank * entry.perRank + r[cat] = r[cat] + bonus + table.insert(r.talentDetails, + { cat = cat, name = name, + rank = rank, maxRank = maxRank or rank, + bonus = bonus }) + end + end + end + end + end + end + end + _talentCache = r; _talentCacheTime = now + return r +end + +local function GetTalentBonus(cat) + return ScanTalentBonuses()[cat] or 0 +end +local function GetTalentDetailsFor(cat) + local info = ScanTalentBonuses() + local out = {} + for _, d in ipairs(info.talentDetails or {}) do + if d.cat == cat then table.insert(out, d) end + end + return out +end + +-- Comprehensive stat builders (base + agi/int + gear + talent) +local function FullMeleeCrit() + local _, class = UnitClass("player") + class = class or "" + local baseCrit = BASE_MELEE_CRIT[class] or 0 + local ratio = AGI_PER_MELEE_CRIT[class] or 0 + local agiCrit = 0 + if ratio > 0 then + local _, agi = UnitStat("player", 2); agiCrit = (agi or 0) / ratio + end + local gearCrit = GetGearBonus("CRIT") + local talentCrit = GetTalentBonus("meleeCrit") + return baseCrit + agiCrit + gearCrit + talentCrit, + baseCrit, agiCrit, gearCrit, talentCrit +end +local function FullRangedCrit() + local _, class = UnitClass("player") + class = class or "" + local baseCrit = BASE_MELEE_CRIT[class] or 0 + local ratio = AGI_PER_RANGED_CRIT[class] or 0 + local agiCrit = 0 + if ratio > 0 then + local _, agi = UnitStat("player", 2); agiCrit = (agi or 0) / ratio + end + local gearCrit = GetGearBonus("RANGEDCRIT") + GetGearBonus("CRIT") + local talentCrit = GetTalentBonus("meleeCrit") + return baseCrit + agiCrit + gearCrit + talentCrit, + baseCrit, agiCrit, gearCrit, talentCrit +end +local function FullSpellCrit() + local _, class = UnitClass("player") + class = class or "" + local baseCrit = BASE_SPELL_CRIT[class] or 0 + local ratio = INT_PER_SPELL_CRIT[class] or 0 + local intCrit = 0 + if ratio > 0 then + local _, intel = UnitStat("player", 4); intCrit = (intel or 0) / ratio + end + local gearCrit = GetGearBonus("SPELLCRIT") + local talentCrit = GetTalentBonus("spellCrit") + return baseCrit + intCrit + gearCrit + talentCrit, + baseCrit, intCrit, gearCrit, talentCrit +end +local function FullMeleeHit() + local gearHit = GetGearBonus("TOHIT") + local talentHit = GetTalentBonus("meleeHit") + return gearHit + talentHit, gearHit, talentHit +end +local function FullSpellHit() + local gearHit = GetGearBonus("SPELLTOHIT") + local talentHit = GetTalentBonus("spellHit") + return gearHit + talentHit, gearHit, talentHit +end + +-- Override Safe* to use Full* when API fails +local _origSafeGetMeleeCrit = SafeGetMeleeCrit +SafeGetMeleeCrit = function() + local v = TryAPIs({ "GetCritChance", "GetMeleeCritChance", "GetPlayerCritChance" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_CRIT_MELEE or 9) + if v > 0 then return v end + local total = FullMeleeCrit() + return total +end +SafeGetRangedCrit = function() + local v = TryAPIs({ "GetRangedCritChance" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_CRIT_RANGED or 10) + if v > 0 then return v end + local total = FullRangedCrit() + return total +end +SafeGetSpellCrit = function() + local v = TryAPIsArg({ "GetSpellCritChance" }, 2) + if v > 0 then return v end + v = TryCombatRating(_G.CR_CRIT_SPELL or 11) + if v > 0 then return v end + local total = FullSpellCrit() + return total +end +SafeGetMeleeHit = function() + local v = TryAPIs({ "GetHitModifier", "GetMeleeHitModifier", "GetCombatMissChance" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_HIT_MELEE or 6) + if v > 0 then return v end + local total = FullMeleeHit() + return total +end +SafeGetSpellHit = function() + local v = TryAPIs({ "GetSpellHitModifier" }) + if v > 0 then return v end + v = TryCombatRating(_G.CR_HIT_SPELL or 8) + if v > 0 then return v end + local total = FullSpellHit() + return total +end + +-------------------------------------------------------------------------------- +-- CS: Combat Stats utility table (single upvalue for all tooltip helpers, +-- avoids Lua 5.0's 32-upvalue-per-closure limit) +-------------------------------------------------------------------------------- +local CS = {} +function CS.TipKV(key, val, kr, kg, kb, vr, vg, vb) + GameTooltip:AddDoubleLine(key, val, + kr or 0.7, kg or 0.7, kb or 0.75, + vr or 1, vg or 1, vb or 1) +end +function CS.TipLine(txt, r, g, b) + GameTooltip:AddLine(txt, r or 0.65, g or 0.65, b or 0.7, 1) +end +function CS.CalcArmorReduction(armor, level) + local lvl = level or UnitLevel("player") or 60 + local k = 400 + 85 * lvl + local pct = armor / (armor + k) * 100 + if pct < 0 then pct = 0 end + if pct > 75 then pct = 75 end + return pct +end +function CS.StatBaseBonus(idx) + local base, eff = UnitStat("player", idx) + base = math.floor(base or 0) + eff = math.floor(eff or 0) + return base, eff, eff - base +end +function CS.TipStatValues(base, eff, bonus) + CS.TipKV("基础值:", tostring(base)) + if bonus ~= 0 then + CS.TipKV("装备/Buff 加成:", string.format("%+d", bonus), + 0.7,0.7,0.75, bonus > 0 and 0 or 1, bonus > 0 and 1 or 0, 0) + end + CS.TipKV("当前合计:", tostring(eff), 0.7,0.7,0.75, 1,0.9,0.6) +end +CS.SafeGetMeleeCrit = SafeGetMeleeCrit +CS.SafeGetRangedCrit = SafeGetRangedCrit +CS.SafeGetSpellCrit = SafeGetSpellCrit +CS.SafeGetMeleeHit = SafeGetMeleeHit +CS.SafeGetSpellHit = SafeGetSpellHit +CS.IsCritFromAPI = IsCritFromAPI +CS.TryAPIs = TryAPIs +CS.TryAPIsArg = TryAPIsArg +CS.FullMeleeCrit = FullMeleeCrit +CS.FullRangedCrit = FullRangedCrit +CS.FullSpellCrit = FullSpellCrit +CS.FullMeleeHit = FullMeleeHit +CS.FullSpellHit = FullSpellHit +CS.GetTalentDetailsFor = GetTalentDetailsFor +CS.GetGearBonus = GetGearBonus +CS.GetItemBonusLib = GetItemBonusLib +CS.AGI_PER_MELEE_CRIT = AGI_PER_MELEE_CRIT + +SFrames.CharacterPanel.CS = CS + +local function GetItemQualityFromLink(link) + if not link then return nil end + local _, _, q = string.find(link, "|c(%x+)|H") + if not q then return nil end + local m = { + ["ff9d9d9d"] = 0, ["ffffffff"] = 1, ["ff1eff00"] = 2, + ["ff0070dd"] = 3, ["ffa335ee"] = 4, ["ffff8000"] = 5, + } + return m[q] +end + +-------------------------------------------------------------------------------- +-- Scroll helper +-------------------------------------------------------------------------------- +local function CreateScrollFrame(parent, width, height) + local holder = CreateFrame("Frame", NextName("SH"), parent) + holder:SetWidth(width) + holder:SetHeight(height) + + local scroll = CreateFrame("ScrollFrame", NextName("SF"), holder) + scroll:SetPoint("TOPLEFT", holder, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -10, 0) + + local child = CreateFrame("Frame", NextName("SC"), scroll) + child:SetWidth(width - 14) + child:SetHeight(1) + scroll:SetScrollChild(child) + + local slider = CreateFrame("Slider", NextName("SB"), holder) + slider:SetWidth(6) + slider:SetPoint("TOPRIGHT", holder, "TOPRIGHT", -1, -2) + slider:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -1, 2) + slider:SetOrientation("VERTICAL") + slider:SetMinMaxValues(0, 1) + slider:SetValue(0) + SetPixelBackdrop(slider, { 0.1, 0.1, 0.12, 0.4 }, { 0.15, 0.15, 0.18, 0.3 }) + + local thumb = slider:CreateTexture(nil, "OVERLAY") + thumb:SetTexture("Interface\\Buttons\\WHITE8X8") + thumb:SetVertexColor(0.4, 0.4, 0.48, 0.7) + thumb:SetWidth(6) + thumb:SetHeight(28) + slider:SetThumbTexture(thumb) + + slider:SetScript("OnValueChanged", function() + scroll:SetVerticalScroll(this:GetValue()) + end) + scroll:EnableMouseWheel(1) + scroll:SetScript("OnMouseWheel", function() + local cur = slider:GetValue() + local step = 28 + local _, mx = slider:GetMinMaxValues() + if arg1 > 0 then + slider:SetValue(math.max(cur - step, 0)) + else + slider:SetValue(math.min(cur + step, mx)) + end + end) + + holder.scroll = scroll + holder.child = child + holder.slider = slider + holder.SetContentHeight = function(self, h) + child:SetHeight(h) + local visH = scroll:GetHeight() + local maxS = math.max(h - visH, 0) + slider:SetMinMaxValues(0, maxS) + if maxS == 0 then slider:Hide() else slider:Show() end + slider:SetValue(math.min(slider:GetValue(), maxS)) + end + return holder +end + +-------------------------------------------------------------------------------- +-- Main Frame +-------------------------------------------------------------------------------- +local function CreateMainFrame() + if panel then return panel end + + local f = CreateFrame("Frame", "SFramesCharacterPanel", UIParent) + f:SetWidth(FRAME_W) + f:SetHeight(FRAME_H) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + f:SetFrameStrata("HIGH") + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetClampedToScreen(true) + SetRoundBackdrop(f, T.bg, T.border) + CreateShadow(f, 4) + f:Hide() + + table.insert(UISpecialFrames, "SFramesCharacterPanel") + + f:SetScript("OnHide", function() + if SFrames.StatSummary and SFrames.StatSummary.Hide then + SFrames.StatSummary:Hide() + end + end) + + -- Title bar: Class icon + Name + subtitle + title button + close + f.classIcon = SFrames:CreateClassIcon(f, 16) + f.classIcon.overlay:SetPoint("TOPLEFT", f, "TOPLEFT", SIDE_PAD + 2, -6) + + f.titleText = MakeFS(f, 12, "LEFT", T.gold) + f.titleText:SetPoint("LEFT", f.classIcon.overlay, "RIGHT", 4, 0) + + f.subtitleText = MakeFS(f, 9, "LEFT", T.dimText) + f.subtitleText:SetPoint("LEFT", f.titleText, "RIGHT", 6, 0) + + -- Weight level display (hoverable, shows iLvl in tooltip) + local weightBtn = CreateFrame("Button", nil, f) + weightBtn:SetHeight(14) + weightBtn:SetWidth(80) + weightBtn:SetPoint("LEFT", f.titleText, "RIGHT", 4, 0) + weightBtn:SetFrameLevel(f:GetFrameLevel() + 3) + local weightText = MakeFS(weightBtn, 9, "LEFT", { 0.55, 0.95, 0.55 }) + weightText:SetPoint("LEFT", weightBtn, "LEFT", 0, 0) + weightText:SetText("") + weightBtn.text = weightText + weightBtn.cachedAvgIlvl = nil + weightBtn.cachedAvgEP = nil + weightBtn.cachedClass = nil + weightBtn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine("装备权重等级", 0.55, 0.95, 0.55) + if this.cachedAvgEP then + GameTooltip:AddDoubleLine("权重等级 (EP)", string.format("%.1f", this.cachedAvgEP), 0.8, 0.8, 0.8, 1, 1, 1) + end + if this.cachedAvgIlvl then + GameTooltip:AddDoubleLine("平均装等 (iLvl)", string.format("%.1f", this.cachedAvgIlvl), 0.8, 0.8, 0.8, 1, 0.82, 0) + end + if this.cachedClass then + local classNames = { + WARRIOR = "战士", ROGUE = "盗贼", HUNTER = "猎人", + DRUID = "德鲁伊", PALADIN = "圣骑士", SHAMAN = "萨满祭司", + MAGE = "法师", WARLOCK = "术士", PRIEST = "牧师", + } + GameTooltip:AddDoubleLine("权重模板", classNames[this.cachedClass] or this.cachedClass, 0.8, 0.8, 0.8, 0.6, 0.8, 1) + end + GameTooltip:AddLine(" ") + GameTooltip:AddLine("基于职业属性EP权重计算", 0.5, 0.5, 0.5) + GameTooltip:Show() + end) + weightBtn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + f.weightBtn = weightBtn + + -- Stat summary toggle button + local statBtn = CreateFrame("Button", nil, f) + statBtn:SetWidth(14) + statBtn:SetHeight(14) + statBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -42, -7) + statBtn:SetFrameLevel(f:GetFrameLevel() + 3) + SetPixelBackdrop(statBtn, T.btnBg, T.btnBorder) + local stTxt = MakeFS(statBtn, 9, "CENTER", T.dimText) + stTxt:SetPoint("CENTER", statBtn, "CENTER", 0, 0) + stTxt:SetText("S") + statBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHover[1], T.btnHover[2], T.btnHover[3], T.btnHover[4]) + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine("属性总览/装备附魔", 1, 1, 1) + GameTooltip:Show() + end) + statBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + GameTooltip:Hide() + end) + statBtn:SetScript("OnClick", function() + if SFrames.StatSummary and SFrames.StatSummary.Toggle then + SFrames.StatSummary:Toggle() + else + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444[Nanami-UI] StatSummary module not loaded!|r") + end + end) + f.statBtn = statBtn + + -- Title selection button (small, next to subtitle) + local titleBtn = CreateFrame("Button", nil, f) + titleBtn:SetWidth(14) + titleBtn:SetHeight(14) + titleBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -26, -7) + titleBtn:SetFrameLevel(f:GetFrameLevel() + 3) + SetPixelBackdrop(titleBtn, T.btnBg, T.btnBorder) + local tbTxt = MakeFS(titleBtn, 9, "CENTER", T.dimText) + tbTxt:SetPoint("CENTER", titleBtn, "CENTER", 0, 0) + tbTxt:SetText("T") + titleBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHover[1], T.btnHover[2], T.btnHover[3], T.btnHover[4]) + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine("选择称号", 1, 1, 1) + GameTooltip:Show() + end) + titleBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + GameTooltip:Hide() + end) + titleBtn:SetScript("OnClick", function() + CP:ToggleTitlePopup() + end) + f.titleBtn = titleBtn + + -- Close button (round) + local closeBtn = CreateFrame("Button", nil, f) + closeBtn:SetWidth(16) + closeBtn:SetHeight(16) + closeBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -7, -6) + closeBtn:SetFrameLevel(f:GetFrameLevel() + 3) + SetRoundBackdrop(closeBtn, T.buttonDownBg, T.btnBorder) + local closeIco = SFrames:CreateIcon(closeBtn, "close", 10) + closeIco:SetDrawLayer("OVERLAY") + closeIco:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeIco:SetVertexColor(1, 0.7, 0.7) + closeBtn:SetScript("OnClick", function() f:Hide() end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.buttonDownBg[1], T.buttonDownBg[2], T.buttonDownBg[3], T.buttonDownBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end) + + MakeSep(f, 6, -HEADER_H, -6, -HEADER_H) + + -- Tab bar + tabs = {} + pages = {} + local numTabs = table.getn(TAB_NAMES) + local gap = 2 + local tabW = (FRAME_W - SIDE_PAD * 2 - (numTabs - 1) * gap) / numTabs + + for i, name in ipairs(TAB_NAMES) do + local btn = CreateFrame("Button", NextName("Tab"), f) + btn:SetWidth(tabW) + btn:SetHeight(TAB_H) + btn:SetPoint("TOPLEFT", f, "TOPLEFT", SIDE_PAD + (i - 1) * (tabW + gap), -(HEADER_H + 3)) + btn:SetFrameLevel(f:GetFrameLevel() + 2) + SetRoundBackdrop(btn, T.tabBg, T.tabBorder) + + local txt = MakeFS(btn, 9, "CENTER", T.tabText) + txt:SetPoint("CENTER", btn, "CENTER", 0, 0) + txt:SetText(name) + btn.label = txt + btn.tabIndex = i + + btn:SetScript("OnClick", function() CP:SetTab(this.tabIndex) end) + btn:SetScript("OnEnter", function() + if this.tabIndex ~= CP.activeTab then + this:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], 0.6) + end + end) + btn:SetScript("OnLeave", function() + if this.tabIndex ~= CP.activeTab then + this:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + end + end) + + tabs[i] = btn + + local page = CreateFrame("Frame", NextName("Page"), f) + page:SetPoint("TOPLEFT", f, "TOPLEFT", 4, CONTENT_TOP) + page:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -4, 4) + page:Hide() + pages[i] = page + end + + MakeSep(f, 6, CONTENT_TOP, -6, CONTENT_TOP) + + panel = f + return f +end + +function CP:SetTab(index) + self.activeTab = index + for i = 1, table.getn(TAB_NAMES) do + if i == index then + tabs[i]:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], T.tabActiveBg[4]) + tabs[i]:SetBackdropBorderColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], T.tabActiveBorder[4]) + tabs[i].label:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + pages[i]:Show() + else + tabs[i]:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + tabs[i]:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], T.tabBorder[4]) + tabs[i].label:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + pages[i]:Hide() + end + end + self:UpdateCurrentTab() +end + +function CP:UpdateTitle() + if not panel then return end + local name = UnitName("player") or "" + local level = UnitLevel("player") or 0 + local classLocal, classEn = UnitClass("player") + classLocal = classLocal or "" + classEn = classEn or "" + local raceLocal = UnitRace("player") or "" + + local cc = SFrames.Config and SFrames.Config.colors and SFrames.Config.colors.class and SFrames.Config.colors.class[classEn] + + local selectedTitle = SFramesDB and SFramesDB.charSelectedTitle or nil + local titlePrefix = "" + if selectedTitle and selectedTitle ~= "" then + titlePrefix = selectedTitle .. " " + elseif selectedTitle == nil then + if GetPVPRankInfo and UnitPVPRank then + local rankName = GetPVPRankInfo(UnitPVPRank("player")) + if rankName and rankName ~= "" then + titlePrefix = rankName .. " " + end + end + end + + local fullName = titlePrefix .. name + + if pages and pages[1] and pages[1].modelNameText then + if cc then + pages[1].modelNameText:SetTextColor(cc.r, cc.g, cc.b) + else + pages[1].modelNameText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + pages[1].modelNameText:SetText(fullName) + end + + if pages and pages[1] and pages[1].modelGuildText then + local guildName = (SFramesDB and SFramesDB.charShowGuild ~= false) and GetGuildInfo and GetGuildInfo("player") or nil + if guildName and guildName ~= "" then + pages[1].modelGuildText:SetText("<" .. guildName .. ">") + else + pages[1].modelGuildText:SetText("") + end + end + + local parts = {} + table.insert(parts, "Lv." .. level) + table.insert(parts, raceLocal .. classLocal) + + local scoreSlots = { 1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18 } + local totalIlvl, ilvlCount = 0, 0 + local totalEP, epCount = 0, 0 + local showIlvl = (not SFramesDB or SFramesDB.showItemLevel ~= false) and LibItem_Level + + for _, sid in ipairs(scoreSlots) do + local link = GetInventoryItemLink("player", sid) + if link then + if showIlvl then + local _, _, itemId = string.find(link, "item:(%d+)") + local ilvl = itemId and LibItem_Level[tonumber(itemId)] + if ilvl and ilvl > 0 then + totalIlvl = totalIlvl + ilvl + ilvlCount = ilvlCount + 1 + end + end + local ep = CalcItemEP(link, classEn) + if ep > 0 then + totalEP = totalEP + ep + epCount = epCount + 1 + end + end + end + + local avgIlvl = ilvlCount > 0 and (totalIlvl / ilvlCount) or nil + local avgEP = epCount > 0 and (totalEP / epCount) or nil + + if panel.weightBtn then + panel.weightBtn.cachedAvgIlvl = avgIlvl + panel.weightBtn.cachedAvgEP = avgEP + panel.weightBtn.cachedClass = classEn + if avgEP then + panel.weightBtn.text:SetText(string.format("EP:%.1f", avgEP)) + panel.weightBtn:SetWidth(panel.weightBtn.text:GetStringWidth() + 4) + panel.weightBtn:Show() + elseif avgIlvl then + panel.weightBtn.text:SetText(string.format("iLvl:%.1f", avgIlvl)) + panel.weightBtn:SetWidth(panel.weightBtn.text:GetStringWidth() + 4) + panel.weightBtn:Show() + else + panel.weightBtn.text:SetText("") + panel.weightBtn:Hide() + end + end + + if cc then + panel.titleText:SetTextColor(cc.r, cc.g, cc.b) + else + panel.titleText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + panel.titleText:SetText(table.concat(parts, " ")) + panel.subtitleText:SetText("") + + if panel.classIcon then + SFrames:SetClassIcon(panel.classIcon, classEn) + end +end + +function CP:UpdateCurrentTab() + if not panel or not panel:IsShown() then return end + self:UpdateTitle() + local tab = self.activeTab or 1 + if tab == 1 then self:UpdateEquipment() + elseif tab == 2 then self:UpdateReputation() + elseif tab == 3 then self:UpdateSkills() + elseif tab == 4 then self:UpdateHonor() + end +end + +function CP:Toggle(tab) + CreateMainFrame() + self:BuildAllPages() + if panel:IsShown() then + if tab and self.activeTab ~= tab then self:SetTab(tab) + else panel:Hide() end + else + local scale = SFramesDB and SFramesDB.charPanelScale or 1.0 + panel:SetScale(scale) + panel:Show() + self:SetTab(tab or self.activeTab or 1) + if SFrames.StatSummary and SFrames.StatSummary.Show then + SFrames.StatSummary:Show() + end + end +end + +function CP:Show(tab) + CreateMainFrame() + self:BuildAllPages() + panel:Show() + self:SetTab(tab or self.activeTab or 1) + if SFrames.StatSummary and SFrames.StatSummary.Show then + SFrames.StatSummary:Show() + end +end + +function CP:Hide() + if panel then panel:Hide() end +end + +-------------------------------------------------------------------------------- +-- Title selection popup +-------------------------------------------------------------------------------- +local titlePopup + +function CP:ToggleTitlePopup() + if titlePopup and titlePopup:IsShown() then + titlePopup:Hide() + return + end + self:ShowTitlePopup() +end + +function CP:ShowTitlePopup() + if not panel then return end + + if not titlePopup then + titlePopup = CreateFrame("Frame", "SFramesCPTitlePopup", panel) + titlePopup:SetWidth(160) + titlePopup:SetFrameStrata("TOOLTIP") + titlePopup:SetFrameLevel(200) + SetRoundBackdrop(titlePopup, T.bg, T.border) + titlePopup:Hide() + titlePopup:EnableMouse(true) + end + + -- Clear old children + if titlePopup.rows then + for _, row in ipairs(titlePopup.rows) do + if row.frame then row.frame:Hide() end + end + end + titlePopup.rows = {} + + -- Build title list from all available sources + local titles = {} + local seen = {} + table.insert(titles, { name = "无称号", key = "" }) + + -- PVP rank title + if GetPVPRankInfo and UnitPVPRank then + local rank = UnitPVPRank("player") + if rank and rank > 0 then + local rankName = GetPVPRankInfo(rank) + if rankName and rankName ~= "" and not seen[rankName] then + table.insert(titles, { name = rankName, key = rankName }) + seen[rankName] = true + end + end + end + + -- Turtle WoW custom titles: GetNumTitles / GetTitleName / IsTitleKnown + if GetNumTitles and GetTitleName then + local numT = GetNumTitles() + if numT and numT > 0 then + for ti = 1, numT do + local tName = GetTitleName(ti) + if tName and tName ~= "" and not seen[tName] then + local known = true + if IsTitleKnown then known = IsTitleKnown(ti) end + if known then + table.insert(titles, { name = tName, key = tName, titleId = ti }) + seen[tName] = true + end + end + end + end + end + + -- Fallback: scan CharacterTitleText if it exists (some private servers) + if table.getn(titles) <= 1 and CharacterTitleText then + local curTitle = CharacterTitleText:GetText() + if curTitle and curTitle ~= "" and not seen[curTitle] then + table.insert(titles, { name = curTitle, key = curTitle }) + seen[curTitle] = true + end + end + + local currentTitle = SFramesDB and SFramesDB.charSelectedTitle or "" + local rowH = 20 + local y = -4 + local popH = 8 + + for i, t in ipairs(titles) do + local row = CreateFrame("Button", nil, titlePopup) + row:SetWidth(152) + row:SetHeight(rowH) + row:SetPoint("TOPLEFT", titlePopup, "TOPLEFT", 4, y) + + local isActive = (currentTitle == t.key) or (currentTitle == "" and t.key == "") + local bg = isActive and T.tabActiveBg or T.tabBg + local bd = isActive and T.tabActiveBorder or T.tabBorder + SetPixelBackdrop(row, bg, bd) + + local txt = MakeFS(row, 10, "LEFT", isActive and T.tabActiveText or T.valueText) + txt:SetPoint("LEFT", row, "LEFT", 6, 0) + txt:SetText(t.name) + + if isActive then + local mark = MakeFS(row, 9, "RIGHT", T.gold) + mark:SetPoint("RIGHT", row, "RIGHT", -6, 0) + mark:SetText("*") + end + + row.titleKey = t.key + row.titleId = t.titleId + row:SetScript("OnClick", function() + SFramesDB = SFramesDB or {} + SFramesDB.charSelectedTitle = this.titleKey + -- Try to set server-side title via Turtle WoW API + if SetCurrentTitle and this.titleId then + SetCurrentTitle(this.titleId) + elseif SetCurrentTitle and this.titleKey == "" then + SetCurrentTitle(0) + end + titlePopup:Hide() + CP:UpdateTitle() + end) + row:SetScript("OnEnter", function() + if not isActive then + this:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], 0.5) + end + end) + row:SetScript("OnLeave", function() + if not isActive then + this:SetBackdropColor(bg[1], bg[2], bg[3], bg[4]) + end + end) + + table.insert(titlePopup.rows, { frame = row }) + y = y - rowH - 1 + popH = popH + rowH + 1 + end + + titlePopup:SetHeight(popH) + titlePopup:ClearAllPoints() + titlePopup:SetPoint("TOPRIGHT", panel.titleBtn, "BOTTOMRIGHT", 0, -2) + titlePopup:Show() +end + +function CP:BuildAllPages() + if self.built then return end + self.built = true + self:BuildEquipmentPage() + self:BuildReputationPage() + self:BuildSkillsPage() + self:BuildHonorPage() +end + +-------------------------------------------------------------------------------- +-- Stat helpers (shared by equipment page and others) +-------------------------------------------------------------------------------- +function CP:CreateStatSection(parent, title, yOffset) + local header = MakeFS(parent, 11, "LEFT", T.sectionTitle) + header:SetPoint("TOPLEFT", parent, "TOPLEFT", 8, yOffset) + header:SetText(title) + local sep = parent:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", parent, "TOPLEFT", 8, yOffset - 14) + sep:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -8, yOffset - 14) + return yOffset - 18 +end + +function CP:CreateStatRow(parent, label, yOffset, color) + local row = {} + row.label = MakeFS(parent, 10, "LEFT", T.labelText) + row.label:SetPoint("TOPLEFT", parent, "TOPLEFT", 14, yOffset) + row.label:SetText(label) + row.value = MakeFS(parent, 10, "RIGHT", color or T.valueText) + row.value:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -14, yOffset) + row.value:SetWidth(120) + row.value:SetJustifyH("RIGHT") + return row, yOffset - 16 +end + +-------------------------------------------------------------------------------- +-- Tab 1: Equipment + Stats (merged, scrollable) +-------------------------------------------------------------------------------- +function CP:BuildEquipmentPage() + local page = pages[1] + if page.built then return end + page.built = true + + local contentH = FRAME_H - (HEADER_H + TAB_BAR_H) - INNER_PAD - 4 + local scrollArea = CreateScrollFrame(page, CONTENT_W, contentH) + scrollArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + page.scrollArea = scrollArea + + local child = scrollArea.child + local cw = SCROLL_W + + -- 3D Model: created on page level (not scroll child) so it follows panel drag + local slotColW = SLOT_SIZE + 6 + local modelW = cw - slotColW * 2 - 26 + if modelW < 80 then modelW = 80 end + local modelH = 8 * (SLOT_SIZE + SLOT_GAP) - SLOT_GAP + + -- Background frame in scroll child (for the dark border visual) + local modelBg = CreateFrame("Frame", nil, child) + modelBg:SetWidth(modelW) + modelBg:SetHeight(modelH) + modelBg:SetPoint("TOP", child, "TOP", 0, -4) + SetRoundBackdrop(modelBg, T.modelBg, T.modelBorder) + page.modelBgFrame = modelBg + + -- PlayerModel on page level, anchored to the background frame + local modelFrame = CreateFrame("Frame", nil, page) + modelFrame:SetWidth(modelW - 8) + modelFrame:SetHeight(modelH - 24) + modelFrame:SetPoint("TOP", modelBg, "TOP", 0, -4) + modelFrame:SetFrameLevel(page:GetFrameLevel() + 5) + + local model = CreateFrame("PlayerModel", NextName("Model"), modelFrame) + model:SetAllPoints(modelFrame) + page.model = model + page.modelFrame = modelFrame + + model:EnableMouse(true) + model:EnableMouseWheel(1) + model.rotating = false + model.panning = false + model.curFacing = 0.4 + model.curScale = 1.0 + model.posX = 0 + model.posY = 0 + model.posZ = 0 + + model:SetScript("OnMouseDown", function() + if arg1 == "LeftButton" then + this.rotating = true + this.startX = GetCursorPosition() + this.startFacing = this.curFacing or 0 + elseif arg1 == "RightButton" then + this.panning = true + local cx, cy = GetCursorPosition() + this.panStartX = cx + this.panStartY = cy + this.panOriginX = this.posX or 0 + this.panOriginY = this.posY or 0 + end + end) + model:SetScript("OnMouseUp", function() + if arg1 == "LeftButton" then + this.rotating = false + elseif arg1 == "RightButton" then + this.panning = false + end + end) + model:SetScript("OnMouseWheel", function() + local step = 0.1 + local ns = (this.curScale or 1) + arg1 * step + if ns < 0.2 then ns = 0.2 end + if ns > 4.0 then ns = 4.0 end + this.curScale = ns + this:SetModelScale(ns) + end) + model:SetScript("OnUpdate", function() + if this.rotating then + local cx = GetCursorPosition() + local diff = (cx - (this.startX or cx)) * 0.01 + local nf = (this.startFacing or 0) + diff + this.curFacing = nf + this:SetFacing(nf) + elseif this.panning then + local cx, cy = GetCursorPosition() + local es = this:GetEffectiveScale() + if es < 0.01 then es = 1 end + local dx = (cx - (this.panStartX or cx)) / (es * 35) + local dy = (cy - (this.panStartY or cy)) / (es * 35) + this.posX = (this.panOriginX or 0) + dx + this.posY = (this.panOriginY or 0) + dy + this:SetPosition(this.posY, 0, this.posX) + elseif this.autoRotateDir then + local speed = 1.5 * (arg1 or 0.016) + this.curFacing = (this.curFacing or 0) + speed * this.autoRotateDir + this:SetFacing(this.curFacing) + end + end) + model.ResetView = function(self) + self.curFacing = 0.4 + self.curScale = 1.0 + self.posX = 0 + self.posY = 0 + self:SetFacing(0.4) + self:SetModelScale(1.0) + self:SetPosition(0, 0, 0) + end + + -- Name/guild overlay floats on top of 3D model + local nameOverlay = CreateFrame("Frame", nil, page) + nameOverlay:SetWidth(modelW) + nameOverlay:SetHeight(30) + nameOverlay:SetPoint("TOP", modelBg, "TOP", 0, -4) + nameOverlay:SetFrameLevel(page:GetFrameLevel() + 7) + nameOverlay:EnableMouse(false) + + local modelNameText = nameOverlay:CreateFontString(nil, "OVERLAY") + modelNameText:SetFont(GetFont(), 11, "OUTLINE") + modelNameText:SetPoint("TOP", nameOverlay, "TOP", 0, -5) + modelNameText:SetJustifyH("CENTER") + modelNameText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + page.modelNameText = modelNameText + + local modelGuildText = nameOverlay:CreateFontString(nil, "OVERLAY") + modelGuildText:SetFont(GetFont(), 9, "OUTLINE") + modelGuildText:SetPoint("TOP", modelNameText, "BOTTOM", 0, -1) + modelGuildText:SetJustifyH("CENTER") + modelGuildText:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + page.modelGuildText = modelGuildText + + -- Model toolbar: unified strip with 3 segments + local tbH = 14 + local segW = 24 + local tbW = segW * 3 + 2 + local toolbar = CreateFrame("Frame", nil, page) + toolbar:SetWidth(tbW) + toolbar:SetHeight(tbH) + toolbar:SetPoint("BOTTOM", modelBg, "BOTTOM", 0, 5) + toolbar:SetFrameLevel(page:GetFrameLevel() + 6) + SetPixelBackdrop(toolbar, { 0.04, 0.04, 0.06, 0.75 }, { 0.22, 0.22, 0.28, 0.5 }) + page.modelToolbar = toolbar + + local function MakeToolBtn(parent, w, text, anchor, ox) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w) + btn:SetHeight(tbH - 2) + btn:SetPoint("LEFT", parent, "LEFT", ox, 0) + btn:SetFrameLevel(parent:GetFrameLevel() + 1) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 0, + }) + btn:SetBackdropColor(0, 0, 0, 0) + local fs = MakeFS(btn, 9, "CENTER", { 0.5, 0.5, 0.55 }) + fs:SetPoint("CENTER", btn, "CENTER", 0, 0) + fs:SetText(text) + btn.label = fs + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + this.label:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end) + btn:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end) + return btn + end + + local rotLeft = MakeToolBtn(toolbar, segW, "<", "LEFT", 1) + rotLeft:SetScript("OnMouseDown", function() + model.autoRotateDir = 1 + this:SetBackdropColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4] or 0.6) + end) + rotLeft:SetScript("OnMouseUp", function() + model.autoRotateDir = nil + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + end) + rotLeft:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + model.autoRotateDir = nil + end) + page.rotLeft = rotLeft + + local sep1 = toolbar:CreateTexture(nil, "OVERLAY") + sep1:SetTexture("Interface\\Buttons\\WHITE8X8") + sep1:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4] or 0.4) + sep1:SetWidth(1) + sep1:SetHeight(tbH - 4) + sep1:SetPoint("LEFT", toolbar, "LEFT", segW + 1, 0) + + local resetBtn = MakeToolBtn(toolbar, segW, "O", "LEFT", segW + 1) + resetBtn:SetScript("OnClick", function() model:ResetView() end) + resetBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + this.label:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine("重置视角", 1, 1, 1) + GameTooltip:Show() + end) + resetBtn:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + GameTooltip:Hide() + end) + page.resetBtn = resetBtn + + local sep2 = toolbar:CreateTexture(nil, "OVERLAY") + sep2:SetTexture("Interface\\Buttons\\WHITE8X8") + sep2:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4] or 0.4) + sep2:SetWidth(1) + sep2:SetHeight(tbH - 4) + sep2:SetPoint("LEFT", toolbar, "LEFT", segW * 2 + 1, 0) + + local rotRight = MakeToolBtn(toolbar, segW, ">", "LEFT", segW * 2 + 1) + rotRight:SetScript("OnMouseDown", function() + model.autoRotateDir = -1 + this:SetBackdropColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4] or 0.6) + end) + rotRight:SetScript("OnMouseUp", function() + model.autoRotateDir = nil + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + end) + rotRight:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + model.autoRotateDir = nil + end) + page.rotRight = rotRight + + -- Equipment slots + local slotY = -6 + page.equipSlots = {} + + for idx, si in ipairs(EQUIP_SLOTS_LEFT) do + local slot = self:CreateEquipSlot(child, si.id, si.name) + slot:SetPoint("TOPLEFT", child, "TOPLEFT", 2, slotY - (idx - 1) * (SLOT_SIZE + SLOT_GAP)) + page.equipSlots[si.id] = slot + end + + for idx, si in ipairs(EQUIP_SLOTS_RIGHT) do + local slot = self:CreateEquipSlot(child, si.id, si.name) + slot:SetPoint("TOPRIGHT", child, "TOPRIGHT", -2, slotY - (idx - 1) * (SLOT_SIZE + SLOT_GAP)) + page.equipSlots[si.id] = slot + end + + local bottomY = slotY - table.getn(EQUIP_SLOTS_LEFT) * (SLOT_SIZE + SLOT_GAP) - 4 + local bottomCount = table.getn(EQUIP_SLOTS_BOTTOM) + local totalBW = bottomCount * SLOT_SIZE + (bottomCount - 1) * (SLOT_GAP + 2) + local bsx = math.max((cw - totalBW) / 2, 4) + + for idx, si in ipairs(EQUIP_SLOTS_BOTTOM) do + local slot = self:CreateEquipSlot(child, si.id, si.name) + slot:SetPoint("TOPLEFT", child, "TOPLEFT", bsx + (idx - 1) * (SLOT_SIZE + SLOT_GAP + 1), bottomY) + page.equipSlots[si.id] = slot + end + + local infoY = bottomY - SLOT_SIZE + + -- Stats panel: fixed at bottom of page (not in scroll child) + -- This avoids scroll/overflow issues + local STAT_PANEL_H = 100 + local ROW_H = 14 + + local statPanel = CreateFrame("Frame", nil, page) + statPanel:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 0, 0) + statPanel:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + statPanel:SetHeight(STAT_PANEL_H) + statPanel:SetFrameLevel(page:GetFrameLevel() + 2) + page.statPanel = statPanel + + -- Resize scroll area to not overlap stat panel + scrollArea:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, STAT_PANEL_H) + + MakeSep(statPanel, 4, 0, -4, 0) + + -- Category buttons + local catNames = { "基础/抗性", "攻击", "法术/防御" } + local catBtnW = math.floor((CONTENT_W - 12) / 3) + page.statCatBtns = {} + page.statCatFrames = {} + page.activeStatCat = 1 + + for ci = 1, 3 do + local cb = CreateFrame("Button", NextName("SC"), statPanel) + cb:SetWidth(catBtnW) + cb:SetHeight(16) + cb:SetPoint("TOPLEFT", statPanel, "TOPLEFT", 4 + (ci - 1) * (catBtnW + 2), -4) + SetPixelBackdrop(cb, T.tabBg, T.tabBorder) + local cbt = MakeFS(cb, 8, "CENTER", T.tabText) + cbt:SetPoint("CENTER", cb, "CENTER", 0, 0) + cbt:SetText(catNames[ci]) + cb.label = cbt + cb.catIndex = ci + cb:SetScript("OnClick", function() + page.activeStatCat = this.catIndex + CP:RefreshStatCatVisual(page) + CP:RefreshStatValues(page) + end) + cb:SetScript("OnEnter", function() + if this.catIndex ~= page.activeStatCat then + this:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], 0.5) + end + end) + cb:SetScript("OnLeave", function() + if this.catIndex ~= page.activeStatCat then + this:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + end + end) + page.statCatBtns[ci] = cb + end + + local catContentY = -26 + + local function MakeStatHitArea(parent, anchorFrom, offX, yOff, isRight) + local btn = CreateFrame("Button", nil, parent) + btn:SetHeight(ROW_H) + btn:SetFrameLevel(parent:GetFrameLevel() + 4) + if isRight then + btn:SetPoint("TOPLEFT", parent, "TOP", offX, yOff) + btn:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -4, yOff) + else + btn:SetPoint("TOPLEFT", parent, "TOPLEFT", 4, yOff) + btn:SetPoint("TOPRIGHT", parent, "TOP", -4, yOff) + end + if btn.SetBackdrop then btn:SetBackdrop(nil) end + if btn.SetNormalTexture then btn:SetNormalTexture(nil) end + if btn.SetHighlightTexture then btn:SetHighlightTexture(nil) end + if btn.SetPushedTexture then btn:SetPushedTexture(nil) end + return btn + end + + local function Make2ColRow(parent, labelL, labelR, yOff, colorL, colorR) + local r = {} + if labelL then + r.labelL = MakeFS(parent, 9, "LEFT", T.labelText) + r.labelL:SetPoint("TOPLEFT", parent, "TOPLEFT", 6, yOff) + r.labelL:SetText(labelL) + r.valueL = MakeFS(parent, 9, "RIGHT", colorL or T.valueText) + r.valueL:SetPoint("TOPLEFT", parent, "TOPLEFT", 6, yOff) + r.valueL:SetPoint("TOPRIGHT", parent, "TOP", -4, yOff) + r.valueL:SetJustifyH("RIGHT") + r.hitL = MakeStatHitArea(parent, "TOPLEFT", 0, yOff, false) + end + if labelR then + r.labelR = MakeFS(parent, 9, "LEFT", T.labelText) + r.labelR:SetPoint("TOPLEFT", parent, "TOP", 6, yOff) + r.labelR:SetText(labelR) + r.valueR = MakeFS(parent, 9, "RIGHT", colorR or T.valueText) + r.valueR:SetPoint("TOPLEFT", parent, "TOP", 6, yOff) + r.valueR:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -6, yOff) + r.valueR:SetJustifyH("RIGHT") + r.hitR = MakeStatHitArea(parent, "TOP", 0, yOff, true) + end + return r, yOff - ROW_H + end + + -- Cat 1: Base + Resist + local cat1 = CreateFrame("Frame", nil, statPanel) + cat1:SetAllPoints(statPanel) + page.statCatFrames[1] = cat1 + page.cat1Rows = {} + local resistSchools = { 2, 3, 4, 5, 6 } + local resistNames = { "火焰", "自然", "冰霜", "暗影", "奥术" } + + local resistSchoolName = { [2]="火焰", [3]="自然", [4]="冰霜", [5]="暗影", [6]="奥术" } + + local statOnEnter = { + -- 力量 + function() + local base, eff, bonus = CS.StatBaseBonus(1) + GameTooltip:AddLine("力量 (Strength)", 1, 0.82, 0.0) + CS.TipLine("提升近战攻强(AP)与格挡值。") + GameTooltip:AddLine(" ") + CS.TipLine("攻击强度转化:", 0.5,0.8,1) + CS.TipLine(" 战/骑/萨/德(熊豹):1力 = 2AP") + CS.TipLine(" 猫德+野性之心:1力 = 2.4AP") + CS.TipLine(" 盗/猎/法/牧/术:1力 = 1AP") + GameTooltip:AddLine(" ") + CS.TipLine("格挡值(需装备盾牌):", 0.5,0.8,1) + CS.TipLine(" 战/骑/萨:每20点额外力量 +1 BV") + CS.TipLine(" BV = (力量-种族初始力量)/20") + GameTooltip:AddLine(" ") + CS.TipStatValues(base, eff, bonus) + end, + -- 敏捷 + function() + local base, eff, bonus = CS.StatBaseBonus(2) + local crit = CS.SafeGetMeleeCrit() + local dodge = GetDodgeChance and GetDodgeChance() or 0 + local _, effArmor = UnitArmor("player") + GameTooltip:AddLine("敏捷 (Agility)", 1, 0.82, 0.0) + CS.TipLine("提升暴击、护甲、闪避。1敏 = 2护甲。") + GameTooltip:AddLine(" ") + CS.TipLine("攻击强度转化:", 0.5,0.8,1) + CS.TipLine(" 猎人:1敏 = 2远程AP + 1近战AP") + CS.TipLine(" 盗贼:1敏 = 1近战/远程AP") + CS.TipLine(" 德鲁伊(熊/豹):1敏 = 1AP") + CS.TipLine(" 其他职业:不提供额外AP") + GameTooltip:AddLine(" ") + CS.TipLine("暴击转化(60级):", 0.5,0.8,1) + CS.TipLine(" 战/骑/萨/德:20敏 = 1%暴击") + CS.TipLine(" 盗贼:29敏 = 1%暴击(最高效)") + CS.TipLine(" 猎人:52.91敏 = 1%暴击(最严苛)") + GameTooltip:AddLine(" ") + CS.TipLine("闪避转化(60级):", 0.5,0.8,1) + CS.TipLine(" 盗贼:14.5敏 = 1%闪避(最强)") + CS.TipLine(" 战/骑/萨/德:20敏 = 1%闪避") + GameTooltip:AddLine(" ") + CS.TipStatValues(base, eff, bonus) + GameTooltip:AddLine(" ") + CS.TipKV("当前物理暴击:", string.format("%.2f%%", crit), 0.7,0.7,0.75, 1,1,0.5) + if not CS.IsCritFromAPI() and crit > 0 then + CS.TipLine("(基础+敏捷+装备+天赋,无Buff)", 0.8,0.5,0.3) + end + CS.TipKV("当前闪避率:", string.format("%.2f%%", dodge), 0.7,0.7,0.75, 1,1,0.5) + CS.TipKV("当前护甲值:", tostring(math.floor(effArmor or 0)), 0.7,0.7,0.75, 1,1,0.5) + end, + -- 耐力 + function() + local base, eff, bonus = CS.StatBaseBonus(3) + local hp = UnitHealthMax("player") or 0 + GameTooltip:AddLine("耐力 (Stamina)", 1, 0.82, 0.0) + CS.TipLine("所有职业通用的生存核心属性。") + GameTooltip:AddLine(" ") + CS.TipLine("生命值转化:", 0.5,0.8,1) + CS.TipLine(" 前20点:每1耐 = 1生命值") + CS.TipLine(" 超过20点:每1耐 = 10生命值") + GameTooltip:AddLine(" ") + CS.TipLine("特殊加成:", 0.5,0.8,1) + CS.TipLine(" 牛头人:生命值总额 ×5%") + CS.TipLine(" 术士:可通过生命分流转法力") + GameTooltip:AddLine(" ") + CS.TipStatValues(base, eff, bonus) + CS.TipKV("最大生命值:", tostring(hp), 0.7,0.7,0.75, 0.4,1,0.4) + end, + -- 智力 + function() + local base, eff, bonus = CS.StatBaseBonus(4) + local mana = UnitManaMax("player") or 0 + local scrit = CS.SafeGetSpellCrit() + GameTooltip:AddLine("智力 (Intellect)", 1, 0.82, 0.0) + CS.TipLine("增加法力值和法术暴击率。") + CS.TipLine("1智力 = 15法力值(通用)。") + GameTooltip:AddLine(" ") + CS.TipLine("法爆转化(60级):", 0.5,0.8,1) + CS.TipLine(" 圣骑:29.5智 = 1%法爆(最高效!)") + CS.TipLine(" 法师:59.5智 = 1%(基础0.2%)") + CS.TipLine(" 牧师:59.5智 = 1%(基础0.8%)") + CS.TipLine(" 萨满:59.2智 = 1%(基础2.3%)") + CS.TipLine(" 德鲁:60.0智 = 1%(基础1.8%)") + CS.TipLine(" 术士:60.6智 = 1%(基础1.7%)") + CS.TipLine(" 战士/盗贼:无法系收益") + GameTooltip:AddLine(" ") + CS.TipStatValues(base, eff, bonus) + CS.TipKV("最大法力值:", tostring(mana), 0.7,0.7,0.75, 0.4,0.7,1) + CS.TipKV("法术暴击率:", string.format("%.2f%%", scrit), 0.7,0.7,0.75, 1,1,0.5) + end, + -- 精神 + function() + local base, eff, bonus = CS.StatBaseBonus(5) + GameTooltip:AddLine("精神 (Spirit)", 1, 0.82, 0.0) + CS.TipLine("控制脱战/五秒规则外的回复速度。") + CS.TipLine("停止施法5秒后触发精神回蓝。") + GameTooltip:AddLine(" ") + CS.TipLine("法力回复(每2秒/跳):", 0.5,0.8,1) + CS.TipLine(" 牧师/法师:13 + 精神/4") + CS.TipLine(" 德/萨/骑/猎:15 + 精神/5") + CS.TipLine(" 术士(惩罚):8 + 精神/4") + GameTooltip:AddLine(" ") + CS.TipLine("各职业收益:", 0.5,0.8,1) + CS.TipLine(" 牧师(极高):冥想天赋施法中回蓝") + CS.TipLine(" 精神指引:25%精神→法强/治疗") + CS.TipLine(" 德鲁伊(核心):配合激活回蓝") + CS.TipLine(" 法师(重要):配合奥术冥想天赋") + CS.TipLine(" 萨满:MP5更稳定") + CS.TipLine(" 战士:脱战回血 = 精神/50") + CS.TipLine(" 巨魔(精神战):战斗中25%回复") + GameTooltip:AddLine(" ") + CS.TipStatValues(base, eff, bonus) + end, + } + + local cy = catContentY + for i = 1, 5 do + local row + row, cy = Make2ColRow(cat1, STAT_NAMES[i], resistNames[i], cy, nil, T.resistColors[resistSchools[i]]) + row.baseIdx = i + row.resistSchool = resistSchools[i] + if row.hitL then + local fn = statOnEnter[i] + row.hitL:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:ClearLines() + fn() + GameTooltip:Show() + end) + row.hitL:SetScript("OnLeave", function() GameTooltip:Hide() end) + end + if row.hitR then + local school = resistSchools[i] + local rname = resistNames[i] + row.hitR:SetScript("OnEnter", function() + local base, total = UnitResistance("player", school) + base = math.floor(base or 0) + total = math.floor(total or base) + local bonus = total - base + -- Resistance → damage reduction: Classic formula uses total resist / (total resist + 5*attackerLevel) + -- At player level vs same-level attacker: average ~(R/(R+5L))*0.75 full absorption chance + local lvl = UnitLevel("player") or 60 + local avgPct = total / (total + 5 * lvl) * 75 + GameTooltip:SetOwner(this, "ANCHOR_LEFT") + GameTooltip:ClearLines() + GameTooltip:AddLine(rname .. "抗性", 1, 0.82, 0.0) + CS.TipLine("减少受到的" .. rname .. "系魔法伤害。") + CS.TipLine("抗性值越高,被完全抵抗或部分减免的概率越大。") + GameTooltip:AddLine(" ") + CS.TipKV("基础抗性:", tostring(base)) + if bonus ~= 0 then + CS.TipKV("装备加成:", (bonus > 0 and "+" or "") .. tostring(bonus), + 0.7,0.7,0.75, bonus>0 and 0 or 1, bonus>0 and 1 or 0, 0) + end + CS.TipKV("当前合计:", tostring(total), 0.7,0.7,0.75, 1,0.9,0.6) + if total > 0 then + CS.TipKV("平均减伤约:", string.format("%.1f%%", avgPct), 0.7,0.7,0.75, 1,1,0.5) + end + GameTooltip:Show() + end) + row.hitR:SetScript("OnLeave", function() GameTooltip:Hide() end) + end + table.insert(page.cat1Rows, row) + end + + -- Cat 2: Melee + Ranged + local cat2 = CreateFrame("Frame", nil, statPanel) + cat2:SetAllPoints(statPanel) + cat2:Hide() + page.statCatFrames[2] = cat2 + page.cat2Rows = {} + local meleeL = { "攻强", "伤害", "速度", "暴击", "命中" } + local meleeK = { "meleeAP", "meleeDmg", "meleeSpeed", "meleeCrit", "meleeHit" } + local rangedL = { "攻强", "伤害", "速度", "暴击", "" } + local rangedK = { "rangedAP", "rangedDmg", "rangedSpeed", "rangedCrit", nil } + + local meleeOnEnter = { + -- 近战攻强 + function() + local base, pos, neg = UnitAttackPower("player") + local total = math.floor((base or 0) + (pos or 0) + (neg or 0)) + local dps = total / 14 + local bmod = math.floor((pos or 0) + (neg or 0)) + GameTooltip:AddLine("近战攻击强度 (AP)", 1, 0.82, 0.0) + CS.TipLine("直接提升近战白字伤害。") + CS.TipLine("每 14 点攻击强度 = +1 DPS。") + GameTooltip:AddLine(" ") + CS.TipLine("来源:力量(战/骑/萨/德 1力=2AP,", 0.5,0.8,1) + CS.TipLine("盗/猎/法系 1力=1AP) + 装备/Buff", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("基础 AP:", tostring(math.floor(base or 0))) + if bmod ~= 0 then + CS.TipKV("装备/Buff 加成:", string.format("%+d", bmod), + 0.7,0.7,0.75, bmod > 0 and 0 or 1, bmod > 0 and 1 or 0, 0) + end + CS.TipKV("当前合计:", tostring(total), 0.7,0.7,0.75, 1,0.9,0.6) + CS.TipKV("等效 DPS 增益:", string.format("+%.1f", dps), 0.7,0.7,0.75, 1,1,0.5) + end, + -- 近战伤害 + function() + local lo, hi = UnitDamage("player") + lo = math.floor(lo or 0); hi = math.floor(hi or 0) + local ms = UnitAttackSpeed("player") or 2 + local avgDps = ms > 0 and (lo + hi) / 2 / ms or 0 + GameTooltip:AddLine("近战伤害", 1, 0.82, 0.0) + CS.TipLine("主手武器基础伤害 + 攻击强度加成后的实际白字伤害区间。") + CS.TipLine("AP 加成 = 武器速度 × AP / 14。") + GameTooltip:AddLine(" ") + CS.TipKV("伤害区间:", lo .. " - " .. hi) + CS.TipKV("主手 DPS:", string.format("%.1f", avgDps), 0.7,0.7,0.75, 1,1,0.5) + end, + -- 近战速度 + function() + local ms, os = UnitAttackSpeed("player") + GameTooltip:AddLine("近战攻击速度", 1, 0.82, 0.0) + CS.TipLine("每次自动攻击的间隔(秒),数值越低攻击越快。") + CS.TipLine("受急速效果(如狂暴/风怒图腾)影响。") + GameTooltip:AddLine(" ") + CS.TipKV("主手速度:", string.format("%.2f 秒", ms or 0)) + if os and os > 0 then + CS.TipKV("副手速度:", string.format("%.2f 秒", os)) + CS.TipLine(" ") + CS.TipLine("副手白字伤害为主手50%。", 0.5,0.8,1) + CS.TipLine("双持白字未命中:26.4%(300技能)", 0.5,0.8,1) + CS.TipLine("315技能仍有24.0%未命中。", 0.5,0.8,1) + end + end, + -- 近战暴击 + function() + local fromAPI = CS.IsCritFromAPI() + local _, class = UnitClass("player") + local ratio = CS.AGI_PER_MELEE_CRIT[class or ""] or 0 + GameTooltip:AddLine("近战暴击率", 1, 0.82, 0.0) + CS.TipLine("近战暴击造成 200% 伤害。") + if ratio > 0 then + if ratio == math.floor(ratio) then + CS.TipLine(string.format("当前职业:每 %d 敏捷 = 1%% 暴击。", ratio)) + else + CS.TipLine(string.format("当前职业:每 %.2f 敏捷 = 1%% 暴击。", ratio)) + end + end + GameTooltip:AddLine(" ") + if fromAPI then + local crit = CS.SafeGetMeleeCrit() + CS.TipKV("当前暴击率:", string.format("%.2f%%", crit), 0.7,0.7,0.75, 1,1,0.5) + else + local total, base, agiC, gearC, talC = CS.FullMeleeCrit() + CS.TipLine("来源分项:", 0.5,0.8,1) + if base > 0 then CS.TipKV(" 基础暴击:", string.format("%.2f%%", base)) end + if agiC > 0 then CS.TipKV(" 敏捷暴击:", string.format("%.2f%%", agiC)) end + if gearC > 0 then CS.TipKV(" 装备暴击:", string.format("+%d%%", gearC)) end + if talC > 0 then + CS.TipKV(" 天赋暴击:", string.format("+%d%%", talC)) + for _, d in ipairs(CS.GetTalentDetailsFor("meleeCrit")) do + CS.TipLine(string.format(" %s (%d/%d) +%d%%", + d.name, d.rank, d.maxRank, d.bonus), 0.55,0.55,0.6) + end + end + GameTooltip:AddLine(" ") + CS.TipKV("合计暴击率:", string.format("%.2f%%", total), 0.7,0.7,0.75, 1,1,0.5) + CS.TipLine("(Buff 暴击未计入)", 0.8,0.5,0.3) + end + end, + -- 近战命中 + function() + local fromAPI = CS.TryAPIs({ "GetHitModifier", "GetMeleeHitModifier" }) > 0 + GameTooltip:AddLine("近战命中", 1, 0.82, 0.0) + CS.TipLine("减少近战未命中概率。物理DPS最优先属性。") + CS.TipLine("乌龟服对BOSS基础未命中率 8%。") + GameTooltip:AddLine(" ") + if fromAPI then + local hit = CS.SafeGetMeleeHit() + CS.TipKV("当前命中加成:", string.format("%+d%%", hit), 0.7,0.7,0.75, 1,1,0.5) + else + local total, gearH, talH = CS.FullMeleeHit() + CS.TipLine("来源分项:", 0.5,0.8,1) + if gearH > 0 then CS.TipKV(" 装备命中:", string.format("+%d%%", gearH)) end + if talH > 0 then + CS.TipKV(" 天赋命中:", string.format("+%d%%", talH)) + for _, d in ipairs(CS.GetTalentDetailsFor("meleeHit")) do + CS.TipLine(string.format(" %s (%d/%d) +%d%%", + d.name, d.rank, d.maxRank, d.bonus), 0.55,0.55,0.6) + end + end + GameTooltip:AddLine(" ") + CS.TipKV("合计命中:", string.format("+%d%%", total), 0.7,0.7,0.75, 1,1,0.5) + end + local totalHit = CS.SafeGetMeleeHit() + local lvl = UnitLevel("player") or 60 + if lvl >= 60 then + GameTooltip:AddLine(" ") + CS.TipLine("达标判定(对+3级BOSS):", 1, 0.82, 0.0) + CS.TipLine("已移除隐性1%命中压制。", 0.5,0.8,1) + local cap = 8 + if totalHit >= cap then + CS.TipKV(" 黄字8%(300技能):", "已达标", 0.7,0.7,0.75, 0.3,1,0.3) + else + CS.TipKV(" 黄字8%(300技能):", string.format("差%d%%", cap - totalHit), + 0.7,0.7,0.75, 1,0.3,0.3) + end + if totalHit >= 5 then + CS.TipKV(" 种族5%(305技能):", "已达标", 0.7,0.7,0.75, 0.3,1,0.3) + else + CS.TipKV(" 种族5%(305技能):", string.format("差%d%%", 5 - totalHit), + 0.7,0.7,0.75, 1,0.3,0.3) + end + if totalHit >= 2 then + CS.TipKV(" 高技能2%(310):", "已达标", 0.7,0.7,0.75, 0.3,1,0.3) + else + CS.TipKV(" 高技能2%(310):", string.format("差%d%%", 2 - totalHit), + 0.7,0.7,0.75, 1,0.3,0.3) + end + CS.TipLine(" 315技能时命中需求归零", 0.55,0.55,0.6) + CS.TipLine(" (人类剑锤/兽人斧/矮人枪锤/侏儒短剑)", 0.55,0.55,0.6) + GameTooltip:AddLine(" ") + CS.TipLine("偏斜减免(白字对BOSS):", 0.5,0.8,1) + CS.TipLine(" 300技能:约35%伤害损失", 0.55,0.55,0.6) + CS.TipLine(" 305技能:约15%伤害损失", 0.55,0.55,0.6) + CS.TipLine(" 315技能:无减免(全额)", 0.55,0.55,0.6) + end + end, + } + local rangedOnEnter = { + -- 远程攻强 + function() + local base, pos, neg = UnitRangedAttackPower("player") + local total = math.floor((base or 0) + (pos or 0) + (neg or 0)) + local bmod = math.floor((pos or 0) + (neg or 0)) + GameTooltip:AddLine("远程攻击强度 (RAP)", 1, 0.82, 0.0) + CS.TipLine("直接提升弓/枪/弩/投掷武器的伤害。") + CS.TipLine("每 14 点远程攻击强度 = +1 DPS。") + GameTooltip:AddLine(" ") + CS.TipLine("猎人核心属性:1 敏捷 = 2 远程AP。", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("基础 RAP:", tostring(math.floor(base or 0))) + if bmod ~= 0 then + CS.TipKV("装备/Buff 加成:", string.format("%+d", bmod), + 0.7,0.7,0.75, bmod > 0 and 0 or 1, bmod > 0 and 1 or 0, 0) + end + CS.TipKV("当前合计:", tostring(total), 0.7,0.7,0.75, 1,0.9,0.6) + CS.TipKV("等效 DPS 增益:", string.format("+%.1f", total / 14), 0.7,0.7,0.75, 1,1,0.5) + end, + -- 远程伤害 + function() + local _, lo, hi = UnitRangedDamage("player") + lo = math.floor(lo or 0); hi = math.floor(hi or 0) + local rspd = UnitRangedDamage("player") or 2 + local avgDps = rspd > 0 and (lo + hi) / 2 / rspd or 0 + GameTooltip:AddLine("远程伤害", 1, 0.82, 0.0) + CS.TipLine("远程武器基础伤害 + 远程攻击强度加成后的实际伤害区间。") + GameTooltip:AddLine(" ") + CS.TipKV("伤害区间:", lo .. " - " .. hi) + CS.TipKV("远程 DPS:", string.format("%.1f", avgDps), 0.7,0.7,0.75, 1,1,0.5) + end, + -- 远程速度 + function() + local spd = UnitRangedDamage("player") or 0 + GameTooltip:AddLine("远程攻击速度", 1, 0.82, 0.0) + CS.TipLine("远程武器每次射击的间隔(秒)。") + CS.TipLine("受急速效果影响(如猎人急速射击天赋)。") + GameTooltip:AddLine(" ") + CS.TipKV("射击间隔:", string.format("%.2f 秒", spd)) + end, + -- 远程暴击 + function() + local fromAPI = CS.TryAPIs({ "GetRangedCritChance" }) > 0 + GameTooltip:AddLine("远程暴击率", 1, 0.82, 0.0) + CS.TipLine("远程暴击造成 200% 伤害。猎人:每 52.91 敏 = 1%。") + GameTooltip:AddLine(" ") + if fromAPI then + CS.TipKV("当前暴击率:", string.format("%.2f%%", CS.SafeGetRangedCrit()), 0.7,0.7,0.75, 1,1,0.5) + else + local total, base, agiC, gearC, talC = CS.FullRangedCrit() + CS.TipLine("来源分项:", 0.5,0.8,1) + if base > 0 then CS.TipKV(" 基础暴击:", string.format("%.2f%%", base)) end + if agiC > 0 then CS.TipKV(" 敏捷暴击:", string.format("%.2f%%", agiC)) end + if gearC > 0 then CS.TipKV(" 装备暴击:", string.format("+%d%%", gearC)) end + if talC > 0 then + CS.TipKV(" 天赋暴击:", string.format("+%d%%", talC)) + for _, d in ipairs(CS.GetTalentDetailsFor("meleeCrit")) do + CS.TipLine(string.format(" %s (%d/%d) +%d%%", + d.name, d.rank, d.maxRank, d.bonus), 0.55,0.55,0.6) + end + end + GameTooltip:AddLine(" ") + CS.TipKV("合计暴击率:", string.format("%.2f%%", total), 0.7,0.7,0.75, 1,1,0.5) + CS.TipLine("(Buff 暴击未计入)", 0.8,0.5,0.3) + end + end, + } + + cy = catContentY + for i = 1, 5 do + local row + row, cy = Make2ColRow(cat2, meleeL[i], rangedL[i] ~= "" and rangedL[i] or nil, cy) + row.meleeKey = meleeK[i] + row.rangedKey = rangedK[i] + if row.hitL and meleeOnEnter[i] then + local fn = meleeOnEnter[i] + row.hitL:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:ClearLines() + fn() + GameTooltip:Show() + end) + row.hitL:SetScript("OnLeave", function() GameTooltip:Hide() end) + end + if row.hitR and rangedOnEnter[i] then + local fn = rangedOnEnter[i] + row.hitR:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_LEFT") + GameTooltip:ClearLines() + fn() + GameTooltip:Show() + end) + row.hitR:SetScript("OnLeave", function() GameTooltip:Hide() end) + end + table.insert(page.cat2Rows, row) + end + + -- Cat 3: Spell + Defense + local cat3 = CreateFrame("Frame", nil, statPanel) + cat3:SetAllPoints(statPanel) + cat3:Hide() + page.statCatFrames[3] = cat3 + page.cat3Rows = {} + local spellL = { "法伤", "治疗", "暴击", "命中", "" } + local spellK = { "spellDmg", "spellHeal", "spellCrit", "spellHit", nil } + local defL = { "护甲", "防御", "闪避", "招架", "格挡" } + local defK = { "armor", "defense", "dodge", "parry", "block" } + + local spellOnEnter = { + -- 法术伤害 + function() + local maxDmg = 0 + local perSchool = {} + local fromAPI = false + if GetSpellBonusDamage then + for s = 2, 7 do + local d = GetSpellBonusDamage(s) or 0 + perSchool[s] = d + if d > maxDmg then maxDmg = d; fromAPI = true end + end + end + if maxDmg == 0 then + local lib = CS.GetItemBonusLib and CS.GetItemBonusLib() or nil + if lib and lib.GetBonus then + local baseDmg = lib:GetBonus("DMG") or 0 + local schoolKeys = { + [2] = "FIREDMG", [3] = "NATUREDMG", [4] = "FROSTDMG", + [5] = "SHADOWDMG", [6] = "ARCANEDMG", [7] = "HOLYDMG", + } + for s = 2, 7 do + local sd = baseDmg + (lib:GetBonus(schoolKeys[s]) or 0) + perSchool[s] = sd + if sd > maxDmg then maxDmg = sd end + end + end + end + GameTooltip:AddLine("法术伤害加成", 1, 0.82, 0.0) + CS.TipLine("提升伤害法术输出,按系别独立计算。") + CS.TipLine("加成 = 法伤 × 系数(0.3~1.0)。") + GameTooltip:AddLine(" ") + CS.TipLine("乌龟服特色:", 0.5,0.8,1) + CS.TipLine(" 部分锁/皮甲装备带法伤属性", 0.5,0.8,1) + CS.TipLine(" 增强萨:震击获10%AP法伤", 0.5,0.8,1) + CS.TipLine(" 惩戒骑:十字军受33%SP加成", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("最高法术伤害:", tostring(math.floor(maxDmg)), 0.7,0.7,0.75, 1,0.9,0.6) + local snames = {[2]="火焰",[3]="自然",[4]="冰霜",[5]="暗影",[6]="奥术",[7]="神圣"} + for s = 2, 7 do + if perSchool[s] and perSchool[s] > 0 then + CS.TipKV(" " .. (snames[s] or s) .. ":", tostring(math.floor(perSchool[s]))) + end + end + if not fromAPI and maxDmg > 0 then + CS.TipLine("(来自装备扫描,Buff 加成未计入)", 0.8,0.5,0.3) + end + end, + -- 治疗 + function() + local heal = GetSpellBonusHealing and GetSpellBonusHealing() or 0 + local fromAPI = heal > 0 + if heal == 0 then + heal = CS.GetGearBonus("HEAL") + end + heal = math.floor(heal) + GameTooltip:AddLine("治疗加成", 1, 0.82, 0.0) + CS.TipLine("提升所有治疗法术的恢复量。") + CS.TipLine("实际加成 = 治疗加成 × 法术系数(通常 0.4~1.0)。") + GameTooltip:AddLine(" ") + CS.TipLine("神圣骑/恢复德/牧师核心属性。", 0.5,0.8,1) + CS.TipLine("骑士Ironclad:护甲1-2%→治疗量", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("当前治疗加成:", tostring(heal), 0.7,0.7,0.75, 1,0.9,0.6) + if not fromAPI and heal > 0 then + CS.TipLine("(来自装备扫描,Buff 加成未计入)", 0.8,0.5,0.3) + end + end, + -- 法术暴击 + function() + local fromAPI = CS.TryAPIsArg({ "GetSpellCritChance" }, 2) > 0 + GameTooltip:AddLine("法术暴击率", 1, 0.82, 0.0) + CS.TipLine("法术暴击造成 150% 伤害/治疗量(+50%)。") + GameTooltip:AddLine(" ") + if fromAPI then + CS.TipKV("当前法术暴击:", string.format("%.2f%%", CS.SafeGetSpellCrit()), 0.7,0.7,0.75, 1,1,0.5) + else + local total, base, intC, gearC, talC = CS.FullSpellCrit() + CS.TipLine("来源分项:", 0.5,0.8,1) + if base > 0 then CS.TipKV(" 基础暴击:", string.format("%.2f%%", base)) end + if intC > 0 then CS.TipKV(" 智力暴击:", string.format("%.2f%%", intC)) end + if gearC > 0 then CS.TipKV(" 装备暴击:", string.format("+%d%%", gearC)) end + if talC > 0 then + CS.TipKV(" 天赋暴击:", string.format("+%d%%", talC)) + for _, d in ipairs(CS.GetTalentDetailsFor("spellCrit")) do + CS.TipLine(string.format(" %s (%d/%d) +%d%%", + d.name, d.rank, d.maxRank, d.bonus), 0.55,0.55,0.6) + end + end + GameTooltip:AddLine(" ") + CS.TipKV("合计法术暴击:", string.format("%.2f%%", total), 0.7,0.7,0.75, 1,1,0.5) + CS.TipLine("(Buff 暴击未计入)", 0.8,0.5,0.3) + end + end, + -- 法术命中 + function() + local fromAPI = CS.TryAPIs({ "GetSpellHitModifier" }) > 0 + GameTooltip:AddLine("法术命中", 1, 0.82, 0.0) + CS.TipLine("减少法术被抵抗概率。法系最优先。") + CS.TipLine("对+3级BOSS基础未命中16%。") + GameTooltip:AddLine(" ") + if fromAPI then + CS.TipKV("当前法术命中:", string.format("%+d%%", CS.SafeGetSpellHit()), 0.7,0.7,0.75, 1,1,0.5) + else + local total, gearH, talH = CS.FullSpellHit() + CS.TipLine("来源分项:", 0.5,0.8,1) + if gearH > 0 then CS.TipKV(" 装备命中:", string.format("+%d%%", gearH)) end + if talH > 0 then + CS.TipKV(" 天赋命中:", string.format("+%d%%", talH)) + for _, d in ipairs(CS.GetTalentDetailsFor("spellHit")) do + CS.TipLine(string.format(" %s (%d/%d) +%d%%", + d.name, d.rank, d.maxRank, d.bonus), 0.55,0.55,0.6) + end + CS.TipLine(" (天赋命中可能仅对特定系别)", 0.8,0.5,0.3) + end + GameTooltip:AddLine(" ") + CS.TipKV("合计法术命中:", string.format("+%d%%", total), 0.7,0.7,0.75, 1,1,0.5) + end + local totalHit = CS.SafeGetSpellHit() + local lvl = UnitLevel("player") or 60 + if lvl >= 60 then + GameTooltip:AddLine(" ") + local cap = 16 + CS.TipLine("达标(对+3级BOSS需16%):", 1, 0.82, 0.0) + if totalHit >= cap then + CS.TipKV(" 状态:", "已达标", 0.7,0.7,0.75, 0.3,1,0.3) + else + CS.TipKV(" 状态:", string.format("差%d%%", cap - totalHit), + 0.7,0.7,0.75, 1,0.3,0.3) + end + CS.TipLine(" 法师精准6%/奥术集中10%", 0.55,0.55,0.6) + CS.TipLine(" 术士镇压10%/暗牧集中10%", 0.55,0.55,0.6) + end + end, + } + local defOnEnter = { + -- 护甲 + function() + local baseArmor, effArmor = UnitArmor("player") + effArmor = math.floor(effArmor or baseArmor or 0) + baseArmor = math.floor(baseArmor or 0) + local bonusArmor = effArmor - baseArmor + local lvl = UnitLevel("player") or 60 + local pct = CS.CalcArmorReduction(effArmor, lvl) + local pctBoss = CS.CalcArmorReduction(effArmor, lvl + 3) + GameTooltip:AddLine("护甲", 1, 0.82, 0.0) + CS.TipLine("减少受到的物理伤害。减伤上限为 75%。") + GameTooltip:AddLine(" ") + CS.TipLine("公式:护甲/(护甲+400+85×等级)", 0.5,0.8,1) + CS.TipLine("来源:装备 + 敏捷护甲加成。", 0.5,0.8,1) + CS.TipLine("熊德/防战护甲需求最高。", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("基础护甲:", tostring(baseArmor)) + if bonusArmor ~= 0 then + CS.TipKV("Buff/敏捷加成:", string.format("%+d", bonusArmor), + 0.7,0.7,0.75, bonusArmor > 0 and 0 or 1, bonusArmor > 0 and 1 or 0, 0) + end + CS.TipKV("当前护甲:", tostring(effArmor), 0.7,0.7,0.75, 1,0.9,0.6) + GameTooltip:AddLine(" ") + CS.TipKV("减伤(同级):", string.format("%.1f%%", pct), 0.7,0.7,0.75, 0.4,1,0.4) + CS.TipKV("减伤(+3BOSS):", string.format("%.1f%%", pctBoss), 0.7,0.7,0.75, 1,0.7,0.3) + end, + -- 防御 + function() + local base, mod = UnitDefense("player") + base = math.floor(base or 0) + mod = math.floor(mod or 0) + local total = base + mod + local uncritCap = 440 + GameTooltip:AddLine("防御技能", 1, 0.82, 0.0) + CS.TipLine("提升闪避/招架/格挡,降低被暴击/碾压。") + GameTooltip:AddLine(" ") + CS.TipLine("每1点防御(超出攻击者):", 0.5,0.8,1) + CS.TipLine(" +0.04%闪避/招架/格挡") + CS.TipLine(" -0.04%被暴击/被碾压") + GameTooltip:AddLine(" ") + CS.TipLine("坦克达标(对63级BOSS):", 1, 0.82, 0.0) + CS.TipLine(" 免暴击:防御≥440(额外140)", 1,0.4,0.4) + CS.TipLine(" BOSS暴击率5.6%,每防-0.04%", 0.55,0.55,0.6) + GameTooltip:AddLine(" ") + CS.TipLine(" 免碾压(102.4%圆桌):", 1,0.4,0.4) + CS.TipLine(" 闪避+招架+格挡≥102.4%", 0.55,0.55,0.6) + CS.TipLine(" 碾压(150%伤)被排挤出圆桌", 0.55,0.55,0.6) + CS.TipLine(" 防战靠盾挡,防骑靠神圣之盾", 0.55,0.55,0.6) + GameTooltip:AddLine(" ") + CS.TipLine("坦怪仇恨压力大,命中不可忽视。", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("基础防御:", tostring(base)) + if mod ~= 0 then + CS.TipKV("装备加成:", string.format("%+d", mod), + 0.7,0.7,0.75, mod > 0 and 0 or 1, mod > 0 and 1 or 0, 0) + end + CS.TipKV("当前防御:", tostring(total), 0.7,0.7,0.75, 1,0.9,0.6) + if total >= uncritCap then + CS.TipKV("免暴击(440):", "已达标", 0.7,0.7,0.75, 0.3,1,0.3) + else + CS.TipKV("免暴击(440):", string.format("差%d防御", uncritCap - total), + 0.7,0.7,0.75, 1,0.3,0.3) + end + end, + -- 闪避 + function() + local dodge = GetDodgeChance and GetDodgeChance() or 0 + if dodge == 0 then dodge = CS.GetGearBonus("DODGE") end + GameTooltip:AddLine("闪避", 1, 0.82, 0.0) + CS.TipLine("完全规避一次近战物理攻击。") + CS.TipLine("闪避时不受伤害,不触发命中特效。") + CS.TipLine("注意:对远程攻击无效。") + GameTooltip:AddLine(" ") + CS.TipLine("来源:敏捷+防御+天赋+装备。", 0.5,0.8,1) + CS.TipLine("熊德无法招架,闪避是主要减伤。", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("当前闪避率:", string.format("%.2f%%", dodge), 0.7,0.7,0.75, 1,1,0.5) + if (GetDodgeChance and GetDodgeChance() or 0) == 0 and dodge > 0 then + CS.TipLine("(仅含装备加成)", 0.8,0.5,0.3) + end + end, + -- 招架 + function() + local parry = GetParryChance and GetParryChance() or 0 + if parry == 0 then parry = CS.GetGearBonus("PARRY") end + GameTooltip:AddLine("招架", 1, 0.82, 0.0) + CS.TipLine("完全免疫一次近战攻击伤害,") + CS.TipLine("并使下次攻击加速40%(招架反击)。") + GameTooltip:AddLine(" ") + CS.TipLine("可招架:战士/骑士/盗贼/猎人。", 0.5,0.8,1) + CS.TipLine("熊德无法招架(仅靠闪避+护甲)。", 1,0.5,0.5) + CS.TipLine("只能招架正面攻击。", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("当前招架率:", string.format("%.2f%%", parry), 0.7,0.7,0.75, 1,1,0.5) + if (GetParryChance and GetParryChance() or 0) == 0 and parry > 0 then + CS.TipLine("(仅含装备加成)", 0.8,0.5,0.3) + end + end, + -- 格挡 + function() + local block = GetBlockChance and GetBlockChance() or 0 + local bv = 0 + if GetBlockValue then bv = GetBlockValue() or 0 end + GameTooltip:AddLine("格挡", 1, 0.82, 0.0) + CS.TipLine("盾牌格挡吸收等同格挡值的伤害。") + CS.TipLine("不能完全免伤,但大幅降低受伤。") + GameTooltip:AddLine(" ") + CS.TipLine("需装备盾牌。来源:防御+装备。", 0.5,0.8,1) + CS.TipLine("持盾:战士/圣骑/萨满。", 0.5,0.8,1) + CS.TipLine("BV = (力量-初始力量)/20", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipLine("102.4%圆桌中格挡占重要份额。", 0.5,0.8,1) + GameTooltip:AddLine(" ") + CS.TipKV("当前格挡率:", string.format("%.2f%%", block), 0.7,0.7,0.75, 1,1,0.5) + if bv > 0 then + CS.TipKV("格挡值 (BV):", tostring(math.floor(bv)), 0.7,0.7,0.75, 0.4,1,0.4) + CS.TipLine("(每次格挡吸收该数值的物理伤害)", 0.55,0.55,0.6) + end + end, + } + + cy = catContentY + for i = 1, 5 do + local row + local lbl = spellL[i] ~= "" and spellL[i] or nil + row, cy = Make2ColRow(cat3, lbl, defL[i], cy) + row.spellKey = spellK[i] + row.defKey = defK[i] + if row.hitL and spellOnEnter[i] then + local fn = spellOnEnter[i] + row.hitL:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:ClearLines() + fn() + GameTooltip:Show() + end) + row.hitL:SetScript("OnLeave", function() GameTooltip:Hide() end) + end + if row.hitR and defOnEnter[i] then + local fn = defOnEnter[i] + row.hitR:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_LEFT") + GameTooltip:ClearLines() + fn() + GameTooltip:Show() + end) + row.hitR:SetScript("OnLeave", function() GameTooltip:Hide() end) + end + table.insert(page.cat3Rows, row) + end + + -- Set scroll content height (equipment area only, stats are fixed) + page.totalContentH = math.abs(infoY) + 4 + scrollArea:SetContentHeight(page.totalContentH) + + -- Initialize stat category visual (highlight first button) + CP:RefreshStatCatVisual(page) +end + +function CP:RefreshStatCatVisual(page) + for ci = 1, 3 do + if ci == page.activeStatCat then + page.statCatBtns[ci]:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], T.tabActiveBg[4]) + page.statCatBtns[ci]:SetBackdropBorderColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], T.tabActiveBorder[4]) + page.statCatBtns[ci].label:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + page.statCatFrames[ci]:Show() + else + page.statCatBtns[ci]:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + page.statCatBtns[ci]:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], T.tabBorder[4]) + page.statCatBtns[ci].label:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + page.statCatFrames[ci]:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Equipment Swap Popup (Alt+Hover to show bag alternatives) +-------------------------------------------------------------------------------- +local SLOT_TO_EQUIP_LOCS = { + [1] = { INVTYPE_HEAD = true }, + [2] = { INVTYPE_NECK = true }, + [3] = { INVTYPE_SHOULDER = true }, + [4] = { INVTYPE_BODY = true }, + [5] = { INVTYPE_CHEST = true, INVTYPE_ROBE = true }, + [6] = { INVTYPE_WAIST = true }, + [7] = { INVTYPE_LEGS = true }, + [8] = { INVTYPE_FEET = true }, + [9] = { INVTYPE_WRIST = true }, + [10] = { INVTYPE_HAND = true }, + [11] = { INVTYPE_FINGER = true }, + [12] = { INVTYPE_FINGER = true }, + [13] = { INVTYPE_TRINKET = true }, + [14] = { INVTYPE_TRINKET = true }, + [15] = { INVTYPE_CLOAK = true }, + [16] = { INVTYPE_WEAPON = true, INVTYPE_2HWEAPON = true, INVTYPE_WEAPONMAINHAND = true }, + [17] = { + INVTYPE_SHIELD = true, INVTYPE_WEAPONOFFHAND = true, INVTYPE_HOLDABLE = true, + INVTYPE_WEAPON = true, INVTYPE_WEAPONMAINHAND = true + }, + [18] = { INVTYPE_RANGED = true, INVTYPE_RANGEDRIGHT = true, INVTYPE_THROWN = true, INVTYPE_RELIC = true }, + [19] = { INVTYPE_TABARD = true }, +} + +local WEAPON_SLOT_EQUIP_LOCS = { + INVTYPE_WEAPON = true, + INVTYPE_2HWEAPON = true, + INVTYPE_WEAPONMAINHAND = true, + INVTYPE_WEAPONOFFHAND = true, + INVTYPE_SHIELD = true, + INVTYPE_HOLDABLE = true, +} + +local swapPopup +local SWAP_POPUP_W = 235 +local SWAP_ROW_H = 26 +local SWAP_MAX_VISIBLE = 8 +local SWAP_ICON_SIZE = 20 + +local function TryGetEquipLoc(link) + if not link then return nil end + local name, _, quality, _, _, _, _, equipLoc, tex = GetItemInfo(link) + if equipLoc and equipLoc ~= "" then + return name, quality, equipLoc, tex + end + local _, _, itemString = string.find(link, "(item:[%d:]+)") + if itemString then + name, _, quality, _, _, _, _, equipLoc, tex = GetItemInfo(itemString) + if equipLoc and equipLoc ~= "" then + return name, quality, equipLoc, tex + end + end + local _, _, itemId = string.find(link, "item:(%d+)") + if itemId then + name, _, quality, _, _, _, _, equipLoc, tex = GetItemInfo(tonumber(itemId)) + if equipLoc and equipLoc ~= "" then + return name, quality, equipLoc, tex + end + end + return nil +end + +local function ScanBagsForSlot(slotID) + local locSet = SLOT_TO_EQUIP_LOCS[slotID] + if not locSet then return {}, "no_mapping" end + local items = {} + local debugEquipLocs = {} + local isWeaponSlot = (slotID == 16 or slotID == 17) + for bag = 0, 4 do + local numSlots = GetContainerNumSlots(bag) + if numSlots and numSlots > 0 then + for slot = 1, numSlots do + local link = GetContainerItemLink(bag, slot) + if link then + local name, quality, equipLoc, tex = TryGetEquipLoc(link) + if equipLoc then + debugEquipLocs[equipLoc] = (debugEquipLocs[equipLoc] or 0) + 1 + local matched = locSet[equipLoc] + if (not matched) and isWeaponSlot and WEAPON_SLOT_EQUIP_LOCS[equipLoc] then + matched = true + end + if matched then + if not tex then tex = GetContainerItemInfo(bag, slot) end + if not quality then quality = GetItemQualityFromLink(link) end + local ilvl + if LibItem_Level then + local _, _, itemId = string.find(link, "item:(%d+)") + ilvl = itemId and LibItem_Level[tonumber(itemId)] + end + table.insert(items, { + bag = bag, slot = slot, link = link, + name = name or "?", texture = tex, + quality = quality or 1, + ilvl = ilvl, + }) + end + end + end + end + end + end + table.sort(items, function(a, b) + if a.quality ~= b.quality then return a.quality > b.quality end + if (a.ilvl or 0) ~= (b.ilvl or 0) then return (a.ilvl or 0) > (b.ilvl or 0) end + return a.name < b.name + end) + return items, debugEquipLocs +end + +local function GetOrCreateSwapPopup() + if swapPopup then return swapPopup end + + local f = CreateFrame("Frame", "SFramesCPSwapPopup", UIParent) + f:SetWidth(SWAP_POPUP_W) + f:SetHeight(60) + f:SetFrameStrata("TOOLTIP") + f:EnableMouse(true) + SetRoundBackdrop(f, T.bg, T.border) + CreateShadow(f, 3) + f:Hide() + + local title = MakeFS(f, 10, "CENTER", T.accentLight) + title:SetPoint("TOP", f, "TOP", 0, -6) + f.title = title + + local hint = f:CreateFontString(nil, "OVERLAY") + hint:SetFont(GetFont(), 8, "OUTLINE") + hint:SetTextColor(0.55, 0.55, 0.55) + hint:SetText("") + hint:SetPoint("BOTTOM", f, "BOTTOM", 0, 4) + f.hint = hint + + f.rows = {} + f.scrollOffset = 0 + f.totalItems = 0 + f.items = {} + f.anchorSlot = nil + + f:EnableMouseWheel(1) + f:SetScript("OnMouseWheel", function() + local maxOff = math.max(f.totalItems - SWAP_MAX_VISIBLE, 0) + if arg1 > 0 then + f.scrollOffset = math.max(f.scrollOffset - 1, 0) + else + f.scrollOffset = math.min(f.scrollOffset + 1, maxOff) + end + CP:RefreshSwapRows() + end) + + f:SetScript("OnUpdate", function() + if not IsAltKeyDown() then + f:Hide() + return + end + if panel and not panel:IsShown() then + f:Hide() + return + end + local overPopup = MouseIsOver and MouseIsOver(f) + local overSlot = f.anchorSlot and MouseIsOver and MouseIsOver(f.anchorSlot) + if not overPopup and not overSlot then + if not f._gracePeriod then + f._gracePeriod = GetTime() + elseif GetTime() - f._gracePeriod > 0.3 then + f._gracePeriod = nil + f:Hide() + end + else + f._gracePeriod = nil + end + end) + + f:SetScript("OnLeave", function() + end) + + swapPopup = f + return f +end + +function CP:RefreshSwapRows() + local popup = swapPopup + if not popup then return end + local items = popup.items + local offset = popup.scrollOffset + local total = table.getn(items) + local numVis = math.min(total - offset, SWAP_MAX_VISIBLE) + + for i = 1, table.getn(popup.rows) do + local row = popup.rows[i] + if i <= numVis then + local item = items[offset + i] + row.icon:SetTexture(item.texture) + row.nameText:SetText(item.name) + local qc = QUALITY_COLORS[item.quality] or QUALITY_COLORS[1] + row.nameText:SetTextColor(qc[1], qc[2], qc[3]) + row.ilvlText:SetText(item.ilvl and tostring(item.ilvl) or "") + row.itemBag = item.bag + row.itemSlot = item.slot + row.itemLink = item.link + row:Show() + else + row:Hide() + end + end +end + +function CP:ShowSwapPopup(slot) + local items, debugInfo = ScanBagsForSlot(slot.slotID) + local count = table.getn(items) + + local popup = GetOrCreateSwapPopup() + popup.anchorSlot = slot + popup.items = items + popup.totalItems = count + popup.scrollOffset = 0 + + local label = SLOT_LABEL[slot.slotName] or slot.slotName + + for i = 1, table.getn(popup.rows) do popup.rows[i]:Hide() end + + if count == 0 then + popup.title:SetText(label .. " - 背包中无可替换装备") + popup:SetHeight(30) + popup.hint:SetText("") + else + popup.title:SetText(label .. " - 可替换装备 (" .. count .. ")") + + local numVis = math.min(count, SWAP_MAX_VISIBLE) + local hasScroll = count > SWAP_MAX_VISIBLE + local hintH = hasScroll and 14 or 0 + popup:SetHeight(22 + numVis * SWAP_ROW_H + 6 + hintH) + popup.hint:SetText(hasScroll and "滚轮翻页" or "") + + for i = 1, numVis do + if not popup.rows[i] then + local row = CreateFrame("Button", nil, popup) + row:SetWidth(SWAP_POPUP_W - 12) + row:SetHeight(SWAP_ROW_H) + row:EnableMouse(true) + + local icon = row:CreateTexture(nil, "ARTWORK") + icon:SetPoint("LEFT", row, "LEFT", 2, 0) + icon:SetWidth(SWAP_ICON_SIZE) + icon:SetHeight(SWAP_ICON_SIZE) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + row.icon = icon + + local nameText = row:CreateFontString(nil, "OVERLAY") + nameText:SetFont(GetFont(), 10, "OUTLINE") + nameText:SetPoint("LEFT", icon, "RIGHT", 4, 0) + nameText:SetPoint("RIGHT", row, "RIGHT", -28, 0) + nameText:SetJustifyH("LEFT") + row.nameText = nameText + + local ilvlText = row:CreateFontString(nil, "OVERLAY") + ilvlText:SetFont(GetFont(), 9, "OUTLINE") + ilvlText:SetPoint("RIGHT", row, "RIGHT", -4, 0) + ilvlText:SetJustifyH("RIGHT") + ilvlText:SetTextColor(1, 0.82, 0) + row.ilvlText = ilvlText + + local hl = row:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\Buttons\\WHITE8X8") + hl:SetVertexColor(T.accentLight[1], T.accentLight[2], T.accentLight[3], 0.12) + hl:SetAllPoints(row) + + row:SetScript("OnClick", function() + UseContainerItem(this.itemBag, this.itemSlot) + popup:Hide() + CP:ScheduleEquipUpdate() + end) + + row:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetBagItem(this.itemBag, this.itemSlot) + GameTooltip:Show() + end) + + row:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + popup.rows[i] = row + end + popup.rows[i]:SetPoint("TOPLEFT", popup, "TOPLEFT", 6, -(20 + (i - 1) * SWAP_ROW_H)) + end + + for i = numVis + 1, table.getn(popup.rows) do + popup.rows[i]:Hide() + end + + self:RefreshSwapRows() + end + + popup:ClearAllPoints() + local slotLeft = slot:GetLeft() or 0 + local screenW = GetScreenWidth() or 1024 + if slotLeft + SLOT_SIZE + SWAP_POPUP_W + 10 > screenW then + popup:SetPoint("TOPRIGHT", slot, "TOPLEFT", -4, 0) + else + popup:SetPoint("TOPLEFT", slot, "TOPRIGHT", 4, 0) + end + popup:Show() +end + +function CP:HideSwapPopup() + if swapPopup then swapPopup:Hide() end +end + +function CP:CreateEquipSlot(parent, slotID, slotName) + local frame = CreateFrame("Button", NextName("Slot"), parent) + frame:SetWidth(SLOT_SIZE) + frame:SetHeight(SLOT_SIZE) + SetRoundBackdrop(frame, T.slotBg, T.slotBorder) + + local icon = frame:CreateTexture(nil, "ARTWORK") + icon:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -4) + icon:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -4, 4) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + frame.icon = icon + + local ilvlText = frame:CreateFontString(nil, "OVERLAY") + ilvlText:SetFont(GetFont(), 8, "OUTLINE") + ilvlText:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -2, 2) + ilvlText:SetTextColor(1, 0.82, 0) + ilvlText:SetText("") + frame.ilvlText = ilvlText + + local glow = frame:CreateTexture(nil, "OVERLAY") + glow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + glow:SetBlendMode("ADD") + glow:SetAlpha(0.8) + glow:SetWidth(SLOT_SIZE * 2) + glow:SetHeight(SLOT_SIZE * 2) + glow:SetPoint("CENTER", frame, "CENTER", 0, 0) + glow:Hide() + frame.qualGlow = glow + + frame.slotID = slotID + frame.slotName = slotName + local _, emptyTex = GetInventorySlotInfo(slotName) + frame.emptyTexture = emptyTex + + frame:RegisterForClicks("LeftButtonUp", "RightButtonUp") + frame:RegisterForDrag("LeftButton") + + frame:SetScript("OnClick", function() + local sid = this.slotID + if CursorHasItem and CursorHasItem() then + PickupInventoryItem(sid) + elseif arg1 == "RightButton" then + if GetInventoryItemLink("player", sid) then + UseInventoryItem(sid) + end + elseif IsShiftKeyDown() and arg1 == "LeftButton" then + local link = GetInventoryItemLink("player", sid) + if link and ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Insert(link) + end + else + PickupInventoryItem(sid) + end + CP:ScheduleEquipUpdate() + end) + + frame:SetScript("OnDragStart", function() + PickupInventoryItem(this.slotID) + CP:ScheduleEquipUpdate() + end) + + frame:SetScript("OnReceiveDrag", function() + PickupInventoryItem(this.slotID) + CP:ScheduleEquipUpdate() + end) + + frame:SetScript("OnEnter", function() + this._mouseOver = true + this._swapActive = nil + this:SetBackdropBorderColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4]) + if IsAltKeyDown() then + this._swapActive = true + GameTooltip:Hide() + CP:ShowSwapPopup(this) + else + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + if GetInventoryItemLink("player", this.slotID) then + GameTooltip:SetInventoryItem("player", this.slotID) + else + local label = SLOT_LABEL[this.slotName] or this.slotName + GameTooltip:AddLine(label .. " - 未装备", 0.5, 0.5, 0.5) + end + GameTooltip:AddLine("[右键] 使用装备效果", 0.45, 0.45, 0.45) + GameTooltip:AddLine("[Alt] 查看可替换装备", 0.45, 0.45, 0.45) + GameTooltip:Show() + end + end) + + frame:SetScript("OnLeave", function() + this:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + GameTooltip:Hide() + this._mouseOver = nil + this._swapActive = nil + end) + + frame:SetScript("OnUpdate", function() + if not this._mouseOver then return end + if IsAltKeyDown() then + if not this._swapActive then + this._swapActive = true + GameTooltip:Hide() + CP:ShowSwapPopup(this) + end + else + if this._swapActive then + this._swapActive = nil + if swapPopup then swapPopup:Hide() end + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + if GetInventoryItemLink("player", this.slotID) then + GameTooltip:SetInventoryItem("player", this.slotID) + else + local label = SLOT_LABEL[this.slotName] or this.slotName + GameTooltip:AddLine(label .. " - 未装备", 0.5, 0.5, 0.5) + end + GameTooltip:AddLine("[Alt] 查看可替换装备", 0.45, 0.45, 0.45) + GameTooltip:Show() + end + end + end) + + return frame +end + +local equipUpdateTimer = CreateFrame("Frame", nil, UIParent) +equipUpdateTimer:Hide() +equipUpdateTimer._elapsed = 0 +equipUpdateTimer._pending = 0 +equipUpdateTimer:SetScript("OnUpdate", function() + this._elapsed = this._elapsed + arg1 + if this._elapsed >= 0.15 then + this._elapsed = 0 + this._pending = this._pending - 1 + CP:UpdateEquipment() + if this._pending <= 0 then + this._pending = 0 + this:Hide() + end + end +end) + +function CP:ScheduleEquipUpdate() + equipUpdateTimer._elapsed = 0 + equipUpdateTimer._pending = 3 + equipUpdateTimer:Show() +end + +function CP:UpdateEquipment() + local page = pages[1] + if not page or not page.built then return end + + local showModel = not SFramesDB or SFramesDB.charShowModel ~= false + if page.model then + if showModel then + page.model:Show() + if page.modelFrame then page.modelFrame:Show() end + if page.modelBgFrame then page.modelBgFrame:Show() end + if page.modelToolbar then page.modelToolbar:Show() end + page.model:SetUnit("player") + page.model:SetFacing(page.model.curFacing or 0.4) + page.model:SetModelScale(page.model.curScale or 1.0) + page.model:SetPosition(page.model.posY or 0, 0, page.model.posX or 0) + else + page.model:Hide() + if page.modelFrame then page.modelFrame:Hide() end + if page.modelBgFrame then page.modelBgFrame:Hide() end + if page.modelToolbar then page.modelToolbar:Hide() end + end + end + local showGlow = not SFramesDB or SFramesDB.charShowQualityGlow ~= false + + local allSlots = {} + for _, t in ipairs({ EQUIP_SLOTS_LEFT, EQUIP_SLOTS_RIGHT, EQUIP_SLOTS_BOTTOM }) do + for _, s in ipairs(t) do table.insert(allSlots, s) end + end + + for _, si in ipairs(allSlots) do + local slot = page.equipSlots[si.id] + if slot then + local tex = GetInventoryItemTexture("player", si.id) + local link = GetInventoryItemLink("player", si.id) + if tex then + slot.icon:SetTexture(tex) + slot.icon:SetVertexColor(1, 1, 1) + if slot.ilvlText then + local showIlvl = not SFramesDB or SFramesDB.showItemLevel ~= false + if showIlvl and link and LibItem_Level then + local _, _, itemId = string.find(link, "item:(%d+)") + local ilvl = itemId and LibItem_Level[tonumber(itemId)] + slot.ilvlText:SetText(ilvl and tostring(ilvl) or "") + else + slot.ilvlText:SetText("") + end + end + local quality = GetItemQualityFromLink(link) + if quality and quality >= 2 and QUALITY_COLORS[quality] then + local qc = QUALITY_COLORS[quality] + if showGlow then + slot.qualGlow:SetVertexColor(qc[1], qc[2], qc[3]) + slot.qualGlow:Show() + else + slot.qualGlow:Hide() + end + else + slot.qualGlow:Hide() + end + else + if slot.emptyTexture then + slot.icon:SetTexture(slot.emptyTexture) + slot.icon:SetVertexColor(T.emptySlot[1], T.emptySlot[2], T.emptySlot[3], T.emptySlot[4]) + else slot.icon:SetTexture(nil) end + slot:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + slot.currentBorderColor = nil + slot.qualGlow:Hide() + if slot.ilvlText then slot.ilvlText:SetText("") end + end + end + end + + self:RefreshStatValues(page) +end + +local function GetStatVal(key) + if key == "meleeAP" then + local b, p, n = UnitAttackPower("player"); return tostring(math.floor((b or 0) + (p or 0) + (n or 0))) + elseif key == "meleeDmg" then + local lo, hi = UnitDamage("player"); return math.floor(lo or 0) .. "-" .. math.floor(hi or 0) + elseif key == "meleeSpeed" then + local ms, os = UnitAttackSpeed("player") + local t = string.format("%.1f", ms or 0) + if os and os > 0 then t = t .. "/" .. string.format("%.1f", os) end; return t + elseif key == "meleeCrit" then + return string.format("%.1f%%", SafeGetMeleeCrit()) + elseif key == "meleeHit" then + return string.format("%d%%", SafeGetMeleeHit()) + elseif key == "rangedAP" then + local b, p, n = UnitRangedAttackPower("player"); return tostring(math.floor((b or 0) + (p or 0) + (n or 0))) + elseif key == "rangedDmg" then + local _, lo, hi = UnitRangedDamage("player"); return math.floor(lo or 0) .. "-" .. math.floor(hi or 0) + elseif key == "rangedSpeed" then + local sp = UnitRangedDamage("player"); return string.format("%.1f", sp or 0) + elseif key == "rangedCrit" then + return string.format("%.1f%%", SafeGetRangedCrit()) + elseif key == "spellDmg" then + local mx = 0 + if GetSpellBonusDamage then for s = 2, 7 do local d = GetSpellBonusDamage(s); if d and d > mx then mx = d end end end + if mx == 0 then + local lib = GetItemBonusLib() + if lib then + local baseDmg = lib:GetBonus("DMG") or 0 + mx = baseDmg + local schools = { "FIREDMG","FROSTDMG","SHADOWDMG","ARCANEDMG","NATUREDMG","HOLYDMG" } + for _, sk in ipairs(schools) do + local sv = baseDmg + (lib:GetBonus(sk) or 0) + if sv > mx then mx = sv end + end + end + end + return tostring(math.floor(mx)) + elseif key == "spellHeal" then + local v = GetSpellBonusHealing and GetSpellBonusHealing() or 0 + if v == 0 then v = GetGearBonus("HEAL") end + return tostring(math.floor(v)) + elseif key == "spellCrit" then + return string.format("%.1f%%", SafeGetSpellCrit()) + elseif key == "spellHit" then + return string.format("%d%%", SafeGetSpellHit()) + elseif key == "armor" then + local b, e = UnitArmor("player"); return tostring(math.floor(e or b or 0)) + elseif key == "defense" then + local b, m = UnitDefense("player"); return tostring(math.floor((b or 0) + (m or 0))) + elseif key == "dodge" then + local v = GetDodgeChance and GetDodgeChance() or 0 + if v == 0 then v = GetGearBonus("DODGE") end + return string.format("%.1f%%", v) + elseif key == "parry" then + local v = GetParryChance and GetParryChance() or 0 + if v == 0 then v = GetGearBonus("PARRY") end + return string.format("%.1f%%", v) + elseif key == "block" then + local v = GetBlockChance and GetBlockChance() or 0 + if v == 0 then v = GetGearBonus("BLOCK") end + return string.format("%.1f%%", v) + end + return "0" +end + +function CP:RefreshStatValues(page) + if not page.built then return end + CP:RefreshStatCatVisual(page) + + -- Cat 1: base (left) + resist (right) + if page.cat1Rows then + for _, row in ipairs(page.cat1Rows) do + local stat, eff, pos, neg = UnitStat("player", row.baseIdx) + local e = eff or stat or 0 + row.valueL:SetText(tostring(math.floor(e))) + if row.valueR and row.resistSchool then + local b, total = UnitResistance("player", row.resistSchool) + row.valueR:SetText(tostring(math.floor(total or b or 0))) + end + end + end + + -- Cat 2: melee (left) + ranged (right) + if page.cat2Rows then + for _, row in ipairs(page.cat2Rows) do + if row.meleeKey then row.valueL:SetText(GetStatVal(row.meleeKey)) end + if row.rangedKey and row.valueR then row.valueR:SetText(GetStatVal(row.rangedKey)) end + end + end + + -- Cat 3: spell (left) + defense (right) + if page.cat3Rows then + for _, row in ipairs(page.cat3Rows) do + if row.spellKey and row.valueL then row.valueL:SetText(GetStatVal(row.spellKey)) end + if row.defKey and row.valueR then row.valueR:SetText(GetStatVal(row.defKey)) end + end + end +end + +-------------------------------------------------------------------------------- +-- Tab 2: Reputation (was Tab 3) +-------------------------------------------------------------------------------- +function CP:BuildReputationPage() + local page = pages[2] + if page.built then return end + page.built = true + local contentH = FRAME_H - (HEADER_H + TAB_BAR_H) - INNER_PAD - 4 + local scrollArea = CreateScrollFrame(page, CONTENT_W, contentH) + scrollArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + page.scrollArea = scrollArea + page.repRows = {} +end + +function CP:UpdateReputation() + local page = pages[2] + if not page or not page.built then return end + local child = page.scrollArea.child + if page.repRows then + for _, row in ipairs(page.repRows) do if row.frame then row.frame:Hide() end end + end + page.repRows = {} + + local numFactions = GetNumFactions() + local y = -6 + local rowH, barH, headerH = 30, 9, 24 + + for i = 1, numFactions do + local name, desc, standingId, barMin, barMax, barValue, atWar, canWar, isHeader, isCollapsed, hasRep, isWatched, isChild + if GetFactionInfo then + name, desc, standingId, barMin, barMax, barValue, atWar, canWar, isHeader, isCollapsed, hasRep, isWatched, isChild = GetFactionInfo(i) + end + if not name then break end + + if isHeader then + local hf = CreateFrame("Button", nil, child) + hf:SetWidth(SCROLL_W - 16) + hf:SetHeight(headerH) + hf:SetPoint("TOPLEFT", child, "TOPLEFT", 8, y) + local arrow = MakeFS(hf, 10, "LEFT", T.dimText) + arrow:SetPoint("LEFT", hf, "LEFT", 0, 0) + arrow:SetText(isCollapsed and "+" or "-") + local ht = MakeFS(hf, 11, "LEFT", T.sectionTitle) + ht:SetPoint("LEFT", arrow, "RIGHT", 3, 0) + ht:SetText(name) + hf.factionIndex = i + hf:SetScript("OnClick", function() + if isCollapsed then ExpandFactionHeader(this.factionIndex) else CollapseFactionHeader(this.factionIndex) end + CP:UpdateReputation() + end) + table.insert(page.repRows, { frame = hf }) + y = y - headerH + else + local rf = CreateFrame("Frame", nil, child) + rf:SetWidth(SCROLL_W - 24) + rf:SetHeight(rowH) + rf:SetPoint("TOPLEFT", child, "TOPLEFT", isChild and 22 or 14, y) + local nfs = MakeFS(rf, 9, "LEFT", T.valueText) + nfs:SetPoint("TOPLEFT", rf, "TOPLEFT", 0, -2) + nfs:SetText(name or "") + local rc = T.repColors[standingId] or { 0.5, 0.5, 0.5 } + local sfs = MakeFS(rf, 8, "RIGHT", rc) + sfs:SetPoint("TOPRIGHT", rf, "TOPRIGHT", 0, -2) + sfs:SetText(REP_STANDING[standingId] or "") + + local bf = CreateFrame("Frame", nil, rf) + bf:SetHeight(barH) + bf:SetPoint("BOTTOMLEFT", rf, "BOTTOMLEFT", 0, 2) + bf:SetPoint("BOTTOMRIGHT", rf, "BOTTOMRIGHT", 0, 2) + SetPixelBackdrop(bf, T.barBg, { 0.15, 0.15, 0.18, 0.5 }) + local bar = bf:CreateTexture(nil, "ARTWORK") + bar:SetTexture(SFrames:GetTexture()) + bar:SetVertexColor(rc[1], rc[2], rc[3], 0.85) + bar:SetPoint("TOPLEFT", bf, "TOPLEFT", 1, -1) + bar:SetPoint("BOTTOMLEFT", bf, "BOTTOMLEFT", 1, 1) + local range = math.max((barMax or 1) - (barMin or 0), 1) + local fill = Clamp(((barValue or 0) - (barMin or 0)) / range, 0, 1) + bar:SetWidth(math.max((SCROLL_W - 26) * fill, 1)) + local vfs = MakeFS(bf, 7, "CENTER", { 0.85, 0.85, 0.85 }) + vfs:SetPoint("CENTER", bf, "CENTER", 0, 0) + vfs:SetText(math.floor((barValue or 0) - (barMin or 0)) .. "/" .. math.floor(range)) + table.insert(page.repRows, { frame = rf }) + y = y - rowH + end + end + page.scrollArea:SetContentHeight(math.abs(y) + 16) +end + +-------------------------------------------------------------------------------- +-- Tab 3: Skills (was Tab 4) +-------------------------------------------------------------------------------- +function CP:BuildSkillsPage() + local page = pages[3] + if page.built then return end + page.built = true + local contentH = FRAME_H - (HEADER_H + TAB_BAR_H) - INNER_PAD - 4 + local scrollArea = CreateScrollFrame(page, CONTENT_W, contentH) + scrollArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + page.scrollArea = scrollArea + page.skillRows = {} +end + +function CP:UpdateSkills() + local page = pages[3] + if not page or not page.built then return end + local child = page.scrollArea.child + if page.skillRows then + for _, row in ipairs(page.skillRows) do if row.frame then row.frame:Hide() end end + end + page.skillRows = {} + + local numSkills = GetNumSkillLines and GetNumSkillLines() or 0 + local y = -6 + local rowH, barH, headerH = 28, 7, 24 + + for i = 1, numSkills do + local sn, isH, isE, sr, nt, sm, smr + if GetSkillLineInfo then sn, isH, isE, sr, nt, sm, smr = GetSkillLineInfo(i) end + if not sn then break end + + if isH then + local hf = CreateFrame("Button", nil, child) + hf:SetWidth(SCROLL_W - 16) + hf:SetHeight(headerH) + hf:SetPoint("TOPLEFT", child, "TOPLEFT", 8, y) + local arrow = MakeFS(hf, 10, "LEFT", T.dimText) + arrow:SetPoint("LEFT", hf, "LEFT", 0, 0) + arrow:SetText(isE and "-" or "+") + local ht = MakeFS(hf, 11, "LEFT", T.sectionTitle) + ht:SetPoint("LEFT", arrow, "RIGHT", 3, 0) + ht:SetText(sn) + hf.skillIndex = i + hf:SetScript("OnClick", function() + if isE then CollapseSkillHeader(this.skillIndex) else ExpandSkillHeader(this.skillIndex) end + CP:UpdateSkills() + end) + table.insert(page.skillRows, { frame = hf }) + y = y - headerH + else + local sf = CreateFrame("Frame", nil, child) + sf:SetWidth(SCROLL_W - 24) + sf:SetHeight(rowH) + sf:SetPoint("TOPLEFT", child, "TOPLEFT", 18, y) + local nfs = MakeFS(sf, 9, "LEFT", T.valueText) + nfs:SetPoint("TOPLEFT", sf, "TOPLEFT", 0, -2) + nfs:SetText(sn or "") + local rt = tostring(sr or 0) + if smr and smr > 0 then rt = rt .. "/" .. tostring(smr) end + local rfs = MakeFS(sf, 8, "RIGHT", T.dimText) + rfs:SetPoint("TOPRIGHT", sf, "TOPRIGHT", 0, -2) + rfs:SetText(rt) + if smr and smr > 0 then + local bf = CreateFrame("Frame", nil, sf) + bf:SetHeight(barH) + bf:SetPoint("BOTTOMLEFT", sf, "BOTTOMLEFT", 0, 2) + bf:SetPoint("BOTTOMRIGHT", sf, "BOTTOMRIGHT", 0, 2) + SetPixelBackdrop(bf, T.barBg, { 0.15, 0.15, 0.18, 0.5 }) + local bar = bf:CreateTexture(nil, "ARTWORK") + bar:SetTexture(SFrames:GetTexture()) + bar:SetVertexColor(0.4, 0.65, 0.85, 0.85) + bar:SetPoint("TOPLEFT", bf, "TOPLEFT", 1, -1) + bar:SetPoint("BOTTOMLEFT", bf, "BOTTOMLEFT", 1, 1) + bar:SetWidth(math.max((SCROLL_W - 26) * Clamp((sr or 0) / smr, 0, 1), 1)) + end + table.insert(page.skillRows, { frame = sf }) + y = y - rowH + end + end + page.scrollArea:SetContentHeight(math.abs(y) + 16) +end + +-------------------------------------------------------------------------------- +-- Tab 4: Honor (was Tab 5) +-------------------------------------------------------------------------------- +function CP:BuildHonorPage() + local page = pages[4] + if page.built then return end + page.built = true + + local pad = SIDE_PAD + 2 + page.rankIcon = page:CreateTexture(nil, "ARTWORK") + page.rankIcon:SetWidth(42) + page.rankIcon:SetHeight(42) + page.rankIcon:SetPoint("TOPLEFT", page, "TOPLEFT", pad, -16) + + page.rankName = MakeFS(page, 13, "LEFT", T.gold) + page.rankName:SetPoint("LEFT", page.rankIcon, "RIGHT", 10, 5) + page.rankProgress = MakeFS(page, 10, "LEFT", T.dimText) + page.rankProgress:SetPoint("LEFT", page.rankIcon, "RIGHT", 10, -8) + + local barY = -68 + local bf = CreateFrame("Frame", nil, page) + bf:SetHeight(12) + bf:SetPoint("TOPLEFT", page, "TOPLEFT", pad, barY) + bf:SetPoint("TOPRIGHT", page, "TOPRIGHT", -pad, barY) + SetPixelBackdrop(bf, T.barBg, { 0.15, 0.15, 0.18, 0.5 }) + page.rankBarFrame = bf + + local bfill = bf:CreateTexture(nil, "ARTWORK") + bfill:SetTexture(SFrames:GetTexture()) + bfill:SetVertexColor(0.85, 0.6, 0.1, 0.9) + bfill:SetPoint("TOPLEFT", bf, "TOPLEFT", 1, -1) + bfill:SetPoint("BOTTOMLEFT", bf, "BOTTOMLEFT", 1, 1) + bfill:SetWidth(1) + page.rankBarFill = bfill + + page.rankBarText = MakeFS(bf, 8, "CENTER", { 1, 1, 1 }) + page.rankBarText:SetPoint("CENTER", bf, "CENTER", 0, 0) + + local sY = barY - 26 + sY = self:CreateStatSection(page, "荣誉统计", sY) + page.honorStats = {} + local hl = { "本次击杀", "本次荣誉", "昨日击杀", "昨日荣誉", "本周击杀", "上周击杀", "上周荣誉", "上周排名", "终身击杀" } + for _, lbl in ipairs(hl) do + local row; row, sY = self:CreateStatRow(page, lbl, sY) + table.insert(page.honorStats, { row = row }) + end +end + +function CP:UpdateHonor() + local page = pages[4] + if not page or not page.built then return end + + local rn, rnum + if GetPVPRankInfo then rn, rnum = GetPVPRankInfo(UnitPVPRank("player")) end + rn = rn or "无军衔"; rnum = rnum or 0 + page.rankName:SetText(rn) + if rnum > 0 then + page.rankIcon:SetTexture(string.format("Interface\\PvPRankBadges\\PvPRank%02d", rnum)) + else page.rankIcon:SetTexture(nil) end + + local prog = GetPVPRankProgress and GetPVPRankProgress() or 0 + page.rankProgress:SetText(string.format("进度: %.1f%%", prog * 100)) + local bw = page.rankBarFrame:GetWidth() - 2 + page.rankBarFill:SetWidth(math.max(bw * prog, 1)) + page.rankBarText:SetText(string.format("%.1f%%", prog * 100)) + + local thk, tho = 0, 0; if GetPVPSessionStats then thk, tho = GetPVPSessionStats() end + local yhk, yho = 0, 0; if GetPVPYesterdayStats then yhk, yho = GetPVPYesterdayStats() end + local whk = 0; if GetPVPThisWeekStats then whk = GetPVPThisWeekStats() end + local lhk, lho, ls = 0, 0, 0; if GetPVPLastWeekStats then lhk, lho, ls = GetPVPLastWeekStats() end + local ltk = 0; if GetPVPLifetimeStats then ltk = GetPVPLifetimeStats() end + + local vals = { + tostring(thk or 0), tostring(math.floor(tho or 0)), + tostring(yhk or 0), tostring(math.floor(yho or 0)), + tostring(whk or 0), tostring(lhk or 0), + tostring(math.floor(lho or 0)), tostring(ls or 0), tostring(ltk or 0), + } + for i, stat in ipairs(page.honorStats) do + stat.row.value:SetText(vals[i] or "0") + end +end + +-------------------------------------------------------------------------------- +-- Events +-------------------------------------------------------------------------------- +local eventFrame = CreateFrame("Frame", "SFramesCPEvents", UIParent) +local cpEvents = { + "UNIT_INVENTORY_CHANGED", "PLAYER_AURAS_CHANGED", + "UPDATE_FACTION", "SKILL_LINES_CHANGED", + "PLAYER_PVP_KILLS_CHANGED", "PLAYER_PVP_RANK_CHANGED", + "UNIT_ATTACK_POWER", "UNIT_RANGEDDAMAGE", + "UNIT_ATTACK", "UNIT_DEFENSE", "UNIT_RESISTANCES", + "CHAT_MSG_SKILL", "CHAT_MSG_COMBAT_HONOR_GAIN", + "CHARACTER_POINTS_CHANGED", "PLAYER_ENTERING_WORLD", +} +for _, ev in ipairs(cpEvents) do + pcall(function() eventFrame:RegisterEvent(ev) end) +end +eventFrame:SetScript("OnEvent", function() + if not panel or not panel:IsShown() then return end + if event == "UNIT_INVENTORY_CHANGED" then + CP:ScheduleEquipUpdate() + end + CP:UpdateCurrentTab() +end) + +-------------------------------------------------------------------------------- +-- Hook: replace ToggleCharacter +-------------------------------------------------------------------------------- +-- Save CharacterFrame's original Show before HideBlizzardFrames may suppress it +local origCharFrameShow = CharacterFrame and CharacterFrame.Show +local origToggleCharacter = ToggleCharacter +ToggleCharacter = function(tab) + if SFramesDB and SFramesDB.charPanelEnable == false then + if CharacterFrame then + if origCharFrameShow then + CharacterFrame.Show = origCharFrameShow + end + if origToggleCharacter then + origToggleCharacter(tab) + else + if CharacterFrame:IsShown() then + HideUIPanel(CharacterFrame) + else + ShowUIPanel(CharacterFrame) + end + end + end + return + end + local tabMap = { + ["PaperDollFrame"] = 1, + ["ReputationFrame"] = 2, + ["SkillFrame"] = 3, + ["HonorFrame"] = 4, + ["PetPaperDollFrame"] = 1, + } + CP:Toggle(tabMap[tab] or 1) +end diff --git a/Chat.lua b/Chat.lua new file mode 100644 index 0000000..5ceb128 --- /dev/null +++ b/Chat.lua @@ -0,0 +1,6897 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Chat takeover skin (Chat.lua) +-- Keeps Blizzard chat backend while replacing visuals and tab/filter workflow. +-------------------------------------------------------------------------------- + +SFrames.Chat = SFrames.Chat or {} + +local DEFAULTS = { + enable = true, + showBorder = false, + borderClassColor = false, + showPlayerLevel = true, + width = 360, + height = 220, + scale = 1, + fontSize = 12, + sidePadding = 10, + topPadding = 30, + bottomPadding = 8, + bgAlpha = 0.45, + activeTab = 1, + editBoxPosition = "bottom", + editBoxX = 0, + editBoxY = 200, +} + +local DEFAULT_COMBAT_TAB_NAME = COMBATLOG or COMBAT_LOG or "Combat" + +local HIDDEN_OBJECTS = { + "ChatFrameMenuButton", + "ChatFrameChannelButton", + "ChatFrameToggleVoiceMuteButton", + "ChatFrameToggleVoiceDeafenButton", + "ChatFrameToggleVoiceSelfMuteButton", + "ChatFrameToggleVoiceSelfDeafenButton", + "ChatFrameUpButton", + "ChatFrameDownButton", + "ChatFrameBottomButton", +} + +local EDITBOX_TEXTURES = { + "ChatFrameEditBoxLeft", + "ChatFrameEditBoxMid", + "ChatFrameEditBoxRight", + "ChatFrameEditBoxFocusLeft", + "ChatFrameEditBoxFocusMid", + "ChatFrameEditBoxFocusRight", + "ChatFrame1EditBoxLeft", + "ChatFrame1EditBoxMid", + "ChatFrame1EditBoxRight", + "ChatFrame1EditBoxFocusLeft", + "ChatFrame1EditBoxFocusMid", + "ChatFrame1EditBoxFocusRight", +} + +local FILTER_DEFS = { + { key = "say", label = "说话" }, + { key = "yell", label = "大喊" }, + { key = "emote", label = "动作" }, + { key = "guild", label = "公会" }, + { key = "party", label = "小队" }, + { key = "raid", label = "团队" }, + { key = "whisper", label = "密语" }, + { key = "system", label = "系统" }, + { key = "loot", label = "拾取" }, + { key = "money", label = "获益" }, +} +local DEFAULT_FILTERS = { + say = true, + yell = true, + emote = true, + guild = true, + party = true, + raid = true, + whisper = true, + system = true, + loot = false, + money = false, +} + +local AUTO_TRANSLATE_TARGET_LANG = "zh" + +local TRANSLATE_FILTER_KEYS = { + say = true, + yell = true, + emote = true, + guild = true, + party = true, + raid = true, + whisper = true, +} + +local TRANSLATE_FILTER_ORDER = { + "say", + "yell", + "emote", + "guild", + "party", + "raid", + "whisper", +} + +local FILTER_GROUPS = { + say = { "SAY" }, + yell = { "YELL" }, + emote = { "EMOTE", "TEXT_EMOTE", "MONSTER_EMOTE" }, + guild = { "GUILD", "OFFICER" }, + party = { "PARTY", "PARTY_LEADER" }, + raid = { "RAID", "RAID_LEADER", "RAID_WARNING", "BATTLEGROUND", "BATTLEGROUND_LEADER" }, + whisper = { "WHISPER", "WHISPER_INFORM", "REPLY", "AFK", "DND", "IGNORED", "MONSTER_WHISPER", "MONSTER_BOSS_WHISPER" }, + channel = { "CHANNEL", "CHANNEL_JOIN", "CHANNEL_LEAVE", "CHANNEL_LIST", "CHANNEL_NOTICE", "BG_HORDE", "BG_ALLIANCE" }, + system = { "SYSTEM", "MONSTER_SAY", "MONSTER_YELL", "MONSTER_BOSS_EMOTE" }, + loot = { "LOOT", "OPENING", "TRADESKILLS" }, + money = { "MONEY", "COMBAT_XP_GAIN", "COMBAT_HONOR_GAIN", "COMBAT_FACTION_CHANGE", "SKILL", "PET_INFO", "COMBAT_MISC_INFO" }, +} + +local ALL_MESSAGE_GROUPS = { + "SYSTEM", + "SAY", + "YELL", + "EMOTE", + "TEXT_EMOTE", + "MONSTER_SAY", + "MONSTER_YELL", + "MONSTER_EMOTE", + "MONSTER_WHISPER", + "MONSTER_BOSS_EMOTE", + "MONSTER_BOSS_WHISPER", + "WHISPER", + "WHISPER_INFORM", + "REPLY", + "AFK", + "DND", + "IGNORED", + "GUILD", + "OFFICER", + "PARTY", + "PARTY_LEADER", + "RAID", + "RAID_LEADER", + "RAID_WARNING", + "BATTLEGROUND", + "BATTLEGROUND_LEADER", + "CHANNEL", + "CHANNEL_JOIN", + "CHANNEL_LEAVE", + "CHANNEL_LIST", + "CHANNEL_NOTICE", + "BG_HORDE", + "BG_ALLIANCE", + "LOOT", + "OPENING", + "TRADESKILLS", + "MONEY", + "COMBAT_XP_GAIN", + "COMBAT_HONOR_GAIN", + "COMBAT_FACTION_CHANGE", + "SKILL", + "PET_INFO", + "COMBAT_MISC_INFO", +} + +local TRANSLATE_EVENT_FILTERS = { + CHAT_MSG_SAY = "say", + CHAT_MSG_YELL = "yell", + CHAT_MSG_EMOTE = "emote", + CHAT_MSG_TEXT_EMOTE = "emote", + CHAT_MSG_GUILD = "guild", + CHAT_MSG_OFFICER = "guild", + CHAT_MSG_PARTY = "party", + CHAT_MSG_PARTY_LEADER = "party", + CHAT_MSG_RAID = "raid", + CHAT_MSG_RAID_LEADER = "raid", + CHAT_MSG_RAID_WARNING = "raid", + CHAT_MSG_BATTLEGROUND = "raid", + CHAT_MSG_BATTLEGROUND_LEADER = "raid", + CHAT_MSG_WHISPER = "whisper", + CHAT_MSG_REPLY = "whisper", + CHAT_MSG_MONSTER_WHISPER = "whisper", + CHAT_MSG_MONSTER_BOSS_WHISPER = "whisper", + CHAT_MSG_CHANNEL = "channel", +} + +local function Clamp(value, minValue, maxValue) + value = tonumber(value) or minValue + if value < minValue then return minValue end + if value > maxValue then return maxValue end + return value +end + +-- ============================================================ +-- 共享:玩家职业颜色工具(供 Chat / Roll 等模块复用) +-- ============================================================ +SFrames.ClassColorHex = SFrames.ClassColorHex or { + WARRIOR = "c79c6e", + PALADIN = "f58cba", + HUNTER = "abd473", + ROGUE = "fff569", + PRIEST = "ffffff", + SHAMAN = "0070de", + MAGE = "69ccf0", + WARLOCK = "9482c9", + DRUID = "ff7d0a", +} + +SFrames.PlayerClassColorCache = SFrames.PlayerClassColorCache or {} +SFrames.PlayerLevelCache = SFrames.PlayerLevelCache or {} + +local function EnsureGlobalClassCache() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.classColorCache then SFramesGlobalDB.classColorCache = {} end + return SFramesGlobalDB.classColorCache +end + +local function EnsureGlobalLevelCache() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.levelCache then SFramesGlobalDB.levelCache = {} end + return SFramesGlobalDB.levelCache +end + +local function LoadPersistentClassCache() + local persistent = EnsureGlobalClassCache() + local runtime = SFrames.PlayerClassColorCache + for name, hex in pairs(persistent) do + if not runtime[name] then + runtime[name] = hex + end + end + local persistentLvl = EnsureGlobalLevelCache() + local runtimeLvl = SFrames.PlayerLevelCache + for name, lvl in pairs(persistentLvl) do + if not runtimeLvl[name] then + runtimeLvl[name] = lvl + end + end +end + +local function PersistClassCache() + local persistent = EnsureGlobalClassCache() + for name, hex in pairs(SFrames.PlayerClassColorCache) do + persistent[name] = hex + end + local persistentLvl = EnsureGlobalLevelCache() + for name, lvl in pairs(SFrames.PlayerLevelCache) do + persistentLvl[name] = lvl + end +end + +do + local reverseClassMap = nil + function SFrames:LocalizedClassToEN(localizedName) + if not localizedName then return nil end + if not reverseClassMap then + reverseClassMap = {} + local classTable = LOCALIZED_CLASS_NAMES_MALE or {} + for en, loc in pairs(classTable) do + reverseClassMap[loc] = en + reverseClassMap[string.upper(loc)] = en + end + local classTableF = LOCALIZED_CLASS_NAMES_FEMALE or {} + for en, loc in pairs(classTableF) do + reverseClassMap[loc] = en + reverseClassMap[string.upper(loc)] = en + end + local fallback = { + ["战士"] = "WARRIOR", ["圣骑士"] = "PALADIN", ["猎人"] = "HUNTER", + ["盗贼"] = "ROGUE", ["牧师"] = "PRIEST", ["萨满祭司"] = "SHAMAN", + ["法师"] = "MAGE", ["术士"] = "WARLOCK", ["德鲁伊"] = "DRUID", + } + for loc, en in pairs(fallback) do + if not reverseClassMap[loc] then reverseClassMap[loc] = en end + end + end + return reverseClassMap[localizedName] or reverseClassMap[string.upper(localizedName)] + end +end + +function SFrames:RefreshClassColorCache() + local now = GetTime() + if self._lastClassCacheRefresh and (now - self._lastClassCacheRefresh) < 2 then + return + end + self._lastClassCacheRefresh = now + + local cache = self.PlayerClassColorCache + local lvlCache = self.PlayerLevelCache + local hex = self.ClassColorHex + if UnitName and UnitClass then + local selfName = UnitName("player") + local _, selfClass = UnitClass("player") + if selfName and selfClass and hex[selfClass] then + cache[selfName] = hex[selfClass] + end + if selfName and UnitLevel then + local selfLevel = UnitLevel("player") + if selfLevel and selfLevel > 0 then + lvlCache[selfName] = selfLevel + end + end + end + if GetNumRaidMembers then + local count = GetNumRaidMembers() + for i = 1, count do + local rName, _, _, rLevel, _, rClass = GetRaidRosterInfo(i) + if rName and rClass and hex[rClass] then + cache[rName] = hex[rClass] + end + if rName and rLevel and rLevel > 0 then + lvlCache[rName] = rLevel + end + end + end + if GetNumPartyMembers and UnitName and UnitClass then + local count = GetNumPartyMembers() + for i = 1, count do + local unit = "party" .. i + local pName = UnitName(unit) + local _, pClass = UnitClass(unit) + if pName and pClass and hex[pClass] then + cache[pName] = hex[pClass] + end + if pName and UnitLevel then + local pLevel = UnitLevel(unit) + if pLevel and pLevel > 0 then + lvlCache[pName] = pLevel + end + end + end + end + if GetNumGuildMembers then + local count = GetNumGuildMembers() + for i = 1, count do + local gName, _, _, gLevel, gClassLoc, _, _, _, _, _, classEN = GetGuildRosterInfo(i) + if gName then + if not classEN or classEN == "" then + classEN = self:LocalizedClassToEN(gClassLoc) + end + if classEN and hex[string.upper(classEN)] then + cache[gName] = hex[string.upper(classEN)] + end + if gLevel and gLevel > 0 then + lvlCache[gName] = gLevel + end + end + end + end + if GetNumFriends then + local count = GetNumFriends() + for i = 1, count do + local fName, fLevel, fClass, fArea, fConnected = GetFriendInfo(i) + if fName and fClass then + local classEN = self:LocalizedClassToEN(fClass) + if classEN and hex[classEN] then + cache[fName] = hex[classEN] + end + end + if fName and fLevel and fLevel > 0 then + lvlCache[fName] = fLevel + end + end + end + if GetNumWhoResults then + local count = GetNumWhoResults() + for i = 1, count do + local wName, wGuild, wLevel, wRace, wClassEN = GetWhoInfo(i) + if wName and wClassEN and wClassEN ~= "" and hex[string.upper(wClassEN)] then + cache[wName] = hex[string.upper(wClassEN)] + end + if wName and wLevel and wLevel > 0 then + lvlCache[wName] = wLevel + end + end + end + PersistClassCache() +end + +function SFrames:GetClassHexForName(name) + if not name or name == "" then return nil end + local cache = self.PlayerClassColorCache + if cache[name] then return cache[name] end + self:RefreshClassColorCache() + return cache[name] +end + +function SFrames:GetLevelForName(name) + if not name or name == "" then return nil end + local cache = self.PlayerLevelCache + if cache[name] then return cache[name] end + return nil +end + +-- 本地别名,供 Chat.lua 内部使用 +local function GetClassHexForName(name) + return SFrames:GetClassHexForName(name) +end + +local function GetLevelForName(name) + return SFrames:GetLevelForName(name) +end + +-- 将聊天文本中所有 |Hplayer:NAME|h[NAME]|h 替换为职业颜色版本,并可选附加等级 +local function ColorPlayerNamesInText(text) + if not text or text == "" then return text end + local showLevel = SFramesDB and SFramesDB.Chat and SFramesDB.Chat.showPlayerLevel ~= false + local result = string.gsub(text, "(|Hplayer:([^|]+)|h%[([^%]]+)%]|h)", function(full, linkName, displayName) + local baseName = string.gsub(linkName, "%-.*", "") + local hex = GetClassHexForName(baseName) + local level = showLevel and GetLevelForName(baseName) or nil + local levelSuffix = "" + if level then + levelSuffix = "|cff888888:" .. level .. "|r" + end + if hex then + return "|Hplayer:" .. linkName .. "|h|cff" .. hex .. "[" .. displayName .. "]|r|h" .. levelSuffix + end + if level then + return full .. levelSuffix + end + return full + end) + return result +end + +local function Trim(text) + text = tostring(text or "") + text = string.gsub(text, "^%s+", "") + text = string.gsub(text, "%s+$", "") + return text +end + +local function Dummy() end + +local function CopyTable(src) + local out = {} + for k, v in pairs(src) do + if type(v) == "table" then + out[k] = CopyTable(v) + else + out[k] = v + end + end + return out +end + +local function BuildDefaultTranslateFilters() + local out = {} + for key in pairs(TRANSLATE_FILTER_KEYS) do + out[key] = false + end + return out +end + +local function ShortText(text, maxLen) + text = tostring(text or "") + local n = maxLen or 10 + if string.len(text) <= n then return text end + return string.sub(text, 1, n - 1) .. "." +end + +local function GetFilterLabel(key) + for i = 1, table.getn(FILTER_DEFS) do + local def = FILTER_DEFS[i] + if def and def.key == key then + return def.label or key + end + end + return key +end + +local function NormalizeChannelName(name) + local clean = Trim(name) + if clean == "" then return "" end + clean = string.gsub(clean, "|Hchannel:[^|]+|h%[([^%]]+)%]|h", "%1") + clean = string.gsub(clean, "^%[", "") + clean = string.gsub(clean, "%]$", "") + clean = string.gsub(clean, "^%d+%s*%.%s*", "") + clean = string.gsub(clean, "^%d+%s*:%s*", "") + clean = Trim(clean) + return clean +end + +local function ChannelKey(name) + local clean = NormalizeChannelName(name) + if clean == "" then return "" end + return string.lower(clean) +end + +-- Groups of channel aliases that should be treated as the same logical channel. +-- If a user enables any one key in a group, all keys in that group are considered enabled. +local CHANNEL_ALIAS_GROUPS = { + { "hc", "hardcore", "hard core", "hard-core", "h", "硬核" }, + { "lfg", "lft", "lookingforgroup", "looking for group", "group" }, +} + +-- Build a reverse lookup: channel key -> alias group index +local CHANNEL_ALIAS_GROUP_INDEX = {} +for gIdx, group in ipairs(CHANNEL_ALIAS_GROUPS) do + for _, alias in ipairs(group) do + CHANNEL_ALIAS_GROUP_INDEX[alias] = gIdx + end +end + +-- Returns all alias keys for the group that `name` belongs to (or nil if not in any group). +local function GetChannelAliasKeys(name) + local key = ChannelKey(name) + if key == "" then return nil end + -- Check exact match first + local gIdx = CHANNEL_ALIAS_GROUP_INDEX[key] + if not gIdx then + -- Check substring match for each alias in each group. + -- Only use aliases 3+ chars long to avoid false positives (e.g. "h" matching "whisper"). + for i, group in ipairs(CHANNEL_ALIAS_GROUPS) do + for _, alias in ipairs(group) do + if string.len(alias) >= 3 and string.find(key, alias, 1, true) then + gIdx = i + break + end + end + if gIdx then break end + end + end + if not gIdx then return nil end + return CHANNEL_ALIAS_GROUPS[gIdx] +end + +local function IsIgnoredChannelByDefault(name) + local key = ChannelKey(name) + if key == "" then return false end + -- Check via alias groups + local aliases = GetChannelAliasKeys(name) + if aliases then return true end + return false +end + +-- Channels discovered at runtime from actual chat messages / join events. +-- Keys are normalized names, values are true. +local discoveredChannels = {} + +local function TrackDiscoveredChannel(name) + if type(name) ~= "string" or name == "" then return end + local clean = NormalizeChannelName(name) + if clean ~= "" then + discoveredChannels[clean] = true + end +end + +local function UntrackDiscoveredChannel(name) + if type(name) ~= "string" or name == "" then return end + local clean = NormalizeChannelName(name) + if clean ~= "" then + discoveredChannels[clean] = nil + end +end + +local function GetJoinedChannels() + local out = {} + if not GetChannelList then return out end + + local raw = { GetChannelList() } + local i = 1 + local seen = {} + while i <= table.getn(raw) do + local id = raw[i] + local name = raw[i + 1] + if type(id) == "number" and type(name) == "string" and Trim(name) ~= "" then + table.insert(out, { id = id, name = name }) + local key = ChannelKey(name) + if key ~= "" then + seen[key] = true + end + end + i = i + 3 + end + + table.sort(out, function(a, b) + if a.id == b.id then + return string.lower(a.name) < string.lower(b.name) + end + return a.id < b.id + end) + + -- Add one representative per alias group that isn't already present, + -- plus individual channels that are not aliases. + -- For alias groups (like hc/hardcore/硬核), only add ONE representative + -- so we don't create duplicate conflicting entries. + local customChannels = { "hc", "硬核", "hardcore", "h", "交易", "综合", "世界防务", "本地防务", "world" } + local seenAliasGroups = {} + for _, cname in ipairs(customChannels) do + local key = ChannelKey(cname) + if key == "" then + -- skip + elseif seen[key] then + -- already in the joined list + local aliases = GetChannelAliasKeys(cname) + if aliases then + -- Mark the whole group as seen so no other alias gets added + local gIdx = CHANNEL_ALIAS_GROUP_INDEX[key] + if gIdx then seenAliasGroups[gIdx] = true end + end + else + local aliases = GetChannelAliasKeys(cname) + if aliases then + -- This is an alias channel - check if any alias is already seen/added + local gIdx = CHANNEL_ALIAS_GROUP_INDEX[key] + -- Also check substring aliases + if not gIdx then + for i, group in ipairs(CHANNEL_ALIAS_GROUPS) do + for _, a in ipairs(group) do + if string.find(key, a, 1, true) then + gIdx = i + break + end + end + if gIdx then break end + end + end + local alreadyInJoined = false + if gIdx then + for _, a in ipairs(CHANNEL_ALIAS_GROUPS[gIdx]) do + if seen[a] then + alreadyInJoined = true + break + end + end + end + if not alreadyInJoined and (not gIdx or not seenAliasGroups[gIdx]) then + table.insert(out, { id = 99, name = cname }) + seen[key] = true + if gIdx then seenAliasGroups[gIdx] = true end + end + else + table.insert(out, { id = 99, name = cname }) + seen[key] = true + end + end + end + + -- Include dynamically discovered channels (from actual chat messages). + -- Verify each with GetChannelName() to confirm the player is still in it. + for dName, _ in pairs(discoveredChannels) do + local key = ChannelKey(dName) + if key ~= "" and not seen[key] then + local aliasKeys = GetChannelAliasKeys(dName) + local aliasAlreadySeen = false + if aliasKeys then + for _, a in ipairs(aliasKeys) do + if seen[a] then aliasAlreadySeen = true; break end + end + end + if not aliasAlreadySeen then + if GetChannelName then + local chId, chRealName = GetChannelName(dName) + if type(chId) == "number" and chId > 0 then + table.insert(out, { id = chId, name = chRealName or dName }) + seen[key] = true + end + else + table.insert(out, { id = 99, name = dName }) + seen[key] = true + end + end + end + end + + return out +end + +local function MatchJoinedChannelName(rawName) + local key = ChannelKey(rawName) + if key == "" then return "" end + + local channels = GetJoinedChannels() + + -- First: exact key match + for i = 1, table.getn(channels) do + local name = channels[i] and channels[i].name + if ChannelKey(name) == key then + return name + end + end + + -- Second: alias-group match (e.g. "Hardcore" -> joined "hc") + local aliases = GetChannelAliasKeys(rawName) + if aliases then + for _, alias in ipairs(aliases) do + local aliasKey = ChannelKey(alias) + if aliasKey ~= "" then + for i = 1, table.getn(channels) do + local name = channels[i] and channels[i].name + if ChannelKey(name) == aliasKey then + return name + end + end + end + end + end + + return NormalizeChannelName(rawName) +end + +local function GetChannelNameFromMessageEvent(channelString, channelBaseName, channelName, fallback) + local candidates = { + channelName, + channelBaseName, + channelString, + arg9, + arg8, + arg4, + fallback, + } + + for i = 1, table.getn(candidates) do + local candidate = candidates[i] + if type(candidate) == "string" and candidate ~= "" then + local matched = MatchJoinedChannelName(candidate) + if matched ~= "" then + return matched + end + end + end + + for i = 1, table.getn(candidates) do + local candidate = candidates[i] + if type(candidate) == "string" and candidate ~= "" then + local normalized = NormalizeChannelName(candidate) + if normalized ~= "" then + return normalized + end + end + end + + return "" +end + +local function GetChannelNameFromChatLine(text) + if type(text) ~= "string" or text == "" then return nil end + + local _, _, label = string.find(text, "|Hchannel:[^|]+|h%[([^%]]+)%]|h") + if not label then + local raw = string.gsub(text, "|c%x%x%x%x%x%x%x%x", "") + raw = string.gsub(raw, "|r", "") + raw = string.gsub(raw, "^%s+", "") + _, _, label = string.find(raw, "^%[([^%]]+)%]") + end + if not label or label == "" then return nil end + + label = string.gsub(label, "^%d+%s*%.%s*", "") + return label +end + +local function GetTranslateFilterKeyForEvent(event) + return TRANSLATE_EVENT_FILTERS[event] +end + +local function ParseHardcoreDeathMessage(text) + if type(text) ~= "string" or text == "" then return nil end + local clean = string.gsub(text, "|c%x%x%x%x%x%x%x%x", "") + clean = string.gsub(clean, "|r", "") + + -- Check for Hardcore death signatures + if string.find(string.lower(clean), "hc news") or string.find(clean, "硬核") or string.find(clean, "死亡") or string.find(string.lower(clean), "has fallen") or string.find(string.lower(clean), "died") or string.find(string.lower(clean), "slain") then + -- Turtle English "Level 14" + local _, _, lvlStr = string.find(clean, "Level%s+(%d+)") + if lvlStr then return tonumber(lvlStr) end + + -- Chinese "14级" + local _, _, lvlStr2 = string.find(clean, "(%d+)%s*级") + if lvlStr2 then return tonumber(lvlStr2) end + + -- Fallback + local _, _, lvlStr3 = string.find(clean, "Level:%s+(%d+)") + if lvlStr3 then return tonumber(lvlStr3) end + + -- If it matches death signatures but no level is found, return 1 as a baseline to trigger the filter. + if string.find(string.lower(clean), "hc news") or (string.find(clean, "硬核") and (string.find(clean, "死亡") or string.find(clean, "has fallen"))) then + return 1 + end + end + return nil +end + +local function CleanTextForTranslation(text) + if type(text) ~= "string" then return "" end + local clean = text + clean = string.gsub(clean, "|c%x%x%x%x%x%x%x%x", "") + clean = string.gsub(clean, "|r", "") + clean = string.gsub(clean, "|H.-|h(.-)|h", "%1") + clean = string.gsub(clean, "^%s+", "") + clean = string.gsub(clean, "%s+$", "") + return clean +end + +local function ForceHide(object) + if not object then return end + object:Hide() + if object.SetAlpha then object:SetAlpha(0) end + if object.EnableMouse then object:EnableMouse(false) end + object.Show = Dummy +end + +local function ForceInvisible(object) + if not object then return end + object:Hide() + if object.SetAlpha then object:SetAlpha(0) end + if object.EnableMouse then object:EnableMouse(false) end +end + +local function CreateFont(parent, size, justify) + if SFrames and SFrames.CreateFontString then + return SFrames:CreateFontString(parent, size, justify) + end + + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont("Fonts\\ARIALN.TTF", size or 11, "OUTLINE") + fs:SetJustifyH(justify or "LEFT") + fs:SetTextColor(1, 1, 1) + return fs +end + +local configWidgetId = 0 + +local function NextConfigWidget(prefix) + configWidgetId = configWidgetId + 1 + return "SFramesChatCfg" .. prefix .. tostring(configWidgetId) +end + +local CFG_THEME = SFrames.ActiveTheme + +local function EnsureCfgBackdrop(frame) + if not frame then return end + if frame.sfCfgBackdrop then return end + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(frame) + elseif frame.SetBackdrop then + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + frame.sfCfgBackdrop = true +end + +local function HideCfgTexture(tex) + if not tex then return end + if tex.SetTexture then tex:SetTexture(nil) end + tex:Hide() +end + +local function StyleCfgButton(btn) + if not btn or btn.sfCfgStyled then return btn end + btn.sfCfgStyled = true + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + HideCfgTexture(btn.GetNormalTexture and btn:GetNormalTexture()) + HideCfgTexture(btn.GetPushedTexture and btn:GetPushedTexture()) + HideCfgTexture(btn.GetHighlightTexture and btn:GetHighlightTexture()) + HideCfgTexture(btn.GetDisabledTexture and btn:GetDisabledTexture()) + + local name = btn:GetName() or "" + for _, suffix in ipairs({ "Left", "Right", "Middle" }) do + local tex = _G[name .. suffix] + if tex then tex:SetAlpha(0) tex:Hide() end + end + + local function SetVisual(state) + local bg = CFG_THEME.buttonBg + local border = CFG_THEME.buttonBorder + local text = CFG_THEME.buttonText + if state == "hover" then + bg = CFG_THEME.buttonHoverBg + border = { CFG_THEME.buttonBorder[1] * 1.5, CFG_THEME.buttonBorder[2] * 1.5, CFG_THEME.buttonBorder[3] * 1.5, 0.98 } + text = { 1, 0.92, 0.96 } + elseif state == "down" then + bg = CFG_THEME.buttonDownBg + elseif state == "disabled" then + bg = CFG_THEME.buttonDisabledBg + text = CFG_THEME.buttonDisabledText + end + if btn.SetBackdropColor then + btn:SetBackdropColor(bg[1], bg[2], bg[3], bg[4]) + end + if btn.SetBackdropBorderColor then + btn:SetBackdropBorderColor(border[1], border[2], border[3], border[4]) + end + local fs = btn.GetFontString and btn:GetFontString() + if fs then + fs:SetTextColor(text[1], text[2], text[3]) + end + end + + btn.RefreshVisual = function() + if btn.IsEnabled and not btn:IsEnabled() then + SetVisual("disabled") + else + SetVisual("normal") + end + end + + local oldEnter = btn:GetScript("OnEnter") + local oldLeave = btn:GetScript("OnLeave") + local oldDown = btn:GetScript("OnMouseDown") + local oldUp = btn:GetScript("OnMouseUp") + + btn:SetScript("OnEnter", function() + if oldEnter then oldEnter() end + if this.IsEnabled and this:IsEnabled() then + SetVisual("hover") + end + end) + btn:SetScript("OnLeave", function() + if oldLeave then oldLeave() end + if this.IsEnabled and this:IsEnabled() then + SetVisual("normal") + end + end) + btn:SetScript("OnMouseDown", function() + if oldDown then oldDown() end + if this.IsEnabled and this:IsEnabled() then + SetVisual("down") + end + end) + btn:SetScript("OnMouseUp", function() + if oldUp then oldUp() end + if this.IsEnabled and this:IsEnabled() then + SetVisual("hover") + end + end) + + btn:RefreshVisual() + return btn +end + +local function StyleCfgCheck(cb) + if not cb or cb.sfCfgStyled then return cb end + cb.sfCfgStyled = true + + local box = CreateFrame("Frame", nil, cb) + box:SetPoint("TOPLEFT", cb, "TOPLEFT", 2, -2) + box:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", -2, 2) + local boxLevel = (cb:GetFrameLevel() or 1) - 1 + if boxLevel < 0 then boxLevel = 0 end + box:SetFrameLevel(boxLevel) + EnsureCfgBackdrop(box) + if box.SetBackdropColor then + box:SetBackdropColor(CFG_THEME.checkBg[1], CFG_THEME.checkBg[2], CFG_THEME.checkBg[3], CFG_THEME.checkBg[4]) + end + if box.SetBackdropBorderColor then + box:SetBackdropBorderColor(CFG_THEME.checkBorder[1], CFG_THEME.checkBorder[2], CFG_THEME.checkBorder[3], CFG_THEME.checkBorder[4]) + end + cb.sfCfgBox = box + + HideCfgTexture(cb.GetNormalTexture and cb:GetNormalTexture()) + HideCfgTexture(cb.GetPushedTexture and cb:GetPushedTexture()) + HideCfgTexture(cb.GetHighlightTexture and cb:GetHighlightTexture()) + HideCfgTexture(cb.GetDisabledTexture and cb:GetDisabledTexture()) + + if cb.SetCheckedTexture then + cb:SetCheckedTexture("Interface\\Buttons\\WHITE8X8") + end + local checked = cb.GetCheckedTexture and cb:GetCheckedTexture() + if checked then + checked:ClearAllPoints() + checked:SetPoint("TOPLEFT", cb, "TOPLEFT", 5, -5) + checked:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", -5, 5) + if checked.SetDrawLayer then + checked:SetDrawLayer("OVERLAY", 7) + end + if checked.SetAlpha then + checked:SetAlpha(1) + end + checked:SetVertexColor(CFG_THEME.checkFill[1], CFG_THEME.checkFill[2], CFG_THEME.checkFill[3], CFG_THEME.checkFill[4]) + end + + if cb.SetDisabledCheckedTexture then + cb:SetDisabledCheckedTexture("Interface\\Buttons\\WHITE8X8") + end + local disChecked = cb.GetDisabledCheckedTexture and cb:GetDisabledCheckedTexture() + if disChecked then + disChecked:ClearAllPoints() + disChecked:SetPoint("TOPLEFT", cb, "TOPLEFT", 5, -5) + disChecked:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", -5, 5) + if disChecked.SetDrawLayer then + disChecked:SetDrawLayer("OVERLAY", 6) + end + disChecked:SetVertexColor(0.5, 0.5, 0.55, 0.8) + end + + local label = _G[cb:GetName() .. "Text"] + if label then + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + + local oldEnter = cb:GetScript("OnEnter") + local oldLeave = cb:GetScript("OnLeave") + cb:SetScript("OnEnter", function() + if oldEnter then oldEnter() end + if this.sfCfgBox and this.sfCfgBox.SetBackdropBorderColor then + this.sfCfgBox:SetBackdropBorderColor(CFG_THEME.checkHoverBorder[1], CFG_THEME.checkHoverBorder[2], CFG_THEME.checkHoverBorder[3], CFG_THEME.checkHoverBorder[4]) + end + end) + cb:SetScript("OnLeave", function() + if oldLeave then oldLeave() end + if this.sfCfgBox and this.sfCfgBox.SetBackdropBorderColor then + this.sfCfgBox:SetBackdropBorderColor(CFG_THEME.checkBorder[1], CFG_THEME.checkBorder[2], CFG_THEME.checkBorder[3], CFG_THEME.checkBorder[4]) + end + end) + return cb +end + +local function StyleCfgSlider(slider, low, high, text) + if not slider or slider.sfCfgStyled then return slider end + slider.sfCfgStyled = true + + local regions = { slider:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.GetObjectType and region:GetObjectType() == "Texture" then + region:SetTexture(nil) + end + end + + local track = slider:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetPoint("LEFT", slider, "LEFT", 0, 0) + track:SetPoint("RIGHT", slider, "RIGHT", 0, 0) + track:SetHeight(4) + track:SetVertexColor(CFG_THEME.sliderTrack[1], CFG_THEME.sliderTrack[2], CFG_THEME.sliderTrack[3], CFG_THEME.sliderTrack[4]) + slider.sfTrack = track + + local fill = slider:CreateTexture(nil, "ARTWORK") + fill:SetTexture("Interface\\Buttons\\WHITE8X8") + fill:SetPoint("LEFT", track, "LEFT", 0, 0) + fill:SetPoint("TOP", track, "TOP", 0, 0) + fill:SetPoint("BOTTOM", track, "BOTTOM", 0, 0) + fill:SetWidth(1) + fill:SetVertexColor(CFG_THEME.sliderFill[1], CFG_THEME.sliderFill[2], CFG_THEME.sliderFill[3], CFG_THEME.sliderFill[4]) + slider.sfFill = fill + + if slider.SetThumbTexture then + slider:SetThumbTexture("Interface\\Buttons\\WHITE8X8") + end + local thumb = slider.GetThumbTexture and slider:GetThumbTexture() + if thumb then + thumb:SetWidth(8) + thumb:SetHeight(16) + thumb:SetVertexColor(CFG_THEME.sliderThumb[1], CFG_THEME.sliderThumb[2], CFG_THEME.sliderThumb[3], CFG_THEME.sliderThumb[4]) + end + + local function UpdateFill() + local minValue, maxValue = slider:GetMinMaxValues() + local value = slider:GetValue() or minValue + local pct = 0 + if maxValue > minValue then + pct = (value - minValue) / (maxValue - minValue) + end + pct = Clamp(pct, 0, 1) + local width = math.floor((slider:GetWidth() or 1) * pct + 0.5) + if width < 1 then width = 1 end + slider.sfFill:SetWidth(width) + end + + local oldChanged = slider:GetScript("OnValueChanged") + slider:SetScript("OnValueChanged", function() + if oldChanged then oldChanged() end + UpdateFill() + end) + UpdateFill() + + if low then + low:SetTextColor(0.74, 0.72, 0.8) + low:ClearAllPoints() + low:SetPoint("TOPLEFT", slider, "BOTTOMLEFT", 0, 0) + end + if high then + high:SetTextColor(0.74, 0.72, 0.8) + high:ClearAllPoints() + high:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", 0, 0) + end + if text then + text:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + text:ClearAllPoints() + text:SetPoint("BOTTOM", slider, "TOP", 0, 2) + end + return slider +end + +local function StyleCfgEditBox(eb) + if not eb or eb.sfCfgStyled then return eb end + eb.sfCfgStyled = true + + local name = eb:GetName() + if name and name ~= "" then + HideCfgTexture(_G[name .. "Left"]) + HideCfgTexture(_G[name .. "Middle"]) + HideCfgTexture(_G[name .. "Right"]) + end + + local bg = CreateFrame("Frame", nil, eb) + bg:SetPoint("TOPLEFT", eb, "TOPLEFT", -3, 3) + bg:SetPoint("BOTTOMRIGHT", eb, "BOTTOMRIGHT", 3, -3) + bg:SetFrameLevel((eb:GetFrameLevel() or 1) - 1) + EnsureCfgBackdrop(bg) + if bg.SetBackdropColor then + bg:SetBackdropColor(0.13, 0.14, 0.17, 0.94) + end + if bg.SetBackdropBorderColor then + bg:SetBackdropBorderColor(0.52, 0.5, 0.58, 0.88) + end + eb.sfCfgBg = bg + if eb.SetTextInsets then + eb:SetTextInsets(4, 4, 0, 0) + end + if eb.SetTextColor then + eb:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + return eb +end + +local function CreateCfgSection(parent, title, x, y, width, height, font) + local sec = CreateFrame("Frame", NextConfigWidget("Section"), parent) + sec:SetWidth(width) + sec:SetHeight(height) + sec:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + + EnsureCfgBackdrop(sec) + if sec.SetBackdropColor then + sec:SetBackdropColor(CFG_THEME.sectionBg[1], CFG_THEME.sectionBg[2], CFG_THEME.sectionBg[3], CFG_THEME.sectionBg[4]) + end + if sec.SetBackdropBorderColor then + sec:SetBackdropBorderColor(CFG_THEME.sectionBorder[1], CFG_THEME.sectionBorder[2], CFG_THEME.sectionBorder[3], CFG_THEME.sectionBorder[4]) + end + + local header = sec:CreateFontString(nil, "OVERLAY") + header:SetFont(font or "Fonts\\ARIALN.TTF", 11, "OUTLINE") + header:SetPoint("TOPLEFT", sec, "TOPLEFT", 8, -8) + header:SetText(title or "") + header:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + local div = sec:CreateTexture(nil, "ARTWORK") + div:SetTexture("Interface\\Buttons\\WHITE8X8") + div:SetHeight(1) + div:SetPoint("TOPLEFT", sec, "TOPLEFT", 8, -24) + div:SetPoint("TOPRIGHT", sec, "TOPRIGHT", -8, -24) + div:SetVertexColor(CFG_THEME.sectionBorder[1], CFG_THEME.sectionBorder[2], CFG_THEME.sectionBorder[3], 0.6) + + return sec +end + +local function CreateCfgButton(parent, text, x, y, width, height, onClick) + local btn = CreateFrame("Button", NextConfigWidget("Button"), parent, "UIPanelButtonTemplate") + btn:SetWidth(width) + btn:SetHeight(height) + btn:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + btn:SetText(text or "") + btn:SetScript("OnClick", onClick) + StyleCfgButton(btn) + return btn +end + +local function AddBtnIcon(btn, iconKey, size, align) + if not (SFrames and SFrames.CreateIcon) then return end + local sz = size or 12 + local gap = 3 + local ico = SFrames:CreateIcon(btn, iconKey, sz) + ico:SetDrawLayer("OVERLAY") + btn.nanamiIcon = ico + local fs = btn:GetFontString() + if fs then + fs:ClearAllPoints() + if align == "left" then + ico:SetPoint("LEFT", btn, "LEFT", 8, 0) + fs:SetPoint("LEFT", ico, "RIGHT", gap, 0) + fs:SetPoint("RIGHT", btn, "RIGHT", -4, 0) + fs:SetJustifyH("LEFT") + else + fs:SetPoint("CENTER", btn, "CENTER", (sz + gap) / 2, 0) + ico:SetPoint("RIGHT", fs, "LEFT", -gap, 0) + end + else + ico:SetPoint("CENTER", btn, "CENTER", 0, 0) + end +end + +local function CreateCfgCheck(parent, text, x, y, getter, setter, onChanged) + local cb = CreateFrame("CheckButton", NextConfigWidget("Check"), parent, "UICheckButtonTemplate") + cb:SetWidth(20) + cb:SetHeight(20) + cb:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + StyleCfgCheck(cb) + local label = _G[cb:GetName() .. "Text"] + if label then + label:SetText(text or "") + label:SetJustifyH("LEFT") + end + + local internal = false + cb:SetScript("OnClick", function() + if internal then return end + local checked = (this:GetChecked() and true or false) + if setter then setter(checked) end + if onChanged then onChanged(checked) end + end) + + cb.Refresh = function() + internal = true + cb:SetChecked(getter and getter() and true or false) + internal = false + end + + cb:Refresh() + return cb +end + +local function CreateCfgSlider(parent, labelText, x, y, width, minValue, maxValue, step, getter, setter, formatter, onChanged) + local sliderName = NextConfigWidget("Slider") + local slider = CreateFrame("Slider", sliderName, parent, "OptionsSliderTemplate") + slider:SetWidth(width) + slider:SetHeight(26) + slider:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + slider:SetMinMaxValues(minValue, maxValue) + slider:SetValueStep(step) + if slider.SetObeyStepOnDrag then slider:SetObeyStepOnDrag(true) end + + local low = _G[sliderName .. "Low"] + local high = _G[sliderName .. "High"] + local text = _G[sliderName .. "Text"] + if low then low:SetText(tostring(minValue)) end + if high then high:SetText(tostring(maxValue)) end + + local internal = false + local function UpdateLabel(value) + local display = formatter and formatter(value) or value + if text then text:SetText((labelText or "") .. ": " .. tostring(display)) end + end + + slider:SetScript("OnValueChanged", function() + if internal then return end + local raw = this:GetValue() or minValue or 0 + local safeStep = step or 1 + local value + if safeStep >= 1 then + value = math.floor(raw + 0.5) + else + if safeStep == 0 then safeStep = 1 end + value = math.floor(raw / safeStep + 0.5) * safeStep + end + value = Clamp(value, minValue, maxValue) + if setter then setter(value) end + UpdateLabel(value) + if onChanged then onChanged(value) end + end) + + slider.Refresh = function() + local value = tonumber(getter and getter() or minValue) or minValue + value = Clamp(value, minValue, maxValue) + internal = true + slider:SetValue(value) + internal = false + UpdateLabel(value) + end + + StyleCfgSlider(slider, low, high, text) + slider:Refresh() + return slider +end + +local function CreateCfgEditBox(parent, x, y, width, height, getter, setter) + local eb = CreateFrame("EditBox", NextConfigWidget("Edit"), parent, "InputBoxTemplate") + eb:SetWidth(width) + eb:SetHeight(height) + eb:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + eb:SetAutoFocus(false) + StyleCfgEditBox(eb) + eb:SetScript("OnEnterPressed", function() + if setter then setter(this:GetText() or "") end + this:ClearFocus() + end) + eb:SetScript("OnEscapePressed", function() + this:ClearFocus() + if getter then this:SetText(getter() or "") end + end) + eb.Refresh = function() + if getter then eb:SetText(getter() or "") end + end + eb:Refresh() + return eb +end + +local function BuildDefaultTab(id, name) + return { + id = id, + name = name or ("Tab" .. tostring(id)), + filters = CopyTable(DEFAULT_FILTERS), + channelFilters = {}, + translateFilters = BuildDefaultTranslateFilters(), + channelTranslateFilters = {}, + } +end + +local function BuildCombatTab(id, name) + local tab = BuildDefaultTab(id, name or DEFAULT_COMBAT_TAB_NAME) + tab.kind = "combat" + tab.filters.say = false + tab.filters.yell = false + tab.filters.emote = false + tab.filters.guild = false + tab.filters.party = false + tab.filters.raid = false + tab.filters.whisper = false + tab.filters.channel = false + tab.filters.system = true + tab.filters.loot = true + tab.filters.money = true + return tab +end + +local function IsCombatTab(tab) + if type(tab) ~= "table" then return false end + if tab.kind == "combat" then return true end + + local nameKey = ChannelKey(tab.name) + if nameKey == "combat" then return true end + if nameKey == "combat log" then return true end + + local localizedKey = ChannelKey(DEFAULT_COMBAT_TAB_NAME) + if localizedKey ~= "" and nameKey == localizedKey then return true end + return false +end + +local function SanitizeTab(tab, fallbackId, fallbackName) + if type(tab) ~= "table" then tab = {} end + if type(tab.id) ~= "number" then tab.id = fallbackId or 1 end + if type(tab.kind) ~= "string" then tab.kind = nil end + + if type(tab.name) ~= "string" or tab.name == "" then + tab.name = fallbackName or ("Tab" .. tostring(tab.id)) + else + tab.name = Trim(tab.name) + if tab.name == "" then + tab.name = fallbackName or ("Tab" .. tostring(tab.id)) + end + end + + if type(tab.filters) ~= "table" then tab.filters = {} end + for key, defaultValue in pairs(DEFAULT_FILTERS) do + if tab.filters[key] == nil then + tab.filters[key] = defaultValue + else + tab.filters[key] = (tab.filters[key] == true) + end + end + + if type(tab.channelFilters) ~= "table" then tab.channelFilters = {} end + -- Pass 1: normalize all keys and collect alias group values + local cfGroupValues = {} -- gIdx -> value (last-write wins: true beats false) + for key, value in pairs(tab.channelFilters) do + if type(key) ~= "string" then + tab.channelFilters[key] = nil + else + local normalized = ChannelKey(key) + if normalized == "" then + tab.channelFilters[key] = nil + else + local aliases = GetChannelAliasKeys(normalized) + if aliases then + -- Find this key's group index + local gIdx = CHANNEL_ALIAS_GROUP_INDEX[normalized] + if not gIdx then + for gi, group in ipairs(CHANNEL_ALIAS_GROUPS) do + for _, a in ipairs(group) do + if string.find(normalized, a, 1, true) then gIdx = gi break end + end + if gIdx then break end + end + end + if gIdx then + local enabled = (value == true) + -- true overrides false (if any alias is enabled, keep enabled) + if cfGroupValues[gIdx] == nil or enabled then + cfGroupValues[gIdx] = enabled + end + end + tab.channelFilters[key] = nil + else + local enabled = (value == true) + if normalized ~= key then + tab.channelFilters[key] = nil + tab.channelFilters[normalized] = enabled + else + tab.channelFilters[key] = enabled + end + end + end + end + end + -- Pass 2: write canonical key for each alias group that has a saved value + for gi, enabled in pairs(cfGroupValues) do + local group = CHANNEL_ALIAS_GROUPS[gi] + if group then + local canonicalKey = ChannelKey(group[1] or "") + if canonicalKey ~= "" then + tab.channelFilters[canonicalKey] = enabled + end + end + end + + if type(tab.translateFilters) ~= "table" then tab.translateFilters = {} end + for key in pairs(TRANSLATE_FILTER_KEYS) do + tab.translateFilters[key] = (tab.translateFilters[key] == true) + end + for key, value in pairs(tab.translateFilters) do + if not TRANSLATE_FILTER_KEYS[key] then + tab.translateFilters[key] = nil + else + tab.translateFilters[key] = (value == true) + end + end + + if type(tab.channelTranslateFilters) ~= "table" then tab.channelTranslateFilters = {} end + local ctfGroupValues = {} + for key, value in pairs(tab.channelTranslateFilters) do + if type(key) ~= "string" then + tab.channelTranslateFilters[key] = nil + else + local normalized = ChannelKey(key) + if normalized == "" then + tab.channelTranslateFilters[key] = nil + else + local aliases = GetChannelAliasKeys(normalized) + if aliases then + local gIdx = CHANNEL_ALIAS_GROUP_INDEX[normalized] + if not gIdx then + for gi, group in ipairs(CHANNEL_ALIAS_GROUPS) do + for _, a in ipairs(group) do + if string.find(normalized, a, 1, true) then gIdx = gi break end + end + if gIdx then break end + end + end + if gIdx then + local enabled = (value == true) + if ctfGroupValues[gIdx] == nil or enabled then + ctfGroupValues[gIdx] = enabled + end + end + tab.channelTranslateFilters[key] = nil + else + local enabled = (value == true) + if normalized ~= key then + tab.channelTranslateFilters[key] = nil + tab.channelTranslateFilters[normalized] = enabled + else + tab.channelTranslateFilters[key] = enabled + end + end + end + end + end + for gi, enabled in pairs(ctfGroupValues) do + local group = CHANNEL_ALIAS_GROUPS[gi] + if group then + local canonicalKey = ChannelKey(group[1] or "") + if canonicalKey ~= "" then + tab.channelTranslateFilters[canonicalKey] = enabled + end + end + end + return tab +end + +local function EnsureProtectedTabs(db, maxId) + local tabs = db.tabs + local generalIdx = nil + local combatIdx = nil + + for i = 1, table.getn(tabs) do + if IsCombatTab(tabs[i]) then + if not combatIdx then combatIdx = i end + else + if not generalIdx then generalIdx = i end + end + end + + local function AllocTabId() + local id = db.nextTabId + if type(id) ~= "number" or id <= maxId then + id = maxId + 1 + end + db.nextTabId = id + 1 + maxId = id + return id + end + + if not generalIdx then + local tab = BuildDefaultTab(AllocTabId(), GENERAL or "General") + tab.kind = "general" + table.insert(tabs, 1, tab) + generalIdx = 1 + if combatIdx then combatIdx = combatIdx + 1 end + end + + if not combatIdx then + local tab = BuildCombatTab(AllocTabId(), DEFAULT_COMBAT_TAB_NAME) + table.insert(tabs, tab) + combatIdx = table.getn(tabs) + end + + for i = 1, table.getn(tabs) do + local tab = tabs[i] + if i == generalIdx then + tab.kind = "general" + tab.locked = true + if Trim(tab.name) == "" then tab.name = GENERAL or "General" end + elseif i == combatIdx then + tab.kind = "combat" + tab.locked = true + if Trim(tab.name) == "" then tab.name = DEFAULT_COMBAT_TAB_NAME end + else + if tab.kind == "general" or tab.kind == "combat" then tab.kind = nil end + tab.locked = nil + end + end + + return maxId +end + +local function EnsureDB() + if not SFramesDB then SFramesDB = {} end + if type(SFramesDB.Chat) ~= "table" then SFramesDB.Chat = {} end + + local db = SFramesDB.Chat + if db.enable == nil then db.enable = DEFAULTS.enable end + if db.showBorder == nil then db.showBorder = DEFAULTS.showBorder end + if db.borderClassColor == nil then db.borderClassColor = DEFAULTS.borderClassColor end + if db.showPlayerLevel == nil then db.showPlayerLevel = DEFAULTS.showPlayerLevel end + if type(db.width) ~= "number" then db.width = DEFAULTS.width end + if type(db.height) ~= "number" then db.height = DEFAULTS.height end + if type(db.scale) ~= "number" then db.scale = DEFAULTS.scale end + if type(db.fontSize) ~= "number" then db.fontSize = DEFAULTS.fontSize end + if type(db.sidePadding) ~= "number" then db.sidePadding = DEFAULTS.sidePadding end + if type(db.topPadding) ~= "number" then db.topPadding = DEFAULTS.topPadding end + if type(db.bottomPadding) ~= "number" then db.bottomPadding = DEFAULTS.bottomPadding end + if type(db.bgAlpha) ~= "number" then db.bgAlpha = DEFAULTS.bgAlpha end + if type(db.editBoxPosition) ~= "string" then db.editBoxPosition = DEFAULTS.editBoxPosition end + if type(db.editBoxX) ~= "number" then db.editBoxX = DEFAULTS.editBoxX end + if type(db.editBoxY) ~= "number" then db.editBoxY = DEFAULTS.editBoxY end + if type(db.layoutVersion) ~= "number" then db.layoutVersion = 1 end + if db.layoutVersion < 2 then + db.topPadding = DEFAULTS.topPadding + db.layoutVersion = 2 + end + if db.layoutVersion < 3 then + db.showBorder = false + db.layoutVersion = 3 + end + + if type(db.tabs) ~= "table" or table.getn(db.tabs) == 0 then + db.tabs = { + BuildDefaultTab(1, GENERAL or "General"), + BuildCombatTab(2, DEFAULT_COMBAT_TAB_NAME), + } + end + + local maxId = 0 + for i = 1, table.getn(db.tabs) do + db.tabs[i] = SanitizeTab(db.tabs[i], i, "Tab" .. tostring(i)) + if IsCombatTab(db.tabs[i]) then + db.tabs[i].kind = "combat" + end + if db.tabs[i].id > maxId then maxId = db.tabs[i].id end + end + + if type(db.nextTabId) ~= "number" or db.nextTabId <= maxId then + db.nextTabId = maxId + 1 + end + + if db.layoutVersion < 4 then + local hasCombat = false + for i = 1, table.getn(db.tabs) do + if IsCombatTab(db.tabs[i]) then + hasCombat = true + break + end + end + + if not hasCombat then + local id = db.nextTabId + if type(id) ~= "number" or id <= maxId then + id = maxId + 1 + end + table.insert(db.tabs, BuildCombatTab(id, DEFAULT_COMBAT_TAB_NAME)) + db.nextTabId = id + 1 + end + + db.layoutVersion = 4 + end + + if type(db.activeTab) ~= "number" then db.activeTab = DEFAULTS.activeTab end + db.activeTab = Clamp(math.floor(db.activeTab + 0.5), 1, table.getn(db.tabs)) + + if db.layoutVersion < 5 then + local activeTab = db.tabs[db.activeTab] + if IsCombatTab(activeTab) then + for i = 1, table.getn(db.tabs) do + if not IsCombatTab(db.tabs[i]) then + db.activeTab = i + break + end + end + end + db.layoutVersion = 5 + end + + maxId = EnsureProtectedTabs(db, maxId) + if type(db.nextTabId) ~= "number" or db.nextTabId <= maxId then + db.nextTabId = maxId + 1 + end + if db.layoutVersion < 6 then + db.layoutVersion = 6 + end + + db.activeTab = Clamp(math.floor((db.activeTab or 1) + 0.5), 1, table.getn(db.tabs)) + return db +end + +local popupFrameCache = {} + +local function RememberPopupFrame(whichKey, popup) + if type(whichKey) ~= "string" or whichKey == "" then return end + if type(popup) ~= "table" then return end + popupFrameCache[whichKey] = popup +end + +local function GetPopupEditBox(popup) + if not popup then return nil end + if popup.editBox then return popup.editBox end + if popup.GetName then + local eb = _G[popup:GetName() .. "EditBox"] + if eb then return eb end + end + return nil +end + +local function GetPopupEditText(popup) + local eb = GetPopupEditBox(popup) + if eb and eb.GetText then + return eb:GetText() or "" + end + return "" +end + +local function SetPopupEditText(popup, text) + local eb = GetPopupEditBox(popup) + if eb and eb.SetText then + eb:SetText(text or "") + end +end + +local function FocusPopupEdit(popup) + local eb = GetPopupEditBox(popup) + if not eb then return end + if eb.SetFocus then eb:SetFocus() end + if eb.HighlightText then eb:HighlightText() end +end + +local function ResolvePopupFrame(whichKey, dialog) + if dialog and dialog.GetParent then + local parent = dialog:GetParent() + if parent and parent.which == whichKey and GetPopupEditBox(parent) then + RememberPopupFrame(whichKey, parent) + return parent + end + end + + if dialog and dialog.editBox then + RememberPopupFrame(whichKey, dialog) + return dialog + end + + if this then + if this.editBox then + RememberPopupFrame(whichKey, this) + return this + end + + if this.GetParent then + local parent = this:GetParent() + if parent and parent.which == whichKey and GetPopupEditBox(parent) then + RememberPopupFrame(whichKey, parent) + return parent + end + end + end + + local cached = popupFrameCache[whichKey] + if cached and cached.which == whichKey and GetPopupEditBox(cached) then + return cached + end + + if StaticPopup_FindVisible then + local popup = StaticPopup_FindVisible(whichKey) + if popup then + RememberPopupFrame(whichKey, popup) + return popup + end + end + + for i = 1, 4 do + local popup = _G["StaticPopup" .. tostring(i)] + if popup and popup.which == whichKey then + RememberPopupFrame(whichKey, popup) + return popup + end + end + + return dialog +end + +local function EnsurePopupDialogs() + if not StaticPopupDialogs then return end + + if not StaticPopupDialogs["SFRAMES_CHAT_NEW_TAB"] then + StaticPopupDialogs["SFRAMES_CHAT_NEW_TAB"] = { + text = "请输入新标签标题", + button1 = ACCEPT or "确定", + button2 = CANCEL or "取消", + hasEditBox = 1, + maxLetters = 32, + timeout = 0, + whileDead = 1, + hideOnEscape = 1, + preferredIndex = 3, + OnShow = function(dialog) + local popup = ResolvePopupFrame("SFRAMES_CHAT_NEW_TAB", dialog) + if not popup then return end + local suggested = "Tab" + if SFrames and SFrames.Chat and SFrames.Chat.GetNextTabName then + suggested = SFrames.Chat:GetNextTabName() + end + SetPopupEditText(popup, suggested) + FocusPopupEdit(popup) + end, + OnAccept = function(dialog) + local popup = ResolvePopupFrame("SFRAMES_CHAT_NEW_TAB", dialog) + local text = "" + if popup then + text = Trim(GetPopupEditText(popup)) + end + if text == "" then + if SFrames and SFrames.Chat and SFrames.Chat.GetNextTabName then + text = SFrames.Chat:GetNextTabName() + else + text = "Tab" + end + end + if SFrames and SFrames.Chat then + SFrames.Chat:AddTab(text) + end + end, + } + end + + if not StaticPopupDialogs["SFRAMES_CHAT_RENAME_TAB"] then + StaticPopupDialogs["SFRAMES_CHAT_RENAME_TAB"] = { + text = "重命名标签", + button1 = ACCEPT or "确定", + button2 = CANCEL or "取消", + hasEditBox = 1, + maxLetters = 32, + timeout = 0, + whileDead = 1, + hideOnEscape = 1, + preferredIndex = 3, + OnShow = function(dialog, data) + local popup = ResolvePopupFrame("SFRAMES_CHAT_RENAME_TAB", dialog) + if not popup then return end + local idx = tonumber(data or (popup and popup.data) or (SFrames and SFrames.Chat and SFrames.Chat.pendingRenameIndex)) + local name = "" + if SFrames and SFrames.Chat then + local tab = nil + if type(idx) == "number" then + tab = SFrames.Chat:GetTab(idx) + else + tab = SFrames.Chat:GetActiveTab() + end + if tab and tab.name then + name = tab.name + end + end + SetPopupEditText(popup, name) + FocusPopupEdit(popup) + end, + OnAccept = function(dialog, data) + local popup = ResolvePopupFrame("SFRAMES_CHAT_RENAME_TAB", dialog) + if not popup then return end + local idx = tonumber(data or (popup and popup.data) or (SFrames and SFrames.Chat and SFrames.Chat.pendingRenameIndex)) + local text = GetPopupEditText(popup) + if not (SFrames and SFrames.Chat) then return end + if type(idx) == "number" then + SFrames.Chat:RenameTab(idx, text) + else + SFrames.Chat:RenameActiveTab(text) + end + SFrames.Chat.pendingRenameIndex = nil + end, + } + end + + if not StaticPopupDialogs["SFRAMES_CHAT_RELOAD_PROMPT"] then + StaticPopupDialogs["SFRAMES_CHAT_RELOAD_PROMPT"] = { + text = "更改聊天界面的启用状态需要重载界面(Reload UI)。\n确定要现在重载吗?", + button1 = ACCEPT or "确定", + button2 = CANCEL or "取消", + timeout = 0, + whileDead = 1, + hideOnEscape = 1, + OnAccept = function() + ReloadUI() + end, + OnCancel = function() + -- 恢复之前的勾选状态 + local db = SFrames.Chat:EnsureDB() + db.enable = not db.enable + SFrames.Chat:RefreshConfigFrame() + end, + } + end +end + +local function NewDropDownInfo() + if UIDropDownMenu_CreateInfo then + return UIDropDownMenu_CreateInfo() + end + return {} +end + +SFrames.Chat.FilterDefs = FILTER_DEFS + +function SFrames.Chat:EnsureDB() + return EnsureDB() +end + +function SFrames.Chat:GetConfig() + local db = EnsureDB() + local editBoxPosition = tostring(db.editBoxPosition or DEFAULTS.editBoxPosition) + if editBoxPosition ~= "top" and editBoxPosition ~= "bottom" and editBoxPosition ~= "free" then + editBoxPosition = DEFAULTS.editBoxPosition + end + + return { + enable = db.enable ~= false, + showBorder = db.showBorder ~= false, + borderClassColor = db.borderClassColor == true, + width = math.floor(Clamp(db.width, 320, 900) + 0.5), + height = math.floor(Clamp(db.height, 120, 460) + 0.5), + scale = Clamp(db.scale, 0.75, 1.4), + fontSize = math.floor(Clamp(db.fontSize, 10, 18) + 0.5), + sidePadding = math.floor(Clamp(db.sidePadding, 6, 20) + 0.5), + topPadding = math.floor(Clamp(db.topPadding, 24, 64) + 0.5), + bottomPadding = math.floor(Clamp(db.bottomPadding, 4, 18) + 0.5), + bgAlpha = Clamp(db.bgAlpha, 0, 1), + editBoxPosition = editBoxPosition, + editBoxX = tonumber(db.editBoxX) or DEFAULTS.editBoxX, + editBoxY = tonumber(db.editBoxY) or DEFAULTS.editBoxY, + } +end + +function SFrames.Chat:GetTabs() + return EnsureDB().tabs +end + +function SFrames.Chat:GetActiveTabIndex() + local db = EnsureDB() + return Clamp(math.floor((db.activeTab or 1) + 0.5), 1, table.getn(db.tabs)) +end + +function SFrames.Chat:GetActiveTab() + local db = EnsureDB() + return db.tabs[self:GetActiveTabIndex()] +end + +function SFrames.Chat:GetTab(index) + local db = EnsureDB() + index = Clamp(math.floor(tonumber(index) or 1), 1, table.getn(db.tabs)) + return db.tabs[index], index +end + +function SFrames.Chat:GetNextTabName() + local db = EnsureDB() + local id = db.nextTabId or (table.getn(db.tabs) + 1) + return "Tab" .. tostring(id) +end + +function SFrames.Chat:IsTabProtected(index) + local tab = self:GetTab(index) + if not tab then return false end + if tab.locked == true then return true end + if tab.kind == "general" or tab.kind == "combat" then return true end + if IsCombatTab(tab) then return true end + return false +end + +function SFrames.Chat:GetJoinedChannels() + return GetJoinedChannels() +end + +function SFrames.Chat:GetTabChannelFilter(index, channelName) + local tab = self:GetTab(index) + if not tab then return true end + if type(tab.channelFilters) ~= "table" then tab.channelFilters = {} end + local key = ChannelKey(channelName) + if key == "" then return true end + + -- Direct lookup first + local saved = tab.channelFilters[key] + if saved ~= nil then + return saved == true + end + + -- Alias-aware lookup: if this channel belongs to an alias group, + -- check if any alias key has been explicitly saved. + local aliases = GetChannelAliasKeys(channelName) + if aliases then + for _, alias in ipairs(aliases) do + local aliasKey = ChannelKey(alias) + if aliasKey ~= "" and aliasKey ~= key then + local aliasSaved = tab.channelFilters[aliasKey] + if aliasSaved ~= nil then + return aliasSaved == true + end + end + end + -- No explicit save found for any alias; default to blocked + return false + end + + -- Not an ignored channel; default to shown + return true +end + +function SFrames.Chat:GetTabTranslateFilter(index, key) + local tab = self:GetTab(index) + if not tab or not TRANSLATE_FILTER_KEYS[key] then return false end + if type(tab.translateFilters) ~= "table" then + tab.translateFilters = BuildDefaultTranslateFilters() + end + return tab.translateFilters[key] == true +end + +function SFrames.Chat:SetTabTranslateFilter(index, key, enabled) + local tab = self:GetTab(index) + if not tab or not TRANSLATE_FILTER_KEYS[key] then return end + if type(tab.translateFilters) ~= "table" then + tab.translateFilters = BuildDefaultTranslateFilters() + end + tab.translateFilters[key] = (enabled == true) + if self.translateConfigFrame and self.RefreshTranslateConfigFrame then + self:RefreshTranslateConfigFrame() + end + self:NotifyConfigUI() +end + +function SFrames.Chat:SetActiveTabTranslateFilter(key, enabled) + self:SetTabTranslateFilter(self:GetActiveTabIndex(), key, enabled) +end + +function SFrames.Chat:GetTabChannelTranslateFilter(index, channelName) + local tab = self:GetTab(index) + if not tab then return false end + if type(tab.channelTranslateFilters) ~= "table" then tab.channelTranslateFilters = {} end + local key = ChannelKey(channelName) + if key == "" then return false end + if not self:GetTabChannelFilter(index, channelName) then + return false + end + -- Direct lookup + local saved = tab.channelTranslateFilters[key] + if saved ~= nil then return saved == true end + -- Alias-aware lookup + local aliases = GetChannelAliasKeys(channelName) + if aliases then + for _, alias in ipairs(aliases) do + local ak = ChannelKey(alias) + if ak ~= "" and ak ~= key then + local aliasSaved = tab.channelTranslateFilters[ak] + if aliasSaved ~= nil then return aliasSaved == true end + end + end + end + return false +end + +function SFrames.Chat:SetTabChannelTranslateFilter(index, channelName, enabled) + local tab = self:GetTab(index) + if not tab then return end + if type(tab.channelTranslateFilters) ~= "table" then tab.channelTranslateFilters = {} end + local key = ChannelKey(channelName) + if key == "" then return end + -- Save under canonical alias key and clear other alias keys + local canonicalKey = key + local aliases = GetChannelAliasKeys(channelName) + if aliases then + local firstAlias = ChannelKey(aliases[1] or "") + if firstAlias ~= "" then canonicalKey = firstAlias end + for _, alias in ipairs(aliases) do + local ak = ChannelKey(alias) + if ak ~= "" and ak ~= canonicalKey then + tab.channelTranslateFilters[ak] = nil + end + end + end + tab.channelTranslateFilters[canonicalKey] = (enabled == true) + if self.translateConfigFrame and self.RefreshTranslateConfigFrame then + self:RefreshTranslateConfigFrame() + end + self:NotifyConfigUI() +end + +function SFrames.Chat:SetActiveTabChannelTranslateFilter(channelName, enabled) + self:SetTabChannelTranslateFilter(self:GetActiveTabIndex(), channelName, enabled) +end + +function SFrames.Chat:GetTabIndexForChatFrame(frame) + if not frame then return nil end + if self.chatFrameToTabIndex and self.chatFrameToTabIndex[frame] then + return self.chatFrameToTabIndex[frame] + end + local db = EnsureDB() + for i = 1, table.getn(db.tabs) do + local chatFrame = self:GetChatFrameForTab(db.tabs[i]) + if chatFrame == frame then + if not self.chatFrameToTabIndex then self.chatFrameToTabIndex = {} end + self.chatFrameToTabIndex[frame] = i + return i + end + end + return nil +end + +function SFrames.Chat:FindTabIndexById(tabId) + if type(tabId) ~= "number" then return nil end + local db = EnsureDB() + for i = 1, table.getn(db.tabs) do + local tab = db.tabs[i] + if tab and tab.id == tabId then + return i + end + end + return nil +end + +function SFrames.Chat:ShouldAutoTranslateForTab(index, filterKey, channelName) + local tab = self:GetTab(index) + if not tab then return false end + if filterKey == "channel" then + return self:GetTabChannelTranslateFilter(index, channelName) + end + if not TRANSLATE_FILTER_KEYS[filterKey] then + return false + end + if tab.filters and tab.filters[filterKey] == false then + return false + end + if not self:GetTabTranslateFilter(index, filterKey) then + return false + end + return true +end + +function SFrames.Chat:SetTabChannelFilter(index, channelName, enabled) + local tab, idx = self:GetTab(index) + if not tab then return end + if type(tab.channelFilters) ~= "table" then tab.channelFilters = {} end + local key = ChannelKey(channelName) + if key == "" then return end + -- Save under the canonical key only (first alias in the group, or the key itself) + local canonicalKey = key + local aliases = GetChannelAliasKeys(channelName) + if aliases then + -- Use the first alias as the canonical key, but only if it's a simple exact key + local firstAlias = ChannelKey(aliases[1] or "") + if firstAlias ~= "" then canonicalKey = firstAlias end + -- Also clear any previously-saved keys for other aliases in the same group + for _, alias in ipairs(aliases) do + local ak = ChannelKey(alias) + if ak ~= "" and ak ~= canonicalKey then + tab.channelFilters[ak] = nil + end + end + end + tab.channelFilters[canonicalKey] = (enabled == true) + if self:GetActiveTabIndex() == idx then + self:ApplyTabChannels(idx) + end + if self.translateConfigFrame and self.RefreshTranslateConfigFrame then + self:RefreshTranslateConfigFrame() + end + self:NotifyConfigUI() +end + +function SFrames.Chat:SetActiveTabChannelFilter(channelName, enabled) + self:SetTabChannelFilter(self:GetActiveTabIndex(), channelName, enabled) +end + +function SFrames.Chat:NotifyConfigUI() + if SFrames and SFrames.ConfigUI and SFrames.ConfigUI.activePage == "chat" and SFrames.ConfigUI.RefreshChatPage then + SFrames.ConfigUI:RefreshChatPage() + end +end + +function SFrames.Chat:CanUseAutoTranslateAPI() + if SFramesDB and SFramesDB.Chat and SFramesDB.Chat.translateEnabled == false then + return false + end + return _G.STranslateAPI + and _G.STranslateAPI.IsReady + and _G.STranslateAPI.IsReady() + and _G.STranslateAPI.Translate +end + +function SFrames.Chat:RequestAutoTranslation(text, callback) + local cleanText = CleanTextForTranslation(text) + if cleanText == "" then + if callback then callback(nil, "EMPTY_TEXT") end + return false + end + if not self:CanUseAutoTranslateAPI() then + if callback then callback(nil, "API_UNAVAILABLE") end + return false + end + + if not self.translationCache then self.translationCache = {} end + if not self.translationPending then self.translationPending = {} end + + local cacheKey = AUTO_TRANSLATE_TARGET_LANG .. "\031" .. cleanText + local cached = self.translationCache[cacheKey] + if cached and cached ~= "" then + if callback then callback(cached, nil, true) end + return true + end + + local pending = self.translationPending[cacheKey] + if pending then + if callback then table.insert(pending, callback) end + return true + end + + self.translationPending[cacheKey] = {} + if callback then + table.insert(self.translationPending[cacheKey], callback) + end + + local chat = self + _G.STranslateAPI.Translate(cleanText, "auto", AUTO_TRANSLATE_TARGET_LANG, function(result, err, meta) + local callbacks = chat.translationPending and chat.translationPending[cacheKey] + if chat.translationPending then + chat.translationPending[cacheKey] = nil + end + + if result and result ~= "" then + if not chat.translationCache then chat.translationCache = {} end + chat.translationCache[cacheKey] = result + end + + if callbacks then + for i = 1, table.getn(callbacks) do + local cb = callbacks[i] + if cb then + cb(result, err, meta) + end + end + end + end, "Nanami-UI") + return true +end + +function SFrames.Chat:AppendAutoTranslatedLine(tabId, filterKey, channelName, sourceText, translatedText, senderName) + if type(translatedText) ~= "string" or translatedText == "" then return end + + local tabIndex = self:FindTabIndexById(tabId) + if not tabIndex then return end + if not self:ShouldAutoTranslateForTab(tabIndex, filterKey, channelName) then + return + end + + local cleanSource = CleanTextForTranslation(sourceText) + local cleanTranslated = CleanTextForTranslation(translatedText) + if cleanSource == "" or cleanTranslated == "" or cleanSource == cleanTranslated then + return + end + + local tab = self:GetTab(tabIndex) + local chatFrame = self:GetChatFrameForTab(tab) + if not chatFrame then return end + + if not chatFrame.AddMessage then return end + + local prefix = "|cff6ecf6e[AI]|r " + if type(channelName) == "string" and channelName ~= "" then + prefix = prefix .. "|cff8cb4d8[" .. channelName .. "]|r " + end + if type(senderName) == "string" and senderName ~= "" then + prefix = prefix .. "|cffdab777" .. senderName .. ":|r " + end + local fullText = prefix .. "|cffe8dcc8" .. cleanTranslated .. "|r" + chatFrame:AddMessage(fullText) + if type(senderName) == "string" and senderName ~= "" and SFrames.Chat.MessageIndex then + if not SFrames.Chat.MessageSenders then SFrames.Chat.MessageSenders = {} end + SFrames.Chat.MessageSenders[SFrames.Chat.MessageIndex] = senderName + end +end + +function SFrames.Chat:QueueAutoTranslationForFrame(frame, tabIndex, event, messageText, channelName) + if not frame or type(messageText) ~= "string" or messageText == "" then + return + end + + local filterKey = GetTranslateFilterKeyForEvent(event) + if not filterKey then + return + end + if not self:ShouldAutoTranslateForTab(tabIndex, filterKey, channelName) then + return + end + + local tab = self:GetTab(tabIndex) + if not tab or type(tab.id) ~= "number" then + return + end + + local cleanText = CleanTextForTranslation(messageText) + if cleanText == "" then + return + end + + self:RequestAutoTranslation(cleanText, function(result, err, meta) + if result and result ~= "" then + SFrames.Chat:AppendAutoTranslatedLine(tab.id, filterKey, channelName, cleanText, result) + end + end) +end + +function SFrames.Chat:SavePosition() + if not (self.frame and self.frame.GetPoint) then return end + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + + local point, _, relativePoint, xOfs, yOfs = self.frame:GetPoint() + SFramesDB.Positions["ChatFrame"] = { + point = point, + relativePoint = relativePoint, + xOfs = xOfs, + yOfs = yOfs, + } +end + +function SFrames.Chat:SaveSizeFromFrame() + if not self.frame then return end + local db = EnsureDB() + db.width = math.floor(Clamp(self.frame:GetWidth() or DEFAULTS.width, 320, 900) + 0.5) + db.height = math.floor(Clamp(self.frame:GetHeight() or DEFAULTS.height, 120, 460) + 0.5) + self:NotifyConfigUI() +end + +function SFrames.Chat:ResetPosition() + if not self.frame then return end + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + SFramesDB.Positions["ChatFrame"] = nil + self.frame:ClearAllPoints() + self.frame:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 30, 30) + self:SavePosition() + if SFrames and SFrames.Print then + SFrames:Print("Chat frame position reset.") + end +end + +function SFrames.Chat:SetTabFilter(index, key, enabled) + local tab = self:GetTab(index) + if not tab or tab.filters[key] == nil then return end + tab.filters[key] = (enabled == true) + if self:GetActiveTabIndex() == index then + self:ApplyTabFilters(index) + -- Restore cached messages after filter change cleared the frame + local chatFrame = self:GetChatFrameForTab(tab) + if chatFrame then + self:RestoreCachedMessages(chatFrame) + end + end + self:NotifyConfigUI() +end + +function SFrames.Chat:SetActiveTabFilter(key, enabled) + self:SetTabFilter(self:GetActiveTabIndex(), key, enabled) +end + +function SFrames.Chat:RenameTab(index, name) + local tab, idx = self:GetTab(index) + if not tab then return false end + local clean = Trim(name) + if clean == "" then return false end + tab.name = clean + if self.frame then self:RefreshTabButtons() end + self:NotifyConfigUI() + if idx == self:GetActiveTabIndex() then + self:SwitchActiveChatFrame(self:GetActiveTab()) + end + return true +end + +function SFrames.Chat:RenameActiveTab(name) + return self:RenameTab(self:GetActiveTabIndex(), name) +end + +function SFrames.Chat:PromptNewTab() + EnsurePopupDialogs() + if StaticPopup_Show then + local popup = StaticPopup_Show("SFRAMES_CHAT_NEW_TAB") + if not popup then + local fallbackName = self:GetNextTabName() + self:AddTab(fallbackName) + end + else + self:AddTab(self:GetNextTabName()) + end +end + +function SFrames.Chat:PromptRenameTab(index) + local _, idx = self:GetTab(index or self:GetActiveTabIndex()) + self.pendingRenameIndex = idx + EnsurePopupDialogs() + if StaticPopup_Show then + StaticPopup_Show("SFRAMES_CHAT_RENAME_TAB", nil, nil, idx) + end +end + +function SFrames.Chat:AddTab(name) + local db = EnsureDB() + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + if table.getn(db.tabs) >= maxWindows then + if SFrames and SFrames.Print then SFrames:Print("最多只能创建 " .. maxWindows .. " 个聊天标签。") end + return false + end + + local clean = Trim(name) + if clean == "" then clean = self:GetNextTabName() end + local id = db.nextTabId or (table.getn(db.tabs) + 1) + db.nextTabId = id + 1 + table.insert(db.tabs, BuildDefaultTab(id, clean)) + db.activeTab = table.getn(db.tabs) + + self:RefreshTabButtons() + self:ApplyAllTabsSetup() + self:NotifyConfigUI() + return true +end + +function SFrames.Chat:DeleteTab(index) + local db = EnsureDB() + local tab, idx = self:GetTab(index) + if not tab then return false end + + if self:IsTabProtected(idx) then + if SFrames and SFrames.Print then + SFrames:Print("Default General/Combat tabs cannot be deleted.") + end + return false + end + + if table.getn(db.tabs) <= 2 then + if SFrames and SFrames.Print then + SFrames:Print("Keep at least default General and Combat tabs.") + end + return false + end + + table.remove(db.tabs, idx) + if idx <= db.activeTab then db.activeTab = db.activeTab - 1 end + if db.activeTab < 1 then db.activeTab = 1 end + if db.activeTab > table.getn(db.tabs) then db.activeTab = table.getn(db.tabs) end + + self:RefreshTabButtons() + self:ApplyAllTabsSetup() + self:NotifyConfigUI() + return true +end + +function SFrames.Chat:DeleteActiveTab() + return self:DeleteTab(self:GetActiveTabIndex()) +end + +function SFrames.Chat:OpenFilterConfigForTab(index) + if index then + self:SetActiveTab(index) + end + self:OpenConfigFrame() +end + +function SFrames.Chat:SetActiveTab(index) + local db = EnsureDB() + index = Clamp(math.floor(tonumber(index) or 1), 1, table.getn(db.tabs)) + if db.activeTab == index then return end + db.activeTab = index + self:RefreshTabButtons() + self:SwitchActiveChatFrame(self:GetActiveTab()) + self:NotifyConfigUI() +end + +function SFrames.Chat:StepTab(delta) + local db = EnsureDB() + local count = table.getn(db.tabs) + local target = db.activeTab + (delta or 1) + if target < 1 then target = count end + if target > count then target = 1 end + self:SetActiveTab(target) +end + +function SFrames.Chat:EnsureTabContextMenu() + if self.tabContextMenu then return end + if not (CreateFrame and UIDropDownMenu_Initialize and UIDropDownMenu_AddButton) then return end + + local menu = CreateFrame("Frame", "SFramesChatTabContextMenu", UIParent, "UIDropDownMenuTemplate") + UIDropDownMenu_Initialize(menu, function() + local idx = SFrames.Chat.contextMenuTabIndex or SFrames.Chat:GetActiveTabIndex() + local tab = SFrames.Chat:GetTab(idx) + if not tab then return end + local cfg = SFrames.Chat:GetConfig() + + local info = NewDropDownInfo() + info.text = tab.name or ("标签 " .. tostring(idx)) + info.isTitle = 1 + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + + info = NewDropDownInfo() + info.text = "重命名标签" + info.notCheckable = 1 + info.func = function() + SFrames.Chat:PromptRenameTab(idx) + end + UIDropDownMenu_AddButton(info) + + info = NewDropDownInfo() + info.text = "删除标签" + info.notCheckable = 1 + info.disabled = (SFrames.Chat:IsTabProtected(idx) or table.getn(SFrames.Chat:GetTabs()) <= 2) and 1 or nil + info.func = function() + SFrames.Chat:DeleteTab(idx) + end + UIDropDownMenu_AddButton(info) + + info = NewDropDownInfo() + info.text = "过滤设置" + info.notCheckable = 1 + info.func = function() + SFrames.Chat:OpenFilterConfigForTab(idx) + end + UIDropDownMenu_AddButton(info) + + info = NewDropDownInfo() + info.text = "当前字号: " .. tostring(cfg.fontSize) + info.notCheckable = 1 + info.disabled = 1 + UIDropDownMenu_AddButton(info) + + info = NewDropDownInfo() + info.text = "增大字号 +1" + info.notCheckable = 1 + info.disabled = (cfg.fontSize >= 18) and 1 or nil + info.func = function() + SFrames.Chat:SetFontSize((SFrames.Chat:GetConfig().fontSize or DEFAULTS.fontSize) + 1) + end + UIDropDownMenu_AddButton(info) + + info = NewDropDownInfo() + info.text = "减小字号 -1" + info.notCheckable = 1 + info.disabled = (cfg.fontSize <= 10) and 1 or nil + info.func = function() + SFrames.Chat:SetFontSize((SFrames.Chat:GetConfig().fontSize or DEFAULTS.fontSize) - 1) + end + UIDropDownMenu_AddButton(info) + end, "MENU") + + self.tabContextMenu = menu +end + +function SFrames.Chat:OpenTabContextMenu(index) + self.contextMenuTabIndex = index + self:EnsureTabContextMenu() + + if self.tabContextMenu and ToggleDropDownMenu then + ToggleDropDownMenu(1, nil, self.tabContextMenu, "cursor", 0, 0) + else + self:PromptRenameTab(index) + end +end + +local function BoolText(v) + if v then return "ON" end + return "OFF" +end + +local function GetPlayerClassColor() + if not UnitClass then return nil end + local _, classFile = UnitClass("player") + if not classFile then return nil end + + local colors = CUSTOM_CLASS_COLORS or RAID_CLASS_COLORS + if not colors then return nil end + + local classColor = colors[classFile] + if not classColor then return nil end + + local r = classColor.r or classColor[1] + local g = classColor.g or classColor[2] + local b = classColor.b or classColor[3] + if r and g and b then + return r, g, b + end + return nil +end + +function SFrames.Chat:GetBorderColorRGB() + local cfg = self:GetConfig() + if cfg.borderClassColor then + local r, g, b = GetPlayerClassColor() + if r and g and b then + return r, g, b + end + end + return 0.92, 0.56, 0.78 +end + +function SFrames.Chat:SetWindowSize(width, height) + local db = EnsureDB() + db.width = math.floor(Clamp(width or db.width, 320, 900) + 0.5) + db.height = math.floor(Clamp(height or db.height, 120, 460) + 0.5) + self:ApplyConfig() +end + +function SFrames.Chat:SetWindowScale(scale) + local db = EnsureDB() + db.scale = Clamp(scale or db.scale, 0.75, 1.4) + self:ApplyConfig() +end + +function SFrames.Chat:SetFontSize(size) + local db = EnsureDB() + db.fontSize = math.floor(Clamp(size or db.fontSize, 10, 18) + 0.5) + self:ApplyConfig() +end + +function SFrames.Chat:PrintFilters() + local tab = self:GetActiveTab() + if not tab then return end + if SFrames and SFrames.Print then + SFrames:Print("闁荤喐绮庢晶妤呭箰閸涘﹥娅犻柣妯款嚙閸愨偓闂佹悶鍎弲鈺呭礉? " .. tostring(tab.name)) + for i = 1, table.getn(FILTER_DEFS) do + local def = FILTER_DEFS[i] + SFrames:Print(" - " .. def.key .. ": " .. BoolText(tab.filters[def.key] ~= false)) + end + end +end + +function SFrames.Chat:PrintHelp() + if not (SFrames and SFrames.Print) then return end + SFrames:Print("/nui chat (闂備胶鎳撻悘姘跺箰閸濄儲顫曢柟杈鹃檮閸ゅ倸鈹戦悩鎻掆偓鑸电椤栫偞鈷戦柡澶庢硶鑲栭梺?") + SFrames:Print("/nui chat ui") + SFrames:Print("/nui chat size ") + SFrames:Print("/nui chat scale <0.75-1.4>") + SFrames:Print("/nui chat font <10-18>") + SFrames:Print("/nui chat reset") + SFrames:Print("/nui chat tab new ") + SFrames:Print("/nui chat tab del") + SFrames:Print("/nui chat tab next|prev|") + SFrames:Print("/nui chat tab rename ") + SFrames:Print("/nui chat filter on|off") + SFrames:Print("/nui chat filters") +end + +function SFrames.Chat:GetConfigFrameActiveTabName() + local tab = self:GetActiveTab() + if tab and tab.name and tab.name ~= "" then + return tab.name + end + return "Tab" +end + +function SFrames.Chat:RefreshConfigFrame() + if not self.configFrame then return end + + if self.cfgCurrentTabText then + self.cfgCurrentTabText:SetText("当前标签: " .. self:GetConfigFrameActiveTabName()) + end + + if self.cfgChannelHint then + local channels = self:GetJoinedChannels() + self.cfgChannelHint:SetText("已加入频道: " .. tostring(table.getn(channels))) + end + + if self.cfgRenameBox and self.cfgRenameBox.Refresh then + self.cfgRenameBox:Refresh() + end + + if self.cfgDeleteTabButton then + local protected = self:IsTabProtected(self:GetActiveTabIndex()) + if protected and self.cfgDeleteTabButton.Disable then + self.cfgDeleteTabButton:Disable() + elseif (not protected) and self.cfgDeleteTabButton.Enable then + self.cfgDeleteTabButton:Enable() + end + end + + if self.configControls then + for i = 1, table.getn(self.configControls) do + local ctrl = self.configControls[i] + if ctrl and ctrl.Refresh then + ctrl:Refresh() + end + end + end + + if self.translateConfigFrame and self.RefreshTranslateConfigFrame then + self:RefreshTranslateConfigFrame() + end +end + +function SFrames.Chat:RefreshTranslateConfigFrame() + if not self.translateConfigFrame then return end + + if self.translateCurrentTabText then + self.translateCurrentTabText:SetText("Current Tab: " .. self:GetConfigFrameActiveTabName()) + end + + if self.translateChannelHint then + local channels = self:GetJoinedChannels() + self.translateChannelHint:SetText("Joined Channels: " .. tostring(table.getn(channels))) + end + + if self.translateConfigControls then + for i = 1, table.getn(self.translateConfigControls) do + local ctrl = self.translateConfigControls[i] + if ctrl and ctrl.Refresh then + ctrl:Refresh() + end + end + end +end + +function SFrames.Chat:EnsureTranslateConfigFrame() + if self.translateConfigFrame then return end + + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + local panel = CreateFrame("Frame", "SFramesChatTranslateConfigPanel", UIParent) + panel:SetWidth(540) + panel:SetHeight(520) + panel:SetPoint("CENTER", UIParent, "CENTER", 180, 0) + panel:SetMovable(true) + panel:EnableMouse(true) + panel:SetClampedToScreen(true) + panel:SetFrameStrata("DIALOG") + panel:SetFrameLevel(151) + panel:RegisterForDrag("LeftButton") + panel:SetScript("OnDragStart", function() this:StartMoving() end) + panel:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + table.insert(UISpecialFrames, "SFramesChatTranslateConfigPanel") + + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(panel) + else + panel:SetBackdrop({ + bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = true, tileSize = 32, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + panel:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], CFG_THEME.panelBg[4]) + panel:SetBackdropBorderColor(CFG_THEME.panelBorder[1], CFG_THEME.panelBorder[2], CFG_THEME.panelBorder[3], CFG_THEME.panelBorder[4]) + + local title = panel:CreateFontString(nil, "OVERLAY") + title:SetFont(fontPath, 14, "OUTLINE") + title:SetPoint("TOP", panel, "TOP", 0, -12) + title:SetText("Chat AI Translate") + title:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + local closeBtn = CreateFrame("Button", nil, panel, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -4, -4) + + local controls = {} + local function AddControl(ctrl) + table.insert(controls, ctrl) + end + + local tabSection = CreateCfgSection(panel, "Tab", 10, -36, 520, 92, fontPath) + self.translateCurrentTabText = tabSection:CreateFontString(nil, "OVERLAY") + self.translateCurrentTabText:SetFont(fontPath, 11, "OUTLINE") + self.translateCurrentTabText:SetPoint("TOPLEFT", tabSection, "TOPLEFT", 14, -28) + self.translateCurrentTabText:SetText("Current Tab: " .. self:GetConfigFrameActiveTabName()) + + CreateCfgButton(tabSection, "Prev", 14, -48, 92, 22, function() + SFrames.Chat:StepTab(-1) + SFrames.Chat:RefreshConfigFrame() + SFrames.Chat:RefreshTranslateConfigFrame() + end) + CreateCfgButton(tabSection, "Next", 112, -48, 92, 22, function() + SFrames.Chat:StepTab(1) + SFrames.Chat:RefreshConfigFrame() + SFrames.Chat:RefreshTranslateConfigFrame() + end) + + local filterSection = CreateCfgSection(panel, "Message Translate", 10, -134, 520, 126, fontPath) + for i = 1, table.getn(TRANSLATE_FILTER_ORDER) do + local key = TRANSLATE_FILTER_ORDER[i] + local col = math.mod(i - 1, 2) + local row = math.floor((i - 1) / 2) + local x = 14 + col * 240 + local y = -28 - row * 24 + + AddControl(CreateCfgCheck(filterSection, GetFilterLabel(key), x, y, + function() + return SFrames.Chat:GetTabTranslateFilter(SFrames.Chat:GetActiveTabIndex(), key) + end, + function(checked) + SFrames.Chat:SetActiveTabTranslateFilter(key, checked) + end, + function() + SFrames.Chat:RefreshTranslateConfigFrame() + end + )) + end + + local channelSection = CreateCfgSection(panel, "Channel Translate", 10, -266, 520, 198, fontPath) + self.translateChannelChecks = {} + self.translateChannelHint = channelSection:CreateFontString(nil, "OVERLAY") + self.translateChannelHint:SetFont(fontPath, 10, "OUTLINE") + self.translateChannelHint:SetPoint("BOTTOMLEFT", channelSection, "BOTTOMLEFT", 14, 8) + self.translateChannelHint:SetTextColor(0.84, 0.8, 0.86) + self.translateChannelHint:SetText("Joined Channels:") + + local maxChannelChecks = 15 + for i = 1, maxChannelChecks do + local slot = i + local col = math.mod(i - 1, 3) + local row = math.floor((i - 1) / 3) + local x = 14 + col * 165 + local y = -24 - row * 24 + + local cb = CreateFrame("CheckButton", NextConfigWidget("TranslateChannelCheck"), channelSection, "UICheckButtonTemplate") + cb:SetWidth(20) + cb:SetHeight(20) + cb:SetPoint("TOPLEFT", channelSection, "TOPLEFT", x, y) + StyleCfgCheck(cb) + + local label = _G[cb:GetName() .. "Text"] + if label then + label:SetText("") + label:SetWidth(140) + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + + cb:SetScript("OnClick", function() + local name = this.channelName + if not name or name == "" then return end + SFrames.Chat:SetActiveTabChannelTranslateFilter(name, this:GetChecked() and true or false) + SFrames.Chat:RefreshTranslateConfigFrame() + end) + + cb.Refresh = function() + local channels = SFrames.Chat:GetJoinedChannels() + local info = channels[slot] + if info then + local activeIndex = SFrames.Chat:GetActiveTabIndex() + local enabled = SFrames.Chat:GetTabChannelFilter(activeIndex, info.name) + and SFrames.Chat:GetTabTranslateFilter(activeIndex, "channel") + cb.channelName = info.name + if label then + label:SetText(ShortText(info.name, 24)) + if enabled then + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + else + label:SetTextColor(0.45, 0.45, 0.45) + end + end + cb:SetChecked(SFrames.Chat:GetTabChannelTranslateFilter(SFrames.Chat:GetActiveTabIndex(), info.name) and true or false) + if enabled then + cb:Enable() + else + cb:Disable() + end + cb:Show() + else + cb.channelName = nil + cb:SetChecked(false) + if label then label:SetText("") end + cb:Hide() + end + end + + AddControl(cb) + table.insert(self.translateChannelChecks, cb) + end + + local tip = channelSection:CreateFontString(nil, "OVERLAY") + tip:SetFont(fontPath, 10, "OUTLINE") + tip:SetPoint("TOPLEFT", channelSection, "TOPLEFT", 14, -150) + tip:SetText("Only active receiving channels can auto-translate.") + tip:SetTextColor(0.7, 0.7, 0.74) + + local close = CreateCfgButton(panel, "Close", 200, -474, 140, 26, function() + SFrames.Chat.translateConfigFrame:Hide() + end) + StyleCfgButton(close) + + self.translateConfigControls = controls + self.translateConfigFrame = panel +end + +function SFrames.Chat:OpenTranslateConfigFrame() + self:EnsureTranslateConfigFrame() + if not self.translateConfigFrame then return end + self:RefreshTranslateConfigFrame() + self.translateConfigFrame:Show() + self.translateConfigFrame:Raise() +end + +function SFrames.Chat:ToggleTranslateConfigFrame() + self:EnsureTranslateConfigFrame() + if not self.translateConfigFrame then return end + if self.translateConfigFrame:IsShown() then + self.translateConfigFrame:Hide() + else + self:OpenTranslateConfigFrame() + end +end + +function SFrames.Chat:EnsureConfigFrame() + if self.configFrame then return end + + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + local panel = CreateFrame("Frame", "SFramesChatConfigPanel", UIParent) + panel:SetWidth(540) + panel:SetHeight(786) + panel:SetPoint("CENTER", UIParent, "CENTER", 120, 0) + panel:SetMovable(true) + panel:EnableMouse(true) + panel:SetClampedToScreen(true) + panel:SetFrameStrata("DIALOG") + panel:SetFrameLevel(150) + panel:RegisterForDrag("LeftButton") + panel:SetScript("OnDragStart", function() this:StartMoving() end) + panel:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + table.insert(UISpecialFrames, "SFramesChatConfigPanel") + + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(panel) + else + panel:SetBackdrop({ + bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = true, tileSize = 32, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + panel:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], CFG_THEME.panelBg[4]) + panel:SetBackdropBorderColor(CFG_THEME.panelBorder[1], CFG_THEME.panelBorder[2], CFG_THEME.panelBorder[3], CFG_THEME.panelBorder[4]) + + local title = panel:CreateFontString(nil, "OVERLAY") + title:SetFont(fontPath, 14, "OUTLINE") + title:SetPoint("TOP", panel, "TOP", 0, -12) + title:SetText("Nanami 聊天设置") + title:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + local closeBtn = CreateFrame("Button", nil, panel, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -4, -4) + + local controls = {} + + local function AddControl(ctrl) + table.insert(controls, ctrl) + end + + local windowSection = CreateCfgSection(panel, "窗口", 10, -36, 520, 226, fontPath) + AddControl(CreateCfgSlider(windowSection, "宽度", 16, -46, 235, 320, 900, 1, + function() return EnsureDB().width end, + function(v) EnsureDB().width = v end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(windowSection, "高度", 270, -46, 235, 120, 460, 1, + function() return EnsureDB().height end, + function(v) EnsureDB().height = v end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(windowSection, "缩放", 16, -108, 235, 0.75, 1.40, 0.05, + function() return EnsureDB().scale end, + function(v) EnsureDB().scale = v end, + function(v) return string.format("%.2f", v) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(windowSection, "字号", 270, -108, 235, 10, 18, 1, + function() return EnsureDB().fontSize end, + function(v) EnsureDB().fontSize = v end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(windowSection, "启用聊天", 360, -122, + function() return EnsureDB().enable ~= false end, + function(checked) + local oldState = EnsureDB().enable ~= false + if oldState ~= checked then + EnsureDB().enable = (checked == true) + SFrames.Chat:EnsureConfigFrame() + if StaticPopup_Show then + StaticPopup_Show("SFRAMES_CHAT_RELOAD_PROMPT") + else + ReloadUI() + end + end + end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(windowSection, "显示边框", 360, -142, + function() return EnsureDB().showBorder ~= false end, + function(checked) EnsureDB().showBorder = (checked == true) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(windowSection, "边框职业色", 360, -162, + function() return EnsureDB().borderClassColor == true end, + function(checked) EnsureDB().borderClassColor = (checked == true) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(windowSection, "显示等级", 360, -182, + function() return EnsureDB().showPlayerLevel ~= false end, + function(checked) EnsureDB().showPlayerLevel = (checked == true) end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + + CreateCfgButton(windowSection, "重置位置", 16, -198, 110, 22, function() + SFrames.Chat:ResetPosition() + end) + CreateCfgButton(windowSection, "解锁", 132, -198, 110, 22, function() + if SFrames and SFrames.UnlockFrames then SFrames:UnlockFrames() end + end) + CreateCfgButton(windowSection, "锁定", 248, -198, 110, 22, function() + if SFrames and SFrames.LockFrames then SFrames:LockFrames() end + end) + + local posLabel = windowSection:CreateFontString(nil, "OVERLAY") + posLabel:SetFont(fontPath, 13, "OUTLINE") + posLabel:SetPoint("TOPLEFT", windowSection, "TOPLEFT", 16, -151) + posLabel:SetText("输入框位置:") + posLabel:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + + CreateCfgButton(windowSection, "底部", 90, -148, 50, 20, function() EnsureDB().editBoxPosition = "bottom"; SFrames.Chat:StyleEditBox() end) + CreateCfgButton(windowSection, "顶部", 144, -148, 50, 20, function() EnsureDB().editBoxPosition = "top"; SFrames.Chat:StyleEditBox() end) + CreateCfgButton(windowSection, "自由拖动 (Alt)", 198, -148, 100, 20, function() + EnsureDB().editBoxPosition = "free" + SFrames.Chat:StyleEditBox() + DEFAULT_CHAT_FRAME:AddMessage("|cffffd100Nanami-UI:|r 按住 Alt 键可以自由拖动输入框。") + end) + + local tabSection = CreateCfgSection(panel, "标签", 10, -268, 520, 118, fontPath) + self.cfgCurrentTabText = tabSection:CreateFontString(nil, "OVERLAY") + self.cfgCurrentTabText:SetFont(fontPath, 11, "OUTLINE") + self.cfgCurrentTabText:SetPoint("TOPLEFT", tabSection, "TOPLEFT", 14, -28) + self.cfgCurrentTabText:SetText("当前标签: " .. self:GetConfigFrameActiveTabName()) + self.cfgCurrentTabText:SetText("当前标签: " .. self:GetConfigFrameActiveTabName()) + + CreateCfgButton(tabSection, "上一个", 14, -48, 92, 22, function() + SFrames.Chat:StepTab(-1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(tabSection, "下一个", 112, -48, 92, 22, function() + SFrames.Chat:StepTab(1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(tabSection, "新建", 210, -48, 92, 22, function() + SFrames.Chat:PromptNewTab() + SFrames.Chat:RefreshConfigFrame() + end) + self.cfgDeleteTabButton = CreateCfgButton(tabSection, "删除", 308, -48, 92, 22, function() + SFrames.Chat:DeleteActiveTab() + SFrames.Chat:RefreshConfigFrame() + end) + + CreateCfgButton(tabSection, "AI", 406, -48, 92, 22, function() + SFrames.Chat:OpenTranslateConfigFrame() + end) + + self.cfgRenameBox = CreateCfgEditBox(tabSection, 14, -80, 188, 20, + function() return SFrames.Chat:GetConfigFrameActiveTabName() end, + function(text) + SFrames.Chat:RenameActiveTab(text) + SFrames.Chat:RefreshConfigFrame() + end + ) + CreateCfgButton(tabSection, "重命名", 210, -80, 92, 22, function() + SFrames.Chat:RenameActiveTab(SFrames.Chat.cfgRenameBox:GetText() or "") + SFrames.Chat:RefreshConfigFrame() + end) + + local filterSection = CreateCfgSection(panel, "消息过滤(当前标签)", 10, -392, 520, 186, fontPath) + for i = 1, table.getn(FILTER_DEFS) do + local def = FILTER_DEFS[i] + local col = math.mod(i - 1, 2) + local row = math.floor((i - 1) / 2) + local x = 14 + col * 240 + local y = -28 - row * 24 + + AddControl(CreateCfgCheck(filterSection, def.label, x, y, + function() + local tab = SFrames.Chat:GetActiveTab() + return tab and tab.filters and tab.filters[def.key] ~= false + end, + function(checked) + SFrames.Chat:SetActiveTabFilter(def.key, checked) + end, + function() + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end + )) + end + + local channelSection = CreateCfgSection(panel, "频道过滤(当前标签)", 10, -584, 520, 172, fontPath) + self.cfgChannelChecks = {} + self.cfgChannelHint = channelSection:CreateFontString(nil, "OVERLAY") + self.cfgChannelHint:SetFont(fontPath, 10, "OUTLINE") + self.cfgChannelHint:SetPoint("BOTTOMLEFT", channelSection, "BOTTOMLEFT", 14, 8) + self.cfgChannelHint:SetTextColor(0.84, 0.8, 0.86) + self.cfgChannelHint:SetText("已加入频道:") + + local maxChannelChecks = 15 + for i = 1, maxChannelChecks do + local slot = i + local col = math.mod(i - 1, 3) + local row = math.floor((i - 1) / 3) + local x = 14 + col * 165 + local y = -24 - row * 24 + + local cb = CreateFrame("CheckButton", NextConfigWidget("ChannelCheck"), channelSection, "UICheckButtonTemplate") + cb:SetWidth(20) + cb:SetHeight(20) + cb:SetPoint("TOPLEFT", channelSection, "TOPLEFT", x, y) + StyleCfgCheck(cb) + + local label = _G[cb:GetName() .. "Text"] + if label then + label:SetText("") + label:SetWidth(140) + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + + cb:SetScript("OnClick", function() + local name = this.channelName + if not name or name == "" then return end + SFrames.Chat:SetActiveTabChannelFilter(name, this:GetChecked() and true or false) + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end) + + cb.Refresh = function() + local channels = SFrames.Chat:GetJoinedChannels() + local info = channels[slot] + if info then + cb.channelName = info.name + if label then label:SetText(ShortText(info.name, 24)) end + cb:SetChecked(SFrames.Chat:GetTabChannelFilter(SFrames.Chat:GetActiveTabIndex(), info.name) and true or false) + cb:Show() + else + cb.channelName = nil + cb:SetChecked(false) + if label then label:SetText("") end + cb:Hide() + end + end + + AddControl(cb) + table.insert(self.cfgChannelChecks, cb) + end + + + local okBtn = CreateCfgButton(panel, "保存", 115, -730, 140, 26, function() + SFrames.Chat.configFrame:Hide() + end) + StyleCfgButton(okBtn) + AddBtnIcon(okBtn, "save") + + local reloadBtn = CreateCfgButton(panel, "保存并重载", 285, -730, 140, 26, function() + ReloadUI() + end) + StyleCfgButton(reloadBtn) + AddBtnIcon(reloadBtn, "save") + + panel.controls = controls + self.configControls = controls + self.configFrame = panel +end + +function SFrames.Chat:OpenConfigFrame() + self:EnsureConfigFrame() + if not self.configFrame then return end + self:RefreshConfigFrame() + self.configFrame:Show() + self.configFrame:Raise() +end + +function SFrames.Chat:ToggleConfigFrame() + self:EnsureConfigFrame() + if not self.configFrame then return end + if self.configFrame:IsShown() then + self.configFrame:Hide() + else + self:OpenConfigFrame() + end +end + +local CONFIG_PAGE_ORDER = { + { key = "window", label = "窗口", title = "聊天窗口", desc = "尺寸、缩放、边框和输入框位置。", icon = "settings" }, + { key = "tabs", label = "标签", title = "标签管理", desc = "切换、重命名、新建和删除聊天标签。", icon = "chat" }, + { key = "filters", label = "过滤", title = "消息过滤", desc = "为当前标签设置消息类型和频道接收规则。", icon = "settings" }, + { key = "translate", label = "AI翻译", title = "AI 翻译", desc = "为当前标签配置自动翻译范围和频道翻译。", icon = "ai" }, + { key = "hc", label = "硬核设置", title = "硬核生存选项", desc = "全局硬核控制、死亡通报过滤及等级限制。", icon = "skull" }, +} + +local CONFIG_PAGE_MAP = {} +for i = 1, table.getn(CONFIG_PAGE_ORDER) do + local info = CONFIG_PAGE_ORDER[i] + CONFIG_PAGE_MAP[info.key] = info +end + +local function GetConfigPageInfo(pageKey) + return CONFIG_PAGE_MAP[pageKey] or CONFIG_PAGE_MAP.window +end + +local function GetEditBoxPositionText(mode) + if mode == "top" then return "顶部" end + if mode == "free" then return "自由拖动" end + return "底部" +end + +local function SetConfigNavButtonActive(btn, active) + if not btn then return end + local bg = CFG_THEME.buttonBg + local border = CFG_THEME.buttonBorder + local text = CFG_THEME.buttonText + if active then + bg = { 0.32, 0.16, 0.26, 0.98 } + border = CFG_THEME.btnHoverBd or { 0.80, 0.48, 0.64, 0.98 } + text = { 1, 0.92, 0.96 } + end + if btn.SetBackdropColor then + btn:SetBackdropColor(bg[1], bg[2], bg[3], bg[4]) + end + if btn.SetBackdropBorderColor then + btn:SetBackdropBorderColor(border[1], border[2], border[3], border[4]) + end + local fs = btn.GetFontString and btn:GetFontString() + if fs then + fs:SetTextColor(text[1], text[2], text[3]) + end +end + +function SFrames.Chat:RefreshConfigNavButtons() + if not self.configNavButtons then return end + local activePage = self.configActivePage or "window" + for key, btn in pairs(self.configNavButtons) do + SetConfigNavButtonActive(btn, key == activePage) + end +end + +function SFrames.Chat:ShowConfigPage(pageKey) + if not self.configFrame then return end + local info = GetConfigPageInfo(pageKey) + self.configActivePage = info.key + + if self.configPages then + for key, page in pairs(self.configPages) do + if page then + if key == info.key then + page:Show() + else + page:Hide() + end + end + end + end + + if self.configPageTitle then + self.configPageTitle:SetText(info.title or "") + end + if self.configPageDesc then + self.configPageDesc:SetText(info.desc or "") + end + + self:RefreshConfigNavButtons() +end + +function SFrames.Chat:RefreshConfigFrame() + if not self.configFrame then return end + + if not self.configActivePage then + self.configActivePage = "window" + end + + if self.configSidebarTabText then + self.configSidebarTabText:SetText(self:GetConfigFrameActiveTabName()) + end + + local pageInfo = GetConfigPageInfo(self.configActivePage) + if self.configPageTitle then + self.configPageTitle:SetText(pageInfo.title or "") + end + if self.configPageDesc then + self.configPageDesc:SetText(pageInfo.desc or "") + end + + if self.cfgCurrentTabText then + self.cfgCurrentTabText:SetText("当前标签: " .. self:GetConfigFrameActiveTabName()) + end + if self.cfgFilterTabText then + self.cfgFilterTabText:SetText("过滤目标: " .. self:GetConfigFrameActiveTabName()) + end + if self.cfgTranslateTabText then + self.cfgTranslateTabText:SetText("翻译目标: " .. self:GetConfigFrameActiveTabName()) + end + + if self.cfgChannelHint then + local channels = self:GetJoinedChannels() + self.cfgChannelHint:SetText("已加入频道: " .. tostring(table.getn(channels))) + end + if self.cfgTranslateChannelHint then + local channels = self:GetJoinedChannels() + self.cfgTranslateChannelHint:SetText("已加入频道: " .. tostring(table.getn(channels))) + end + + if self.cfgRenameBox and self.cfgRenameBox.Refresh then + self.cfgRenameBox:Refresh() + end + + if self.cfgDeleteTabButton then + local protected = self:IsTabProtected(self:GetActiveTabIndex()) + if protected and self.cfgDeleteTabButton.Disable then + self.cfgDeleteTabButton:Disable() + elseif (not protected) and self.cfgDeleteTabButton.Enable then + self.cfgDeleteTabButton:Enable() + end + end + + if self.cfgTabProtectedText then + if self:IsTabProtected(self:GetActiveTabIndex()) then + self.cfgTabProtectedText:SetText("当前标签受保护,不能删除。") + self.cfgTabProtectedText:SetTextColor(0.95, 0.72, 0.72) + else + self.cfgTabProtectedText:SetText("当前标签可自由调整过滤和翻译设置。") + self.cfgTabProtectedText:SetTextColor(0.72, 0.88, 0.76) + end + end + + if self.cfgInputModeText then + self.cfgInputModeText:SetText("当前输入框位置: " .. GetEditBoxPositionText(EnsureDB().editBoxPosition)) + end + + if self.cfgWindowSummaryText then + local db = EnsureDB() + self.cfgWindowSummaryText:SetText("当前尺寸: " .. tostring(db.width) .. " x " .. tostring(db.height) .. " 缩放: " .. string.format("%.2f", db.scale) .. " 背景: " .. string.format("%.0f%%", (db.bgAlpha or DEFAULTS.bgAlpha) * 100)) + end + + if self.cfgTranslateStatusText then + if self:CanUseAutoTranslateAPI() then + self.cfgTranslateStatusText:SetText("STranslate API 已就绪,自动翻译可用。") + self.cfgTranslateStatusText:SetTextColor(0.72, 0.9, 0.78) + else + self.cfgTranslateStatusText:SetText("未检测到可用的 STranslate API,开启后也不会发起翻译请求。") + self.cfgTranslateStatusText:SetTextColor(0.95, 0.76, 0.62) + end + end + + if self.configControls then + for i = 1, table.getn(self.configControls) do + local ctrl = self.configControls[i] + if ctrl and ctrl.Refresh then + ctrl:Refresh() + end + end + end + + self:RefreshConfigNavButtons() +end + +function SFrames.Chat:RefreshTranslateConfigFrame() + self:RefreshConfigFrame() +end + +function SFrames.Chat:EnsureTranslateConfigFrame() + self:EnsureConfigFrame() +end + +function SFrames.Chat:OpenTranslateConfigFrame() + self:OpenConfigFrame("translate") +end + +function SFrames.Chat:ToggleTranslateConfigFrame() + self:ToggleConfigFrame("translate") +end + +function SFrames.Chat:EnsureConfigFrame() + if self.configFrame then return end + + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + local panel = CreateFrame("Frame", "SFramesChatConfigPanel", UIParent) + panel:SetWidth(780) + panel:SetHeight(630) + panel:SetPoint("CENTER", UIParent, "CENTER", 120, 0) + panel:SetMovable(true) + panel:EnableMouse(true) + panel:SetClampedToScreen(true) + panel:SetFrameStrata("DIALOG") + panel:SetFrameLevel(150) + panel:RegisterForDrag("LeftButton") + panel:SetScript("OnDragStart", function() this:StartMoving() end) + panel:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + table.insert(UISpecialFrames, "SFramesChatConfigPanel") + + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(panel) + else + panel:SetBackdrop({ + bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = true, tileSize = 32, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + panel:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], CFG_THEME.panelBg[4]) + panel:SetBackdropBorderColor(CFG_THEME.panelBorder[1], CFG_THEME.panelBorder[2], CFG_THEME.panelBorder[3], CFG_THEME.panelBorder[4]) + + local title = panel:CreateFontString(nil, "OVERLAY") + title:SetFont(fontPath, 15, "OUTLINE") + title:SetPoint("TOPLEFT", panel, "TOPLEFT", 18, -14) + title:SetText("Nanami 聊天设置") + title:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + local closeBtn = CreateFrame("Button", nil, panel, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -4, -4) + + local sidebar = CreateCfgSection(panel, "导航", 12, -42, 154, 532, fontPath) + + local sideLabel = sidebar:CreateFontString(nil, "OVERLAY") + sideLabel:SetFont(fontPath, 10, "OUTLINE") + sideLabel:SetPoint("TOPLEFT", sidebar, "TOPLEFT", 12, -32) + sideLabel:SetText("当前标签") + sideLabel:SetTextColor(0.72, 0.72, 0.78) + + self.configSidebarTabText = sidebar:CreateFontString(nil, "OVERLAY") + self.configSidebarTabText:SetFont(fontPath, 14, "OUTLINE") + self.configSidebarTabText:SetPoint("TOPLEFT", sidebar, "TOPLEFT", 12, -50) + self.configSidebarTabText:SetText(self:GetConfigFrameActiveTabName()) + self.configSidebarTabText:SetTextColor(0.96, 0.94, 0.98) + + local sideTip = sidebar:CreateFontString(nil, "OVERLAY") + sideTip:SetFont(fontPath, 10, "OUTLINE") + sideTip:SetPoint("BOTTOMLEFT", sidebar, "BOTTOMLEFT", 12, 14) + sideTip:SetWidth(130) + sideTip:SetJustifyH("LEFT") + sideTip:SetText("把窗口、标签、过滤和翻译拆成独立页面,避免一屏堆满。") + sideTip:SetTextColor(0.72, 0.72, 0.78) + + self.configPageTitle = panel:CreateFontString(nil, "OVERLAY") + self.configPageTitle:SetFont(fontPath, 14, "OUTLINE") + self.configPageTitle:SetPoint("TOPLEFT", panel, "TOPLEFT", 184, -48) + self.configPageTitle:SetText("") + self.configPageTitle:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + self.configPageDesc = panel:CreateFontString(nil, "OVERLAY") + self.configPageDesc:SetFont(fontPath, 10, "OUTLINE") + self.configPageDesc:SetPoint("TOPLEFT", panel, "TOPLEFT", 184, -68) + self.configPageDesc:SetText("") + self.configPageDesc:SetTextColor(0.78, 0.78, 0.84) + + self.configNavButtons = {} + local navY = -88 + for i = 1, table.getn(CONFIG_PAGE_ORDER) do + local info = CONFIG_PAGE_ORDER[i] + local btn = CreateCfgButton(sidebar, info.label, 12, navY, 130, 28, function() + SFrames.Chat:ShowConfigPage(info.key) + SFrames.Chat:RefreshConfigFrame() + end) + if info.icon then AddBtnIcon(btn, info.icon, nil, "left") end + btn.pageKey = info.key + local oldLeave = btn:GetScript("OnLeave") + btn:SetScript("OnLeave", function() + if oldLeave then oldLeave() end + if this.pageKey and SFrames and SFrames.Chat and SFrames.Chat.configActivePage == this.pageKey then + SetConfigNavButtonActive(this, true) + end + end) + self.configNavButtons[info.key] = btn + navY = navY - 36 + end + + local content = CreateFrame("Frame", nil, panel) + content:SetPoint("TOPLEFT", panel, "TOPLEFT", 184, -92) + content:SetWidth(584) + content:SetHeight(484) + panel.content = content + + local controls = {} + local function AddControl(ctrl) + table.insert(controls, ctrl) + return ctrl + end + + local pages = {} + local function CreatePage(key) + local page = CreateFrame("Frame", nil, content) + page:SetAllPoints(content) + page:Hide() + pages[key] = page + return page + end + + local windowPage = CreatePage("window") + do + local appearance = CreateCfgSection(windowPage, "窗口外观", 0, 0, 584, 274, fontPath) + AddControl(CreateCfgSlider(appearance, "宽度", 16, -46, 260, 320, 900, 1, + function() return EnsureDB().width end, + function(v) EnsureDB().width = v end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(appearance, "高度", 308, -46, 260, 120, 460, 1, + function() return EnsureDB().height end, + function(v) EnsureDB().height = v end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(appearance, "缩放", 16, -108, 260, 0.75, 1.40, 0.05, + function() return EnsureDB().scale end, + function(v) EnsureDB().scale = v end, + function(v) return string.format("%.2f", v) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(appearance, "字号", 308, -108, 260, 10, 18, 1, + function() return EnsureDB().fontSize end, + function(v) EnsureDB().fontSize = v end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgSlider(appearance, "背景透明度", 16, -170, 260, 0, 1, 0.05, + function() return EnsureDB().bgAlpha end, + function(v) EnsureDB().bgAlpha = v end, + function(v) return string.format("%.0f%%", v * 100) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(appearance, "启用聊天", 16, -218, + function() return EnsureDB().enable ~= false end, + function(checked) + local oldState = EnsureDB().enable ~= false + if oldState ~= checked then + EnsureDB().enable = (checked == true) + if StaticPopup_Show then + StaticPopup_Show("SFRAMES_CHAT_RELOAD_PROMPT") + else + ReloadUI() + end + end + end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(appearance, "显示边框", 144, -218, + function() return EnsureDB().showBorder ~= false end, + function(checked) EnsureDB().showBorder = (checked == true) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(appearance, "边框职业色", 288, -218, + function() return EnsureDB().borderClassColor == true end, + function(checked) EnsureDB().borderClassColor = (checked == true) end, + function() SFrames.Chat:ApplyConfig(); SFrames.Chat:RefreshConfigFrame() end + )) + AddControl(CreateCfgCheck(appearance, "显示等级", 432, -218, + function() return EnsureDB().showPlayerLevel ~= false end, + function(checked) EnsureDB().showPlayerLevel = (checked == true) end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + + self.cfgWindowSummaryText = appearance:CreateFontString(nil, "OVERLAY") + self.cfgWindowSummaryText:SetFont(fontPath, 10, "OUTLINE") + self.cfgWindowSummaryText:SetPoint("BOTTOMLEFT", appearance, "BOTTOMLEFT", 16, 10) + self.cfgWindowSummaryText:SetTextColor(0.74, 0.74, 0.8) + + local inputSection = CreateCfgSection(windowPage, "输入框", 0, -290, 584, 114, fontPath) + self.cfgInputModeText = inputSection:CreateFontString(nil, "OVERLAY") + self.cfgInputModeText:SetFont(fontPath, 11, "OUTLINE") + self.cfgInputModeText:SetPoint("TOPLEFT", inputSection, "TOPLEFT", 16, -30) + self.cfgInputModeText:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + self.cfgInputModeText:SetText("") + + CreateCfgButton(inputSection, "底部", 16, -52, 92, 22, function() + EnsureDB().editBoxPosition = "bottom" + SFrames.Chat:StyleEditBox() + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(inputSection, "顶部", 114, -52, 92, 22, function() + EnsureDB().editBoxPosition = "top" + SFrames.Chat:StyleEditBox() + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(inputSection, "自由拖动", 212, -52, 108, 22, function() + EnsureDB().editBoxPosition = "free" + SFrames.Chat:StyleEditBox() + SFrames.Chat:RefreshConfigFrame() + DEFAULT_CHAT_FRAME:AddMessage("|cffffd100Nanami-UI:|r 按住 Alt 可拖动输入框。") + end) + + local inputTip = inputSection:CreateFontString(nil, "OVERLAY") + inputTip:SetFont(fontPath, 10, "OUTLINE") + inputTip:SetPoint("BOTTOMLEFT", inputSection, "BOTTOMLEFT", 16, 10) + inputTip:SetWidth(540) + inputTip:SetJustifyH("LEFT") + inputTip:SetText("建议优先使用顶部或底部模式;自由拖动适合特殊布局。") + inputTip:SetTextColor(0.74, 0.74, 0.8) + + local actionSection = CreateCfgSection(windowPage, "窗口操作", 0, -398, 584, 96, fontPath) + CreateCfgButton(actionSection, "重置位置", 16, -32, 108, 24, function() + SFrames.Chat:ResetPosition() + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(actionSection, "解锁", 132, -32, 108, 24, function() + if SFrames and SFrames.UnlockFrames then SFrames:UnlockFrames() end + end) + CreateCfgButton(actionSection, "锁定", 248, -32, 108, 24, function() + if SFrames and SFrames.LockFrames then SFrames:LockFrames() end + end) + CreateCfgButton(actionSection, "重置私聊图标位置", 364, -32, 160, 24, function() + if SFramesDB then SFramesDB.whisperBtnPos = nil end + if SFrames and SFrames.Chat and SFrames.Chat.frame then + local f = SFrames.Chat.frame + if f.whisperButton and f.configButton then + f.whisperButton:ClearAllPoints() + f.whisperButton:SetPoint("RIGHT", f.configButton, "LEFT", -6, 0) + end + end + SFrames.Chat:RefreshConfigFrame() + end) + end + + local tabsPage = CreatePage("tabs") + do + local tabSection = CreateCfgSection(tabsPage, "当前标签", 0, 0, 584, 118, fontPath) + self.cfgCurrentTabText = tabSection:CreateFontString(nil, "OVERLAY") + self.cfgCurrentTabText:SetFont(fontPath, 12, "OUTLINE") + self.cfgCurrentTabText:SetPoint("TOPLEFT", tabSection, "TOPLEFT", 16, -30) + self.cfgCurrentTabText:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + + CreateCfgButton(tabSection, "上一个", 16, -54, 92, 22, function() + SFrames.Chat:StepTab(-1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(tabSection, "下一个", 114, -54, 92, 22, function() + SFrames.Chat:StepTab(1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(tabSection, "新建", 212, -54, 92, 22, function() + SFrames.Chat:PromptNewTab() + SFrames.Chat:RefreshConfigFrame() + end) + self.cfgDeleteTabButton = CreateCfgButton(tabSection, "删除", 310, -54, 92, 22, function() + SFrames.Chat:DeleteActiveTab() + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(tabSection, "前往过滤", 408, -54, 112, 22, function() + SFrames.Chat:ShowConfigPage("filters") + SFrames.Chat:RefreshConfigFrame() + end) + + local renameSection = CreateCfgSection(tabsPage, "重命名", 0, -134, 584, 84, fontPath) + self.cfgRenameBox = CreateCfgEditBox(renameSection, 16, -38, 250, 20, + function() return SFrames.Chat:GetConfigFrameActiveTabName() end, + function(text) + SFrames.Chat:RenameActiveTab(text) + SFrames.Chat:RefreshConfigFrame() + end + ) + CreateCfgButton(renameSection, "应用名称", 280, -36, 108, 22, function() + SFrames.Chat:RenameActiveTab(SFrames.Chat.cfgRenameBox:GetText() or "") + SFrames.Chat:RefreshConfigFrame() + end) + + local infoSection = CreateCfgSection(tabsPage, "状态与快捷入口", 0, -234, 584, 116, fontPath) + self.cfgTabProtectedText = infoSection:CreateFontString(nil, "OVERLAY") + self.cfgTabProtectedText:SetFont(fontPath, 11, "OUTLINE") + self.cfgTabProtectedText:SetPoint("TOPLEFT", infoSection, "TOPLEFT", 16, -30) + self.cfgTabProtectedText:SetWidth(540) + self.cfgTabProtectedText:SetJustifyH("LEFT") + + CreateCfgButton(infoSection, "消息过滤", 16, -66, 110, 22, function() + SFrames.Chat:ShowConfigPage("filters") + SFrames.Chat:RefreshConfigFrame() + end) + local aiBtn = CreateCfgButton(infoSection, "AI 翻译", 132, -66, 110, 22, function() + SFrames.Chat:ShowConfigPage("translate") + SFrames.Chat:RefreshConfigFrame() + end) + AddBtnIcon(aiBtn, "ai") + + local infoTip = infoSection:CreateFontString(nil, "OVERLAY") + infoTip:SetFont(fontPath, 10, "OUTLINE") + infoTip:SetPoint("BOTTOMLEFT", infoSection, "BOTTOMLEFT", 16, 12) + infoTip:SetWidth(540) + infoTip:SetJustifyH("LEFT") + infoTip:SetText("默认综合/战斗标签可能受保护。自定义标签建议先设置频道过滤,再配置 AI 翻译。") + infoTip:SetTextColor(0.74, 0.74, 0.8) + end + + local filtersPage = CreatePage("filters") + do + local headerSection = CreateCfgSection(filtersPage, "当前过滤目标", 0, 0, 584, 92, fontPath) + self.cfgFilterTabText = headerSection:CreateFontString(nil, "OVERLAY") + self.cfgFilterTabText:SetFont(fontPath, 12, "OUTLINE") + self.cfgFilterTabText:SetPoint("TOPLEFT", headerSection, "TOPLEFT", 16, -30) + self.cfgFilterTabText:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + + CreateCfgButton(headerSection, "上一个", 16, -52, 92, 22, function() + SFrames.Chat:StepTab(-1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(headerSection, "下一个", 114, -52, 92, 22, function() + SFrames.Chat:StepTab(1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(headerSection, "标签管理", 212, -52, 108, 22, function() + SFrames.Chat:ShowConfigPage("tabs") + SFrames.Chat:RefreshConfigFrame() + end) + + local filterSection = CreateCfgSection(filtersPage, "消息与频道接收", 0, -108, 584, 380, fontPath) + + CreateCfgButton(filterSection, "全选", 16, -26, 60, 20, function() + for _, def in ipairs(FILTER_DEFS) do + SFrames.Chat:SetActiveTabFilter(def.key, true) + end + local channels = SFrames.Chat:GetJoinedChannels() + for i = 1, table.getn(channels) do + SFrames.Chat:SetActiveTabChannelFilter(channels[i].name, true) + end + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(filterSection, "取消全选", 84, -26, 75, 20, function() + for _, def in ipairs(FILTER_DEFS) do + SFrames.Chat:SetActiveTabFilter(def.key, false) + end + local channels = SFrames.Chat:GetJoinedChannels() + for i = 1, table.getn(channels) do + SFrames.Chat:SetActiveTabChannelFilter(channels[i].name, false) + end + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(filterSection, "反选", 167, -26, 60, 20, function() + local actIdx = SFrames.Chat:GetActiveTabIndex() + local tab = SFrames.Chat:GetActiveTab() + for _, def in ipairs(FILTER_DEFS) do + local state = tab and tab.filters and tab.filters[def.key] ~= false + SFrames.Chat:SetActiveTabFilter(def.key, not state) + end + local channels = SFrames.Chat:GetJoinedChannels() + for i = 1, table.getn(channels) do + local state = SFrames.Chat:GetTabChannelFilter(actIdx, channels[i].name) + SFrames.Chat:SetActiveTabChannelFilter(channels[i].name, not state) + end + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end) + + local nextIndex = 0 + for i = 1, table.getn(FILTER_DEFS) do + local def = FILTER_DEFS[i] + local col = math.mod(nextIndex, 3) + local row = math.floor(nextIndex / 3) + local x = 16 + col * 182 + local y = -60 - row * 24 + + AddControl(CreateCfgCheck(filterSection, def.label, x, y, + function() + local tab = SFrames.Chat:GetActiveTab() + return tab and tab.filters and tab.filters[def.key] ~= false + end, + function(checked) + SFrames.Chat:SetActiveTabFilter(def.key, checked) + end, + function() + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end + )) + nextIndex = nextIndex + 1 + end + + -- Channel sub-header: separator, hint, refresh button + local chSepRow = math.ceil(nextIndex / 3) + local chSepY = -60 - chSepRow * 24 + + local chSepLine = filterSection:CreateTexture(nil, "ARTWORK") + chSepLine:SetTexture(1, 1, 1, 0.15) + chSepLine:SetPoint("TOPLEFT", filterSection, "TOPLEFT", 16, chSepY + 6) + chSepLine:SetWidth(540) + chSepLine:SetHeight(1) + + local chSepLabel = filterSection:CreateFontString(nil, "OVERLAY") + chSepLabel:SetFont(fontPath, 11, "OUTLINE") + chSepLabel:SetPoint("TOPLEFT", filterSection, "TOPLEFT", 16, chSepY - 4) + chSepLabel:SetText("频道过滤") + chSepLabel:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + self.cfgChannelHint = filterSection:CreateFontString(nil, "OVERLAY") + self.cfgChannelHint:SetFont(fontPath, 10, "OUTLINE") + self.cfgChannelHint:SetPoint("TOPLEFT", filterSection, "TOPLEFT", 120, chSepY - 5) + self.cfgChannelHint:SetTextColor(0.84, 0.80, 0.86) + self.cfgChannelHint:SetText("已加入频道:") + + CreateCfgButton(filterSection, "刷新频道列表", 420, chSepY - 2, 100, 18, function() + SFrames.Chat:RefreshConfigFrame() + end) + + nextIndex = (chSepRow + 1) * 3 + + self.cfgChannelChecks = {} + for i = 1, 15 do + local slot = i + local col = math.mod(nextIndex, 3) + local row = math.floor(nextIndex / 3) + local x = 16 + col * 182 + local y = -60 - row * 24 + + local cb = CreateFrame("CheckButton", NextConfigWidget("ChannelCheck"), filterSection, "UICheckButtonTemplate") + cb:SetWidth(20) + cb:SetHeight(20) + cb:SetPoint("TOPLEFT", filterSection, "TOPLEFT", x, y) + StyleCfgCheck(cb) + + local label = _G[cb:GetName() .. "Text"] + if label then + label:SetText("") + label:SetWidth(150) + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + + cb:SetScript("OnClick", function() + local name = this.channelName + if not name or name == "" then return end + SFrames.Chat:SetActiveTabChannelFilter(name, this:GetChecked() and true or false) + SFrames.Chat:ApplyConfig() + SFrames.Chat:RefreshConfigFrame() + end) + + cb.Refresh = function() + local channels = SFrames.Chat:GetJoinedChannels() + local info = channels[slot] + if info then + cb.channelName = info.name + if label then label:SetText(ShortText(info.name, 24)) end + cb:SetChecked(SFrames.Chat:GetTabChannelFilter(SFrames.Chat:GetActiveTabIndex(), info.name) and true or false) + cb:Show() + else + cb.channelName = nil + cb:SetChecked(false) + if label then label:SetText("") end + cb:Hide() + end + end + + AddControl(cb) + table.insert(self.cfgChannelChecks, cb) + nextIndex = nextIndex + 1 + end + end + + local translatePage = CreatePage("translate") + do + local headerSection = CreateCfgSection(translatePage, "当前翻译目标", 0, 0, 584, 104, fontPath) + self.cfgTranslateTabText = headerSection:CreateFontString(nil, "OVERLAY") + self.cfgTranslateTabText:SetFont(fontPath, 12, "OUTLINE") + self.cfgTranslateTabText:SetPoint("TOPLEFT", headerSection, "TOPLEFT", 16, -30) + self.cfgTranslateTabText:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + + self.cfgTranslateStatusText = headerSection:CreateFontString(nil, "OVERLAY") + self.cfgTranslateStatusText:SetFont(fontPath, 10, "OUTLINE") + self.cfgTranslateStatusText:SetPoint("TOPLEFT", headerSection, "TOPLEFT", 16, -50) + self.cfgTranslateStatusText:SetWidth(540) + self.cfgTranslateStatusText:SetJustifyH("LEFT") + + CreateCfgButton(headerSection, "上一个", 16, -72, 92, 22, function() + SFrames.Chat:StepTab(-1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(headerSection, "下一个", 114, -72, 92, 22, function() + SFrames.Chat:StepTab(1) + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(headerSection, "频道过滤", 212, -72, 108, 22, function() + SFrames.Chat:ShowConfigPage("filters") + SFrames.Chat:RefreshConfigFrame() + end) + + local filterSection = CreateCfgSection(translatePage, "消息与频道翻译", 0, -120, 584, 360, fontPath) + + CreateCfgButton(filterSection, "全选", 16, -26, 60, 20, function() + for _, key in ipairs(TRANSLATE_FILTER_ORDER) do + SFrames.Chat:SetActiveTabTranslateFilter(key, true) + end + local channels = SFrames.Chat:GetJoinedChannels() + for i = 1, table.getn(channels) do + SFrames.Chat:SetActiveTabChannelTranslateFilter(channels[i].name, true) + end + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(filterSection, "取消全选", 84, -26, 75, 20, function() + for _, key in ipairs(TRANSLATE_FILTER_ORDER) do + SFrames.Chat:SetActiveTabTranslateFilter(key, false) + end + local channels = SFrames.Chat:GetJoinedChannels() + for i = 1, table.getn(channels) do + SFrames.Chat:SetActiveTabChannelTranslateFilter(channels[i].name, false) + end + SFrames.Chat:RefreshConfigFrame() + end) + CreateCfgButton(filterSection, "反选", 167, -26, 60, 20, function() + local actIdx = SFrames.Chat:GetActiveTabIndex() + for _, key in ipairs(TRANSLATE_FILTER_ORDER) do + local state = SFrames.Chat:GetTabTranslateFilter(actIdx, key) + SFrames.Chat:SetActiveTabTranslateFilter(key, not state) + end + local channels = SFrames.Chat:GetJoinedChannels() + for i = 1, table.getn(channels) do + local state = SFrames.Chat:GetTabChannelTranslateFilter(actIdx, channels[i].name) + SFrames.Chat:SetActiveTabChannelTranslateFilter(channels[i].name, not state) + end + SFrames.Chat:RefreshConfigFrame() + end) + + local nextIndex = 0 + for i = 1, table.getn(TRANSLATE_FILTER_ORDER) do + local key = TRANSLATE_FILTER_ORDER[i] + local col = math.mod(nextIndex, 3) + local row = math.floor(nextIndex / 3) + local x = 16 + col * 182 + local y = -60 - row * 24 + + AddControl(CreateCfgCheck(filterSection, GetFilterLabel(key), x, y, + function() + return SFrames.Chat:GetTabTranslateFilter(SFrames.Chat:GetActiveTabIndex(), key) + end, + function(checked) + SFrames.Chat:SetActiveTabTranslateFilter(key, checked) + end, + function() + SFrames.Chat:RefreshConfigFrame() + end + )) + nextIndex = nextIndex + 1 + end + + -- Channel sub-header for translate page + local tchSepRow = math.ceil(nextIndex / 3) + local tchSepY = -60 - tchSepRow * 24 + + local tchSepLine = filterSection:CreateTexture(nil, "ARTWORK") + tchSepLine:SetTexture(1, 1, 1, 0.15) + tchSepLine:SetPoint("TOPLEFT", filterSection, "TOPLEFT", 16, tchSepY + 6) + tchSepLine:SetWidth(540) + tchSepLine:SetHeight(1) + + local tchSepLabel = filterSection:CreateFontString(nil, "OVERLAY") + tchSepLabel:SetFont(fontPath, 11, "OUTLINE") + tchSepLabel:SetPoint("TOPLEFT", filterSection, "TOPLEFT", 16, tchSepY - 4) + tchSepLabel:SetText("频道翻译") + tchSepLabel:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + self.cfgTranslateChannelHint = filterSection:CreateFontString(nil, "OVERLAY") + self.cfgTranslateChannelHint:SetFont(fontPath, 10, "OUTLINE") + self.cfgTranslateChannelHint:SetPoint("TOPLEFT", filterSection, "TOPLEFT", 120, tchSepY - 5) + self.cfgTranslateChannelHint:SetTextColor(0.84, 0.80, 0.86) + self.cfgTranslateChannelHint:SetText("已加入频道:") + + CreateCfgButton(filterSection, "刷新频道列表", 420, tchSepY - 2, 100, 18, function() + SFrames.Chat:RefreshConfigFrame() + end) + + nextIndex = (tchSepRow + 1) * 3 + + self.translateChannelChecks = {} + for i = 1, 15 do + local slot = i + local col = math.mod(nextIndex, 3) + local row = math.floor(nextIndex / 3) + local x = 16 + col * 182 + local y = -60 - row * 24 + + local cb = CreateFrame("CheckButton", NextConfigWidget("TranslateChannelCheck"), filterSection, "UICheckButtonTemplate") + cb:SetWidth(20) + cb:SetHeight(20) + cb:SetPoint("TOPLEFT", filterSection, "TOPLEFT", x, y) + StyleCfgCheck(cb) + + local label = _G[cb:GetName() .. "Text"] + if label then + label:SetText("") + label:SetWidth(150) + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + + cb:SetScript("OnClick", function() + local name = this.channelName + if not name or name == "" then return end + SFrames.Chat:SetActiveTabChannelTranslateFilter(name, this:GetChecked() and true or false) + SFrames.Chat:RefreshConfigFrame() + end) + + cb.Refresh = function() + local channels = SFrames.Chat:GetJoinedChannels() + local info = channels[slot] + if info then + cb.channelName = info.name + if label then + label:SetText(ShortText(info.name, 24)) + label:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + cb:SetChecked(SFrames.Chat:GetTabChannelTranslateFilter(SFrames.Chat:GetActiveTabIndex(), info.name) and true or false) + cb:Enable() + cb:Show() + else + cb.channelName = nil + cb:SetChecked(false) + if label then label:SetText("") end + cb:Hide() + end + end + + AddControl(cb) + table.insert(self.translateChannelChecks, cb) + nextIndex = nextIndex + 1 + end + end + + local hcPage = CreatePage("hc") + do + local hcControls = CreateCfgSection(hcPage, "硬核生存服务器专属", 0, 0, 584, 182, fontPath) + + AddControl(CreateCfgCheck(hcControls, "全局彻底关闭硬核频道接收", 16, -30, + function() return EnsureDB().hcGlobalDisable == true end, + function(checked) EnsureDB().hcGlobalDisable = (checked == true) end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + + local hcTip = hcControls:CreateFontString(nil, "OVERLAY") + hcTip:SetFont(fontPath, 10, "OUTLINE") + hcTip:SetPoint("TOPLEFT", hcControls, "TOPLEFT", 16, -56) + hcTip:SetWidth(540) + hcTip:SetJustifyH("LEFT") + hcTip:SetText("彻底无视HC频道的强制聊天推送。勾选后,所有标签都不会收到硬核频道内容。") + hcTip:SetTextColor(0.8, 0.7, 0.7) + + AddControl(CreateCfgCheck(hcControls, "全局屏蔽玩家死亡/满级信息", 16, -86, + function() return EnsureDB().hcDeathDisable == true end, + function(checked) EnsureDB().hcDeathDisable = (checked == true) end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + + local deathTip = hcControls:CreateFontString(nil, "OVERLAY") + deathTip:SetFont(fontPath, 10, "OUTLINE") + deathTip:SetPoint("TOPLEFT", hcControls, "TOPLEFT", 16, -112) + deathTip:SetWidth(540) + deathTip:SetJustifyH("LEFT") + deathTip:SetText("关闭那些“某某在XX级死亡”的系统提示。") + deathTip:SetTextColor(0.8, 0.7, 0.7) + + AddControl(CreateCfgSlider(hcControls, "最低死亡通报等级", 340, -82, 210, 0, 60, 1, + function() return EnsureDB().hcDeathLevelMin or 0 end, + function(v) EnsureDB().hcDeathLevelMin = v end, + function(v) return (v == 0) and "所有击杀" or (tostring(v) .. " 级及以上") end, + function() SFrames.Chat:RefreshConfigFrame() end + )) + end + + local close = CreateCfgButton(panel, "保存", 430, -588, 150, 28, function() + SFrames.Chat.configFrame:Hide() + local db = EnsureDB() + + -- Send Hardcore specific commands on Save + if SFrames.Chat.initialHcGlobalDisable ~= nil and db.hcGlobalDisable ~= SFrames.Chat.initialHcGlobalDisable then + SendChatMessage(".hcc", "SAY") + SFrames.Chat.initialHcGlobalDisable = db.hcGlobalDisable + end + + if db.hcDeathDisable then + SendChatMessage(".hcm 60", "SAY") + elseif db.hcDeathLevelMin then + SendChatMessage(".hcm " .. tostring(db.hcDeathLevelMin), "SAY") + else + SendChatMessage(".hcm 0", "SAY") + end + end) + StyleCfgButton(close) + AddBtnIcon(close, "save") + + local reload = CreateCfgButton(panel, "保存并重载", 598, -588, 150, 28, function() + ReloadUI() + end) + StyleCfgButton(reload) + AddBtnIcon(reload, "save") + + self.configControls = controls + self.configPages = pages + self.configFrame = panel + self.translateConfigFrame = panel + + -- Auto-refresh channel list while panel is visible + local channelPollTimer = 0 + local lastChannelCount = 0 + panel:SetScript("OnUpdate", function() + channelPollTimer = channelPollTimer + (arg1 or 0) + if channelPollTimer >= 3 then + channelPollTimer = 0 + if not this:IsShown() then return end + local channels = SFrames.Chat:GetJoinedChannels() + local n = table.getn(channels) + if n ~= lastChannelCount then + lastChannelCount = n + SFrames.Chat:RefreshConfigFrame() + end + end + end) + + self:ShowConfigPage(self.configActivePage or "window") +end + +function SFrames.Chat:OpenConfigFrame(pageKey) + self:EnsureConfigFrame() + if not self.configFrame then return end + self.initialHcGlobalDisable = EnsureDB().hcGlobalDisable + self:ShowConfigPage(pageKey or self.configActivePage or "window") + self:RefreshConfigFrame() + self.configFrame:Show() + self.configFrame:Raise() +end + +function SFrames.Chat:ToggleConfigFrame(pageKey) + self:EnsureConfigFrame() + if not self.configFrame then return end + + local targetPage = pageKey or self.configActivePage or "window" + if self.configFrame:IsShown() then + if pageKey and self.configActivePage ~= targetPage then + self:ShowConfigPage(targetPage) + self:RefreshConfigFrame() + self.configFrame:Raise() + else + self.configFrame:Hide() + end + else + self:OpenConfigFrame(targetPage) + end +end + +function SFrames.Chat:HandleSlash(input) + local text = Trim(input) + local _, _, cmd, rest = string.find(text, "^(%S*)%s*(.-)$") + cmd = string.lower(cmd or "") + rest = rest or "" + + if cmd == "" or cmd == "ui" or cmd == "config" or cmd == "panel" then + self:ToggleConfigFrame() + return + end + + if cmd == "help" then + self:PrintHelp() + return + end + + if cmd == "reset" then + self:ResetPosition() + return + end + + if cmd == "size" then + local _, _, w, h = string.find(rest, "^(%d+)%s+(%d+)$") + w = tonumber(w) + h = tonumber(h) + if not w or not h then + if SFrames and SFrames.Print then + SFrames:Print("闂備焦妞垮鍧楀礉瀹ュ洦鍏? /nui chat size ") + end + return + end + self:SetWindowSize(w, h) + if SFrames and SFrames.Print then + SFrames:Print("闂備胶鍘у畷顒勬晝閵堝桅濠㈣泛顭ù鏍煕閳╁喚娈曟俊娴嬪亾闂? " .. tostring(math.floor(w + 0.5)) .. "x" .. tostring(math.floor(h + 0.5))) + end + return + end + + if cmd == "scale" then + local v = tonumber(rest) + if not v then + if SFrames and SFrames.Print then + SFrames:Print("闂備焦妞垮鍧楀礉瀹ュ洦鍏? /nui chat scale <0.75-1.4>") + end + return + end + self:SetWindowScale(v) + if SFrames and SFrames.Print then + SFrames:Print("闂備胶鍘у畷顒勬晝閵堝桅濠㈣泛顭ù鏍煕閳╁啰鎳呯紒杈ㄥ哺閺岋繝鍩€? " .. string.format("%.2f", Clamp(v, 0.75, 1.4))) + end + return + end + + if cmd == "font" then + local v = tonumber(rest) + if not v then + if SFrames and SFrames.Print then + SFrames:Print("闂備焦妞垮鍧楀礉瀹ュ洦鍏? /nui chat font <10-18>") + end + return + end + self:SetFontSize(v) + if SFrames and SFrames.Print then + SFrames:Print("闂備胶鍘у畷顒勬晝閵堝桅濠㈣泛澶囬崑鎾斥槈濞嗗秳娌紓? " .. tostring(math.floor(Clamp(v, 10, 18) + 0.5))) + end + return + end + + if cmd == "tab" then + local _, _, sub, subArgs = string.find(rest, "^(%S*)%s*(.-)$") + sub = string.lower(sub or "") + subArgs = subArgs or "" + + if sub == "new" then + if Trim(subArgs) == "" then + self:PromptNewTab() + else + self:AddTab(subArgs) + end + return + elseif sub == "del" or sub == "delete" then + self:DeleteActiveTab() + return + elseif sub == "next" then + self:StepTab(1) + return + elseif sub == "prev" then + self:StepTab(-1) + return + elseif sub == "rename" then + local ok = self:RenameActiveTab(subArgs) + if (not ok) and SFrames and SFrames.Print then + SFrames:Print("闂備焦妞垮鍧楀礉瀹ュ洦鍏? /nui chat tab rename ") + end + return + else + local idx = tonumber(sub) + if idx then + self:SetActiveTab(idx) + return + end + end + + if SFrames and SFrames.Print then + SFrames:Print("闂備焦妞垮鍧楀礉瀹ュ洦鍏? /nui chat tab new|del|next|prev|rename|") + end + return + end + + if cmd == "filters" then + self:PrintFilters() + return + end + + if cmd == "filter" then + local _, _, key, state = string.find(rest, "^(%S+)%s*(%S*)$") + key = string.lower(key or "") + state = string.lower(state or "") + + local matched = nil + for i = 1, table.getn(FILTER_DEFS) do + local def = FILTER_DEFS[i] + if key == def.key then + matched = def.key + break + end + end + + if not matched then + if SFrames and SFrames.Print then + SFrames:Print("闂備礁鎼悧婊勭閻愮儤鍋傞柍鈺佸暞娴溿倝鏌涢妷锝呭濠殿喓鍨归—鍐Χ閸涱垳鏆涢梺閫炲苯澧柛濠佺矙椤㈡岸顢楁担鐟邦€撻柣鐘充航閸斿秹寮?/nui chat filters") + end + return + end + + local enabled = nil + if state == "on" or state == "1" or state == "true" then + enabled = true + elseif state == "off" or state == "0" or state == "false" then + enabled = false + end + + if enabled == nil then + if SFrames and SFrames.Print then + SFrames:Print("闂備焦妞垮鍧楀礉瀹ュ洦鍏? /nui chat filter on|off") + end + return + end + + self:SetActiveTabFilter(matched, enabled) + self:ApplyConfig() + if SFrames and SFrames.Print then + SFrames:Print("闂佸搫顦弲娑樏洪敃鍌氱?" .. matched .. " = " .. BoolText(enabled)) + end + return + end + + if SFrames and SFrames.Print then + SFrames:Print("闂備礁鎼悧婊勭閻愮儤鍋傞柨鐔哄У閸ゅ倸鈹戦悩鎻掆偓鑸电椤栫偞鐓曟繛鎴炵懃閻忓﹪鏌熼煬鎻掆偓婵囦繆閹绢喖纾兼繝鍨姇濞堝弶绻涙潏鍓хК婵炲娲熷?/nui chat help") + end +end + +function SFrames.Chat:CreateContainer() + if self.frame then return end + + local f = CreateFrame("Frame", "SFramesChatContainer", UIParent) + f:SetWidth(DEFAULTS.width) + f:SetHeight(DEFAULTS.height) + f:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 30, 30) + f:SetMovable(true) + f:EnableMouse(true) + f:RegisterForDrag("LeftButton") + f:SetClampedToScreen(true) + f:SetFrameStrata("LOW") + f:SetResizable(true) + if f.SetMinResize then f:SetMinResize(320, 120) end + if f.SetMaxResize then f:SetMaxResize(900, 460) end + + f:SetScript("OnDragStart", function() + if IsAltKeyDown() or (SFrames and SFrames.isUnlocked) then + this:StartMoving() + end + end) + + f:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + if SFrames and SFrames.Chat then + SFrames.Chat:SavePosition() + end + end) + + f:SetScript("OnSizeChanged", function() + if SFrames and SFrames.Chat then + SFrames.Chat:SaveSizeFromFrame() + SFrames.Chat:RefreshChatBounds() + SFrames.Chat:RefreshTabButtons() + end + end) + + f:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + f:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.9) + f:SetBackdropBorderColor(CFG_THEME.panelBorder[1], CFG_THEME.panelBorder[2], CFG_THEME.panelBorder[3], 0.95) + local chatShadow = CreateFrame("Frame", nil, f) + chatShadow:SetPoint("TOPLEFT", f, "TOPLEFT", -5, 5) + chatShadow:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 5, -5) + chatShadow:SetFrameLevel(math.max(f:GetFrameLevel() - 1, 0)) + chatShadow:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + chatShadow:SetBackdropColor(0, 0, 0, 0.55) + chatShadow:SetBackdropBorderColor(0, 0, 0, 0.4) + + local topGlow = f:CreateTexture(nil, "BACKGROUND") + topGlow:SetTexture("Interface\\Buttons\\WHITE8X8") + topGlow:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1) + topGlow:SetPoint("TOPRIGHT", f, "TOPRIGHT", -1, -1) + topGlow:SetHeight(20) + topGlow:SetVertexColor(1, 0.58, 0.82, 0.2) + topGlow:Hide() + f.topGlow = topGlow + + local topLine = f:CreateTexture(nil, "BORDER") + topLine:SetTexture("Interface\\Buttons\\WHITE8X8") + topLine:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -22) + topLine:SetPoint("TOPRIGHT", f, "TOPRIGHT", -1, -22) + topLine:SetHeight(1) + topLine:SetVertexColor(1, 0.69, 0.88, 0.85) + topLine:Hide() + f.topLine = topLine + + local title = CreateFont(f, 11, "LEFT") + title:SetPoint("TOPLEFT", f, "TOPLEFT", 26, -7) + title:SetText("Nanami") + title:SetTextColor(1, 0.82, 0.93) + f.title = title + local configButton = CreateFrame("Button", nil, f) + configButton:SetWidth(14) + configButton:SetHeight(14) + configButton:SetPoint("TOPRIGHT", f, "TOPRIGHT", -8, -7) + configButton:SetHitRectInsets(-4, -4, -4, -4) + configButton:SetFrameStrata("HIGH") + configButton:SetFrameLevel(f:GetFrameLevel() + 20) + configButton:RegisterForClicks("LeftButtonUp") + + local cfgIcon = SFrames:CreateIcon(configButton, "settings", 12) + cfgIcon:SetPoint("CENTER", configButton, "CENTER", 0, 0) + configButton.cfgIcon = cfgIcon + + configButton:SetScript("OnClick", function() + if SFrames and SFrames.Chat then + SFrames.Chat:ToggleConfigFrame() + end + end) + configButton:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:ClearLines() + GameTooltip:AddLine("聊天设置", 1, 0.84, 0.94) + GameTooltip:AddLine("打开聊天配置面板", 0.85, 0.85, 0.85) + GameTooltip:Show() + end) + configButton:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + f.configButton = configButton + + local whisperButton = CreateFrame("Button", nil, f) + whisperButton:SetFrameStrata("HIGH") + whisperButton:SetWidth(14) + whisperButton:SetHeight(14) + if SFramesDB and SFramesDB.whisperBtnPos then + local pos = SFramesDB.whisperBtnPos + whisperButton:SetPoint(pos.p, f, pos.rp, pos.x, pos.y) + else + whisperButton:SetPoint("RIGHT", configButton, "LEFT", -6, 0) + end + whisperButton:SetHitRectInsets(-4, -4, -4, -4) + whisperButton:SetFrameLevel(f:GetFrameLevel() + 20) + whisperButton:RegisterForClicks("LeftButtonUp") + whisperButton:RegisterForDrag("LeftButton") + whisperButton:SetMovable(true) + whisperButton:SetScript("OnDragStart", function() + if IsAltKeyDown() then + this:StartMoving() + end + end) + whisperButton:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + if not SFramesDB then SFramesDB = {} end + -- Convert to position relative to parent frame f to ensure correct restore after reload + local absX, absY = this:GetCenter() + local fX, fY = f:GetCenter() + local fW, fH = f:GetWidth(), f:GetHeight() + local relX = absX - fX + local relY = absY - fY + SFramesDB.whisperBtnPos = { p = "CENTER", rp = "CENTER", x = relX, y = relY } + end) + + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(whisperButton) + elseif whisperButton.SetBackdrop then + whisperButton:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + if whisperButton.SetBackdropColor then + whisperButton:SetBackdropColor(0.1, 0.08, 0.12, 0.9) + end + if whisperButton.SetBackdropBorderColor then + whisperButton:SetBackdropBorderColor(0.5, 0.8, 1.0, 0.92) + end + + local whisperIcon = SFrames:CreateIcon(whisperButton, "chat", 12) + whisperIcon:SetDrawLayer("ARTWORK") + whisperIcon:SetPoint("CENTER", whisperButton, "CENTER", 0, 0) + whisperIcon:SetVertexColor(0.6, 0.85, 1, 0.95) + + local flashFrame = CreateFrame("Frame", nil, whisperButton) + flashFrame:SetAllPoints(whisperButton) + flashFrame:SetFrameLevel(whisperButton:GetFrameLevel() + 1) + local flashTex = flashFrame:CreateTexture(nil, "OVERLAY") + flashTex:SetTexture("Interface\\Buttons\\WHITE8X8") + flashTex:SetAllPoints(flashFrame) + flashTex:SetVertexColor(1, 0.8, 0.2, 0.4) + flashTex:SetBlendMode("ADD") + flashFrame.tex = flashTex + flashFrame:Hide() + whisperButton.flashFrame = flashFrame + + flashFrame:SetScript("OnUpdate", function() + if not this:IsShown() then return end + this.elapsed = (this.elapsed or 0) + arg1 + local alpha = math.abs(math.sin(this.elapsed * 4)) * 0.5 + 0.1 + this.tex:SetAlpha(alpha) + end) + + whisperButton:SetScript("OnClick", function() + if SFrames and SFrames.Whisper then + SFrames.Whisper:Toggle() + end + this.hasUnread = false + if this.flashFrame then this.flashFrame:Hide() end + end) + whisperButton:SetScript("OnEnter", function() + if this.SetBackdropColor then this:SetBackdropColor(0.16, 0.12, 0.2, 0.96) end + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:ClearLines() + GameTooltip:AddLine("私聊对话管理器", 0.6, 0.8, 1) + if this.hasUnread then + GameTooltip:AddLine("你有未读的私聊消息!", 1, 0.8, 0.2) + end + GameTooltip:AddLine("Alt + 拖动 可移动图标", 0.6, 0.6, 0.6) + GameTooltip:Show() + end) + whisperButton:SetScript("OnLeave", function() + if this.SetBackdropColor then this:SetBackdropColor(0.1, 0.08, 0.12, 0.9) end + GameTooltip:Hide() + end) + + f.whisperButton = whisperButton + + local hint = CreateFont(f, 10, "RIGHT") + hint:SetPoint("RIGHT", whisperButton, "LEFT", -8, 0) + hint:SetText("") + hint:SetTextColor(0.86, 0.78, 0.85) + hint:Hide() + f.hint = hint + + local leftCat = SFrames:CreateIcon(f, "logo", 14) + leftCat:SetDrawLayer("OVERLAY") + leftCat:SetPoint("TOPLEFT", f, "TOPLEFT", 8, -5) + leftCat:SetVertexColor(1, 0.82, 0.9, 0.8) + f.leftCat = leftCat + + local watermark = SFrames:CreateIcon(f, "logo", 62) + watermark:SetDrawLayer("BACKGROUND") + watermark:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -8, 8) + watermark:SetVertexColor(1, 0.78, 0.9, 0.08) + f.watermark = watermark + + local shade = f:CreateTexture(nil, "BACKGROUND") + shade:SetTexture("Interface\\Buttons\\WHITE8X8") + shade:SetVertexColor(0, 0, 0, 0.2) + shade:SetPoint("TOPLEFT", f, "TOPLEFT", 8, -30) + shade:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -8, 8) + f.innerShade = shade + + local tabBar = CreateFrame("Frame", nil, f) + tabBar:SetPoint("LEFT", title, "RIGHT", 10, -1) + tabBar:SetPoint("RIGHT", configButton, "LEFT", -8, -1) + tabBar:SetHeight(18) + f.tabBar = tabBar + + local inner = CreateFrame("Frame", nil, f) + inner:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -30) + inner:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -20, 8) + f.inner = inner + + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + local scrollUpBtn = CreateFrame("Button", nil, f) + scrollUpBtn:SetWidth(16) + scrollUpBtn:SetHeight(16) + scrollUpBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -4, -30) + scrollUpBtn:SetFrameStrata("HIGH") + local upTxt = scrollUpBtn:CreateFontString(nil, "OVERLAY") + upTxt:SetFont(fontPath, 11, "OUTLINE") + upTxt:SetPoint("CENTER", scrollUpBtn, "CENTER", 1, 1) + upTxt:SetText("▲") + upTxt:SetTextColor(0.5, 0.55, 0.6) + scrollUpBtn:SetScript("OnEnter", function() upTxt:SetTextColor(0.9, 0.85, 1) end) + scrollUpBtn:SetScript("OnLeave", function() upTxt:SetTextColor(0.5, 0.55, 0.6) end) + scrollUpBtn:SetScript("OnClick", function() + if SFrames.Chat.chatFrame then + SFrames.Chat.chatFrame:ScrollToTop() + end + end) + + local scrollDownBtn = CreateFrame("Button", nil, f) + scrollDownBtn:SetWidth(16) + scrollDownBtn:SetHeight(16) + scrollDownBtn:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -4, 20) + scrollDownBtn:SetFrameStrata("HIGH") + local dnTxt = scrollDownBtn:CreateFontString(nil, "OVERLAY") + dnTxt:SetFont(fontPath, 11, "OUTLINE") + dnTxt:SetPoint("CENTER", scrollDownBtn, "CENTER", 1, -1) + dnTxt:SetText("▼") + dnTxt:SetTextColor(0.5, 0.55, 0.6) + scrollDownBtn:SetScript("OnEnter", function() dnTxt:SetTextColor(0.9, 0.85, 1) end) + scrollDownBtn:SetScript("OnLeave", function() dnTxt:SetTextColor(0.5, 0.55, 0.6) end) + scrollDownBtn:SetScript("OnClick", function() + if SFrames.Chat.chatFrame then + SFrames.Chat.chatFrame:ScrollToBottom() + end + end) + + local scrollTrack = f:CreateTexture(nil, "BACKGROUND") + scrollTrack:SetTexture("Interface\\Buttons\\WHITE8X8") + scrollTrack:SetPoint("TOP", scrollUpBtn, "BOTTOM", 0, -2) + scrollTrack:SetPoint("BOTTOM", scrollDownBtn, "TOP", 0, 2) + scrollTrack:SetWidth(4) + scrollTrack:SetVertexColor(0.18, 0.19, 0.22, 0.9) + + local resize = CreateFrame("Button", nil, f) + resize:SetWidth(16) + resize:SetHeight(16) + resize:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1) + resize:RegisterForDrag("LeftButton") + resize:EnableMouse(true) + resize:SetFrameStrata("HIGH") + + local resizeTex = resize:CreateTexture(nil, "ARTWORK") + resizeTex:SetTexture("Interface\\ChatFrame\\UI-ChatIM-SizeGrabber-Up") + resizeTex:SetAllPoints(resize) + resizeTex:SetVertexColor(1, 0.74, 0.88, 0.92) + + resize:SetScript("OnEnter", function() + resizeTex:SetVertexColor(1, 0.86, 0.94, 1) + end) + resize:SetScript("OnLeave", function() + resizeTex:SetVertexColor(1, 0.74, 0.88, 0.92) + end) + resize:SetScript("OnMouseDown", function() + if not (IsAltKeyDown() or (SFrames and SFrames.isUnlocked)) then return end + f:StartSizing("BOTTOMRIGHT") + end) + resize:SetScript("OnMouseUp", function() + f:StopMovingOrSizing() + if SFrames and SFrames.Chat then + SFrames.Chat:SaveSizeFromFrame() + SFrames.Chat:ApplyConfig() + end + end) + + f.resizeHandle = resize + self.frame = f + + if not self.hiddenConfigButton then + local hiddenConfigButton = CreateFrame("Button", "SFramesChatHiddenConfigButton", UIParent, "UIPanelButtonTemplate") + hiddenConfigButton:SetWidth(74) + hiddenConfigButton:SetHeight(22) + hiddenConfigButton:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 14, 132) + hiddenConfigButton:SetFrameStrata("DIALOG") + hiddenConfigButton:SetFrameLevel(220) + hiddenConfigButton:SetText("Chat Set") + hiddenConfigButton:SetScript("OnClick", function() + if SFrames and SFrames.Chat then + SFrames.Chat:ToggleConfigFrame() + end + end) + hiddenConfigButton:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_TOPLEFT") + GameTooltip:ClearLines() + GameTooltip:AddLine("Chat Settings", 1, 0.84, 0.94) + GameTooltip:AddLine("Shown while chat UI is hidden.", 0.86, 0.86, 0.86) + GameTooltip:AddLine("Click to open Nanami chat config.", 0.86, 0.86, 0.86) + GameTooltip:Show() + end) + hiddenConfigButton:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + StyleCfgButton(hiddenConfigButton) + hiddenConfigButton:Hide() + self.hiddenConfigButton = hiddenConfigButton + end + + local db = EnsureDB() + local saved = SFramesDB and SFramesDB.Positions and SFramesDB.Positions["ChatFrame"] + if saved then + f:ClearAllPoints() + f:SetPoint(saved.point, UIParent, saved.relativePoint, saved.xOfs, saved.yOfs) + else + f:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", 30, 30) + end + f:SetWidth(Clamp(db.width, 320, 900)) + f:SetHeight(Clamp(db.height, 120, 460)) + + -- Background alpha: always show at configured bgAlpha + local bgA = Clamp(db.bgAlpha or DEFAULTS.bgAlpha, 0, 1) + f:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], bgA) +end + +function SFrames.Chat:HideDefaultChrome() + for _, objectName in ipairs(HIDDEN_OBJECTS) do + ForceHide(_G[objectName]) + end +end + +function SFrames.Chat:HideTabChrome() + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + + for i = 1, maxWindows do + local prefix = "ChatFrame" .. i + local elements = { + prefix .. "Tab", + prefix .. "ButtonFrame", + prefix .. "UpButton", + prefix .. "DownButton", + prefix .. "BottomButton", + prefix .. "TabLeft", + prefix .. "TabMiddle", + prefix .. "TabRight", + prefix .. "TabSelectedLeft", + prefix .. "TabSelectedMiddle", + prefix .. "TabSelectedRight", + prefix .. "TabHighlightLeft", + prefix .. "TabHighlightMiddle", + prefix .. "TabHighlightRight", + prefix .. "TabFlash", + prefix .. "TabGlow", + } + + for _, objectName in ipairs(elements) do + ForceHide(_G[objectName]) + end + + local text = _G[prefix .. "TabText"] + if text then + ForceInvisible(text) + text.Show = Dummy + end + end + + local dock = _G["GeneralDockManager"] + if dock then + if dock.SetAlpha then dock:SetAlpha(0) end + if dock.EnableMouse then dock:EnableMouse(false) end + end +end + +function SFrames.Chat:IsManagedChatWindow(chatFrame) + if not chatFrame then return false end + local name = chatFrame.GetName and chatFrame:GetName() + if type(name) ~= "string" then return false end + if not string.find(name, "^ChatFrame%d+$") then return false end + if self.frame and self.frame.inner and chatFrame.GetParent and chatFrame:GetParent() == self.frame.inner then + return true + end + if self.GetTabIndexForChatFrame and self:GetTabIndexForChatFrame(chatFrame) then + return true + end + return false +end + +function SFrames.Chat:HookWindowDragBlocker() + if self.dragBlockerHooked then return end + + local function ResolveObjectToChatFrame(object) + local probe = object + local steps = 0 + while probe and steps < 10 do + if probe.chatFrame then + probe = probe.chatFrame + end + + if probe and probe.GetName then + local name = probe:GetName() + if type(name) == "string" then + local _, _, idx = string.find(name, "^ChatFrame(%d+)Tab$") + if idx then + local cf = _G["ChatFrame" .. idx] + if cf then + return cf + end + end + if string.find(name, "^ChatFrame%d+$") then + return probe + end + end + end + + if not (probe and probe.GetParent) then + break + end + probe = probe:GetParent() + steps = steps + 1 + end + return nil + end + + local function ResolveTarget(frame) + local direct = ResolveObjectToChatFrame(frame) + if direct then return direct end + return ResolveObjectToChatFrame(this) + end + + local function Wrap(name) + local orig = _G[name] + if type(orig) ~= "function" then return false end + _G[name] = function(frame, a, b, c, d, e) + local target = ResolveTarget(frame) + if SFrames and SFrames.Chat and SFrames.Chat.IsManagedChatWindow and SFrames.Chat:IsManagedChatWindow(target) then + if target and target.StopMovingOrSizing then + target:StopMovingOrSizing() + end + return + end + return orig(frame, a, b, c, d, e) + end + return true + end + + local hookedAny = false + if Wrap("FCF_StartWindowDrag") then hookedAny = true end + if Wrap("FCF_StartMoving") then hookedAny = true end + if Wrap("FCF_StartDrag") then hookedAny = true end + if Wrap("FloatingChatFrame_OnMouseDown") then hookedAny = true end + + if hookedAny then + self.dragBlockerHooked = true + end +end + +function SFrames.Chat:EnforceChatWindowLock(chatFrame) + if not chatFrame then return end + if FCF_SetLocked then + pcall(function() FCF_SetLocked(chatFrame, 1) end) + end + if FCF_SetWindowLocked then + pcall(function() FCF_SetWindowLocked(chatFrame, 1) end) + end + if chatFrame.SetMovable then + chatFrame:SetMovable(false) + end + if not chatFrame.sfRegisterForDragBlocked and chatFrame.RegisterForDrag then + pcall(function() chatFrame:RegisterForDrag("Button4") end) + chatFrame.sfRegisterForDragBlocked = true + chatFrame.sfOriginalRegisterForDrag = chatFrame.RegisterForDrag + chatFrame.RegisterForDrag = function() end + end + if not chatFrame.sfStartMovingBlocked and chatFrame.StartMoving then + chatFrame.sfStartMovingBlocked = true + chatFrame.StartMoving = function(frame) + if frame and frame.StopMovingOrSizing then + frame:StopMovingOrSizing() + end + end + end + if not chatFrame.sfStartSizingBlocked and chatFrame.StartSizing then + chatFrame.sfStartSizingBlocked = true + chatFrame.StartSizing = function(frame) + if frame and frame.StopMovingOrSizing then + frame:StopMovingOrSizing() + end + end + end + if chatFrame.SetScript then + chatFrame:SetScript("OnMouseDown", function() + if this and this.StopMovingOrSizing then + this:StopMovingOrSizing() + end + if (IsAltKeyDown() or (SFrames and SFrames.isUnlocked)) and SFrames.Chat and SFrames.Chat.frame then + SFrames.Chat.frame:StartMoving() + SFrames.Chat._contentDragging = true + end + end) + chatFrame:SetScript("OnMouseUp", function() + if SFrames.Chat and SFrames.Chat._contentDragging and SFrames.Chat.frame then + SFrames.Chat.frame:StopMovingOrSizing() + SFrames.Chat:SavePosition() + SFrames.Chat._contentDragging = nil + end + if this and this.StopMovingOrSizing then + this:StopMovingOrSizing() + end + end) + chatFrame:SetScript("OnDragStart", function() + if this and this.StopMovingOrSizing then + this:StopMovingOrSizing() + end + end) + chatFrame:SetScript("OnDragStop", function() + if SFrames.Chat and SFrames.Chat._contentDragging and SFrames.Chat.frame then + SFrames.Chat.frame:StopMovingOrSizing() + SFrames.Chat:SavePosition() + SFrames.Chat._contentDragging = nil + end + if this and this.StopMovingOrSizing then + this:StopMovingOrSizing() + end + end) + end + if chatFrame.SetUserPlaced then + chatFrame:SetUserPlaced(false) + end + if chatFrame.StopMovingOrSizing then + chatFrame:StopMovingOrSizing() + end +end + +function SFrames.Chat:StartPositionEnforcer() + if self._positionEnforcerRunning then return end + self._positionEnforcerRunning = true + if not self._positionEnforcer then + self._positionEnforcer = CreateFrame("Frame") + end + local enforcer = self._positionEnforcer + enforcer.elapsed = 0 + enforcer:SetScript("OnUpdate", function() + this.elapsed = this.elapsed + arg1 + if this.elapsed < 0.3 then return end + this.elapsed = 0 + if not (SFrames and SFrames.Chat and SFrames.Chat.frame and SFrames.Chat.frame.inner and SFrames.Chat.frame:IsShown()) then + return + end + local inner = SFrames.Chat.frame.inner + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + for i = 1, maxWindows do + local cf = _G["ChatFrame" .. tostring(i)] + if cf and SFrames.Chat:IsManagedChatWindow(cf) then + local needsFix = false + if cf.GetParent and cf:GetParent() ~= inner then + cf:SetParent(inner) + needsFix = true + end + if cf.GetPoint then + local point, relativeTo, relativePoint, xOfs, yOfs = cf:GetPoint(1) + if point ~= "TOPLEFT" or relativeTo ~= inner or relativePoint ~= "TOPLEFT" or (xOfs and xOfs ~= 0) or (yOfs and yOfs ~= 0) then + needsFix = true + end + if cf.GetNumPoints and cf:GetNumPoints() ~= 1 then + needsFix = true + end + end + if needsFix then + cf:ClearAllPoints() + cf:SetPoint("TOPLEFT", inner, "TOPLEFT", 0, 0) + SFrames.Chat:EnforceChatWindowLock(cf) + SFrames.Chat:RefreshChatBounds() + end + end + end + end) +end + +function SFrames.Chat:RefreshChatBounds() + if not (self.chatFrame and self.frame and self.frame.inner) then return end + + -- In WoW 1.12, GetWidth/GetHeight can return 0 for frames sized entirely by anchors. + -- ChatFrame internal scrolling breaks if its explicit size is 0, causing it to render + -- only 1 line at the bottom. We manually calculate the intended size. + local cfg = self:GetConfig() + local parentWidth = self.frame:GetWidth() or cfg.width or 400 + local parentHeight = self.frame:GetHeight() or cfg.height or 200 + + local width = parentWidth - (cfg.sidePadding * 2) + local height = parentHeight - cfg.topPadding - cfg.bottomPadding + + if width < 80 or height < 10 then return end + + self.chatFrame:SetWidth(width + 1) + self.chatFrame:SetWidth(width) + self.chatFrame:SetHeight(height + 1) + self.chatFrame:SetHeight(height) + if self.chatFrame.UpdateScrollRegion then + pcall(function() self.chatFrame:UpdateScrollRegion() end) + end +end + +function SFrames.Chat:StartStabilizer() + if not self.stabilizer then + self.stabilizer = CreateFrame("Frame") + end + + local stabilize = self.stabilizer + stabilize.elapsed = 0 + stabilize.total = 0 + + stabilize:SetScript("OnUpdate", function() + this.elapsed = this.elapsed + arg1 + this.total = this.total + arg1 + + if this.elapsed >= 0.12 then + this.elapsed = 0 + if SFrames and SFrames.Chat then + SFrames.Chat:HideDefaultChrome() + SFrames.Chat:HideTabChrome() + SFrames.Chat:RefreshTabButtons() + -- Only refresh bounds if anchors actually drifted (avoids +1/-1 flicker) + local chat = SFrames.Chat + if chat.chatFrame and chat.frame and chat.frame.inner then + local inner = chat.frame.inner + local point, relativeTo = chat.chatFrame:GetPoint(1) + if point ~= "TOPLEFT" or relativeTo ~= inner then + chat:ReanchorChatFrames() + chat:RefreshChatBounds() + end + end + end + end + + if this.total >= 2 then + this:SetScript("OnUpdate", nil) + end + end) +end + +function SFrames.Chat:EnsureChromeWatcher() + if not self.chromeWatcher then + self.chromeWatcher = CreateFrame("Frame") + end + + local watcher = self.chromeWatcher + watcher.elapsed = 0 + watcher.remaining = math.max(watcher.remaining or 0, 2.5) + if watcher.sfRunning then + return + end + + watcher.sfRunning = true + watcher:SetScript("OnUpdate", function() + this.elapsed = this.elapsed + arg1 + this.remaining = (this.remaining or 0) - arg1 + + if this.elapsed < 0.25 then + if this.remaining <= 0 then + this.sfRunning = false + this:SetScript("OnUpdate", nil) + end + return + end + this.elapsed = 0 + + if not (SFrames and SFrames.Chat and SFrames.Chat.frame and SFrames.Chat.frame:IsShown()) then + if this.remaining <= 0 then + this.sfRunning = false + this:SetScript("OnUpdate", nil) + end + return + end + + local didReanchor = false + SFrames.Chat:HideDefaultChrome() + SFrames.Chat:HideTabChrome() + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + for i = 1, maxWindows do + local cf = _G["ChatFrame" .. tostring(i)] + if cf then + SFrames.Chat:EnforceChatWindowLock(cf) + if SFrames.Chat:IsManagedChatWindow(cf) and SFrames.Chat.frame and SFrames.Chat.frame.inner then + if cf.GetParent and cf:GetParent() ~= SFrames.Chat.frame.inner then + cf:SetParent(SFrames.Chat.frame.inner) + didReanchor = true + end + if cf.GetPoint then + local point, relativeTo, relativePoint, xOfs, yOfs = cf:GetPoint(1) + local badAnchor = (point ~= "TOPLEFT" or relativeTo ~= SFrames.Chat.frame.inner or relativePoint ~= "TOPLEFT" or xOfs ~= 0 or yOfs ~= 0) + if badAnchor or (cf.GetNumPoints and cf:GetNumPoints() ~= 2) then + cf:ClearAllPoints() + cf:SetPoint("TOPLEFT", SFrames.Chat.frame.inner, "TOPLEFT", 0, 0) + cf:SetPoint("BOTTOMRIGHT", SFrames.Chat.frame.inner, "BOTTOMRIGHT", 0, 0) + didReanchor = true + end + end + end + end + end + if SFrames.Chat.chatFrame and SFrames.Chat.frame and SFrames.Chat.frame.inner then + local cf = SFrames.Chat.chatFrame + if cf.GetParent and cf:GetParent() ~= SFrames.Chat.frame.inner then + cf:SetParent(SFrames.Chat.frame.inner) + didReanchor = true + end + if cf.GetPoint then + local point, relativeTo, relativePoint, xOfs, yOfs = cf:GetPoint(1) + local badAnchor = (point ~= "TOPLEFT" or relativeTo ~= SFrames.Chat.frame.inner or relativePoint ~= "TOPLEFT" or xOfs ~= 0 or yOfs ~= 0) + if badAnchor or (cf.GetNumPoints and cf:GetNumPoints() ~= 2) then + cf:ClearAllPoints() + cf:SetPoint("TOPLEFT", SFrames.Chat.frame.inner, "TOPLEFT", 0, 0) + cf:SetPoint("BOTTOMRIGHT", SFrames.Chat.frame.inner, "BOTTOMRIGHT", 0, 0) + didReanchor = true + end + end + end + + if didReanchor then + SFrames.Chat:RefreshChatBounds() + end + + if this.remaining <= 0 then + this.sfRunning = false + this:SetScript("OnUpdate", nil) + end + end) +end + +function SFrames.Chat:ReanchorChatFrames() + if not (self.frame and self.frame.inner) then return end + local inner = self.frame.inner + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + for i = 1, maxWindows do + local cf = _G["ChatFrame" .. tostring(i)] + if cf and self:IsManagedChatWindow(cf) then + if cf.GetParent and cf:GetParent() ~= inner then + cf:SetParent(inner) + end + local point, relativeTo, relativePoint, xOfs, yOfs = cf:GetPoint(1) + if point ~= "TOPLEFT" or relativeTo ~= inner or relativePoint ~= "TOPLEFT" or xOfs ~= 0 or yOfs ~= 0 then + cf:ClearAllPoints() + cf:SetPoint("TOPLEFT", inner, "TOPLEFT", 0, 0) + cf:SetPoint("BOTTOMRIGHT", inner, "BOTTOMRIGHT", 0, 0) + end + end + end + self:HideDefaultChrome() + self:HideTabChrome() +end + +function SFrames.Chat:ApplyChatFrameBaseStyle(chatFrame, isCombat) + if not chatFrame then return end + if chatFrame.SetFrameStrata then + chatFrame:SetFrameStrata("MEDIUM") + end + if chatFrame.SetFrameLevel and self.frame and self.frame.inner then + chatFrame:SetFrameLevel((self.frame.inner:GetFrameLevel() or self.frame:GetFrameLevel() or 1) + 6) + end + if chatFrame.SetAlpha then chatFrame:SetAlpha(1) end + chatFrame:SetFading(false) + if chatFrame.SetTimeVisible then + chatFrame:SetTimeVisible(999999) + end + if chatFrame.EnableMouseWheel then + chatFrame:EnableMouseWheel(true) + if not chatFrame.sfScrollHooked then + chatFrame.sfScrollHooked = true + chatFrame:SetScript("OnMouseWheel", function() + if arg1 > 0 then + if IsShiftKeyDown() then + this:ScrollToTop() + else + this:ScrollUp() + this:ScrollUp() + this:ScrollUp() + end + elseif arg1 < 0 then + if IsShiftKeyDown() then + this:ScrollToBottom() + else + this:ScrollDown() + this:ScrollDown() + this:ScrollDown() + end + end + end) + end + end + chatFrame:SetJustifyH("LEFT") + if chatFrame.SetSpacing then chatFrame:SetSpacing(1) end + if chatFrame.SetMaxLines then + chatFrame:SetMaxLines((isCombat and 4096) or 1024) + end + if chatFrame.SetHyperlinksEnabled then chatFrame:SetHyperlinksEnabled(1) end + if chatFrame.SetIndentedWordWrap then chatFrame:SetIndentedWordWrap(false) end + if chatFrame.SetShadowOffset then chatFrame:SetShadowOffset(1, -1) end + if chatFrame.SetShadowColor then chatFrame:SetShadowColor(0, 0, 0, 0.92) end + + self:EnforceChatWindowLock(chatFrame) + if not chatFrame.sfDragLockHooked and chatFrame.HookScript then + chatFrame.sfDragLockHooked = true + chatFrame:HookScript("OnDragStart", function() + chatFrame:StopMovingOrSizing() + end) + chatFrame:HookScript("OnDragStop", function() + chatFrame:StopMovingOrSizing() + end) + end + + -- Force disable fading completely + chatFrame:SetFading(false) + if chatFrame.SetTimeVisible then + chatFrame:SetTimeVisible(999999) + end + if not chatFrame.sfFadingHooked then + chatFrame.sfFadingHooked = true + chatFrame.SetFading = function() end + chatFrame.SetTimeVisible = function() end + end +end + +function SFrames.Chat:GetChatFrameForTab(tab) + if not tab then return ChatFrame1, false end + if tab.kind == "combat" and ChatFrame2 then + return ChatFrame2, true + end + + local index = 1 + local db = EnsureDB() + for i=1, table.getn(db.tabs) do + if db.tabs[i] == tab then + index = i + break + end + end + + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + if index > maxWindows then index = maxWindows end + + local cfName = "ChatFrame" .. tostring(index) + local cf = _G[cfName] + + if not cf then + return ChatFrame1, false + end + + return cf, false +end + +function SFrames.Chat:EnsureCombatLogFrame() + if not ChatFrame2 then return end + + if (not self.combatLogAddonLoaded) and LoadAddOn and IsAddOnLoaded then + if not IsAddOnLoaded("Blizzard_CombatLog") then + local loadable = false + if GetAddOnInfo then + local name, _, _, enabled, lod, reason = GetAddOnInfo("Blizzard_CombatLog") + loadable = name and name ~= "" and reason ~= "MISSING" and reason ~= "DISABLED" + end + if loadable then + local ok = pcall(LoadAddOn, "Blizzard_CombatLog") + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff9900Nanami-UI:|r Blizzard_CombatLog not available, skipping.") + end + end + end + self.combatLogAddonLoaded = true + end + + if FCF_SetCombatLog then + pcall(function() + FCF_SetCombatLog(ChatFrame2) + end) + end + + if FCF_SetWindowName then + pcall(function() + FCF_SetWindowName(ChatFrame2, DEFAULT_COMBAT_TAB_NAME) + end) + end + + if ChatFrame2.SetFading then ChatFrame2:SetFading(false) end + if ChatFrame2.SetMaxLines then ChatFrame2:SetMaxLines(4096) end + self.combatLogPrepared = true +end + +function SFrames.Chat:SetupChatFrameForTab(index) + local tab = self:GetTab(index) + if not tab then return end + if not (self.frame and self.frame.inner) then return end + + local chatFrame, isCombat = self:GetChatFrameForTab(tab) + if not chatFrame then return end + if isCombat then + self:EnsureCombatLogFrame() + end + + if not self.chatUndockedFrames then + self.chatUndockedFrames = {} + end + if not self.chatFrameToTabIndex then + self.chatFrameToTabIndex = {} + end + local frameID = chatFrame.GetID and chatFrame:GetID() or 1 + if not self.chatUndockedFrames[frameID] and FCF_UnDockFrame then + pcall(function() FCF_UnDockFrame(chatFrame) end) + self.chatUndockedFrames[frameID] = true + end + self.chatFrameToTabIndex[chatFrame] = index + + chatFrame:ClearAllPoints() + chatFrame:SetParent(self.frame.inner) + chatFrame:SetPoint("TOPLEFT", self.frame.inner, "TOPLEFT", 0, 0) + + local cfg = self:GetConfig() + local width = (self.frame:GetWidth() or cfg.width or 400) - (cfg.sidePadding * 2) + local height = (self.frame:GetHeight() or cfg.height or 180) - cfg.topPadding - cfg.bottomPadding + if width < 80 then width = 80 end + if height < 10 then height = 10 end + chatFrame:SetWidth(width) + chatFrame:SetHeight(height) + + self:ApplyChatFrameBaseStyle(chatFrame, isCombat) + if chatFrame.SetUserPlaced then chatFrame:SetUserPlaced(false) end + if chatFrame.SetMaxLines then chatFrame:SetMaxLines((isCombat and 4096) or 1024) end + if chatFrame.UpdateScrollRegion then pcall(function() chatFrame:UpdateScrollRegion() end) end +end + +function SFrames.Chat:SwitchActiveChatFrame(tab) + if not (self.frame and self.frame.inner) then return end + + local activeChatFrame, isCombat = self:GetChatFrameForTab(tab) + if not activeChatFrame then return end + + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + for i = 1, maxWindows do + local cf = _G["ChatFrame"..tostring(i)] + if cf then + self:EnforceChatWindowLock(cf) + if cf == activeChatFrame then + if cf.SetAlpha then cf:SetAlpha(1) end + if cf.EnableMouse then cf:EnableMouse(true) end + if cf.SetFrameLevel and self.frame and self.frame.inner then + cf:SetFrameLevel((self.frame.inner:GetFrameLevel() or self.frame:GetFrameLevel() or 1) + 6) + end + cf:Show() + self.chatFrame = cf + self.chatFrameIsCombat = isCombat + self:RefreshChatBounds() + else + cf:Hide() + if cf.SetAlpha then cf:SetAlpha(0) end + if cf.EnableMouse then cf:EnableMouse(false) end + if cf.SetFrameLevel and self.frame and self.frame.inner then + cf:SetFrameLevel(self.frame.inner:GetFrameLevel() or 1) + end + end + end + end +end + +function SFrames.Chat:AttachChatFrame() + if not (self.frame and self.frame.inner and ChatFrame1) then return end + self:SwitchActiveChatFrame(self:GetActiveTab()) +end + +function SFrames.Chat:RestoreCachedMessages(targetChatFrame) + if not targetChatFrame then return end + local cache = EnsureDB().messageCache + if not cache or table.getn(cache) == 0 then return end + + -- Find which frame index this is + local targetIdx = nil + for fi = 1, 7 do + if targetChatFrame == _G["ChatFrame" .. fi] then + targetIdx = fi + break + end + end + + local origAM = targetChatFrame.origAddMessage or targetChatFrame.AddMessage + if not origAM then return end + + for idx = 1, table.getn(cache) do + local entry = cache[idx] + if entry and entry.text then + local frameIdx = entry.frame or 1 + -- Only restore messages that belong to this frame + if frameIdx == targetIdx then + local msgID = entry.id or 0 + if not SFrames.Chat.MessageHistory then + SFrames.Chat.MessageHistory = {} + end + SFrames.Chat.MessageHistory[msgID] = entry.text + local modified = "|cff888888|Hsfchat:" .. msgID .. "|h[+]|h|r " .. entry.text + origAM(targetChatFrame, modified, entry.r, entry.g, entry.b) + end + end + end +end + +function SFrames.Chat:ApplyAllTabsSetup() + local db = EnsureDB() + self.chatFrameToTabIndex = {} + for i = 1, table.getn(db.tabs) do + self:SetupChatFrameForTab(i) + self:ApplyTabFilters(i) + self:ApplyTabChannels(i) + end + -- Restore cached messages after filters cleared the frames + for i = 1, table.getn(db.tabs) do + local tab = db.tabs[i] + if tab then + local chatFrame = self:GetChatFrameForTab(tab) + if chatFrame then + self:RestoreCachedMessages(chatFrame) + end + end + end + self.cacheRestorePrimed = true + self:SwitchActiveChatFrame(self:GetActiveTab()) +end + +function SFrames.Chat:ApplyTabFilters(index) + local tab, idx = self:GetTab(index) + if not tab then return end + + local chatFrame, isCombat = self:GetChatFrameForTab(tab) + if not chatFrame then return end + + if tab.kind == "combat" and isCombat then + return + end + if not tab.filters then return end + + for _, group in ipairs(ALL_MESSAGE_GROUPS) do + pcall(function() + ChatFrame_RemoveMessageGroup(chatFrame, group) + end) + end + + local applied = {} + local anyEnabled = false + for _, def in ipairs(FILTER_DEFS) do + if tab.filters[def.key] ~= false then + anyEnabled = true + local groups = FILTER_GROUPS[def.key] or {} + for _, group in ipairs(groups) do + if not applied[group] then + applied[group] = true + pcall(function() + ChatFrame_AddMessageGroup(chatFrame, group) + end) + end + end + end + end + + if not anyEnabled then + tab.filters = CopyTable(DEFAULT_FILTERS) + applied = {} + for _, def in ipairs(FILTER_DEFS) do + if tab.filters[def.key] ~= false then + local groups = FILTER_GROUPS[def.key] or {} + for _, group in ipairs(groups) do + if not applied[group] then + applied[group] = true + pcall(function() + ChatFrame_AddMessageGroup(chatFrame, group) + end) + end + end + end + end + self:NotifyConfigUI() + end +end + +function SFrames.Chat:ApplyTabChannels(index) + local tab, idx = self:GetTab(index) + if not tab then return end + + local chatFrame, isCombat = self:GetChatFrameForTab(tab) + if not chatFrame then return end + if tab.kind == "combat" and isCombat then return end + + local channels = self:GetJoinedChannels() + self:ApplyBlockedChannelsGlobally(channels) + local addSupported = (ChatFrame_AddChannel ~= nil) + local removeSupported = (ChatFrame_RemoveChannel ~= nil) + if not (addSupported or removeSupported) then return end + if table.getn(channels) == 0 then return end + + for i = 1, table.getn(channels) do + local name = channels[i].name + local enabled = self:GetTabChannelFilter(idx, name) + if enabled then + if addSupported then + pcall(function() + ChatFrame_AddChannel(chatFrame, name) + end) + end + else + if removeSupported then + pcall(function() + ChatFrame_RemoveChannel(chatFrame, name) + end) + end + end + end +end + +function SFrames.Chat:ApplyAllTabChannels() + local db = EnsureDB() + for i = 1, table.getn(db.tabs) do + self:ApplyTabChannels(i) + end +end + +function SFrames.Chat:ApplyBlockedChannelsGlobally(channels) + if not ChatFrame_RemoveChannel then return end + channels = channels or self:GetJoinedChannels() + if table.getn(channels) == 0 then return end + + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + local db = EnsureDB() + for i = 1, table.getn(channels) do + local info = channels[i] + local name = info and info.name + if IsIgnoredChannelByDefault(name) then + local anyTabEnabled = false + for t = 1, table.getn(db.tabs) do + if self:GetTabChannelFilter(t, name) then + anyTabEnabled = true + break + end + end + if not anyTabEnabled then + for w = 1, maxWindows do + local frame = _G["ChatFrame" .. tostring(w)] + if frame then + pcall(function() + ChatFrame_RemoveChannel(frame, name) + end) + end + end + end + end + end +end + +function SFrames.Chat:EnsureChannelMessageFilter() + return +end + +function SFrames.Chat:EnsureAddMessageChannelFilter() + return +end + +function SFrames.Chat:StartBlockedChannelWatcher() + local watcher = self.blockedChannelWatcher + if watcher and type(watcher) ~= "boolean" and watcher.SetScript then + watcher:SetScript("OnUpdate", nil) + end + self.blockedChannelWatcher = true +end + +function SFrames.Chat:RefreshTabButtons() + if not (self.frame and self.frame.tabBar) then return end + + local db = EnsureDB() + local tabs = db.tabs + local count = table.getn(tabs) + local activeIndex = self:GetActiveTabIndex() + local cfg = self:GetConfig() + local showBorder = (cfg.showBorder ~= false) + local borderR, borderG, borderB = self:GetBorderColorRGB() + local inactiveBorderA = showBorder and 0.72 or 0 + local activeBorderA = showBorder and 0.95 or 0 + local addBorderA = showBorder and 0.9 or 0 + + if not self.tabButtons then self.tabButtons = {} end + for i = 1, table.getn(self.tabButtons) do + self.tabButtons[i]:Hide() + end + + local function EnsureButtonSkin(btn) + if btn.sfSkinned then return end + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + + if btn.SetBackdropColor then + btn:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.92) + end + if btn.SetBackdropBorderColor then + btn:SetBackdropBorderColor(borderR, borderG, borderB, inactiveBorderA) + end + + local bg = btn:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\Tooltips\\UI-Tooltip-Background") + bg:SetPoint("TOPLEFT", btn, "TOPLEFT", 3, -3) + bg:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -3, 3) + bg:SetVertexColor(1, 0.62, 0.84, 0.12) + btn.sfBg = bg + + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + local label = btn:CreateFontString(nil, "OVERLAY") + label:SetFont(fontPath, 9, "OUTLINE") + label:SetPoint("CENTER", btn, "CENTER", 0, 0) + label:SetTextColor(0.92, 0.84, 0.9) + btn.sfText = label + + btn.sfSkinned = true + end + + if not self.addTabButton then + local addBtn = CreateFrame("Button", nil, self.frame.tabBar) + addBtn:SetHeight(18) + addBtn:SetWidth(20) + addBtn:RegisterForClicks("LeftButtonUp") + EnsureButtonSkin(addBtn) + addBtn.sfText:SetText("+") + addBtn:SetScript("OnClick", function() + if SFrames and SFrames.Chat then + SFrames.Chat:PromptNewTab() + end + end) + addBtn:SetScript("OnMouseDown", function() + if this.sfBg then this.sfBg:SetVertexColor(1, 0.4, 0.7, 0.6) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.btnDownBg[1], CFG_THEME.btnDownBg[2], CFG_THEME.btnDownBg[3], 0.96) end + end) + addBtn:SetScript("OnMouseUp", function() + if MouseIsOver and MouseIsOver(this) then + if this.sfBg then this.sfBg:SetVertexColor(1, 0.7, 0.9, 0.3) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.btnHoverBg[1], CFG_THEME.btnHoverBg[2], CFG_THEME.btnHoverBg[3], 0.96) end + else + if this.sfBg then this.sfBg:SetVertexColor(1, 0.62, 0.84, 0.2) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.94) end + end + end) + addBtn:SetScript("OnEnter", function() + if this.sfBg then this.sfBg:SetVertexColor(1, 0.7, 0.9, 0.3) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.btnHoverBg[1], CFG_THEME.btnHoverBg[2], CFG_THEME.btnHoverBg[3], 0.96) end + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:ClearLines() + GameTooltip:AddLine("New Tab", 1, 0.84, 0.94) + GameTooltip:AddLine("Create chat tab", 0.85, 0.85, 0.85) + GameTooltip:Show() + end) + addBtn:SetScript("OnLeave", function() + if this.sfBg then this.sfBg:SetVertexColor(1, 0.62, 0.84, 0.2) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.94) end + GameTooltip:Hide() + end) + self.addTabButton = addBtn + else + EnsureButtonSkin(self.addTabButton) + if self.addTabButton.sfText then self.addTabButton.sfText:SetText("+") end + end + + local gap = 3 + local addWidth = 20 + local barWidth = self.frame.tabBar:GetWidth() or 0 + if barWidth <= 0 then + barWidth = (self.frame:GetWidth() or DEFAULTS.width) - 180 + end + local available = barWidth - addWidth - gap * count - 2 + if available < 20 then available = 20 end + local buttonWidth = math.floor(available / math.max(1, count)) + buttonWidth = Clamp(buttonWidth, 14, 96) + local maxChars = math.max(3, math.floor((buttonWidth - 8) / 5)) + + local x = 0 + for i = 1, count do + local tab = tabs[i] + local btn = self.tabButtons[i] + if not btn then + btn = CreateFrame("Button", nil, self.frame.tabBar) + btn:SetHeight(18) + btn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + self.tabButtons[i] = btn + end + + EnsureButtonSkin(btn) + + btn:ClearAllPoints() + btn:SetPoint("LEFT", self.frame.tabBar, "LEFT", x, 0) + btn:SetWidth(buttonWidth) + if btn.sfText then + btn.sfText:SetText(ShortText(tab.name or ("Tab" .. tostring(i)), maxChars)) + end + + local idx = i + btn:SetScript("OnClick", function() + if not (SFrames and SFrames.Chat) then return end + if arg1 == "RightButton" then + SFrames.Chat:OpenTabContextMenu(idx) + else + SFrames.Chat:SetActiveTab(idx) + end + end) + + btn:SetScript("OnEnter", function() + if idx ~= activeIndex then + if this.sfBg then this.sfBg:SetVertexColor(1, 0.68, 0.89, 0.25) end + if this.sfText then this.sfText:SetTextColor(0.92, 0.84, 0.92) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.92) end + this:SetAlpha(0.96) + end + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:ClearLines() + GameTooltip:AddLine(tab.name or ("Tab" .. tostring(idx)), 1, 0.84, 0.94) + GameTooltip:AddLine("Left: switch", 0.82, 0.82, 0.82) + GameTooltip:AddLine("Right: menu", 1, 0.68, 0.79) + GameTooltip:Show() + end) + btn:SetScript("OnLeave", function() + if idx ~= activeIndex then + if this.sfBg then this.sfBg:SetVertexColor(1, 0.62, 0.84, 0.06) end + if this.sfText then this.sfText:SetTextColor(0.72, 0.64, 0.72) end + if this.SetBackdropColor then this:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.78) end + this:SetAlpha(0.82) + end + GameTooltip:Hide() + end) + + if idx == activeIndex then + local aBg = CFG_THEME.tabActiveBg or CFG_THEME.buttonActiveBg or CFG_THEME.btnBg + local aBd = CFG_THEME.tabActiveBorder or CFG_THEME.buttonActiveBorder + if btn.SetBackdropColor then btn:SetBackdropColor(aBg[1], aBg[2], aBg[3], 0.98) end + if btn.SetBackdropBorderColor then + if aBd then + btn:SetBackdropBorderColor(aBd[1], aBd[2], aBd[3], 1) + else + btn:SetBackdropBorderColor(borderR, borderG, borderB, 1) + end + end + if btn.sfBg then btn.sfBg:SetVertexColor(1, 0.64, 0.86, 0.45) end + if btn.sfText then btn.sfText:SetTextColor(1, 1, 1) end + btn:SetAlpha(1) + else + if btn.SetBackdropColor then btn:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.78) end + if btn.SetBackdropBorderColor then btn:SetBackdropBorderColor(borderR, borderG, borderB, inactiveBorderA) end + if btn.sfBg then btn.sfBg:SetVertexColor(1, 0.62, 0.84, 0.06) end + if btn.sfText then btn.sfText:SetTextColor(0.72, 0.64, 0.72) end + btn:SetAlpha(0.82) + end + + btn:Show() + x = x + buttonWidth + gap + end + + self.addTabButton:ClearAllPoints() + self.addTabButton:SetPoint("LEFT", self.frame.tabBar, "LEFT", x, 0) + if self.addTabButton.SetBackdropColor then self.addTabButton:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.94) end + if self.addTabButton.SetBackdropBorderColor then self.addTabButton:SetBackdropBorderColor(borderR, borderG, borderB, addBorderA) end + if self.addTabButton.sfBg then self.addTabButton.sfBg:SetVertexColor(1, 0.62, 0.84, 0.2) end + if self.addTabButton.sfText then self.addTabButton.sfText:SetTextColor(1, 0.9, 0.98) end + self.addTabButton:Show() +end + + + +function SFrames.Chat:StyleChatFont() + if not (SFrames and SFrames.GetFont) then return end + local cfg = self:GetConfig() + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + local fontPath = SFrames:GetFont() + + local styled = {} + local function Apply(frame) + if not (frame and frame.SetFont) then return end + if styled[frame] then return end + styled[frame] = true + pcall(function() + frame:SetFont(fontPath, cfg.fontSize, outline) + end) + end + + if ChatFontNormal and ChatFontNormal.SetFont then + pcall(function() + ChatFontNormal:SetFont(fontPath, cfg.fontSize, outline) + end) + end + + Apply(self.chatFrame) + local maxWindows = tonumber(NUM_CHAT_WINDOWS) or 7 + for i = 1, maxWindows do + local cf = _G["ChatFrame"..tostring(i)] + if cf then Apply(cf) end + end +end + +function SFrames.Chat:HookChatEditColoring() + if ChatEdit_UpdateHeader and not self._colorHooked then + local orig = ChatEdit_UpdateHeader + ChatEdit_UpdateHeader = function(editBox) + orig(editBox) + + -- Re-apply insets to prevent buttons overlapping text and header + local header = _G[editBox:GetName().."Header"] + local hw = (header and header:GetWidth()) or 0 + if editBox and editBox.SetTextInsets then + -- Left: 20px (for cat icon) + header width + 5px padding + -- Right: 45px (for right shortcut buttons) + editBox:SetTextInsets(hw + 25, 45, 0, 0) + end + + local ctype = editBox.chatType + if not ctype and editBox.GetAttribute then + ctype = editBox:GetAttribute("chatType") + end + + local info = ChatTypeInfo[ctype] + if SFrames and SFrames.Chat and SFrames.Chat.editBackdrop then + if info then + SFrames.Chat.editBackdrop:SetBackdropBorderColor(info.r, info.g, info.b, 1) + if SFrames.Chat.editBackdrop.topLine then + SFrames.Chat.editBackdrop.topLine:SetVertexColor(info.r, info.g, info.b, 0.85) + end + if SFrames.Chat.editBackdrop.catIcon then + SFrames.Chat.editBackdrop.catIcon:SetVertexColor(info.r, info.g, info.b, 0.9) + end + else + -- Default coloring + local cfg = SFrames.Chat:GetConfig() + local r, g, b = SFrames.Chat:GetBorderColorRGB() + SFrames.Chat.editBackdrop:SetBackdropBorderColor(r, g, b, (cfg.showBorder ~= false) and 0.98 or 0) + if SFrames.Chat.editBackdrop.topLine then + SFrames.Chat.editBackdrop.topLine:SetVertexColor(r, g, b, 0.85) + end + if SFrames.Chat.editBackdrop.catIcon then + SFrames.Chat.editBackdrop.catIcon:SetVertexColor(1, 0.84, 0.94, 0.9) + end + end + end + end + self._colorHooked = true + end +end + +function SFrames.Chat:StyleEditBox() + if not self.frame then return end + + local editBox = ChatFrameEditBox or ChatFrame1EditBox + if not editBox then return end + self.editBox = editBox + + local cfg = self:GetConfig() + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + local fontPath = "Fonts\\ARIALN.TTF" + if SFrames and SFrames.GetFont then + local customFont = SFrames:GetFont() + if type(customFont) == "string" and customFont ~= "" then + fontPath = customFont + end + end + local editText = _G[editBox:GetName() .. "Text"] + + local ename = editBox:GetName() + if ename then + local suffixes = {"Left", "Mid", "Middle", "Right", "FocusLeft", "FocusMid", "FocusMiddle", "FocusRight", "Focus"} + for _, suf in ipairs(suffixes) do + local tex = _G[ename .. suf] + if tex then + tex:SetTexture(nil) + tex:Hide() + tex.Show = Dummy + end + end + end + + for _, texName in ipairs(EDITBOX_TEXTURES) do + local tex = _G[texName] + if tex then + tex:SetTexture(nil) + tex:Hide() + tex.Show = Dummy + end + end + + if editBox.SetBackdrop then + editBox:SetBackdrop(nil) + end + local regions = { editBox:GetRegions() } + for _, region in ipairs(regions) do + if region and region:GetObjectType() == "Texture" and region ~= editText then + local layer = region:GetDrawLayer() + if layer == "BACKGROUND" or layer == "BORDER" then + region:SetTexture(nil) + region:Hide() + end + end + end + + -- We will anchor editBox slightly later inside editBackdrop, but we set its basic properties here. + editBox:ClearAllPoints() + editBox:SetHeight(20) + if editBox.SetFrameStrata then editBox:SetFrameStrata("DIALOG") end + if editBox.SetFrameLevel then editBox:SetFrameLevel((self.frame:GetFrameLevel() or 1) + 20) end + if editBox.SetAltArrowKeyMode then editBox:SetAltArrowKeyMode(false) end + -- Let WoW manage text insets via ChatEdit_UpdateHeader dynamically + -- if editBox.SetTextInsets then editBox:SetTextInsets(20, 6, 0, 0) end + if editBox.SetJustifyH then editBox:SetJustifyH("LEFT") end + + local header = _G[editBox:GetName() .. "Header"] + if header then + header:ClearAllPoints() + header:SetPoint("LEFT", editBox, "LEFT", 20, 0) + header:Show() + end + + local function ApplyFontStyle(target) + if not target then return end + if target.SetFont then + pcall(function() + target:SetFont(fontPath, cfg.fontSize, outline) + end) + end + if target.SetFontObject and ChatFontNormal then + target:SetFontObject(ChatFontNormal) + end + if target.SetTextColor then target:SetTextColor(1, 1, 1) end + if target.SetShadowColor then target:SetShadowColor(0, 0, 0, 1) end + if target.SetShadowOffset then target:SetShadowOffset(1, -1) end + if target.SetAlpha then target:SetAlpha(1) end + end + + local function ApplyEditTextStyle() + ApplyFontStyle(editBox) + ApplyFontStyle(editText) + if header then ApplyFontStyle(header) end + if editText and editText.SetDrawLayer then editText:SetDrawLayer("OVERLAY", 7) end + if editText and editText.SetParent then editText:SetParent(editBox) end + if editText and editText.Show then editText:Show() end + end + ApplyEditTextStyle() + + if not self.editBackdrop then + local bg = CreateFrame("Frame", "SFramesChatEditBackdrop", self.frame) + bg:SetFrameStrata("DIALOG") + bg:SetFrameLevel(editBox:GetFrameLevel() - 1) + bg:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + bg:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.96) + bg:SetBackdropBorderColor(CFG_THEME.panelBorder[1], CFG_THEME.panelBorder[2], CFG_THEME.panelBorder[3], 0.98) + + local icon = SFrames:CreateIcon(bg, "logo", 13) + icon:SetPoint("LEFT", bg, "LEFT", 4, 0) + icon:SetVertexColor(1, 0.84, 0.94, 0.9) + bg.catIcon = icon + + local line = bg:CreateTexture(nil, "OVERLAY") + line:SetTexture("Interface\\Buttons\\WHITE8X8") + line:SetPoint("TOPLEFT", bg, "TOPLEFT", 1, -1) + line:SetPoint("TOPRIGHT", bg, "TOPRIGHT", -1, -1) + line:SetHeight(1) + line:SetVertexColor(1, 0.76, 0.9, 0.85) + line:Hide() + bg.topLine = line + + self.editBackdrop = bg + end + + -- Add shortcut buttons inside the edit backdrop's right side. + local buttonParent = self.editBackdrop or self.frame + local btnLevel = (buttonParent:GetFrameLevel() or editBox:GetFrameLevel() or 1) + 3 + if not self.rollButton then + local rb = CreateFrame("Button", "SFramesChatRollButton", buttonParent) + rb:SetWidth(18) + rb:SetHeight(18) + rb:SetFrameStrata("DIALOG") + rb:SetFrameLevel(btnLevel) + + local tex = rb:CreateTexture(nil, "ARTWORK") + tex:SetTexture("Interface\\Buttons\\UI-GroupLoot-Dice-Up") + tex:SetTexCoord(0.06, 0.94, 0.06, 0.94) + tex:SetAllPoints(rb) + rb:SetNormalTexture(tex) + + rb:SetScript("OnClick", function() RandomRoll(1, 100) end) + rb:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:SetText("掷骰子 (1-100)") + GameTooltip:Show() + end) + rb:SetScript("OnLeave", function() GameTooltip:Hide() end) + self.rollButton = rb + end + + if not self.emoteButton then + local eb = CreateFrame("Button", "SFramesChatEmoteButton", buttonParent) + eb:SetWidth(18) + eb:SetHeight(18) + eb:SetFrameStrata("DIALOG") + eb:SetFrameLevel(btnLevel) + + local tex = eb:CreateTexture(nil, "ARTWORK") + tex:SetTexture("Interface\\Icons\\Ability_Warrior_BattleShout") + tex:SetTexCoord(0.08, 0.92, 0.08, 0.92) + tex:SetAllPoints(eb) + eb:SetNormalTexture(tex) + + eb:SetScript("OnClick", function() + if not SFrames.Chat._emoteDropdown then + local dd = CreateFrame("Frame", "SFramesChatEmoteDropdown", UIParent, "UIDropDownMenuTemplate") + SFrames.Chat._emoteDropdown = dd + end + UIDropDownMenu_Initialize(SFrames.Chat._emoteDropdown, function() + local emotes = { + { text = "/大笑", cmd = "LAUGH" }, + { text = "/微笑", cmd = "SMILE" }, + { text = "/挥手", cmd = "WAVE" }, + { text = "/跳舞", cmd = "DANCE" }, + { text = "/鞠躬", cmd = "BOW" }, + { text = "/欢呼", cmd = "CHEER" }, + { text = "/感谢", cmd = "THANK" }, + { text = "/惊讶", cmd = "GASP" }, + { text = "/眨眼", cmd = "WINK" }, + { text = "/叹气", cmd = "SIGH" }, + { text = "/哭泣", cmd = "CRY" }, + { text = "/生气", cmd = "ANGRY" }, + { text = "/飞吻", cmd = "KISS" }, + { text = "/鼓掌", cmd = "APPLAUD"}, + { text = "/点头", cmd = "YES" }, + { text = "/摇头", cmd = "NO" }, + { text = "/强壮", cmd = "FLEX" }, + { text = "/哭喊", cmd = "WHINE" }, + } + for _, e in ipairs(emotes) do + local info = NewDropDownInfo() + info.text = e.text + info.notCheckable = 1 + local cmd = e.cmd + info.func = function() + DoEmote(cmd) + end + UIDropDownMenu_AddButton(info) + end + end, "MENU") + ToggleDropDownMenu(1, nil, SFrames.Chat._emoteDropdown, "SFramesChatEmoteButton", 0, 0) + end) + eb:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:SetText("表情动作") + GameTooltip:Show() + end) + eb:SetScript("OnLeave", function() GameTooltip:Hide() end) + self.emoteButton = eb + end + + -- Re-parent in case buttons were created by an older version. + self.rollButton:SetParent(self.editBackdrop) + self.emoteButton:SetParent(self.editBackdrop) + if self.rollButton.SetFrameLevel then + self.rollButton:SetFrameLevel((editBox:GetFrameLevel() or 1) + 2) + end + if self.emoteButton.SetFrameLevel then + self.emoteButton:SetFrameLevel((editBox:GetFrameLevel() or 1) + 2) + end + + -- Re-anchor buttons every call so they track editBackdrop position + self.rollButton:ClearAllPoints() + self.rollButton:SetPoint("RIGHT", self.editBackdrop, "RIGHT", -4, 0) + self.emoteButton:ClearAllPoints() + self.emoteButton:SetPoint("RIGHT", self.rollButton, "LEFT", -2, 0) + + local function SaveFreeEditBoxPosition() + if EnsureDB().editBoxPosition ~= "free" then return end + if not self.editBackdrop then return end + local x = self.editBackdrop:GetLeft() + local y = self.editBackdrop:GetBottom() + if x and y then + EnsureDB().editBoxX = x + EnsureDB().editBoxY = y + end + end + + self.editBackdrop:ClearAllPoints() + if cfg.editBoxPosition == "bottom" then + self.editBackdrop:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", cfg.sidePadding - 4, -5) + self.editBackdrop:SetPoint("TOPRIGHT", self.frame, "BOTTOMRIGHT", -(cfg.sidePadding - 4), -5) + elseif cfg.editBoxPosition == "free" then + self.editBackdrop:SetPoint("BOTTOMLEFT", UIParent, "BOTTOMLEFT", cfg.editBoxX or 0, cfg.editBoxY or 200) + self.editBackdrop:SetWidth(cfg.width - cfg.sidePadding * 2 + 8) + else -- "top" or default + self.editBackdrop:SetPoint("BOTTOMLEFT", self.frame, "TOPLEFT", cfg.sidePadding - 4, 5) + self.editBackdrop:SetPoint("BOTTOMRIGHT", self.frame, "TOPRIGHT", -(cfg.sidePadding - 4), 5) + end + self.editBackdrop:SetHeight(26) + + self.editBackdrop:EnableMouse(true) + self.editBackdrop:SetMovable(true) + if self.editBackdrop.SetClampedToScreen then self.editBackdrop:SetClampedToScreen(true) end + self.editBackdrop:RegisterForDrag("LeftButton") + self.editBackdrop:SetScript("OnDragStart", function() + if IsAltKeyDown() and EnsureDB().editBoxPosition == "free" then + this:StartMoving() + end + end) + self.editBackdrop:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + SaveFreeEditBoxPosition() + end) + + editBox:SetParent(self.editBackdrop) + editBox:ClearAllPoints() + editBox:SetPoint("TOPLEFT", self.editBackdrop, "TOPLEFT", 4, -3) + editBox:SetPoint("BOTTOMRIGHT", self.editBackdrop, "BOTTOMRIGHT", -45, 3) + editBox:EnableMouse(true) + self.editBackdrop:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], 0.96) + local borderR, borderG, borderB = self:GetBorderColorRGB() + self.editBackdrop:SetBackdropBorderColor(borderR, borderG, borderB, (cfg.showBorder ~= false) and 0.98 or 0) + if self.editBackdrop.topLine then + self.editBackdrop.topLine:Hide() + end + + if not editBox.sfNanamiHooked then + local oldOnShow = editBox:GetScript("OnShow") + local oldOnHide = editBox:GetScript("OnHide") + local oldOnTextChanged = editBox:GetScript("OnTextChanged") + + editBox:SetScript("OnShow", function() + if oldOnShow then oldOnShow() end + ApplyEditTextStyle() + if SFrames and SFrames.Chat and SFrames.Chat.editBackdrop then + SFrames.Chat.editBackdrop:Show() + end + end) + + editBox:SetScript("OnHide", function() + if oldOnHide then oldOnHide() end + if SFrames and SFrames.Chat and SFrames.Chat.editBackdrop then + SFrames.Chat.editBackdrop:Hide() + end + end) + + editBox:SetScript("OnTextChanged", function() + if oldOnTextChanged then oldOnTextChanged() end + ApplyEditTextStyle() + end) + + local origShow = editBox.Show + editBox.Show = function(self) + if SFrames and SFrames.Chat and SFrames.Chat.editBackdrop then + SFrames.Chat.editBackdrop:Show() + end + if origShow then origShow(self) end + end + + local origHide = editBox.Hide + editBox.Hide = function(self) + if SFrames and SFrames.Chat and SFrames.Chat.editBackdrop then + SFrames.Chat.editBackdrop:Hide() + end + if origHide then origHide(self) end + end + + editBox.sfNanamiHooked = true + end + + if not editBox.sfAltFreeDragHooked then + local oldMouseDown = editBox:GetScript("OnMouseDown") + local oldMouseUp = editBox:GetScript("OnMouseUp") + local oldDragStart = editBox:GetScript("OnDragStart") + local oldDragStop = editBox:GetScript("OnDragStop") + + editBox:RegisterForDrag("LeftButton") + editBox:SetScript("OnMouseDown", function() + if oldMouseDown then oldMouseDown() end + if IsAltKeyDown() and EnsureDB().editBoxPosition == "free" and SFrames.Chat and SFrames.Chat.editBackdrop and not SFrames.Chat._editBoxAltDragging then + SFrames.Chat._editBoxAltDragging = true + SFrames.Chat.editBackdrop:StartMoving() + end + end) + editBox:SetScript("OnMouseUp", function() + if oldMouseUp then oldMouseUp() end + if SFrames.Chat and SFrames.Chat._editBoxAltDragging and SFrames.Chat.editBackdrop then + SFrames.Chat.editBackdrop:StopMovingOrSizing() + SFrames.Chat._editBoxAltDragging = nil + SaveFreeEditBoxPosition() + end + end) + editBox:SetScript("OnDragStart", function() + if oldDragStart then oldDragStart() end + if IsAltKeyDown() and EnsureDB().editBoxPosition == "free" and SFrames.Chat and SFrames.Chat.editBackdrop and not SFrames.Chat._editBoxAltDragging then + SFrames.Chat._editBoxAltDragging = true + SFrames.Chat.editBackdrop:StartMoving() + end + end) + editBox:SetScript("OnDragStop", function() + if oldDragStop then oldDragStop() end + if SFrames.Chat and SFrames.Chat.editBackdrop then + SFrames.Chat.editBackdrop:StopMovingOrSizing() + SFrames.Chat._editBoxAltDragging = nil + SaveFreeEditBoxPosition() + end + end) + editBox.sfAltFreeDragHooked = true + end + + if editBox:IsShown() then + self.editBackdrop:Show() + else + self.editBackdrop:Hide() + end +end + +function SFrames.Chat:ApplyFrameBorderStyle() + if not self.frame then return end + + local cfg = self:GetConfig() + local showBorder = (cfg.showBorder ~= false) + local borderR, borderG, borderB = self:GetBorderColorRGB() + if showBorder then + local alpha = (SFrames and SFrames.isUnlocked) and 1 or 0.95 + self.frame:SetBackdropBorderColor(borderR, borderG, borderB, alpha) + else + self.frame:SetBackdropBorderColor(borderR, borderG, borderB, 0) + end + + if self.frame.topLine then + self.frame.topLine:Hide() + end + if self.frame.topGlow then + self.frame.topGlow:Hide() + end +end + +function SFrames.Chat:SetUnlocked(unlocked) + if not self.frame then return end + if self.frame.hint then + self.frame.hint:SetText("") + self.frame.hint:Hide() + end + self:ApplyFrameBorderStyle() + if not unlocked then + self:ApplyAllTabsSetup() + self:RefreshChatBounds() + end +end + +function SFrames.Chat:ApplyConfig() + if not self.frame then return end + + self:HookWindowDragBlocker() + + local db = EnsureDB() + local cfg = self:GetConfig() + + if cfg.enable == false then + if self.hiddenConfigButton then + self.hiddenConfigButton:Show() + end + self.frame:Hide() + if self.editBackdrop then self.editBackdrop:Hide() end + return + end + + if self.hiddenConfigButton then + self.hiddenConfigButton:Hide() + end + self.frame:Show() + self.frame:SetWidth(cfg.width) + self.frame:SetHeight(cfg.height) + self.frame:SetScale(cfg.scale) + + db.width = cfg.width + db.height = cfg.height + db.scale = cfg.scale + db.fontSize = cfg.fontSize + db.showBorder = cfg.showBorder + db.borderClassColor = cfg.borderClassColor + db.sidePadding = cfg.sidePadding + db.topPadding = cfg.topPadding + db.bottomPadding = cfg.bottomPadding + + if self.frame.tabBar and self.frame.title and self.frame.configButton then + self.frame.tabBar:ClearAllPoints() + self.frame.tabBar:SetPoint("LEFT", self.frame.title, "RIGHT", 10, -1) + self.frame.tabBar:SetPoint("RIGHT", self.frame.configButton, "LEFT", -8, -1) + self.frame.tabBar:SetHeight(18) + end + + if self.frame.inner then + self.frame.inner:ClearAllPoints() + self.frame.inner:SetPoint("TOPLEFT", self.frame, "TOPLEFT", cfg.sidePadding, -cfg.topPadding) + self.frame.inner:SetPoint("BOTTOMRIGHT", self.frame, "BOTTOMRIGHT", -cfg.sidePadding, cfg.bottomPadding) + end + + if self.frame.innerShade then + self.frame.innerShade:ClearAllPoints() + self.frame.innerShade:SetPoint("TOPLEFT", self.frame, "TOPLEFT", cfg.sidePadding - 2, -cfg.topPadding + 2) + self.frame.innerShade:SetPoint("BOTTOMRIGHT", self.frame, "BOTTOMRIGHT", -cfg.sidePadding + 2, cfg.bottomPadding + 2) + end + + local bgA = Clamp(cfg.bgAlpha or DEFAULTS.bgAlpha, 0, 1) + self.frame:SetBackdropColor(CFG_THEME.panelBg[1], CFG_THEME.panelBg[2], CFG_THEME.panelBg[3], bgA) + + self:AttachChatFrame() + self:HideDefaultChrome() + self:HideTabChrome() + self:StyleChatFont() + self:RefreshTabButtons() + self:ApplyAllTabsSetup() + self:StyleEditBox() + self:RefreshChatBounds() + self:EnsureChromeWatcher() + self:StartStabilizer() + self:SetUnlocked(SFrames and SFrames.isUnlocked) + self:RefreshConfigFrame() +end + +function SFrames.Chat:Initialize() + EnsureDB() + self:CreateContainer() + self:HookWindowDragBlocker() + self:ApplyConfig() + self:StartPositionEnforcer() + self:EnsureAddMessageChannelFilter() + self:EnsureChannelMessageFilter() + self:ApplyBlockedChannelsGlobally() + self:StartBlockedChannelWatcher() + self:HookChatEditColoring() + + -- Hook ChatFrame_MessageEventHandler to suppress ignored channels (lft/lfg/etc) + if ChatFrame_MessageEventHandler and not SFrames.Chat._lftHooked then + local origHandler = ChatFrame_MessageEventHandler + ChatFrame_MessageEventHandler = function(frameArg, eventArg) + local frame = frameArg or this + local ev = eventArg or event + + if ev == "CHAT_MSG_CHANNEL" or ev == "CHAT_MSG_CHANNEL_JOIN" or ev == "CHAT_MSG_CHANNEL_LEAVE" or ev == "CHAT_MSG_CHANNEL_NOTICE" then + local chanName = GetChannelNameFromMessageEvent(arg4, arg8, arg9, arg2) + if chanName and chanName ~= "" then + if ev == "CHAT_MSG_CHANNEL" or ev == "CHAT_MSG_CHANNEL_JOIN" then + TrackDiscoveredChannel(chanName) + elseif ev == "CHAT_MSG_CHANNEL_LEAVE" then + UntrackDiscoveredChannel(chanName) + end + end + if frame and frame.GetName then + local frameName = frame:GetName() + if type(frameName) == "string" and string.find(frameName, "^ChatFrame%d+$") then + local matchedTabIdx = SFrames.Chat:GetTabIndexForChatFrame(frame) + if matchedTabIdx then + local tab = EnsureDB().tabs[matchedTabIdx] + local allowChannelMessages = not (tab.filters and tab.filters.channel == false) + if not allowChannelMessages or not SFrames.Chat:GetTabChannelFilter(matchedTabIdx, chanName) then + return + end + end + end + end + end + + return origHandler(frame, ev) + end + SFrames.Chat._lftHooked = true + end + + -- Direct event-based auto-translation hook (always installed as primary translation trigger) + if not SFrames.Chat._directTranslateHooked then + SFrames.Chat._directTranslateHooked = true + local translateEvFrame = CreateFrame("Frame", "SFramesChatTranslateEvents", UIParent) + for evName, _ in pairs(TRANSLATE_EVENT_FILTERS) do + translateEvFrame:RegisterEvent(evName) + end + translateEvFrame:SetScript("OnEvent", function() + if not (SFrames and SFrames.Chat) then return end + local filterKey = GetTranslateFilterKeyForEvent(event) + if not filterKey then return end + local messageText = arg1 + if type(messageText) ~= "string" or messageText == "" then return end + + local channelName = nil + if filterKey == "channel" then + channelName = GetChannelNameFromMessageEvent(arg4, arg8, arg9, arg2) + -- Note: do NOT skip ignored channels here — user may have explicitly + -- enabled them (e.g. hc/hardcore). ShouldAutoTranslateForTab will + -- correctly return false if the channel is not enabled for this tab. + end + + local db = EnsureDB() + local translated = false + for i = 1, table.getn(db.tabs) do + if not translated and SFrames.Chat:ShouldAutoTranslateForTab(i, filterKey, channelName) then + local tab = db.tabs[i] + if tab and type(tab.id) == "number" then + local cleanText = CleanTextForTranslation(messageText) + if cleanText ~= "" then + local tabId = tab.id + local senderName = arg2 + SFrames.Chat:RequestAutoTranslation(cleanText, function(result, err) + if result and result ~= "" then + SFrames.Chat:AppendAutoTranslatedLine(tabId, filterKey, channelName, cleanText, result, senderName) + end + end) + translated = true + end + end + end + end + end) + end + + SFrames:RegisterEvent("PLAYER_ENTERING_WORLD", function() + if SFrames and SFrames.Chat then + SFrames.Chat:ApplyConfig() + SFrames.Chat:EnsureAddMessageChannelFilter() + SFrames.Chat:ApplyBlockedChannelsGlobally() + end + LoadPersistentClassCache() + if IsInGuild and IsInGuild() and GuildRoster then + GuildRoster() + end + SFrames:RefreshClassColorCache() + end) + + -- 团队成员变化时更新职业缓存 + SFrames:RegisterEvent("PARTY_MEMBERS_CHANGED", function() SFrames:RefreshClassColorCache() end) + SFrames:RegisterEvent("RAID_ROSTER_UPDATE", function() SFrames:RefreshClassColorCache() end) + SFrames:RegisterEvent("FRIENDLIST_UPDATE", function() SFrames:RefreshClassColorCache() end) + SFrames:RegisterEvent("GUILD_ROSTER_UPDATE", function() SFrames:RefreshClassColorCache() end) + SFrames:RegisterEvent("WHO_LIST_UPDATE", function() SFrames:RefreshClassColorCache() end) + + -- 监听公会/队伍聊天,未命中缓存时即时刷新名单 + if not SFrames.Chat._classRefreshHooked then + SFrames.Chat._classRefreshHooked = true + local classRefreshFrame = CreateFrame("Frame", "SFramesChatClassRefresh", UIParent) + classRefreshFrame:RegisterEvent("CHAT_MSG_GUILD") + classRefreshFrame:RegisterEvent("CHAT_MSG_OFFICER") + classRefreshFrame:RegisterEvent("CHAT_MSG_PARTY") + classRefreshFrame:RegisterEvent("CHAT_MSG_RAID") + classRefreshFrame:RegisterEvent("CHAT_MSG_RAID_LEADER") + classRefreshFrame:SetScript("OnEvent", function() + local sender = arg2 + if sender and sender ~= "" and not SFrames.PlayerClassColorCache[sender] then + if event == "CHAT_MSG_GUILD" or event == "CHAT_MSG_OFFICER" then + if GuildRoster then GuildRoster() end + else + SFrames:RefreshClassColorCache() + end + end + end) + end + + SFrames:RegisterEvent("UPDATE_CHAT_WINDOWS", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:HideDefaultChrome() + SFrames.Chat:HideTabChrome() + SFrames.Chat:RefreshChatBounds() + SFrames.Chat:RefreshTabButtons() + SFrames.Chat:StyleEditBox() + SFrames.Chat:EnsureAddMessageChannelFilter() + SFrames.Chat:ApplyBlockedChannelsGlobally() + SFrames.Chat:RefreshConfigFrame() + end + end) + + SFrames:RegisterEvent("UPDATE_CHAT_COLOR", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:StyleChatFont() + SFrames.Chat:StyleEditBox() + end + end) + + if not SFrames.Chat._msgHooked then + SFrames.Chat._msgHooked = true + + local MAX_CACHE = 200 + + -- Initialize from persistent storage + local db = EnsureDB() + if type(db.messageCache) ~= "table" then + db.messageCache = {} + end + + -- MessageHistory is the live runtime lookup (msgID -> raw text), seeded from cache + SFrames.Chat.MessageHistory = {} + SFrames.Chat.MessageSenders = {} + SFrames.Chat.MessageIndex = 0 + + -- Seed runtime lookup from persistent cache + for i = 1, table.getn(db.messageCache) do + local entry = db.messageCache[i] + if entry and entry.id and entry.text then + SFrames.Chat.MessageHistory[entry.id] = entry.text + if entry.id > SFrames.Chat.MessageIndex then + SFrames.Chat.MessageIndex = entry.id + end + end + end + + -- Helper: save a message to the persistent cache ring buffer + local function PersistMessage(msgID, text, r, g, b, frameIndex) + local cache = EnsureDB().messageCache + if not cache then + EnsureDB().messageCache = {} + cache = EnsureDB().messageCache + end + table.insert(cache, { + id = msgID, + text = text, + r = r, + g = g, + b = b, + frame = frameIndex or 1, + time = date("%H:%M:%S"), + }) + -- Trim to MAX_CACHE + while table.getn(cache) > MAX_CACHE do + table.remove(cache, 1) + end + end + + for i = 1, 7 do + local cf = _G["ChatFrame" .. i] + if cf and cf.AddMessage then + local origAddMessage = cf.AddMessage + cf.origAddMessage = origAddMessage + cf.AddMessage = function(self, text, r, g, b, alpha, holdTime) + if not text or text == "" then + origAddMessage(self, text, r, g, b, alpha, holdTime) + return + end + if string.sub(text, 1, 10) ~= "|Hsfchat:" and string.sub(text, 1, 12) ~= "|cff888888|H" then + local db = EnsureDB() + -- Universal catch for Turtle WoW custom chat channels like [硬核] + local chanName = GetChannelNameFromChatLine(text) + + if chanName and IsIgnoredChannelByDefault(chanName) then + -- Global HC kill switch override check + if db.hcGlobalDisable then + local lowerChan = string.lower(chanName) + if string.find(lowerChan, "hc") or string.find(chanName, "硬核") or string.find(lowerChan, "hardcore") then + return + end + end + + local frameName = self:GetName() + local matchedTabIdx = nil + if type(frameName) == "string" and string.find(frameName, "^ChatFrame%d+$") then + matchedTabIdx = SFrames.Chat:GetTabIndexForChatFrame(self) + if not matchedTabIdx then + local _, _, frameNumStr = string.find(frameName, "^ChatFrame(%d+)$") + local frameNum = tonumber(frameNumStr) + if frameNum then + local db = EnsureDB() + if frameNum <= table.getn(db.tabs) then + matchedTabIdx = frameNum + end + end + end + end + if matchedTabIdx then + local tab = EnsureDB().tabs[matchedTabIdx] + if tab then + if not SFrames.Chat:GetTabChannelFilter(matchedTabIdx, chanName) then + return + end + -- If it passed channel filter, allow translation for these bypassed channels + local shouldTranslate = SFrames.Chat:GetTabChannelTranslateFilter(matchedTabIdx, chanName) + if shouldTranslate then + local cleanText = CleanTextForTranslation(text) + -- Remove the channel prefix from translation text to be clean + cleanText = string.gsub(cleanText, "^%[.-%]%s*", "") + -- It might also have [PlayerName]: + local _, _, senderName = string.find(cleanText, "^%[([^%]]+)%]:%s*") + if senderName then + cleanText = string.gsub(cleanText, "^%[[^%]]+%]:%s*", "") + end + if cleanText ~= "" then + local tabId = tab.id + SFrames.Chat:RequestAutoTranslation(cleanText, function(result) + if result and result ~= "" then + SFrames.Chat:AppendAutoTranslatedLine(tabId, "channel", chanName, cleanText, result, senderName) + end + end) + end + end + end + else + return + end + end + + -- Hardcore Death Event Overrides + if db.hcDeathDisable or (db.hcDeathLevelMin and db.hcDeathLevelMin > 1) then + local deathLvl = ParseHardcoreDeathMessage(text) + if deathLvl then + if db.hcDeathDisable then return end + if db.hcDeathLevelMin and deathLvl < db.hcDeathLevelMin then return end + end + end + + SFrames.Chat.MessageIndex = SFrames.Chat.MessageIndex + 1 + local msgID = SFrames.Chat.MessageIndex + + -- Store in runtime lookup + SFrames.Chat.MessageHistory[msgID] = text + + -- Persist to SavedVariables + local frameIdx = nil + for fi = 1, 7 do + if self == _G["ChatFrame" .. fi] then + frameIdx = fi + break + end + end + PersistMessage(msgID, text, r, g, b, frameIdx) + + -- Apply class color to player names in message + local coloredText = ColorPlayerNamesInText(text) + -- Insert the clickable button [+] at the beginning + local modifiedText = "|cff888888|Hsfchat:" .. msgID .. "|h[+]|h|r " .. coloredText + origAddMessage(self, modifiedText, r, g, b, alpha, holdTime) + + -- Legacy auto-translate disabled; handled by per-tab routing above. + if false then + if self == ChatFrame1 and not string.find(text, "%[翻译%]") then + if string.find(text, "%[.-硬核.-%]") or string.find(string.lower(text), "%[.-hc.-%]") or string.find(string.lower(text), "%[.-hardcore.-%]") then + local cleanText = string.gsub(text, "|c%x%x%x%x%x%x%x%x", "") + cleanText = string.gsub(cleanText, "|r", "") + cleanText = string.gsub(cleanText, "|H.-|h(.-)|h", "%1") + + if _G.STranslateAPI and _G.STranslateAPI.IsReady and _G.STranslateAPI.IsReady() then + _G.STranslateAPI.Translate(cleanText, "auto", "zh", function(result, err, meta) + if result then + DEFAULT_CHAT_FRAME:AddMessage("|cff00ffff[翻译] |cffffff00" .. tostring(result) .. "|r") + end + end, "Nanami-UI") + elseif _G.STranslate and _G.STranslate.SendIO then + _G.STranslate:SendIO(cleanText, "IN", "auto", "zh") + end + end + end + end + else + origAddMessage(self, text, r, g, b, alpha, holdTime) + end + end + end + end + + -- Restore cached messages after a short delay so chat frames are fully ready + if not SFrames.Chat._cacheRestored then + SFrames.Chat._cacheRestored = true + local restoreFrame = CreateFrame("Frame", nil, UIParent) + restoreFrame.elapsed = 0 + restoreFrame:SetScript("OnUpdate", function() + this.elapsed = this.elapsed + arg1 + if this.elapsed < 1.5 then return end + this:SetScript("OnUpdate", nil) + this:Hide() + + if SFrames.Chat.cacheRestorePrimed then + return + end + + local cache = EnsureDB().messageCache + if not cache or table.getn(cache) == 0 then return end + + -- Split cache restoration across multiple frames to prevent WoW from freezing + local currentIdx = 1 + local totalCount = table.getn(cache) + + this:SetScript("OnUpdate", function() + local chunkEnd = math.min(currentIdx + 15, totalCount) + for idx = currentIdx, chunkEnd do + local entry = cache[idx] + if entry and entry.text then + local frameIdx = entry.frame or 1 + local cf = _G["ChatFrame" .. frameIdx] + if not cf then cf = ChatFrame1 end + if cf and cf.AddMessage then + local msgID = entry.id or 0 + SFrames.Chat.MessageHistory[msgID] = entry.text + local modified = "|cff888888|Hsfchat:" .. msgID .. "|h[+]|h|r " .. entry.text + -- Call with the raw origAddMessage to avoid re-persisting + local origAM = cf.origAddMessage or cf.AddMessage + origAM(cf, modified, entry.r, entry.g, entry.b) + end + end + end + currentIdx = chunkEnd + 1 + if currentIdx > totalCount then + this:SetScript("OnUpdate", nil) + this:Hide() + SFrames.Chat.cacheRestorePrimed = true + end + end) + end) + end + end + + if not SFrames.Chat._itemRefHooked then + SFrames.Chat._itemRefHooked = true + local origSetItemRef = SetItemRef + SetItemRef = function(link, text, button) + if link and string.sub(link, 1, 7) == "sfchat:" then + local msgID = tonumber(string.sub(link, 8)) + if msgID and SFrames.Chat.MessageHistory[msgID] then + local messageText = SFrames.Chat.MessageHistory[msgID] + local sender = nil + + -- Check MessageSenders lookup first (for AI translated messages) + if SFrames.Chat.MessageSenders and SFrames.Chat.MessageSenders[msgID] then + sender = SFrames.Chat.MessageSenders[msgID] + else + -- Attempt to extract sender name from raw text like: |Hplayer:Name|h[Name]|h or [Name]: + local _, _, extractedName = string.find(messageText, "|Hplayer:(.-)|h") + if extractedName then + sender = string.gsub(extractedName, ":.*", "") + else + _, _, sender = string.find(messageText, "%[(.-)%]") + end + end + -- `this` inside SetItemRef is usually the ChatFrame that was clicked + local clickedFrame = this + if type(clickedFrame) ~= "table" or not clickedFrame.AddMessage then + local activeIdx = SFrames.Chat:GetActiveTabIndex() + local tab = SFrames.Chat:GetTab(activeIdx) + clickedFrame = tab and SFrames.Chat:GetChatFrameForTab(tab) or DEFAULT_CHAT_FRAME + end + + SFrames.Chat:OpenMessageContextMenu(msgID, messageText, sender, clickedFrame) + end + return + end + if origSetItemRef then + origSetItemRef(link, text, button) + end + end + end +end + +function SFrames.Chat:ShowCopyDialog(text) + if not self.copyFrame then + local f = CreateFrame("Frame", "SFramesChatCopyFrame", UIParent) + f:SetWidth(400) + f:SetHeight(150) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 100) + f:SetFrameStrata("FULLSCREEN_DIALOG") + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(f) + else + f:SetBackdrop({ + bgFile = "Interface\\DialogFrame\\UI-DialogBox-Background", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = true, tileSize = 32, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + f:SetBackdropColor(0.08, 0.07, 0.1, 0.96) + f:SetBackdropBorderColor(0.5, 0.5, 0.5, 0.8) + + local close = CreateFrame("Button", nil, f, "UIPanelCloseButton") + close:SetPoint("TOPRIGHT", f, "TOPRIGHT", -2, -2) + + local l = f:CreateFontString(nil, "OVERLAY") + l:SetFont("Fonts\\ARIALN.TTF", 12, "OUTLINE") + l:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -10) + l:SetText("复制聊天内容 (Ctrl+C)") + + local sf = CreateFrame("ScrollFrame", "SFramesChatCopyScroll", f, "UIPanelScrollFrameTemplate") + sf:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -30) + sf:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -30, 10) + + local edit = CreateFrame("EditBox", "SFramesChatCopyEdit", sf) + edit:SetWidth(350) + edit:SetHeight(90) + edit:SetMultiLine(true) + edit:SetFont("Fonts\\ARIALN.TTF", 12, "OUTLINE") + edit:SetAutoFocus(false) + edit:SetScript("OnEscapePressed", function() f:Hide() end) + sf:SetScrollChild(edit) + + f.edit = edit + self.copyFrame = f + end + + local cleanText = string.gsub(text, "|c%x%x%x%x%x%x%x%x", "") + cleanText = string.gsub(cleanText, "|r", "") + cleanText = string.gsub(cleanText, "|H.-|h(.-)|h", "%1") + + self.copyFrame.edit:SetText(cleanText) + self.copyFrame:Show() + self.copyFrame.edit:HighlightText() + self.copyFrame.edit:SetFocus() +end + +function SFrames.Chat:OpenMessageContextMenu(msgID, text, sender, targetFrame) + if not self._msgDropdown then + self._msgDropdown = CreateFrame("Frame", "SFramesChatMessageDropdown", UIParent, "UIDropDownMenuTemplate") + self._msgDropdown:SetFrameStrata("FULLSCREEN_DIALOG") + end + UIDropDownMenu_Initialize(self._msgDropdown, function() + local level = UIDROPDOWNMENU_MENU_LEVEL or 1 + + local cleanText = string.gsub(text, "|c%x%x%x%x%x%x%x%x", "") + cleanText = string.gsub(cleanText, "|r", "") + cleanText = string.gsub(cleanText, "|H.-|h(.-)|h", "%1") + + if level == 2 and UIDROPDOWNMENU_MENU_VALUE == "STranslate_Langs" then + local langs = nil + if _G.STranslateAPI and _G.STranslateAPI.GetSupportedLanguages then + langs = _G.STranslateAPI.GetSupportedLanguages() + end + + if type(langs) ~= "table" or table.getn(langs) == 0 then + langs = { + { code = "zh", name = "中文" }, + { code = "en", name = "英语" }, + { code = "es", name = "西班牙语" }, + { code = "fr", name = "法语" }, + { code = "pl", name = "波兰语" }, + { code = "de", name = "德语" }, + { code = "ru", name = "俄语" }, + { code = "ko", name = "韩语" }, + } + end + + local langNames = { + zh = "中文", + en = "英语", + es = "西班牙语", + fr = "法语", + pl = "波兰语", + de = "德语", + ru = "俄语", + ko = "韩语", + ja = "日语", + auto = "自动检测" + } + + for _, lang in ipairs(langs) do + local info = NewDropDownInfo() + info.text = langNames[lang.code] or lang.name or lang.code + info.notCheckable = 1 + + -- Capture the primitive value correctly for Lua 5.0 loops + local currentLangCode = lang.code + + info.func = function() + local outputFrame = targetFrame or DEFAULT_CHAT_FRAME + if _G.STranslateAPI and _G.STranslateAPI.IsReady and _G.STranslateAPI.IsReady() then + _G.STranslateAPI.Translate(cleanText, "auto", currentLangCode, function(result, err, meta) + if err then + outputFrame:AddMessage("|cffff3333[Nanami-UI] 翻译失败:|r " .. tostring(err)) + return + end + if not result then return end + outputFrame:AddMessage("|cff00ffff[翻译] |cffffff00" .. tostring(result) .. "|r") + end, "Nanami-UI") + elseif _G.STranslate and _G.STranslate.SendIO then + _G.STranslate:SendIO(cleanText, "IN", "auto", currentLangCode) + end + CloseDropDownMenus() + end + UIDropDownMenu_AddButton(info, level) + end + return + end + + if level == 1 then + if sender and sender ~= "" then + local replySender = sender + local infoReply = NewDropDownInfo() + infoReply.text = "回复 " .. replySender + infoReply.notCheckable = 1 + infoReply.func = function() + if ChatFrameEditBox then + ChatFrameEditBox:Show() + ChatFrameEditBox:SetText("/w " .. replySender .. " ") + ChatFrameEditBox:SetFocus() + end + CloseDropDownMenus() + end + UIDropDownMenu_AddButton(infoReply, level) + + local infoName = NewDropDownInfo() + infoName.text = "复制玩家姓名" + infoName.notCheckable = 1 + infoName.func = function() + SFrames.Chat:ShowCopyDialog(replySender) + end + UIDropDownMenu_AddButton(infoName, level) + end + + local info = NewDropDownInfo() + info.text = "复制内容" + info.notCheckable = 1 + info.func = function() + SFrames.Chat:ShowCopyDialog(text) + end + UIDropDownMenu_AddButton(info, level) + + if (_G.STranslateAPI and _G.STranslateAPI.IsReady and _G.STranslateAPI.IsReady()) or (_G.STranslate and _G.STranslate.SendIO) then + local t = NewDropDownInfo() + t.text = "翻译为..." + t.hasArrow = 1 + t.value = "STranslate_Langs" + t.notCheckable = 1 + UIDropDownMenu_AddButton(t, level) + end + end + end, "MENU") + ToggleDropDownMenu(1, nil, self._msgDropdown, "cursor", 3, -3) +end + SFrames:RegisterEvent("CHANNEL_UI_UPDATE", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:ApplyBlockedChannelsGlobally() + SFrames.Chat:RefreshConfigFrame() + local delayFrame = CreateFrame("Frame") + local elapsed = 0 + delayFrame:SetScript("OnUpdate", function() + elapsed = elapsed + (arg1 or 0) + if elapsed >= 0.5 then + this:SetScript("OnUpdate", nil) + if SFrames and SFrames.Chat then + SFrames.Chat:RefreshConfigFrame() + end + end + end) + end + end) + + SFrames:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + -- Track channel join/leave from notice events (arg9 = channel name) + local noticeName = arg9 or arg4 or "" + if noticeName ~= "" then + if arg1 == "YOU_JOINED" then + TrackDiscoveredChannel(noticeName) + elseif arg1 == "YOU_LEFT" then + UntrackDiscoveredChannel(noticeName) + end + end + SFrames.Chat:ApplyBlockedChannelsGlobally() + SFrames.Chat:RefreshConfigFrame() + -- Delayed re-refresh: GetChannelList() may lag behind the event + local delayFrame = CreateFrame("Frame") + local elapsed = 0 + delayFrame:SetScript("OnUpdate", function() + elapsed = elapsed + (arg1 or 0) + if elapsed >= 0.5 then + this:SetScript("OnUpdate", nil) + if SFrames and SFrames.Chat then + SFrames.Chat:RefreshConfigFrame() + end + end + end) + end + end) + + SFrames:RegisterEvent("ZONE_CHANGED", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:ApplyBlockedChannelsGlobally() + SFrames.Chat:RefreshConfigFrame() + SFrames.Chat:StartStabilizer() + end + end) + + SFrames:RegisterEvent("ZONE_CHANGED_INDOORS", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:ApplyBlockedChannelsGlobally() + SFrames.Chat:RefreshConfigFrame() + SFrames.Chat:StartStabilizer() + end + end) + + SFrames:RegisterEvent("ZONE_CHANGED_NEW_AREA", function() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:ApplyBlockedChannelsGlobally() + SFrames.Chat:RefreshConfigFrame() + end + end) + + local function ChatCombatReanchor() + if SFrames and SFrames.Chat then + if EnsureDB().enable == false then return end + SFrames.Chat:ReanchorChatFrames() + end + end + SFrames:RegisterEvent("PLAYER_REGEN_DISABLED", ChatCombatReanchor) + SFrames:RegisterEvent("PLAYER_REGEN_ENABLED", ChatCombatReanchor) + diff --git a/ClassSkillData.lua b/ClassSkillData.lua new file mode 100644 index 0000000..3c6001f --- /dev/null +++ b/ClassSkillData.lua @@ -0,0 +1,346 @@ +SFrames.ClassSkillData = { + WARRIOR = { + [4] = {"冲锋", "撕裂"}, + [6] = {"雷霆一击"}, + [8] = {"英勇打击 2级", "断筋"}, + [10] = {"撕裂 2级", "血性狂暴"}, + [12] = {"压制", "盾击", "战斗怒吼 2级"}, + [14] = {"挫志怒吼", "复仇"}, + [16] = {"英勇打击 3级", "惩戒痛击", "盾牌格挡"}, + [18] = {"雷霆一击 2级", "缴械"}, + [20] = {"撕裂 3级", "反击风暴", "顺劈斩"}, + [22] = {"战斗怒吼 3级", "破甲攻击 2级", "破胆怒吼"}, + [24] = {"英勇打击 4级", "挫志怒吼 2级", "复仇 2级", "斩杀"}, + [26] = {"冲锋 2级", "惩戒痛击 2级", "挑战怒吼"}, + [28] = {"雷霆一击 3级", "压制 2级", "盾墙"}, + [30] = {"撕裂 4级", "顺劈斩 2级", "猛击", "狂暴姿态"}, + [32] = {"英勇打击 5级", "断筋 2级", "斩杀 2级", "战斗怒吼 4级", "盾击 2级", "狂暴之怒"}, + [34] = {"挫志怒吼 3级", "复仇 3级", "破甲攻击 3级"}, + [36] = {"惩戒痛击 3级", "旋风斩"}, + [38] = {"雷霆一击 4级", "猛击 2级"}, + [40] = {"英勇打击 6级", "撕裂 5级", "顺劈斩 3级", "斩杀 3级"}, + [42] = {"战斗怒吼 5级", "拦截 2级"}, + [44] = {"压制 3级", "挫志怒吼 4级", "复仇 4级"}, + [46] = {"冲锋 3级", "惩戒痛击 4级", "猛击 3级", "破甲攻击 4级"}, + [48] = {"英勇打击 7级", "雷霆一击 5级", "斩杀 4级"}, + [50] = {"撕裂 6级", "鲁莽", "顺劈斩 4级"}, + [52] = {"战斗怒吼 6级", "拦截 3级", "盾击 3级"}, + [54] = {"断筋 3级", "挫志怒吼 5级", "猛击 4级", "复仇 5级"}, + [56] = {"英勇打击 8级", "惩戒痛击 5级", "斩杀 5级"}, + [58] = {"雷霆一击 6级", "破甲攻击 5级"}, + [60] = {"撕裂 7级", "压制 4级", "顺劈斩 5级"}, + }, + PALADIN = { + [4] = {"力量祝福", "审判"}, + [6] = {"圣光术 2级", "圣佑术", "十字军圣印"}, + [8] = {"纯净术", "制裁之锤"}, + [10] = {"圣疗术", "正义圣印 2级", "虔诚光环 2级", "保护祝福"}, + [12] = {"力量祝福 2级", "十字军圣印 2级"}, + [14] = {"圣光术 3级"}, + [16] = {"正义之怒", "惩罚光环"}, + [18] = {"正义圣印 3级", "圣佑术 2级"}, + [20] = {"驱邪术", "圣光闪现", "虔诚光环 3级"}, + [22] = {"圣光术 4级", "专注光环", "公正圣印", "力量祝福 3级", "十字军圣印 3级"}, + [24] = {"超度亡灵", "救赎 2级", "智慧祝福 2级", "制裁之锤 2级", "保护祝福 2级"}, + [26] = {"圣光闪现 2级", "正义圣印 4级", "拯救祝福", "惩罚光环 2级"}, + [28] = {"驱邪术 2级"}, + [30] = {"圣疗术 2级", "圣光术 5级", "光明圣印", "虔诚光环 4级", "神圣干涉"}, + [32] = {"冰霜抗性光环", "力量祝福 4级", "十字军圣印 4级"}, + [34] = {"智慧祝福 3级", "圣光闪现 3级", "正义圣印 5级", "圣盾术"}, + [36] = {"驱邪术 3级", "救赎 3级", "火焰抗性光环", "惩罚光环 3级"}, + [38] = {"圣光术 6级", "超度亡灵 2级", "智慧圣印", "保护祝福 3级"}, + [40] = {"光明祝福", "光明圣印 2级", "虔诚光环 5级", "制裁之锤 3级"}, + [42] = {"圣光闪现 4级", "正义圣印 6级", "力量祝福 5级", "十字军圣印 5级"}, + [44] = {"驱邪术 4级", "智慧祝福 4级", "冰霜抗性光环 2级"}, + [46] = {"圣光术 7级", "惩罚光环 4级"}, + [48] = {"救赎 4级", "智慧圣印 2级", "火焰抗性光环 2级"}, + [50] = {"圣疗术 3级", "圣光闪现 5级", "光明祝福 2级", "光明圣印 3级", "正义圣印 7级", "虔诚光环 6级", "圣盾术 2级"}, + [52] = {"驱邪术 5级", "超度亡灵 3级", "力量祝福 6级", "十字军圣印 6级", "强效力量祝福"}, + [54] = {"圣光术 8级", "智慧祝福 5级", "强效智慧祝福", "制裁之锤 4级"}, + [56] = {"冰霜抗性光环 3级", "惩罚光环 5级"}, + [58] = {"圣光闪现 6级", "智慧圣印 3级", "正义圣印 8级"}, + [60] = {"驱邪术 6级", "救赎 5级", "光明祝福 3级", "光明圣印 4级", "强效光明祝福", "虔诚光环 7级", "火焰抗性光环 3级", "强效力量祝福 2级"}, + }, + HUNTER = { + [4] = {"灵猴守护", "毒蛇钉刺"}, + [6] = {"猎人印记", "奥术射击"}, + [8] = {"震荡射击", "猛禽一击 2级"}, + [10] = {"雄鹰守护", "毒蛇钉刺 2级", "持久耐力", "自然护甲", "追踪人型生物"}, + [12] = {"治疗宠物", "奥术射击 2级", "扰乱射击", "摔绊"}, + [14] = {"野兽之眼", "恐吓野兽", "鹰眼术"}, + [16] = {"猛禽一击 3级", "献祭陷阱", "猫鼬撕咬"}, + [18] = {"雄鹰守护 2级", "毒蛇钉刺 3级", "追踪亡灵", "多重射击"}, + [20] = {"治疗宠物 2级", "猎豹守护", "奥术射击 3级", "逃脱", "冰冻陷阱", "猛禽一击 4级"}, + [22] = {"猎人印记 2级", "毒蝎钉刺"}, + [24] = {"野兽知识", "追踪隐藏生物"}, + [26] = {"毒蛇钉刺 4级", "急速射击", "追踪元素生物", "献祭陷阱 2级"}, + [28] = {"治疗宠物 3级", "雄鹰守护 3级", "奥术射击 4级", "冰霜陷阱"}, + [30] = {"恐吓野兽 2级", "野兽守护", "多重射击 2级", "猫鼬撕咬 2级", "假死"}, + [32] = {"照明弹", "爆炸陷阱", "追踪恶魔", "猛禽一击 5级"}, + [34] = {"毒蛇钉刺 5级", "逃脱 2级"}, + [36] = {"治疗宠物 4级", "蝰蛇钉刺", "献祭陷阱 3级"}, + [38] = {"雄鹰守护 4级"}, + [40] = {"豹群守护", "猎人印记 3级", "乱射", "扰乱射击 4级", "冰冻陷阱 2级", "猛禽一击 6级", "追踪巨人"}, + [42] = {"毒蛇钉刺 6级", "多重射击 3级"}, + [44] = {"治疗宠物 5级", "奥术射击 6级", "爆炸陷阱 2级", "献祭陷阱 4级", "猫鼬撕咬 3级"}, + [46] = {"恐吓野兽 3级", "蝰蛇钉刺 2级"}, + [48] = {"雄鹰守护 5级", "猛禽一击 7级", "逃脱 3级"}, + [50] = {"毒蛇钉刺 7级", "乱射 2级", "追踪龙类"}, + [52] = {"治疗宠物 6级", "毒蝎钉刺 4级"}, + [54] = {"多重射击 4级", "爆炸陷阱 3级", "猫鼬撕咬 4级", "猛禽一击 8级"}, + [56] = {"蝰蛇钉刺 3级", "献祭陷阱 5级"}, + [58] = {"猎人印记 4级", "乱射 3级", "毒蛇钉刺 8级", "雄鹰守护 6级"}, + [60] = {"治疗宠物 7级", "奥术射击 8级", "扰乱射击 6级", "冰冻陷阱 3级", "摔绊 3级"}, + }, + ROGUE = { + [4] = {"背刺", "搜索"}, + [6] = {"邪恶攻击 2级", "凿击"}, + [8] = {"刺骨 2级", "闪避"}, + [10] = {"切割", "疾跑", "闷棍"}, + [12] = {"背刺 2级", "脚踢"}, + [14] = {"绞喉", "破甲", "邪恶攻击 3级"}, + [16] = {"刺骨 3级", "佯攻"}, + [18] = {"凿击 2级", "伏击"}, + [20] = {"割裂", "背刺 3级", "潜行 2级", "致残毒药"}, + [22] = {"绞喉 2级", "邪恶攻击 4级", "扰乱", "消失"}, + [24] = {"刺骨 4级", "麻痹毒药", "侦测陷阱"}, + [26] = {"偷袭", "破甲 2级", "伏击 2级", "脚踢 2级"}, + [28] = {"割裂 2级", "背刺 4级", "佯攻 2级", "闷棍 2级"}, + [30] = {"绞喉 3级", "邪恶攻击 5级", "肾击", "致命毒药"}, + [32] = {"凿击 3级", "致伤毒药"}, + [34] = {"疾跑 2级"}, + [36] = {"割裂 3级", "破甲 3级"}, + [38] = {"绞喉 4级", "致命毒药 2级", "麻痹毒药 2级"}, + [40] = {"邪恶攻击 6级", "佯攻 3级", "潜行 3级", "安全降落", "致伤毒药 2级", "消失 2级"}, + [42] = {"切割 2级"}, + [44] = {"割裂 4级", "背刺 6级"}, + [46] = {"绞喉 5级", "破甲 4级", "致命毒药 3级"}, + [48] = {"刺骨 7级", "凿击 4级", "闷棍 3级", "致伤毒药 3级"}, + [50] = {"肾击 2级", "邪恶攻击 7级", "伏击 5级", "致残毒药 2级"}, + [52] = {"割裂 5级", "背刺 7级", "麻痹毒药 3级"}, + [54] = {"绞喉 6级", "邪恶攻击 8级", "致命毒药 4级"}, + [56] = {"刺骨 8级", "破甲 5级", "致伤毒药 4级"}, + [58] = {"脚踢 4级", "疾跑 3级"}, + [60] = {"割裂 6级", "凿击 5级", "佯攻 4级", "背刺 8级", "潜行 4级"}, + }, + PRIEST = { + [4] = {"暗言术:痛", "次级治疗术 2级"}, + [6] = {"真言术:盾", "惩击 2级"}, + [8] = {"恢复", "渐隐术"}, + [10] = {"暗言术:痛 2级", "心灵震爆", "复活术"}, + [12] = {"真言术:盾 2级", "心灵之火", "真言术:韧 2级", "祛病术"}, + [14] = {"恢复 2级", "心灵尖啸"}, + [16] = {"治疗术", "心灵震爆 2级"}, + [18] = {"真言术:盾 3级", "驱散魔法", "暗言术:痛 3级"}, + [20] = {"心灵之火 2级", "束缚亡灵", "快速治疗", "安抚心灵", "渐隐术 2级", "神圣之火"}, + [22] = {"惩击 4级", "心灵视界", "复活术 2级", "心灵震爆 3级"}, + [24] = {"真言术:盾 4级", "真言术:韧 3级", "法力燃烧", "神圣之火 2级"}, + [26] = {"恢复 4级", "暗言术:痛 4级"}, + [28] = {"治疗术 3级", "心灵震爆 4级", "心灵尖啸 2级"}, + [30] = {"真言术:盾 5级", "心灵之火 3级", "治疗祷言", "束缚亡灵 2级", "精神控制", "防护暗影", "渐隐术 3级"}, + [32] = {"法力燃烧 2级", "恢复 5级", "快速治疗 3级"}, + [34] = {"漂浮术", "暗言术:痛 5级", "心灵震爆 5级", "复活术 3级", "治疗术 4级"}, + [36] = {"真言术:盾 6级", "驱散魔法 2级", "真言术:韧 4级", "心灵之火 4级", "恢复 6级", "惩击 6级"}, + [38] = {"安抚心灵 2级"}, + [40] = {"法力燃烧 3级", "治疗祷言 2级", "防护暗影 2级", "心灵震爆 6级", "渐隐术 4级"}, + [42] = {"真言术:盾 7级", "神圣之火 5级", "心灵尖啸 3级"}, + [44] = {"恢复 7级", "精神控制 2级"}, + [46] = {"惩击 7级", "强效治疗术 2级", "心灵震爆 7级", "复活术 4级"}, + [48] = {"真言术:盾 8级", "真言术:韧 5级", "法力燃烧 4级", "神圣之火 6级", "恢复 8级", "暗言术:痛 7级"}, + [50] = {"心灵之火 5级", "治疗祷言 3级"}, + [52] = {"强效治疗术 3级", "心灵震爆 8级", "安抚心灵 3级"}, + [54] = {"真言术:盾 9级", "神圣之火 7级", "惩击 8级"}, + [56] = {"法力燃烧 5级", "恢复 9级", "防护暗影 3级", "心灵尖啸 4级", "暗言术:痛 8级"}, + [58] = {"复活术 5级", "强效治疗术 4级", "心灵震爆 9级"}, + [60] = {"真言术:盾 10级", "心灵之火 6级", "真言术:韧 6级", "束缚亡灵 3级", "治疗祷言 4级", "渐隐术 6级"}, + }, + SHAMAN = { + [4] = {"地震术"}, + [6] = {"治疗波 2级", "地缚图腾"}, + [8] = {"闪电箭 2级", "石爪图腾", "地震术 2级", "闪电之盾"}, + [10] = {"烈焰震击", "火舌武器", "大地之力图腾"}, + [12] = {"净化术", "火焰新星图腾", "先祖之魂", "治疗波 3级"}, + [14] = {"闪电箭 3级", "地震术 3级"}, + [16] = {"闪电之盾 2级", "消毒术"}, + [18] = {"烈焰震击 2级", "火舌武器 2级", "石爪图腾 2级", "治疗波 4级", "战栗图腾"}, + [20] = {"闪电箭 4级", "冰霜震击", "幽魂之狼", "次级治疗波"}, + [22] = {"火焰新星图腾 2级", "水下呼吸", "祛病术"}, + [24] = {"净化术 2级", "地震术 4级", "大地之力图腾 2级", "闪电之盾 3级", "先祖之魂 2级"}, + [26] = {"闪电箭 5级", "熔岩图腾", "火舌武器 3级", "视界术", "法力之泉图腾"}, + [28] = {"石爪图腾 3级", "烈焰震击 3级", "火舌图腾", "水上行走", "次级治疗波 2级"}, + [30] = {"星界传送", "根基图腾", "风怒武器", "治疗之泉图腾"}, + [32] = {"闪电箭 6级", "火焰新星图腾 3级", "闪电之盾 4级", "治疗波 6级", "闪电链", "风怒图腾"}, + [34] = {"冰霜震击 2级", "岗哨图腾"}, + [36] = {"地震术 5级", "熔岩图腾 2级", "火舌武器 4级", "法力之泉图腾 2级", "次级治疗波 3级", "风墙图腾"}, + [38] = {"石爪图腾 4级", "大地之力图腾 3级", "火舌图腾 2级"}, + [40] = {"闪电箭 8级", "闪电链 2级", "烈焰震击 4级", "治疗波 7级", "治疗链", "治疗之泉图腾 3级", "风怒武器 2级"}, + [42] = {"火焰新星图腾 4级"}, + [44] = {"闪电之盾 6级", "冰霜震击 3级", "熔岩图腾 3级", "风墙图腾 2级"}, + [46] = {"火舌武器 5级", "治疗链 2级"}, + [48] = {"地震术 6级", "石爪图腾 5级", "火舌图腾 3级", "治疗波 8级"}, + [50] = {"闪电箭 9级", "治疗之泉图腾 4级", "风怒武器 3级"}, + [52] = {"烈焰震击 5级", "大地之力图腾 4级", "次级治疗波 5级"}, + [54] = {"闪电箭 10级"}, + [56] = {"闪电链 4级", "熔岩图腾 4级", "火舌图腾 4级", "风墙图腾 3级", "治疗波 9级", "法力之泉图腾 4级"}, + [58] = {"冰霜震击 4级"}, + [60] = {"风怒武器 4级", "次级治疗波 6级", "治疗之泉图腾 5级"}, + }, + MAGE = { + [4] = {"造水术", "寒冰箭"}, + [6] = {"造食术", "火球术 2级", "火焰冲击"}, + [8] = {"变形术", "奥术飞弹"}, + [10] = {"霜甲术 2级", "冰霜新星"}, + [12] = {"缓落术", "造食术 2级", "火球术 3级"}, + [14] = {"魔爆术", "奥术智慧 2级", "火焰冲击 2级"}, + [16] = {"侦测魔法", "烈焰风暴"}, + [18] = {"解除次级诅咒", "魔法增效", "火球术 4级"}, + [20] = {"变形术 2级", "法力护盾", "闪现术", "霜甲术 3级", "暴风雪", "唤醒"}, + [22] = {"造食术 3级", "魔爆术 2级", "火焰冲击 3级", "灼烧"}, + [24] = {"火球术 5级", "烈焰风暴 2级", "法术反制"}, + [26] = {"寒冰箭 5级", "冰锥术"}, + [28] = {"奥术智慧 3级", "法力护盾 2级", "暴风雪 2级", "灼烧 2级", "冰霜新星 2级"}, + [30] = {"魔爆术 3级", "火球术 6级", "冰甲术"}, + [32] = {"造食术 4级", "烈焰风暴 3级", "寒冰箭 6级"}, + [34] = {"魔甲术", "冰锥术 2级", "灼烧 3级"}, + [36] = {"法力护盾 3级", "火球术 7级", "暴风雪 3级", "冰霜新星 3级"}, + [38] = {"魔爆术 4级", "寒冰箭 7级", "火焰冲击 5级"}, + [40] = {"造食术 5级", "奥术飞弹 5级", "火球术 8级", "冰甲术 2级", "灼烧 4级"}, + [42] = {"奥术智慧 4级"}, + [44] = {"法力护盾 4级", "暴风雪 4级", "寒冰箭 8级"}, + [46] = {"魔爆术 5级", "灼烧 5级"}, + [48] = {"火球术 9级", "奥术飞弹 6级", "烈焰风暴 5级"}, + [50] = {"造水术 6级", "寒冰箭 9级", "冰锥术 4级", "冰甲术 3级"}, + [52] = {"法力护盾 5级", "火球术 10级", "火焰冲击 7级", "冰霜新星 4级"}, + [54] = {"魔法增效 4级", "奥术飞弹 7级", "烈焰风暴 6级"}, + [56] = {"奥术智慧 5级", "寒冰箭 10级", "冰锥术 5级"}, + [58] = {"魔甲术 3级", "灼烧 7级"}, + [60] = {"变形术 4级", "法力护盾 6级", "火球术 11级", "暴风雪 6级", "冰甲术 4级"}, + }, + WARLOCK = { + [2] = {"痛苦诅咒", "恐惧术"}, + [4] = {"腐蚀术", "虚弱诅咒"}, + [6] = {"暗影箭 3级"}, + [8] = {"痛苦诅咒 2级"}, + [10] = {"吸取灵魂", "献祭 2级", "恶魔皮肤 2级", "制造初级治疗石"}, + [12] = {"生命分流", "生命通道", "魔息术"}, + [14] = {"腐蚀术 2级", "吸取生命", "鲁莽诅咒"}, + [16] = {"生命分流 2级"}, + [18] = {"痛苦诅咒 3级", "灼热之痛"}, + [20] = {"献祭 3级", "生命通道 2级", "暗影箭 4级", "魔甲术", "火焰之雨"}, + [22] = {"吸取生命 2级", "虚弱诅咒 3级", "基尔罗格之眼"}, + [24] = {"腐蚀术 3级", "吸取灵魂 2级", "吸取法力", "感知恶魔"}, + [26] = {"生命分流 3级", "语言诅咒"}, + [28] = {"鲁莽诅咒 2级", "痛苦诅咒 4级", "生命通道 3级", "放逐术"}, + [30] = {"吸取生命 3级", "献祭 4级", "奴役恶魔", "地狱烈焰", "魔甲术 2级"}, + [32] = {"虚弱诅咒 4级", "恐惧术 2级", "元素诅咒", "防护暗影结界"}, + [34] = {"生命分流 4级", "吸取法力 2级", "火焰之雨 2级", "灼热之痛 3级"}, + [36] = {"生命通道 4级"}, + [38] = {"吸取灵魂 3级", "痛苦诅咒 5级"}, + [40] = {"恐惧嚎叫", "献祭 5级", "奴役恶魔 2级"}, + [42] = {"虚弱诅咒 5级", "鲁莽诅咒 3级", "死亡缠绕", "防护暗影结界 2级", "地狱烈焰 2级", "灼热之痛 4级"}, + [44] = {"吸取生命 5级", "生命通道 5级", "暗影箭 7级"}, + [46] = {"生命分流 5级", "火焰之雨 3级"}, + [48] = {"痛苦诅咒 6级", "放逐术 2级", "灵魂之火"}, + [50] = {"虚弱诅咒 6级", "死亡缠绕 2级", "恐惧嚎叫 2级", "魔甲术 4级", "吸取灵魂 4级", "吸取法力 4级", "暗影箭 8级", "灼热之痛 5级"}, + [52] = {"防护暗影结界 3级", "生命通道 6级"}, + [54] = {"腐蚀术 6级", "吸取生命 6级", "地狱烈焰 3级", "灵魂之火 2级"}, + [56] = {"鲁莽诅咒 4级", "死亡缠绕 3级"}, + [58] = {"痛苦诅咒 7级", "奴役恶魔 3级", "火焰之雨 4级", "灼热之痛 6级"}, + [60] = {"厄运诅咒", "元素诅咒 3级", "魔甲术 5级", "暗影箭 9级"}, + }, + DRUID = { + [4] = {"月火术", "回春术"}, + [6] = {"荆棘术", "愤怒 2级"}, + [8] = {"纠缠根须", "治疗之触 2级"}, + [10] = {"月火术 2级", "回春术 2级", "挫志咆哮", "野性印记 2级"}, + [12] = {"愈合", "狂怒"}, + [14] = {"荆棘术 2级", "愤怒 3级", "重击"}, + [16] = {"月火术 3级", "回春术 3级", "挥击"}, + [18] = {"精灵之火", "休眠", "愈合 2级"}, + [20] = {"纠缠根须 2级", "星火术", "猎豹形态", "撕扯", "爪击", "治疗之触 4级", "潜行", "野性印记 3级", "复生"}, + [22] = {"愤怒 4级", "撕碎", "安抚动物"}, + [24] = {"荆棘术 3级", "挥击 2级", "扫击", "猛虎之怒", "解除诅咒"}, + [26] = {"星火术 2级", "月火术 5级", "爪击 2级", "治疗之触 5级", "驱毒术"}, + [28] = {"撕扯 2级", "挑战咆哮", "畏缩"}, + [30] = {"精灵之火 2级", "星火术 3级", "愤怒 5级", "旅行形态", "撕碎 2级", "重击 2级", "野性印记 4级", "宁静", "复生 2级"}, + [32] = {"挫志咆哮 3级", "挥击 3级", "毁灭", "治疗之触 6级", "凶猛撕咬"}, + [34] = {"荆棘术 4级", "月火术 6级", "回春术 6级", "扫击 2级", "爪击 3级"}, + [36] = {"愤怒 6级", "突袭", "狂暴回复"}, + [38] = {"纠缠根须 4级", "休眠 2级", "安抚动物 2级", "撕碎 3级"}, + [40] = {"星火术 4级", "飓风", "挥击 4级", "潜行 2级", "畏缩 2级", "巨熊形态", "凶猛撕咬 2级", "回春术 7级", "宁静 2级", "复生 3级", "激活"}, + [42] = {"挫志咆哮 4级", "毁灭 2级"}, + [44] = {"荆棘术 5级", "树皮术", "撕扯 4级", "扫击 3级", "治疗之触 8级"}, + [46] = {"愤怒 7级", "重击 3级", "突袭 2级"}, + [48] = {"纠缠根须 5级", "月火术 8级", "撕碎 4级"}, + [50] = {"星火术 5级", "宁静 3级", "复生 4级"}, + [52] = {"挫志咆哮 5级", "撕扯 5级", "畏缩 3级", "凶猛撕咬 4级", "回春术 9级"}, + [54] = {"荆棘术 6级", "愤怒 8级", "月火术 9级", "挥击 5级", "扫击 4级", "爪击 4级"}, + [56] = {"治疗之触 10级"}, + [58] = {"纠缠根须 6级", "星火术 6级", "月火术 10级", "爪击 5级", "毁灭 4级", "回春术 10级"}, + [60] = {"飓风 3级", "潜行 3级", "猛虎之怒 4级", "撕扯 6级", "宁静 4级", "复生 5级", "野性印记 7级", "愈合 9级"}, + }, +} + +SFrames.TalentTrainerSkills = { + WARRIOR = { + [48] = {{"致死打击 2级", "致死打击"}, {"嗜血 2级", "嗜血"}, {"盾牌猛击 2级", "盾牌猛击"}}, + [54] = {{"致死打击 3级", "致死打击"}, {"嗜血 3级", "嗜血"}, {"盾牌猛击 3级", "盾牌猛击"}}, + [60] = {{"致死打击 4级", "致死打击"}, {"嗜血 4级", "嗜血"}, {"盾牌猛击 4级", "盾牌猛击"}}, + }, + PALADIN = { + [48] = {{"神圣震击 2级", "神圣震击"}}, + [56] = {{"神圣震击 3级", "神圣震击"}}, + }, + HUNTER = { + [28] = {{"瞄准射击 2级", "瞄准射击"}}, + [36] = {{"瞄准射击 3级", "瞄准射击"}}, + [44] = {{"瞄准射击 4级", "瞄准射击"}}, + [52] = {{"瞄准射击 5级", "瞄准射击"}}, + [60] = {{"瞄准射击 6级", "瞄准射击"}}, + }, + ROGUE = { + [46] = {{"出血 2级", "出血"}}, + [58] = {{"出血 3级", "出血"}}, + }, + PRIEST = { + [28] = {{"精神鞭笞 2级", "精神鞭笞"}}, + [36] = {{"精神鞭笞 3级", "精神鞭笞"}}, + [44] = {{"精神鞭笞 4级", "精神鞭笞"}}, + [52] = {{"精神鞭笞 5级", "精神鞭笞"}}, + [60] = {{"精神鞭笞 6级", "精神鞭笞"}}, + }, + MAGE = { + [24] = {{"炎爆术 2级", "炎爆术"}}, + [30] = {{"炎爆术 3级", "炎爆术"}}, + [36] = {{"炎爆术 4级", "炎爆术"}}, + [42] = {{"炎爆术 5级", "炎爆术"}}, + [48] = {{"炎爆术 6级", "炎爆术"}, {"冲击波 2级", "冲击波"}, {"寒冰屏障 2级", "寒冰屏障"}}, + [54] = {{"炎爆术 7级", "炎爆术"}}, + [56] = {{"冲击波 3级", "冲击波"}, {"寒冰屏障 3级", "寒冰屏障"}}, + [60] = {{"炎爆术 8级", "炎爆术"}, {"冲击波 4级", "冲击波"}, {"寒冰屏障 4级", "寒冰屏障"}}, + }, + WARLOCK = { + [38] = {{"生命虹吸 2级", "生命虹吸"}}, + [48] = {{"生命虹吸 3级", "生命虹吸"}}, + [50] = {{"黑暗契约 2级", "黑暗契约"}}, + [58] = {{"生命虹吸 4级", "生命虹吸"}}, + [60] = {{"黑暗契约 3级", "黑暗契约"}}, + }, + DRUID = { + [30] = {{"虫群 2级", "虫群"}}, + [40] = {{"虫群 3级", "虫群"}}, + [50] = {{"虫群 4级", "虫群"}}, + [60] = {{"虫群 5级", "虫群"}}, + }, +} + +SFrames.ClassMountQuests = { + WARLOCK = { + [40] = "职业坐骑任务:召唤恶马", + [60] = "史诗坐骑任务:召唤恐惧战马", + }, + PALADIN = { + [40] = "职业坐骑任务:召唤战马", + [60] = "史诗坐骑任务:召唤战驹", + }, +} diff --git a/Config.lua b/Config.lua new file mode 100644 index 0000000..8364132 --- /dev/null +++ b/Config.lua @@ -0,0 +1,316 @@ +SFrames.Config = { + -- Default Settings + width = 220, + height = 50, + portraitWidth = 50, + castbarHeight = 18, + + colors = { + backdrop = { r = 0.15, g = 0.10, b = 0.15, a = 0.8 }, -- Pinkish dark tint + border = { r = 1.0, g = 0.5, b = 0.8, a = 1 }, -- Cute pink border + power = { + [0] = { r = 0.0, g = 0.0, b = 1.0 }, -- Mana + [1] = { r = 1.0, g = 0.0, b = 0.0 }, -- Rage + [2] = { r = 1.0, g = 0.5, b = 0.0 }, -- Focus + [3] = { r = 1.0, g = 1.0, b = 0.0 }, -- Energy + [4] = { r = 0.0, g = 1.0, b = 1.0 }, -- Happiness + }, + class = { + ["WARRIOR"] = { r = 0.78, g = 0.61, b = 0.43 }, + ["MAGE"] = { r = 0.41, g = 0.8, b = 0.94 }, + ["ROGUE"] = { r = 1.0, g = 0.96, b = 0.41 }, + ["DRUID"] = { r = 1.0, g = 0.49, b = 0.04 }, + ["HUNTER"] = { r = 0.67, g = 0.83, b = 0.45 }, + ["SHAMAN"] = { r = 0.14, g = 0.35, b = 1.0 }, + ["PRIEST"] = { r = 1.0, g = 1.0, b = 1.0 }, + ["WARLOCK"] = { r = 0.58, g = 0.51, b = 0.79 }, + ["PALADIN"] = { r = 0.96, g = 0.55, b = 0.73 }, + } + } +} + +-------------------------------------------------------------------------------- +-- Theme Engine +-------------------------------------------------------------------------------- + +SFrames.Theme = {} +SFrames.ActiveTheme = {} + +local function HSVtoRGB(h, s, v) + if s <= 0 then return v, v, v end + h = h - math.floor(h / 360) * 360 + local hh = h / 60 + local i = math.floor(hh) + local f = hh - i + local p = v * (1 - s) + local q = v * (1 - s * f) + local t = v * (1 - s * (1 - f)) + if i == 0 then return v, t, p + elseif i == 1 then return q, v, p + elseif i == 2 then return p, v, t + elseif i == 3 then return p, q, v + elseif i == 4 then return t, p, v + else return v, p, q end +end + +local function toHexChar(n) + if n < 10 then return string.char(48 + n) end + return string.char(97 + n - 10) +end + +local function RGBtoHex(r, g, b) + local rr = math.floor(r * 255 + 0.5) + local gg = math.floor(g * 255 + 0.5) + local bb = math.floor(b * 255 + 0.5) + return "ff" + .. toHexChar(math.floor(rr / 16)) .. toHexChar(rr - math.floor(rr / 16) * 16) + .. toHexChar(math.floor(gg / 16)) .. toHexChar(gg - math.floor(gg / 16) * 16) + .. toHexChar(math.floor(bb / 16)) .. toHexChar(bb - math.floor(bb / 16) * 16) +end + +SFrames.Theme.Presets = {} +SFrames.Theme.Presets["pink"] = { name = "樱粉", hue = 330, satMul = 1.00 } +SFrames.Theme.Presets["frost"] = { name = "霜蓝", hue = 210, satMul = 1.00 } +SFrames.Theme.Presets["emerald"] = { name = "翠绿", hue = 140, satMul = 0.85 } +SFrames.Theme.Presets["flame"] = { name = "炎橙", hue = 25, satMul = 0.90 } +SFrames.Theme.Presets["shadow"] = { name = "暗紫", hue = 270, satMul = 0.90 } +SFrames.Theme.Presets["golden"] = { name = "金辉", hue = 45, satMul = 0.80 } +SFrames.Theme.Presets["teal"] = { name = "碧青", hue = 175, satMul = 0.85 } +SFrames.Theme.Presets["crimson"] = { name = "绯红", hue = 5, satMul = 1.00 } +SFrames.Theme.Presets["holy"] = { name = "圣光", hue = 220, satMul = 0.15 } + +SFrames.Theme.PresetOrder = { "pink", "frost", "emerald", "flame", "shadow", "golden", "teal", "crimson", "holy" } + +SFrames.Theme.Presets["c_warrior"] = { name = "战士", hue = 31, satMul = 0.90, swatchRGB = {0.78, 0.61, 0.43} } +SFrames.Theme.Presets["c_paladin"] = { name = "圣骑士", hue = 334, satMul = 0.50, swatchRGB = {0.96, 0.55, 0.73} } +SFrames.Theme.Presets["c_hunter"] = { name = "猎人", hue = 85, satMul = 0.55, swatchRGB = {0.67, 0.83, 0.45} } +SFrames.Theme.Presets["c_rogue"] = { name = "潜行者", hue = 56, satMul = 0.70, swatchRGB = {1.00, 0.96, 0.41} } +SFrames.Theme.Presets["c_priest"] = { name = "牧师", hue = 40, satMul = 0.06, swatchRGB = {1.00, 1.00, 1.00} } +SFrames.Theme.Presets["c_shaman"] = { name = "萨满", hue = 225, satMul = 0.95, swatchRGB = {0.14, 0.35, 1.00} } +SFrames.Theme.Presets["c_mage"] = { name = "法师", hue = 196, satMul = 0.65, swatchRGB = {0.41, 0.80, 0.94} } +SFrames.Theme.Presets["c_warlock"] = { name = "术士", hue = 255, satMul = 0.45, swatchRGB = {0.58, 0.51, 0.79} } +SFrames.Theme.Presets["c_druid"] = { name = "德鲁伊", hue = 28, satMul = 1.00, swatchRGB = {1.00, 0.49, 0.04} } + +SFrames.Theme.ClassPresetOrder = { "c_warrior", "c_paladin", "c_hunter", "c_rogue", "c_priest", "c_shaman", "c_mage", "c_warlock", "c_druid" } + +SFrames.Theme.ClassMap = {} +SFrames.Theme.ClassMap["WARRIOR"] = "c_warrior" +SFrames.Theme.ClassMap["PALADIN"] = "c_paladin" +SFrames.Theme.ClassMap["HUNTER"] = "c_hunter" +SFrames.Theme.ClassMap["ROGUE"] = "c_rogue" +SFrames.Theme.ClassMap["PRIEST"] = "c_priest" +SFrames.Theme.ClassMap["SHAMAN"] = "c_shaman" +SFrames.Theme.ClassMap["MAGE"] = "c_mage" +SFrames.Theme.ClassMap["WARLOCK"] = "c_warlock" +SFrames.Theme.ClassMap["DRUID"] = "c_druid" + +local function GenerateTheme(H, satMul) + satMul = satMul or 1.0 + local function S(s) + local v = s * satMul + if v > 1 then v = 1 end + return v + end + local function C3(s, v) + local r, g, b = HSVtoRGB(H, S(s), v) + return { r, g, b } + end + local function C4(s, v, a) + local r, g, b = HSVtoRGB(H, S(s), v) + return { r, g, b, a } + end + local t = {} + t.accent = C4(0.40, 0.80, 0.98) + t.accentDark = C3(0.45, 0.55) + t.accentLight = C3(0.30, 1.00) + t.accentHex = RGBtoHex(t.accentLight[1], t.accentLight[2], t.accentLight[3]) + t.panelBg = C4(0.50, 0.12, 0.95) + t.panelBorder = C4(0.45, 0.55, 0.90) + t.headerBg = C4(0.60, 0.10, 0.98) + t.sectionBg = C4(0.43, 0.14, 0.82) + t.sectionBorder = C4(0.38, 0.45, 0.86) + t.bg = t.panelBg + t.border = t.panelBorder + t.slotBg = C4(0.20, 0.07, 0.90) + t.slotBorder = C4(0.10, 0.28, 0.80) + t.slotHover = C4(0.38, 0.40, 0.90) + t.slotSelected = C4(0.43, 0.70, 1.00) + t.buttonBg = C4(0.44, 0.18, 0.94) + t.buttonBorder = C4(0.40, 0.50, 0.90) + t.buttonHoverBg = C4(0.47, 0.30, 0.96) + t.buttonDownBg = C4(0.50, 0.14, 0.96) + t.buttonDisabledBg = C4(0.43, 0.14, 0.65) + t.buttonActiveBg = C4(0.52, 0.42, 0.98) + t.buttonActiveBorder = C4(0.42, 0.90, 1.00) + t.buttonText = C3(0.16, 0.90) + t.buttonActiveText = C3(0.08, 1.00) + t.buttonDisabledText = C4(0.14, 0.55, 0.68) + t.btnBg = t.buttonBg + t.btnBorder = t.buttonBorder + t.btnHoverBg = t.buttonHoverBg + t.btnHoverBd = C4(0.40, 0.80, 0.98) + t.btnDownBg = t.buttonDownBg + t.btnText = t.buttonText + t.btnActiveText = t.buttonActiveText + t.btnDisabledText = C3(0.14, 0.40) + t.btnHover = C4(0.47, 0.30, 0.95) + t.btnHoverBorder = t.btnHoverBd + t.tabBg = t.buttonBg + t.tabBorder = t.buttonBorder + t.tabActiveBg = C4(0.50, 0.32, 0.96) + t.tabActiveBorder = C4(0.40, 0.80, 0.98) + t.tabText = C3(0.21, 0.70) + t.tabActiveText = t.buttonActiveText + t.checkBg = t.buttonBg + t.checkBorder = t.buttonBorder + t.checkHoverBorder = C4(0.40, 0.80, 0.95) + t.checkFill = C4(0.43, 0.88, 0.98) + t.checkOn = C3(0.40, 0.80) + t.checkOff = C4(0.40, 0.25, 0.60) + t.sliderTrack = C4(0.45, 0.22, 0.90) + t.sliderFill = C4(0.35, 0.85, 0.92) + t.sliderThumb = C4(0.25, 1.00, 0.95) + t.text = C3(0.11, 0.92) + t.title = C3(0.30, 1.00) + t.gold = t.title + t.nameText = C3(0.06, 0.92) + t.dimText = C3(0.25, 0.60) + t.bodyText = C3(0.05, 0.82) + t.sectionTitle = C3(0.24, 0.90) + t.catHeader = C3(0.31, 0.80) + t.colHeader = C3(0.25, 0.80) + t.labelText = C3(0.23, 0.65) + t.valueText = t.text + t.subText = t.labelText + t.pageText = C3(0.19, 0.80) + t.objectiveText = C3(0.10, 0.90) + t.optionText = t.tabText + t.countText = t.tabText + t.trackText = C3(0.25, 0.80) + t.divider = C4(0.45, 0.55, 0.40) + t.sepColor = C4(0.44, 0.45, 0.50) + t.scrollThumb = C4(0.45, 0.55, 0.70) + t.scrollTrack = C4(0.50, 0.08, 0.50) + t.inputBg = C4(0.50, 0.08, 0.95) + t.inputBorder = C4(0.38, 0.40, 0.80) + t.searchBg = C4(0.50, 0.08, 0.80) + t.searchBorder = C4(0.38, 0.40, 0.60) + t.progressBg = C4(0.50, 0.08, 0.90) + t.progressFill = C4(0.50, 0.70, 1.00) + t.modelBg = C4(0.60, 0.08, 0.85) + t.modelBorder = C4(0.43, 0.35, 0.70) + t.emptySlot = C4(0.40, 0.25, 0.40) + t.emptySlotBg = C4(0.50, 0.08, 0.40) + t.emptySlotBd = C4(0.40, 0.25, 0.30) + t.barBg = C4(0.60, 0.10, 1.00) + t.rowNormal = C4(0.50, 0.06, 0.30) + t.rowNormalBd = C4(0.22, 0.20, 0.30) + t.raidGroup = t.sectionBg + t.raidGroupBorder = C4(0.38, 0.40, 0.70) + t.raidSlotEmpty = C4(0.50, 0.08, 0.60) + t.questSelected = C4(0.70, 0.60, 0.85) + t.questSelBorder = C4(0.47, 0.95, 1.00) + t.questSelBar = C4(0.45, 1.00, 1.00) + t.questHover = C4(0.52, 0.25, 0.50) + t.zoneHeader = t.catHeader + t.zoneBg = C4(0.50, 0.14, 0.50) + t.collapseIcon = C3(0.31, 0.70) + t.trackBar = C4(0.53, 0.95, 1.00) + t.trackGlow = C4(0.53, 0.95, 0.22) + t.rewardBg = C4(0.50, 0.10, 0.85) + t.rewardBorder = C4(0.45, 0.40, 0.70) + t.listBg = C4(0.50, 0.08, 0.80) + t.listBorder = C4(0.43, 0.35, 0.60) + t.detailBg = C4(0.50, 0.09, 0.92) + t.detailBorder = t.listBorder + t.selectedRowBg = C4(0.65, 0.35, 0.60) + t.selectedRowBorder = C4(0.50, 0.90, 0.70) + t.selectedNameText = { 1, 0.95, 1 } + t.overlayBg = C4(0.75, 0.04, 0.55) + t.accentLine = C4(0.50, 1.00, 0.90) + t.titleColor = t.title + t.nameColor = { 1, 1, 1 } + t.valueColor = t.text + t.labelColor = C3(0.28, 0.58) + t.dimColor = C3(0.29, 0.48) + t.clockColor = C3(0.18, 1.00) + t.timerColor = C3(0.27, 0.75) + t.brandColor = C4(0.37, 0.60, 0.70) + t.particleColor = C3(0.40, 1.00) + t.wbGold = { 1, 0.88, 0.55 } + t.wbBorder = { 0.95, 0.75, 0.25 } + t.passive = { 0.60, 0.60, 0.65 } + return t +end + +function SFrames.Theme:Extend(extras) + local override = extras or {} + local proxy = {} + setmetatable(proxy, { + __index = function(self, k) + local v = override[k] + if v ~= nil then return v end + return SFrames.ActiveTheme[k] + end + }) + return proxy +end + +function SFrames.Theme:Apply(presetKey) + local key = presetKey or "pink" + local preset = self.Presets[key] + if not preset then key = "pink"; preset = self.Presets["pink"] end + local newTheme = GenerateTheme(preset.hue, preset.satMul) + local oldKeys = {} + for k, v in pairs(SFrames.ActiveTheme) do + table.insert(oldKeys, k) + end + for i = 1, table.getn(oldKeys) do + SFrames.ActiveTheme[oldKeys[i]] = nil + end + for k, v in pairs(newTheme) do + SFrames.ActiveTheme[k] = v + end + if SFrames.Config and SFrames.Config.colors then + local a = SFrames.ActiveTheme + SFrames.Config.colors.border = { r = a.accent[1], g = a.accent[2], b = a.accent[3], a = 1 } + SFrames.Config.colors.backdrop = { r = a.panelBg[1], g = a.panelBg[2], b = a.panelBg[3], a = a.panelBg[4] or 0.8 } + end + if SFrames.MinimapButton and SFrames.MinimapButton.Refresh then + SFrames.MinimapButton:Refresh() + end +end + +function SFrames.Theme:GetCurrentPreset() + local dbExists = SFramesDB and true or false + local themeExists = SFramesDB and type(SFramesDB.Theme) == "table" and true or false + local savedPreset = themeExists and SFramesDB.Theme.preset or "nil" + if SFramesDB and type(SFramesDB.Theme) == "table" then + if SFramesDB.Theme.useClassTheme then + local _, class = UnitClass("player") + if class and self.ClassMap[class] then + return self.ClassMap[class] + end + end + if SFramesDB.Theme.preset and self.Presets[SFramesDB.Theme.preset] then + return SFramesDB.Theme.preset + end + end + return "pink" +end + +function SFrames.Theme:GetAccentHex() + return SFrames.ActiveTheme.accentHex or "ffffb3d9" +end + +SFrames.Theme.HSVtoRGB = HSVtoRGB +SFrames.Theme.RGBtoHex = RGBtoHex + +SFrames.Theme:Apply(SFrames.Theme:GetCurrentPreset()) + +local themeInitFrame = CreateFrame("Frame") +themeInitFrame:RegisterEvent("VARIABLES_LOADED") +themeInitFrame:RegisterEvent("PLAYER_LOGIN") +themeInitFrame:SetScript("OnEvent", function() + SFrames.Theme:Apply(SFrames.Theme:GetCurrentPreset()) +end) diff --git a/ConfigUI.lua b/ConfigUI.lua new file mode 100644 index 0000000..aa3283a --- /dev/null +++ b/ConfigUI.lua @@ -0,0 +1,3513 @@ +-------------------------------------------------------------------------------- +-- S-Frames: In-Game Settings Panel (ConfigUI.lua) +-- Pages: +-- 1) UI Settings (scrollable) +-- 2) Bag Settings +-------------------------------------------------------------------------------- + +SFrames.ConfigUI = SFrames.ConfigUI or {} +SFrames.ConfigUI.ready = true + +local PANEL_WIDTH = 700 +local PANEL_HEIGHT = 560 + +local BAG_DEFAULTS = { + enable = true, + columns = 10, + bagSpacing = 0, + scale = 1, + sellGrey = true, + bankColumns = 12, + bankSpacing = 0, + bankScale = 1, +} + +local widgetId = 0 + +local function NextWidgetName(prefix) + widgetId = widgetId + 1 + return "SFramesConfig" .. prefix .. tostring(widgetId) +end + +local function Clamp(value, minValue, maxValue) + if value < minValue then return minValue end + if value > maxValue then return maxValue end + return value +end + +local SOFT_THEME = SFrames.ActiveTheme + +local function EnsureSoftBackdrop(frame) + if not frame then return end + if frame.sfSoftBackdrop then return end + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame.sfSoftBackdrop = true +end + +-- Thin 1px border backdrop, suitable for small frames like checkbox boxes +local function EnsureThinBackdrop(frame) + if not frame then return end + if frame.sfSoftBackdrop then return end + if SFrames and SFrames.CreateBackdrop then + SFrames:CreateBackdrop(frame) + elseif frame.SetBackdrop then + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + end + frame.sfSoftBackdrop = true +end + +local function HideTexture(tex) + if not tex then return end + if tex.SetTexture then tex:SetTexture(nil) end + tex:Hide() +end + +local function StyleButton(btn) + if not btn or btn.sfSoftStyled then return btn end + btn.sfSoftStyled = true + + -- Apply ESC menu style round backdrop + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + HideTexture(btn.GetNormalTexture and btn:GetNormalTexture()) + HideTexture(btn.GetPushedTexture and btn:GetPushedTexture()) + HideTexture(btn.GetHighlightTexture and btn:GetHighlightTexture()) + HideTexture(btn.GetDisabledTexture and btn:GetDisabledTexture()) + + local name = btn:GetName() or "" + for _, suffix in ipairs({ "Left", "Right", "Middle" }) do + local tex = _G[name .. suffix] + if tex then tex:SetAlpha(0) tex:Hide() end + end + + local function SetVisual(state) + local bg = SOFT_THEME.buttonBg + local border = SOFT_THEME.buttonBorder + local text = SOFT_THEME.buttonText + + if btn.sfSoftActive then + bg = SOFT_THEME.buttonActiveBg + border = SOFT_THEME.buttonActiveBorder + text = SOFT_THEME.buttonActiveText + elseif state == "hover" then + bg = SOFT_THEME.buttonHoverBg + border = (SFrames.ActiveTheme and SFrames.ActiveTheme.btnHoverBd) or { 0.80, 0.48, 0.64, 0.98 } + text = SOFT_THEME.buttonActiveText + elseif state == "down" then + bg = SOFT_THEME.buttonDownBg + elseif state == "disabled" then + bg = SOFT_THEME.buttonDisabledBg + text = SOFT_THEME.buttonDisabledText + end + + if btn.SetBackdropColor then + btn:SetBackdropColor(bg[1], bg[2], bg[3], bg[4]) + end + if btn.SetBackdropBorderColor then + btn:SetBackdropBorderColor(border[1], border[2], border[3], border[4]) + end + local fs = btn.GetFontString and btn:GetFontString() + if fs then + fs:SetTextColor(text[1], text[2], text[3]) + end + end + + btn.RefreshVisual = function() + if btn.sfSoftActive then + SetVisual("active") + elseif btn.IsEnabled and not btn:IsEnabled() then + SetVisual("disabled") + else + SetVisual("normal") + end + end + + local oldEnter = btn:GetScript("OnEnter") + local oldLeave = btn:GetScript("OnLeave") + local oldDown = btn:GetScript("OnMouseDown") + local oldUp = btn:GetScript("OnMouseUp") + + btn:SetScript("OnEnter", function() + if oldEnter then oldEnter() end + if this.IsEnabled and this:IsEnabled() and not this.sfSoftActive then + SetVisual("hover") + end + end) + btn:SetScript("OnLeave", function() + if oldLeave then oldLeave() end + if this.IsEnabled and this:IsEnabled() and not this.sfSoftActive then + SetVisual("normal") + end + end) + btn:SetScript("OnMouseDown", function() + if oldDown then oldDown() end + if this.IsEnabled and this:IsEnabled() and not this.sfSoftActive then + SetVisual("down") + end + end) + btn:SetScript("OnMouseUp", function() + if oldUp then oldUp() end + if this.IsEnabled and this:IsEnabled() and not this.sfSoftActive then + SetVisual("hover") + end + end) + + btn:RefreshVisual() + return btn +end + +local function AddBtnIcon(btn, iconKey, size, align) + if not (SFrames and SFrames.CreateIcon) then return end + local sz = size or 12 + local gap = 3 + local ico = SFrames:CreateIcon(btn, iconKey, sz) + ico:SetDrawLayer("OVERLAY") + btn.nanamiIcon = ico + local fs = btn.GetFontString and btn:GetFontString() + if fs then + fs:ClearAllPoints() + if align == "left" then + ico:SetPoint("LEFT", btn, "LEFT", 8, 0) + fs:SetPoint("LEFT", ico, "RIGHT", gap, 0) + fs:SetPoint("RIGHT", btn, "RIGHT", -4, 0) + fs:SetJustifyH("LEFT") + else + fs:SetPoint("CENTER", btn, "CENTER", (sz + gap) / 2, 0) + ico:SetPoint("RIGHT", fs, "LEFT", -gap, 0) + end + else + ico:SetPoint("CENTER", btn, "CENTER", 0, 0) + end +end + +local function StyleCheckBox(cb) + if not cb or cb.sfSoftStyled then return cb end + cb.sfSoftStyled = true + + -- Hide ALL default CheckButton textures including the checked texture + HideTexture(cb.GetNormalTexture and cb:GetNormalTexture()) + HideTexture(cb.GetPushedTexture and cb:GetPushedTexture()) + HideTexture(cb.GetHighlightTexture and cb:GetHighlightTexture()) + HideTexture(cb.GetDisabledTexture and cb:GetDisabledTexture()) + if cb.SetCheckedTexture then cb:SetCheckedTexture("") end + if cb.SetDisabledCheckedTexture then cb:SetDisabledCheckedTexture("") end + + -- Round-corner box (tooltip border = soft rounded edges) + local box = CreateFrame("Frame", nil, cb) + box:SetPoint("TOPLEFT", cb, "TOPLEFT", 0, 0) + box:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", 0, 0) + box:SetFrameLevel(cb:GetFrameLevel() + 1) + box:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + cb.sfBox = box + + local function ApplyState(isChecked) + if isChecked then + box:SetBackdropColor( + SOFT_THEME.checkFill[1], SOFT_THEME.checkFill[2], + SOFT_THEME.checkFill[3], 0.88) + box:SetBackdropBorderColor( + SOFT_THEME.checkFill[1], SOFT_THEME.checkFill[2], + SOFT_THEME.checkFill[3], 1) + else + box:SetBackdropColor( + SOFT_THEME.checkBg[1], SOFT_THEME.checkBg[2], + SOFT_THEME.checkBg[3], SOFT_THEME.checkBg[4]) + box:SetBackdropBorderColor( + SOFT_THEME.checkBorder[1], SOFT_THEME.checkBorder[2], + SOFT_THEME.checkBorder[3], SOFT_THEME.checkBorder[4]) + end + end + cb.sfApplyState = ApplyState + + -- Text label: push it away from the box with a left margin + local label = _G[cb:GetName() .. "Text"] + if label then + label:ClearAllPoints() + label:SetPoint("LEFT", cb, "RIGHT", 4, 0) + label:SetFont(SFrames:GetFont(), 11, "OUTLINE") + label:SetJustifyH("LEFT") + label:SetTextColor(SOFT_THEME.text[1], SOFT_THEME.text[2], SOFT_THEME.text[3]) + end + + -- Hover: brighten border when unchecked + cb:SetScript("OnEnter", function() + if not this.sfChecked then + if this.sfBox then + this.sfBox:SetBackdropBorderColor( + SOFT_THEME.checkHoverBorder[1], SOFT_THEME.checkHoverBorder[2], + SOFT_THEME.checkHoverBorder[3], SOFT_THEME.checkHoverBorder[4]) + end + end + end) + cb:SetScript("OnLeave", function() + if not this.sfChecked then + if this.sfBox then + this.sfBox:SetBackdropBorderColor( + SOFT_THEME.checkBorder[1], SOFT_THEME.checkBorder[2], + SOFT_THEME.checkBorder[3], SOFT_THEME.checkBorder[4]) + end + end + end) + + ApplyState(false) + return cb +end + +local function StyleSlider(slider, low, high, text) + if not slider or slider.sfSoftStyled then return slider end + slider.sfSoftStyled = true + + local regions = { slider:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.GetObjectType and region:GetObjectType() == "Texture" then + region:SetTexture(nil) + end + end + + local track = slider:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetPoint("LEFT", slider, "LEFT", 0, 0) + track:SetPoint("RIGHT", slider, "RIGHT", 0, 0) + track:SetHeight(4) + track:SetVertexColor(SOFT_THEME.sliderTrack[1], SOFT_THEME.sliderTrack[2], SOFT_THEME.sliderTrack[3], SOFT_THEME.sliderTrack[4]) + slider.sfTrack = track + + local fill = slider:CreateTexture(nil, "ARTWORK") + fill:SetTexture("Interface\\Buttons\\WHITE8X8") + fill:SetPoint("LEFT", track, "LEFT", 0, 0) + fill:SetPoint("TOP", track, "TOP", 0, 0) + fill:SetPoint("BOTTOM", track, "BOTTOM", 0, 0) + fill:SetWidth(1) + fill:SetVertexColor(SOFT_THEME.sliderFill[1], SOFT_THEME.sliderFill[2], SOFT_THEME.sliderFill[3], SOFT_THEME.sliderFill[4]) + slider.sfFill = fill + + if slider.SetThumbTexture then + slider:SetThumbTexture("Interface\\Buttons\\WHITE8X8") + end + local thumb = slider.GetThumbTexture and slider:GetThumbTexture() + if thumb then + thumb:SetWidth(8) + thumb:SetHeight(16) + thumb:SetVertexColor(SOFT_THEME.sliderThumb[1], SOFT_THEME.sliderThumb[2], SOFT_THEME.sliderThumb[3], SOFT_THEME.sliderThumb[4]) + end + + local function UpdateFill() + local minValue, maxValue = slider:GetMinMaxValues() + local value = slider:GetValue() or minValue + local pct = 0 + if maxValue > minValue then + pct = (value - minValue) / (maxValue - minValue) + end + pct = Clamp(pct, 0, 1) + local width = math.floor((slider:GetWidth() or 1) * pct + 0.5) + if width < 1 then width = 1 end + slider.sfFill:SetWidth(width) + end + + local oldChanged = slider:GetScript("OnValueChanged") + slider:SetScript("OnValueChanged", function() + if oldChanged then oldChanged() end + UpdateFill() + end) + UpdateFill() + + if low then + low:SetTextColor(SOFT_THEME.dimText[1], SOFT_THEME.dimText[2], SOFT_THEME.dimText[3]) + low:ClearAllPoints() + low:SetPoint("TOPLEFT", slider, "BOTTOMLEFT", 0, 0) + end + if high then + high:SetTextColor(SOFT_THEME.dimText[1], SOFT_THEME.dimText[2], SOFT_THEME.dimText[3]) + high:ClearAllPoints() + high:SetPoint("TOPRIGHT", slider, "BOTTOMRIGHT", 0, 0) + end + if text then + text:SetTextColor(SOFT_THEME.text[1], SOFT_THEME.text[2], SOFT_THEME.text[3]) + text:ClearAllPoints() + text:SetPoint("BOTTOM", slider, "TOP", 0, 2) + end + return slider +end + +local function StyleScrollBar(slider, sliderName) + if not slider or slider.sfSoftStyled then return slider end + slider.sfSoftStyled = true + + slider:SetWidth(12) + local regions = { slider:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.GetObjectType and region:GetObjectType() == "Texture" then + region:SetTexture(nil) + end + end + + local track = slider:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetPoint("TOPLEFT", slider, "TOPLEFT", 3, 0) + track:SetPoint("BOTTOMRIGHT", slider, "BOTTOMRIGHT", -3, 0) + track:SetVertexColor(0.18, 0.19, 0.22, 0.9) + + if slider.SetThumbTexture then + slider:SetThumbTexture("Interface\\Buttons\\WHITE8X8") + end + local thumb = slider.GetThumbTexture and slider:GetThumbTexture() + if thumb then + thumb:SetWidth(8) + thumb:SetHeight(20) + thumb:SetVertexColor(SOFT_THEME.scrollThumb[1], SOFT_THEME.scrollThumb[2], SOFT_THEME.scrollThumb[3], SOFT_THEME.scrollThumb[4] or 0.95) + end + + local upBtn = _G[sliderName .. "ScrollUpButton"] + local downBtn = _G[sliderName .. "ScrollDownButton"] + if upBtn then upBtn:Hide() end + if downBtn then downBtn:Hide() end + return slider +end + +local function EnsureDB() + if not SFramesDB then SFramesDB = {} end + + if SFramesDB.showLevel == nil then SFramesDB.showLevel = true end + if SFramesDB.classColorHealth == nil then SFramesDB.classColorHealth = true end + if SFramesDB.enableMerchant == nil then SFramesDB.enableMerchant = true end + if SFramesDB.enableQuestUI == nil then SFramesDB.enableQuestUI = true end + if SFramesDB.enableQuestLogSkin == nil then SFramesDB.enableQuestLogSkin = true end + if SFramesDB.enableTrainer == nil then SFramesDB.enableTrainer = true end + if SFramesDB.enableSpellBook == nil then SFramesDB.enableSpellBook = true end + if SFramesDB.enableTradeSkill == nil then SFramesDB.enableTradeSkill = true end + if SFramesDB.spellBookHighestOnly == nil then SFramesDB.spellBookHighestOnly = false end + if SFramesDB.spellBookAutoReplace == nil then SFramesDB.spellBookAutoReplace = false end + if SFramesDB.enableSocial == nil then SFramesDB.enableSocial = true end + if SFramesDB.enableInspect == nil then SFramesDB.enableInspect = true end + if SFramesDB.enableFlightMap == nil then SFramesDB.enableFlightMap = true end + if SFramesDB.enablePetStable == nil then SFramesDB.enablePetStable = true end + if SFramesDB.enableMail == nil then SFramesDB.enableMail = true end + if type(SFramesDB.spellBookScale) ~= "number" then SFramesDB.spellBookScale = 1 end + if type(SFramesDB.socialScale) ~= "number" then SFramesDB.socialScale = 1 end + + if type(SFramesDB.playerFrameScale) ~= "number" then SFramesDB.playerFrameScale = 1 end + if type(SFramesDB.playerFrameWidth) ~= "number" then SFramesDB.playerFrameWidth = 220 end + if type(SFramesDB.playerPortraitWidth) ~= "number" then SFramesDB.playerPortraitWidth = 50 end + if type(SFramesDB.playerHealthHeight) ~= "number" then SFramesDB.playerHealthHeight = 38 end + if type(SFramesDB.playerPowerHeight) ~= "number" then SFramesDB.playerPowerHeight = 9 end + if SFramesDB.playerShowClass == nil then SFramesDB.playerShowClass = true end + if SFramesDB.playerShowClassIcon == nil then SFramesDB.playerShowClassIcon = true end + if type(SFramesDB.playerNameFontSize) ~= "number" then SFramesDB.playerNameFontSize = 10 end + if type(SFramesDB.playerValueFontSize) ~= "number" then SFramesDB.playerValueFontSize = 10 end + + if type(SFramesDB.targetFrameScale) ~= "number" then SFramesDB.targetFrameScale = 1 end + if type(SFramesDB.targetFrameWidth) ~= "number" then SFramesDB.targetFrameWidth = 220 end + if type(SFramesDB.targetPortraitWidth) ~= "number" then SFramesDB.targetPortraitWidth = 50 end + if type(SFramesDB.targetHealthHeight) ~= "number" then SFramesDB.targetHealthHeight = 38 end + if type(SFramesDB.targetPowerHeight) ~= "number" then SFramesDB.targetPowerHeight = 9 end + if SFramesDB.targetShowClass == nil then SFramesDB.targetShowClass = true end + if SFramesDB.targetShowClassIcon == nil then SFramesDB.targetShowClassIcon = true end + if type(SFramesDB.targetNameFontSize) ~= "number" then SFramesDB.targetNameFontSize = 10 end + if type(SFramesDB.targetValueFontSize) ~= "number" then SFramesDB.targetValueFontSize = 10 end + if SFramesDB.targetDistanceEnabled == nil then SFramesDB.targetDistanceEnabled = true end + if type(SFramesDB.targetDistanceScale) ~= "number" then SFramesDB.targetDistanceScale = 1 end + + if SFramesDB.showPetFrame == nil then SFramesDB.showPetFrame = true end + if type(SFramesDB.petFrameScale) ~= "number" then SFramesDB.petFrameScale = 1 end + + if SFramesDB.partyLayout ~= "horizontal" and SFramesDB.partyLayout ~= "vertical" then + SFramesDB.partyLayout = "vertical" + end + if type(SFramesDB.partyFrameScale) ~= "number" then SFramesDB.partyFrameScale = 1 end + if type(SFramesDB.partyFrameWidth) ~= "number" then SFramesDB.partyFrameWidth = 150 end + if type(SFramesDB.partyFrameHeight) ~= "number" then SFramesDB.partyFrameHeight = 35 end + if type(SFramesDB.partyPortraitWidth) ~= "number" then SFramesDB.partyPortraitWidth = 33 end + if type(SFramesDB.partyHealthHeight) ~= "number" then SFramesDB.partyHealthHeight = 22 end + if type(SFramesDB.partyPowerHeight) ~= "number" then SFramesDB.partyPowerHeight = 10 end + if type(SFramesDB.partyHorizontalGap) ~= "number" then SFramesDB.partyHorizontalGap = 8 end + if type(SFramesDB.partyVerticalGap) ~= "number" then SFramesDB.partyVerticalGap = 30 end + if type(SFramesDB.partyNameFontSize) ~= "number" then SFramesDB.partyNameFontSize = 10 end + if type(SFramesDB.partyValueFontSize) ~= "number" then SFramesDB.partyValueFontSize = 10 end + if SFramesDB.partyShowBuffs == nil then SFramesDB.partyShowBuffs = true end + if SFramesDB.partyShowDebuffs == nil then SFramesDB.partyShowDebuffs = true end + + if SFramesDB.raidLayout ~= "horizontal" and SFramesDB.raidLayout ~= "vertical" then + SFramesDB.raidLayout = "horizontal" + end + if type(SFramesDB.raidFrameScale) ~= "number" then SFramesDB.raidFrameScale = 1 end + if type(SFramesDB.raidFrameWidth) ~= "number" then SFramesDB.raidFrameWidth = 60 end + if type(SFramesDB.raidFrameHeight) ~= "number" then SFramesDB.raidFrameHeight = 40 end + if type(SFramesDB.raidHealthHeight) ~= "number" then SFramesDB.raidHealthHeight = 31 end + if type(SFramesDB.raidHorizontalGap) ~= "number" then SFramesDB.raidHorizontalGap = 2 end + if type(SFramesDB.raidVerticalGap) ~= "number" then SFramesDB.raidVerticalGap = 2 end + if type(SFramesDB.raidGroupGap) ~= "number" then SFramesDB.raidGroupGap = 8 end + if type(SFramesDB.raidNameFontSize) ~= "number" then SFramesDB.raidNameFontSize = 10 end + if type(SFramesDB.raidValueFontSize) ~= "number" then SFramesDB.raidValueFontSize = 9 end + if SFramesDB.raidShowPower == nil then SFramesDB.raidShowPower = true end + if SFramesDB.enableRaidFrames == nil then SFramesDB.enableRaidFrames = true end + if SFramesDB.raidHealthFormat == nil then SFramesDB.raidHealthFormat = "compact" end + if SFramesDB.raidShowGroupLabel == nil then SFramesDB.raidShowGroupLabel = true end + + if SFramesDB.charPanelEnable == nil then SFramesDB.charPanelEnable = true end + + if SFramesDB.afkEnabled == nil then SFramesDB.afkEnabled = true end + if type(SFramesDB.afkDelay) ~= "number" then SFramesDB.afkDelay = 5 end + if SFramesDB.afkOutsideRest == nil then SFramesDB.afkOutsideRest = false end + + if SFramesDB.trainerReminder == nil then SFramesDB.trainerReminder = true end + + if SFramesDB.smoothBars == nil then SFramesDB.smoothBars = true end + if SFramesDB.mobRealHealth == nil then SFramesDB.mobRealHealth = true end + if SFramesDB.showItemLevel == nil then SFramesDB.showItemLevel = true end + if SFramesDB.itemCompare == nil then SFramesDB.itemCompare = true end + if SFramesDB.gearScore == nil then SFramesDB.gearScore = true end + + if type(SFramesDB.Bags) ~= "table" then SFramesDB.Bags = {} end + local defaults = BAG_DEFAULTS + if SFrames and SFrames.Config and type(SFrames.Config.Bags) == "table" then defaults = SFrames.Config.Bags end + for key, value in pairs(defaults) do + if SFramesDB.Bags[key] == nil then SFramesDB.Bags[key] = value end + end + + if type(SFramesDB.Minimap) ~= "table" then SFramesDB.Minimap = {} end + if SFramesDB.Minimap.enabled == nil then SFramesDB.Minimap.enabled = true end + if type(SFramesDB.Minimap.scale) ~= "number" then SFramesDB.Minimap.scale = 1.0 end + if SFramesDB.Minimap.showClock == nil then SFramesDB.Minimap.showClock = true end + if SFramesDB.Minimap.showCoords == nil then SFramesDB.Minimap.showCoords = true end + if SFramesDB.Minimap.mapStyle == nil then SFramesDB.Minimap.mapStyle = "auto" end + if type(SFramesDB.Minimap.posX) ~= "number" then SFramesDB.Minimap.posX = -5 end + if type(SFramesDB.Minimap.posY) ~= "number" then SFramesDB.Minimap.posY = -5 end + + if type(SFramesDB.MapReveal) ~= "table" then SFramesDB.MapReveal = {} end + if SFramesDB.MapReveal.enabled == nil then SFramesDB.MapReveal.enabled = true end + if type(SFramesDB.MapReveal.unexploredAlpha) ~= "number" then SFramesDB.MapReveal.unexploredAlpha = 0.7 end + + if type(SFramesDB.Tweaks) ~= "table" then SFramesDB.Tweaks = {} end + if SFramesDB.Tweaks.autoStance == nil then SFramesDB.Tweaks.autoStance = true end + if SFramesDB.Tweaks.autoDismount == nil then SFramesDB.Tweaks.autoDismount = true end + if SFramesDB.Tweaks.superWoW == nil then SFramesDB.Tweaks.superWoW = true end + if SFramesDB.Tweaks.turtleCompat == nil then SFramesDB.Tweaks.turtleCompat = true end + if SFramesDB.Tweaks.cooldownNumbers == nil then SFramesDB.Tweaks.cooldownNumbers = true end + if SFramesDB.Tweaks.darkUI == nil then SFramesDB.Tweaks.darkUI = false end + if SFramesDB.Tweaks.worldMapWindow == nil then SFramesDB.Tweaks.worldMapWindow = false end + + if type(SFramesDB.WorldMap) ~= "table" then SFramesDB.WorldMap = {} end + if SFramesDB.WorldMap.enabled == nil then SFramesDB.WorldMap.enabled = true end + if type(SFramesDB.WorldMap.scale) ~= "number" then SFramesDB.WorldMap.scale = 0.85 end + if type(SFramesDB.WorldMap.nav) ~= "table" then + SFramesDB.WorldMap.nav = { enabled = false, width = 350, alpha = 0.70, locked = false } + end + + if type(SFramesDB.MinimapBuffs) ~= "table" then SFramesDB.MinimapBuffs = {} end + if SFramesDB.MinimapBuffs.enabled == nil then SFramesDB.MinimapBuffs.enabled = true end + if type(SFramesDB.MinimapBuffs.iconSize) ~= "number" then SFramesDB.MinimapBuffs.iconSize = 30 end + if type(SFramesDB.MinimapBuffs.iconsPerRow) ~= "number" then SFramesDB.MinimapBuffs.iconsPerRow = 8 end + if type(SFramesDB.MinimapBuffs.spacing) ~= "number" then SFramesDB.MinimapBuffs.spacing = 2 end + if SFramesDB.MinimapBuffs.growDirection ~= "LEFT" and SFramesDB.MinimapBuffs.growDirection ~= "RIGHT" then + SFramesDB.MinimapBuffs.growDirection = "LEFT" + end + if SFramesDB.MinimapBuffs.position ~= "TOPRIGHT" and SFramesDB.MinimapBuffs.position ~= "TOPLEFT" + and SFramesDB.MinimapBuffs.position ~= "BOTTOMRIGHT" and SFramesDB.MinimapBuffs.position ~= "BOTTOMLEFT" then + SFramesDB.MinimapBuffs.position = "TOPRIGHT" + end + if type(SFramesDB.MinimapBuffs.offsetX) ~= "number" then SFramesDB.MinimapBuffs.offsetX = 0 end + if type(SFramesDB.MinimapBuffs.offsetY) ~= "number" then SFramesDB.MinimapBuffs.offsetY = 0 end + if SFramesDB.MinimapBuffs.showTimer == nil then SFramesDB.MinimapBuffs.showTimer = true end + if SFramesDB.MinimapBuffs.showDebuffs == nil then SFramesDB.MinimapBuffs.showDebuffs = true end + if type(SFramesDB.MinimapBuffs.debuffIconSize) ~= "number" then SFramesDB.MinimapBuffs.debuffIconSize = 30 end + + if type(SFramesDB.ActionBars) ~= "table" then SFramesDB.ActionBars = {} end + local abDef = { + enable = true, buttonSize = 36, buttonGap = 2, smallBarSize = 27, + scale = 1.0, barCount = 3, showHotkey = true, showMacroName = false, + rangeColoring = true, showPetBar = true, showStanceBar = true, + showRightBars = true, buttonRounded = false, buttonInnerShadow = false, + } + for k, v in pairs(abDef) do + if SFramesDB.ActionBars[k] == nil then SFramesDB.ActionBars[k] = v end + end + + if SFramesDB.enableUnitFrames == nil then SFramesDB.enableUnitFrames = true end + if SFramesDB.enableChat == nil then SFramesDB.enableChat = true end + + if type(SFramesDB.Theme) ~= "table" then SFramesDB.Theme = {} end + if SFramesDB.Theme.preset == nil then SFramesDB.Theme.preset = "pink" end + if SFramesDB.Theme.useClassTheme == nil then SFramesDB.Theme.useClassTheme = false end + if SFramesDB.Theme.iconSet == nil or SFramesDB.Theme.iconSet == "default" then SFramesDB.Theme.iconSet = "icon" end +end + +local function CreateSection(parent, title, x, y, width, height, font) + local section = CreateFrame("Frame", NextWidgetName("Section"), parent) + section:SetWidth(width) + section:SetHeight(height) + section:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + + EnsureSoftBackdrop(section) + if section.SetBackdropColor then + section:SetBackdropColor(SOFT_THEME.sectionBg[1], SOFT_THEME.sectionBg[2], SOFT_THEME.sectionBg[3], SOFT_THEME.sectionBg[4]) + end + if section.SetBackdropBorderColor then + section:SetBackdropBorderColor(SOFT_THEME.sectionBorder[1], SOFT_THEME.sectionBorder[2], SOFT_THEME.sectionBorder[3], SOFT_THEME.sectionBorder[4]) + end + + local titleFS = section:CreateFontString(nil, "OVERLAY") + titleFS:SetFont(font, 11, "OUTLINE") + titleFS:SetPoint("TOPLEFT", section, "TOPLEFT", 10, -9) + titleFS:SetText(title) + titleFS:SetTextColor(SOFT_THEME.title[1], SOFT_THEME.title[2], SOFT_THEME.title[3]) + + -- Divider line under title + local div = section:CreateTexture(nil, "ARTWORK") + div:SetTexture("Interface\\Buttons\\WHITE8X8") + div:SetHeight(1) + div:SetPoint("TOPLEFT", section, "TOPLEFT", 8, -24) + div:SetPoint("TOPRIGHT", section, "TOPRIGHT", -8, -24) + div:SetVertexColor(SOFT_THEME.sectionBorder[1], SOFT_THEME.sectionBorder[2], SOFT_THEME.sectionBorder[3], 0.6) + + return section +end + +local function CreateLabel(parent, text, x, y, font, size, r, g, b) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(font, size or 11, "OUTLINE") + fs:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + fs:SetText(text) + fs:SetTextColor(r or 1, g or 1, b or 1) + return fs +end + +local function CreateDesc(parent, text, x, y, font, maxWidth) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(font, 9, "OUTLINE") + fs:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + if maxWidth then + fs:SetWidth(maxWidth) + fs:SetJustifyH("LEFT") + end + fs:SetText(text) + fs:SetTextColor(0.65, 0.58, 0.62) + return fs +end + +local function CreateCheckBox(parent, label, x, y, getter, setter, onValueChanged) + local cb = CreateFrame("CheckButton", NextWidgetName("Check"), parent, "UICheckButtonTemplate") + cb:SetWidth(18) + cb:SetHeight(18) + cb:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + StyleCheckBox(cb) + + local text = _G[cb:GetName() .. "Text"] + if text then + text:SetText(label) + local parentWidth = parent:GetWidth() or 520 + local textWidth = parentWidth - x - 24 + if textWidth > 240 then textWidth = 240 end + text:SetWidth(textWidth) + end + + local internalRefresh = false + + cb:SetScript("OnClick", function() + if internalRefresh then return end + local v = this:GetChecked() + local checkedBool = (v == 1 or v == true) + this.sfChecked = checkedBool + if this.sfApplyState then this.sfApplyState(checkedBool) end + setter(checkedBool) + if onValueChanged then onValueChanged(checkedBool) end + PlaySound(checkedBool and "igMainMenuOptionCheckBoxOn" or "igMainMenuOptionCheckBoxOff") + end) + + cb.Refresh = function() + internalRefresh = true + local isChecked = getter() and true or false + cb:SetChecked(isChecked and 1 or 0) + cb.sfChecked = isChecked + if cb.sfApplyState then cb.sfApplyState(isChecked) end + internalRefresh = false + end + + cb:Refresh() + return cb +end + +local function CreateSlider(parent, label, x, y, width, minValue, maxValue, step, getter, setter, formatter, onValueChanged) + local sliderName = NextWidgetName("Slider") + local slider = CreateFrame("Slider", sliderName, parent, "OptionsSliderTemplate") + slider:SetWidth(width) + slider:SetHeight(26) + slider:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + slider:SetMinMaxValues(minValue, maxValue) + slider:SetValueStep(step) + if slider.SetObeyStepOnDrag then slider:SetObeyStepOnDrag(true) end + + local low = _G[sliderName .. "Low"] + local high = _G[sliderName .. "High"] + local text = _G[sliderName .. "Text"] + if low then low:SetText(tostring(minValue)) end + if high then high:SetText(tostring(maxValue)) end + + local internalRefresh = false + local function UpdateLabel(value) + local display = formatter and formatter(value) or value + if text then text:SetText(label .. ": " .. tostring(display)) end + end + + slider:SetScript("OnValueChanged", function() + if internalRefresh then return end + local raw = this:GetValue() or minValue or 0 + local safeStep = step or 1 + local value + if safeStep >= 1 then + value = math.floor(raw + 0.5) + else + if safeStep == 0 then safeStep = 1 end + local scaled = raw / safeStep + value = math.floor(scaled + 0.5) * safeStep + end + value = Clamp(value, minValue, maxValue) + UpdateLabel(value) + setter(value) + if onValueChanged then onValueChanged(value) end + end) + + slider.Refresh = function() + local value = tonumber(getter()) or minValue + value = Clamp(value, minValue, maxValue) + internalRefresh = true + slider:SetValue(value) + internalRefresh = false + UpdateLabel(value) + end + + StyleSlider(slider, low, high, text) + slider:Refresh() + return slider +end + +local function CreateButton(parent, text, x, y, width, height, onClick) + local btn = CreateFrame("Button", NextWidgetName("Button"), parent, "UIPanelButtonTemplate") + btn:SetWidth(width) + btn:SetHeight(height) + btn:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + btn:SetText(text) + btn:SetScript("OnClick", onClick) + StyleButton(btn) + return btn +end +local function CreateScrollArea(parent, x, y, width, height, childHeight) + local holder = CreateFrame("Frame", NextWidgetName("ScrollHolder"), parent) + holder:SetWidth(width) + holder:SetHeight(height) + holder:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + + local scroll = CreateFrame("ScrollFrame", NextWidgetName("ScrollFrame"), holder) + scroll:SetPoint("TOPLEFT", holder, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -18, 0) + + local child = CreateFrame("Frame", NextWidgetName("ScrollChild"), scroll) + child:SetWidth(width - 22) + child:SetHeight(childHeight) + scroll:SetScrollChild(child) + + local sliderName = NextWidgetName("ScrollBar") + local slider = CreateFrame("Slider", sliderName, holder, "UIPanelScrollBarTemplate") + slider:SetPoint("TOPRIGHT", holder, "TOPRIGHT", 0, -16) + slider:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", 0, 16) + slider:SetScript("OnValueChanged", function() + if scroll and scroll.SetVerticalScroll then + scroll:SetVerticalScroll(this:GetValue()) + end + end) + slider:SetMinMaxValues(0, 0) + slider:SetValueStep(20) + slider:SetValue(0) + + local upBtn = _G[sliderName .. "ScrollUpButton"] + if upBtn then + upBtn:SetScript("OnClick", function() + local value = slider:GetValue() - 24 + if value < 0 then value = 0 end + slider:SetValue(value) + end) + end + + local downBtn = _G[sliderName .. "ScrollDownButton"] + if downBtn then + downBtn:SetScript("OnClick", function() + local _, maxValue = slider:GetMinMaxValues() + local value = slider:GetValue() + 24 + if value > maxValue then value = maxValue end + slider:SetValue(value) + end) + end + StyleScrollBar(slider, sliderName) + + local function UpdateRange() + local maxScroll = child:GetHeight() - scroll:GetHeight() + if maxScroll < 0 then maxScroll = 0 end + + slider:SetMinMaxValues(0, maxScroll) + slider:SetValueStep(20) + + local current = slider:GetValue() + if current > maxScroll then + current = maxScroll + slider:SetValue(current) + end + if scroll and scroll.SetVerticalScroll then + scroll:SetVerticalScroll(current) + end + + if maxScroll <= 0 then slider:Hide() else slider:Show() end + end + + local function ScrollBy(delta) + local _, maxValue = slider:GetMinMaxValues() + local value = slider:GetValue() - delta * 28 + if value < 0 then value = 0 end + if value > maxValue then value = maxValue end + slider:SetValue(value) + end + + if scroll.EnableMouseWheel then + scroll:EnableMouseWheel(true) + scroll:SetScript("OnMouseWheel", function() ScrollBy(arg1) end) + end + + if child.EnableMouseWheel then + child:EnableMouseWheel(true) + child:SetScript("OnMouseWheel", function() ScrollBy(arg1) end) + end + + return { + holder = holder, + scroll = scroll, + child = child, + slider = slider, + UpdateRange = UpdateRange, + Reset = function() + slider:SetValue(0) + if scroll and scroll.SetVerticalScroll then + scroll:SetVerticalScroll(0) + end + UpdateRange() + end, + } +end + +function SFrames.ConfigUI:RefreshControls(controlList) + if not controlList then return end + for _, control in ipairs(controlList) do + if control and control.Refresh then control:Refresh() end + end +end + +function SFrames.ConfigUI:BuildUIPage() + local font = SFrames:GetFont() + local page = self.uiPage + local controls = {} + + local function RefreshPlayer() + if SFrames.Player and SFrames.Player.ApplyConfig then SFrames.Player:ApplyConfig() return end + if SFrames.Player and SFrames.Player.UpdateAll then SFrames.Player:UpdateAll() end + end + local function RefreshTarget() + if SFrames.Target and SFrames.Target.ApplyConfig then SFrames.Target:ApplyConfig() return end + if SFrames.Target and SFrames.Target.UpdateAll then SFrames.Target:UpdateAll() end + end + local function RefreshParty() + if SFrames.Party and SFrames.Party.ApplyConfig then SFrames.Party:ApplyConfig() return end + if SFrames.Party and SFrames.Party.UpdateAll then SFrames.Party:UpdateAll() end + end + + -- Section 内容从 y=-32 开始(标题24 + 分隔线 + 8px 间距) + -- 每个选项行占 26px,描述文字占 16px + local uiScroll = CreateScrollArea(page, 4, -4, 548, 458, 830) + local root = uiScroll.child + + -- ── 初始化向导 ────────────────────────────────────────────── + local wizSection = CreateSection(root, "初始化向导", 8, -8, 520, 62, font) + CreateDesc(wizSection, "重新打开首次配置向导,可重新选择各项功能开关", 14, -30, font, 380) + CreateButton(wizSection, "重新运行初始化向导", 370, -30, 140, 24, function() + if SFrames.ConfigUI.frame then SFrames.ConfigUI.frame:Hide() end + if SFrames.SetupWizard and SFrames.SetupWizard.Show then + SFrames.SetupWizard:Show(nil, "rerun") + end + end) + + -- ── 全局 ────────────────────────────────────────────────────── + local globalSection = CreateSection(root, "全局", 8, -78, 520, 288, font) + + table.insert(controls, CreateCheckBox(globalSection, + "显示玩家/目标等级文本", 14, -34, + function() return SFramesDB.showLevel ~= false end, + function(checked) SFramesDB.showLevel = checked end, + function() RefreshPlayer() RefreshTarget() RefreshParty() end + )) + CreateDesc(globalSection, "在玩家和目标框体中显示角色等级数字", 36, -50, font) + + table.insert(controls, CreateCheckBox(globalSection, + "玩家/目标生命条使用职业颜色", 14, -70, + function() return SFramesDB.classColorHealth ~= false end, + function(checked) SFramesDB.classColorHealth = checked end, + function() RefreshPlayer() RefreshTarget() RefreshParty() end + )) + CreateDesc(globalSection, "血条颜色跟随职业(关闭则统一绿色)", 36, -86, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新商人购买界面", 14, -106, + function() return SFramesDB.enableMerchant ~= false end, + function(checked) SFramesDB.enableMerchant = checked end + )) + CreateDesc(globalSection, "替换默认商人窗口为自定义界面", 36, -122, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新任务/NPC对话界面", 14, -142, + function() return SFramesDB.enableQuestUI ~= false end, + function(checked) SFramesDB.enableQuestUI = checked end + )) + CreateDesc(globalSection, "替换默认任务和NPC对话窗口(需重载UI)", 36, -158, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用任务日志美化皮肤", 14, -178, + function() return SFramesDB.enableQuestLogSkin ~= false end, + function(checked) SFramesDB.enableQuestLogSkin = checked end + )) + CreateDesc(globalSection, "美化任务日志界面,兼容 pfQuest(需重载UI)", 36, -194, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新训练师界面", 270, -34, + function() return SFramesDB.enableTrainer ~= false end, + function(checked) SFramesDB.enableTrainer = checked end + )) + CreateDesc(globalSection, "替换默认职业/专业训练师窗口(需重载UI)", 292, -50, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新法术书界面", 270, -70, + function() return SFramesDB.enableSpellBook ~= false end, + function(checked) SFramesDB.enableSpellBook = checked end + )) + CreateDesc(globalSection, "替换默认法术书窗口(需重载UI)", 292, -86, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新社交界面", 270, -106, + function() return SFramesDB.enableSocial ~= false end, + function(checked) SFramesDB.enableSocial = checked end + )) + CreateDesc(globalSection, "替换好友/查询/工会/团队窗口(需重载UI)", 292, -122, font) + + table.insert(controls, CreateCheckBox(globalSection, + "NPC单选项自动跳过", 270, -142, + function() return SFramesDB.autoGossip ~= false end, + function(checked) SFramesDB.autoGossip = checked end + )) + CreateDesc(globalSection, "只有一个对话选项时自动确认(按 Shift 临时禁用)", 292, -158, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用兽栏皮肤", 270, -178, + function() return SFramesDB.enablePetStable ~= false end, + function(checked) SFramesDB.enablePetStable = checked end + )) + CreateDesc(globalSection, "美化宠物兽栏界面(需重载UI)", 292, -194, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新专业技能界面", 14, -214, + function() return SFramesDB.enableTradeSkill ~= false end, + function(checked) SFramesDB.enableTradeSkill = checked end + )) + CreateDesc(globalSection, "替换默认专业技能窗口(需重载UI)", 36, -230, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新飞行地图界面", 270, -214, + function() return SFramesDB.enableFlightMap ~= false end, + function(checked) SFramesDB.enableFlightMap = checked end + )) + CreateDesc(globalSection, "美化飞行管理员地图,增加目的地列表(需重载UI)", 292, -230, font) + + table.insert(controls, CreateCheckBox(globalSection, + "启用全新邮箱界面", 14, -250, + function() return SFramesDB.enableMail ~= false end, + function(checked) SFramesDB.enableMail = checked end + )) + CreateDesc(globalSection, "替换默认邮箱窗口,支持批量收取和多物品发送(需重载UI)", 36, -266, font) + + -- ── 增强功能(Libs 库集成)────────────────────────────────── + local enhSection = CreateSection(root, "增强功能(需安装 !Libs 插件)", 8, -376, 520, 204, font) + + table.insert(controls, CreateCheckBox(enhSection, + "血条平滑动画(需 /reload)", 14, -34, + function() return SFramesDB.smoothBars ~= false end, + function(checked) SFramesDB.smoothBars = checked end + )) + CreateDesc(enhSection, "血量/法力变化时丝滑过渡,需要 LibSmoothStatusBar", 36, -50, font, 218) + + table.insert(controls, CreateCheckBox(enhSection, + "目标真实血量", 270, -34, + function() return SFramesDB.mobRealHealth ~= false end, + function(checked) SFramesDB.mobRealHealth = checked end + )) + CreateDesc(enhSection, "怪物血条显示实际HP数值,需要 LibMobHealthCache", 292, -50, font, 218) + + table.insert(controls, CreateCheckBox(enhSection, + "物品等级显示", 14, -80, + function() return SFramesDB.showItemLevel ~= false end, + function(checked) SFramesDB.showItemLevel = checked end, + function() + if SFrames.CharacterPanel and SFrames.CharacterPanel.UpdateCurrentTab then + SFrames.CharacterPanel:UpdateCurrentTab() + end + end + )) + CreateDesc(enhSection, "装备栏/背包角标显示 iLvl + 面板平均装等,需要 LibItem-Level", 36, -96, font, 218) + + table.insert(controls, CreateCheckBox(enhSection, + "装备属性对比", 270, -80, + function() return SFramesDB.itemCompare ~= false end, + function(checked) SFramesDB.itemCompare = checked end + )) + CreateDesc(enhSection, "背包物品 tooltip 显示与已装备的属性差异,需要 ItemBonusLib", 292, -96, font, 218) + + table.insert(controls, CreateCheckBox(enhSection, + "装备评分 (EP)", 14, -126, + function() return SFramesDB.gearScore ~= false end, + function(checked) SFramesDB.gearScore = checked end + )) + CreateDesc(enhSection, "Tooltip 显示当前职业各天赋EP评分及硬核评分,需要 ItemBonusLib", 36, -142, font, 480) + + CreateLabel(enhSection, "提示:以上功能需要安装对应的 !Libs 库才能生效。", 14, -172, font, 10, 0.6, 0.6, 0.65) + + -- ── ShaguTweaks 功能移植 ────────────────────────────────────── + local tweaksSection = CreateSection(root, "ShaguTweaks 功能移植(需 /reload 生效)", 8, -590, 520, 214, font) + + table.insert(controls, CreateCheckBox(tweaksSection, + "自动切换姿态/形态", 14, -34, + function() return SFramesDB.Tweaks.autoStance ~= false end, + function(checked) SFramesDB.Tweaks.autoStance = checked end + )) + CreateDesc(tweaksSection, "施法需要特定姿态时自动切换(如人形按熊掌→自动变熊)", 36, -50, font, 218) + + table.insert(controls, CreateCheckBox(tweaksSection, + "自动取消变形/下马", 270, -34, + function() return SFramesDB.Tweaks.autoDismount ~= false end, + function(checked) SFramesDB.Tweaks.autoDismount = checked end + )) + CreateDesc(tweaksSection, "变形/骑马时施法自动取消(如熊形按治疗→自动回人形)", 292, -50, font, 218) + + table.insert(controls, CreateCheckBox(tweaksSection, + "乌龟服兼容修改", 14, -80, + function() return SFramesDB.Tweaks.turtleCompat ~= false end, + function(checked) SFramesDB.Tweaks.turtleCompat = checked end + )) + CreateDesc(tweaksSection, "隐藏乌龟服自带目标血量文字,修复地图窗口标题偏移", 36, -96, font, 218) + + table.insert(controls, CreateCheckBox(tweaksSection, + "SuperWoW 客户端兼容", 270, -80, + function() return SFramesDB.Tweaks.superWoW ~= false end, + function(checked) SFramesDB.Tweaks.superWoW = checked end + )) + CreateDesc(tweaksSection, "为 SuperWoW 提供 GUID 施法数据支持(需安装 SuperWoW)", 292, -96, font, 218) + + table.insert(controls, CreateCheckBox(tweaksSection, + "冷却倒计时", 14, -126, + function() return SFramesDB.Tweaks.cooldownNumbers ~= false end, + function(checked) SFramesDB.Tweaks.cooldownNumbers = checked end + )) + CreateDesc(tweaksSection, "在技能/物品冷却图标上显示剩余时间文字(>2秒)", 36, -142, font, 218) + + table.insert(controls, CreateCheckBox(tweaksSection, + "暗色界面风格", 270, -126, + function() return SFramesDB.Tweaks.darkUI == true end, + function(checked) SFramesDB.Tweaks.darkUI = checked end + )) + CreateDesc(tweaksSection, "将整个游戏界面调暗为深色主题(默认关闭)", 292, -142, font, 218) + + CreateLabel(tweaksSection, "提示:以上所有选项修改后需要 /reload 才能生效。", 14, -172, font, 10, 0.6, 0.6, 0.65) + + uiScroll:UpdateRange() + self.uiControls = controls + self.uiScroll = uiScroll +end + + +function SFrames.ConfigUI:BuildPlayerPage() + local font = SFrames:GetFont() + local page = self.playerPage + local controls = {} + + local function RefreshPlayer() + if SFrames.Player and SFrames.Player.ApplyConfig then + SFrames.Player:ApplyConfig() + return + end + if SFrames.Player and SFrames.Player.UpdateAll then SFrames.Player:UpdateAll() end + end + + local playerSection = CreateSection(page, "玩家框体", 8, -8, 520, 254, font) + + table.insert(controls, CreateSlider(playerSection, "缩放", 14, -46, 150, 0.7, 1.8, 0.05, + function() return SFramesDB.playerFrameScale end, + function(value) SFramesDB.playerFrameScale = value end, + function(v) return string.format("%.2f", v) end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateSlider(playerSection, "框体宽度", 170, -46, 150, 170, 420, 1, + function() return SFramesDB.playerFrameWidth end, + function(value) SFramesDB.playerFrameWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateSlider(playerSection, "头像宽度", 326, -46, 130, 32, 95, 1, + function() return SFramesDB.playerPortraitWidth end, + function(value) SFramesDB.playerPortraitWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateSlider(playerSection, "生命条高度", 14, -108, 150, 14, 80, 1, + function() return SFramesDB.playerHealthHeight end, + function(value) SFramesDB.playerHealthHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateSlider(playerSection, "能量条高度", 170, -108, 150, 6, 40, 1, + function() return SFramesDB.playerPowerHeight end, + function(value) SFramesDB.playerPowerHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateCheckBox(playerSection, + "玩家姓名显示职业", 326, -106, + function() return SFramesDB.playerShowClass ~= false end, + function(checked) SFramesDB.playerShowClass = checked end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateCheckBox(playerSection, + "玩家显示职业图标", 326, -132, + function() return SFramesDB.playerShowClassIcon ~= false end, + function(checked) SFramesDB.playerShowClassIcon = checked end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateSlider(playerSection, "姓名字号", 14, -170, 150, 8, 18, 1, + function() return SFramesDB.playerNameFontSize end, + function(value) SFramesDB.playerNameFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshPlayer() end + )) + + table.insert(controls, CreateSlider(playerSection, "数值字号", 170, -170, 150, 8, 18, 1, + function() return SFramesDB.playerValueFontSize end, + function(value) SFramesDB.playerValueFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshPlayer() end + )) + + CreateLabel(playerSection, + "提示:宽度/头像/血条/能量条可独立实时调节。", + 14, -221, font, 10, 0.9, 0.9, 0.9) + + -- ── 宠物框体 ────────────────────────────────────────────────── + local petSection = CreateSection(page, "宠物框体", 8, -270, 520, 98, font) + + table.insert(controls, CreateCheckBox(petSection, + "显示宠物框体", 14, -34, + function() return SFramesDB.showPetFrame ~= false end, + function(checked) SFramesDB.showPetFrame = checked end, + function() if SFrames.Pet and SFrames.Pet.UpdateAll then SFrames.Pet:UpdateAll() end end + )) + CreateDesc(petSection, "在玩家框体附近显示当前宠物的血量条", 36, -50, font) + + table.insert(controls, CreateSlider(petSection, "缩放", 270, -52, 200, 0.7, 1.8, 0.05, + function() return SFramesDB.petFrameScale or 1 end, + function(value) SFramesDB.petFrameScale = value end, + function(v) return string.format("%.2f", v) end, + function(value) if SFrames.Pet and SFrames.Pet.frame then SFrames.Pet.frame:SetScale(value) end end + )) + + self.playerControls = controls +end + +function SFrames.ConfigUI:BuildTargetPage() + local font = SFrames:GetFont() + local page = self.targetPage + local controls = {} + + local function RefreshTarget() + if SFrames.Target and SFrames.Target.ApplyConfig then + SFrames.Target:ApplyConfig() + return + end + if SFrames.Target and SFrames.Target.UpdateAll then SFrames.Target:UpdateAll() end + end + + local targetSection = CreateSection(page, "目标框体", 8, -8, 520, 294, font) + + table.insert(controls, CreateSlider(targetSection, "缩放", 14, -46, 150, 0.7, 1.8, 0.05, + function() return SFramesDB.targetFrameScale end, + function(value) SFramesDB.targetFrameScale = value end, + function(v) return string.format("%.2f", v) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateSlider(targetSection, "框体宽度", 170, -46, 150, 170, 420, 1, + function() return SFramesDB.targetFrameWidth end, + function(value) SFramesDB.targetFrameWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateSlider(targetSection, "头像宽度", 326, -46, 130, 32, 95, 1, + function() return SFramesDB.targetPortraitWidth end, + function(value) SFramesDB.targetPortraitWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateSlider(targetSection, "生命条高度", 14, -108, 150, 14, 80, 1, + function() return SFramesDB.targetHealthHeight end, + function(value) SFramesDB.targetHealthHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateSlider(targetSection, "能量条高度", 170, -108, 150, 6, 40, 1, + function() return SFramesDB.targetPowerHeight end, + function(value) SFramesDB.targetPowerHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateCheckBox(targetSection, + "目标姓名显示职业", 326, -106, + function() return SFramesDB.targetShowClass ~= false end, + function(checked) SFramesDB.targetShowClass = checked end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateCheckBox(targetSection, + "目标显示职业图标", 326, -132, + function() return SFramesDB.targetShowClassIcon ~= false end, + function(checked) SFramesDB.targetShowClassIcon = checked end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateSlider(targetSection, "姓名字号", 14, -170, 150, 8, 18, 1, + function() return SFramesDB.targetNameFontSize end, + function(value) SFramesDB.targetNameFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateSlider(targetSection, "数值字号", 170, -170, 150, 8, 18, 1, + function() return SFramesDB.targetValueFontSize end, + function(value) SFramesDB.targetValueFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshTarget() end + )) + + table.insert(controls, CreateCheckBox(targetSection, + "启用目标距离文本", 326, -168, + function() return SFramesDB.targetDistanceEnabled ~= false end, + function(checked) SFramesDB.targetDistanceEnabled = checked end, + function(checked) + if SFrames.Target and SFrames.Target.distanceFrame then + if checked and UnitExists("target") then + SFrames.Target.distanceFrame:Show() + elseif not checked then + SFrames.Target.distanceFrame:Hide() + end + end + end + )) + + table.insert(controls, CreateSlider(targetSection, "距离文本缩放", 14, -232, 150, 0.7, 1.8, 0.05, + function() return SFramesDB.targetDistanceScale end, + function(value) SFramesDB.targetDistanceScale = value end, + function(v) return string.format("%.2f", v) end, + function(value) + if SFrames.Target and SFrames.Target.distanceFrame then + SFrames.Target.distanceFrame:SetScale(value) + end + end + )) + + self.targetControls = controls +end + +function SFrames.ConfigUI:BuildPartyPage() + local font = SFrames:GetFont() + local page = self.partyPage + local controls = {} + + local function RefreshParty() + if SFrames.Party and SFrames.Party.ApplyConfig then + SFrames.Party:ApplyConfig() + end + if SFrames.Party and SFrames.Party.UpdateAll then SFrames.Party:UpdateAll() end + end + + local uiScroll = CreateScrollArea(page, 4, -4, 548, 458, 320) + local root = uiScroll.child + + local partySection = CreateSection(root, "小队", 8, -8, 520, 356, font) + + CreateButton(partySection, "解锁小队框架", 14, -26, 130, 22, function() + if SFrames and SFrames.UnlockFrames then SFrames:UnlockFrames() end + end) + + CreateButton(partySection, "锁定小队框架", 154, -26, 130, 22, function() + if SFrames and SFrames.LockFrames then SFrames:LockFrames() end + end) + + table.insert(controls, CreateCheckBox(partySection, + "横向布局(关闭为竖向)", 12, -60, + function() return SFramesDB.partyLayout == "horizontal" end, + function(checked) + if checked then SFramesDB.partyLayout = "horizontal" else SFramesDB.partyLayout = "vertical" end + end, + function(checked) + if SFrames.Party and SFrames.Party.SetLayout then + if checked then SFrames.Party:SetLayout("horizontal") else SFrames.Party:SetLayout("vertical") end + end + RefreshParty() + end + )) + + table.insert(controls, CreateSlider(partySection, "缩放", 14, -108, 150, 0.7, 1.8, 0.05, + function() return SFramesDB.partyFrameScale end, + function(value) SFramesDB.partyFrameScale = value end, + function(v) return string.format("%.2f", v) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "框体宽度", 170, -108, 150, 120, 320, 1, + function() return SFramesDB.partyFrameWidth end, + function(value) SFramesDB.partyFrameWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "框体高度", 326, -108, 130, 28, 80, 1, + function() return SFramesDB.partyFrameHeight end, + function(value) SFramesDB.partyFrameHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "头像宽度", 14, -170, 150, 24, 64, 1, + function() return SFramesDB.partyPortraitWidth end, + function(value) SFramesDB.partyPortraitWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "生命条高度", 170, -170, 150, 10, 60, 1, + function() return SFramesDB.partyHealthHeight end, + function(value) SFramesDB.partyHealthHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "能量条高度", 326, -170, 130, 6, 30, 1, + function() return SFramesDB.partyPowerHeight end, + function(value) SFramesDB.partyPowerHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "横向间距", 14, -232, 150, 0, 40, 1, + function() return SFramesDB.partyHorizontalGap end, + function(value) SFramesDB.partyHorizontalGap = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "纵向间距", 170, -232, 150, 0, 80, 1, + function() return SFramesDB.partyVerticalGap end, + function(value) SFramesDB.partyVerticalGap = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "姓名字号", 326, -232, 130, 8, 18, 1, + function() return SFramesDB.partyNameFontSize end, + function(value) SFramesDB.partyNameFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateSlider(partySection, "数值字号", 14, -294, 150, 8, 18, 1, + function() return SFramesDB.partyValueFontSize end, + function(value) SFramesDB.partyValueFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshParty() end + )) + + table.insert(controls, CreateCheckBox(partySection, + "显示小队增益", 170, -292, + function() return SFramesDB.partyShowBuffs ~= false end, + function(checked) SFramesDB.partyShowBuffs = checked end, + function() RefreshParty() end + )) + + table.insert(controls, CreateCheckBox(partySection, + "显示小队减益", 326, -292, + function() return SFramesDB.partyShowDebuffs ~= false end, + function(checked) SFramesDB.partyShowDebuffs = checked end, + function() RefreshParty() end + )) + + CreateButton(partySection, "小队测试模式", 326, -324, 130, 22, function() + if SFrames.Party and SFrames.Party.TestMode then SFrames.Party:TestMode() end + end) + uiScroll:UpdateRange() + self.partyControls = controls + self.partyScroll = uiScroll +end + +function SFrames.ConfigUI:BuildBagPage() + local font = SFrames:GetFont() + local page = self.bagPage + local controls = {} + + local bagScroll = CreateScrollArea(page, 4, -4, 548, 458, 510) + local root = bagScroll.child + + local bagSection = CreateSection(root, "背包", 8, -8, 502, 196, font) + + table.insert(controls, CreateCheckBox(bagSection, + "启用 Nanami 背包(需 /reload)", 12, -28, + function() return SFramesDB.Bags.enable ~= false end, + function(checked) SFramesDB.Bags.enable = checked end + )) + + table.insert(controls, CreateCheckBox(bagSection, + "自动出售灰色物品", 12, -52, + function() return SFramesDB.Bags.sellGrey ~= false end, + function(checked) SFramesDB.Bags.sellGrey = checked end + )) + + table.insert(controls, CreateSlider(bagSection, "背包列数", 16, -90, 220, 4, 20, 1, + function() return SFramesDB.Bags.columns end, + function(value) SFramesDB.Bags.columns = value end, + function(value) return tostring(math.floor(value + 0.5)) end, + function() + if SFrames and SFrames.Bags and SFrames.Bags.Container and SFrames.Bags.Container.UpdateLayout then + SFrames.Bags.Container:UpdateLayout() + end + end + )) + + table.insert(controls, CreateSlider(bagSection, "背包间距", 258, -90, 220, 0, 12, 1, + function() return SFramesDB.Bags.bagSpacing end, + function(value) SFramesDB.Bags.bagSpacing = value end, + function(value) return tostring(math.floor(value + 0.5)) end, + function() + if SFrames and SFrames.Bags and SFrames.Bags.Container and SFrames.Bags.Container.UpdateLayout then + SFrames.Bags.Container:UpdateLayout() + end + end + )) + + table.insert(controls, CreateSlider(bagSection, "背包缩放", 16, -150, 220, 0.50, 2.00, 0.05, + function() return SFramesDB.Bags.scale end, + function(value) SFramesDB.Bags.scale = value end, + function(value) return string.format("%.2f", value) end, + function(value) + if SFramesBagFrame then SFramesBagFrame:SetScale(value) end + end + )) + + CreateButton(bagSection, "打开背包", 258, -150, 220, 24, function() + if SFrames and SFrames.Bags and SFrames.Bags.Container and SFrames.Bags.Container.Open then + SFrames.Bags.Container:Open() + end + end) + + local bankSection = CreateSection(root, "银行", 8, -210, 502, 155, font) + + table.insert(controls, CreateSlider(bankSection, "银行列数", 16, -50, 220, 4, 24, 1, + function() return SFramesDB.Bags.bankColumns end, + function(value) SFramesDB.Bags.bankColumns = value end, + function(value) return tostring(math.floor(value + 0.5)) end, + function() + if SFrames and SFrames.Bags and SFrames.Bags.Bank and SFrames.Bags.Bank.UpdateLayout then + SFrames.Bags.Bank:UpdateLayout() + end + end + )) + + table.insert(controls, CreateSlider(bankSection, "银行间距", 258, -50, 220, 0, 12, 1, + function() return SFramesDB.Bags.bankSpacing end, + function(value) SFramesDB.Bags.bankSpacing = value end, + function(value) return tostring(math.floor(value + 0.5)) end, + function() + if SFrames and SFrames.Bags and SFrames.Bags.Bank and SFrames.Bags.Bank.UpdateLayout then + SFrames.Bags.Bank:UpdateLayout() + end + end + )) + + table.insert(controls, CreateSlider(bankSection, "银行缩放", 16, -110, 220, 0.50, 2.00, 0.05, + function() return SFramesDB.Bags.bankScale end, + function(value) SFramesDB.Bags.bankScale = value end, + function(value) return string.format("%.2f", value) end, + function(value) + if SFramesBankFrame then SFramesBankFrame:SetScale(value) end + end + )) + + CreateButton(bankSection, "打开离线银行", 258, -110, 220, 24, function() + if SFrames and SFrames.Bags and SFrames.Bags.Bank and SFrames.Bags.Bank.OpenOffline then + SFrames.Bags.Bank:OpenOffline() + end + end) + + --------------------------------------------------------------------------- + -- Sell Price Database Section + --------------------------------------------------------------------------- + local priceSection = CreateSection(root, "售价数据库", 8, -371, 502, 126, font) + + local function CountCacheEntries() + local n = 0 + if SFramesGlobalDB and SFramesGlobalDB.sellPriceCache then + for _ in pairs(SFramesGlobalDB.sellPriceCache) do n = n + 1 end + end + return n + end + + local function CountDBEntries() + local n = 0 + if NanamiSellPriceDB then + for _ in pairs(NanamiSellPriceDB) do n = n + 1 end + end + return n + end + + local dbCount = CountDBEntries() + local statusLabel = CreateLabel(priceSection, + string.format("内置: %d 条 | 已学习: %d 条", dbCount, CountCacheEntries()), + 14, -30, font, 10, 0.8, 0.8, 0.7) + + local scanResultLabel = CreateLabel(priceSection, "", 14, -104, font, 10, 0.45, 0.9, 0.45) + + CreateButton(priceSection, "扫描全部物品售价", 16, -48, 228, 24, function() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.sellPriceCache then SFramesGlobalDB.sellPriceCache = {} end + local cache = SFramesGlobalDB.sellPriceCache + local scanned, learned = 0, 0 + + local function TryScan(link) + if not link then return end + local _, _, sid = string.find(link, "item:(%d+)") + if not sid then return end + local id = tonumber(sid) + if not id then return end + scanned = scanned + 1 + if cache[id] and cache[id] > 0 then return end + + local price + if NanamiSellPriceDB and NanamiSellPriceDB[id] and NanamiSellPriceDB[id] > 0 then + price = NanamiSellPriceDB[id] + elseif ShaguTweaks and ShaguTweaks.SellValueDB and ShaguTweaks.SellValueDB[id] and ShaguTweaks.SellValueDB[id] > 0 then + price = ShaguTweaks.SellValueDB[id] + else + local _,_,_,_,_,_,_,_,_,_,sp = GetItemInfo(link) + if sp and type(sp) == "number" and sp > 0 then price = sp end + end + if price then + cache[id] = price + learned = learned + 1 + end + end + + for bag = 0, 4 do + for slot = 1, (GetContainerNumSlots(bag) or 0) do + TryScan(GetContainerItemLink(bag, slot)) + end + end + for bag = 5, 10 do + pcall(function() + for slot = 1, (GetContainerNumSlots(bag) or 0) do + TryScan(GetContainerItemLink(bag, slot)) + end + end) + end + pcall(function() + for slot = 1, (GetContainerNumSlots(-1) or 0) do + TryScan(GetContainerItemLink(-1, slot)) + end + end) + for slot = 1, 19 do + TryScan(GetInventoryItemLink("player", slot)) + end + + statusLabel:SetText(string.format("内置: %d 条 | 已学习: %d 条", dbCount, CountCacheEntries())) + scanResultLabel:SetText(string.format("完成! 检查 %d 件, 新增 %d 条售价", scanned, learned)) + end) + + CreateButton(priceSection, "清空学习缓存", 258, -48, 228, 24, function() + if SFramesGlobalDB then SFramesGlobalDB.sellPriceCache = {} end + statusLabel:SetText(string.format("内置: %d 条 | 已学习: 0 条", dbCount)) + scanResultLabel:SetText("学习缓存已清空") + end) + + CreateDesc(priceSection, "扫描背包/银行/装备中所有物品, 缓存售价到离线数据库 (随存档保存)", 14, -76, font, 480) + CreateDesc(priceSection, "多次游玩后数据自动丰富, 其他角色也能共享离线数据", 14, -90, font, 480) + + bagScroll:UpdateRange() + self.bagScroll = bagScroll + self.bagControls = controls +end + +function SFrames.ConfigUI:BuildRaidPage() + local font = SFrames:GetFont() + local page = self.raidPage + local controls = {} + + local function RefreshRaid() + if SFrames.Raid and SFrames.Raid.ApplyLayout then + if not SFrames.Raid._framesBuilt then return end + SFrames.Raid:ApplyLayout() + SFrames.Raid:UpdateAll() + for i = 1, 40 do + local f = SFrames.Raid.frames[i] and SFrames.Raid.frames[i].frame + if f then SFrames.Raid:ApplyFrameStyle(f, SFrames.Raid:GetMetrics()) end + end + end + end + + local uiScroll = CreateScrollArea(page, 4, -4, 548, 458, 600) + local root = uiScroll.child + + local raidSection = CreateSection(root, "团队框架设置", 8, -8, 520, 570, font) + + table.insert(controls, CreateCheckBox(raidSection, + "启用 Nanami 团队框架(默认启用,需 /reload)", 12, -28, + function() return SFramesDB.enableRaidFrames ~= false end, + function(checked) SFramesDB.enableRaidFrames = checked end + )) + + CreateButton(raidSection, "解锁团队框架", 14, -56, 130, 22, function() + if SFrames and SFrames.UnlockFrames then SFrames:UnlockFrames() end + end) + + CreateButton(raidSection, "锁定团队框架", 154, -56, 130, 22, function() + if SFrames and SFrames.LockFrames then SFrames:LockFrames() end + end) + + table.insert(controls, CreateCheckBox(raidSection, + "横向小队排列(关闭为竖向叠放)", 12, -88, + function() return SFramesDB.raidLayout == "horizontal" end, + function(checked) + SFramesDB.raidLayout = checked and "horizontal" or "vertical" + end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "缩放", 14, -150, 150, 0.5, 2.0, 0.05, + function() return SFramesDB.raidFrameScale end, + function(value) SFramesDB.raidFrameScale = value end, + function(v) return string.format("%.2f", v) end, + function(val) + if SFrames.Raid and SFrames.Raid.parent then + SFrames.Raid.parent:SetScale(val) + end + end + )) + + table.insert(controls, CreateSlider(raidSection, "框体宽度", 170, -150, 150, 30, 150, 1, + function() return SFramesDB.raidFrameWidth end, + function(value) SFramesDB.raidFrameWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "框体高度", 326, -150, 130, 20, 80, 1, + function() return SFramesDB.raidFrameHeight end, + function(value) SFramesDB.raidFrameHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "生命条高度", 14, -212, 150, 10, 78, 1, + function() return SFramesDB.raidHealthHeight end, + function(value) SFramesDB.raidHealthHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateCheckBox(raidSection, + "显示能量条", 170, -210, + function() return SFramesDB.raidShowPower ~= false end, + function(checked) SFramesDB.raidShowPower = checked end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateCheckBox(raidSection, + "显示小队标题(横向=顶部,竖向=左侧)", 14, -244, + function() return SFramesDB.raidShowGroupLabel ~= false end, + function(checked) SFramesDB.raidShowGroupLabel = checked end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "横向间距", 14, -274, 150, 0, 40, 1, + function() return SFramesDB.raidHorizontalGap end, + function(value) SFramesDB.raidHorizontalGap = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "纵向间距", 170, -274, 150, 0, 40, 1, + function() return SFramesDB.raidVerticalGap end, + function(value) SFramesDB.raidVerticalGap = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "小队间隔", 326, -274, 130, 0, 60, 1, + function() return SFramesDB.raidGroupGap end, + function(value) SFramesDB.raidGroupGap = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "姓名字号", 14, -336, 150, 8, 18, 1, + function() return SFramesDB.raidNameFontSize end, + function(value) SFramesDB.raidNameFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateSlider(raidSection, "数值字号", 170, -336, 150, 8, 18, 1, + function() return SFramesDB.raidValueFontSize end, + function(value) SFramesDB.raidValueFontSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshRaid() end + )) + + table.insert(controls, CreateCheckBox(raidSection, + "血量百分比模式 (关=紧凑数值/-缺口)", 14, -390, + function() return SFramesDB.raidHealthFormat == "percent" end, + function(checked) SFramesDB.raidHealthFormat = checked and "percent" or "compact" end, + function() RefreshRaid() end + )) + + CreateButton(raidSection, "测试模式(假团队)", 14, -450, 150, 24, function() + if SFrames.Raid then + if SFrames.Raid.testing then + SFrames.Raid.testing = false + SFrames.Raid:UpdateAll() + else + SFrames.Raid.testing = true + SFrames.Raid:EnsureFrames() + SFrames.Raid.parent:Show() + for i = 1, 40 do + local f = SFrames.Raid.frames[i].frame + f:Show() + f.nameText:SetText("玩家"..i) + f.healthText:SetText("100%") + f.health:SetMinMaxValues(0, 100) + f.health:SetValue(100) + f.health:SetStatusBarColor(0, 1, 0) + end + end + end + end) + + uiScroll:UpdateRange() + self.raidControls = controls + self.raidScroll = uiScroll +end + +function SFrames.ConfigUI:BuildCharPage() + local font = SFrames:GetFont() + local page = self.charPage + local controls = {} + + local uiScroll = CreateScrollArea(page, 4, -4, 552, PANEL_HEIGHT - 110, 720) + local root = uiScroll.child + + local charSection = CreateSection(root, "人物面板", 8, -8, 524, 430, font) + + table.insert(controls, CreateCheckBox(charSection, + "启用 Nanami 人物面板(需 /reload)", 12, -34, + function() return SFramesDB.charPanelEnable ~= false end, + function(checked) SFramesDB.charPanelEnable = checked end + )) + CreateDesc(charSection, "关闭后按 C 键将打开原版人物面板", 36, -50, font) + + table.insert(controls, CreateSlider(charSection, + "面板缩放", 14, -72, 240, 0.6, 1.5, 0.05, + function() return SFramesDB.charPanelScale or 1.0 end, + function(v) SFramesDB.charPanelScale = v end, + function(v) return string.format("%.0f%%", v * 100) end, + function() + if SFramesCharacterPanel then + SFramesCharacterPanel:SetScale(SFramesDB.charPanelScale or 1.0) + end + end + )) + + table.insert(controls, CreateCheckBox(charSection, + "显示PVP称号", 12, -118, + function() return SFramesDB.charShowTitle ~= false end, + function(checked) SFramesDB.charShowTitle = checked end, + function() + if SFrames.CharacterPanel and SFrames.CharacterPanel.UpdateCurrentTab then + SFrames.CharacterPanel:UpdateCurrentTab() + end + end + )) + + table.insert(controls, CreateCheckBox(charSection, + "显示公会名", 12, -146, + function() return SFramesDB.charShowGuild ~= false end, + function(checked) SFramesDB.charShowGuild = checked end, + function() + if SFrames.CharacterPanel and SFrames.CharacterPanel.UpdateCurrentTab then + SFrames.CharacterPanel:UpdateCurrentTab() + end + end + )) + + table.insert(controls, CreateCheckBox(charSection, + "显示装备品质光晕", 12, -174, + function() return SFramesDB.charShowQualityGlow ~= false end, + function(checked) SFramesDB.charShowQualityGlow = checked end, + function() + if SFrames.CharacterPanel and SFrames.CharacterPanel.UpdateCurrentTab then + SFrames.CharacterPanel:UpdateCurrentTab() + end + end + )) + + table.insert(controls, CreateCheckBox(charSection, + "显示3D角色模型", 12, -202, + function() return SFramesDB.charShowModel ~= false end, + function(checked) SFramesDB.charShowModel = checked end, + function() + if SFrames.CharacterPanel and SFrames.CharacterPanel.UpdateCurrentTab then + SFrames.CharacterPanel:UpdateCurrentTab() + end + end + )) + + table.insert(controls, CreateCheckBox(charSection, + "启用 Nanami 观察面板(需 /reload)", 12, -230, + function() return SFramesDB.enableInspect ~= false end, + function(checked) SFramesDB.enableInspect = checked end + )) + CreateDesc(charSection, "关闭后观察他人将使用原版界面", 36, -246, font) + + CreateLabel(charSection, "提示: 面板使用 C 键打开/关闭,按 ESC 关闭。", 14, -274, font, 10, 0.6, 0.6, 0.65) + CreateLabel(charSection, "装备页下方可滚动查看全部角色属性。", 14, -292, font, 10, 0.6, 0.6, 0.65) + + -- Spell Book section + local sbSection = CreateSection(root, "法术书", 8, -446, 524, 200, font) + + table.insert(controls, CreateSlider(sbSection, + "法术书缩放", 14, -34, 240, 0.6, 1.5, 0.05, + function() return SFramesDB.spellBookScale or 1.0 end, + function(v) SFramesDB.spellBookScale = v end, + function(v) return string.format("%.0f%%", v * 100) end, + function() + if SFramesSpellBookUI then + SFramesSpellBookUI:SetScale(SFramesDB.spellBookScale or 1.0) + end + end + )) + + table.insert(controls, CreateCheckBox(sbSection, + "只显示最高等级法术", 14, -80, + function() return SFramesDB.spellBookHighestOnly == true end, + function(checked) SFramesDB.spellBookHighestOnly = checked end + )) + CreateDesc(sbSection, "隐藏同名法术的低等级版本,只保留最高等级", 36, -96, font) + + table.insert(controls, CreateCheckBox(sbSection, + "学习新等级后自动替换动作条", 14, -116, + function() return SFramesDB.spellBookAutoReplace == true end, + function(checked) SFramesDB.spellBookAutoReplace = checked end + )) + CreateDesc(sbSection, "学习高等级法术时,自动替换动作条上的低等级版本", 36, -132, font) + + CreateLabel(sbSection, "提示: 法术书使用 P 键打开/关闭,支持鼠标滚轮翻页。", 14, -160, font, 10, 0.6, 0.6, 0.65) + + -- Social section + local socialSection = CreateSection(root, "社交面板", 8, -660, 524, 120, font) + + table.insert(controls, CreateSlider(socialSection, + "社交面板缩放", 14, -34, 240, 0.6, 1.5, 0.05, + function() return SFramesDB.socialScale or 1.0 end, + function(v) SFramesDB.socialScale = v end, + function(v) return string.format("%.0f%%", v * 100) end, + function() + if SFramesSocialUI then + SFramesSocialUI:SetScale(SFramesDB.socialScale or 1.0) + end + end + )) + + CreateLabel(socialSection, "提示: 社交面板使用 O 键打开/关闭。", 14, -80, font, 10, 0.6, 0.6, 0.65) + + uiScroll:UpdateRange() + self.charControls = controls + self.charScroll = uiScroll +end + +function SFrames.ConfigUI:BuildActionBarPage() + local font = SFrames:GetFont() + local page = self.actionBarPage + local controls = {} + + local function RefreshAB() + if SFrames.ActionBars and SFrames.ActionBars.ApplyConfig then + SFrames.ActionBars:ApplyConfig() + end + end + + local uiScroll = CreateScrollArea(page, 4, -4, 548, 458, 978) + local root = uiScroll.child + + local abSection = CreateSection(root, "动作条", 8, -8, 520, 948, font) + + table.insert(controls, CreateCheckBox(abSection, + "启用动作条接管(需 /reload 生效)", 12, -28, + function() return SFramesDB.ActionBars.enable ~= false end, + function(checked) SFramesDB.ActionBars.enable = checked end + )) + + CreateLabel(abSection, "按键绑定:", 14, -56, font, 11, 0.85, 0.75, 0.80) + + CreateButton(abSection, "进入按键绑定模式", 14, -76, 160, 24, function() + if SFrames.ActionBars and SFrames.ActionBars.EnterKeyBindMode then + if self.frame then self.frame:Hide() end + SFrames.ActionBars:EnterKeyBindMode() + end + end) + + CreateDesc(abSection, + "悬停动作条/姿态栏/宠物栏按钮,按下键盘键或滚轮绑定。右键清除。ESC 退出。也可用 /nui bind", + 14, -100, font, 480) + + table.insert(controls, CreateSlider(abSection, "按钮大小", 14, -130, 150, 24, 48, 1, + function() return SFramesDB.ActionBars.buttonSize end, + function(value) SFramesDB.ActionBars.buttonSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "按钮间距", 180, -130, 150, 0, 8, 1, + function() return SFramesDB.ActionBars.buttonGap end, + function(value) SFramesDB.ActionBars.buttonGap = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "整体缩放", 346, -130, 150, 0.5, 2.0, 0.05, + function() return SFramesDB.ActionBars.scale end, + function(value) SFramesDB.ActionBars.scale = value end, + function(v) return string.format("%.2f", v) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "显示行数", 14, -192, 150, 1, 3, 1, + function() return SFramesDB.ActionBars.barCount end, + function(value) SFramesDB.ActionBars.barCount = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "姿态/宠物栏按钮大小", 180, -192, 150, 16, 40, 1, + function() return SFramesDB.ActionBars.smallBarSize end, + function(value) SFramesDB.ActionBars.smallBarSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "显示快捷键文字", 12, -242, + function() return SFramesDB.ActionBars.showHotkey ~= false end, + function(checked) SFramesDB.ActionBars.showHotkey = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "显示宏名称", 200, -242, + function() return SFramesDB.ActionBars.showMacroName == true end, + function(checked) SFramesDB.ActionBars.showMacroName = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "超距红色着色(技能超出射程时按钮变红)", 12, -270, + function() return SFramesDB.ActionBars.rangeColoring ~= false end, + function(checked) SFramesDB.ActionBars.rangeColoring = checked end + )) + + table.insert(controls, CreateCheckBox(abSection, + "显示宠物动作条", 12, -298, + function() return SFramesDB.ActionBars.showPetBar ~= false end, + function(checked) SFramesDB.ActionBars.showPetBar = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "显示姿态栏", 200, -298, + function() return SFramesDB.ActionBars.showStanceBar ~= false end, + function(checked) SFramesDB.ActionBars.showStanceBar = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "显示右侧动作条(两列竖向栏)", 12, -326, + function() return SFramesDB.ActionBars.showRightBars ~= false end, + function(checked) SFramesDB.ActionBars.showRightBars = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "始终显示动作条(空格子也显示背景框)", 12, -354, + function() return SFramesDB.ActionBars.alwaysShowGrid == true end, + function(checked) SFramesDB.ActionBars.alwaysShowGrid = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "按钮圆角", 12, -382, + function() return SFramesDB.ActionBars.buttonRounded == true end, + function(checked) SFramesDB.ActionBars.buttonRounded = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "按钮内阴影", 200, -382, + function() return SFramesDB.ActionBars.buttonInnerShadow == true end, + function(checked) SFramesDB.ActionBars.buttonInnerShadow = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "显示动作条狮鹫(在底部动作条两侧显示装饰狮鹫)", 12, -410, + function() return SFramesDB.ActionBars.hideGryphon == false end, + function(checked) SFramesDB.ActionBars.hideGryphon = not checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateCheckBox(abSection, + "狮鹫置于动作条之上(否则在动作条之下)", 12, -438, + function() return SFramesDB.ActionBars.gryphonOnTop == true end, + function(checked) SFramesDB.ActionBars.gryphonOnTop = checked end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "狮鹫宽度", 14, -492, 150, 24, 200, 2, + function() return SFramesDB.ActionBars.gryphonWidth or 64 end, + function(value) SFramesDB.ActionBars.gryphonWidth = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "狮鹫高度", 180, -492, 150, 24, 200, 2, + function() return SFramesDB.ActionBars.gryphonHeight or 64 end, + function(value) SFramesDB.ActionBars.gryphonHeight = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "水平偏移(向内重叠)", 14, -554, 150, -50, 100, 1, + function() return SFramesDB.ActionBars.gryphonOffsetX or 30 end, + function(value) SFramesDB.ActionBars.gryphonOffsetX = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "垂直偏移", 180, -554, 150, -100, 100, 1, + function() return SFramesDB.ActionBars.gryphonOffsetY or 0 end, + function(value) SFramesDB.ActionBars.gryphonOffsetY = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + -- 狮鹫样式选择器(带图例预览) + CreateLabel(abSection, "狮鹫样式:", 14, -606, font, 11, 0.85, 0.75, 0.80) + + local GRYPHON_STYLES_UI = { + { key = "dragonflight", label = "巨龙时代", + tex = "Interface\\AddOns\\Nanami-UI\\img\\df-gryphon" }, + { key = "dragonflight_beta", label = "巨龙时代(Beta)", + tex = "Interface\\AddOns\\Nanami-UI\\img\\df-gryphon-beta" }, + { key = "classic", label = "经典", + tex = "Interface\\MainMenuBar\\UI-MainMenuBar-EndCap-Human" }, + { key = "cat", label = "猫", + tex = "Interface\\AddOns\\Nanami-UI\\img\\cat" }, + } + + local styleBorders = {} + local styleStartX = 14 + local styleY = -626 + + for idx, style in ipairs(GRYPHON_STYLES_UI) do + local xOff = styleStartX + (idx - 1) * 125 + + -- 预览框 + local preview = CreateFrame("Frame", nil, abSection) + preview:SetWidth(64) + preview:SetHeight(64) + preview:SetPoint("TOPLEFT", abSection, "TOPLEFT", xOff, styleY) + + -- 预览背景 + local bg = preview:CreateTexture(nil, "BACKGROUND") + bg:SetAllPoints() + bg:SetTexture(0, 0, 0, 0.4) + + -- 纹理预览 + local tex = preview:CreateTexture(nil, "ARTWORK") + tex:SetAllPoints() + tex:SetTexture(style.tex) + + -- 选中边框 + local border = CreateFrame("Frame", nil, preview) + border:SetPoint("TOPLEFT", preview, "TOPLEFT", -2, 2) + border:SetPoint("BOTTOMRIGHT", preview, "BOTTOMRIGHT", 2, -2) + border:SetBackdrop({ + edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 2, + }) + border:Hide() + styleBorders[idx] = border + + -- 样式名标签 + local label = preview:CreateFontString(nil, "OVERLAY") + label:SetFont(font, 10, "OUTLINE") + label:SetPoint("TOP", preview, "BOTTOM", 0, -4) + label:SetText(style.label) + label:SetTextColor(0.7, 0.65, 0.7) + + -- 点击选择 + preview:EnableMouse(true) + preview._sfStyleKey = style.key + preview._sfIdx = idx + preview:SetScript("OnMouseUp", function() + SFramesDB.ActionBars.gryphonStyle = this._sfStyleKey + for i, bd in ipairs(styleBorders) do + if i == this._sfIdx then + bd:Show() + bd:SetBackdropBorderColor(1, 0.78, 0.2, 1) + else + bd:Hide() + end + end + RefreshAB() + end) + + -- 悬停高亮 + preview:SetScript("OnEnter", function() + local bd = styleBorders[this._sfIdx] + if bd and not bd:IsShown() then + bd:Show() + bd:SetBackdropBorderColor(SOFT_THEME.panelBorder[1], SOFT_THEME.panelBorder[2], SOFT_THEME.panelBorder[3], 0.8) + end + end) + preview:SetScript("OnLeave", function() + local bd = styleBorders[this._sfIdx] + local current = SFramesDB.ActionBars.gryphonStyle or "dragonflight" + if bd and this._sfStyleKey ~= current then + bd:Hide() + end + end) + end + + -- 初始化选中边框 + local currentStyle = SFramesDB.ActionBars.gryphonStyle or "dragonflight" + for idx, style in ipairs(GRYPHON_STYLES_UI) do + if style.key == currentStyle then + styleBorders[idx]:Show() + styleBorders[idx]:SetBackdropBorderColor(1, 0.78, 0.2, 1) + end + end + + CreateLabel(abSection, "底部动作条位置:", 14, -720, font, 11, 0.85, 0.75, 0.80) + + table.insert(controls, CreateSlider(abSection, "底部 X 偏移", 14, -756, 220, -500, 500, 1, + function() return SFramesDB.ActionBars.bottomOffsetX or 0 end, + function(value) SFramesDB.ActionBars.bottomOffsetX = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "底部 Y 偏移", 270, -756, 220, 0, 500, 1, + function() return SFramesDB.ActionBars.bottomOffsetY or 2 end, + function(value) SFramesDB.ActionBars.bottomOffsetY = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + CreateLabel(abSection, "右侧动作条位置:", 14, -812, font, 11, 0.85, 0.75, 0.80) + + table.insert(controls, CreateSlider(abSection, "右侧 X 偏移", 14, -848, 220, -500, 0, 1, + function() return SFramesDB.ActionBars.rightOffsetX or -4 end, + function(value) SFramesDB.ActionBars.rightOffsetX = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + table.insert(controls, CreateSlider(abSection, "右侧 Y 偏移", 270, -848, 220, -500, 500, 1, + function() return SFramesDB.ActionBars.rightOffsetY or -80 end, + function(value) SFramesDB.ActionBars.rightOffsetY = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshAB() end + )) + + CreateLabel(abSection, + "提示:启用/禁用动作条接管需要 /reload 才能生效。", + 14, -904, font, 10, 1, 0.92, 0.38) + + uiScroll:UpdateRange() + self.actionBarControls = controls + self.actionBarScroll = uiScroll +end + +function SFrames.ConfigUI:BuildMinimapPage() + local font = SFrames:GetFont() + local page = self.minimapPage + local controls = {} + + local function RefreshMinimap() + if SFrames.Minimap and SFrames.Minimap.Refresh then + SFrames.Minimap:Refresh() + end + end + + local uiScroll = CreateScrollArea(page, 4, -4, 548, 458, 782) + local root = uiScroll.child + + local mmSection = CreateSection(root, "小地图", 8, -8, 520, 540, font) + + table.insert(controls, CreateCheckBox(mmSection, + "启用 Nanami 小地图皮肤", 14, -36, + function() return SFramesDB.Minimap.enabled ~= false end, + function(checked) SFramesDB.Minimap.enabled = checked end + )) + CreateDesc(mmSection, "关闭后恢复默认小地图,需要 /reload 生效", 36, -52, font) + + table.insert(controls, CreateSlider(mmSection, "缩放", 14, -80, 220, 0.6, 2.0, 0.05, + function() return SFramesDB.Minimap.scale or 1.0 end, + function(value) SFramesDB.Minimap.scale = value end, + function(v) return string.format("%.0f%%", v * 100) end, + function() RefreshMinimap() end + )) + + table.insert(controls, CreateCheckBox(mmSection, + "显示游戏时钟", 14, -134, + function() return SFramesDB.Minimap.showClock ~= false end, + function(checked) SFramesDB.Minimap.showClock = checked end + )) + CreateDesc(mmSection, "在小地图下方显示服务器时间", 36, -150, font) + + table.insert(controls, CreateCheckBox(mmSection, + "显示玩家坐标", 270, -134, + function() return SFramesDB.Minimap.showCoords ~= false end, + function(checked) SFramesDB.Minimap.showCoords = checked end + )) + CreateDesc(mmSection, "在小地图圆内底部显示当前坐标", 292, -150, font) + + local function ApplyPos() + if SFrames.Minimap and SFrames.Minimap.ApplyPosition then + SFrames.Minimap.ApplyPosition() + end + end + + table.insert(controls, CreateSlider(mmSection, "水平位置 (X)", 14, -182, 220, -800, 0, 1, + function() return SFramesDB.Minimap.posX or -5 end, + function(value) SFramesDB.Minimap.posX = value end, + function(v) return string.format("%.0f", v) end, + function() ApplyPos() end + )) + + table.insert(controls, CreateSlider(mmSection, "垂直位置 (Y)", 270, -182, 220, -800, 0, 1, + function() return SFramesDB.Minimap.posY or -5 end, + function(value) SFramesDB.Minimap.posY = value end, + function(v) return string.format("%.0f", v) end, + function() ApplyPos() end + )) + + CreateButton(mmSection, "重置位置", 14, -226, 130, 22, function() + SFramesDB.Minimap.posX = -5 + SFramesDB.Minimap.posY = -5 + ApplyPos() + end) + + -- Map frame style selector with texture previews (5 columns x 2 rows) + CreateLabel(mmSection, "边框样式:", 14, -256, font, 11, 0.85, 0.75, 0.80) + + local styles = SFrames.Minimap and SFrames.Minimap.MAP_STYLES or {} + + -- "Auto (match class)" button + local autoBtn = CreateFrame("Button", nil, mmSection) + autoBtn:SetWidth(100) + autoBtn:SetHeight(18) + autoBtn:SetPoint("TOPLEFT", mmSection, "TOPLEFT", 130, -256) + autoBtn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 8, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + + local autoLabel = autoBtn:CreateFontString(nil, "OVERLAY") + autoLabel:SetFont(font, 10, "OUTLINE") + autoLabel:SetPoint("CENTER", autoBtn, "CENTER", 0, 0) + autoLabel:SetText("自动(匹配职业)") + + local function UpdateAutoBtn(isAuto) + if isAuto then + autoBtn:SetBackdropColor(0.2, 0.4, 0.2, 0.9) + autoBtn:SetBackdropBorderColor(0.4, 0.8, 0.3, 1) + autoLabel:SetTextColor(0.5, 1, 0.5) + else + autoBtn:SetBackdropColor(0.15, 0.15, 0.15, 0.7) + autoBtn:SetBackdropBorderColor(0.4, 0.4, 0.4, 0.6) + autoLabel:SetTextColor(0.6, 0.6, 0.6) + end + end + + local styleBorders = {} + local cols = 5 + local cellW = 56 + local cellH = 56 + local gapX = 10 + local gapY = 18 + local styleStartX = 14 + local styleY = -280 + + local function HighlightSelection() + local current = SFramesDB.Minimap.mapStyle or "auto" + local isAuto = (current == "auto") + UpdateAutoBtn(isAuto) + for i, bd in ipairs(styleBorders) do + if (not isAuto) and styles[i] and styles[i].key == current then + bd:Show() + bd:SetBackdropBorderColor(1, 0.78, 0.2, 1) + else + bd:Hide() + end + end + end + + for idx, style in ipairs(styles) do + local col = math.mod(idx - 1, cols) + local row = math.floor((idx - 1) / cols) + local xOff = styleStartX + col * (cellW + gapX) + local yOff = styleY - row * (cellH + gapY) + + local preview = CreateFrame("Frame", nil, mmSection) + preview:SetWidth(cellW) + preview:SetHeight(cellH) + preview:SetPoint("TOPLEFT", mmSection, "TOPLEFT", xOff, yOff) + + local bg = preview:CreateTexture(nil, "BACKGROUND") + bg:SetAllPoints() + bg:SetTexture(0, 0, 0, 0.4) + + local ptex = preview:CreateTexture(nil, "ARTWORK") + ptex:SetAllPoints() + ptex:SetTexture(style.tex) + + local border = CreateFrame("Frame", nil, preview) + border:SetPoint("TOPLEFT", preview, "TOPLEFT", -2, 2) + border:SetPoint("BOTTOMRIGHT", preview, "BOTTOMRIGHT", 2, -2) + border:SetBackdrop({ edgeFile = "Interface\\Buttons\\WHITE8X8", edgeSize = 2 }) + border:Hide() + styleBorders[idx] = border + + local label = preview:CreateFontString(nil, "OVERLAY") + label:SetFont(font, 9, "OUTLINE") + label:SetPoint("TOP", preview, "BOTTOM", 0, -2) + label:SetText(style.label) + label:SetTextColor(0.7, 0.65, 0.7) + + preview:EnableMouse(true) + preview._sfStyleKey = style.key + preview._sfIdx = idx + preview:SetScript("OnMouseUp", function() + SFramesDB.Minimap.mapStyle = this._sfStyleKey + HighlightSelection() + RefreshMinimap() + end) + preview:SetScript("OnEnter", function() + local bd = styleBorders[this._sfIdx] + if bd and not bd:IsShown() then + bd:Show() + bd:SetBackdropBorderColor(SOFT_THEME.panelBorder[1], SOFT_THEME.panelBorder[2], SOFT_THEME.panelBorder[3], 0.8) + end + end) + preview:SetScript("OnLeave", function() + local bd = styleBorders[this._sfIdx] + local current = SFramesDB.Minimap.mapStyle or "auto" + if bd and this._sfStyleKey ~= current then + bd:Hide() + end + end) + end + + autoBtn:SetScript("OnClick", function() + SFramesDB.Minimap.mapStyle = "auto" + HighlightSelection() + RefreshMinimap() + end) + + HighlightSelection() + + local totalRows = math.ceil(table.getn(styles) / cols) + local tipY = styleY - totalRows * (cellH + gapY) - 10 + CreateLabel(mmSection, "提示: 缩放、位置和样式修改后实时生效。", 14, tipY, font, 10, 0.6, 0.6, 0.65) + + -- ── 世界地图 ────────────────────────────────────────────────── + local wmSection = CreateSection(root, "世界地图", 8, -558, 520, 130, font) + + table.insert(controls, CreateCheckBox(wmSection, + "启用全新世界地图界面", 14, -34, + function() return SFramesDB.WorldMap.enabled == true end, + function(checked) + SFramesDB.WorldMap.enabled = checked + if checked then SFramesDB.Tweaks.worldMapWindow = false end + end + )) + CreateDesc(wmSection, "Nanami主题窗口化地图,隐藏原生装饰(需重载UI)", 36, -50, font) + + table.insert(controls, CreateCheckBox(wmSection, + "启用导航地图", 14, -68, + function() + return SFramesDB.WorldMap.nav and SFramesDB.WorldMap.nav.enabled == true + end, + function(checked) + if type(SFramesDB.WorldMap.nav) ~= "table" then +SFramesDB.WorldMap.nav = { enabled = false, width = 350, alpha = 0.70, locked = false } + end + SFramesDB.WorldMap.nav.enabled = checked + if SFrames.WorldMap and SFrames.WorldMap.ToggleNav then + if (checked and not (NanamiNavMap and NanamiNavMap:IsVisible())) + or (not checked and NanamiNavMap and NanamiNavMap:IsVisible()) then + SFrames.WorldMap:ToggleNav() + end + end + end + )) + CreateDesc(wmSection, "以玩家为中心的实时导航地图,半透明覆盖,可拖动", 36, -84, font) + CreateDesc(wmSection, "命令: /nui nav | 滚轮缩放 | Ctrl+滚轮透明度", 36, -96, font) + + -- ── 地图迷雾揭示 ─────────────────────────────────────────── + local mapRevealSection = CreateSection(root, "世界地图迷雾揭示", 8, -698, 520, 112, font) + + table.insert(controls, CreateCheckBox(mapRevealSection, + "启用地图迷雾揭示", 14, -34, + function() return SFramesDB.MapReveal.enabled ~= false end, + function(checked) + SFramesDB.MapReveal.enabled = checked + if SFrames.MapReveal and SFrames.MapReveal.Refresh then + SFrames.MapReveal:Refresh() + end + end + )) + CreateDesc(mapRevealSection, "在世界地图上显示未探索区域(变暗显示)", 36, -50, font) + CreateDesc(mapRevealSection, "需要 LibMapOverlayData 库支持", 36, -62, font) + + table.insert(controls, CreateSlider(mapRevealSection, "未探索区域亮度", 270, -64, 200, 0.2, 1.0, 0.05, + function() return SFramesDB.MapReveal.unexploredAlpha or 0.7 end, + function(value) SFramesDB.MapReveal.unexploredAlpha = value end, + function(v) return string.format("%.0f%%", v * 100) end, + function(value) + if SFrames.MapReveal and SFrames.MapReveal.SetAlpha then + SFrames.MapReveal:SetAlpha(value) + end + end + )) + + uiScroll:UpdateRange() + self.minimapControls = controls + self.minimapScroll = uiScroll +end + +-------------------------------------------------------------------------------- +-- Buff / Debuff Page (standalone tab) +-------------------------------------------------------------------------------- +function SFrames.ConfigUI:BuildBuffPage() + local font = SFrames:GetFont() + local page = self.buffPage + local controls = {} + + local function RefreshBuffs() + if SFrames.MinimapBuffs and SFrames.MinimapBuffs.Refresh then + SFrames.MinimapBuffs:Refresh() + end + end + + local uiScroll = CreateScrollArea(page, 4, -4, 548, 458, 520) + local root = uiScroll.child + + local buffSection = CreateSection(root, "Buff / Debuff 栏", 8, -8, 520, 490, font) + + -- Row 1: enable + show timer + table.insert(controls, CreateCheckBox(buffSection, + "启用 Buff / Debuff 栏", 14, -36, + function() return SFramesDB.MinimapBuffs.enabled ~= false end, + function(checked) SFramesDB.MinimapBuffs.enabled = checked end + )) + CreateDesc(buffSection, "替代暴雪默认 Buff 栏显示(需 /reload 生效)", 36, -52, font) + + table.insert(controls, CreateCheckBox(buffSection, + "显示时间文本", 270, -36, + function() return SFramesDB.MinimapBuffs.showTimer ~= false end, + function(checked) + SFramesDB.MinimapBuffs.showTimer = checked + RefreshBuffs() + end + )) + CreateDesc(buffSection, "图标下方显示剩余时间,永久 Buff 显示 N/A", 292, -52, font) + + -- Row 2: show debuffs + table.insert(controls, CreateCheckBox(buffSection, + "显示 Debuff", 14, -72, + function() return SFramesDB.MinimapBuffs.showDebuffs ~= false end, + function(checked) + SFramesDB.MinimapBuffs.showDebuffs = checked + RefreshBuffs() + end + )) + CreateDesc(buffSection, "在 Buff 栏下方显示 Debuff(边框按类型着色)", 36, -88, font) + + -- Row 3: sliders - icon sizes + table.insert(controls, CreateSlider(buffSection, "Buff 图标大小", 14, -114, 220, 20, 50, 1, + function() return SFramesDB.MinimapBuffs.iconSize or 30 end, + function(value) SFramesDB.MinimapBuffs.iconSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshBuffs() end + )) + + table.insert(controls, CreateSlider(buffSection, "Debuff 图标大小", 270, -114, 220, 20, 50, 1, + function() return SFramesDB.MinimapBuffs.debuffIconSize or 30 end, + function(value) SFramesDB.MinimapBuffs.debuffIconSize = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshBuffs() end + )) + + -- Row 4: per-row + spacing + table.insert(controls, CreateSlider(buffSection, "每行图标数", 14, -176, 220, 4, 16, 1, + function() return SFramesDB.MinimapBuffs.iconsPerRow or 8 end, + function(value) SFramesDB.MinimapBuffs.iconsPerRow = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshBuffs() end + )) + + table.insert(controls, CreateSlider(buffSection, "间距", 270, -176, 220, 0, 8, 1, + function() return SFramesDB.MinimapBuffs.spacing or 2 end, + function(value) SFramesDB.MinimapBuffs.spacing = value end, + function(v) return tostring(math.floor(v + 0.5)) end, + function() RefreshBuffs() end + )) + + -- Row 5: grow direction + anchor + CreateLabel(buffSection, "增长方向:", 14, -240, font, 11, 0.85, 0.75, 0.80) + CreateButton(buffSection, "向左", 100, -240, 70, 22, function() + SFramesDB.MinimapBuffs.growDirection = "LEFT" + RefreshBuffs() + end) + CreateButton(buffSection, "向右", 176, -240, 70, 22, function() + SFramesDB.MinimapBuffs.growDirection = "RIGHT" + RefreshBuffs() + end) + + CreateLabel(buffSection, "锚点位置:", 270, -240, font, 11, 0.85, 0.75, 0.80) + local posLabels = { TOPRIGHT = "右上", TOPLEFT = "左上", BOTTOMRIGHT = "右下", BOTTOMLEFT = "左下" } + local posKeys = { "TOPRIGHT", "TOPLEFT", "BOTTOMRIGHT", "BOTTOMLEFT" } + local posStartX = 356 + for _, key in ipairs(posKeys) do + CreateButton(buffSection, posLabels[key], posStartX, -240, 40, 22, function() + SFramesDB.MinimapBuffs.position = key + RefreshBuffs() + end) + posStartX = posStartX + 42 + end + + -- Row 6: X/Y offset sliders + table.insert(controls, CreateSlider(buffSection, "水平偏移 (X)", 14, -286, 220, -800, 800, 1, + function() return SFramesDB.MinimapBuffs.offsetX or 0 end, + function(value) SFramesDB.MinimapBuffs.offsetX = value end, + function(v) return string.format("%.0f", v) end, + function() RefreshBuffs() end + )) + + table.insert(controls, CreateSlider(buffSection, "垂直偏移 (Y)", 270, -286, 220, -800, 800, 1, + function() return SFramesDB.MinimapBuffs.offsetY or 0 end, + function(value) SFramesDB.MinimapBuffs.offsetY = value end, + function(v) return string.format("%.0f", v) end, + function() RefreshBuffs() end + )) + + -- Row 7: action buttons + CreateButton(buffSection, "重置默认位置", 14, -340, 120, 24, function() + SFramesDB.MinimapBuffs.offsetX = 0 + SFramesDB.MinimapBuffs.offsetY = 0 + SFramesDB.MinimapBuffs.position = "TOPRIGHT" + SFramesDB.MinimapBuffs.growDirection = "LEFT" + RefreshBuffs() + end) + + local simBtn + simBtn = CreateButton(buffSection, "模拟预览", 142, -340, 100, 24, function() + if not SFrames.MinimapBuffs then return end + if SFrames.MinimapBuffs._simulating then + SFrames.MinimapBuffs:StopSimulation() + simBtn:SetText("模拟预览") + else + SFrames.MinimapBuffs:SimulateBuffs() + simBtn:SetText("停止模拟") + end + end) + + -- Row 8: tips + CreateLabel(buffSection, "模拟预览:显示假 Buff / Debuff 以预览布局效果,不影响实际状态。", 14, -374, font, 9, 0.65, 0.58, 0.62) + CreateLabel(buffSection, "Debuff 边框颜色: |cff3399ff魔法|r |cff9900ff诅咒|r |cff996600疾病|r |cff009900毒药|r |cffcc0000物理|r", 14, -390, font, 9, 0.65, 0.58, 0.62) + + CreateLabel(buffSection, "提示:启用/禁用 Buff 栏需要 /reload 才能生效。其他调整实时生效。", 14, -414, font, 10, 0.6, 0.6, 0.65) + + uiScroll:UpdateRange() + self.buffControls = controls + self.buffScroll = uiScroll +end + +function SFrames.ConfigUI:ShowPage(mode) + self.activePage = mode + + self.uiPage:Hide() + self.playerPage:Hide() + self.targetPage:Hide() + self.bagPage:Hide() + self.raidPage:Hide() + self.partyPage:Hide() + self.charPage:Hide() + self.actionBarPage:Hide() + self.minimapPage:Hide() + self.buffPage:Hide() + self.personalizePage:Hide() + self.themePage:Hide() + + local allTabs = { self.uiTab, self.playerTab, self.targetTab, self.partyTab, self.raidTab, self.bagTab, self.charTab, self.actionBarTab, self.minimapTab, self.buffTab, self.personalizeTab, self.themeTab } + for _, tab in ipairs(allTabs) do + tab.sfSoftActive = false + tab:Enable() + tab:RefreshVisual() + end + + self:EnsurePage(mode or "ui") + + if mode == "player" then + self.playerPage:Show() + self.playerTab.sfSoftActive = true + self.playerTab:Disable() + self.playerTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 玩家框体") + self:RefreshControls(self.playerControls) + elseif mode == "target" then + self.targetPage:Show() + self.targetTab.sfSoftActive = true + self.targetTab:Disable() + self.targetTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 目标框体") + self:RefreshControls(self.targetControls) + elseif mode == "bags" then + self.bagPage:Show() + self.bagTab.sfSoftActive = true + self.bagTab:Disable() + self.bagTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 背包") + self:RefreshControls(self.bagControls) + if self.bagScroll and self.bagScroll.Reset then self.bagScroll:Reset() end + elseif mode == "raid" then + self.raidPage:Show() + self.raidTab.sfSoftActive = true + self.raidTab:Disable() + self.raidTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 团队") + self:RefreshControls(self.raidControls) + if self.raidScroll and self.raidScroll.Reset then self.raidScroll:Reset() end + elseif mode == "party" then + self.partyPage:Show() + self.partyTab.sfSoftActive = true + self.partyTab:Disable() + self.partyTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 小队") + self:RefreshControls(self.partyControls) + if self.partyScroll and self.partyScroll.Reset then self.partyScroll:Reset() end + elseif mode == "char" then + self.charPage:Show() + self.charTab.sfSoftActive = true + self.charTab:Disable() + self.charTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 人物面板") + self:RefreshControls(self.charControls) + if self.charScroll and self.charScroll.Reset then self.charScroll:Reset() end + elseif mode == "actionbar" then + self.actionBarPage:Show() + self.actionBarTab.sfSoftActive = true + self.actionBarTab:Disable() + self.actionBarTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 动作条") + self:RefreshControls(self.actionBarControls) + if self.actionBarScroll and self.actionBarScroll.Reset then self.actionBarScroll:Reset() end + elseif mode == "minimap" then + self.minimapPage:Show() + self.minimapTab.sfSoftActive = true + self.minimapTab:Disable() + self.minimapTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 地图设置") + self:RefreshControls(self.minimapControls) + if self.minimapScroll and self.minimapScroll.Reset then self.minimapScroll:Reset() end + elseif mode == "buff" then + self.buffPage:Show() + self.buffTab.sfSoftActive = true + self.buffTab:Disable() + self.buffTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - Buff / Debuff") + self:RefreshControls(self.buffControls) + if self.buffScroll and self.buffScroll.Reset then self.buffScroll:Reset() end + elseif mode == "personalize" then + self.personalizePage:Show() + self.personalizeTab.sfSoftActive = true + self.personalizeTab:Disable() + self.personalizeTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 个性化") + self:RefreshControls(self.personalizeControls) + if self.personalizeScroll and self.personalizeScroll.Reset then self.personalizeScroll:Reset() end + elseif mode == "theme" then + self.themePage:Show() + self.themeTab.sfSoftActive = true + self.themeTab:Disable() + self.themeTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 主题") + self:RefreshControls(self.themeControls) + if self.themeScroll and self.themeScroll.Reset then self.themeScroll:Reset() end + else + self.uiPage:Show() + self.uiTab.sfSoftActive = true + self.uiTab:Disable() + self.uiTab:RefreshVisual() + self.title:SetText("Nanami-UI 设置 - 界面") + self:RefreshControls(self.uiControls) + if self.uiScroll and self.uiScroll.Reset then self.uiScroll:Reset() end + end +end + +function SFrames.ConfigUI:EnsureFrame() + if self.frame then return end + + local font = SFrames:GetFont() + + local panel = CreateFrame("Frame", "SFramesConfigPanel", UIParent) + panel:SetWidth(PANEL_WIDTH) + panel:SetHeight(PANEL_HEIGHT) + panel:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + panel:SetMovable(true) + panel:EnableMouse(true) + panel:SetClampedToScreen(true) + panel:SetToplevel(true) + panel:SetFrameStrata("TOOLTIP") + panel:SetFrameLevel(100) + panel:RegisterForDrag("LeftButton") + panel:SetScript("OnDragStart", function() this:StartMoving() end) + panel:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + tinsert(UISpecialFrames, "SFramesConfigPanel") + + -- Apply the rounded "Roll UI" textured backdrop to the main settings panel + if SFrames and SFrames.CreateRoundBackdrop then + SFrames:CreateRoundBackdrop(panel) + panel.sfSoftBackdrop = true + else + EnsureSoftBackdrop(panel) + end + + if panel.SetBackdropColor then + panel:SetBackdropColor(SOFT_THEME.panelBg[1], SOFT_THEME.panelBg[2], SOFT_THEME.panelBg[3], SOFT_THEME.panelBg[4]) + end + if panel.SetBackdropBorderColor then + panel:SetBackdropBorderColor(SOFT_THEME.panelBorder[1], SOFT_THEME.panelBorder[2], SOFT_THEME.panelBorder[3], SOFT_THEME.panelBorder[4]) + end + + local titleIco = SFrames:CreateIcon(panel, "logo", 18) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("TOP", panel, "TOP", -52, -14) + titleIco:SetVertexColor(SOFT_THEME.title[1], SOFT_THEME.title[2], SOFT_THEME.title[3]) + + local title = panel:CreateFontString(nil, "OVERLAY") + title:SetFont(font, 14, "OUTLINE") + title:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + title:SetTextColor(SOFT_THEME.title[1], SOFT_THEME.title[2], SOFT_THEME.title[3]) + title:SetText("Nanami-UI 设置") + + local divider = panel:CreateTexture(nil, "ARTWORK") + divider:SetWidth(1) + divider:SetPoint("TOPLEFT", panel, "TOPLEFT", 120, -40) + divider:SetPoint("BOTTOMLEFT", panel, "BOTTOMLEFT", 120, 10) + divider:SetTexture(0.44, 0.42, 0.5, 0.9) + + local closeBtn = CreateFrame("Button", "SFramesConfigCloseBtn", panel) + closeBtn:SetWidth(20) + closeBtn:SetHeight(20) + closeBtn:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -8, -8) + closeBtn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local _cA = SOFT_THEME + closeBtn:SetBackdropColor(_cA.buttonDownBg[1], _cA.buttonDownBg[2], _cA.buttonDownBg[3], _cA.buttonDownBg[4] or 0.85) + closeBtn:SetBackdropBorderColor(_cA.btnBorder[1], _cA.btnBorder[2], _cA.btnBorder[3], _cA.btnBorder[4] or 0.7) + local closeIco = SFrames:CreateIcon(closeBtn, "close", 14) + closeIco:SetDrawLayer("OVERLAY") + closeIco:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeIco:SetVertexColor(1, 0.7, 0.7) + closeBtn:SetScript("OnClick", function() SFrames.ConfigUI.frame:Hide() end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(_cA.btnHoverBg[1], _cA.btnHoverBg[2], _cA.btnHoverBg[3], _cA.btnHoverBg[4] or 0.95) + this:SetBackdropBorderColor(_cA.btnHoverBd[1], _cA.btnHoverBd[2], _cA.btnHoverBd[3], _cA.btnHoverBd[4] or 0.9) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(_cA.buttonDownBg[1], _cA.buttonDownBg[2], _cA.buttonDownBg[3], _cA.buttonDownBg[4] or 0.85) + this:SetBackdropBorderColor(_cA.btnBorder[1], _cA.btnBorder[2], _cA.btnBorder[3], _cA.btnBorder[4] or 0.7) + end) + + local tabUI = CreateFrame("Button", "SFramesConfigTabUI", panel, "UIPanelButtonTemplate") + tabUI:SetWidth(100) + tabUI:SetHeight(28) + tabUI:SetPoint("TOPLEFT", panel, "TOPLEFT", 10, -50) + tabUI:SetText("界面设置") + tabUI:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("ui") end) + StyleButton(tabUI) + AddBtnIcon(tabUI, "settings", nil, "left") + + local tabPlayer = CreateFrame("Button", "SFramesConfigTabPlayer", panel, "UIPanelButtonTemplate") + tabPlayer:SetWidth(100) + tabPlayer:SetHeight(28) + tabPlayer:SetPoint("TOP", tabUI, "BOTTOM", 0, -4) + tabPlayer:SetText("玩家框体") + tabPlayer:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("player") end) + StyleButton(tabPlayer) + AddBtnIcon(tabPlayer, "character", nil, "left") + + local tabTarget = CreateFrame("Button", "SFramesConfigTabTarget", panel, "UIPanelButtonTemplate") + tabTarget:SetWidth(100) + tabTarget:SetHeight(28) + tabTarget:SetPoint("TOP", tabPlayer, "BOTTOM", 0, -4) + tabTarget:SetText("目标框体") + tabTarget:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("target") end) + StyleButton(tabTarget) + AddBtnIcon(tabTarget, "search", nil, "left") + + local tabParty = CreateFrame("Button", "SFramesConfigTabParty", panel, "UIPanelButtonTemplate") + tabParty:SetWidth(100) + tabParty:SetHeight(28) + tabParty:SetPoint("TOP", tabTarget, "BOTTOM", 0, -4) + tabParty:SetText("小队框架") + tabParty:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("party") end) + StyleButton(tabParty) + AddBtnIcon(tabParty, "friends", nil, "left") + + local tabRaid = CreateFrame("Button", "SFramesConfigTabRaid", panel, "UIPanelButtonTemplate") + tabRaid:SetWidth(100) + tabRaid:SetHeight(28) + tabRaid:SetPoint("TOP", tabParty, "BOTTOM", 0, -4) + tabRaid:SetText("团队框架") + tabRaid:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("raid") end) + StyleButton(tabRaid) + AddBtnIcon(tabRaid, "party", nil, "left") + + local tabBags = CreateFrame("Button", "SFramesConfigTabBags", panel, "UIPanelButtonTemplate") + tabBags:SetWidth(100) + tabBags:SetHeight(28) + tabBags:SetPoint("TOP", tabRaid, "BOTTOM", 0, -4) + tabBags:SetText("背包设置") + tabBags:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("bags") end) + StyleButton(tabBags) + AddBtnIcon(tabBags, "backpack", nil, "left") + + local tabChar = CreateFrame("Button", "SFramesConfigTabChar", panel, "UIPanelButtonTemplate") + tabChar:SetWidth(100) + tabChar:SetHeight(28) + tabChar:SetPoint("TOP", tabBags, "BOTTOM", 0, -4) + tabChar:SetText("人物面板") + tabChar:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("char") end) + StyleButton(tabChar) + AddBtnIcon(tabChar, "charsheet", nil, "left") + + local tabActionBar = CreateFrame("Button", "SFramesConfigTabActionBar", panel, "UIPanelButtonTemplate") + tabActionBar:SetWidth(100) + tabActionBar:SetHeight(28) + tabActionBar:SetPoint("TOP", tabChar, "BOTTOM", 0, -4) + tabActionBar:SetText("动作条") + tabActionBar:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("actionbar") end) + StyleButton(tabActionBar) + AddBtnIcon(tabActionBar, "attack", nil, "left") + + local tabMinimap = CreateFrame("Button", "SFramesConfigTabMinimap", panel, "UIPanelButtonTemplate") + tabMinimap:SetWidth(100) + tabMinimap:SetHeight(28) + tabMinimap:SetPoint("TOP", tabActionBar, "BOTTOM", 0, -4) + tabMinimap:SetText("地图设置") + tabMinimap:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("minimap") end) + StyleButton(tabMinimap) + AddBtnIcon(tabMinimap, "worldmap", nil, "left") + + local tabBuff = CreateFrame("Button", "SFramesConfigTabBuff", panel, "UIPanelButtonTemplate") + tabBuff:SetWidth(100) + tabBuff:SetHeight(28) + tabBuff:SetPoint("TOP", tabMinimap, "BOTTOM", 0, -4) + tabBuff:SetText("Buff栏") + tabBuff:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("buff") end) + StyleButton(tabBuff) + AddBtnIcon(tabBuff, "buff", nil, "left") + + local tabPersonalize = CreateFrame("Button", "SFramesConfigTabPersonalize", panel, "UIPanelButtonTemplate") + tabPersonalize:SetWidth(100) + tabPersonalize:SetHeight(28) + tabPersonalize:SetPoint("TOP", tabBuff, "BOTTOM", 0, -4) + tabPersonalize:SetText("个性化") + tabPersonalize:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("personalize") end) + StyleButton(tabPersonalize) + AddBtnIcon(tabPersonalize, "potion", nil, "left") + + local tabTheme = CreateFrame("Button", "SFramesConfigTabTheme", panel, "UIPanelButtonTemplate") + tabTheme:SetWidth(100) + tabTheme:SetHeight(28) + tabTheme:SetPoint("TOP", tabPersonalize, "BOTTOM", 0, -4) + tabTheme:SetText("主题设置") + tabTheme:SetScript("OnClick", function() SFrames.ConfigUI:ShowPage("theme") end) + StyleButton(tabTheme) + AddBtnIcon(tabTheme, "star", nil, "left") + + local content = CreateFrame("Frame", "SFramesConfigContentMain", panel) + content:SetWidth(PANEL_WIDTH - 140) + content:SetHeight(PANEL_HEIGHT - 60) + content:SetPoint("TOPLEFT", panel, "TOPLEFT", 130, -50) + + local uiPage = CreateFrame("Frame", "SFramesConfigUIPage", content) + uiPage:SetAllPoints(content) + + local playerPage = CreateFrame("Frame", "SFramesConfigPlayerPage", content) + playerPage:SetAllPoints(content) + + local targetPage = CreateFrame("Frame", "SFramesConfigTargetPage", content) + targetPage:SetAllPoints(content) + + local bagPage = CreateFrame("Frame", "SFramesConfigBagPage", content) + bagPage:SetAllPoints(content) + + local raidPage = CreateFrame("Frame", "SFramesConfigRaidPage", content) + raidPage:SetAllPoints(content) + + local partyPage = CreateFrame("Frame", "SFramesConfigPartyPage", content) + partyPage:SetAllPoints(content) + + local charPage = CreateFrame("Frame", "SFramesConfigCharPage", content) + charPage:SetAllPoints(content) + + local actionBarPage = CreateFrame("Frame", "SFramesConfigActionBarPage", content) + actionBarPage:SetAllPoints(content) + + local minimapPage = CreateFrame("Frame", "SFramesConfigMinimapPage", content) + minimapPage:SetAllPoints(content) + + local buffPage = CreateFrame("Frame", "SFramesConfigBuffPage", content) + buffPage:SetAllPoints(content) + + local personalizePage = CreateFrame("Frame", "SFramesConfigPersonalizePage", content) + personalizePage:SetAllPoints(content) + + local themePage = CreateFrame("Frame", "SFramesConfigThemePage", content) + themePage:SetAllPoints(content) + + self.frame = panel + self.title = title + self.uiTab = tabUI + self.playerTab = tabPlayer + self.targetTab = tabTarget + self.bagTab = tabBags + self.raidTab = tabRaid + self.partyTab = tabParty + self.charTab = tabChar + self.actionBarTab = tabActionBar + self.minimapTab = tabMinimap + self.buffTab = tabBuff + self.personalizeTab = tabPersonalize + self.themeTab = tabTheme + self.content = content + self.uiPage = uiPage + self.playerPage = playerPage + self.targetPage = targetPage + self.bagPage = bagPage + self.raidPage = raidPage + self.partyPage = partyPage + self.charPage = charPage + self.actionBarPage = actionBarPage + self.minimapPage = minimapPage + self.buffPage = buffPage + self.personalizePage = personalizePage + self.themePage = themePage + + local btnSaveReload = CreateFrame("Button", "SFramesConfigSaveReloadBtn", panel, "UIPanelButtonTemplate") + btnSaveReload:SetWidth(100) + btnSaveReload:SetHeight(26) + btnSaveReload:SetPoint("BOTTOMRIGHT", panel, "BOTTOMRIGHT", -15, 12) + btnSaveReload:SetText("保存并重载") + btnSaveReload:SetScript("OnClick", function() ReloadUI() end) + StyleButton(btnSaveReload) + AddBtnIcon(btnSaveReload, "save") + + local btnConfirm = CreateFrame("Button", "SFramesConfigConfirmBtn", panel, "UIPanelButtonTemplate") + btnConfirm:SetWidth(80) + btnConfirm:SetHeight(26) + btnConfirm:SetPoint("RIGHT", btnSaveReload, "LEFT", -6, 0) + btnConfirm:SetText("确认") + btnConfirm:SetScript("OnClick", function() SFrames.ConfigUI.frame:Hide() end) + StyleButton(btnConfirm) + AddBtnIcon(btnConfirm, "close") + + self._pageBuilt = {} +end + +function SFrames.ConfigUI:BuildPersonalizePage() + local font = SFrames:GetFont() + local page = self.personalizePage + local controls = {} + + local personalizeScroll = CreateScrollArea(page, 4, -4, 548, 458, 620) + local root = personalizeScroll.child + + -- ── 升级训练师提醒 ────────────────────────────────────────── + local trainerSection = CreateSection(root, "升级技能提醒", 8, -8, 520, 100, font) + + table.insert(controls, CreateCheckBox(trainerSection, + "升级时提醒可学习的新技能", 14, -34, + function() return SFramesDB.trainerReminder ~= false end, + function(checked) SFramesDB.trainerReminder = checked end + )) + CreateDesc(trainerSection, "升级后如果有新的职业技能可学习,将在屏幕和聊天窗口显示技能列表提醒", 36, -50, font, 340) + + CreateButton(trainerSection, "模拟提醒", 370, -34, 120, 22, function() + if SFrames.Player and SFrames.Player.ShowTrainerReminder then + local testLevel = UnitLevel("player") + if mod(testLevel, 2) ~= 0 then testLevel = testLevel + 1 end + SFrames.Player:ShowTrainerReminder(testLevel) + end + end) + CreateDesc(trainerSection, "点击按钮预览升级提醒效果", 392, -55, font, 100) + + -- ── 鼠标提示框 ──────────────────────────────────────────────── + local tooltipSection = CreateSection(root, "鼠标提示框", 8, -118, 520, 120, font) + CreateDesc(tooltipSection, "选择游戏提示框的显示位置方式(三选一)", 14, -28, font) + + local function RefreshTooltipMode() + if SFrames.FloatingTooltip and SFrames.FloatingTooltip.ToggleAnchor then + SFrames.FloatingTooltip:ToggleAnchor(SFramesDB.tooltipMode == "CUSTOM") + end + if SFrames.ConfigUI.tooltipCBs then + for _, cb in ipairs(SFrames.ConfigUI.tooltipCBs) do cb:Refresh() end + end + end + SFrames.ConfigUI.tooltipCBs = {} + + local cbDefault = CreateCheckBox(tooltipSection, + "系统默认位置", 14, -46, + function() return (SFramesDB.tooltipMode == "DEFAULT" or SFramesDB.tooltipMode == nil) end, + function(checked) if checked then SFramesDB.tooltipMode = "DEFAULT" RefreshTooltipMode() end end + ) + table.insert(SFrames.ConfigUI.tooltipCBs, cbDefault) + table.insert(controls, cbDefault) + + local cbCursor = CreateCheckBox(tooltipSection, + "跟随鼠标(鼠标右下方)", 14, -72, + function() return SFramesDB.tooltipMode == "CURSOR" end, + function(checked) if checked then SFramesDB.tooltipMode = "CURSOR" RefreshTooltipMode() end end + ) + table.insert(SFrames.ConfigUI.tooltipCBs, cbCursor) + table.insert(controls, cbCursor) + + local cbCustom = CreateCheckBox(tooltipSection, + "自定义固定位置", 270, -46, + function() return SFramesDB.tooltipMode == "CUSTOM" end, + function(checked) if checked then SFramesDB.tooltipMode = "CUSTOM" RefreshTooltipMode() end end + ) + table.insert(SFrames.ConfigUI.tooltipCBs, cbCustom) + table.insert(controls, cbCustom) + CreateDesc(tooltipSection, "启用后屏幕上会出现绿色锚点,拖动到目标位置后锁定", 292, -62, font) + + -- ── AFK 待机动画 ────────────────────────────────────────────── + local afkSection = CreateSection(root, "AFK 待机动画", 8, -248, 520, 146, font) + + table.insert(controls, CreateCheckBox(afkSection, + "启用 AFK 待机画面", 14, -34, + function() return SFramesDB.afkEnabled ~= false end, + function(checked) SFramesDB.afkEnabled = checked end + )) + CreateDesc(afkSection, "进入暂离状态后显示全屏待机画面(角色跳舞 + 信息面板)", 36, -50, font) + + table.insert(controls, CreateCheckBox(afkSection, + "在非休息区也启用", 14, -70, + function() return SFramesDB.afkOutsideRest == true end, + function(checked) SFramesDB.afkOutsideRest = checked end + )) + CreateDesc(afkSection, "默认仅在旅店/主城等休息区触发,勾选后在任何区域都会触发", 36, -86, font) + + table.insert(controls, CreateSlider(afkSection, + "AFK 延迟(分钟)", 14, -116, 200, 0, 15, 1, + function() return SFramesDB.afkDelay or 5 end, + function(v) SFramesDB.afkDelay = v end, + function(v) if v == 0 then return "立即" end return v .. " 分钟" end + )) + CreateDesc(afkSection, "进入暂离后等待多久才显示待机画面", 240, -116, font) + + CreateButton(afkSection, "预览待机画面", 370, -34, 120, 22, function() + if SFrames.AFKScreen and SFrames.AFKScreen.Toggle then + SFrames.AFKScreen._manualTrigger = true + SFrames.AFKScreen:Show() + end + end) + + personalizeScroll:UpdateRange() + self.personalizeControls = controls + self.personalizeScroll = personalizeScroll +end + +function SFrames.ConfigUI:BuildThemePage() + local font = SFrames:GetFont() + local page = self.themePage + local controls = {} + + local themeScroll = CreateScrollArea(page, 4, -4, 548, 458, 680) + local root = themeScroll.child + + --------------------------------------------------------------------------- + -- Section 1: Theme color selection (regular + class presets) + --------------------------------------------------------------------------- + local sec1 = CreateSection(root, "主题色", 8, -8, 520, 340, font) + + CreateDesc(sec1, "选择主题色后界面全局配色将跟随变化,重载 UI 后完全生效。", + 14, -34, font, 480) + + local SWATCH_SIZE = 32 + local SWATCH_GAP = 8 + local SWATCH_ROW = SWATCH_SIZE + SWATCH_GAP + 14 + local presets = SFrames.Theme.Presets + local order = SFrames.Theme.PresetOrder + local swatches = {} + + local function CreateSwatchRow(parent, presetList, startY) + for idx = 1, table.getn(presetList) do + local key = presetList[idx] + local preset = presets[key] + if preset then + local col = (idx - 1) - math.floor((idx - 1) / 5) * 5 + local row = math.floor((idx - 1) / 5) + local sx = 14 + col * (SWATCH_SIZE + SWATCH_GAP) + local sy = startY + row * -SWATCH_ROW + + local swatch = CreateFrame("Button", NextWidgetName("Swatch"), parent) + swatch:SetWidth(SWATCH_SIZE) + swatch:SetHeight(SWATCH_SIZE) + swatch:SetPoint("TOPLEFT", parent, "TOPLEFT", sx, sy) + + swatch:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 2, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + + local r, g, b + if preset.swatchRGB then + r, g, b = preset.swatchRGB[1], preset.swatchRGB[2], preset.swatchRGB[3] + else + r, g, b = SFrames.Theme.HSVtoRGB(preset.hue, 0.50 * (preset.satMul or 1), 0.75) + end + swatch:SetBackdropColor(r, g, b, 1) + swatch:SetBackdropBorderColor(0.25, 0.25, 0.25, 1) + + local nameFs = swatch:CreateFontString(nil, "OVERLAY") + nameFs:SetFont(font, 8, "OUTLINE") + nameFs:SetPoint("TOP", swatch, "BOTTOM", 0, -1) + nameFs:SetText(preset.name) + nameFs:SetTextColor(0.75, 0.75, 0.75) + + swatch.presetKey = key + swatch.selectFrame = CreateFrame("Frame", nil, swatch) + swatch.selectFrame:SetPoint("TOPLEFT", swatch, "TOPLEFT", -4, 4) + swatch.selectFrame:SetPoint("BOTTOMRIGHT", swatch, "BOTTOMRIGHT", 4, -4) + swatch.selectFrame:SetBackdrop({ + edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 2, + }) + swatch.selectFrame:SetBackdropBorderColor(1, 0.85, 0, 1) + swatch.selectFrame:Hide() + + swatch.selectGlow = swatch.selectFrame:CreateTexture(nil, "BACKGROUND") + swatch.selectGlow:SetTexture("Interface\\Buttons\\WHITE8X8") + swatch.selectGlow:SetAllPoints(swatch.selectFrame) + swatch.selectGlow:SetVertexColor(1, 0.85, 0, 0.15) + + swatch:SetScript("OnClick", function() + EnsureDB() + SFramesDB.Theme.preset = this.presetKey + SFramesDB.Theme.useClassTheme = false + SFrames.Theme:Apply(this.presetKey) + SFrames.ConfigUI:RefreshThemeSwatches() + SFrames.ConfigUI:RefreshThemePreview() + PlaySound("igMainMenuOptionCheckBoxOn") + end) + swatch:SetScript("OnEnter", function() + this:SetBackdropBorderColor(0.8, 0.8, 0.8, 1) + end) + swatch:SetScript("OnLeave", function() + local active = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.preset + local useClass = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.useClassTheme + if useClass then active = SFrames.Theme:GetCurrentPreset() end + if this.presetKey == active then + this:SetBackdropBorderColor(1, 0.85, 0, 1) + else + this:SetBackdropBorderColor(0.25, 0.25, 0.25, 1) + end + end) + + table.insert(swatches, swatch) + end + end + end + + CreateSwatchRow(sec1, order, -52) + + local classLabel = sec1:CreateFontString(nil, "OVERLAY") + classLabel:SetFont(font, 10, "OUTLINE") + classLabel:SetPoint("TOPLEFT", sec1, "TOPLEFT", 14, -164) + classLabel:SetText("职业色") + classLabel:SetTextColor(0.85, 0.85, 0.85) + + local divLine = sec1:CreateTexture(nil, "ARTWORK") + divLine:SetTexture("Interface\\Buttons\\WHITE8X8") + divLine:SetHeight(1) + divLine:SetPoint("TOPLEFT", classLabel, "BOTTOMLEFT", 0, -3) + divLine:SetPoint("RIGHT", sec1, "RIGHT", -14, 0) + divLine:SetVertexColor(0.35, 0.35, 0.40, 0.6) + + CreateSwatchRow(sec1, SFrames.Theme.ClassPresetOrder, -182) + + local classCheck = CreateCheckBox(sec1, + "跟随当前职业自动切换", 14, -296, + function() return SFramesDB and SFramesDB.Theme and SFramesDB.Theme.useClassTheme end, + function(checked) + EnsureDB() + SFramesDB.Theme.useClassTheme = checked + if checked then + SFrames.Theme:Apply(SFrames.Theme:GetCurrentPreset()) + else + SFrames.Theme:Apply(SFramesDB.Theme.preset or "pink") + end + SFrames.ConfigUI:RefreshThemeSwatches() + SFrames.ConfigUI:RefreshThemePreview() + end + ) + table.insert(controls, classCheck) + + self._themeSwatches = swatches + + --------------------------------------------------------------------------- + -- Section 3: Icon set picker + --------------------------------------------------------------------------- + local sec3 = CreateSection(root, "图标风格", 8, -356, 520, 110, font) + + CreateDesc(sec3, "选择图标风格后需重载 UI 以完全生效。", + 14, -34, font, 480) + + local ICON_SETS = { "icon", "icon2", "icon3", "icon4", "icon5", "icon6", "icon7", "icon8" } + local ICON_SET_SIZE = 48 + local ICON_SET_GAP = 10 + local faction = UnitFactionGroup and UnitFactionGroup("player") or "Alliance" + local factionKey = (faction == "Horde") and "horde" or "alliance" + local factionCoords = SFrames.ICON_TCOORDS and SFrames.ICON_TCOORDS[factionKey] + if not factionCoords then + factionCoords = (factionKey == "horde") + and { 0.75, 0.875, 0, 0.125 } + or { 0.625, 0.75, 0, 0.125 } + end + + local iconSetBtns = {} + for idx = 1, table.getn(ICON_SETS) do + local setKey = ICON_SETS[idx] + local texPath = "Interface\\AddOns\\Nanami-UI\\img\\" .. setKey + local sx = 14 + (idx - 1) * (ICON_SET_SIZE + ICON_SET_GAP) + + local btn = CreateFrame("Button", NextWidgetName("IcoSet"), sec3) + btn:SetWidth(ICON_SET_SIZE) + btn:SetHeight(ICON_SET_SIZE) + btn:SetPoint("TOPLEFT", sec3, "TOPLEFT", sx, -50) + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + btn:SetBackdropColor(0.08, 0.08, 0.1, 0.85) + btn:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + + local preview = btn:CreateTexture(nil, "ARTWORK") + preview:SetTexture(texPath) + preview:SetTexCoord(factionCoords[1], factionCoords[2], factionCoords[3], factionCoords[4]) + preview:SetPoint("CENTER", btn, "CENTER", 0, 0) + preview:SetWidth(ICON_SET_SIZE - 8) + preview:SetHeight(ICON_SET_SIZE - 8) + + btn.setKey = setKey + btn.selectBorder = CreateFrame("Frame", nil, btn) + btn.selectBorder:SetPoint("TOPLEFT", btn, "TOPLEFT", -2, 2) + btn.selectBorder:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", 2, -2) + btn.selectBorder:SetBackdrop({ edgeFile = "Interface\\Buttons\\WHITE8X8", edgeSize = 2 }) + btn.selectBorder:SetBackdropBorderColor(1, 1, 1, 1) + btn.selectBorder:Hide() + + btn:SetScript("OnClick", function() + EnsureDB() + SFramesDB.Theme.iconSet = this.setKey + SFrames.ConfigUI:RefreshIconSetButtons() + if SFrames.MinimapButton and SFrames.MinimapButton.Refresh then + SFrames.MinimapButton:Refresh() + end + PlaySound("igMainMenuOptionCheckBoxOn") + end) + btn:SetScript("OnEnter", function() + this:SetBackdropBorderColor(0.7, 0.7, 0.7, 1) + GameTooltip:SetOwner(this, "ANCHOR_NONE") + GameTooltip:ClearAllPoints() + GameTooltip:SetPoint("BOTTOM", this, "TOP", 0, 6) + local num = this.setKey == "icon" and "1" or string.sub(this.setKey, 5) + GameTooltip:SetText("图标风格 " .. num .. (this.setKey == "icon" and " (默认)" or "")) + GameTooltip:AddLine("点击选择,重载 UI 后生效", 0.7, 0.7, 0.7) + GameTooltip:Show() + GameTooltip:SetFrameStrata("TOOLTIP") + GameTooltip:Raise() + end) + btn:SetScript("OnLeave", function() + local cur = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.iconSet or "icon" + if this.setKey == cur then + this:SetBackdropBorderColor(1, 0.85, 0.6, 1) + else + this:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + end + GameTooltip:Hide() + end) + + table.insert(iconSetBtns, btn) + end + self._iconSetBtns = iconSetBtns + self:RefreshIconSetButtons() + + --------------------------------------------------------------------------- + -- Section 4: Preview + --------------------------------------------------------------------------- + local sec4 = CreateSection(root, "主题预览", 8, -478, 520, 180, font) + + local previewPanel = CreateFrame("Frame", NextWidgetName("Preview"), sec4) + previewPanel:SetWidth(490) + previewPanel:SetHeight(50) + previewPanel:SetPoint("TOPLEFT", sec4, "TOPLEFT", 14, -34) + EnsureSoftBackdrop(previewPanel) + + local previewTitle = previewPanel:CreateFontString(nil, "OVERLAY") + previewTitle:SetFont(font, 12, "OUTLINE") + previewTitle:SetPoint("TOPLEFT", previewPanel, "TOPLEFT", 10, -8) + previewTitle:SetText("面板标题示例") + + local previewText = previewPanel:CreateFontString(nil, "OVERLAY") + previewText:SetFont(font, 10, "OUTLINE") + previewText:SetPoint("TOPLEFT", previewPanel, "TOPLEFT", 10, -26) + previewText:SetText("正文文本 / Body text") + + local previewDim = previewPanel:CreateFontString(nil, "OVERLAY") + previewDim:SetFont(font, 9, "OUTLINE") + previewDim:SetPoint("TOPLEFT", previewPanel, "TOPLEFT", 10, -40) + previewDim:SetText("辅助文字 / Dim text") + + local previewBtn = CreateFrame("Button", NextWidgetName("PreviewBtn"), sec4, "UIPanelButtonTemplate") + previewBtn:SetWidth(90) + previewBtn:SetHeight(24) + previewBtn:SetPoint("TOPLEFT", sec4, "TOPLEFT", 14, -92) + previewBtn:SetText("按钮示例") + StyleButton(previewBtn) + + local previewAccent = sec4:CreateTexture(nil, "ARTWORK") + previewAccent:SetTexture("Interface\\Buttons\\WHITE8X8") + previewAccent:SetWidth(490) + previewAccent:SetHeight(4) + previewAccent:SetPoint("TOPLEFT", sec4, "TOPLEFT", 14, -122) + + local previewSlot = CreateFrame("Frame", NextWidgetName("PreviewSlot"), sec4) + previewSlot:SetWidth(80) + previewSlot:SetHeight(24) + previewSlot:SetPoint("TOPLEFT", sec4, "TOPLEFT", 14, -134) + previewSlot:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + + local previewSlotLabel = previewSlot:CreateFontString(nil, "OVERLAY") + previewSlotLabel:SetFont(font, 9, "OUTLINE") + previewSlotLabel:SetPoint("CENTER", previewSlot, "CENTER", 0, 0) + previewSlotLabel:SetText("色块") + + self._themePreview = { + panel = previewPanel, + title = previewTitle, + text = previewText, + dim = previewDim, + btn = previewBtn, + accent = previewAccent, + slot = previewSlot, + slotLabel = previewSlotLabel, + } + + --------------------------------------------------------------------------- + -- Hint + --------------------------------------------------------------------------- + CreateDesc(root, "提示: 更换主题后建议点击右下方 [保存并重载] 以确保所有界面生效。", + 14, -650, font, 500) + + --------------------------------------------------------------------------- + -- Finalize + --------------------------------------------------------------------------- + themeScroll:UpdateRange() + self.themeControls = controls + self.themeScroll = themeScroll + + self:RefreshThemeSwatches() + self:RefreshThemePreview() +end + +function SFrames.ConfigUI:RefreshThemeSwatches() + if not self._themeSwatches then return end + local active = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.preset or "pink" + local useClass = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.useClassTheme + if useClass then + active = SFrames.Theme:GetCurrentPreset() + end + for _, sw in ipairs(self._themeSwatches) do + if sw.presetKey == active then + sw:SetBackdropBorderColor(1, 0.85, 0, 1) + if sw.selectFrame then sw.selectFrame:Show() end + else + sw:SetBackdropBorderColor(0.25, 0.25, 0.25, 1) + if sw.selectFrame then sw.selectFrame:Hide() end + end + end +end + +function SFrames.ConfigUI:RefreshThemePreview() + local p = self._themePreview + if not p then return end + local A = SFrames.ActiveTheme + + if p.panel and p.panel.SetBackdropColor then + p.panel:SetBackdropColor(A.panelBg[1], A.panelBg[2], A.panelBg[3], A.panelBg[4] or 0.95) + p.panel:SetBackdropBorderColor(A.panelBorder[1], A.panelBorder[2], A.panelBorder[3], A.panelBorder[4] or 0.9) + end + if p.title then p.title:SetTextColor(A.title[1], A.title[2], A.title[3]) end + if p.text then p.text:SetTextColor(A.text[1], A.text[2], A.text[3]) end + if p.dim then p.dim:SetTextColor(A.dimText[1], A.dimText[2], A.dimText[3]) end + if p.accent then p.accent:SetVertexColor(A.accent[1], A.accent[2], A.accent[3], A.accent[4] or 1) end + if p.slot and p.slot.SetBackdropColor then + p.slot:SetBackdropColor(A.slotBg[1], A.slotBg[2], A.slotBg[3], A.slotBg[4] or 0.9) + p.slot:SetBackdropBorderColor(A.slotSelected[1], A.slotSelected[2], A.slotSelected[3], A.slotSelected[4] or 1) + end + if p.slotLabel then p.slotLabel:SetTextColor(A.nameText[1], A.nameText[2], A.nameText[3]) end +end + +function SFrames.ConfigUI:RefreshIconSetButtons() + if not self._iconSetBtns then return end + local cur = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.iconSet or "icon" + for _, btn in ipairs(self._iconSetBtns) do + if btn.setKey == cur then + btn:SetBackdropBorderColor(1, 0.85, 0.6, 1) + if btn.selectBorder then btn.selectBorder:Show() end + else + btn:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + if btn.selectBorder then btn.selectBorder:Hide() end + end + end +end + +function SFrames.ConfigUI:EnsurePage(mode) + if self._pageBuilt[mode] then return end + self._pageBuilt[mode] = true + if mode == "ui" then self:BuildUIPage() + elseif mode == "player" then self:BuildPlayerPage() + elseif mode == "target" then self:BuildTargetPage() + elseif mode == "party" then self:BuildPartyPage() + elseif mode == "bags" then self:BuildBagPage() + elseif mode == "raid" then self:BuildRaidPage() + elseif mode == "char" then self:BuildCharPage() + elseif mode == "actionbar" then self:BuildActionBarPage() + elseif mode == "minimap" then self:BuildMinimapPage() + elseif mode == "buff" then self:BuildBuffPage() + elseif mode == "personalize" then self:BuildPersonalizePage() + elseif mode == "theme" then self:BuildThemePage() + end +end + +function SFrames.ConfigUI:Build(mode) + EnsureDB() + self:EnsureFrame() + + local page = string.lower(mode or "ui") + local validPages = { ui = true, player = true, target = true, bags = true, char = true, party = true, raid = true, actionbar = true, minimap = true, buff = true, personalize = true, theme = true } + if not validPages[page] then page = "ui" end + + if self.frame:IsShown() and self.activePage == page then + self.frame:Hide() + return + end + + self:ShowPage(page) + self.frame:Show() + self.frame:Raise() +end + +function SFrames.ConfigUI:OpenUI() + self:Build("ui") +end + +function SFrames.ConfigUI:OpenBags() + self:Build("bags") +end diff --git a/Core.lua b/Core.lua new file mode 100644 index 0000000..bcf2191 --- /dev/null +++ b/Core.lua @@ -0,0 +1,524 @@ +-- S-Frames Core Initialize +SFrames = {} +DEFAULT_CHAT_FRAME:AddMessage("SF: Loading Core.lua...") + +BINDING_HEADER_NANAMI_UI = "Nanami-UI" +BINDING_NAME_NANAMI_TOGGLE_NAV = "切换导航地图" + +SFrames.eventFrame = CreateFrame("Frame", "SFramesEventFrame", UIParent) +SFrames.events = {} + +function SFrames:GetIncomingHeals(unit) + -- Source 1: ShaguTweaks libpredict + if ShaguTweaks and ShaguTweaks.libpredict and ShaguTweaks.libpredict.UnitGetIncomingHeals then + local lp = ShaguTweaks.libpredict + if lp.UnitGetIncomingHealsBreakdown then + local ok, total, mine, others = pcall(function() + return lp:UnitGetIncomingHealsBreakdown(unit, UnitName("player")) + end) + if ok then + return math.max(0, tonumber(total) or 0), + math.max(0, tonumber(mine) or 0), + math.max(0, tonumber(others) or 0) + end + end + local ok, amount = pcall(function() return lp:UnitGetIncomingHeals(unit) end) + if ok then + amount = math.max(0, tonumber(amount) or 0) + return amount, 0, amount + end + end + -- Source 2: HealComm-1.0 (AceLibrary) + if AceLibrary and AceLibrary.HasInstance and AceLibrary:HasInstance("HealComm-1.0") then + local ok, HC = pcall(function() return AceLibrary("HealComm-1.0") end) + if ok and HC and HC.getHeal then + local name = UnitName(unit) + if name then + local total = HC:getHeal(name) or 0 + total = math.max(0, tonumber(total) or 0) + return total, 0, total + end + end + end + return 0, 0, 0 +end + +-- Event Dispatcher +SFrames.eventFrame:SetScript("OnEvent", function() + if SFrames.events[event] then + for i, func in ipairs(SFrames.events[event]) do + func(event) + end + end +end) + +function SFrames:RegisterEvent(event, func) + if not self.events[event] then + self.events[event] = {} + self.eventFrame:RegisterEvent(event) + end + table.insert(self.events[event], func) +end + +function SFrames:UnregisterEvent(event, func) + if self.events[event] then + for i, f in ipairs(self.events[event]) do + if f == func then + table.remove(self.events[event], i) + break + end + end + if table.getn(self.events[event]) == 0 then + self.events[event] = nil + self.eventFrame:UnregisterEvent(event) + end + end +end + +-- Print Helper +function SFrames:Print(msg) + local hex = SFrames.Theme and SFrames.Theme:GetAccentHex() or "ffffb3d9" + DEFAULT_CHAT_FRAME:AddMessage("|c" .. hex .. "[Nanami-UI]|r " .. tostring(msg)) +end + +-- Addon Loaded Initializer +SFrames:RegisterEvent("PLAYER_LOGIN", function() + SFrames:Initialize() +end) + +function SFrames:SafeInit(name, initFn) + local ok, err = pcall(initFn) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: " .. name .. " init failed: " .. tostring(err) .. "|r") + end +end + +function SFrames:Initialize() + if not SFramesDB then SFramesDB = {} end + + if not SFramesDB.setupComplete then + if SFrames.SetupWizard and SFrames.SetupWizard.Show then + SFrames.SetupWizard:Show(function() + SFrames:DoFullInitialize() + end, "firstrun") + else + SFramesDB.setupComplete = true + self:DoFullInitialize() + end + return + end + + self:DoFullInitialize() +end + +function SFrames:DoFullInitialize() + self:Print("Nanami-UI 正在加载,喵呜~ =^_^=") + + self:HideBlizzardFrames() + + SFrames.Tooltip = CreateFrame("GameTooltip", "SFramesScanTooltip", nil, "GameTooltipTemplate") + SFrames.Tooltip:SetOwner(UIParent, "ANCHOR_NONE") + + -- Phase 1: Critical modules (unit frames, action bars) — must load immediately + if SFramesDB.enableUnitFrames ~= false then + if SFrames.Player and SFrames.Player.Initialize then SFrames.Player:Initialize() end + if SFrames.Pet and SFrames.Pet.Initialize then SFrames.Pet:Initialize() end + if SFrames.Target and SFrames.Target.Initialize then SFrames.Target:Initialize() end + if SFrames.ToT and SFrames.ToT.Initialize then SFrames.ToT:Initialize() end + if SFrames.Party and SFrames.Party.Initialize then SFrames.Party:Initialize() end + end + if SFrames.FloatingTooltip and SFrames.FloatingTooltip.Initialize then SFrames.FloatingTooltip:Initialize() end + + if SFrames.ActionBars and SFrames.ActionBars.Initialize then + SFrames.ActionBars:Initialize() + end + + self:InitSlashCommands() + + -- Phase 2: Deferred modules — spread across multiple frames to avoid memory spike + local deferred = { + { "Raid", function() if SFramesDB.enableUnitFrames ~= false and SFrames.Raid and SFrames.Raid.Initialize then SFrames.Raid:Initialize() end end }, + { "Bags", function() if SFrames.Bags and SFrames.Bags.Core and SFrames.Bags.Core.Initialize then SFrames.Bags.Core:Initialize() end end }, + { "Focus", function() if SFrames.Focus and SFrames.Focus.Initialize then SFrames.Focus:Initialize() end end }, + { "TalentTree", function() if SFrames.TalentTree and SFrames.TalentTree.Initialize then SFrames.TalentTree:Initialize() end end }, + { "Minimap", function() if SFrames.Minimap and SFrames.Minimap.Initialize then SFrames.Minimap:Initialize() end end }, + { "MinimapBuffs",function() if SFrames.MinimapBuffs and SFrames.MinimapBuffs.Initialize then SFrames.MinimapBuffs:Initialize() end end }, + { "MinimapButton",function() if SFrames.MinimapButton and SFrames.MinimapButton.Initialize then SFrames.MinimapButton:Initialize() end end }, + { "Chat", function() if SFramesDB.enableChat ~= false and SFrames.Chat and SFrames.Chat.Initialize then SFrames.Chat:Initialize() end end }, + { "MapReveal", function() if SFrames.MapReveal and SFrames.MapReveal.Initialize then SFrames.MapReveal:Initialize() end end }, + { "WorldMap", function() if SFrames.WorldMap and SFrames.WorldMap.Initialize then SFrames.WorldMap:Initialize() end end }, + { "MapIcons", function() if SFrames.MapIcons and SFrames.MapIcons.Initialize then SFrames.MapIcons:Initialize() end end }, + { "Tweaks", function() if SFrames.Tweaks and SFrames.Tweaks.Initialize then SFrames.Tweaks:Initialize() end end }, + { "AFKScreen", function() if SFrames.AFKScreen and SFrames.AFKScreen.Initialize then SFrames.AFKScreen:Initialize() end end }, + } + + local idx = 1 + local batchSize = 3 + local deferFrame = CreateFrame("Frame") + deferFrame:SetScript("OnUpdate", function() + if idx > table.getn(deferred) then + this:SetScript("OnUpdate", nil) + SFrames:Print("所有模块加载完成 =^_^=") + return + end + local batchEnd = idx + batchSize - 1 + if batchEnd > table.getn(deferred) then batchEnd = table.getn(deferred) end + for i = idx, batchEnd do + SFrames:SafeInit(deferred[i][1], deferred[i][2]) + end + idx = batchEnd + 1 + end) +end + +function SFrames:GetAuraTimeLeft(unit, index, isBuff) + -- If the unit is the player (e.g. you target yourself), Vanilla API CAN give us exact times + if UnitIsUnit(unit, "player") then + local texture = isBuff and UnitBuff(unit, index) or UnitDebuff(unit, index) + if texture then + local filter = isBuff and "HELPFUL" or "HARMFUL" + for i = 0, 31 do + local buffIndex = GetPlayerBuff(i, filter) + if buffIndex and buffIndex >= 0 then + if GetPlayerBuffTexture(buffIndex) == texture then + local t = GetPlayerBuffTimeLeft(buffIndex) + if t and t > 0 then return t end + end + end + end + end + end + + -- Fallback to ShaguTweaks libdebuff if available (Debuffs only usually) + if ShaguTweaks and ShaguTweaks.libdebuff then + if not isBuff then + local effect, rank, texture, stacks, dtype, duration, libTimeLeft = ShaguTweaks.libdebuff:UnitDebuff(unit, index) + if libTimeLeft and libTimeLeft > 0 then + return libTimeLeft + end + end + end + return 0 +end + +function SFrames:FormatTime(seconds) + if not seconds then return "" end + if seconds >= 3600 then + return math.floor(seconds / 3600) .. "h" + elseif seconds >= 60 then + return math.floor(seconds / 60) .. "m" + else + return math.floor(seconds) .. "s" + end +end + +function SFrames:InitSlashCommands() + DEFAULT_CHAT_FRAME:AddMessage("SF: InitSlashCommands called.") + SLASH_SFRAMES1 = "/nanami" + SLASH_SFRAMES2 = "/nui" + SlashCmdList["SFRAMES"] = function(msg) + local text = msg or "" + text = string.gsub(text, "^%s+", "") + text = string.gsub(text, "%s+$", "") + local _, _, cmd, args = string.find(text, "^(%S+)%s*(.-)$") + cmd = string.lower(cmd or "") + args = args or "" + + if cmd == "unlock" or cmd == "move" then + SFrames:UnlockFrames() + elseif cmd == "lock" then + SFrames:LockFrames() + elseif cmd == "chatreset" then + if SFrames.Chat and SFrames.Chat.ResetPosition then + SFrames.Chat:ResetPosition() + end + elseif cmd == "test" then + if SFrames.Party and SFrames.Party.TestMode then SFrames.Party:TestMode() end + elseif cmd == "partyh" then + if SFrames.Party and SFrames.Party.SetLayout then + SFrames.Party:SetLayout("horizontal") + SFrames:Print("Party layout set to horizontal.") + end + elseif cmd == "partyv" then + if SFrames.Party and SFrames.Party.SetLayout then + SFrames.Party:SetLayout("vertical") + SFrames:Print("Party layout set to vertical.") + end + elseif cmd == "partylayout" or cmd == "playout" then + local mode = string.lower(args or "") + if mode == "h" or mode == "horizontal" then + if SFrames.Party and SFrames.Party.SetLayout then + SFrames.Party:SetLayout("horizontal") + SFrames:Print("Party layout set to horizontal.") + end + elseif mode == "v" or mode == "vertical" then + if SFrames.Party and SFrames.Party.SetLayout then + SFrames.Party:SetLayout("vertical") + SFrames:Print("Party layout set to vertical.") + end + else + local current = (SFramesDB and SFramesDB.partyLayout) or "vertical" + SFrames:Print("Usage: /nui partylayout horizontal|vertical (current: " .. current .. ")") + end + elseif cmd == "focus" then + if not SFrames.Focus then + SFrames:Print("Focus module unavailable.") + return + end + local ok, name, usedNative = SFrames.Focus:SetFromTarget() + if ok then + if usedNative then + SFrames:Print("Focus set: " .. tostring(name) .. " (native)") + else + SFrames:Print("Focus set: " .. tostring(name)) + end + else + SFrames:Print("No valid target to set focus.") + end + elseif cmd == "clearfocus" or cmd == "cf" then + if not SFrames.Focus then + SFrames:Print("Focus module unavailable.") + return + end + SFrames.Focus:Clear() + SFrames:Print("Focus cleared.") + elseif cmd == "targetfocus" or cmd == "tf" then + if not SFrames.Focus then + SFrames:Print("Focus module unavailable.") + return + end + local ok = SFrames.Focus:Target() + if not ok then + SFrames:Print("Focus target not found.") + end + elseif cmd == "fcast" or cmd == "focuscast" then + if not SFrames.Focus then + SFrames:Print("Focus module unavailable.") + return + end + local ok, reason = SFrames.Focus:Cast(args) + if not ok then + if reason == "NO_SPELL" then + SFrames:Print("Usage: /nui fcast ") + elseif reason == "NO_FOCUS" then + SFrames:Print("No focus set.") + elseif reason == "FOCUS_NOT_FOUND" then + SFrames:Print("Focus not found in range/scene.") + else + SFrames:Print("Focus cast failed.") + end + end + elseif cmd == "focushelp" then + SFrames:Print("/nui focus - set current target as focus") + SFrames:Print("/nui clearfocus - clear focus") + SFrames:Print("/nui targetfocus - target focus") + SFrames:Print("/nui fcast - cast spell on focus") + SFrames:Print("/nui partyh / partyv - switch party layout") + SFrames:Print("/nui partylayout h|v - switch party layout") + SFrames:Print("/nui ui - open UI settings") + SFrames:Print("/nui bags - open bag settings") + SFrames:Print("/nui chat - open chat settings panel") + SFrames:Print("/nui chat help - chat command help") + SFrames:Print("/nui chatreset - reset chat frame position") + SFrames:Print("/nui afk - toggle AFK screen") + SFrames:Print("/nui pin - 地图标记 (clear/share)") + SFrames:Print("/nui nav - 切换导航地图") + SFrames:Print("/nui bind - 按键绑定模式(悬停按钮+按键)") + elseif cmd == "ui" or cmd == "uiconfig" then + if SFrames.ConfigUI and SFrames.ConfigUI.Build then SFrames.ConfigUI:Build("ui") end + elseif cmd == "chat" or cmd == "chatconfig" then + if SFrames.Chat and SFrames.Chat.HandleSlash then + SFrames.Chat:HandleSlash(args) + end + elseif cmd == "bags" or cmd == "bag" or cmd == "bagconfig" then + if SFrames.ConfigUI and SFrames.ConfigUI.Build then SFrames.ConfigUI:Build("bags") end + elseif cmd == "mapreveal" or cmd == "mr" then + if SFrames.MapReveal and SFrames.MapReveal.Toggle then + SFrames.MapReveal:Toggle() + else + SFrames:Print("MapReveal module unavailable.") + end + elseif cmd == "stats" or cmd == "stat" or cmd == "ss" then + if SFrames.StatSummary and SFrames.StatSummary.Toggle then + SFrames.StatSummary:Toggle() + else + SFrames:Print("StatSummary module unavailable.") + end + elseif cmd == "afk" then + if SFrames.AFKScreen and SFrames.AFKScreen.Toggle then + SFrames.AFKScreen:Toggle() + else + SFrames:Print("AFKScreen module unavailable.") + end + elseif cmd == "pin" or cmd == "wp" or cmd == "waypoint" then + if not SFrames.WorldMap then + SFrames:Print("WorldMap module unavailable.") + elseif args == "clear" or args == "remove" then + SFrames.WorldMap:ClearWaypoint() + SFrames:Print("地图标记已清除") + elseif args == "share" then + SFrames.WorldMap:ShareWaypoint() + else + SFrames:Print("/nui pin clear - 清除地图标记") + SFrames:Print("/nui pin share - 分享当前标记到聊天") + SFrames:Print("在世界地图中 Ctrl+左键 可放置标记") + end + elseif cmd == "nav" or cmd == "navigation" then + if SFrames.WorldMap and SFrames.WorldMap.ToggleNav then + SFrames.WorldMap:ToggleNav() + else + SFrames:Print("WorldMap module unavailable.") + end + elseif cmd == "bind" or cmd == "keybind" then + if SFrames.ActionBars and SFrames.ActionBars.ToggleKeyBindMode then + SFrames.ActionBars:ToggleKeyBindMode() + else + SFrames:Print("ActionBars module unavailable.") + end + elseif cmd == "config" or cmd == "" then + if SFrames.ConfigUI and SFrames.ConfigUI.Build then SFrames.ConfigUI:Build("ui") end + else + local hex = SFrames.Theme and SFrames.Theme:GetAccentHex() or "ffffb3d9" + DEFAULT_CHAT_FRAME:AddMessage("|c" .. hex .. "[Nanami-UI]|r Commands: /nui, /nui ui, /nui bags, /nui chat, /nui unlock, /nui lock, /nui test, /nui partyh, /nui partyv, /nui focushelp, /nui mapreveal, /nui stats, /nui afk, /nui pin, /nui bind") + end + end +end + +function SFrames:UnlockFrames() + self.isUnlocked = true + self:Print("Frames Unlocked. Drag to move.") + -- Show overlays or just let them be dragged if they are always movable + if SFramesPlayerFrame then SFramesPlayerFrame:EnableMouse(true) end + if SFramesPetFrame then SFramesPetFrame:EnableMouse(true) end + if SFramesTargetFrame then SFramesTargetFrame:EnableMouse(true) end + if SFrames.Chat and SFrames.Chat.SetUnlocked then + SFrames.Chat:SetUnlocked(true) + end +end + +function SFrames:LockFrames() + self.isUnlocked = false + self:Print("Frames Locked.") + if SFrames.Chat and SFrames.Chat.SetUnlocked then + SFrames.Chat:SetUnlocked(false) + end +end + +function SFrames:HideBlizzardFrames() + -- Hide Character Frame (replaced by CharacterPanel.lua) + -- Only suppress if the custom character panel is enabled + if (not SFramesDB) or (SFramesDB.charPanelEnable ~= false) then + if CharacterFrame then + CharacterFrame:UnregisterAllEvents() + CharacterFrame:Hide() + CharacterFrame.Show = function() end + end + if PaperDollFrame then PaperDollFrame:Hide() end + if ReputationFrame then ReputationFrame:Hide() end + if SkillFrame then SkillFrame:Hide() end + if HonorFrame then HonorFrame:Hide() end + end + + if SFramesDB and SFramesDB.enableUnitFrames == false then + -- Keep Blizzard unit frames when Nanami frames are disabled + else + -- Hide Player Frame + if PlayerFrame then + PlayerFrame:UnregisterAllEvents() + PlayerFrame:Hide() + PlayerFrame.Show = function() end + end + + -- Hide Pet Frame + if PetFrame then + PetFrame:UnregisterAllEvents() + PetFrame:Hide() + PetFrame.Show = function() end + end + + -- Hide Target Frame + if TargetFrame then + TargetFrame:UnregisterAllEvents() + TargetFrame:Hide() + TargetFrame.Show = function() end + end + + -- Hide Combo Frame + if ComboFrame then + ComboFrame:UnregisterAllEvents() + ComboFrame:Hide() + ComboFrame.Show = function() end + end + + -- Hide Party Frames + for i = 1, 4 do + local pf = _G["PartyMemberFrame"..i] + if pf then + pf:UnregisterAllEvents() + pf:Hide() + pf.Show = function() end + end + end + end + + -- Hide Native Raid Frames if SFrames raid is enabled + if (not SFramesDB) or (SFramesDB.enableRaidFrames ~= false) then + + local function NeuterBlizzardRaidUI() + -- Default Classic UI (1.12) + if RaidFrame then + RaidFrame:UnregisterAllEvents() + end + + -- Prevent Raid groups from updating and showing + for i = 1, NUM_RAID_GROUPS or 8 do + local rgf = _G["RaidGroupButton"..i] + if rgf then + rgf:UnregisterAllEvents() + end + end + + -- Override pullout generation + RaidPullout_Update = function() end + RaidPullout_OnEvent = function() end + + -- Hide individual pullout frames that might already exist + for i = 1, 40 do + local pf = _G["RaidPullout"..i] + if pf then + pf:UnregisterAllEvents() + pf:Hide() + pf.Show = function() end + end + end + + -- Hide standard GroupFrames + if RaidGroupFrame_OnEvent then + RaidGroupFrame_OnEvent = function() end + end + + -- Hide newer/backported Compact Raid Frames if they exist + if CompactRaidFrameManager then + CompactRaidFrameManager:UnregisterAllEvents() + CompactRaidFrameManager:Hide() + CompactRaidFrameManager.Show = function() end + end + if CompactRaidFrameContainer then + CompactRaidFrameContainer:UnregisterAllEvents() + CompactRaidFrameContainer:Hide() + CompactRaidFrameContainer.Show = function() end + end + end + + NeuterBlizzardRaidUI() + + -- Hook ADDON_LOADED to catch Blizzard_RaidUI loaded on demand + local raidHook = CreateFrame("Frame") + raidHook:RegisterEvent("ADDON_LOADED") + raidHook:SetScript("OnEvent", function() + if arg1 == "Blizzard_RaidUI" then + NeuterBlizzardRaidUI() + end + end) + end + +end diff --git a/DarkmoonGuide.lua b/DarkmoonGuide.lua new file mode 100644 index 0000000..72d2312 --- /dev/null +++ b/DarkmoonGuide.lua @@ -0,0 +1,363 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Darkmoon Faire Buff Guide (暗月马戏团 Buff 指引) +-- Automatically shows a guide when talking to Sayge, or via /dmf command +-------------------------------------------------------------------------------- + +SFrames.DarkmoonGuide = SFrames.DarkmoonGuide or {} +local DG = SFrames.DarkmoonGuide + +local GUIDE_WIDTH = 420 +local GUIDE_HEIGHT = 520 + +local _A = SFrames.ActiveTheme + +local SAYGE_NAMES = { + ["Sayge"] = true, + ["塞格"] = true, + ["赛格"] = true, + ["Сэйдж"] = true, +} + +-- Buff data: { buff name, q1 answer, q2 answer, description, optional alt path } +local BUFF_DATA = { + { buff = "+10% 伤害", q1 = 1, q2 = 1, star = true, tip = "DPS首选" }, + { buff = "+25 全抗性", q1 = 1, q2 = 2, star = false, tip = "PvP/坦克可选", q1_alt = 2, q2_alt = 3 }, + { buff = "+10% 护甲", q1 = 1, q2 = 3, star = false, tip = "坦克可选", q1_alt = 4, q2_alt = 3 }, + { buff = "+10% 精神", q1 = 2, q2 = 1, star = false, tip = "治疗回蓝", q1_alt = 4, q2_alt = 2 }, + { buff = "+10% 智力", q1 = 2, q2 = 2, star = false, tip = "法系/治疗", q1_alt = 4, q2_alt = 1 }, + { buff = "+10% 耐力", q1 = 3, q2 = 1, star = false, tip = "坦克/PvP" }, + { buff = "+10% 力量", q1 = 3, q2 = 2, star = false, tip = "战士/圣骑" }, + { buff = "+10% 敏捷", q1 = 3, q2 = 3, star = false, tip = "盗贼/猎人" }, +} + +local Q1_LABELS = { + [1] = "第一项: 我会正面迎战", + [2] = "第二项: 我会说服对方", + [3] = "第三项: 我会帮助别人", + [4] = "第四项: 我会独自思考", +} + +local Q2_LABELS = { + [1] = "选第一项", + [2] = "选第二项", + [3] = "选第三项", +} + +-------------------------------------------------------------------------------- +-- Frame creation +-------------------------------------------------------------------------------- +local function CreateGuideFrame() + if DG.frame then return DG.frame end + + local f = CreateFrame("Frame", "NanamiDarkmoonGuide", UIParent) + f:SetWidth(GUIDE_WIDTH) + f:SetHeight(GUIDE_HEIGHT) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 40) + f:SetFrameStrata("FULLSCREEN_DIALOG") + f:SetFrameLevel(500) + f:SetMovable(true) + f:EnableMouse(true) + f:SetClampedToScreen(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + SFrames:CreateRoundBackdrop(f) + local _pbg = _A.panelBg or { 0.06, 0.05, 0.08, 0.96 } + local _pbd = _A.panelBorder or { 0.45, 0.25, 0.55, 1 } + f:SetBackdropColor(_pbg[1], _pbg[2], _pbg[3], _pbg[4]) + f:SetBackdropBorderColor(_pbd[1], _pbd[2], _pbd[3], _pbd[4]) + + table.insert(UISpecialFrames, "NanamiDarkmoonGuide") + + if WorldMapFrame then + local origOnHide = WorldMapFrame:GetScript("OnHide") + WorldMapFrame:SetScript("OnHide", function() + if origOnHide then origOnHide() end + if f:IsShown() then f:Hide() end + end) + end + + -- Title bar + local titleBar = CreateFrame("Frame", nil, f) + titleBar:SetHeight(32) + titleBar:SetPoint("TOPLEFT", f, "TOPLEFT", 8, -8) + titleBar:SetPoint("TOPRIGHT", f, "TOPRIGHT", -8, -8) + titleBar:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + local _hbg = _A.headerBg or { 0.12, 0.08, 0.15, 0.9 } + local _hbd = _A.headerBorder or { 0.5, 0.3, 0.6, 0.6 } + titleBar:SetBackdropColor(_hbg[1], _hbg[2], _hbg[3], _hbg[4]) + titleBar:SetBackdropBorderColor(_hbd[1], _hbd[2], _hbd[3], _hbd[4]) + + local titleIcon = titleBar:CreateTexture(nil, "ARTWORK") + titleIcon:SetTexture("Interface\\Icons\\INV_Misc_Orb_02") + titleIcon:SetWidth(20) + titleIcon:SetHeight(20) + titleIcon:SetPoint("LEFT", titleBar, "LEFT", 8, 0) + + local titleText = SFrames:CreateFontString(titleBar, 14, "LEFT") + titleText:SetPoint("LEFT", titleIcon, "RIGHT", 6, 0) + titleText:SetTextColor(_A.title[1], _A.title[2], _A.title[3]) + titleText:SetText("暗月马戏团 Buff 指引") + + -- Close button + local closeBtn = CreateFrame("Button", nil, f) + closeBtn:SetWidth(20) + closeBtn:SetHeight(20) + closeBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -12, -13) + closeBtn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + local _cbg = _A.closeBtnBg or { 0.3, 0.08, 0.08, 0.9 } + local _cbd = _A.closeBtnBorder or { 0.6, 0.2, 0.2, 0.8 } + local _cbgH = _A.closeBtnHoverBg or { 0.5, 0.1, 0.1, 0.95 } + local _cbdH = _A.closeBtnHoverBorder or { 0.8, 0.3, 0.3, 1 } + closeBtn:SetBackdropColor(_cbg[1], _cbg[2], _cbg[3], _cbg[4]) + closeBtn:SetBackdropBorderColor(_cbd[1], _cbd[2], _cbd[3], _cbd[4]) + + local closeTxt = SFrames:CreateFontString(closeBtn, 12, "CENTER") + closeTxt:SetAllPoints(closeBtn) + closeTxt:SetText("X") + local _closeTxt = _A.accentLight or { 0.9, 0.5, 0.5 } + closeTxt:SetTextColor(_closeTxt[1], _closeTxt[2], _closeTxt[3]) + + closeBtn:SetScript("OnClick", function() f:Hide() end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(_cbgH[1], _cbgH[2], _cbgH[3], _cbgH[4]) + this:SetBackdropBorderColor(_cbdH[1], _cbdH[2], _cbdH[3], _cbdH[4]) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(_cbg[1], _cbg[2], _cbg[3], _cbg[4]) + this:SetBackdropBorderColor(_cbd[1], _cbd[2], _cbd[3], _cbd[4]) + end) + + -- NPC info section + local npcSection = CreateFrame("Frame", nil, f) + npcSection:SetHeight(48) + npcSection:SetPoint("TOPLEFT", titleBar, "BOTTOMLEFT", 0, -8) + npcSection:SetPoint("TOPRIGHT", titleBar, "BOTTOMRIGHT", 0, -8) + + local npcLine1 = SFrames:CreateFontString(npcSection, 11, "LEFT") + npcLine1:SetPoint("TOPLEFT", npcSection, "TOPLEFT", 4, 0) + npcLine1:SetPoint("TOPRIGHT", npcSection, "TOPRIGHT", -4, 0) + npcLine1:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + npcLine1:SetText("NPC: |cffffffffSayge (塞格)|r - 暗月马戏团占卜师") + + local npcLine2 = SFrames:CreateFontString(npcSection, 10, "LEFT") + npcLine2:SetPoint("TOPLEFT", npcLine1, "BOTTOMLEFT", 0, -4) + npcLine2:SetPoint("TOPRIGHT", npcLine1, "BOTTOMRIGHT", 0, -4) + npcLine2:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + npcLine2:SetText("与赛格对话选择不同答案可获得不同2小时Buff (表中 X→Y = 第1题选X, 第2题选Y)") + + -- Separator + local sep1 = f:CreateTexture(nil, "ARTWORK") + sep1:SetTexture("Interface\\Buttons\\WHITE8X8") + sep1:SetHeight(1) + sep1:SetPoint("TOPLEFT", npcSection, "BOTTOMLEFT", 0, -4) + sep1:SetPoint("TOPRIGHT", npcSection, "BOTTOMRIGHT", 0, -4) + local _sep = _A.separator or { 0.4, 0.25, 0.5, 0.5 } + sep1:SetVertexColor(_sep[1], _sep[2], _sep[3], _sep[4]) + + -- Column headers + local headerY = -104 + local colBuff = 12 + local colOpt1 = 150 + local colOpt2 = 260 + local colTip = 355 + + local hBuff = SFrames:CreateFontString(f, 11, "LEFT") + hBuff:SetPoint("TOPLEFT", f, "TOPLEFT", colBuff, headerY) + hBuff:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + hBuff:SetText("Buff效果") + + local hOpt1 = SFrames:CreateFontString(f, 11, "LEFT") + hOpt1:SetPoint("TOPLEFT", f, "TOPLEFT", colOpt1, headerY) + hOpt1:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + hOpt1:SetText("选项1") + + local hOpt2 = SFrames:CreateFontString(f, 11, "LEFT") + hOpt2:SetPoint("TOPLEFT", f, "TOPLEFT", colOpt2, headerY) + hOpt2:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + hOpt2:SetText("选项2") + + local hTip = SFrames:CreateFontString(f, 11, "LEFT") + hTip:SetPoint("TOPLEFT", f, "TOPLEFT", colTip, headerY) + hTip:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + hTip:SetText("备注") + + -- Header separator + local sep2 = f:CreateTexture(nil, "ARTWORK") + sep2:SetTexture("Interface\\Buttons\\WHITE8X8") + sep2:SetHeight(1) + sep2:SetPoint("TOPLEFT", f, "TOPLEFT", 10, headerY - 14) + sep2:SetPoint("TOPRIGHT", f, "TOPRIGHT", -10, headerY - 14) + local _sep2c = _A.separator or { 0.35, 0.2, 0.45, 0.4 } + sep2:SetVertexColor(_sep2c[1], _sep2c[2], _sep2c[3], _sep2c[4]) + + -- Buff rows + local rowStart = headerY - 22 + local rowHeight = 24 + + for i, data in ipairs(BUFF_DATA) do + local y = rowStart - (i - 1) * rowHeight + + -- Alternate row background + if math.fmod(i, 2) == 0 then + local rowBg = f:CreateTexture(nil, "BACKGROUND") + rowBg:SetTexture("Interface\\Buttons\\WHITE8X8") + rowBg:SetHeight(rowHeight) + rowBg:SetPoint("TOPLEFT", f, "TOPLEFT", 8, y + 4) + rowBg:SetPoint("TOPRIGHT", f, "TOPRIGHT", -8, y + 4) + local _rbg = _A.sectionBg or { 0.15, 0.1, 0.2, 0.3 } + rowBg:SetVertexColor(_rbg[1], _rbg[2], _rbg[3], 0.3) + end + + -- Star marker for recommended + if data.star then + local star = SFrames:CreateFontString(f, 10, "LEFT") + star:SetPoint("TOPLEFT", f, "TOPLEFT", colBuff - 10, y) + local _stc = _A.title or { 1.0, 0.84, 0.0 } + star:SetTextColor(_stc[1], _stc[2], _stc[3]) + star:SetText("*") + end + + -- Buff name + local buffName = SFrames:CreateFontString(f, 11, "LEFT") + buffName:SetPoint("TOPLEFT", f, "TOPLEFT", colBuff, y) + if data.star then + local _hl = _A.accentLight or { 0.4, 1.0, 0.4 } + buffName:SetTextColor(_hl[1], _hl[2], _hl[3]) + else + buffName:SetTextColor(_A.text[1], _A.text[2], _A.text[3]) + end + buffName:SetText(data.buff) + + -- Option 1 path (q1→q2) + local opt1Text = SFrames:CreateFontString(f, 11, "CENTER") + opt1Text:SetPoint("TOPLEFT", f, "TOPLEFT", colOpt1, y) + local _o1c = _A.title or { 1, 0.82, 0.5 } + opt1Text:SetTextColor(_o1c[1], _o1c[2], _o1c[3]) + opt1Text:SetText(data.q1 .. " → " .. data.q2) + + -- Option 2 path (alt q1→q2) or "/" + local opt2Text = SFrames:CreateFontString(f, 11, "CENTER") + opt2Text:SetPoint("TOPLEFT", f, "TOPLEFT", colOpt2, y) + if data.q1_alt then + local _o2c = _A.accentDark or { 0.7, 0.82, 1.0 } + opt2Text:SetTextColor(_o2c[1], _o2c[2], _o2c[3]) + opt2Text:SetText(data.q1_alt .. " → " .. data.q2_alt) + else + opt2Text:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + opt2Text:SetText("/") + end + + -- Tip + local tipText = SFrames:CreateFontString(f, 10, "LEFT") + tipText:SetPoint("TOPLEFT", f, "TOPLEFT", colTip, y) + tipText:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + tipText:SetText(data.tip) + end + + -- Separator before Q1 detail + local sep3 = f:CreateTexture(nil, "ARTWORK") + sep3:SetTexture("Interface\\Buttons\\WHITE8X8") + sep3:SetHeight(1) + local detailY = rowStart - table.getn(BUFF_DATA) * rowHeight - 4 + sep3:SetPoint("TOPLEFT", f, "TOPLEFT", 10, detailY) + sep3:SetPoint("TOPRIGHT", f, "TOPRIGHT", -10, detailY) + local _sep3c = _A.separator or { 0.4, 0.25, 0.5, 0.5 } + sep3:SetVertexColor(_sep3c[1], _sep3c[2], _sep3c[3], _sep3c[4]) + + -- Q1 dialogue detail header + local q1Header = SFrames:CreateFontString(f, 11, "LEFT") + q1Header:SetPoint("TOPLEFT", f, "TOPLEFT", 12, detailY - 10) + q1Header:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + q1Header:SetText("第一题选项对照:") + + -- Q1 options + local q1y = detailY - 28 + for idx, label in pairs(Q1_LABELS) do + local line = SFrames:CreateFontString(f, 10, "LEFT") + line:SetPoint("TOPLEFT", f, "TOPLEFT", 18, q1y - (idx - 1) * 16) + line:SetTextColor(_A.text[1], _A.text[2], _A.text[3]) + line:SetText("|cffffcc66" .. idx .. ".|r " .. label) + end + + -- Q2 dialogue detail header + local q2HeaderY = q1y - 4 * 16 - 8 + local q2Header = SFrames:CreateFontString(f, 11, "LEFT") + q2Header:SetPoint("TOPLEFT", f, "TOPLEFT", 12, q2HeaderY) + q2Header:SetTextColor(_A.sectionTitle[1], _A.sectionTitle[2], _A.sectionTitle[3]) + q2Header:SetText("第二题: 根据上表 \"X → Y\" 中的Y选对应项 (共3项)") + + -- Tip at bottom + local tipY = q2HeaderY - 24 + local bottomTip = SFrames:CreateFontString(f, 10, "LEFT") + bottomTip:SetPoint("TOPLEFT", f, "TOPLEFT", 12, tipY) + bottomTip:SetPoint("TOPRIGHT", f, "TOPRIGHT", -12, tipY) + local _btc = _A.title or { 1.0, 0.84, 0.0 } + bottomTip:SetTextColor(_btc[1], _btc[2], _btc[3]) + bottomTip:SetText("* 推荐: 大部分职业选 +10% 伤害 (第1题选1, 第2题选1)") + + local bottomTip2 = SFrames:CreateFontString(f, 10, "LEFT") + bottomTip2:SetPoint("TOPLEFT", bottomTip, "BOTTOMLEFT", 0, -6) + bottomTip2:SetPoint("TOPRIGHT", bottomTip, "BOTTOMRIGHT", 0, -6) + bottomTip2:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + bottomTip2:SetText("输入 /dmf 可随时打开此面板 | 可拖动移动 | ESC关闭") + + f:Hide() + DG.frame = f + return f +end + +-------------------------------------------------------------------------------- +-- Toggle +-------------------------------------------------------------------------------- +function DG:Toggle() + local f = CreateGuideFrame() + if f:IsShown() then + f:Hide() + else + f:Show() + end +end + +function DG:Show() + local f = CreateGuideFrame() + f:Show() +end + +function DG:Hide() + if DG.frame then DG.frame:Hide() end +end + +-------------------------------------------------------------------------------- +-- Slash command: /dmf +-------------------------------------------------------------------------------- +SLASH_DARKMOONGUIDE1 = "/dmf" +SLASH_DARKMOONGUIDE2 = "/darkmoon" +SlashCmdList["DARKMOONGUIDE"] = function() + DG:Toggle() +end + +-------------------------------------------------------------------------------- +-- Auto-show when talking to Sayge +-------------------------------------------------------------------------------- +local detector = CreateFrame("Frame", "NanamiDarkmoonDetector", UIParent) +detector:RegisterEvent("GOSSIP_SHOW") +detector:SetScript("OnEvent", function() + local npcName = UnitName("npc") + if npcName and SAYGE_NAMES[npcName] then + DG:Show() + end +end) + +DEFAULT_CHAT_FRAME:AddMessage("SF: Loading DarkmoonGuide.lua...") diff --git a/DarkmoonMapMarker.lua b/DarkmoonMapMarker.lua new file mode 100644 index 0000000..e9ef62a --- /dev/null +++ b/DarkmoonMapMarker.lua @@ -0,0 +1,2 @@ +-- Darkmoon Faire map markers are now integrated into WorldMap.lua (section 8b) +-- This file is intentionally left minimal to avoid duplicate code. diff --git a/Factory.lua b/Factory.lua new file mode 100644 index 0000000..82d6155 --- /dev/null +++ b/Factory.lua @@ -0,0 +1,252 @@ +-- Helper function to generate ElvUI-style backdrop and shadow border +function SFrames:CreateBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + local A = SFrames.ActiveTheme + if A and A.panelBg then + frame:SetBackdropColor(A.panelBg[1], A.panelBg[2], A.panelBg[3], A.panelBg[4] or 0.9) + frame:SetBackdropBorderColor(A.panelBorder[1], A.panelBorder[2], A.panelBorder[3], A.panelBorder[4] or 1) + else + frame:SetBackdropColor(0.1, 0.1, 0.1, 0.9) + frame:SetBackdropBorderColor(0, 0, 0, 1) + end +end + +function SFrames:CreateRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + local A = SFrames.ActiveTheme + if A and A.panelBg then + frame:SetBackdropColor(A.panelBg[1], A.panelBg[2], A.panelBg[3], A.panelBg[4] or 0.95) + frame:SetBackdropBorderColor(A.panelBorder[1], A.panelBorder[2], A.panelBorder[3], A.panelBorder[4] or 0.9) + else + frame:SetBackdropColor(0.08, 0.08, 0.10, 0.95) + frame:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + end +end + +function SFrames:CreateUnitBackdrop(frame) + SFrames:CreateBackdrop(frame) + frame:SetBackdropBorderColor(0, 0, 0, 1) +end + +-- Generator for StatusBars +function SFrames:CreateStatusBar(parent, name) + local bar = CreateFrame("StatusBar", name, parent) + bar:SetStatusBarTexture(SFrames:GetTexture()) + + if (not SFramesDB or SFramesDB.smoothBars ~= false) and SmoothBar then + SmoothBar(bar) + end + + return bar +end + +-- Generator for FontStrings +function SFrames:CreateFontString(parent, size, justifyH) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(SFrames:GetFont(), size or 12, SFrames.Media.fontOutline) + fs:SetJustifyH(justifyH or "CENTER") + fs:SetTextColor(1, 1, 1) + return fs +end + +-- Generator for 3D Portraits +function SFrames:CreatePortrait(parent, name) + local portrait = CreateFrame("PlayerModel", name, parent) + return portrait +end + +-------------------------------------------------------------------------------- +-- Class Icon (circular class portraits from UI-Classes-Circles.tga) +-------------------------------------------------------------------------------- +local CLASS_ICON_PATH = "Interface\\AddOns\\Nanami-UI\\img\\UI-Classes-Circles" + +SFrames.CLASS_ICON_TCOORDS = { + ["WARRIOR"] = { 0, 0.25, 0, 0.25 }, + ["MAGE"] = { 0.25, 0.49609375, 0, 0.25 }, + ["ROGUE"] = { 0.49609375, 0.7421875, 0, 0.25 }, + ["DRUID"] = { 0.7421875, 0.98828125, 0, 0.25 }, + ["HUNTER"] = { 0, 0.25, 0.25, 0.5 }, + ["SHAMAN"] = { 0.25, 0.49609375, 0.25, 0.5 }, + ["PRIEST"] = { 0.49609375, 0.7421875, 0.25, 0.5 }, + ["WARLOCK"] = { 0.7421875, 0.98828125, 0.25, 0.5 }, + ["PALADIN"] = { 0, 0.25, 0.5, 0.75 }, +} + +function SFrames:CreateClassIcon(parent, size) + local sz = size or 20 + local overlay = CreateFrame("Frame", nil, parent) + overlay:SetFrameLevel((parent:GetFrameLevel() or 0) + 3) + overlay:SetWidth(sz) + overlay:SetHeight(sz) + + local icon = overlay:CreateTexture(nil, "OVERLAY") + icon:SetTexture(CLASS_ICON_PATH) + icon:SetAllPoints(overlay) + icon:Hide() + + icon.overlay = overlay + return icon +end + +function SFrames:SetClassIcon(icon, class) + if not icon then return end + local coords = self.CLASS_ICON_TCOORDS[class] + if coords then + icon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]) + icon:Show() + if icon.overlay then icon.overlay:Show() end + else + icon:Hide() + if icon.overlay then icon.overlay:Hide() end + end +end + +-------------------------------------------------------------------------------- +-- UI Icon helpers (icon.tga sprite sheet) +-- SFrames.ICON_PATH and SFrames.ICON_TCOORDS are defined in IconMap.lua +-------------------------------------------------------------------------------- + +local ICON_SET_VALID = { + ["icon"] = true, ["icon2"] = true, ["icon3"] = true, ["icon4"] = true, + ["icon5"] = true, ["icon6"] = true, ["icon7"] = true, ["icon8"] = true, +} + +local function GetIconPath() + local set = SFramesDB and SFramesDB.Theme and SFramesDB.Theme.iconSet + if set and ICON_SET_VALID[set] then + return "Interface\\AddOns\\Nanami-UI\\img\\" .. set + end + return "Interface\\AddOns\\Nanami-UI\\img\\icon" +end + +local ICON_TEX = GetIconPath() + +local ICON_TC_FALLBACK = { + ["logo"] = { 0, 0.125, 0, 0.125 }, + ["save"] = { 0.125, 0.25, 0, 0.125 }, + ["close"] = { 0.25, 0.375, 0, 0.125 }, + ["offline"] = { 0.375, 0.5, 0, 0.125 }, + ["chat"] = { 0, 0.125, 0.125, 0.25 }, + ["settings"] = { 0.125, 0.25, 0.125, 0.25 }, + ["ai"] = { 0.25, 0.375, 0.125, 0.25 }, + ["backpack"] = { 0.375, 0.5, 0.125, 0.25 }, + ["exit"] = { 0, 0.125, 0.25, 0.375 }, + ["party"] = { 0.125, 0.25, 0.25, 0.375 }, + ["loot"] = { 0.25, 0.375, 0.25, 0.375 }, + ["dragon"] = { 0.375, 0.5, 0.25, 0.375 }, + ["casting"] = { 0, 0.125, 0.375, 0.5 }, + ["attack"] = { 0.125, 0.25, 0.375, 0.5 }, + ["damage"] = { 0.25, 0.375, 0.375, 0.5 }, + ["latency"] = { 0.375, 0.5, 0.375, 0.5 }, + ["admin"] = { 0, 0.125, 0.125, 0.25 }, + ["bank"] = { 0.25, 0.375, 0.25, 0.375 }, + ["perf"] = { 0.25, 0.375, 0.375, 0.5 }, +} + +local ICON_TC = SFrames.ICON_TCOORDS or ICON_TC_FALLBACK + +function SFrames:CreateIcon(parent, iconKey, size) + local sz = size or 16 + local tex = parent:CreateTexture(nil, "ARTWORK") + tex:SetTexture(GetIconPath()) + tex:SetWidth(sz) + tex:SetHeight(sz) + + local coords = ICON_TC[iconKey] + if not coords and self.ICON_TCOORDS then + coords = self.ICON_TCOORDS[iconKey] + end + if coords then + tex:SetTexCoord(coords[1], coords[2], coords[3], coords[4]) + end + return tex +end + +function SFrames:SetIcon(tex, iconKey) + if not tex then return end + tex:SetTexture(GetIconPath()) + local coords = ICON_TC[iconKey] + if not coords and self.ICON_TCOORDS then + coords = self.ICON_TCOORDS[iconKey] + end + if coords then + tex:SetTexCoord(coords[1], coords[2], coords[3], coords[4]) + tex:Show() + else + tex:Hide() + end +end + +function SFrames:CreateIconButton(parent, iconKey, iconSize, label, width, height, onClick) + local A = SFrames.ActiveTheme + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(width or 100) + btn:SetHeight(height or 24) + + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + + local bgC = (A and A.panelBg) or { 0.12, 0.06, 0.10, 0.9 } + local bdC = (A and A.sepColor) or { 0.45, 0.25, 0.35, 0.8 } + local hvC = (A and A.buttonHoverBg) or { 0.22, 0.12, 0.18, 0.95 } + local hvB = (A and A.accent) or { 0.70, 0.40, 0.55, 1 } + local dnC = (A and A.buttonDownBg) or { 0.08, 0.04, 0.06, 0.95 } + local txC = (A and A.buttonText) or { 0.90, 0.76, 0.84 } + local txH = (A and A.buttonActiveText) or { 1, 0.92, 0.96 } + + btn:SetBackdropColor(bgC[1], bgC[2], bgC[3], bgC[4] or 0.9) + btn:SetBackdropBorderColor(bdC[1], bdC[2], bdC[3], bdC[4] or 0.8) + + local iSz = iconSize or 14 + local ico = self:CreateIcon(btn, iconKey, iSz) + ico:SetPoint("LEFT", btn, "LEFT", 6, 0) + btn.icon = ico + + if label and label ~= "" then + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(self:GetFont(), 10, self.Media.fontOutline or "OUTLINE") + fs:SetPoint("LEFT", ico, "RIGHT", 4, 0) + fs:SetPoint("RIGHT", btn, "RIGHT", -6, 0) + fs:SetJustifyH("LEFT") + fs:SetTextColor(txC[1], txC[2], txC[3]) + fs:SetText(label) + btn.label = fs + end + + btn:SetScript("OnEnter", function() + this:SetBackdropColor(hvC[1], hvC[2], hvC[3], hvC[4] or 0.95) + this:SetBackdropBorderColor(hvB[1], hvB[2], hvB[3], hvB[4] or 1) + if this.label then this.label:SetTextColor(txH[1], txH[2], txH[3]) end + end) + btn:SetScript("OnLeave", function() + this:SetBackdropColor(bgC[1], bgC[2], bgC[3], bgC[4] or 0.9) + this:SetBackdropBorderColor(bdC[1], bdC[2], bdC[3], bdC[4] or 0.8) + if this.label then this.label:SetTextColor(txC[1], txC[2], txC[3]) end + end) + btn:SetScript("OnMouseDown", function() + this:SetBackdropColor(dnC[1], dnC[2], dnC[3], dnC[4] or 0.95) + end) + btn:SetScript("OnMouseUp", function() + this:SetBackdropColor(hvC[1], hvC[2], hvC[3], hvC[4] or 0.95) + end) + + if onClick then + btn:SetScript("OnClick", onClick) + end + + return btn +end diff --git a/FlightData.lua b/FlightData.lua new file mode 100644 index 0000000..fb8cbe5 --- /dev/null +++ b/FlightData.lua @@ -0,0 +1,1012 @@ +FTCData = { + Alliance = { + ['31353121'] = { + ['39064586'] = 648, + ['39622759'] = 227, + ['41614419'] = 551, + ['42778635'] = 468, + ['46258175'] = 500, + ['48257559'] = 155, + ['55288457'] = 619, + ['60413265'] = 326, + ['61013311'] = 548, + ['63626050'] = 314, + ['64553982'] = 748, + }, + ['39064586'] = { + ['31353121'] = 360, + ['39622759'] = 126, + ['41614419'] = 261, + ['42778635'] = 177, + ['46258175'] = 154, + ['63626050'] = 434, + }, + ['39622759'] = { + ['31353121'] = 232, + ['39064586'] = 120, + ['41614419'] = 367, + ['42778635'] = 282, + ['46258175'] = 273, + ['48257559'] = 472, + ['60413265'] = 464, + ['60571116'] = 422, + ['63626050'] = 308, + }, + ['40741020'] = { + ['43250447'] = 86, + ['43367666'] = 185, + ['49090653'] = 414, + ['50797998'] = 331, + ['50856858'] = 282, + ['51285266'] = 97, + ['55734276'] = 130, + ['58939349'] = 389, + ['61259531'] = 186, + }, + ['41614419'] = { + ['31353121'] = 557, + ['39064586'] = 267, + ['39622759'] = 376, + ['41897988'] = 714, + ['42778635'] = 86, + ['46258175'] = 261, + ['48257559'] = 711, + ['49764585'] = 797, + ['53079825'] = 274, + ['55288457'] = 236, + ['60413265'] = 774, + ['60571116'] = 519, + ['61013311'] = 385, + ['63626050'] = 617, + ['64553982'] = 365, + }, + ['41897988'] = { + ['31353121'] = 175, + ['41614419'] = 726, + ['48257559'] = 329, + ['49764585'] = 92, + ['53079825'] = 831, + ['61013311'] = 576, + ['63626050'] = 342, + }, + ['42778635'] = { + ['31353121'] = 473, + ['39064586'] = 181, + ['39622759'] = 291, + ['41614419'] = 84, + ['46258175'] = 176, + ['53079825'] = 190, + ['55288457'] = 151, + ['60413265'] = 689, + ['60571116'] = 435, + ['61013311'] = 301, + ['63626050'] = 675, + ['64553982'] = 281, + }, + ['43250447'] = { + ['40741020'] = 78, + ['43367666'] = 245, + ['47861999'] = 443, + ['49090653'] = 343, + ['50797998'] = 259, + ['50856858'] = 247, + ['51285266'] = 116, + ['52058124'] = 506, + ['54685318'] = 508, + ['55734276'] = 113, + ['57035875'] = 450, + ['58060050'] = 157, + ['58939349'] = 317, + ['61259531'] = 176, + ['69999539'] = 563, + }, + ['43367666'] = { + ['40741020'] = 181, + ['43250447'] = 220, + ['47861999'] = 649, + ['49090653'] = 548, + ['50797998'] = 464, + ['51285266'] = 175, + ['52058124'] = 712, + ['54685318'] = 714, + ['55734276'] = 230, + ['57035875'] = 655, + ['58060050'] = 291, + ['58939349'] = 523, + ['61259531'] = 266, + }, + ['46258175'] = { + ['31353121'] = 511, + ['39064586'] = 153, + ['39622759'] = 279, + ['41614419'] = 231, + ['42778635'] = 148, + ['53079825'] = 337, + ['60413265'] = 538, + ['60571116'] = 283, + ['61013311'] = 150, + ['63626050'] = 381, + }, + ['47861999'] = { + ['40741020'] = 430, + ['43250447'] = 367, + ['43367666'] = 597, + ['49090653'] = 110, + ['50797998'] = 206, + ['50856858'] = 243, + ['51285266'] = 468, + ['52058124'] = 81, + ['54685318'] = 71, + ['57035875'] = 74, + ['58939349'] = 244, + ['69999539'] = 219, + }, + ['48257559'] = { + ['31353121'] = 179, + ['39622759'] = 405, + ['41614419'] = 729, + ['49764585'] = 274, + ['60413265'] = 171, + ['60571116'] = 274, + ['63626050'] = 159, + }, + ['49090653'] = { + ['40741020'] = 324, + ['43250447'] = 261, + ['43367666'] = 490, + ['47861999'] = 107, + ['50797998'] = 89, + ['50856858'] = 135, + ['51285266'] = 309, + ['52058124'] = 186, + ['54685318'] = 176, + ['55734276'] = 250, + ['57035875'] = 113, + ['58060050'] = 221, + ['58939349'] = 163, + ['61259531'] = 423, + ['69999539'] = 324, + }, + ['49764585'] = { + ['31353121'] = 258, + ['41614419'] = 809, + ['41897988'] = 94, + ['46258175'] = 856, + ['53079825'] = 774, + ['60413265'] = 104, + ['60571116'] = 364, + ['63626050'] = 257, + ['64553982'] = 670, + }, + ['50797998'] = { + ['40741020'] = 274, + ['43250447'] = 210, + ['43367666'] = 440, + ['47861999'] = 265, + ['49090653'] = 128, + ['50856858'] = 87, + ['51285266'] = 260, + ['52058124'] = 294, + ['54685318'] = 298, + ['55734276'] = 201, + ['57035875'] = 253, + ['58060050'] = 173, + ['58939349'] = 101, + ['61259531'] = 373, + ['69999539'] = 349, + }, + ['50856858'] = { + ['47861999'] = 280, + ['49090653'] = 178, + ['50797998'] = 94, + ['52058124'] = 342, + ['58060050'] = 96, + ['58939349'] = 152, + ['61259531'] = 265, + ['69999539'] = 398, + }, + ['51285266'] = { + ['40741020'] = 93, + ['43250447'] = 88, + ['43367666'] = 171, + ['47861999'] = 517, + ['49090653'] = 417, + ['50797998'] = 333, + ['50856858'] = 212, + ['54685318'] = 582, + ['55734276'] = 60, + ['57035875'] = 524, + ['58939349'] = 391, + ['61259531'] = 97, + }, + ['52058124'] = { + ['40741020'] = 495, + ['43250447'] = 432, + ['43367666'] = 662, + ['47861999'] = 85, + ['49090653'] = 193, + ['50797998'] = 261, + ['50856858'] = 309, + ['51285266'] = 535, + ['54685318'] = 66, + ['57035875'] = 138, + ['58060050'] = 395, + ['69999539'] = 147, + }, + ['53079825'] = { + ['31353121'] = 660, + ['39064586'] = 370, + ['39622759'] = 478, + ['41614419'] = 272, + ['42778635'] = 188, + ['46258175'] = 363, + ['49764585'] = 776, + ['55288457'] = 68, + ['60413265'] = 671, + ['61013311'] = 282, + ['64553982'] = 121, + }, + ['54685318'] = { + ['40741020'] = 492, + ['43250447'] = 429, + ['43367666'] = 658, + ['47861999'] = 68, + ['49090653'] = 176, + ['50797998'] = 256, + ['51285266'] = 531, + ['52058124'] = 54, + ['57035875'] = 75, + ['58939349'] = 245, + ['61259531'] = 591, + ['69999539'] = 164, + }, + ['55288457'] = { + ['31353121'] = 614, + ['39622759'] = 433, + ['41614419'] = 226, + ['41897988'] = 771, + ['42778635'] = 142, + ['46258175'] = 318, + ['53079825'] = 61, + ['60413265'] = 694, + ['61013311'] = 305, + ['63626050'] = 537, + ['64553982'] = 131, + }, + ['55734276'] = { + ['40741020'] = 133, + ['43250447'] = 113, + ['43367666'] = 227, + ['47861999'] = 422, + ['49090653'] = 441, + ['50797998'] = 357, + ['50856858'] = 153, + ['51285266'] = 60, + ['58060050'] = 61, + ['58939349'] = 415, + ['69999539'] = 540, + }, + ['57035875'] = { + ['43250447'] = 385, + ['43367666'] = 614, + ['47861999'] = 86, + ['49090653'] = 126, + ['50797998'] = 271, + ['51285266'] = 485, + ['52058124'] = 122, + ['54685318'] = 72, + ['58939349'] = 171, + ['61259531'] = 547, + ['69999539'] = 233, + }, + ['58060050'] = { + ['40741020'] = 195, + ['43250447'] = 151, + ['43367666'] = 288, + ['49090653'] = 270, + ['50797998'] = 187, + ['50856858'] = 104, + ['51285266'] = 121, + ['52058124'] = 435, + ['54685318'] = 436, + ['55734276'] = 64, + ['57035875'] = 378, + ['58939349'] = 245, + ['61259531'] = 210, + ['69999539'] = 491, + }, + ['58939349'] = { + ['40741020'] = 342, + ['43250447'] = 279, + ['43367666'] = 508, + ['47861999'] = 250, + ['49090653'] = 153, + ['50797998'] = 109, + ['50856858'] = 152, + ['51285266'] = 326, + ['52058124'] = 285, + ['55734276'] = 267, + ['57035875'] = 164, + ['58060050'] = 239, + ['61259531'] = 441, + }, + ['60413265'] = { + ['31353121'] = 354, + ['39064586'] = 692, + ['39622759'] = 480, + ['41614419'] = 772, + ['41897988'] = 197, + ['46258175'] = 540, + ['48257559'] = 177, + ['49764585'] = 104, + ['53079825'] = 670, + ['60571116'] = 262, + ['61013311'] = 388, + ['63626050'] = 154, + ['64553982'] = 566, + }, + ['60571116'] = { + ['31353121'] = 446, + ['39064586'] = 437, + ['39622759'] = 439, + ['41614419'] = 805, + ['41897988'] = 459, + ['46258175'] = 284, + ['48257559'] = 268, + ['49764585'] = 366, + ['53079825'] = 415, + ['60413265'] = 261, + ['61013311'] = 132, + ['63626050'] = 106, + ['64553982'] = 310, + }, + ['61013311'] = { + ['41897988'] = 588, + ['42778635'] = 301, + ['46258175'] = 153, + ['49764585'] = 494, + ['53079825'] = 283, + ['60413265'] = 391, + ['60571116'] = 135, + ['63626050'] = 241, + ['64553982'] = 178, + }, + ['61259531'] = { + ['43250447'] = 189, + ['43367666'] = 260, + ['49090653'] = 467, + ['50797998'] = 382, + ['50856858'] = 300, + ['51285266'] = 91, + ['52058124'] = 631, + ['55734276'] = 150, + ['58060050'] = 207, + ['58939349'] = 483, + ['69999539'] = 687, + }, + ['63626050'] = { + ['31353121'] = 341, + ['39064586'] = 801, + ['39622759'] = 334, + ['41614419'] = 619, + ['41897988'] = 354, + ['42778635'] = 620, + ['46258175'] = 387, + ['48257559'] = 162, + ['49764585'] = 261, + ['53079825'] = 518, + ['55288457'] = 535, + ['60413265'] = 157, + ['60571116'] = 115, + ['61013311'] = 235, + ['64553982'] = 414, + }, + ['64553982'] = { + ['31353121'] = 734, + ['39064586'] = 444, + ['39622759'] = 553, + ['41614419'] = 346, + ['42778635'] = 262, + ['46258175'] = 327, + ['48257559'] = 572, + ['53079825'] = 122, + ['55288457'] = 122, + ['60413265'] = 564, + ['60571116'] = 309, + ['61013311'] = 176, + ['63626050'] = 408, + }, + ['69999539'] = { + ['43250447'] = 542, + ['47861999'] = 226, + ['49090653'] = 333, + ['50797998'] = 369, + ['50856858'] = 417, + ['51285266'] = 591, + ['52058124'] = 150, + ['54685318'] = 163, + ['58060050'] = 503, + ['61259531'] = 704, + }, + }, + Horde = { + ['31660270'] = { + ['40795725'] = 199, + ['40973830'] = 566, + ['41632127'] = 326, + ['44250988'] = 196, + ['44947779'] = 178, + ['46455299'] = 590, + ['49764585'] = 417, + ['52804720'] = 265, + ['53793668'] = 709, + ['54988908'] = 382, + ['55441868'] = 474, + ['55735743'] = 337, + ['56746834'] = 416, + ['60571116'] = 388, + ['60601317'] = 395, + ['62800776'] = 385, + ['63107562'] = 447, + ['64014458'] = 576, + }, + ['38447540'] = { + ['43159055'] = 863, + ['44267696'] = 112, + ['44825941'] = 782, + ['49442172'] = 95, + ['50543880'] = 526, + ['55498695'] = 471, + ['55533051'] = 556, + ['60541588'] = 751, + ['61540073'] = 212, + ['67153739'] = 289, + ['69752216'] = 299, + }, + ['40795725'] = { + ['31660270'] = 143, + ['40973830'] = 380, + ['41632127'] = 469, + ['44250988'] = 339, + ['44947779'] = 175, + ['46455299'] = 403, + ['52804720'] = 240, + ['54988908'] = 333, + ['55441868'] = 311, + ['55735743'] = 150, + ['56746834'] = 312, + ['60571116'] = 200, + ['60601317'] = 426, + ['62800776'] = 290, + ['63107562'] = 318, + ['64014458'] = 447, + }, + ['40973830'] = { + ['40795725'] = 378, + ['44947779'] = 410, + ['46455299'] = 481, + ['49764585'] = 611, + ['52804720'] = 318, + ['54988908'] = 412, + ['55441868'] = 167, + ['55735743'] = 228, + ['56746834'] = 391, + ['60571116'] = 279, + ['60601317'] = 504, + ['62800776'] = 256, + ['63107562'] = 256, + ['64014458'] = 384, + }, + ['41632127'] = { + ['31660270'] = 330, + ['44250988'] = 129, + ['44947779'] = 389, + ['49764585'] = 97, + ['52804720'] = 373, + ['53793668'] = 768, + ['54988908'] = 236, + ['55735743'] = 394, + ['56746834'] = 425, + ['60571116'] = 445, + ['60601317'] = 241, + ['62800776'] = 535, + ['63107562'] = 562, + }, + ['43159055'] = { + ['38447540'] = 882, + ['44267696'] = 903, + ['44825941'] = 102, + ['49442172'] = 783, + ['50543880'] = 462, + ['55498695'] = 406, + ['55533051'] = 464, + ['60541588'] = 267, + ['61540073'] = 668, + ['67153739'] = 757, + ['69752216'] = 896, + }, + ['44250988'] = { + ['31660270'] = 201, + ['40795725'] = 400, + ['40973830'] = 494, + ['41632127'] = 130, + ['44947779'] = 259, + ['46455299'] = 517, + ['49764585'] = 222, + ['52804720'] = 244, + ['54988908'] = 107, + ['55441868'] = 426, + ['55735743'] = 263, + ['56746834'] = 421, + ['60571116'] = 315, + ['60601317'] = 201, + ['62800776'] = 406, + ['63107562'] = 432, + }, + ['44267696'] = { + ['38447540'] = 106, + ['43159055'] = 880, + ['44825941'] = 800, + ['49442172'] = 141, + ['50543880'] = 543, + ['55498695'] = 488, + ['55533051'] = 573, + ['60541588'] = 768, + ['61540073'] = 301, + ['67153739'] = 284, + ['69752216'] = 261, + }, + ['44825941'] = { + ['38447540'] = 802, + ['43159055'] = 81, + ['44267696'] = 823, + ['49442172'] = 704, + ['50543880'] = 382, + ['55498695'] = 327, + ['55533051'] = 402, + ['60541588'] = 205, + ['61540073'] = 588, + ['67153739'] = 677, + ['69752216'] = 816, + }, + ['44947779'] = { + ['31660270'] = 159, + ['40795725'] = 182, + ['40973830'] = 389, + ['41632127'] = 381, + ['44250988'] = 252, + ['46455299'] = 411, + ['49764585'] = 397, + ['52804720'] = 87, + ['53793668'] = 532, + ['54988908'] = 204, + ['55441868'] = 296, + ['55735743'] = 159, + ['56746834'] = 239, + ['60571116'] = 210, + ['60601317'] = 290, + ['62800776'] = 207, + ['63107562'] = 269, + ['64014458'] = 398, + }, + ['46455299'] = { + ['31660270'] = 533, + ['40795725'] = 390, + ['40973830'] = 471, + ['41632127'] = 623, + ['44250988'] = 493, + ['44947779'] = 423, + ['49764585'] = 625, + ['52804720'] = 331, + ['53793668'] = 166, + ['55441868'] = 333, + ['55735743'] = 241, + ['56746834'] = 404, + ['60571116'] = 292, + ['60601317'] = 518, + ['62800776'] = 259, + ['63107562'] = 241, + ['64014458'] = 190, + }, + ['49442172'] = { + ['38447540'] = 99, + ['43159055'] = 768, + ['44267696'] = 139, + ['44825941'] = 688, + ['50543880'] = 431, + ['55498695'] = 376, + ['55533051'] = 462, + ['60541588'] = 656, + ['61540073'] = 118, + ['67153739'] = 195, + ['69752216'] = 329, + }, + ['49764585'] = { + ['31660270'] = 424, + ['40795725'] = 542, + ['41632127'] = 100, + ['44250988'] = 224, + ['44947779'] = 416, + ['46455299'] = 645, + ['52804720'] = 336, + ['53793668'] = 766, + ['54988908'] = 200, + ['55441868'] = 551, + ['55735743'] = 392, + ['56746834'] = 333, + ['60571116'] = 443, + ['60601317'] = 113, + ['62800776'] = 462, + ['63107562'] = 559, + ['64014458'] = 689, + }, + ['50543880'] = { + ['38447540'] = 545, + ['43159055'] = 462, + ['44267696'] = 566, + ['44825941'] = 382, + ['49442172'] = 447, + ['55498695'] = 70, + ['55533051'] = 77, + ['60541588'] = 350, + ['61540073'] = 331, + ['67153739'] = 420, + ['69752216'] = 559, + }, + ['52804720'] = { + ['31660270'] = 273, + ['40795725'] = 229, + ['41632127'] = 378, + ['44250988'] = 248, + ['44947779'] = 114, + ['49764585'] = 325, + ['54988908'] = 125, + ['55441868'] = 242, + ['55735743'] = 79, + ['56746834'] = 242, + ['60571116'] = 130, + ['60601317'] = 218, + ['62800776'] = 221, + }, + ['53793668'] = { + ['31660270'] = 645, + ['40795725'] = 502, + ['40973830'] = 528, + ['41632127'] = 734, + ['44250988'] = 604, + ['44947779'] = 532, + ['46455299'] = 157, + ['49764585'] = 736, + ['52804720'] = 443, + ['54988908'] = 537, + ['55441868'] = 369, + ['55735743'] = 353, + ['56746834'] = 515, + ['60571116'] = 404, + ['60601317'] = 629, + ['62800776'] = 370, + ['63107562'] = 275, + ['64014458'] = 142, + }, + ['54988908'] = { + ['31660270'] = 323, + ['40795725'] = 343, + ['40973830'] = 424, + ['41632127'] = 252, + ['44250988'] = 124, + ['44947779'] = 225, + ['49764585'] = 200, + ['52804720'] = 137, + ['55441868'] = 356, + ['55735743'] = 194, + ['56746834'] = 315, + ['60571116'] = 245, + ['60601317'] = 93, + ['62800776'] = 335, + ['63107562'] = 362, + }, + ['55441868'] = { + ['31660270'] = 453, + ['40795725'] = 310, + ['40973830'] = 166, + ['41632127'] = 541, + ['44250988'] = 412, + ['44947779'] = 321, + ['46455299'] = 327, + ['49764585'] = 544, + ['52804720'] = 250, + ['53793668'] = 356, + ['54988908'] = 345, + ['55735743'] = 160, + ['56746834'] = 323, + ['60571116'] = 212, + ['60601317'] = 436, + ['62800776'] = 96, + ['63107562'] = 96, + ['64014458'] = 224, + }, + ['55498695'] = { + ['38447540'] = 477, + ['43159055'] = 417, + ['44267696'] = 497, + ['44825941'] = 313, + ['49442172'] = 379, + ['50543880'] = 56, + ['55533051'] = 87, + ['60541588'] = 280, + ['61540073'] = 263, + ['67153739'] = 352, + ['69752216'] = 491, + }, + ['55533051'] = { + ['38447540'] = 576, + ['43159055'] = 472, + ['44267696'] = 597, + ['44825941'] = 401, + ['49442172'] = 477, + ['50543880'] = 72, + ['55498695'] = 99, + ['60541588'] = 213, + ['61540073'] = 361, + ['67153739'] = 451, + ['69752216'] = 589, + }, + ['55735743'] = { + ['31660270'] = 292, + ['40795725'] = 150, + ['40973830'] = 231, + ['41632127'] = 382, + ['44250988'] = 252, + ['44947779'] = 182, + ['46455299'] = 253, + ['49764585'] = 384, + ['52804720'] = 90, + ['54988908'] = 184, + ['55441868'] = 162, + ['56746834'] = 162, + ['60571116'] = 52, + ['60601317'] = 303, + ['62800776'] = 142, + ['63107562'] = 168, + ['64014458'] = 297, + }, + ['56746834'] = { + ['31660270'] = 383, + ['40795725'] = 311, + ['41632127'] = 430, + ['44250988'] = 414, + ['44947779'] = 224, + ['46455299'] = 415, + ['49764585'] = 329, + ['52804720'] = 252, + ['54988908'] = 309, + ['55441868'] = 306, + ['55735743'] = 162, + ['60571116'] = 214, + ['60601317'] = 222, + ['62800776'] = 217, + ['63107562'] = 316, + ['64014458'] = 445, + }, + ['60541588'] = { + ['38447540'] = 761, + ['43159055'] = 260, + ['44267696'] = 782, + ['44825941'] = 189, + ['49442172'] = 663, + ['50543880'] = 267, + ['55498695'] = 285, + ['55533051'] = 197, + ['61540073'] = 547, + ['67153739'] = 636, + ['69752216'] = 774, + }, + ['60571116'] = { + ['31660270'] = 360, + ['40795725'] = 218, + ['40973830'] = 299, + ['41632127'] = 450, + ['44250988'] = 320, + ['44947779'] = 250, + ['49764585'] = 452, + ['52804720'] = 158, + ['54988908'] = 252, + ['55441868'] = 231, + ['55735743'] = 69, + ['56746834'] = 231, + ['60601317'] = 345, + ['62800776'] = 210, + ['63107562'] = 236, + ['64014458'] = 366, + }, + ['60601317'] = { + ['31660270'] = 400, + ['40795725'] = 429, + ['40973830'] = 510, + ['41632127'] = 233, + ['44250988'] = 200, + ['44947779'] = 304, + ['46455299'] = 532, + ['49764585'] = 108, + ['52804720'] = 223, + ['53793668'] = 653, + ['54988908'] = 87, + ['55441868'] = 439, + ['55735743'] = 301, + ['56746834'] = 222, + ['60571116'] = 331, + ['62800776'] = 350, + ['63107562'] = 448, + ['64014458'] = 577, + }, + ['61540073'] = { + ['38447540'] = 215, + ['43159055'] = 651, + ['44267696'] = 259, + ['44825941'] = 571, + ['49442172'] = 117, + ['50543880'] = 314, + ['55498695'] = 259, + ['55533051'] = 344, + ['60541588'] = 539, + ['67153739'] = 91, + ['69752216'] = 229, + }, + ['62800776'] = { + ['31660270'] = 385, + ['40795725'] = 260, + ['40973830'] = 250, + ['41632127'] = 492, + ['44250988'] = 361, + ['44947779'] = 224, + ['46455299'] = 252, + ['49764585'] = 494, + ['52804720'] = 200, + ['53793668'] = 361, + ['54988908'] = 294, + ['55441868'] = 89, + ['55735743'] = 110, + ['56746834'] = 229, + ['60571116'] = 161, + ['60601317'] = 417, + ['63107562'] = 99, + ['64014458'] = 319, + }, + ['63107562'] = { + ['31660270'] = 416, + ['40795725'] = 322, + ['40973830'] = 253, + ['41632127'] = 553, + ['44250988'] = 423, + ['44947779'] = 257, + ['46455299'] = 232, + ['49764585'] = 556, + ['52804720'] = 263, + ['53793668'] = 264, + ['54988908'] = 357, + ['55441868'] = 94, + ['55735743'] = 172, + ['56746834'] = 335, + ['60571116'] = 223, + ['62800776'] = 121, + ['64014458'] = 131, + }, + ['64014458'] = { + ['31660270'] = 550, + ['40795725'] = 456, + ['40973830'] = 388, + ['41632127'] = 688, + ['44250988'] = 558, + ['44947779'] = 392, + ['46455299'] = 195, + ['49764585'] = 691, + ['52804720'] = 397, + ['53793668'] = 134, + ['55441868'] = 228, + ['55735743'] = 307, + ['56746834'] = 470, + ['60571116'] = 357, + ['60601317'] = 584, + ['62800776'] = 304, + ['63107562'] = 135, + }, + ['67153739'] = { + ['38447540'] = 257, + ['43159055'] = 743, + ['44267696'] = 284, + ['44825941'] = 663, + ['49442172'] = 159, + ['50543880'] = 407, + ['55498695'] = 351, + ['55533051'] = 437, + ['60541588'] = 631, + ['61540073'] = 93, + ['69752216'] = 139, + }, + ['69752216'] = { + ['38447540'] = 294, + ['43159055'] = 884, + ['44267696'] = 262, + ['44825941'] = 804, + ['49442172'] = 301, + ['50543880'] = 547, + ['55498695'] = 492, + ['55533051'] = 578, + ['60541588'] = 773, + ['61540073'] = 234, + ['67153739'] = 141, + }, + }, +} + +-- Turtle WoW self-learned flight times (name-based, cross-account) +-- Synced from SavedVariables; shared across all accounts via addon file +-- Last sync: 2026-03-09 +NanamiLearnedFlights = { + -- 铁炉堡 / 铁炉堡机场 区域 + ["铁炉堡机场, 丹莫罗->米奈希尔港,湿地"] = 46, + ["米奈希尔港,湿地->铁炉堡机场, 丹莫罗"] = 43, + ["铁炉堡机场, 丹莫罗->丹阿格拉斯, 湿地"] = 25, + ["丹阿格拉斯, 湿地->铁炉堡机场, 丹莫罗"] = 29, + ["铁炉堡机场, 丹莫罗->铁炉堡,丹莫罗"] = 80, + ["铁炉堡,丹莫罗->铁炉堡机场, 丹莫罗"] = 80, + ["铁炉堡机场, 丹莫罗->南海镇,希尔斯布莱德"] = 138, + ["铁炉堡机场, 丹莫罗->暴风城,艾尔文森林"] = 237, + ["铁炉堡机场, 丹莫罗->哨兵岭,西部荒野"] = 297, + ["铁炉堡机场, 丹莫罗->丹基塔斯,冷酷海岸"] = 193, + ["铁炉堡机场, 丹莫罗->塞尔萨玛,洛克莫丹"] = 86, + ["铁炉堡机场, 丹莫罗->阿尔萨拉斯"] = 479, + ["铁炉堡,丹莫罗->丹阿格拉斯, 湿地"] = 107, + ["铁炉堡,丹莫罗->暴风城,艾尔文森林"] = 198, + ["铁炉堡,丹莫罗->丹基塔斯,冷酷海岸"] = 202, + -- 暴风城 区域 + ["暴风城,艾尔文森林->铁炉堡机场, 丹莫罗"] = 286, + ["暴风城,艾尔文森林->铁炉堡,丹莫罗"] = 244, + ["暴风城,艾尔文森林->藏宝海湾,荆棘谷"] = 230, + ["暴风城,艾尔文森林->摩根的岗哨,燃烧平原"] = 148, + ["暴风城,艾尔文森林->丹阿格拉斯, 湿地"] = 309, + ["暴风城,艾尔文森林->丹基塔斯,冷酷海岸"] = 406, + -- 丹阿格拉斯 区域 + ["丹阿格拉斯, 湿地->米奈希尔港,湿地"] = 20, + ["丹阿格拉斯, 湿地->铁炉堡,丹莫罗"] = 110, + ["丹阿格拉斯, 湿地->藏宝海湾,荆棘谷"] = 484, + ["丹阿格拉斯, 湿地->卡兰之墓,拉匹迪斯之岛"] = 605, + ["丹阿格拉斯, 湿地->塞尔萨玛,洛克莫丹"] = 150, + ["丹阿格拉斯, 湿地->暴风城,艾尔文森林"] = 266, + -- 米奈希尔港 区域 + ["米奈希尔港,湿地->丹阿格拉斯, 湿地"] = 28, + -- 南海镇 区域 + ["南海镇,希尔斯布莱德->丹阿格拉斯, 湿地"] = 129, + -- 摩根的岗哨 / 瑟银哨塔 区域 + ["摩根的岗哨,燃烧平原->瑟银哨塔,灼热峡谷"] = 97, + ["瑟银哨塔,灼热峡谷->摩根的岗哨,燃烧平原"] = 90, + ["瑟银哨塔,灼热峡谷->藏宝海湾,荆棘谷"] = 329, + -- 藏宝海湾 区域 + ["藏宝海湾,荆棘谷->铁炉堡机场, 丹莫罗"] = 460, + ["藏宝海湾,荆棘谷->卡兰之墓,拉匹迪斯之岛"] = 121, + ["藏宝海湾,荆棘谷->丹阿格拉斯, 湿地"] = 483, + ["卡兰之墓,拉匹迪斯之岛->藏宝海湾,荆棘谷"] = 121, + -- 加基森 / 塞拉摩 区域 + ["加基森,塔纳利斯->塞拉摩,尘泥沼泽"] = 144, + ["塞拉摩,尘泥沼泽->加基森,塔纳利斯"] = 147, + -- 安伯郡 / 哨兵岭 区域 + ["安伯郡,北风领->暴风城,艾尔文森林"] = 107, + ["哨兵岭,西部荒野->丹阿格拉斯, 湿地"] = 377, + ["哨兵岭,西部荒野->铁炉堡机场, 丹莫罗"] = 354, + -- 丹基塔斯 (Turtle WoW 冷酷海岸) + ["丹基塔斯,冷酷海岸->铁炉堡,丹莫罗"] = 210, + ["丹基塔斯,冷酷海岸->铁炉堡机场, 丹莫罗"] = 204, + ["丹基塔斯,冷酷海岸->暴风城,艾尔文森林"] = 371, + ["丹基塔斯,冷酷海岸->哨兵岭,西部荒野"] = 431, + ["丹基塔斯,冷酷海岸->塞尔萨玛,洛克莫丹"] = 107, + -- 塞尔萨玛 区域 + ["塞尔萨玛,洛克莫丹->铁炉堡机场, 丹莫罗"] = 96, + -- 阿尔萨拉斯 / 圣光之愿 / 鹰巢山 区域 + ["阿尔萨拉斯->鹰巢山,辛特兰"] = 276, + ["阿尔萨拉斯->圣光之愿礼拜堂,东瘟疫之地"] = 125, + ["圣光之愿礼拜堂,东瘟疫之地->阿尔萨拉斯"] = 124, + ["鹰巢山,辛特兰->丹阿格拉斯, 湿地"] = 190, + -- 月光林地 / 石爪峰 区域 + ["月光林地->石爪峰,石爪山"] = 304, + ["石爪峰,石爪山->塔伦迪斯营地,艾萨拉"] = 285, +} \ No newline at end of file diff --git a/FlightMap.lua b/FlightMap.lua new file mode 100644 index 0000000..efb9b28 --- /dev/null +++ b/FlightMap.lua @@ -0,0 +1,1282 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Flight Map (FlightMap.lua) +-- Skins TaxiFrame with Nanami-UI theme, destination list, in-flight timer +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.FlightMap = {} +local FM = SFrames.FlightMap +SFramesDB = SFramesDB or {} +SFramesGlobalDB = SFramesGlobalDB or {} + +-------------------------------------------------------------------------------- +-- Theme (Pink Cat-Paw) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + currentText = { 0.40, 1.0, 0.40 }, + moneyGold = { 1, 0.84, 0.0 }, + moneySilver = { 0.78, 0.78, 0.78 }, + moneyCopper = { 0.71, 0.43, 0.18 }, + arrivedText = { 0.40, 1.0, 0.40 }, +}) + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local DEST_PANEL_W = 220 +local DEST_ROW_H = 22 +local HEADER_H = 34 +local SIDE_PAD = 10 +local MAX_DEST_ROWS = 30 + +local BAR_W = 160 +local TRACK_H = 170 +local TRACK_X = 20 + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local skinApplied = false +local DestPanel = nil +local DestRows = {} +local FlightBar = nil + +local flightState = { + pendingFlight = false, + inFlight = false, + source = "", + dest = "", + startTime = 0, + estimated = 0, + lingerTime = 0, +} + +FM.currentSource = "" + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function FormatMoney(copper) + if not copper or copper <= 0 then return 0, 0, 0 end + local g = math.floor(copper / 10000) + local s = math.floor(math.mod(copper, 10000) / 100) + local c = math.mod(copper, 100) + return g, s, c +end + +local function FormatTime(seconds) + if not seconds or seconds < 0 then seconds = 0 end + local m = math.floor(seconds / 60) + local s = math.floor(math.mod(seconds, 60)) + return string.format("%d:%02d", m, s) +end + +local function StripTextures(frame) + if not frame or not frame.GetRegions then return end + local regions = { frame:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.SetTexture and not region._nanamiKeep then + local drawLayer = region.GetDrawLayer and region:GetDrawLayer() + if drawLayer == "BACKGROUND" or drawLayer == "BORDER" or drawLayer == "ARTWORK" then + region:SetTexture(nil) + region:SetAlpha(0) + region:Hide() + end + end + end +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +-------------------------------------------------------------------------------- +-- Flight Time Database (self-learning, stored in SFramesGlobalDB) +-------------------------------------------------------------------------------- +local function GetFlightDB() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.flightTimes then SFramesGlobalDB.flightTimes = {} end + return SFramesGlobalDB.flightTimes +end + +local function GetRouteKey(src, dst) + return (src or "") .. "->" .. (dst or "") +end + +local function GetTaxiNodeHash(nodeIndex) + local x, y = TaxiNodePosition(nodeIndex) + if not x then return nil end + return tostring(math.floor(x * 100000000)) +end + +local function GetPlayerFaction() + local faction = UnitFactionGroup("player") + if faction == "Alliance" then return "Alliance" end + return "Horde" +end + +-- Hash-based index built when taxi map opens: hash -> nodeIndex +local hashToIndex = {} +local indexToHash = {} +local hashCorrection = {} -- actualHash -> ftcHash (fuzzy match) + +local function BuildHashIndex() + hashToIndex = {} + indexToHash = {} + hashCorrection = {} + local numNodes = NumTaxiNodes() + local faction = GetPlayerFaction() + local factionData = FTCData and FTCData[faction] + + -- Collect all hashes used in FTCData for fuzzy matching + local ftcHashes = {} + if factionData then + for srcH, routes in pairs(factionData) do + ftcHashes[srcH] = true + for dstH in pairs(routes) do + ftcHashes[dstH] = true + end + end + end + + for i = 1, numNodes do + local h = GetTaxiNodeHash(i) + if h then + hashToIndex[h] = i + indexToHash[i] = h + if ftcHashes[h] then + hashCorrection[h] = h + else + -- Turtle WoW coords may differ slightly from Classic; try ±10 + local hNum = tonumber(h) + if hNum then + for delta = -10, 10 do + local candidate = tostring(hNum + delta) + if ftcHashes[candidate] then + hashCorrection[h] = candidate + break + end + end + end + end + end + end +end + +local function LookupFTCData(srcHash, dstHash) + if not srcHash or not dstHash then return nil end + local faction = GetPlayerFaction() + -- Priority 1: self-learned hash DB (exact hash, no correction needed) + local hdb = SFramesGlobalDB and SFramesGlobalDB.flightTimesHash + if hdb and hdb[faction] then + local lr = hdb[faction][srcHash] + if lr and lr[dstHash] then return lr[dstHash] end + end + -- Priority 2: FTCData pre-recorded (with fuzzy hash correction) + if not FTCData then return nil end + local factionData = FTCData[faction] + if not factionData then return nil end + local corrSrc = hashCorrection[srcHash] or srcHash + local corrDst = hashCorrection[dstHash] or dstHash + local srcRoutes = factionData[corrSrc] + if not srcRoutes then return nil end + return srcRoutes[corrDst] +end + +local function GetEstimatedTime(src, dst) + local routeKey = GetRouteKey(src, dst) + -- Priority 1: per-account learned database (SavedVariables) + local db = GetFlightDB() + local learned = db[routeKey] + if learned then return learned end + + -- Priority 2: shared learned database (FlightData.lua, cross-account) + if NanamiLearnedFlights and NanamiLearnedFlights[routeKey] then + return NanamiLearnedFlights[routeKey] + end + + -- Priority 3: FTCData pre-recorded database (by hash) + if FM.currentSourceHash and dst then + local numNodes = NumTaxiNodes() + for i = 1, numNodes do + if TaxiNodeName(i) == dst then + local dstHash = indexToHash[i] or GetTaxiNodeHash(i) + if dstHash then + local ftcTime = LookupFTCData(FM.currentSourceHash, dstHash) + if ftcTime then return ftcTime end + end + break + end + end + end + + return nil +end + +local function GetEstimatedTimeByHash(srcHash, dstHash) + -- Check learned DB by resolving hash to names + local srcIdx = hashToIndex[srcHash] + local dstIdx = hashToIndex[dstHash] + if srcIdx and dstIdx then + local db = GetFlightDB() + local learned = db[GetRouteKey(TaxiNodeName(srcIdx), TaxiNodeName(dstIdx))] + if learned then return learned end + end + return LookupFTCData(srcHash, dstHash) +end + +local function GetFlightHashDB() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.flightTimesHash then SFramesGlobalDB.flightTimesHash = {} end + return SFramesGlobalDB.flightTimesHash +end + +local function SaveFlightTime(src, dst, duration, srcHash, dstHash) + if not src or src == "" or not dst or dst == "" then return end + if duration < 5 then return end + local secs = math.floor(duration + 0.5) + local db = GetFlightDB() + db[GetRouteKey(src, dst)] = secs + -- Also save in hash format for cross-account export + if srcHash and dstHash then + local faction = GetPlayerFaction() + local hdb = GetFlightHashDB() + if not hdb[faction] then hdb[faction] = {} end + if not hdb[faction][srcHash] then hdb[faction][srcHash] = {} end + hdb[faction][srcHash][dstHash] = secs + end +end + +-------------------------------------------------------------------------------- +-- Money Layout (icon-based, like Merchant.lua) +-------------------------------------------------------------------------------- +local function LayoutRowMoney(row, copper) + row.gTxt:Hide(); row.gTex:Hide() + row.sTxt:Hide(); row.sTex:Hide() + row.cTxt:Hide(); row.cTex:Hide() + + if not copper or copper <= 0 then + row.gTxt:SetText("--") + row.gTxt:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + row.gTxt:ClearAllPoints() + row.gTxt:SetPoint("RIGHT", row, "RIGHT", -6, 0) + row.gTxt:Show() + return + end + + local vG, vS, vC = FormatMoney(copper) + local anchor = nil + + local function AttachPair(txt, tex, val, cr, cg, cb) + txt:SetText(val) + txt:SetTextColor(cr, cg, cb) + txt:ClearAllPoints() + if not anchor then + txt:SetPoint("RIGHT", row, "RIGHT", -6, 0) + else + txt:SetPoint("RIGHT", anchor, "LEFT", -3, 0) + end + txt:Show() + tex:ClearAllPoints() + tex:SetPoint("RIGHT", txt, "LEFT", -1, 0) + tex:Show() + anchor = tex + end + + if vC > 0 then AttachPair(row.cTxt, row.cTex, vC, T.moneyCopper[1], T.moneyCopper[2], T.moneyCopper[3]) end + if vS > 0 then AttachPair(row.sTxt, row.sTex, vS, T.moneySilver[1], T.moneySilver[2], T.moneySilver[3]) end + if vG > 0 then AttachPair(row.gTxt, row.gTex, vG, T.moneyGold[1], T.moneyGold[2], T.moneyGold[3]) end +end + +-------------------------------------------------------------------------------- +-- Destination Row Factory +-------------------------------------------------------------------------------- +local function CreateDestRow(parent, index) + local row = CreateFrame("Button", "NanamiFlightDest" .. index, parent) + row:SetHeight(DEST_ROW_H) + + local font = GetFont() + + local dot = row:CreateTexture(nil, "ARTWORK") + dot:SetTexture("Interface\\Buttons\\WHITE8X8") + dot:SetWidth(6) + dot:SetHeight(6) + dot:SetPoint("LEFT", row, "LEFT", 6, 0) + row.dot = dot + + local nameFS = row:CreateFontString(nil, "OVERLAY") + nameFS:SetFont(font, 10, "OUTLINE") + nameFS:SetPoint("LEFT", dot, "RIGHT", 5, 0) + nameFS:SetPoint("RIGHT", row, "RIGHT", -112, 0) + nameFS:SetJustifyH("LEFT") + row.nameFS = nameFS + + local timeFS = row:CreateFontString(nil, "OVERLAY") + timeFS:SetFont(font, 9, "OUTLINE") + timeFS:SetPoint("RIGHT", row, "RIGHT", -78, 0) + timeFS:SetJustifyH("RIGHT") + timeFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + row.timeFS = timeFS + + row.gTxt = row:CreateFontString(nil, "OVERLAY") + row.gTxt:SetFont(font, 9, "OUTLINE") + row.gTex = row:CreateTexture(nil, "ARTWORK") + row.gTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + row.gTex:SetTexCoord(0, 0.25, 0, 1) + row.gTex:SetWidth(10); row.gTex:SetHeight(10) + + row.sTxt = row:CreateFontString(nil, "OVERLAY") + row.sTxt:SetFont(font, 9, "OUTLINE") + row.sTex = row:CreateTexture(nil, "ARTWORK") + row.sTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + row.sTex:SetTexCoord(0.25, 0.5, 0, 1) + row.sTex:SetWidth(10); row.sTex:SetHeight(10) + + row.cTxt = row:CreateFontString(nil, "OVERLAY") + row.cTxt:SetFont(font, 9, "OUTLINE") + row.cTex = row:CreateTexture(nil, "ARTWORK") + row.cTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + row.cTex:SetTexCoord(0.5, 0.75, 0, 1) + row.cTex:SetWidth(10); row.cTex:SetHeight(10) + + local hl = row:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + hl:SetBlendMode("ADD") + hl:SetAllPoints(row) + hl:SetAlpha(0.15) + + row.nodeIndex = nil + row.nodeType = nil + + row:SetScript("OnEnter", function() + if this.nodeType == "REACHABLE" and this.nodeIndex then + GameTooltip:SetOwner(this, "ANCHOR_LEFT") + GameTooltip:AddLine(TaxiNodeName(this.nodeIndex), 1, 1, 1) + local cost = TaxiNodeCost(this.nodeIndex) + if cost and cost > 0 then + SetTooltipMoney(GameTooltip, cost) + end + local est = GetEstimatedTime(FM.currentSource, TaxiNodeName(this.nodeIndex)) + if est then + GameTooltip:AddLine(" ") + GameTooltip:AddLine("预计飞行: " .. FormatTime(est), 0.6, 0.8, 1.0) + end + GameTooltip:AddLine(" ") + GameTooltip:AddLine("点击飞往此处", T.dimText[1], T.dimText[2], T.dimText[3]) + GameTooltip:Show() + end + end) + + row:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + row:SetScript("OnClick", function() + if this.nodeType == "REACHABLE" and this.nodeIndex then + TakeTaxiNode(this.nodeIndex) + end + end) + + return row +end + +-------------------------------------------------------------------------------- +-- Skin TaxiFrame +-------------------------------------------------------------------------------- +function FM:ApplySkin() + if skinApplied then return end + if not TaxiFrame then return end + skinApplied = true + + local font = GetFont() + + StripTextures(TaxiFrame) + + if TaxiPortrait then TaxiPortrait:Hide(); TaxiPortrait:SetAlpha(0) end + if TaxiTitleText then TaxiTitleText:Hide() end + + local origClose = TaxiCloseButton + if origClose then + origClose:Hide() + origClose:SetAlpha(0) + origClose.Show = function() end + end + + TaxiFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + TaxiFrame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + TaxiFrame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) + + CreateShadow(TaxiFrame) + + -- Trim empty space at the bottom (TaxiMap anchored to top, safe to shrink from bottom) + if TaxiMap then + local mapBottom = TaxiMap:GetBottom() + local frameBottom = TaxiFrame:GetBottom() + if mapBottom and frameBottom and mapBottom > frameBottom then + local excess = mapBottom - frameBottom - 10 + if excess > 10 then + TaxiFrame:SetHeight(TaxiFrame:GetHeight() - excess) + end + end + end + + TaxiFrame:SetMovable(true) + TaxiFrame:EnableMouse(true) + TaxiFrame:RegisterForDrag("LeftButton") + TaxiFrame:SetScript("OnDragStart", function() this:StartMoving() end) + TaxiFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + local header = CreateFrame("Frame", nil, TaxiFrame) + header:SetPoint("TOPLEFT", TaxiFrame, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", TaxiFrame, "TOPRIGHT", 0, 0) + header:SetHeight(HEADER_H) + header:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8" }) + header:SetBackdropColor(T.headerBg[1], T.headerBg[2], T.headerBg[3], T.headerBg[4]) + header:SetFrameLevel(TaxiFrame:GetFrameLevel() + 5) + + local titleIco = SFrames:CreateIcon(header, "mount", 16) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("LEFT", header, "LEFT", SIDE_PAD, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local titleFS = header:CreateFontString(nil, "OVERLAY") + titleFS:SetFont(font, 14, "OUTLINE") + titleFS:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + titleFS:SetPoint("RIGHT", header, "RIGHT", -30, 0) + titleFS:SetJustifyH("LEFT") + titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + FM.titleFS = titleFS + + local closeBtn = CreateFrame("Button", nil, header) + closeBtn:SetWidth(20) + closeBtn:SetHeight(20) + closeBtn:SetPoint("RIGHT", header, "RIGHT", -8, 0) + closeBtn:SetFrameLevel(header:GetFrameLevel() + 1) + local closeTex = closeBtn:CreateTexture(nil, "ARTWORK") + closeTex:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + closeTex:SetTexCoord(0.25, 0.375, 0, 0.125) + closeTex:SetAllPoints() + closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + closeBtn:SetScript("OnClick", function() CloseTaxiMap() end) + closeBtn:SetScript("OnEnter", function() closeTex:SetVertexColor(1, 0.6, 0.7) end) + closeBtn:SetScript("OnLeave", function() closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) end) + + local headerSep = TaxiFrame:CreateTexture(nil, "OVERLAY") + headerSep:SetTexture("Interface\\Buttons\\WHITE8X8") + headerSep:SetHeight(1) + headerSep:SetPoint("TOPLEFT", TaxiFrame, "TOPLEFT", 4, -HEADER_H) + headerSep:SetPoint("TOPRIGHT", TaxiFrame, "TOPRIGHT", -4, -HEADER_H) + headerSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + headerSep._nanamiKeep = true + + if TaxiMap then + local mapBorder = CreateFrame("Frame", nil, TaxiFrame) + mapBorder:SetPoint("TOPLEFT", TaxiMap, "TOPLEFT", -3, 3) + mapBorder:SetPoint("BOTTOMRIGHT", TaxiMap, "BOTTOMRIGHT", 3, -3) + mapBorder:SetBackdrop({ + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + mapBorder:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) + mapBorder:SetFrameLevel(TaxiFrame:GetFrameLevel() + 3) + end + + FM:CreateDestPanel() + + local origOnHide = TaxiFrame:GetScript("OnHide") + TaxiFrame:SetScript("OnHide", function() + if origOnHide then origOnHide() end + if DestPanel then DestPanel:Hide() end + end) +end + +-------------------------------------------------------------------------------- +-- Destination Panel +-------------------------------------------------------------------------------- +function FM:CreateDestPanel() + local font = GetFont() + + DestPanel = CreateFrame("Frame", "NanamiFlightDestPanel", UIParent) + DestPanel:SetWidth(DEST_PANEL_W) + DestPanel:SetPoint("TOPLEFT", TaxiFrame, "TOPRIGHT", 4, 0) + DestPanel:SetPoint("BOTTOMLEFT", TaxiFrame, "BOTTOMRIGHT", 4, 0) + DestPanel:SetFrameStrata(TaxiFrame:GetFrameStrata()) + DestPanel:SetFrameLevel(TaxiFrame:GetFrameLevel() + 1) + DestPanel:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + DestPanel:SetBackdropColor(T.listBg[1], T.listBg[2], T.listBg[3], T.listBg[4]) + DestPanel:SetBackdropBorderColor(T.listBorder[1], T.listBorder[2], T.listBorder[3], T.listBorder[4]) + + CreateShadow(DestPanel) + + local panelTitle = DestPanel:CreateFontString(nil, "OVERLAY") + panelTitle:SetFont(font, 12, "OUTLINE") + panelTitle:SetPoint("TOP", DestPanel, "TOP", 0, -8) + panelTitle:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + panelTitle:SetText("目的地列表") + + FM.currentLabel = DestPanel:CreateFontString(nil, "OVERLAY") + FM.currentLabel:SetFont(font, 10, "OUTLINE") + FM.currentLabel:SetPoint("TOPLEFT", DestPanel, "TOPLEFT", 8, -28) + FM.currentLabel:SetPoint("RIGHT", DestPanel, "RIGHT", -8, 0) + FM.currentLabel:SetJustifyH("LEFT") + FM.currentLabel:SetTextColor(T.currentText[1], T.currentText[2], T.currentText[3]) + + local sepLine = DestPanel:CreateTexture(nil, "OVERLAY") + sepLine:SetTexture("Interface\\Buttons\\WHITE8X8") + sepLine:SetHeight(1) + sepLine:SetPoint("TOPLEFT", DestPanel, "TOPLEFT", 8, -46) + sepLine:SetPoint("TOPRIGHT", DestPanel, "TOPRIGHT", -8, -46) + sepLine:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + FM.noDestLabel = DestPanel:CreateFontString(nil, "OVERLAY") + FM.noDestLabel:SetFont(font, 10, "OUTLINE") + FM.noDestLabel:SetPoint("TOP", DestPanel, "TOP", 0, -60) + FM.noDestLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + FM.noDestLabel:SetText("暂无可用航线") + FM.noDestLabel:Hide() + + local scrollFrame = CreateFrame("ScrollFrame", "NanamiFlightDestScroll", DestPanel, "UIPanelScrollFrameTemplate") + scrollFrame:SetPoint("TOPLEFT", DestPanel, "TOPLEFT", 2, -50) + scrollFrame:SetPoint("BOTTOMRIGHT", DestPanel, "BOTTOMRIGHT", -20, 6) + + local scrollChild = CreateFrame("Frame", "NanamiFlightDestScrollChild", scrollFrame) + scrollChild:SetWidth(DEST_PANEL_W - 24) + scrollChild:SetHeight(MAX_DEST_ROWS * DEST_ROW_H + 20) + scrollFrame:SetScrollChild(scrollChild) + + local scrollBar = getglobal("NanamiFlightDestScrollScrollBar") + if scrollBar then + scrollBar:SetWidth(12) + local regions = { scrollBar:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.GetObjectType and region:GetObjectType() == "Texture" then + region:SetTexture(nil) + region:SetAlpha(0) + end + end + local thumb = scrollBar:GetThumbTexture() + if thumb then + thumb:SetTexture("Interface\\Buttons\\WHITE8X8") + thumb:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], 0.6) + thumb:SetWidth(10) + thumb:SetHeight(40) + end + end + local scrollUp = getglobal("NanamiFlightDestScrollScrollBarScrollUpButton") + if scrollUp then scrollUp:SetAlpha(0); scrollUp:SetWidth(1); scrollUp:SetHeight(1) end + local scrollDown = getglobal("NanamiFlightDestScrollScrollBarScrollDownButton") + if scrollDown then scrollDown:SetAlpha(0); scrollDown:SetWidth(1); scrollDown:SetHeight(1) end + + for i = 1, MAX_DEST_ROWS do + local row = CreateDestRow(scrollChild, i) + row:SetPoint("TOPLEFT", scrollChild, "TOPLEFT", 0, -((i - 1) * DEST_ROW_H)) + row:SetPoint("RIGHT", scrollChild, "RIGHT", 0, 0) + row:Hide() + DestRows[i] = row + end + + DestPanel:Hide() +end + +-------------------------------------------------------------------------------- +-- Update Destinations +-------------------------------------------------------------------------------- +function FM:UpdateDestinations() + if not DestPanel then return end + + local numNodes = NumTaxiNodes() + local currentName = "" + local reachable = {} + local unreachableCount = 0 + + for i = 1, numNodes do + local name = TaxiNodeName(i) + local ntype = TaxiNodeGetType(i) + local cost = TaxiNodeCost(i) + + if ntype == "CURRENT" then + currentName = name + elseif ntype == "REACHABLE" then + table.insert(reachable, { index = i, name = name, cost = cost }) + elseif ntype == "NONE" then + unreachableCount = unreachableCount + 1 + end + end + + FM.currentSource = currentName + + -- Build hash index for FTCData lookup + BuildHashIndex() + FM.currentSourceHash = nil + for i = 1, numNodes do + if TaxiNodeGetType(i) == "CURRENT" then + FM.currentSourceHash = indexToHash[i] or GetTaxiNodeHash(i) + break + end + end + + table.sort(reachable, function(a, b) return a.cost < b.cost end) + + local npcName = UnitName("NPC") or "飞行管理员" + FM.titleFS:SetText(npcName .. " - 飞行路线") + + if currentName ~= "" then + FM.currentLabel:SetText("|cFF66E666*|r " .. currentName) + else + FM.currentLabel:SetText("|cFF66E666*|r 未知") + end + + local rowIdx = 0 + + for _, dest in ipairs(reachable) do + rowIdx = rowIdx + 1 + if rowIdx <= MAX_DEST_ROWS then + local row = DestRows[rowIdx] + row.nodeIndex = dest.index + row.nodeType = "REACHABLE" + row.dot:SetVertexColor(T.nameText[1], T.nameText[2], T.nameText[3]) + row.nameFS:SetText(dest.name) + row.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + LayoutRowMoney(row, dest.cost) + local est = GetEstimatedTime(currentName, dest.name) + if not est and FM.currentSourceHash then + local dstHash = indexToHash[dest.index] or GetTaxiNodeHash(dest.index) + if dstHash then est = LookupFTCData(FM.currentSourceHash, dstHash) end + end + if est then + row.timeFS:SetText(FormatTime(est)) + row.timeFS:Show() + else + row.timeFS:SetText("") + row.timeFS:Hide() + end + row:Show() + end + end + + if unreachableCount > 0 then + rowIdx = rowIdx + 1 + if rowIdx <= MAX_DEST_ROWS then + local row = DestRows[rowIdx] + row.nodeIndex = nil + row.nodeType = "NONE" + row.dot:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + row.nameFS:SetText("(" .. unreachableCount .. " 个未发现)") + row.nameFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + row.gTxt:Hide(); row.gTex:Hide() + row.sTxt:Hide(); row.sTex:Hide() + row.cTxt:Hide(); row.cTex:Hide() + row.timeFS:SetText(""); row.timeFS:Hide() + row:Show() + end + end + + for i = rowIdx + 1, MAX_DEST_ROWS do + DestRows[i]:Hide() + end + + if rowIdx == 0 then + FM.noDestLabel:Show() + else + FM.noDestLabel:Hide() + end + + local child = getglobal("NanamiFlightDestScrollChild") + if child then + child:SetHeight(math.max(rowIdx * DEST_ROW_H + 10, 50)) + end + + DestPanel:Show() +end + +-------------------------------------------------------------------------------- +-- Hook Node Buttons (tooltip only) +-------------------------------------------------------------------------------- +function FM:HookNodeButtons() + local numNodes = NumTaxiNodes() + for i = 1, numNodes do + local btn = getglobal("TaxiButton" .. i) + if btn and not btn._nanamiHooked then + btn._nanamiHooked = true + + local origEnter = btn:GetScript("OnEnter") + btn:SetScript("OnEnter", function() + if origEnter then origEnter() end + local id = this:GetID() + if TaxiNodeGetType(id) == "REACHABLE" then + local cost = TaxiNodeCost(id) + if cost and cost > 0 then + GameTooltip:AddLine(" ") + SetTooltipMoney(GameTooltip, cost) + end + local est = GetEstimatedTime(FM.currentSource, TaxiNodeName(id)) + if est then + GameTooltip:AddLine("预计飞行: " .. FormatTime(est), 0.6, 0.8, 1.0) + end + GameTooltip:Show() + end + for _, row in ipairs(DestRows) do + if row:IsShown() and row.nodeIndex == id then + row.nameFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + end + end) + + local origLeave = btn:GetScript("OnLeave") + btn:SetScript("OnLeave", function() + if origLeave then origLeave() end + for _, row in ipairs(DestRows) do + if row:IsShown() and row.nodeType == "REACHABLE" then + row.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + end + end) + end + end +end + +-------------------------------------------------------------------------------- +-- Flight Progress Bar (vertical axis: departure → destination with countdown) +-------------------------------------------------------------------------------- +local COLLAPSED_H = 34 +local barCollapsed = false + +local function SetBarCollapsed(collapsed) + barCollapsed = collapsed + if not FlightBar then return end + local bar = FlightBar + if collapsed then + bar:SetHeight(COLLAPSED_H) + for _, el in ipairs(bar.expandElements) do el:Hide() end + bar.collapseBtn.label:SetText("+") + -- Vertically center all visible elements + bar.titleFS:ClearAllPoints() + bar.titleFS:SetPoint("LEFT", bar, "LEFT", 10, 0) + bar.compactFS:ClearAllPoints() + bar.compactFS:SetPoint("RIGHT", bar, "RIGHT", -28, 0) + bar.collapseBtn:ClearAllPoints() + bar.collapseBtn:SetPoint("RIGHT", bar, "RIGHT", -6, 0) + bar.compactFS:Show() + else + bar:SetHeight(bar.expandedH) + for _, el in ipairs(bar.expandElements) do el:Show() end + bar.collapseBtn.label:SetText("-") + -- Restore top-aligned positions + bar.titleFS:ClearAllPoints() + bar.titleFS:SetPoint("TOPLEFT", bar, "TOPLEFT", 10, -8) + bar.compactFS:ClearAllPoints() + bar.compactFS:SetPoint("RIGHT", bar, "RIGHT", -28, -9) + bar.collapseBtn:ClearAllPoints() + bar.collapseBtn:SetPoint("TOPRIGHT", bar, "TOPRIGHT", -6, -6) + bar.compactFS:Hide() + end +end + +local function CreateFlightBar() + if FlightBar then return end + + local font = GetFont() + local panelH = 8 + 18 + 6 + 12 + 6 + TRACK_H + 6 + 12 + 10 + 14 + 4 + 14 + 4 + 14 + 10 + + local bar = CreateFrame("Frame", "NanamiFlightBar", UIParent) + bar:SetWidth(BAR_W) + bar:SetHeight(panelH) + bar.expandedH = panelH + bar:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", -80, -300) + bar:SetFrameStrata("HIGH") + bar:SetMovable(true) + bar:EnableMouse(true) + bar:RegisterForDrag("LeftButton") + bar:SetScript("OnDragStart", function() this:StartMoving() end) + bar:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + bar:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + bar:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + bar:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) + CreateShadow(bar) + + bar.expandElements = {} + local yOff = -8 + + -- Title (always visible) + bar.titleFS = bar:CreateFontString(nil, "OVERLAY") + bar.titleFS:SetFont(font, 13, "OUTLINE") + bar.titleFS:SetPoint("TOPLEFT", bar, "TOPLEFT", 10, yOff) + bar.titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + bar.titleFS:SetText("飞行中...") + + -- Compact remaining time (shown only when collapsed, next to title) + bar.compactFS = bar:CreateFontString(nil, "OVERLAY") + bar.compactFS:SetFont(font, 13, "OUTLINE") + bar.compactFS:SetPoint("RIGHT", bar, "RIGHT", -28, yOff - 1) + bar.compactFS:SetJustifyH("RIGHT") + bar.compactFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + bar.compactFS:Hide() + + -- Collapse / expand button + local colBtn = CreateFrame("Button", nil, bar) + colBtn:SetWidth(18) + colBtn:SetHeight(18) + colBtn:SetPoint("TOPRIGHT", bar, "TOPRIGHT", -6, -6) + colBtn:SetFrameLevel(bar:GetFrameLevel() + 3) + local colLabel = colBtn:CreateFontString(nil, "OVERLAY") + colLabel:SetFont(font, 14, "OUTLINE") + colLabel:SetPoint("CENTER", 0, 1) + colLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + colLabel:SetText("-") + colBtn.label = colLabel + colBtn:SetScript("OnClick", function() + SetBarCollapsed(not barCollapsed) + end) + colBtn:SetScript("OnEnter", function() + colLabel:SetTextColor(1, 0.7, 0.85) + end) + colBtn:SetScript("OnLeave", function() + colLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end) + bar.collapseBtn = colBtn + + yOff = yOff - 18 + + -- Separator + local sep1 = bar:CreateTexture(nil, "OVERLAY") + sep1:SetTexture("Interface\\Buttons\\WHITE8X8") + sep1:SetHeight(1) + sep1:SetPoint("TOPLEFT", bar, "TOPLEFT", 8, yOff - 2) + sep1:SetPoint("TOPRIGHT", bar, "TOPRIGHT", -8, yOff - 2) + sep1:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + table.insert(bar.expandElements, sep1) + yOff = yOff - 6 + + -- Source dot + name + local srcDot = bar:CreateTexture(nil, "OVERLAY") + srcDot:SetTexture("Interface\\Buttons\\WHITE8X8") + srcDot:SetWidth(9) + srcDot:SetHeight(9) + srcDot:SetPoint("TOPLEFT", bar, "TOPLEFT", TRACK_X, yOff) + srcDot:SetVertexColor(T.currentText[1], T.currentText[2], T.currentText[3]) + bar.srcDot = srcDot + table.insert(bar.expandElements, srcDot) + + bar.srcNameFS = bar:CreateFontString(nil, "OVERLAY") + bar.srcNameFS:SetFont(font, 10, "OUTLINE") + bar.srcNameFS:SetPoint("LEFT", srcDot, "RIGHT", 6, 0) + bar.srcNameFS:SetPoint("RIGHT", bar, "RIGHT", -8, 0) + bar.srcNameFS:SetJustifyH("LEFT") + bar.srcNameFS:SetTextColor(T.currentText[1], T.currentText[2], T.currentText[3]) + table.insert(bar.expandElements, bar.srcNameFS) + + yOff = yOff - 14 + + -- Vertical track area + local trackTop = yOff + local trackBg = bar:CreateTexture(nil, "BACKGROUND") + trackBg:SetTexture("Interface\\Buttons\\WHITE8X8") + trackBg:SetWidth(3) + trackBg:SetHeight(TRACK_H) + trackBg:SetPoint("TOPLEFT", bar, "TOPLEFT", TRACK_X + 3, trackTop) + trackBg:SetVertexColor(T.sectionBg[1], T.sectionBg[2], T.sectionBg[3], T.sectionBg[4]) + bar.trackBg = trackBg + table.insert(bar.expandElements, trackBg) + + -- Track fill (grows from top downward) + local trackFillFrame = CreateFrame("Frame", nil, bar) + trackFillFrame:SetPoint("TOPLEFT", trackBg, "TOPLEFT", 0, 0) + trackFillFrame:SetWidth(3) + trackFillFrame:SetHeight(1) + local trackFill = trackFillFrame:CreateTexture(nil, "ARTWORK") + trackFill:SetTexture("Interface\\Buttons\\WHITE8X8") + trackFill:SetAllPoints(trackFillFrame) + trackFill:SetVertexColor(T.progressFill[1], T.progressFill[2], T.progressFill[3], T.progressFill[4]) + bar.trackFillFrame = trackFillFrame + bar.trackFill = trackFill + table.insert(bar.expandElements, trackFillFrame) + + -- Progress indicator + local progDot = bar:CreateTexture(nil, "OVERLAY") + progDot:SetTexture("Interface\\Buttons\\WHITE8X8") + progDot:SetWidth(13) + progDot:SetHeight(5) + progDot:SetPoint("CENTER", trackBg, "TOP", 0, 0) + progDot:SetVertexColor(T.accent[1], T.accent[2], T.accent[3], T.accent[4]) + bar.progDot = progDot + table.insert(bar.expandElements, progDot) + + -- Progress glow + local progGlow = bar:CreateTexture(nil, "ARTWORK") + progGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + progGlow:SetBlendMode("ADD") + progGlow:SetWidth(28) + progGlow:SetHeight(28) + progGlow:SetPoint("CENTER", progDot, "CENTER", 0, 0) + progGlow:SetVertexColor(T.progressFill[1], T.progressFill[2], T.progressFill[3], 0.4) + bar.progGlow = progGlow + table.insert(bar.expandElements, progGlow) + + -- Elapsed time + bar.elapsedFS = bar:CreateFontString(nil, "OVERLAY") + bar.elapsedFS:SetFont(font, 11, "OUTLINE") + bar.elapsedFS:SetPoint("LEFT", trackBg, "RIGHT", 12, 0) + bar.elapsedFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + table.insert(bar.expandElements, bar.elapsedFS) + + -- Remaining time (follows progress dot) + bar.remainFS = bar:CreateFontString(nil, "OVERLAY") + bar.remainFS:SetFont(font, 14, "OUTLINE") + bar.remainFS:SetPoint("LEFT", progDot, "RIGHT", 10, 0) + bar.remainFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + table.insert(bar.expandElements, bar.remainFS) + + yOff = trackTop - TRACK_H + + -- Destination dot + name + local dstDot = bar:CreateTexture(nil, "OVERLAY") + dstDot:SetTexture("Interface\\Buttons\\WHITE8X8") + dstDot:SetWidth(9) + dstDot:SetHeight(9) + dstDot:SetPoint("TOPLEFT", bar, "TOPLEFT", TRACK_X, yOff - 4) + dstDot:SetVertexColor(T.nameText[1], T.nameText[2], T.nameText[3]) + bar.dstDot = dstDot + table.insert(bar.expandElements, dstDot) + + bar.dstNameFS = bar:CreateFontString(nil, "OVERLAY") + bar.dstNameFS:SetFont(font, 10, "OUTLINE") + bar.dstNameFS:SetPoint("LEFT", dstDot, "RIGHT", 6, 0) + bar.dstNameFS:SetPoint("RIGHT", bar, "RIGHT", -8, 0) + bar.dstNameFS:SetJustifyH("LEFT") + bar.dstNameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + table.insert(bar.expandElements, bar.dstNameFS) + + yOff = yOff - 18 + + -- Bottom info + local sep2 = bar:CreateTexture(nil, "OVERLAY") + sep2:SetTexture("Interface\\Buttons\\WHITE8X8") + sep2:SetHeight(1) + sep2:SetPoint("TOPLEFT", bar, "TOPLEFT", 8, yOff) + sep2:SetPoint("TOPRIGHT", bar, "TOPRIGHT", -8, yOff) + sep2:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + table.insert(bar.expandElements, sep2) + + yOff = yOff - 6 + + bar.totalFS = bar:CreateFontString(nil, "OVERLAY") + bar.totalFS:SetFont(font, 10, "OUTLINE") + bar.totalFS:SetPoint("TOPLEFT", bar, "TOPLEFT", 12, yOff) + bar.totalFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + table.insert(bar.expandElements, bar.totalFS) + + bar:Hide() + FlightBar = bar +end + +local function ShowFlightBar() + CreateFlightBar() + local bar = FlightBar + + bar.srcNameFS:SetText(flightState.source) + bar.dstNameFS:SetText(flightState.dest) + + if flightState.estimated > 0 then + bar.totalFS:SetText("预计: " .. FormatTime(flightState.estimated)) + else + bar.totalFS:SetText("首次飞行 - 记录中...") + end + + bar.titleFS:SetText("飞行中...") + bar.titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + bar:SetAlpha(1) + bar.compactFS:SetText("") + + -- Reset track fill + bar.trackFillFrame:SetHeight(1) + bar.progDot:ClearAllPoints() + bar.progDot:SetPoint("CENTER", bar.trackBg, "TOP", 0, 0) + bar.progGlow:ClearAllPoints() + bar.progGlow:SetPoint("CENTER", bar.progDot, "CENTER", 0, 0) + bar.elapsedFS:SetText("0:00") + bar.remainFS:SetText("") + + -- Restore collapse state + SetBarCollapsed(barCollapsed) + + bar:Show() +end + +local function UpdateFlightBar() + if not FlightBar or not FlightBar:IsShown() then return end + local bar = FlightBar + + local elapsed = GetTime() - flightState.startTime + local estimated = flightState.estimated + local progress = 0 + local compactText = FormatTime(elapsed) + + if estimated > 0 then + progress = math.min(1, elapsed / estimated) + local remain = math.max(0, estimated - elapsed) + bar.remainFS:SetText(FormatTime(remain)) + compactText = FormatTime(remain) + if remain <= 0 then + bar.remainFS:SetText("即将到达") + bar.remainFS:SetTextColor(T.arrivedText[1], T.arrivedText[2], T.arrivedText[3]) + compactText = "即将到达" + else + bar.remainFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + else + bar.remainFS:SetText("记录中...") + bar.remainFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + progress = math.mod(elapsed / 10, 1) * 0.8 + end + + bar.compactFS:SetText(compactText) + bar.elapsedFS:SetText("已飞行 " .. FormatTime(elapsed)) + + if not barCollapsed then + local fillH = math.max(1, progress * TRACK_H) + bar.trackFillFrame:SetHeight(fillH) + bar.progDot:ClearAllPoints() + bar.progDot:SetPoint("CENTER", bar.trackBg, "TOP", 0, -fillH) + bar.progGlow:ClearAllPoints() + bar.progGlow:SetPoint("CENTER", bar.progDot, "CENTER", 0, 0) + end +end + +local function OnFlightArrived() + if not FlightBar then return end + local bar = FlightBar + + local elapsed = GetTime() - flightState.startTime + SaveFlightTime(flightState.source, flightState.dest, elapsed, flightState.srcHash, flightState.dstHash) + + bar.titleFS:SetText("已到达!") + bar.titleFS:SetTextColor(T.arrivedText[1], T.arrivedText[2], T.arrivedText[3]) + bar.remainFS:SetText("") + bar.elapsedFS:SetText("飞行用时 " .. FormatTime(elapsed)) + bar.totalFS:SetText("") + + -- Fill track to 100% + bar.trackFillFrame:SetHeight(TRACK_H) + bar.progDot:ClearAllPoints() + bar.progDot:SetPoint("CENTER", bar.trackBg, "BOTTOM", 0, 0) + bar.progGlow:ClearAllPoints() + bar.progGlow:SetPoint("CENTER", bar.progDot, "CENTER", 0, 0) + bar.progDot:SetVertexColor(T.arrivedText[1], T.arrivedText[2], T.arrivedText[3]) + + flightState.lingerTime = 4 +end + +local function HideFlightBar() + if FlightBar then + FlightBar:Hide() + FlightBar.progDot:SetVertexColor(T.accent[1], T.accent[2], T.accent[3], T.accent[4]) + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function FM:Initialize() + -- TaxiMap skin updater + local updater = CreateFrame("Frame") + updater:RegisterEvent("TAXIMAP_OPENED") + updater.needsUpdate = false + + updater:SetScript("OnEvent", function() + if event == "TAXIMAP_OPENED" then + this.needsUpdate = true + end + end) + + updater:SetScript("OnUpdate", function() + if this.needsUpdate then + this.needsUpdate = false + FM:ApplySkin() + FM:UpdateDestinations() + FM:HookNodeButtons() + end + end) + + -- Hook TakeTaxiNode to capture route info before flight starts + local origTakeTaxiNode = TakeTaxiNode + TakeTaxiNode = function(index) + local numNodes = NumTaxiNodes() + local srcName = "" + local srcHash = nil + for i = 1, numNodes do + if TaxiNodeGetType(i) == "CURRENT" then + srcName = TaxiNodeName(i) + srcHash = indexToHash[i] or GetTaxiNodeHash(i) + break + end + end + local dstName = TaxiNodeName(index) or "" + local dstHash = indexToHash[index] or GetTaxiNodeHash(index) + + flightState.source = srcName + flightState.dest = dstName + flightState.srcHash = srcHash + flightState.dstHash = dstHash + flightState.pendingFlight = true + flightState.inFlight = false + flightState.lingerTime = 0 + + -- Lookup estimated time: learned DB first, then FTCData + local est = GetEstimatedTime(srcName, dstName) + if not est and srcHash and dstHash then + est = LookupFTCData(srcHash, dstHash) + end + flightState.estimated = est or 0 + + origTakeTaxiNode(index) + end + + -- Flight state monitor + local monitor = CreateFrame("Frame") + monitor:SetScript("OnUpdate", function() + local dt = arg1 or 0 + local onTaxi = UnitOnTaxi("player") + + if flightState.pendingFlight and onTaxi then + flightState.pendingFlight = false + flightState.inFlight = true + flightState.startTime = GetTime() + ShowFlightBar() + end + + if flightState.inFlight then + if not onTaxi then + flightState.inFlight = false + OnFlightArrived() + else + UpdateFlightBar() + end + end + + -- Linger after arrival then hide + if flightState.lingerTime > 0 then + flightState.lingerTime = flightState.lingerTime - dt + if flightState.lingerTime <= 1 and FlightBar then + FlightBar:SetAlpha(math.max(0, flightState.lingerTime)) + end + if flightState.lingerTime <= 0 then + flightState.lingerTime = 0 + HideFlightBar() + end + end + end) +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableFlightMap == nil then + SFramesDB.enableFlightMap = true + end + if SFramesDB.enableFlightMap ~= false then + FM:Initialize() + end + end +end) + +-------------------------------------------------------------------------------- +-- Debug: /ftcdebug (open taxi map first, then type this command) +-------------------------------------------------------------------------------- +SLASH_FTCDEBUG1 = "/ftcdebug" +SlashCmdList["FTCDEBUG"] = function() + local faction = GetPlayerFaction() + DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00[NanamiFlightDebug]|r faction=" .. tostring(faction) .. " FTCData=" .. tostring(FTCData ~= nil)) + if FTCData then + DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00[NanamiFlightDebug]|r FTCData[" .. faction .. "]=" .. tostring(FTCData[faction] ~= nil)) + end + local numNodes = NumTaxiNodes() + if not numNodes or numNodes == 0 then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[NanamiFlightDebug]|r Taxi map not open!") + return + end + DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00[NanamiFlightDebug]|r Nodes=" .. numNodes .. " srcHash=" .. tostring(FM.currentSourceHash)) + for i = 1, numNodes do + local name = TaxiNodeName(i) + local ntype = TaxiNodeGetType(i) + local x, y = TaxiNodePosition(i) + local h = tostring(math.floor(x * 100000000)) + local corr = hashCorrection[h] + local corrTag = "" + if corr and corr ~= h then + corrTag = " |cFFFFFF00->fuzzy:" .. corr .. "|r" + elseif corr then + corrTag = " |cFF00FF00exact|r" + else + corrTag = " |cFFFF6666NO_MATCH|r" + end + local tag = "" + if ntype == "CURRENT" then tag = " |cFF66E666<< YOU|r" end + DEFAULT_CHAT_FRAME:AddMessage(" #" .. i .. " [" .. ntype .. "] " .. name .. " h=" .. h .. corrTag .. tag) + end +end + +-------------------------------------------------------------------------------- +-- Export: /ftcexport (prints learned flight times in FlightData.lua format) +-------------------------------------------------------------------------------- +SLASH_FTCEXPORT1 = "/ftcexport" +SlashCmdList["FTCEXPORT"] = function() + local hdb = SFramesGlobalDB and SFramesGlobalDB.flightTimesHash + if not hdb then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[NanamiFlightExport]|r No learned flight times yet.") + return + end + local count = 0 + for faction, sources in pairs(hdb) do + DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00[NanamiFlightExport]|r -- " .. faction .. " learned routes:") + for srcHash, dests in pairs(sources) do + for dstHash, secs in pairs(dests) do + DEFAULT_CHAT_FRAME:AddMessage(" FTCData." .. faction .. "['" .. srcHash .. "']['" .. dstHash .. "'] = " .. secs) + count = count + 1 + end + end + end + if count == 0 then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[NanamiFlightExport]|r No learned flight times yet. Fly some routes first!") + else + DEFAULT_CHAT_FRAME:AddMessage("|cFF00FF00[NanamiFlightExport]|r Total: " .. count .. " routes. Copy lines above into FlightData.lua for permanent cross-account sharing.") + end +end diff --git a/Focus.lua b/Focus.lua new file mode 100644 index 0000000..3e0fe42 --- /dev/null +++ b/Focus.lua @@ -0,0 +1,158 @@ +SFrames.Focus = {} + +local function Trim(text) + if type(text) ~= "string" then return "" end + text = string.gsub(text, "^%s+", "") + text = string.gsub(text, "%s+$", "") + return text +end + +function SFrames.Focus:EnsureDB() + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Focus then SFramesDB.Focus = {} end + return SFramesDB.Focus +end + +function SFrames.Focus:Initialize() + self:EnsureDB() +end + +function SFrames.Focus:GetFocusName() + if UnitExists and UnitExists("focus") and UnitName then + local name = UnitName("focus") + if name and name ~= "" then + return name + end + end + + local db = self:EnsureDB() + if db.name and db.name ~= "" then + return db.name + end + return nil +end + +function SFrames.Focus:SetFromTarget() + if not UnitExists or not UnitExists("target") then + return false, "NO_TARGET" + end + + local name = UnitName and UnitName("target") + if not name or name == "" then + return false, "INVALID_TARGET" + end + + local db = self:EnsureDB() + db.name = name + db.level = UnitLevel and UnitLevel("target") or nil + local _, classToken = UnitClass and UnitClass("target") + db.class = classToken + + local usedNative = false + if FocusUnit then + local ok = pcall(function() FocusUnit("target") end) + if not ok then + ok = pcall(function() FocusUnit() end) + end + if ok and UnitExists and UnitExists("focus") then + usedNative = true + end + end + + return true, name, usedNative +end + +function SFrames.Focus:Clear() + if ClearFocus then + pcall(ClearFocus) + end + + local db = self:EnsureDB() + db.name = nil + db.level = nil + db.class = nil + + return true +end + +function SFrames.Focus:Target() + if UnitExists and UnitExists("focus") then + TargetUnit("focus") + return true, "NATIVE" + end + + local name = self:GetFocusName() + if not name then + return false, "NO_FOCUS" + end + + if TargetByName then + TargetByName(name, true) + else + return false, "NO_TARGETBYNAME" + end + + if UnitExists and UnitExists("target") and UnitName and UnitName("target") == name then + return true, "NAME" + end + return false, "NOT_FOUND" +end + +function SFrames.Focus:Cast(spellName) + local spell = Trim(spellName) + if spell == "" then + return false, "NO_SPELL" + end + + if UnitExists and UnitExists("focus") then + CastSpellByName(spell) + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit("focus") + end + if SpellIsTargeting and SpellIsTargeting() then + SpellStopTargeting() + return false, "BAD_TARGET" + end + return true, "NATIVE" + end + + local focusName = self:GetFocusName() + if not focusName then + return false, "NO_FOCUS" + end + + local hadTarget = UnitExists and UnitExists("target") + local prevName = hadTarget and UnitName and UnitName("target") or nil + + local onFocus = false + if hadTarget and prevName == focusName then + onFocus = true + elseif TargetByName then + TargetByName(focusName, true) + if UnitExists and UnitExists("target") and UnitName and UnitName("target") == focusName then + onFocus = true + end + end + + if not onFocus then + return false, "FOCUS_NOT_FOUND" + end + + CastSpellByName(spell) + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit("target") + end + if SpellIsTargeting and SpellIsTargeting() then + SpellStopTargeting() + if hadTarget and prevName and prevName ~= focusName and TargetLastTarget then + TargetLastTarget() + end + return false, "BAD_TARGET" + end + + if hadTarget and prevName and prevName ~= focusName and TargetLastTarget then + TargetLastTarget() + end + return true, "NAME" +end + diff --git a/GameMenu.lua b/GameMenu.lua new file mode 100644 index 0000000..ae18581 --- /dev/null +++ b/GameMenu.lua @@ -0,0 +1,346 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Game Menu (GameMenu.lua) +-- Reskins the ESC menu (GameMenuFrame) with pink cat-paw theme +-------------------------------------------------------------------------------- + +SFrames.GameMenu = {} + +local GM = SFrames.GameMenu + +-------------------------------------------------------------------------------- +-- Theme: Pink Cat-Paw +-------------------------------------------------------------------------------- +local T = SFrames.ActiveTheme + +local BUTTON_W = 170 +local BUTTON_H = 26 +local BUTTON_GAP = 5 +local SIDE_PAD = 16 +local HEADER_H = 32 + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or T.panelBg + local bd = borderColor or T.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function CreateShadow(parent, size) + local s = CreateFrame("Frame", nil, parent) + local sz = size or 4 + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -sz, sz) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", sz, -sz) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.55) + s:SetBackdropBorderColor(0, 0, 0, 0.4) + return s +end + +local function HideTexture(tex) + if not tex then return end + if tex.SetTexture then tex:SetTexture(nil) end + if tex.SetAlpha then tex:SetAlpha(0) end + if tex.Hide then tex:Hide() end +end + +-------------------------------------------------------------------------------- +-- Button Styling +-------------------------------------------------------------------------------- +local MENU_BUTTON_ICONS = { + ["GameMenuButtonContinue"] = "exit", + ["GameMenuButtonOptions"] = "settings", + ["GameMenuButtonSoundOptions"] = "sound", + ["GameMenuButtonUIOptions"] = "talent", + ["GameMenuButtonKeybindings"] = "menu", + ["GameMenuButtonRatings"] = "backpack", + ["GameMenuButtonMacros"] = "ai", + ["GameMenuButtonLogout"] = "close", + ["GameMenuButtonQuit"] = "logout", +} + +local function StyleMenuButton(btn) + if not btn or btn.nanamiStyled then return end + btn.nanamiStyled = true + + HideTexture(btn:GetNormalTexture()) + HideTexture(btn:GetPushedTexture()) + HideTexture(btn:GetHighlightTexture()) + HideTexture(btn:GetDisabledTexture()) + + local name = btn:GetName() or "" + for _, suffix in ipairs({ "Left", "Right", "Middle" }) do + local tex = _G[name .. suffix] + if tex then tex:SetAlpha(0); tex:Hide() end + end + + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + btn:SetWidth(BUTTON_W) + btn:SetHeight(BUTTON_H) + + local iconKey = MENU_BUTTON_ICONS[name] + local icoSize = 12 + local gap = 4 + local fs = btn:GetFontString() + if fs then + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + fs:ClearAllPoints() + if iconKey and SFrames and SFrames.CreateIcon then + local ico = SFrames:CreateIcon(btn, iconKey, icoSize) + ico:SetDrawLayer("OVERLAY") + ico:SetVertexColor(T.btnText[1], T.btnText[2], T.btnText[3]) + fs:SetPoint("CENTER", btn, "CENTER", (icoSize + gap) / 2, 0) + ico:SetPoint("RIGHT", fs, "LEFT", -gap, 0) + btn.nanamiIcon = ico + else + fs:SetPoint("CENTER", btn, "CENTER", 0, 0) + end + end + + local origEnter = btn:GetScript("OnEnter") + local origLeave = btn:GetScript("OnLeave") + local origDown = btn:GetScript("OnMouseDown") + local origUp = btn:GetScript("OnMouseUp") + + btn:SetScript("OnEnter", function() + if origEnter then origEnter() end + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBorder[1], T.btnHoverBorder[2], T.btnHoverBorder[3], T.btnHoverBorder[4]) + local txt = this:GetFontString() + if txt then txt:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end + if this.nanamiIcon then this.nanamiIcon:SetVertexColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end + end) + + btn:SetScript("OnLeave", function() + if origLeave then origLeave() end + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + local txt = this:GetFontString() + if txt then txt:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) end + if this.nanamiIcon then this.nanamiIcon:SetVertexColor(T.btnText[1], T.btnText[2], T.btnText[3]) end + end) + + btn:SetScript("OnMouseDown", function() + if origDown then origDown() end + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end) + + btn:SetScript("OnMouseUp", function() + if origUp then origUp() end + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end) +end + +-------------------------------------------------------------------------------- +-- Create Settings Button +-------------------------------------------------------------------------------- +local settingsBtn + +local function CreateSettingsButton(parent) + if settingsBtn then return settingsBtn end + + local btn = CreateFrame("Button", "GameMenuButtonNanamiUI", parent) + btn:SetWidth(BUTTON_W) + btn:SetHeight(BUTTON_H) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + + local icoSize = 14 + local gap = 4 + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + fs:SetPoint("CENTER", btn, "CENTER", (icoSize + gap) / 2, 0) + fs:SetText("Nanami-UI 设置") + + local ico = SFrames:CreateIcon(btn, "logo", icoSize) + ico:SetDrawLayer("OVERLAY") + ico:SetVertexColor(T.btnText[1], T.btnText[2], T.btnText[3]) + ico:SetPoint("RIGHT", fs, "LEFT", -gap, 0) + btn.nanamiIcon = ico + + btn:SetScript("OnClick", function() + HideUIPanel(GameMenuFrame) + if SFrames.ConfigUI and SFrames.ConfigUI.Build then + SFrames.ConfigUI:Build("ui") + end + end) + + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBorder[1], T.btnHoverBorder[2], T.btnHoverBorder[3], T.btnHoverBorder[4]) + fs:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + ico:SetVertexColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end) + + btn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + ico:SetVertexColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end) + + btn:SetScript("OnMouseDown", function() + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end) + + btn:SetScript("OnMouseUp", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end) + + btn.nanamiStyled = true + settingsBtn = btn + return btn +end + +-------------------------------------------------------------------------------- +-- Known button priority order (covers vanilla + Turtle WoW extras) +-------------------------------------------------------------------------------- +local BUTTON_ORDER = { + "GameMenuButtonContinue", + "__NANAMI_SETTINGS__", + "GameMenuButtonOptions", + "GameMenuButtonSoundOptions", + "GameMenuButtonUIOptions", + "GameMenuButtonKeybindings", + "GameMenuButtonRatings", + "GameMenuButtonMacros", + "GameMenuButtonLogout", + "GameMenuButtonQuit", +} + +-------------------------------------------------------------------------------- +-- Frame Styling (called once at PLAYER_LOGIN, before first show) +-------------------------------------------------------------------------------- +local styled = false + +local function StyleGameMenuFrame() + if styled then return end + if not GameMenuFrame then return end + styled = true + + -- Hide all default background textures and header text + local regions = { GameMenuFrame:GetRegions() } + for _, region in ipairs(regions) do + if region then + local otype = region:GetObjectType() + if otype == "Texture" then + region:SetTexture(nil) + region:SetAlpha(0) + region:Hide() + elseif otype == "FontString" then + region:SetAlpha(0) + region:Hide() + end + end + end + + SetRoundBackdrop(GameMenuFrame, T.panelBg, T.panelBorder) + CreateShadow(GameMenuFrame, 5) + + -- Title + local title = GameMenuFrame:CreateFontString(nil, "OVERLAY") + title:SetFont(GetFont(), 13, "OUTLINE") + title:SetTextColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + title:SetPoint("TOP", GameMenuFrame, "TOP", 0, -11) + title:SetText("Nanami-UI") + + -- Create settings button + local sBt = CreateSettingsButton(GameMenuFrame) + + -- Build a lookup of known names for quick check + local knownSet = {} + for _, name in ipairs(BUTTON_ORDER) do + if name ~= "__NANAMI_SETTINGS__" then + knownSet[name] = true + end + end + + -- Collect all child buttons that are NOT the settings button + local children = { GameMenuFrame:GetChildren() } + local unknownBtns = {} + for _, child in ipairs(children) do + if child and child:GetObjectType() == "Button" and child ~= sBt then + local cname = child:GetName() + if cname and not knownSet[cname] then + table.insert(unknownBtns, child) + end + end + end + + -- Build final ordered button list from BUTTON_ORDER + local orderedBtns = {} + for _, name in ipairs(BUTTON_ORDER) do + if name == "__NANAMI_SETTINGS__" then + table.insert(orderedBtns, sBt) + else + local btn = _G[name] + if btn then + StyleMenuButton(btn) + table.insert(orderedBtns, btn) + end + end + end + + -- Append unknown / Turtle WoW extra buttons before Logout & Quit + local insertBefore = table.getn(orderedBtns) + for i = table.getn(orderedBtns), 1, -1 do + local bname = orderedBtns[i]:GetName() or "" + if bname == "GameMenuButtonLogout" or bname == "GameMenuButtonQuit" then + insertBefore = i + else + break + end + end + for _, btn in ipairs(unknownBtns) do + StyleMenuButton(btn) + table.insert(orderedBtns, insertBefore, btn) + insertBefore = insertBefore + 1 + end + + -- Layout vertically + local numBtns = table.getn(orderedBtns) + local totalH = numBtns * BUTTON_H + (numBtns - 1) * BUTTON_GAP + local frameH = HEADER_H + SIDE_PAD + totalH + SIDE_PAD + local frameW = BUTTON_W + SIDE_PAD * 2 + + GameMenuFrame:SetWidth(frameW) + GameMenuFrame:SetHeight(frameH) + + local startY = -(HEADER_H + SIDE_PAD) + for i, btn in ipairs(orderedBtns) do + btn:ClearAllPoints() + btn:SetPoint("TOP", GameMenuFrame, "TOP", 0, startY - (i - 1) * (BUTTON_H + BUTTON_GAP)) + end +end + +-------------------------------------------------------------------------------- +-- Hook: style at login, BEFORE any show (avoids OnShow size-change issues) +-------------------------------------------------------------------------------- +local hookFrame = CreateFrame("Frame") +hookFrame:RegisterEvent("PLAYER_LOGIN") +hookFrame:SetScript("OnEvent", function() + if GameMenuFrame then + StyleGameMenuFrame() + end +end) diff --git a/GearScore.lua b/GearScore.lua new file mode 100644 index 0000000..b9ea3e7 --- /dev/null +++ b/GearScore.lua @@ -0,0 +1,1133 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: GearScore (GearScore.lua) +-- 基于乌龟服(Turtle WoW)属性收益理论的装备评分系统 +-- 评分 1-10: 衡量该装备对当前职业各天赋的适配度 +-- 考虑: 属性权重 × 装备类型兼容性 × 等级适配 +-------------------------------------------------------------------------------- + +SFrames.GearScore = {} +local GS = SFrames.GearScore + +-------------------------------------------------------------------------------- +-- Item budget cost per unit of each stat (for normalization) +-- Higher cost = stat is "rarer/more expensive" per item budget point +-------------------------------------------------------------------------------- + +local BUDGET_COST = { + STR = 1.0, AGI = 1.0, STA = 1.0, INT = 1.0, SPI = 1.0, + CRIT = 14.0, TOHIT = 15.0, RANGEDCRIT = 14.0, + SPELLCRIT = 14.0, SPELLTOHIT = 15.0, + ATTACKPOWER = 0.5, RANGEDATTACKPOWER = 0.5, + DMG = 0.86, HEAL = 0.58, + DEFENSE = 1.5, DODGE = 12.0, PARRY = 12.0, BLOCK = 12.0, + BLOCKVALUE = 0.5, ARMOR = 0.05, BASEARMOR = 0.02, + HEALTHREG = 2.0, MANAREG = 2.0, + HEALTH = 0.07, MANA = 0.07, + WEAPONDPS = 3.0, +} + +-------------------------------------------------------------------------------- +-- EP Weight Tables (tab = talent tab index for primary spec detection) +-------------------------------------------------------------------------------- + +local WEIGHTS = { + WARRIOR = { + specs = { + { name = "武器", tab = 1, color = "ffC79C6E", + w = { STR=2.0, AGI=1.4, STA=0.1, TOHIT=18, CRIT=25, ATTACKPOWER=1.0, + HEALTH=0.1, WEAPONDPS=14, BASEARMOR=0.01 } }, + { name = "狂怒", tab = 2, color = "ffC79C6E", + w = { STR=2.2, AGI=1.6, STA=0.1, TOHIT=20, CRIT=22, ATTACKPOWER=1.0, + HEALTH=0.1, WEAPONDPS=12, BASEARMOR=0.01 } }, + { name = "防护", tab = 3, color = "ff69CCF0", + w = { STR=1.0, AGI=1.8, STA=2.5, TOHIT=10, CRIT=3, ATTACKPOWER=0.5, + DEFENSE=1.5, DODGE=12, PARRY=12, BLOCK=8, BLOCKVALUE=0.5, + ARMOR=0.12, HEALTH=0.25, HEALTHREG=0.5, WEAPONDPS=4, BASEARMOR=0.05 } }, + }, + -- 硬核物理(战士型): 耐 > 力 > 敏 > 攻强 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, STR=2.0, AGI=1.5, ATTACKPOWER=1.0, + TOHIT=5, CRIT=5, DEFENSE=1.0, DODGE=8, PARRY=5, BLOCK=4, BLOCKVALUE=0.3, + ARMOR=0.08, HEALTH=0.2, HEALTHREG=2.0, WEAPONDPS=5, BASEARMOR=0.03 } }, + }, + PALADIN = { + specs = { + { name = "神圣", tab = 1, color = "ff00FF96", + w = { INT=0.35, SPI=0.4, STA=0.05, HEAL=1.0, DMG=0.3, SPELLCRIT=6, MANAREG=3.0, + MANA=0.02, BASEARMOR=0.005 } }, + { name = "防护", tab = 2, color = "ff69CCF0", + w = { STR=1.2, AGI=1.0, STA=2.5, INT=0.3, TOHIT=10, CRIT=5, ATTACKPOWER=0.5, DMG=0.4, + DEFENSE=1.5, DODGE=12, PARRY=12, BLOCK=10, BLOCKVALUE=0.5, + ARMOR=0.12, HEALTH=0.25, MANAREG=1.5, WEAPONDPS=3, BASEARMOR=0.05 } }, + { name = "惩戒", tab = 3, color = "ffF58CBA", + w = { STR=2.0, AGI=1.0, STA=0.1, INT=0.25, TOHIT=16, CRIT=20, SPELLCRIT=10, + ATTACKPOWER=1.0, DMG=0.6, HEAL=0.05, WEAPONDPS=12, BASEARMOR=0.01 } }, + }, + -- 硬核圣骑士: 耐 > 力 > 智 = 敏 = 精 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, STR=2.0, INT=1.5, AGI=1.5, SPI=1.5, + TOHIT=5, CRIT=5, ATTACKPOWER=0.5, HEAL=0.8, DMG=0.3, + DEFENSE=0.8, DODGE=5, ARMOR=0.06, HEALTH=0.2, + HEALTHREG=1.5, MANAREG=1.5, WEAPONDPS=4, BASEARMOR=0.03 } }, + }, + HUNTER = { + specs = { + { name = "野兽", tab = 1, color = "ffABD473", + w = { AGI=2.4, STR=0.3, STA=0.1, INT=0.2, TOHIT=18, CRIT=22, RANGEDCRIT=22, + ATTACKPOWER=0.8, RANGEDATTACKPOWER=1.0, MANAREG=1.5, WEAPONDPS=10, BASEARMOR=0.005 } }, + { name = "射击", tab = 2, color = "ffABD473", + w = { AGI=2.4, STR=0.3, STA=0.1, INT=0.2, TOHIT=18, CRIT=22, RANGEDCRIT=22, + ATTACKPOWER=0.8, RANGEDATTACKPOWER=1.0, MANAREG=1.5, WEAPONDPS=10, BASEARMOR=0.005 } }, + { name = "生存", tab = 3, color = "ffABD473", + w = { AGI=2.0, STR=0.8, STA=0.3, INT=0.2, SPI=0.3, TOHIT=16, CRIT=18, RANGEDCRIT=18, + ATTACKPOWER=1.0, RANGEDATTACKPOWER=1.0, MANAREG=1.0, WEAPONDPS=8, BASEARMOR=0.008 } }, + }, + -- 硬核猎人: 耐 > 敏 > 智 > 力 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, AGI=2.0, INT=1.0, STR=0.5, SPI=1.5, + TOHIT=5, CRIT=5, RANGEDCRIT=5, ATTACKPOWER=0.4, RANGEDATTACKPOWER=0.5, + ARMOR=0.06, HEALTH=0.2, HEALTHREG=2.5, WEAPONDPS=3, BASEARMOR=0.02 } }, + }, + ROGUE = { + specs = { + { name = "刺杀", tab = 1, color = "ffFFF569", + w = { AGI=2.0, STR=1.0, STA=0.1, TOHIT=18, CRIT=25, ATTACKPOWER=1.0, + WEAPONDPS=10, BASEARMOR=0.008 } }, + { name = "战斗", tab = 2, color = "ffFFF569", + w = { AGI=2.0, STR=1.0, STA=0.1, TOHIT=20, CRIT=22, ATTACKPOWER=1.0, + WEAPONDPS=14, BASEARMOR=0.008 } }, + { name = "敏锐", tab = 3, color = "ffFFF569", + w = { AGI=2.2, STR=1.0, STA=0.5, TOHIT=16, CRIT=20, ATTACKPOWER=1.0, DODGE=5, + WEAPONDPS=8, BASEARMOR=0.01 } }, + }, + -- 硬核潜行者: 耐 > 敏 > 力 > 攻强 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, AGI=2.5, STR=1.5, ATTACKPOWER=1.0, + TOHIT=5, CRIT=5, DODGE=5, ARMOR=0.06, + HEALTH=0.2, HEALTHREG=2.0, WEAPONDPS=5, BASEARMOR=0.02 } }, + }, + PRIEST = { + specs = { + { name = "戒律", tab = 1, color = "ff00FF96", + w = { INT=0.35, SPI=0.55, STA=0.05, HEAL=1.0, DMG=0.3, SPELLCRIT=5, MANAREG=3.0, + MANA=0.02, BASEARMOR=0.003 } }, + { name = "神圣", tab = 2, color = "ff00FF96", + w = { INT=0.35, SPI=0.55, STA=0.05, HEAL=1.0, DMG=0.3, SPELLCRIT=5, MANAREG=3.0, + MANA=0.02, BASEARMOR=0.003 } }, + { name = "暗影", tab = 3, color = "ff9482C9", + w = { INT=0.15, SPI=0.35, STA=0.05, DMG=1.0, HEAL=0.05, SPELLCRIT=6, SPELLTOHIT=14, + MANAREG=1.5, BASEARMOR=0.003 } }, + }, + -- 硬核法系(牧师): 耐 > 智 = 治疗 > 精 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, INT=2.0, HEAL=2.0, DMG=1.5, SPI=1.5, + SPELLCRIT=3, SPELLTOHIT=5, MANAREG=2.5, + ARMOR=0.06, HEALTH=0.15, HEALTHREG=1.0, BASEARMOR=0.02 } }, + }, + SHAMAN = { + specs = { + { name = "元素", tab = 1, color = "ff0070DE", + w = { INT=0.2, SPI=0.1, STA=0.05, DMG=1.0, SPELLCRIT=8, SPELLTOHIT=14, + ATTACKPOWER=0.1, MANAREG=2.0, BASEARMOR=0.005 } }, + { name = "增强", tab = 2, color = "ff0070DE", + w = { STR=2.0, AGI=1.6, STA=0.1, INT=0.2, TOHIT=18, CRIT=22, ATTACKPOWER=1.0, + DMG=0.3, SPELLCRIT=5, MANAREG=1.0, WEAPONDPS=14, BASEARMOR=0.01 } }, + { name = "恢复", tab = 3, color = "ff00FF96", + w = { INT=0.35, SPI=0.3, STA=0.05, HEAL=1.0, DMG=0.2, SPELLCRIT=5, MANAREG=3.5, + MANA=0.02, BASEARMOR=0.005 } }, + }, + -- 硬核萨满(混合): 耐 > 力=敏 > 智=精 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, STR=1.5, AGI=1.5, INT=1.0, SPI=1.0, + TOHIT=5, CRIT=5, ATTACKPOWER=0.5, HEAL=0.8, DMG=0.5, + MANAREG=2.0, ARMOR=0.06, HEALTH=0.2, HEALTHREG=1.5, + WEAPONDPS=4, BASEARMOR=0.02 } }, + }, + MAGE = { + specs = { + { name = "奥术", tab = 1, color = "ff69CCF0", + w = { INT=0.2, SPI=0.15, STA=0.4, DMG=1.0, SPELLCRIT=7, SPELLTOHIT=14, MANAREG=2.0, + MANA=0.01, BASEARMOR=0.003 } }, + { name = "火焰", tab = 2, color = "ff69CCF0", + w = { INT=0.15, SPI=0.1, STA=0.4, DMG=1.0, SPELLCRIT=9, SPELLTOHIT=14, MANAREG=2.0, + MANA=0.01, BASEARMOR=0.003 } }, + { name = "冰霜", tab = 3, color = "ff69CCF0", + w = { INT=0.15, SPI=0.1, STA=0.4, DMG=1.0, SPELLCRIT=7, SPELLTOHIT=14, MANAREG=2.0, + MANA=0.01, BASEARMOR=0.003 } }, + }, + -- 硬核法系(法师): 耐 > 智 = 法伤 > 精 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, INT=2.0, DMG=2.0, SPI=1.5, + SPELLCRIT=3, SPELLTOHIT=5, MANAREG=2.5, + ARMOR=0.08, HEALTH=0.15, HEALTHREG=1.0, BASEARMOR=0.02 } }, + }, + WARLOCK = { + specs = { + { name = "痛苦", tab = 1, color = "ff9482C9", + w = { INT=0.15, SPI=0.1, STA=0.4, DMG=1.0, SPELLCRIT=4, SPELLTOHIT=14, MANAREG=1.0, + HEALTH=0.08, BASEARMOR=0.003 } }, + { name = "恶魔", tab = 2, color = "ff9482C9", + w = { INT=0.15, SPI=0.1, STA=0.4, DMG=1.0, SPELLCRIT=6, SPELLTOHIT=14, MANAREG=1.5, + BASEARMOR=0.003 } }, + { name = "毁灭", tab = 3, color = "ff9482C9", + w = { INT=0.15, SPI=0.1, STA=0.4, DMG=1.0, SPELLCRIT=8, SPELLTOHIT=14, MANAREG=1.5, + BASEARMOR=0.003 } }, + }, + -- 硬核法系(术士): 耐 > 智 = 法伤 > 精 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, INT=2.0, DMG=2.0, SPI=1.0, + SPELLCRIT=3, SPELLTOHIT=5, MANAREG=2.0, + ARMOR=0.06, HEALTH=0.15, HEALTHREG=1.0, BASEARMOR=0.02 } }, + }, + DRUID = { + specs = { + { name = "平衡", tab = 1, color = "ffFF7D0A", + w = { INT=0.2, SPI=0.15, STA=0.05, DMG=1.0, HEAL=0.1, SPELLCRIT=7, SPELLTOHIT=14, + MANAREG=2.0, MANA=0.01, BASEARMOR=0.005 } }, + { name = "野猫", tab = 2, color = "ffFF7D0A", + w = { STR=2.4, AGI=1.4, STA=0.1, TOHIT=18, CRIT=22, ATTACKPOWER=1.0, DODGE=2, + WEAPONDPS=2, BASEARMOR=0.008 } }, + { name = "野熊", tab = 2, color = "ff69CCF0", + w = { STR=1.5, AGI=2.0, STA=2.5, TOHIT=8, CRIT=5, ATTACKPOWER=0.5, + DEFENSE=1.2, DODGE=12, ARMOR=0.12, HEALTH=0.25, BASEARMOR=0.05 } }, + { name = "恢复", tab = 3, color = "ff00FF96", + w = { INT=0.35, SPI=0.45, STA=0.05, HEAL=1.0, DMG=0.2, SPELLCRIT=5, MANAREG=3.0, + MANA=0.02, BASEARMOR=0.005 } }, + }, + -- 硬核德鲁伊(混合偏生存): 耐 > 敏 > 力 > 智 = 精 + hc = { name = "硬核", color = "ffFF4444", + w = { STA=3.0, AGI=2.0, STR=1.5, INT=1.0, SPI=1.0, + TOHIT=5, CRIT=5, ATTACKPOWER=0.5, HEAL=0.8, DMG=0.5, + DODGE=5, ARMOR=0.06, HEALTH=0.2, HEALTHREG=2.0, + WEAPONDPS=2, BASEARMOR=0.02 } }, + }, +} + +-------------------------------------------------------------------------------- +-- Armor type compatibility (class × armor subclass × level) +-- 1.0 = ideal, 0 = should never wear this +-------------------------------------------------------------------------------- + +local ARMOR_COMPAT = { + WARRIOR = { Plate=1.0, Mail=0.3, Leather=0.1, Cloth=0.05 }, + PALADIN = { Plate=1.0, Mail=0.3, Leather=0.1, Cloth=0.05 }, + HUNTER = { Mail=1.0, Leather=0.5, Cloth=0.1 }, + SHAMAN = { Mail=1.0, Leather=0.5, Cloth=0.1 }, + ROGUE = { Leather=1.0, Cloth=0.3 }, + DRUID = { Leather=1.0, Cloth=0.3 }, + PRIEST = { Cloth=1.0 }, + MAGE = { Cloth=1.0 }, + WARLOCK = { Cloth=1.0 }, +} + +local ARMOR_COMPAT_LOW = { + WARRIOR = { Mail=1.0, Leather=0.6, Cloth=0.1 }, + PALADIN = { Mail=1.0, Leather=0.6, Cloth=0.1 }, + HUNTER = { Leather=1.0, Cloth=0.3 }, + SHAMAN = { Leather=1.0, Cloth=0.3 }, + ROGUE = { Leather=1.0, Cloth=0.3 }, + DRUID = { Leather=1.0, Cloth=0.3 }, + PRIEST = { Cloth=1.0 }, + MAGE = { Cloth=1.0 }, + WARLOCK = { Cloth=1.0 }, +} + +-------------------------------------------------------------------------------- +-- Equipment slot compatibility per spec (CLASS_specIdx) +-- 2H weapons for tanks = 0.05, shields for DPS = low, etc. +-- Missing entries default to 1.0 +-------------------------------------------------------------------------------- + +local SLOT_COMPAT = { + WARRIOR_1 = { INVTYPE_SHIELD = 0.1, INVTYPE_HOLDABLE = 0.05 }, + WARRIOR_2 = { INVTYPE_SHIELD = 0.1, INVTYPE_HOLDABLE = 0.05 }, + WARRIOR_3 = { INVTYPE_2HWEAPON = 0.05, INVTYPE_HOLDABLE = 0.05 }, + + PALADIN_1 = { INVTYPE_2HWEAPON = 0.3 }, + PALADIN_2 = { INVTYPE_2HWEAPON = 0.05 }, + PALADIN_3 = { INVTYPE_SHIELD = 0.2, INVTYPE_HOLDABLE = 0.1 }, + + HUNTER_1 = { INVTYPE_SHIELD = 0 }, + HUNTER_2 = { INVTYPE_SHIELD = 0 }, + HUNTER_3 = { INVTYPE_SHIELD = 0 }, + + ROGUE_1 = { INVTYPE_2HWEAPON = 0, INVTYPE_SHIELD = 0, INVTYPE_HOLDABLE = 0 }, + ROGUE_2 = { INVTYPE_2HWEAPON = 0, INVTYPE_SHIELD = 0, INVTYPE_HOLDABLE = 0 }, + ROGUE_3 = { INVTYPE_2HWEAPON = 0, INVTYPE_SHIELD = 0, INVTYPE_HOLDABLE = 0 }, + + SHAMAN_1 = { INVTYPE_2HWEAPON = 0.3 }, + SHAMAN_2 = { INVTYPE_SHIELD = 0.3 }, + + DRUID_1 = { INVTYPE_SHIELD = 0 }, + DRUID_2 = { INVTYPE_SHIELD = 0, INVTYPE_HOLDABLE = 0 }, + DRUID_3 = { INVTYPE_SHIELD = 0, INVTYPE_HOLDABLE = 0 }, + DRUID_4 = { INVTYPE_SHIELD = 0 }, + + MAGE_1 = { INVTYPE_SHIELD = 0 }, + MAGE_2 = { INVTYPE_SHIELD = 0 }, + MAGE_3 = { INVTYPE_SHIELD = 0 }, + WARLOCK_1 = { INVTYPE_SHIELD = 0 }, + WARLOCK_2 = { INVTYPE_SHIELD = 0 }, + WARLOCK_3 = { INVTYPE_SHIELD = 0 }, + PRIEST_1 = { INVTYPE_SHIELD = 0 }, + PRIEST_2 = { INVTYPE_SHIELD = 0 }, + PRIEST_3 = { INVTYPE_SHIELD = 0 }, +} + +-------------------------------------------------------------------------------- +-- Level-based weight adjustments +-------------------------------------------------------------------------------- + +local function AdjustWeightsForLevel(baseWeights, level, isHC) + if level >= 55 then return baseWeights end + local adj = {} + for k, v in pairs(baseWeights) do adj[k] = v end + + if isHC then + -- HC: STA stays high at all levels (survival is the point) + -- Only reduce hit/crit which are less useful at low levels + if level <= 20 then + adj.SPI = (adj.SPI or 0) * 1.3 + adj.TOHIT = (adj.TOHIT or 0) * 0.2 + adj.SPELLTOHIT = (adj.SPELLTOHIT or 0) * 0.2 + adj.HEALTHREG = (adj.HEALTHREG or 0) + 1.0 + adj.ARMOR = (adj.ARMOR or 0) + 0.03 + elseif level <= 40 then + adj.SPI = (adj.SPI or 0) * 1.15 + adj.ARMOR = (adj.ARMOR or 0) + 0.02 + adj.TOHIT = (adj.TOHIT or 0) * 0.5 + adj.SPELLTOHIT = (adj.SPELLTOHIT or 0) * 0.5 + else + adj.TOHIT = (adj.TOHIT or 0) * 0.8 + adj.SPELLTOHIT = (adj.SPELLTOHIT or 0) * 0.8 + end + else + if level <= 20 then + adj.SPI = (adj.SPI or 0) * 2.5 + 0.5 + adj.STA = (adj.STA or 0) * 0.3 + adj.TOHIT = (adj.TOHIT or 0) * 0.2 + adj.SPELLTOHIT = (adj.SPELLTOHIT or 0) * 0.2 + adj.HEALTHREG = (adj.HEALTHREG or 0) + 1.5 + adj.ARMOR = (adj.ARMOR or 0) + 0.03 + elseif level <= 40 then + adj.SPI = (adj.SPI or 0) * 1.5 + 0.2 + adj.ARMOR = (adj.ARMOR or 0) + 0.02 + adj.TOHIT = (adj.TOHIT or 0) * 0.6 + adj.SPELLTOHIT = (adj.SPELLTOHIT or 0) * 0.6 + else + adj.TOHIT = (adj.TOHIT or 0) * 0.85 + adj.SPELLTOHIT = (adj.SPELLTOHIT or 0) * 0.85 + end + end + return adj +end + +-------------------------------------------------------------------------------- +-- Player info helpers +-------------------------------------------------------------------------------- + +local function GetPlayerClassToken() + local _, classEN = UnitClass("player") + if classEN then return string.upper(classEN) end + return nil +end + +local function GetPlayerLevel() + return UnitLevel("player") or 60 +end + +local function GetPrimaryTabIndex() + if not GetNumTalentTabs then return 1 end + local maxPts, maxIdx = 0, 1 + for i = 1, GetNumTalentTabs() do + local _, _, pts = GetTalentTabInfo(i) + if pts and pts > maxPts then + maxPts = pts + maxIdx = i + end + end + return maxIdx +end + +local function IsPlayerHardcore() + if IsHardcore and IsHardcore("player") then return true end + if C_TurtleWoW and C_TurtleWoW.IsHardcore and C_TurtleWoW.IsHardcore("player") then + return true + end + return false +end + +-------------------------------------------------------------------------------- +-- Item link/info utilities +-------------------------------------------------------------------------------- + +local function ExtractItemString(link) + if not link then return nil end + local _, _, itemStr = string.find(link, "(item:[%-?%d:]+)") + return itemStr +end + +-- Item quality detection from link color code +-- WoW link format: |cffXXXXXX|Hitem:...|h[Name]|h|r +local QUALITY_FROM_COLOR = { + ["9d9d9d"] = 0, -- Poor (gray) + ["ffffff"] = 1, -- Common (white) + ["1eff00"] = 2, -- Uncommon (green) + ["0070dd"] = 3, -- Rare (blue) + ["a335ee"] = 4, -- Epic (purple) + ["ff8000"] = 5, -- Legendary (orange) + ["e6cc80"] = 6, -- Artifact +} + +local QUALITY_MULT = { + [0] = 0, -- Poor: skip entirely + [1] = 0.50, -- Common: penalty + [2] = 0.90, -- Uncommon: slight penalty + [3] = 0.95, -- Rare: near full + [4] = 1.0, -- Epic: full + [5] = 1.0, -- Legendary: full + [6] = 1.0, -- Artifact: full +} + +local function GetQualityFromLink(link) + if not link then return -1 end + local _, _, hex = string.find(link, "|cff(%x%x%x%x%x%x)") + if hex then + return QUALITY_FROM_COLOR[string.lower(hex)] or 1 + end + return 1 +end + +local function GetQualityFromTooltip(tooltip) + if not tooltip then return 1 end + local tipName = tooltip:GetName() + if not tipName then return 1 end + local nameObj = getglobal(tipName .. "TextLeft1") + if not nameObj then return 1 end + local r, g, b = nameObj:GetTextColor() + if not r then return 1 end + -- Gray: r≈0.62, g≈0.62, b≈0.62 + if r < 0.7 and g < 0.7 and b < 0.7 then return 0 end + -- White: r=1, g=1, b=1 + if r > 0.95 and g > 0.95 and b > 0.95 then return 1 end + -- Green: r≈0.12, g=1, b=0 + if g > 0.9 and r < 0.2 then return 2 end + -- Blue: r=0, g≈0.44, b≈0.87 + if b > 0.8 and r < 0.1 then return 3 end + -- Purple: r≈0.64, g≈0.21, b≈0.93 + if b > 0.85 and r > 0.5 then return 4 end + -- Orange: r=1, g≈0.5, b=0 + if r > 0.9 and g > 0.4 and b < 0.1 then return 5 end + return 1 +end + +-- Normalize item class/subclass strings (Chinese client support) +local ARMOR_CLASS_NAMES = { Armor=true, ["护甲"]=true, ["铠甲"]=true } +local ARMOR_MISC_NAMES = { Miscellaneous=true, ["其它"]=true, ["杂项"]=true, ["其他"]=true } +local SHIELD_NAMES = { Shield=true, Shields=true, ["盾牌"]=true, ["盾"]=true } +local SUBCLASS_NORMALIZE = { + Plate="Plate", ["板甲"]="Plate", ["铠甲"]="Plate", + Mail="Mail", ["锁甲"]="Mail", ["链甲"]="Mail", + Leather="Leather", ["皮甲"]="Leather", ["皮革"]="Leather", + Cloth="Cloth", ["布甲"]="Cloth", ["布料"]="Cloth", +} + +-- Parse equipLoc and armor type directly from tooltip text +local SLOT_TEXT_TO_INVTYPE = { + ["Head"]="INVTYPE_HEAD", ["头部"]="INVTYPE_HEAD", + ["Neck"]="INVTYPE_NECK", ["颈部"]="INVTYPE_NECK", + ["Shoulder"]="INVTYPE_SHOULDER", ["肩部"]="INVTYPE_SHOULDER", + ["Shirt"]="INVTYPE_BODY", ["衬衣"]="INVTYPE_BODY", + ["Chest"]="INVTYPE_CHEST", ["胸部"]="INVTYPE_CHEST", + ["Robe"]="INVTYPE_ROBE", ["胸甲"]="INVTYPE_ROBE", + ["Waist"]="INVTYPE_WAIST", ["腰部"]="INVTYPE_WAIST", + ["Legs"]="INVTYPE_LEGS", ["腿部"]="INVTYPE_LEGS", + ["Feet"]="INVTYPE_FEET", ["脚"]="INVTYPE_FEET", ["足"]="INVTYPE_FEET", + ["Wrist"]="INVTYPE_WRIST", ["手腕"]="INVTYPE_WRIST", + ["Hands"]="INVTYPE_HAND", ["手"]="INVTYPE_HAND", + ["Finger"]="INVTYPE_FINGER", ["手指"]="INVTYPE_FINGER", + ["Trinket"]="INVTYPE_TRINKET", ["饰品"]="INVTYPE_TRINKET", + ["Back"]="INVTYPE_CLOAK", ["背部"]="INVTYPE_CLOAK", + ["Main Hand"]="INVTYPE_WEAPONMAINHAND", ["主手"]="INVTYPE_WEAPONMAINHAND", + ["One-Hand"]="INVTYPE_WEAPON", ["单手"]="INVTYPE_WEAPON", + ["Off Hand"]="INVTYPE_WEAPONOFFHAND", ["副手"]="INVTYPE_WEAPONOFFHAND", + ["Two-Hand"]="INVTYPE_2HWEAPON", ["双手"]="INVTYPE_2HWEAPON", + ["Held In Off-hand"]="INVTYPE_HOLDABLE", ["副手物品"]="INVTYPE_HOLDABLE", + ["Ranged"]="INVTYPE_RANGED", ["远程"]="INVTYPE_RANGED", + ["Thrown"]="INVTYPE_THROWN", ["投掷"]="INVTYPE_THROWN", + ["Relic"]="INVTYPE_RELIC", ["圣物"]="INVTYPE_RELIC", + ["Shield"]="INVTYPE_SHIELD", ["盾牌"]="INVTYPE_SHIELD", +} + +local function ParseEquipLocFromTooltip(tooltip) + if not tooltip then return nil, nil, nil end + local tipName = tooltip:GetName() + if not tipName then return nil, nil, nil end + local numLines = tooltip:NumLines() + if not numLines or numLines < 2 then return nil, nil, nil end + + local foundEquipLoc, foundArmorType, foundItemClass + for i = 2, math.min(numLines, 8) do + local leftObj = getglobal(tipName .. "TextLeft" .. i) + local rightObj = getglobal(tipName .. "TextRight" .. i) + if leftObj then + local leftText = leftObj:GetText() + if leftText and leftText ~= "" then + local invtype = SLOT_TEXT_TO_INVTYPE[leftText] + if invtype then + foundEquipLoc = invtype + if rightObj then + local rightText = rightObj:GetText() + if rightText and rightText ~= "" then + foundArmorType = rightText + if ARMOR_CLASS_NAMES[rightText] or SUBCLASS_NORMALIZE[rightText] + or SHIELD_NAMES[rightText] then + foundItemClass = "Armor" + end + end + end + break + end + end + end + end + return foundEquipLoc, foundArmorType, foundItemClass +end + +local GS_EQUIP_LOCS = { + INVTYPE_HEAD=true, INVTYPE_NECK=true, INVTYPE_SHOULDER=true, + INVTYPE_BODY=true, INVTYPE_CHEST=true, INVTYPE_ROBE=true, + INVTYPE_WAIST=true, INVTYPE_LEGS=true, INVTYPE_FEET=true, + INVTYPE_WRIST=true, INVTYPE_HAND=true, + INVTYPE_FINGER=true, INVTYPE_TRINKET=true, + INVTYPE_CLOAK=true, + INVTYPE_WEAPON=true, INVTYPE_2HWEAPON=true, INVTYPE_WEAPONMAINHAND=true, + INVTYPE_SHIELD=true, INVTYPE_WEAPONOFFHAND=true, INVTYPE_HOLDABLE=true, + INVTYPE_RANGED=true, INVTYPE_RANGEDRIGHT=true, INVTYPE_THROWN=true, + INVTYPE_RELIC=true, +} + +-------------------------------------------------------------------------------- +-- Tooltip text parser (zero external dependency) +-------------------------------------------------------------------------------- + +local STAT_PATTERNS = { + -- Weapon DPS (float, e.g. "(每秒伤害19.7)" or "(12.3 damage per second)") + { p = "%((%d+%.?%d*) damage per second%)", s = "WEAPONDPS" }, + { p = "每秒伤害(%d+%.?%d*)", s = "WEAPONDPS" }, + { p = "每秒(%d+%.?%d*)点伤害", s = "WEAPONDPS" }, + + -- Base armor value ("63点护甲" / "123 护甲" / "500 Armor", no + prefix) + { p = "^(%d+)点护甲", s = "BASEARMOR" }, + { p = "^(%d+) 点护甲", s = "BASEARMOR" }, + { p = "^(%d+) 护甲$", s = "BASEARMOR" }, + { p = "^(%d+) Armor$", s = "BASEARMOR" }, + + -- Bonus armor ("+30 Armor" / "+30 护甲" from enchants) + { p = "%+(%d+) Armor", s = "ARMOR" }, + { p = "%+(%d+) 护甲", s = "ARMOR" }, + { p = "护甲值提高(%d+)", s = "ARMOR" }, + + -- Primary stats + { p = "%+(%d+) Strength", s = "STR" }, + { p = "%+(%d+) Agility", s = "AGI" }, + { p = "%+(%d+) Stamina", s = "STA" }, + { p = "%+(%d+) Intellect", s = "INT" }, + { p = "%+(%d+) Spirit", s = "SPI" }, + { p = "%+(%d+) 力量", s = "STR" }, + { p = "%+(%d+) 敏捷", s = "AGI" }, + { p = "%+(%d+) 耐力", s = "STA" }, + { p = "%+(%d+) 智力", s = "INT" }, + { p = "%+(%d+) 精神", s = "SPI" }, + + -- Crit (spell > ranged > melee, more specific patterns first) + { p = "critical strike with spells by (%d+)%%", s = "SPELLCRIT" }, + { p = "法术暴击.-(%d+)%%", s = "SPELLCRIT" }, + { p = "法术.-致命一击.-(%d+)%%", s = "SPELLCRIT" }, + { p = "critical strike with ranged weapons by (%d+)%%", s = "RANGEDCRIT" }, + { p = "远程暴击.-(%d+)%%", s = "RANGEDCRIT" }, + { p = "critical strike by (%d+)%%", s = "CRIT" }, + { p = "致命一击.-(%d+)%%", s = "CRIT" }, + { p = "暴击.-(%d+)%%", s = "CRIT" }, + + -- Hit + { p = "hit with spells by (%d+)%%", s = "SPELLTOHIT" }, + { p = "法术命中.-(%d+)%%", s = "SPELLTOHIT" }, + { p = "chance to hit by (%d+)%%", s = "TOHIT" }, + { p = "命中.-(%d+)%%", s = "TOHIT" }, + + -- Attack Power + { p = "%+(%d+) ranged Attack Power", s = "RANGEDATTACKPOWER" }, + { p = "%+(%d+) 远程攻击强度", s = "RANGEDATTACKPOWER" }, + { p = "远程攻击强度提高(%d+)", s = "RANGEDATTACKPOWER" }, + { p = "%+(%d+) Attack Power", s = "ATTACKPOWER" }, + { p = "%+(%d+) 攻击强度", s = "ATTACKPOWER" }, + { p = "攻击强度提高(%d+)", s = "ATTACKPOWER" }, + + -- Spell damage + healing (combined, MUST be before individual patterns) + { p = "damage and healing done by magical spells and effects by up to (%d+)", s = "DMG", a = "HEAL" }, + { p = "伤害和治疗效果.-最多(%d+)", s = "DMG", a = "HEAL" }, + { p = "法术伤害和治疗.-(%d+)", s = "DMG", a = "HEAL" }, + + -- Healing only + { p = "healing done by spells and effects by up to (%d+)", s = "HEAL" }, + { p = "Increases healing done by up to (%d+)", s = "HEAL" }, + { p = "治疗效果.-最多(%d+)", s = "HEAL" }, + { p = "治疗法术.-最多(%d+)", s = "HEAL" }, + { p = "治疗量.-最多(%d+)", s = "HEAL" }, + + -- Spell damage only + { p = "damage done by magical spells and effects by up to (%d+)", s = "DMG" }, + { p = "法术伤害.-最多(%d+)", s = "DMG" }, + { p = "魔法伤害.-最多(%d+)", s = "DMG" }, + + -- Mana/health regen + { p = "Restores (%d+) mana per 5 sec", s = "MANAREG" }, + { p = "(%d+) mana per 5 sec", s = "MANAREG" }, + { p = "每5秒恢复(%d+)点法力", s = "MANAREG" }, + { p = "每5秒回复(%d+)点法力", s = "MANAREG" }, + { p = "5秒回复(%d+)点法力", s = "MANAREG" }, + { p = "Restores (%d+) health per 5 sec", s = "HEALTHREG" }, + { p = "每5秒恢复(%d+)点生命", s = "HEALTHREG" }, + { p = "每5秒回复(%d+)点生命", s = "HEALTHREG" }, + + -- Defense + { p = "Increased Defense %+(%d+)", s = "DEFENSE" }, + { p = "Defense %+(%d+)", s = "DEFENSE" }, + { p = "%+(%d+) Defense", s = "DEFENSE" }, + { p = "防御技能提高(%d+)", s = "DEFENSE" }, + { p = "防御等级提高(%d+)", s = "DEFENSE" }, + + -- Avoidance + { p = "dodge.-by (%d+)%%", s = "DODGE" }, + { p = "躲闪.-(%d+)%%", s = "DODGE" }, + { p = "parry.-by (%d+)%%", s = "PARRY" }, + { p = "招架.-(%d+)%%", s = "PARRY" }, + { p = "block attacks.-by (%d+)%%", s = "BLOCK" }, + { p = "格挡几率.-(%d+)%%", s = "BLOCK" }, + { p = "格挡率.-(%d+)%%", s = "BLOCK" }, + { p = "block value.-by (%d+)", s = "BLOCKVALUE" }, + { p = "格挡值.-(%d+)", s = "BLOCKVALUE" }, + + -- HP/Mana + { p = "%+(%d+) Health", s = "HEALTH" }, + { p = "%+(%d+) Hit Points", s = "HEALTH" }, + { p = "%+(%d+) 生命值", s = "HEALTH" }, + { p = "%+(%d+) Mana", s = "MANA" }, + { p = "%+(%d+) 法力值", s = "MANA" }, +} + +-------------------------------------------------------------------------------- +-- Debug helper: /gsdebug to toggle +-------------------------------------------------------------------------------- +local GS_DEBUG = false +local function GSDebug(msg) + if GS_DEBUG and DEFAULT_CHAT_FRAME then + DEFAULT_CHAT_FRAME:AddMessage("|cffFFFF00[GS]|r " .. tostring(msg)) + end +end + +SLASH_GSDEBUG1 = "/gsdebug" +SlashCmdList["GSDEBUG"] = function() + GS_DEBUG = not GS_DEBUG + DEFAULT_CHAT_FRAME:AddMessage("|cffFFFF00[GearScore]|r Debug: " .. (GS_DEBUG and "ON" or "OFF")) +end + +-------------------------------------------------------------------------------- +-- Stat parser: scan a VISIBLE tooltip's text lines directly +-- This is the most reliable method — no hidden tooltip, no library needed +-------------------------------------------------------------------------------- + +local function ScanTooltipForStats(tooltip) + if not tooltip then return nil end + local tipName = tooltip:GetName() + if not tipName then return nil end + + local numLines = tooltip:NumLines() + if not numLines or numLines < 2 then return nil end + + local stats = {} + for i = 2, numLines do + local lineObj = getglobal(tipName .. "TextLeft" .. i) + if lineObj then + local text = lineObj:GetText() + if text and text ~= "" then + for _, pat in ipairs(STAT_PATTERNS) do + local _, _, val = string.find(text, pat.p) + if val then + local n = tonumber(val) + if n and n > 0 then + stats[pat.s] = (stats[pat.s] or 0) + n + if pat.a then + stats[pat.a] = (stats[pat.a] or 0) + n + end + GSDebug(" L" .. i .. ": " .. pat.s .. "=" .. n .. " (" .. text .. ")") + end + break + end + end + end + end + end + + local hasAny = false + for _ in pairs(stats) do hasAny = true; break end + return hasAny and stats or nil +end + +local function ParseItemWithLib(link) + if not link then return nil end + if not AceLibrary or not AceLibrary.HasInstance then return nil end + if not AceLibrary:HasInstance("ItemBonusLib-1.0") then return nil end + local lib = AceLibrary("ItemBonusLib-1.0") + if not lib or not lib.ScanItem then return nil end + local ok, result = pcall(function() return lib:ScanItem(link, true) end) + if ok and result then + local hasAny = false + for _ in pairs(result) do hasAny = true; break end + if hasAny then return result end + end + return nil +end + +-------------------------------------------------------------------------------- +-- Compatibility multipliers +-------------------------------------------------------------------------------- + +local function GetArmorCompat(classToken, itemClass, itemSubClass, level) + if not itemClass or not ARMOR_CLASS_NAMES[itemClass] then return 1.0 end + if not itemSubClass or itemSubClass == "" then return 1.0 end + if ARMOR_MISC_NAMES[itemSubClass] then return 1.0 end + if SHIELD_NAMES[itemSubClass] then return 1.0 end + + local normalizedSub = SUBCLASS_NORMALIZE[itemSubClass] + if not normalizedSub then return 1.0 end + + local tbl = (level < 40) and ARMOR_COMPAT_LOW or ARMOR_COMPAT + local classTbl = tbl[classToken] + if not classTbl then return 1.0 end + return classTbl[normalizedSub] or 0.3 +end + +local function GetSlotCompat(classToken, specIdx, equipLoc) + if not equipLoc or equipLoc == "" then return 1.0 end + local key = classToken .. "_" .. specIdx + local tbl = SLOT_COMPAT[key] + if not tbl then return 1.0 end + local val = tbl[equipLoc] + if val ~= nil then return val end + return 1.0 +end + +-------------------------------------------------------------------------------- +-- Core scoring: 1-10 normalized scale +-- Score = (actual_EP / ideal_EP) * 10 * equipment_compat +-- ideal_EP = total_budget * best_efficiency_for_spec +-------------------------------------------------------------------------------- + +local function GetBestEfficiency(weights) + local best = 0 + for stat, w in pairs(weights) do + local cost = BUDGET_COST[stat] + if cost and cost > 0 and w > 0 then + local eff = w / cost + if eff > best then best = eff end + end + end + return best +end + +local function CalcRawEP(bonuses, weights) + if not bonuses or not weights then return 0 end + local ep = 0 + for stat, value in pairs(bonuses) do + local w = weights[stat] + if w and w > 0 then + ep = ep + value * w + end + end + return ep +end + +local function CalcTotalBudget(bonuses) + if not bonuses then return 0 end + local total = 0 + for stat, value in pairs(bonuses) do + local cost = BUDGET_COST[stat] + if cost and cost > 0 then + total = total + math.abs(value) * cost + end + end + return total +end + +local function CalcNormalizedScore(bonuses, weights, armorCompat, slotCompat) + local rawEP = CalcRawEP(bonuses, weights) + local totalBudget = CalcTotalBudget(bonuses) + local bestEff = GetBestEfficiency(weights) + + if totalBudget <= 0 or bestEff <= 0 then return 0 end + + local idealEP = totalBudget * bestEff + local rawScore = (rawEP / idealEP) * 10 + + local compat = (armorCompat or 1.0) * (slotCompat or 1.0) + local finalScore = rawScore * compat + + if finalScore < 0 then finalScore = 0 end + if finalScore > 10 then finalScore = 10 end + + return math.floor(finalScore * 10 + 0.5) / 10 +end + +-------------------------------------------------------------------------------- +-- Score color (1-10 scale) +-------------------------------------------------------------------------------- + +local function ScoreColorHex(score) + if score >= 9 then return "ffFF8800" end + if score >= 7 then return "ff00FF00" end + if score >= 5 then return "ffFFFFFF" end + if score >= 3 then return "ffFFFF00" end + return "ffFF4444" +end + +local function ScoreLabel(score) + if score >= 9 then return "极品" end + if score >= 7 then return "优秀" end + if score >= 5 then return "适用" end + if score >= 3 then return "一般" end + return "不适" +end + +-------------------------------------------------------------------------------- +-- Main tooltip function +-------------------------------------------------------------------------------- + +function GS:AddScoreToTooltip(tooltip, link) + if not tooltip or not link then return end + if SFramesDB and SFramesDB.gearScore == false then return end + if tooltip._gsScoreAdded then return end + + local classToken = GetPlayerClassToken() + if not classToken then return end + local classData = WEIGHTS[classToken] + if not classData then return end + + GSDebug("Processing: " .. tostring(link)) + + -- Step 0: Check item quality — skip gray, penalize white + local quality = GetQualityFromLink(link) + if quality < 0 then + quality = GetQualityFromTooltip(tooltip) + end + local qualityMult = QUALITY_MULT[quality] or 0.75 + if quality == 0 then + GSDebug("Skipped: poor quality (gray) item") + return + end + GSDebug("Quality=" .. quality .. " mult=" .. qualityMult) + + -- Step 1: Try GetItemInfo with extracted item string (more reliable than full link) + local equipLoc, itemClass, itemSubClass + pcall(function() + local itemStr = ExtractItemString(link) + local infoArg = itemStr or link + GSDebug("GetItemInfo arg: " .. tostring(infoArg)) + local results = { GetItemInfo(infoArg) } + if results[1] then + itemClass = results[6] + itemSubClass = results[7] + for idx = 8, 10 do + local v = results[idx] + if type(v) == "string" and (v == "" or string.find(v, "^INVTYPE")) then + equipLoc = v + break + end + end + end + GSDebug("GetItemInfo: equip=" .. tostring(equipLoc) + .. " class=" .. tostring(itemClass) .. " sub=" .. tostring(itemSubClass)) + end) + + -- Step 2: If GetItemInfo failed, parse equip slot from tooltip text + if not equipLoc then + local ttEquip, ttArmor, ttClass = ParseEquipLocFromTooltip(tooltip) + if ttEquip then + equipLoc = ttEquip + if ttArmor and not itemSubClass then itemSubClass = ttArmor end + if ttClass and not itemClass then itemClass = ttClass end + GSDebug("Parsed from tooltip: equip=" .. tostring(equipLoc) .. " armor=" .. tostring(ttArmor)) + end + end + + -- Skip bags, ammo, tabards + if equipLoc == "INVTYPE_BAG" or equipLoc == "INVTYPE_AMMO" or equipLoc == "INVTYPE_TABARD" then + GSDebug("Skipped: bag/ammo/tabard") + return + end + + -- Skip non-equippable items (only if we got valid info) + if equipLoc and equipLoc ~= "" and not GS_EQUIP_LOCS[equipLoc] then + GSDebug("Skipped: not equippable (" .. tostring(equipLoc) .. ")") + return + end + + -- Step 3: Parse stats - try library first, then scan visible tooltip text + local bonuses = ParseItemWithLib(link) + if bonuses then + GSDebug("Stats from ItemBonusLib") + else + bonuses = ScanTooltipForStats(tooltip) + if bonuses then + GSDebug("Stats from tooltip text") + end + end + + if not bonuses then + GSDebug("No stats found, skipping") + return + end + + -- Step 4: No equipLoc = not equipment (potion, food, etc.) → skip + if not equipLoc or equipLoc == "" then + GSDebug("No equipLoc, not equipment, skipping") + return + end + + local level = GetPlayerLevel() + local primaryTab = GetPrimaryTabIndex() + local isHC = IsPlayerHardcore() + + local armorCompat = GetArmorCompat(classToken, itemClass, itemSubClass, level) + GSDebug("ArmorCompat=" .. armorCompat .. " class=" .. classToken) + + local specs = classData.specs + if not specs or table.getn(specs) == 0 then return end + + local scores = {} + local anyShow = false + for i, spec in ipairs(specs) do + local w = AdjustWeightsForLevel(spec.w, level, false) + local slotCompat = GetSlotCompat(classToken, i, equipLoc) + local s = CalcNormalizedScore(bonuses, w, armorCompat, slotCompat) + s = math.floor(s * qualityMult * 10 + 0.5) / 10 + if s < 1.0 and s > 0 then s = 1.0 end + table.insert(scores, { + name = spec.name, + color = spec.color, + score = s, + isPrimary = (spec.tab == primaryTab), + label = ScoreLabel(s), + }) + if s > 0 then anyShow = true end + end + + local hcScore = 0 + if classData.hc then + local hw = AdjustWeightsForLevel(classData.hc.w, level, true) + hcScore = CalcNormalizedScore(bonuses, hw, armorCompat, 1.0) + hcScore = math.floor(hcScore * qualityMult * 10 + 0.5) / 10 + if hcScore < 1.0 and hcScore > 0 then hcScore = 1.0 end + if hcScore > 0 then anyShow = true end + end + + if not anyShow then return end + + tooltip._gsScoreAdded = true + + tooltip:AddLine(" ") + tooltip:AddLine("|cffffd700── 装备评分 ──|r") + + for _, sd in ipairs(scores) do + local star = sd.isPrimary and "★ " or " " + local sStr = string.format("%.1f", sd.score) + local sColor = ScoreColorHex(sd.score) + local left = star .. "|c" .. sd.color .. sd.name .. "|r" + local right = "|c" .. sColor .. sStr .. " " .. sd.label .. "|r" + tooltip:AddDoubleLine(left, right, 1,1,1, 1,1,1) + end + + if classData.hc and hcScore > 0 then + local hcSColor = ScoreColorHex(hcScore) + local hcStar = isHC and "★ " or " " + local left = hcStar .. "|c" .. classData.hc.color .. "硬核|r" + local right = "|c" .. hcSColor .. string.format("%.1f", hcScore) + .. " " .. ScoreLabel(hcScore) .. "|r" + tooltip:AddDoubleLine(left, right, 1,1,1, 1,1,1) + end + + tooltip:Show() +end + +-------------------------------------------------------------------------------- +-- Self-contained tooltip hooks +-------------------------------------------------------------------------------- + +local function GS_TryEnhance(tooltip, link) + if not link then return end + pcall(function() GS:AddScoreToTooltip(tooltip, link) end) +end + +function GS:HookTooltips() + if self._hooked then return end + self._hooked = true + + local origHide = GameTooltip:GetScript("OnHide") + GameTooltip:SetScript("OnHide", function() + this._gsScoreAdded = nil + if origHide then origHide() end + end) + + local origBag = GameTooltip.SetBagItem + GameTooltip.SetBagItem = function(self, bag, slot) + self._gsScoreAdded = nil + local r1, r2, r3 = origBag(self, bag, slot) + GS_TryEnhance(self, GetContainerItemLink(bag, slot)) + return r1, r2, r3 + end + + local origInv = GameTooltip.SetInventoryItem + GameTooltip.SetInventoryItem = function(self, unit, slotId) + self._gsScoreAdded = nil + local r1, r2, r3 = origInv(self, unit, slotId) + if unit and slotId then + GS_TryEnhance(self, GetInventoryItemLink(unit, slotId)) + end + return r1, r2, r3 + end + + if GameTooltip.SetMerchantItem then + local orig = GameTooltip.SetMerchantItem + GameTooltip.SetMerchantItem = function(self, idx) + self._gsScoreAdded = nil + orig(self, idx) + if GetMerchantItemLink then GS_TryEnhance(self, GetMerchantItemLink(idx)) end + end + end + + if GameTooltip.SetQuestItem then + local orig = GameTooltip.SetQuestItem + GameTooltip.SetQuestItem = function(self, qtype, idx) + self._gsScoreAdded = nil + orig(self, qtype, idx) + if GetQuestItemLink then GS_TryEnhance(self, GetQuestItemLink(qtype, idx)) end + end + end + + if GameTooltip.SetQuestLogItem then + local orig = GameTooltip.SetQuestLogItem + GameTooltip.SetQuestLogItem = function(self, itype, idx) + self._gsScoreAdded = nil + orig(self, itype, idx) + if GetQuestLogItemLink then GS_TryEnhance(self, GetQuestLogItemLink(itype, idx)) end + end + end + + if GameTooltip.SetLootItem then + local orig = GameTooltip.SetLootItem + GameTooltip.SetLootItem = function(self, idx) + self._gsScoreAdded = nil + orig(self, idx) + if GetLootSlotLink then GS_TryEnhance(self, GetLootSlotLink(idx)) end + end + end + + if GameTooltip.SetLootRollItem then + local orig = GameTooltip.SetLootRollItem + GameTooltip.SetLootRollItem = function(self, rollId) + self._gsScoreAdded = nil + orig(self, rollId) + if GetLootRollItemLink then GS_TryEnhance(self, GetLootRollItemLink(rollId)) end + end + end + + if GameTooltip.SetAuctionItem then + local orig = GameTooltip.SetAuctionItem + GameTooltip.SetAuctionItem = function(self, atype, idx) + self._gsScoreAdded = nil + orig(self, atype, idx) + if GetAuctionItemLink then GS_TryEnhance(self, GetAuctionItemLink(atype, idx)) end + end + end + + if GameTooltip.SetTradeSkillItem then + local orig = GameTooltip.SetTradeSkillItem + GameTooltip.SetTradeSkillItem = function(self, skillIdx, reagentIdx) + self._gsScoreAdded = nil + orig(self, skillIdx, reagentIdx) + local link + if reagentIdx then + if GetTradeSkillReagentItemLink then link = GetTradeSkillReagentItemLink(skillIdx, reagentIdx) end + else + if GetTradeSkillItemLink then link = GetTradeSkillItemLink(skillIdx) end + end + GS_TryEnhance(self, link) + end + end + + if GameTooltip.SetCraftItem then + local orig = GameTooltip.SetCraftItem + GameTooltip.SetCraftItem = function(self, skill, slot) + self._gsScoreAdded = nil + orig(self, skill, slot) + if GetCraftReagentItemLink then GS_TryEnhance(self, GetCraftReagentItemLink(skill, slot)) end + end + end + + if GameTooltip.SetTradePlayerItem then + local orig = GameTooltip.SetTradePlayerItem + GameTooltip.SetTradePlayerItem = function(self, idx) + self._gsScoreAdded = nil + orig(self, idx) + if GetTradePlayerItemLink then GS_TryEnhance(self, GetTradePlayerItemLink(idx)) end + end + end + + if GameTooltip.SetTradeTargetItem then + local orig = GameTooltip.SetTradeTargetItem + GameTooltip.SetTradeTargetItem = function(self, idx) + self._gsScoreAdded = nil + orig(self, idx) + if GetTradeTargetItemLink then GS_TryEnhance(self, GetTradeTargetItemLink(idx)) end + end + end + + if GameTooltip.SetInboxItem then + local orig = GameTooltip.SetInboxItem + GameTooltip.SetInboxItem = function(self, mailID, attachIdx) + self._gsScoreAdded = nil + orig(self, mailID, attachIdx) + local left1 = getglobal("GameTooltipTextLeft1") + if left1 and GetItemLinkByName then + GS_TryEnhance(self, GetItemLinkByName(left1:GetText())) + end + end + end + + local origRef = SetItemRef + if origRef then + SetItemRef = function(link, text, button) + origRef(link, text, button) + if IsAltKeyDown() or IsShiftKeyDown() or IsControlKeyDown() then return end + pcall(function() + local _, _, itemStr = string.find(link or "", "(item:[%-?%d:]+)") + if itemStr then + ItemRefTooltip._gsScoreAdded = nil + GS:AddScoreToTooltip(ItemRefTooltip, itemStr) + end + end) + end + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- + +local initFrame = CreateFrame("Frame") +initFrame:RegisterEvent("PLAYER_ENTERING_WORLD") +initFrame:SetScript("OnEvent", function() + initFrame:UnregisterEvent("PLAYER_ENTERING_WORLD") + GS:HookTooltips() +end) diff --git a/IconMap.lua b/IconMap.lua new file mode 100644 index 0000000..ac6323c --- /dev/null +++ b/IconMap.lua @@ -0,0 +1,108 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI Icon Map (icon.tga) +-- +-- Texture: Interface\AddOns\Nanami-UI\img\icon +-- Size: 512x512 (8x8 grid, each cell 64x64) +-- Format: { left, right, top, bottom } tex coords +-- +-- Step = 1/8 = 0.125 per cell +-- +-- Layout (8 columns x 8 rows): +-- Row 1: logo | save | close | offline | quest | alliance | horde | character +-- Row 2: chat | settings | ai | backpack | mount | achieve | gold | friends +-- Row 3: exit | party | loot | dragon | profession | logout | worldmap | talent +-- Row 4: casting | attack | damage | latency | mail | questlog | spellbook | merchant +-- Row 5: star | potion | skull | heal | house | scroll | herb | key +-- Row 6: tank | auction | fishing | calendar | dungeon | lfg | charsheet | help +-- Row 7: sound | search | honor | menu | store | buff | ranged | speed +-- Row 8: energy | poison | armor | alchemy | cooking | camp | hearthstone| mining +-------------------------------------------------------------------------------- + +SFrames.ICON_PATH = "Interface\\AddOns\\Nanami-UI\\img\\icon" + +SFrames.ICON_TCOORDS = { + -- Row 1 (top = 0, bottom = 0.125) + ["logo"] = { 0, 0.125, 0, 0.125 }, -- R1C1 + ["save"] = { 0.125, 0.25, 0, 0.125 }, -- R1C2 + ["close"] = { 0.25, 0.375, 0, 0.125 }, -- R1C3 + ["offline"] = { 0.375, 0.5, 0, 0.125 }, -- R1C4 + ["quest"] = { 0.5, 0.625, 0, 0.125 }, -- R1C5 + ["alliance"] = { 0.625, 0.75, 0, 0.125 }, -- R1C6 + ["horde"] = { 0.75, 0.875, 0, 0.125 }, -- R1C7 + ["character"] = { 0.875, 1.0, 0, 0.125 }, -- R1C8 + + -- Row 2 (top = 0.125, bottom = 0.25) + ["chat"] = { 0, 0.125, 0.125, 0.25 }, -- R2C1 + ["settings"] = { 0.125, 0.25, 0.125, 0.25 }, -- R2C2 + ["ai"] = { 0.25, 0.375, 0.125, 0.25 }, -- R2C3 + ["backpack"] = { 0.375, 0.5, 0.125, 0.25 }, -- R2C4 + ["mount"] = { 0.5, 0.625, 0.125, 0.25 }, -- R2C5 + ["achieve"] = { 0.625, 0.75, 0.125, 0.25 }, -- R2C6 + ["gold"] = { 0.75, 0.875, 0.125, 0.25 }, -- R2C7 + ["friends"] = { 0.875, 1.0, 0.125, 0.25 }, -- R2C8 + + -- Row 3 (top = 0.25, bottom = 0.375) + ["exit"] = { 0, 0.125, 0.25, 0.375 }, -- R3C1 + ["party"] = { 0.125, 0.25, 0.25, 0.375 }, -- R3C2 + ["loot"] = { 0.25, 0.375, 0.25, 0.375 }, -- R3C3 + ["dragon"] = { 0.375, 0.5, 0.25, 0.375 }, -- R3C4 + ["profession"] = { 0.5, 0.625, 0.25, 0.375 }, -- R3C5 + ["logout"] = { 0.625, 0.75, 0.25, 0.375 }, -- R3C6 + ["worldmap"] = { 0.75, 0.875, 0.25, 0.375 }, -- R3C7 + ["talent"] = { 0.875, 1.0, 0.25, 0.375 }, -- R3C8 + + -- Row 4 (top = 0.375, bottom = 0.5) + ["casting"] = { 0, 0.125, 0.375, 0.5 }, -- R4C1 + ["attack"] = { 0.125, 0.25, 0.375, 0.5 }, -- R4C2 + ["damage"] = { 0.25, 0.375, 0.375, 0.5 }, -- R4C3 + ["latency"] = { 0.375, 0.5, 0.375, 0.5 }, -- R4C4 + ["mail"] = { 0.5, 0.625, 0.375, 0.5 }, -- R4C5 + ["questlog"] = { 0.625, 0.75, 0.375, 0.5 }, -- R4C6 + ["spellbook"] = { 0.75, 0.875, 0.375, 0.5 }, -- R4C7 + ["merchant"] = { 0.875, 1.0, 0.375, 0.5 }, -- R4C8 + + -- Row 5 (top = 0.5, bottom = 0.625) + ["star"] = { 0, 0.125, 0.5, 0.625 }, -- R5C1 + ["potion"] = { 0.125, 0.25, 0.5, 0.625 }, -- R5C2 + ["skull"] = { 0.25, 0.375, 0.5, 0.625 }, -- R5C3 + ["heal"] = { 0.375, 0.5, 0.5, 0.625 }, -- R5C4 + ["house"] = { 0.5, 0.625, 0.5, 0.625 }, -- R5C5 + ["scroll"] = { 0.625, 0.75, 0.5, 0.625 }, -- R5C6 + ["herb"] = { 0.75, 0.875, 0.5, 0.625 }, -- R5C7 + ["key"] = { 0.875, 1.0, 0.5, 0.625 }, -- R5C8 + + -- Row 6 (top = 0.625, bottom = 0.75) + ["tank"] = { 0, 0.125, 0.625, 0.75 }, -- R6C1 + ["auction"] = { 0.125, 0.25, 0.625, 0.75 }, -- R6C2 + ["fishing"] = { 0.25, 0.375, 0.625, 0.75 }, -- R6C3 + ["calendar"] = { 0.375, 0.5, 0.625, 0.75 }, -- R6C4 + ["dungeon"] = { 0.5, 0.625, 0.625, 0.75 }, -- R6C5 + ["lfg"] = { 0.625, 0.75, 0.625, 0.75 }, -- R6C6 + ["charsheet"] = { 0.75, 0.875, 0.625, 0.75 }, -- R6C7 + ["help"] = { 0.875, 1.0, 0.625, 0.75 }, -- R6C8 + + -- Row 7 (top = 0.75, bottom = 0.875) + ["sound"] = { 0, 0.125, 0.75, 0.875 }, -- R7C1 + ["search"] = { 0.125, 0.25, 0.75, 0.875 }, -- R7C2 + ["honor"] = { 0.25, 0.375, 0.75, 0.875 }, -- R7C3 + ["menu"] = { 0.375, 0.5, 0.75, 0.875 }, -- R7C4 + ["store"] = { 0.5, 0.625, 0.75, 0.875 }, -- R7C5 + ["buff"] = { 0.625, 0.75, 0.75, 0.875 }, -- R7C6 + ["ranged"] = { 0.75, 0.875, 0.75, 0.875 }, -- R7C7 + ["speed"] = { 0.875, 1.0, 0.75, 0.875 }, -- R7C8 + + -- Row 8 (top = 0.875, bottom = 1.0) + ["energy"] = { 0, 0.125, 0.875, 1.0 }, -- R8C1 + ["poison"] = { 0.125, 0.25, 0.875, 1.0 }, -- R8C2 + ["armor"] = { 0.25, 0.375, 0.875, 1.0 }, -- R8C3 + ["alchemy"] = { 0.375, 0.5, 0.875, 1.0 }, -- R8C4 + ["cooking"] = { 0.5, 0.625, 0.875, 1.0 }, -- R8C5 + ["camp"] = { 0.625, 0.75, 0.875, 1.0 }, -- R8C6 + ["hearthstone"] = { 0.75, 0.875, 0.875, 1.0 }, -- R8C7 + ["mining"] = { 0.875, 1.0, 0.875, 1.0 }, -- R8C8 + + -- Legacy aliases + ["admin"] = { 0, 0.125, 0.125, 0.25 }, -- -> chat + ["bank"] = { 0.25, 0.375, 0.25, 0.375 }, -- -> loot + ["perf"] = { 0.25, 0.375, 0.375, 0.5 }, -- -> damage +} diff --git a/InspectPanel.lua b/InspectPanel.lua new file mode 100644 index 0000000..f18e327 --- /dev/null +++ b/InspectPanel.lua @@ -0,0 +1,1590 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Inspect Panel (InspectPanel.lua) +-- Equipment-focused inspect panel with modern rounded UI +-- Talent viewing delegates to native InspectFrame +-------------------------------------------------------------------------------- + +SFrames.InspectPanel = {} + +local IP = SFrames.InspectPanel +local ipanel, equipPage +local inspectUnit = nil + +-------------------------------------------------------------------------------- +-- Theme (matches CharacterPanel) +-------------------------------------------------------------------------------- +local T = SFrames.ActiveTheme + +local FRAME_W = 340 +local FRAME_H = 380 +local HEADER_H = 28 +local CONTENT_TOP = -(HEADER_H + 2) +local SIDE_PAD = 8 +local INNER_PAD = 4 +local SLOT_SIZE = 32 +local SLOT_GAP = 2 + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, [5] = { 1, 0.5, 0 }, +} + +local SLOT_LABEL = { + HeadSlot = "头部", NeckSlot = "颈部", ShoulderSlot = "肩部", + BackSlot = "背部", ChestSlot = "胸部", ShirtSlot = "衬衣", + WristSlot = "手腕", HandsSlot = "手套", WaistSlot = "腰带", + LegsSlot = "腿部", FeetSlot = "脚部", + Finger0Slot = "戒指1", Finger1Slot = "戒指2", + Trinket0Slot = "饰品1", Trinket1Slot = "饰品2", + MainHandSlot = "主手", SecondaryHandSlot = "副手", + RangedSlot = "远程", AmmoSlot = "弹药", TabardSlot = "战袍", +} + +local EQUIP_SLOTS_LEFT = { + { id = 1, name = "HeadSlot" }, { id = 2, name = "NeckSlot" }, + { id = 3, name = "ShoulderSlot" }, { id = 15, name = "BackSlot" }, + { id = 5, name = "ChestSlot" }, { id = 4, name = "ShirtSlot" }, + { id = 19, name = "TabardSlot" }, { id = 9, name = "WristSlot" }, +} +local EQUIP_SLOTS_RIGHT = { + { id = 10, name = "HandsSlot" }, { id = 6, name = "WaistSlot" }, + { id = 7, name = "LegsSlot" }, { id = 8, name = "FeetSlot" }, + { id = 11, name = "Finger0Slot" }, { id = 12, name = "Finger1Slot" }, + { id = 13, name = "Trinket0Slot" }, { id = 14, name = "Trinket1Slot" }, +} +local EQUIP_SLOTS_BOTTOM = { + { id = 16, name = "MainHandSlot" }, { id = 17, name = "SecondaryHandSlot" }, + { id = 18, name = "RangedSlot" }, { id = 0, name = "AmmoSlot" }, +} + +local widgetId = 0 + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + local bg = bgColor or T.bg + local bd = borderColor or T.border + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function SetPixelBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + if bgColor then frame:SetBackdropColor(bgColor[1], bgColor[2], bgColor[3], bgColor[4] or 1) end + if borderColor then frame:SetBackdropBorderColor(borderColor[1], borderColor[2], borderColor[3], borderColor[4] or 1) end +end + +local function CreateShadow(parent, size) + local s = CreateFrame("Frame", nil, parent) + local sz = size or 4 + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -sz, sz) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", sz, -sz) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 } + }) + s:SetBackdropColor(0, 0, 0, 0.6) + s:SetBackdropBorderColor(0, 0, 0, 0.45) + return s +end + +local function MakeSep(parent, x1, y1, x2, y2) + local sep = parent:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", parent, "TOPLEFT", x1, y1) + sep:SetPoint("TOPRIGHT", parent, "TOPRIGHT", x2, y1) + return sep +end + +local function MakeFS(parent, size, justifyH, color) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), size or 11, "OUTLINE") + fs:SetJustifyH(justifyH or "LEFT") + local c = color or T.valueText + fs:SetTextColor(c[1], c[2], c[3]) + return fs +end + +local function NextName(p) + widgetId = widgetId + 1 + return "SFramesIP" .. (p or "") .. tostring(widgetId) +end + +local function GetItemQualityFromLink(link) + if not link then return nil end + local _, _, q = string.find(link, "|c(%x+)|H") + if not q then return nil end + local m = { + ["ff9d9d9d"] = 0, ["ffffffff"] = 1, ["ff1eff00"] = 2, + ["ff0070dd"] = 3, ["ffa335ee"] = 4, ["ffff8000"] = 5, + } + return m[q] +end + +local function GetInspectUnit() + return inspectUnit or "target" +end + +-------------------------------------------------------------------------------- +-- Scroll helper +-------------------------------------------------------------------------------- +local function CreateScrollFrame(parent, width, height) + local holder = CreateFrame("Frame", NextName("SH"), parent) + holder:SetWidth(width) + holder:SetHeight(height) + + local scroll = CreateFrame("ScrollFrame", NextName("SF"), holder) + scroll:SetPoint("TOPLEFT", holder, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -10, 0) + + local child = CreateFrame("Frame", NextName("SC"), scroll) + child:SetWidth(width - 14) + child:SetHeight(1) + scroll:SetScrollChild(child) + + local slider = CreateFrame("Slider", NextName("SB"), holder) + slider:SetWidth(6) + slider:SetPoint("TOPRIGHT", holder, "TOPRIGHT", -1, -2) + slider:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -1, 2) + slider:SetOrientation("VERTICAL") + slider:SetMinMaxValues(0, 1) + slider:SetValue(0) + SetPixelBackdrop(slider, { 0.1, 0.1, 0.12, 0.4 }, { 0.15, 0.15, 0.18, 0.3 }) + + local thumb = slider:CreateTexture(nil, "OVERLAY") + thumb:SetTexture("Interface\\Buttons\\WHITE8X8") + thumb:SetVertexColor(0.4, 0.4, 0.48, 0.7) + thumb:SetWidth(6) + thumb:SetHeight(28) + slider:SetThumbTexture(thumb) + + slider:SetScript("OnValueChanged", function() + scroll:SetVerticalScroll(this:GetValue()) + end) + scroll:EnableMouseWheel(1) + scroll:SetScript("OnMouseWheel", function() + local cur = slider:GetValue() + local step = 28 + local _, mx = slider:GetMinMaxValues() + if arg1 > 0 then + slider:SetValue(math.max(cur - step, 0)) + else + slider:SetValue(math.min(cur + step, mx)) + end + end) + + holder.scroll = scroll + holder.child = child + holder.slider = slider + holder.SetContentHeight = function(self, h) + child:SetHeight(h) + local visH = scroll:GetHeight() + local maxS = math.max(h - visH, 0) + slider:SetMinMaxValues(0, maxS) + if maxS == 0 then slider:Hide() else slider:Show() end + slider:SetValue(math.min(slider:GetValue(), maxS)) + end + return holder +end + +-------------------------------------------------------------------------------- +-- Main Frame (no tabs, single equipment view) +-------------------------------------------------------------------------------- +local function CreateMainFrame() + if ipanel then return ipanel end + + local f = CreateFrame("Frame", "SFramesInspectPanel", UIParent) + f:SetWidth(FRAME_W) + f:SetHeight(FRAME_H) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + f:SetFrameStrata("HIGH") + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetClampedToScreen(true) + SetRoundBackdrop(f, T.bg, T.border) + f.shadow = CreateShadow(f, 4) + f:Hide() + f:SetScript("OnHide", function() + if not IP.switchingToNative then + if ClearInspectPlayer then ClearInspectPlayer() end + inspectUnit = nil + end + IP:HideSummary() + end) + + table.insert(UISpecialFrames, "SFramesInspectPanel") + + f.classIcon = SFrames:CreateClassIcon(f, 16) + f.classIcon.overlay:SetPoint("TOPLEFT", f, "TOPLEFT", SIDE_PAD + 2, -6) + + f.titleText = MakeFS(f, 12, "LEFT", T.gold) + f.titleText:SetPoint("LEFT", f.classIcon.overlay, "RIGHT", 4, 0) + + f.subtitleText = MakeFS(f, 9, "LEFT", T.dimText) + f.subtitleText:SetPoint("LEFT", f.titleText, "RIGHT", 6, 0) + + local function MakeHeaderBtn(parent, label, tooltip, offsetX, onClick) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(46) + btn:SetHeight(16) + btn:SetPoint("TOPRIGHT", parent, "TOPRIGHT", offsetX, -6) + btn:SetFrameLevel(parent:GetFrameLevel() + 3) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + local txt = MakeFS(btn, 9, "CENTER", T.dimText) + txt:SetPoint("CENTER", btn, "CENTER", 0, 0) + txt:SetText(label) + btn:SetScript("OnClick", onClick) + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHover[1], T.btnHover[2], T.btnHover[3], T.btnHover[4]) + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine(tooltip, 1, 1, 1) + GameTooltip:Show() + end) + btn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + GameTooltip:Hide() + end) + return btn + end + + MakeHeaderBtn(f, "荣誉", "打开原生荣誉面板", -77, function() IP:OpenNativeTab("honor") end) + MakeHeaderBtn(f, "天赋", "打开原生天赋面板", -27, function() IP:OpenNativeTab("talent") end) + + local closeBtn = CreateFrame("Button", nil, f) + closeBtn:SetWidth(16) + closeBtn:SetHeight(16) + closeBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -7, -6) + closeBtn:SetFrameLevel(f:GetFrameLevel() + 3) + SetRoundBackdrop(closeBtn, T.buttonDownBg, T.btnBorder) + local closeTxt = MakeFS(closeBtn, 9, "CENTER", T.title) + closeTxt:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeTxt:SetText("x") + closeBtn:SetScript("OnClick", function() f:Hide() end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.buttonDownBg[1], T.buttonDownBg[2], T.buttonDownBg[3], T.buttonDownBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end) + + MakeSep(f, 6, -HEADER_H, -6, -HEADER_H) + + equipPage = CreateFrame("Frame", NextName("Page"), f) + equipPage:SetPoint("TOPLEFT", f, "TOPLEFT", 4, CONTENT_TOP) + equipPage:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -4, 4) + + ipanel = f + return f +end + +-------------------------------------------------------------------------------- +-- Title +-------------------------------------------------------------------------------- +function IP:UpdateTitle() + if not ipanel then return end + local unit = GetInspectUnit() + local name = UnitName(unit) or "未知" + local level = UnitLevel(unit) or "?" + local classLocal, classEn = UnitClass(unit) + classLocal = classLocal or "" + classEn = classEn or "" + local raceLocal = UnitRace(unit) or "" + + local cc = SFrames.Config and SFrames.Config.colors and SFrames.Config.colors.class and SFrames.Config.colors.class[classEn] + + if equipPage and equipPage.modelNameText then + if cc then + equipPage.modelNameText:SetTextColor(cc.r, cc.g, cc.b) + else + equipPage.modelNameText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + equipPage.modelNameText:SetText(name) + end + + if equipPage and equipPage.modelGuildText then + local guildName = GetGuildInfo and GetGuildInfo(unit) or nil + if guildName and guildName ~= "" then + equipPage.modelGuildText:SetText("<" .. guildName .. ">") + else + equipPage.modelGuildText:SetText("") + end + end + + local parts = {} + table.insert(parts, "Lv." .. tostring(level)) + table.insert(parts, raceLocal .. classLocal) + + if equipPage and equipPage.avgIlvl then + table.insert(parts, string.format("iLvl:%.1f", equipPage.avgIlvl)) + end + + if cc then + ipanel.titleText:SetTextColor(cc.r, cc.g, cc.b) + else + ipanel.titleText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + ipanel.titleText:SetText(table.concat(parts, " ")) + ipanel.subtitleText:SetText("") + + if ipanel.classIcon then + SFrames:SetClassIcon(ipanel.classIcon, classEn) + end +end + +-------------------------------------------------------------------------------- +-- Equipment Slot creation +-------------------------------------------------------------------------------- +function IP:CreateEquipSlot(parent, slotID, slotName) + local frame = CreateFrame("Button", NextName("Slot"), parent) + frame:SetWidth(SLOT_SIZE) + frame:SetHeight(SLOT_SIZE) + SetRoundBackdrop(frame, T.slotBg, T.slotBorder) + + local icon = frame:CreateTexture(nil, "ARTWORK") + icon:SetPoint("TOPLEFT", frame, "TOPLEFT", 4, -4) + icon:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -4, 4) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + frame.icon = icon + + local ilvlText = frame:CreateFontString(nil, "OVERLAY") + ilvlText:SetFont(GetFont(), 8, "OUTLINE") + ilvlText:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -2, 2) + ilvlText:SetTextColor(1, 0.82, 0) + ilvlText:SetText("") + frame.ilvlText = ilvlText + + local glow = frame:CreateTexture(nil, "OVERLAY") + glow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + glow:SetBlendMode("ADD") + glow:SetAlpha(0.8) + glow:SetWidth(SLOT_SIZE * 2) + glow:SetHeight(SLOT_SIZE * 2) + glow:SetPoint("CENTER", frame, "CENTER", 0, 0) + glow:Hide() + frame.qualGlow = glow + + frame.slotID = slotID + frame.slotName = slotName + local _, emptyTex = GetInventorySlotInfo(slotName) + frame.emptyTexture = emptyTex + + frame:SetScript("OnEnter", function() + this:SetBackdropBorderColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4]) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + local unit = GetInspectUnit() + if GetInventoryItemLink(unit, this.slotID) then + GameTooltip:SetInventoryItem(unit, this.slotID) + else + local label = SLOT_LABEL[this.slotName] or this.slotName + GameTooltip:AddLine(label .. " - 未装备", 0.5, 0.5, 0.5) + end + GameTooltip:Show() + end) + + frame:SetScript("OnLeave", function() + this:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + GameTooltip:Hide() + end) + + frame:SetScript("OnClick", function() + if IsShiftKeyDown() then + local unit = GetInspectUnit() + local link = GetInventoryItemLink(unit, this.slotID) + if link and ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Insert(link) + elseif link then + if DEFAULT_CHAT_FRAME then + DEFAULT_CHAT_FRAME:AddMessage(link) + end + end + end + end) + + return frame +end + +-------------------------------------------------------------------------------- +-- Equipment Page +-------------------------------------------------------------------------------- +function IP:BuildEquipmentPage() + if not equipPage or equipPage.built then return end + equipPage.built = true + + local CONTENT_W = FRAME_W - INNER_PAD * 2 + local SCROLL_W = CONTENT_W - 10 + local contentH = FRAME_H - HEADER_H - 2 - INNER_PAD - 4 + local scrollArea = CreateScrollFrame(equipPage, CONTENT_W, contentH) + scrollArea:SetPoint("TOPLEFT", equipPage, "TOPLEFT", 0, 0) + equipPage.scrollArea = scrollArea + + local child = scrollArea.child + local cw = SCROLL_W + + local slotColW = SLOT_SIZE + 6 + local modelW = cw - slotColW * 2 - 26 + if modelW < 80 then modelW = 80 end + local modelH = 8 * (SLOT_SIZE + SLOT_GAP) - SLOT_GAP + + local modelBg = CreateFrame("Frame", nil, child) + modelBg:SetWidth(modelW) + modelBg:SetHeight(modelH) + modelBg:SetPoint("TOP", child, "TOP", 0, -4) + SetRoundBackdrop(modelBg, T.modelBg, T.modelBorder) + equipPage.modelBgFrame = modelBg + + local modelFrame = CreateFrame("Frame", nil, equipPage) + modelFrame:SetWidth(modelW - 8) + modelFrame:SetHeight(modelH - 24) + modelFrame:SetPoint("TOP", modelBg, "TOP", 0, -4) + modelFrame:SetFrameLevel(equipPage:GetFrameLevel() + 5) + + local model = CreateFrame("PlayerModel", NextName("Model"), modelFrame) + model:SetAllPoints(modelFrame) + equipPage.model = model + equipPage.modelFrame = modelFrame + + model:EnableMouse(true) + model:EnableMouseWheel(1) + model.rotating = false + model.panning = false + model.curFacing = 0.4 + model.curScale = 1.0 + model.posX = 0 + model.posY = 0 + + model:SetScript("OnMouseDown", function() + if arg1 == "LeftButton" then + this.rotating = true + this.startX = GetCursorPosition() + this.startFacing = this.curFacing or 0 + elseif arg1 == "RightButton" then + this.panning = true + local cx, cy = GetCursorPosition() + this.panStartX = cx + this.panStartY = cy + this.panOriginX = this.posX or 0 + this.panOriginY = this.posY or 0 + end + end) + model:SetScript("OnMouseUp", function() + if arg1 == "LeftButton" then + this.rotating = false + elseif arg1 == "RightButton" then + this.panning = false + end + end) + model:SetScript("OnMouseWheel", function() + local step = 0.1 + local ns = (this.curScale or 1) + arg1 * step + if ns < 0.2 then ns = 0.2 end + if ns > 4.0 then ns = 4.0 end + this.curScale = ns + this:SetModelScale(ns) + end) + model:SetScript("OnUpdate", function() + if this.rotating then + local cx = GetCursorPosition() + local diff = (cx - (this.startX or cx)) * 0.01 + local nf = (this.startFacing or 0) + diff + this.curFacing = nf + this:SetFacing(nf) + elseif this.panning then + local cx, cy = GetCursorPosition() + local es = this:GetEffectiveScale() + if es < 0.01 then es = 1 end + local dx = (cx - (this.panStartX or cx)) / (es * 35) + local dy = (cy - (this.panStartY or cy)) / (es * 35) + this.posX = (this.panOriginX or 0) + dx + this.posY = (this.panOriginY or 0) + dy + this:SetPosition(this.posY, 0, this.posX) + elseif this.autoRotateDir then + local speed = 1.5 * (arg1 or 0.016) + this.curFacing = (this.curFacing or 0) + speed * this.autoRotateDir + this:SetFacing(this.curFacing) + end + end) + model.ResetView = function(self) + self.curFacing = 0.4 + self.curScale = 1.0 + self.posX = 0 + self.posY = 0 + self:SetFacing(0.4) + self:SetModelScale(1.0) + self:SetPosition(0, 0, 0) + end + + -- Name/guild overlay floats on top of 3D model + local nameOverlay = CreateFrame("Frame", nil, equipPage) + nameOverlay:SetWidth(modelW) + nameOverlay:SetHeight(30) + nameOverlay:SetPoint("TOP", modelBg, "TOP", 0, -4) + nameOverlay:SetFrameLevel(equipPage:GetFrameLevel() + 7) + nameOverlay:EnableMouse(false) + + local modelNameText = nameOverlay:CreateFontString(nil, "OVERLAY") + modelNameText:SetFont(GetFont(), 11, "OUTLINE") + modelNameText:SetPoint("TOP", nameOverlay, "TOP", 0, -5) + modelNameText:SetJustifyH("CENTER") + modelNameText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + equipPage.modelNameText = modelNameText + + local modelGuildText = nameOverlay:CreateFontString(nil, "OVERLAY") + modelGuildText:SetFont(GetFont(), 9, "OUTLINE") + modelGuildText:SetPoint("TOP", modelNameText, "BOTTOM", 0, -1) + modelGuildText:SetJustifyH("CENTER") + modelGuildText:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + equipPage.modelGuildText = modelGuildText + + -- Model toolbar: unified strip with 3 segments (matches CharacterPanel) + local tbH = 14 + local segW = 24 + local tbW = segW * 3 + 2 + local toolbar = CreateFrame("Frame", nil, equipPage) + toolbar:SetWidth(tbW) + toolbar:SetHeight(tbH) + toolbar:SetPoint("BOTTOM", modelBg, "BOTTOM", 0, 5) + toolbar:SetFrameLevel(equipPage:GetFrameLevel() + 6) + SetPixelBackdrop(toolbar, { 0.04, 0.04, 0.06, 0.75 }, { 0.22, 0.22, 0.28, 0.5 }) + equipPage.modelToolbar = toolbar + + local function MakeToolBtn(parent, w, text, ox) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w) + btn:SetHeight(tbH - 2) + btn:SetPoint("LEFT", parent, "LEFT", ox, 0) + btn:SetFrameLevel(parent:GetFrameLevel() + 1) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 0, + }) + btn:SetBackdropColor(0, 0, 0, 0) + local fs = MakeFS(btn, 9, "CENTER", { 0.5, 0.5, 0.55 }) + fs:SetPoint("CENTER", btn, "CENTER", 0, 0) + fs:SetText(text) + btn.label = fs + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + this.label:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end) + btn:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end) + return btn + end + + local rotLeft = MakeToolBtn(toolbar, segW, "<", 1) + rotLeft:SetScript("OnMouseDown", function() + model.autoRotateDir = 1 + this:SetBackdropColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4] or 0.6) + end) + rotLeft:SetScript("OnMouseUp", function() + model.autoRotateDir = nil + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + end) + rotLeft:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + model.autoRotateDir = nil + end) + equipPage.rotLeft = rotLeft + + local sep1 = toolbar:CreateTexture(nil, "OVERLAY") + sep1:SetTexture("Interface\\Buttons\\WHITE8X8") + sep1:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4] or 0.4) + sep1:SetWidth(1) + sep1:SetHeight(tbH - 4) + sep1:SetPoint("LEFT", toolbar, "LEFT", segW + 1, 0) + + local resetBtn = MakeToolBtn(toolbar, segW, "O", segW + 1) + resetBtn:SetScript("OnClick", function() model:ResetView() end) + resetBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + this.label:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine("重置视角", 1, 1, 1) + GameTooltip:Show() + end) + resetBtn:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + GameTooltip:Hide() + end) + equipPage.resetBtn = resetBtn + + local sep2 = toolbar:CreateTexture(nil, "OVERLAY") + sep2:SetTexture("Interface\\Buttons\\WHITE8X8") + sep2:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4] or 0.4) + sep2:SetWidth(1) + sep2:SetHeight(tbH - 4) + sep2:SetPoint("LEFT", toolbar, "LEFT", segW * 2 + 1, 0) + + local rotRight = MakeToolBtn(toolbar, segW, ">", segW * 2 + 1) + rotRight:SetScript("OnMouseDown", function() + model.autoRotateDir = -1 + this:SetBackdropColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4] or 0.6) + end) + rotRight:SetScript("OnMouseUp", function() + model.autoRotateDir = nil + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.5) + end) + rotRight:SetScript("OnLeave", function() + this:SetBackdropColor(0, 0, 0, 0) + this.label:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + model.autoRotateDir = nil + end) + equipPage.rotRight = rotRight + + local slotY = -6 + equipPage.equipSlots = {} + + for idx, si in ipairs(EQUIP_SLOTS_LEFT) do + local slot = self:CreateEquipSlot(child, si.id, si.name) + slot:SetPoint("TOPLEFT", child, "TOPLEFT", 2, slotY - (idx - 1) * (SLOT_SIZE + SLOT_GAP)) + equipPage.equipSlots[si.id] = slot + end + + for idx, si in ipairs(EQUIP_SLOTS_RIGHT) do + local slot = self:CreateEquipSlot(child, si.id, si.name) + slot:SetPoint("TOPRIGHT", child, "TOPRIGHT", -2, slotY - (idx - 1) * (SLOT_SIZE + SLOT_GAP)) + equipPage.equipSlots[si.id] = slot + end + + local bottomY = slotY - table.getn(EQUIP_SLOTS_LEFT) * (SLOT_SIZE + SLOT_GAP) - 4 + local bottomCount = table.getn(EQUIP_SLOTS_BOTTOM) + local totalBW = bottomCount * SLOT_SIZE + (bottomCount - 1) * (SLOT_GAP + 2) + local bsx = math.max((cw - totalBW) / 2, 4) + + for idx, si in ipairs(EQUIP_SLOTS_BOTTOM) do + local slot = self:CreateEquipSlot(child, si.id, si.name) + slot:SetPoint("TOPLEFT", child, "TOPLEFT", bsx + (idx - 1) * (SLOT_SIZE + SLOT_GAP + 1), bottomY) + equipPage.equipSlots[si.id] = slot + end + + local infoY = bottomY - SLOT_SIZE - 2 + equipPage.totalContentH = math.abs(infoY) + 8 + scrollArea:SetContentHeight(equipPage.totalContentH) +end + +local ALL_EQUIP_SLOTS = nil +local function GetAllEquipSlots() + if not ALL_EQUIP_SLOTS then + ALL_EQUIP_SLOTS = {} + for _, t in ipairs({ EQUIP_SLOTS_LEFT, EQUIP_SLOTS_RIGHT, EQUIP_SLOTS_BOTTOM }) do + for _, s in ipairs(t) do table.insert(ALL_EQUIP_SLOTS, s) end + end + end + return ALL_EQUIP_SLOTS +end + +function IP:UpdateEquipment() + if not equipPage or not equipPage.built then return end + local unit = GetInspectUnit() + + if equipPage.model then + equipPage.model:Show() + if equipPage.modelFrame then equipPage.modelFrame:Show() end + if equipPage.modelBgFrame then equipPage.modelBgFrame:Show() end + if equipPage.modelToolbar then equipPage.modelToolbar:Show() end + equipPage.model:SetUnit(unit) + equipPage.model:SetFacing(equipPage.model.curFacing or 0.4) + equipPage.model:SetModelScale(equipPage.model.curScale or 1.0) + equipPage.model:SetPosition(equipPage.model.posY or 0, 0, equipPage.model.posX or 0) + end + + local allSlots = GetAllEquipSlots() + local showIlvl = (not SFramesDB or SFramesDB.showItemLevel ~= false) and LibItem_Level + local totalIlvl, slotCount = 0, 0 + local scoreSlots = { [1]=true,[2]=true,[3]=true,[5]=true,[6]=true,[7]=true,[8]=true, + [9]=true,[10]=true,[11]=true,[12]=true,[13]=true,[14]=true,[15]=true,[16]=true,[17]=true,[18]=true } + + for _, si in ipairs(allSlots) do + local slot = equipPage.equipSlots[si.id] + if slot then + local tex = GetInventoryItemTexture(unit, si.id) + local link = GetInventoryItemLink(unit, si.id) + if tex then + slot.icon:SetTexture(tex) + slot.icon:SetVertexColor(1, 1, 1) + if slot.ilvlText then + if showIlvl and link then + local _, _, itemId = string.find(link, "item:(%d+)") + local ilvl = itemId and LibItem_Level[tonumber(itemId)] + slot.ilvlText:SetText(ilvl and tostring(ilvl) or "") + if ilvl and ilvl > 0 and scoreSlots[si.id] then + totalIlvl = totalIlvl + ilvl + slotCount = slotCount + 1 + end + else + slot.ilvlText:SetText("") + end + end + local quality = GetItemQualityFromLink(link) + if quality and quality >= 2 and QUALITY_COLORS[quality] then + local qc = QUALITY_COLORS[quality] + slot.qualGlow:SetVertexColor(qc[1], qc[2], qc[3]) + slot.qualGlow:Show() + else + slot.qualGlow:Hide() + end + else + if slot.emptyTexture then + slot.icon:SetTexture(slot.emptyTexture) + slot.icon:SetVertexColor(T.emptySlot[1], T.emptySlot[2], T.emptySlot[3], T.emptySlot[4]) + else slot.icon:SetTexture(nil) end + slot:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + slot.currentBorderColor = nil + slot.qualGlow:Hide() + if slot.ilvlText then slot.ilvlText:SetText("") end + end + end + end + + equipPage.avgIlvl = nil + if slotCount > 0 then + equipPage.avgIlvl = totalIlvl / slotCount + end + IP:UpdateTitle() +end + +-------------------------------------------------------------------------------- +-- Inspect Summary Side Panel (gear stats + equipment list) +-------------------------------------------------------------------------------- +local inspSummary +local SUMMARY_W = 220 +local SUMMARY_H = 380 +local SUMMARY_HEADER_H = 24 +local SUMMARY_ROW_H = 14 +local SUMMARY_SECTION_GAP = 4 + +local ENCHANTABLE_INSPECT_SLOTS = { + { id = 1, name = "HeadSlot", label = "头部" }, + { id = 3, name = "ShoulderSlot", label = "肩部" }, + { id = 15, name = "BackSlot", label = "背部" }, + { id = 5, name = "ChestSlot", label = "胸部" }, + { id = 9, name = "WristSlot", label = "手腕" }, + { id = 10, name = "HandsSlot", label = "手套" }, + { id = 7, name = "LegsSlot", label = "腿部" }, + { id = 8, name = "FeetSlot", label = "脚部" }, + { id = 11, name = "Finger0Slot", label = "戒指1" }, + { id = 12, name = "Finger1Slot", label = "戒指2" }, + { id = 16, name = "MainHandSlot", label = "主手" }, + { id = 17, name = "SecondaryHandSlot", label = "副手" }, + { id = 18, name = "RangedSlot", label = "远程" }, +} + +local inspScanTip + +local function EnsureInspTip() + if not inspScanTip then + inspScanTip = CreateFrame("GameTooltip", "SFramesIPScanTip", nil, "GameTooltipTemplate") + end + inspScanTip:SetOwner(UIParent, "ANCHOR_NONE") + return inspScanTip +end + +local STAT_PATS = { + { p = "%+(%d+)%s*力量", k = "str" }, + { p = "%+(%d+)%s*敏捷", k = "agi" }, + { p = "%+(%d+)%s*耐力", k = "sta" }, + { p = "%+(%d+)%s*智力", k = "int" }, + { p = "%+(%d+)%s*精神", k = "spi" }, + { p = "%+(%d+)%s*Strength", k = "str" }, + { p = "%+(%d+)%s*Agility", k = "agi" }, + { p = "%+(%d+)%s*Stamina", k = "sta" }, + { p = "%+(%d+)%s*Intellect", k = "int" }, + { p = "%+(%d+)%s*Spirit", k = "spi" }, + { p = "%+(%d+)%s*火焰抗性", k = "fireres" }, + { p = "%+(%d+)%s*自然抗性", k = "natureres" }, + { p = "%+(%d+)%s*冰霜抗性", k = "frostres" }, + { p = "%+(%d+)%s*暗影抗性", k = "shadowres" }, + { p = "%+(%d+)%s*奥术抗性", k = "arcaneres" }, + { p = "%+(%d+)%s*所有抗性", k = "allres" }, + { p = "%+(%d+)%s*Fire Resistance", k = "fireres" }, + { p = "%+(%d+)%s*Nature Resistance", k = "natureres" }, + { p = "%+(%d+)%s*Frost Resistance", k = "frostres" }, + { p = "%+(%d+)%s*Shadow Resistance", k = "shadowres" }, + { p = "%+(%d+)%s*Arcane Resistance", k = "arcaneres" }, + { p = "%+(%d+)%s*All Resistances", k = "allres" }, + { p = "%+(%d+)%s*攻击强度", k = "ap" }, + { p = "%+(%d+)%s*Attack Power", k = "ap" }, +} + +local EQUIP_PATS = { + { p = "伤害和治疗效果.-最多(%d+)点", k = "spelldmg" }, + { p = "法术造成的治疗效果.-最多(%d+)点", k = "healing" }, + { p = "击中几率提高(%d+)%%", k = "hit" }, + { p = "暴击几率提高(%d+)%%", k = "crit" }, + { p = "法术暴击几率提高(%d+)%%", k = "spellcrit" }, + { p = "法术命中几率提高(%d+)%%", k = "spellhit" }, + { p = "每5秒恢复(%d+)点法力", k = "mp5" }, + { p = "防御技能提高(%d+)", k = "defense" }, + { p = "躲闪几率提高(%d+)%%", k = "dodge" }, + { p = "招架几率提高(%d+)%%", k = "parry" }, + { p = "格挡几率提高(%d+)%%", k = "block" }, + { p = "damage and healing done by magical spells.-by up to (%d+)", k = "spelldmg" }, + { p = "healing done by spells.-by up to (%d+)", k = "healing" }, + { p = "chance to hit by (%d+)%%", k = "hit" }, + { p = "critical strike by (%d+)%%", k = "crit" }, + { p = "spell critical chance by (%d+)%%", k = "spellcrit" }, + { p = "Restores (%d+) mana per 5 sec", k = "mp5" }, + { p = "defense skill by (%d+)", k = "defense" }, + { p = "chance to dodge.-by (%d+)%%", k = "dodge" }, + { p = "chance to parry.-by (%d+)%%", k = "parry" }, + { p = "chance to block.-by (%d+)%%", k = "block" }, +} + +local PROC_INSP_ENCHANTS = { + "十字军", "Crusader", "吸取生命", "Lifestealing", + "灼热武器", "Fiery Weapon", "火焰武器", + "寒冰", "Icy Chill", "邪恶武器", "Unholy Weapon", + "恶魔杀手", "Demonslaying", "无法被缴械", "Cannot be Disarmed", +} + +local function IsInspEnchantLine(txt) + if string.find(txt, "%+%d") then return true end + if string.find(txt, "%d+%%") then return true end + for i = 1, table.getn(PROC_INSP_ENCHANTS) do + if string.find(txt, PROC_INSP_ENCHANTS[i]) then return true end + end + return false +end + +local function ScanInspectGearStats() + local unit = GetInspectUnit() + local stats = {} + local allSlots = GetAllEquipSlots() + local tip = EnsureInspTip() + + for _, si in ipairs(allSlots) do + local link = GetInventoryItemLink(unit, si.id) + if link then + tip:ClearLines() + tip:SetInventoryItem(unit, si.id) + local n = tip:NumLines() + if n and n > 0 then + for li = 1, n do + local obj = _G["SFramesIPScanTipTextLeft" .. li] + if obj then + local txt = obj:GetText() + if txt and txt ~= "" then + for _, sp in ipairs(STAT_PATS) do + local _, _, val = string.find(txt, sp.p) + if val then + stats[sp.k] = (stats[sp.k] or 0) + tonumber(val) + end + end + local r, g, b = obj:GetTextColor() + if g > 0.8 and r < 0.5 and b < 0.5 then + for _, ep in ipairs(EQUIP_PATS) do + local _, _, val = string.find(txt, ep.p) + if val then + stats[ep.k] = (stats[ep.k] or 0) + tonumber(val) + end + end + end + end + end + end + end + end + end + + if stats.allres and stats.allres > 0 then + local ar = stats.allres + stats.fireres = (stats.fireres or 0) + ar + stats.natureres = (stats.natureres or 0) + ar + stats.frostres = (stats.frostres or 0) + ar + stats.shadowres = (stats.shadowres or 0) + ar + stats.arcaneres = (stats.arcaneres or 0) + ar + stats.allres = nil + end + + return stats +end + +local function HasAnyStats(stats) + if not stats then return false end + for k, v in pairs(stats) do + if v and v > 0 then return true end + end + return false +end + +local function GetInspectEnchant(slotId) + local unit = GetInspectUnit() + local tip = EnsureInspTip() + tip:ClearLines() + tip:SetInventoryItem(unit, slotId) + local n = tip:NumLines() + if not n or n < 2 then return false, nil end + + for i = 2, n do + local obj = _G["SFramesIPScanTipTextLeft" .. i] + if obj then + local txt = obj:GetText() + if txt and txt ~= "" then + local r, g, b = obj:GetTextColor() + if g > 0.8 and r < 0.5 and b < 0.5 then + local skip = false + if string.find(txt, "装备:") or string.find(txt, "装备:") or string.find(txt, "Equip:") then + skip = true + elseif string.find(txt, "使用:") or string.find(txt, "使用:") or string.find(txt, "Use:") then + skip = true + elseif string.find(txt, "击中时可能") or string.find(txt, "Chance on hit") then + skip = true + elseif string.find(txt, "^%(") then + skip = true + elseif string.find(txt, "套装:") or string.find(txt, "套装:") or string.find(txt, "Set:") then + skip = true + end + if not skip and IsInspEnchantLine(txt) then + return true, txt + end + end + end + end + end + return false, nil +end + +-- Row helpers for summary panel +local function HideSummaryRows(parent) + if parent._r then + for i = 1, table.getn(parent._r) do + local r = parent._r[i] + if r and r.Hide then r:Hide() end + end + end + parent._r = {} +end + +local function AddSummaryHeader(p, txt, y, clr) + local f1 = MakeFS(p, 10, "LEFT", clr or T.sectionTitle) + f1:SetPoint("TOPLEFT", p, "TOPLEFT", 4, y) + f1:SetText(txt) + table.insert(p._r, f1) + + local s = p:CreateTexture(nil, "ARTWORK") + s:SetTexture("Interface\\Buttons\\WHITE8X8") + s:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + s:SetHeight(1) + s:SetPoint("TOPLEFT", p, "TOPLEFT", 4, y - 13) + s:SetPoint("TOPRIGHT", p, "TOPRIGHT", -4, y - 13) + table.insert(p._r, s) + return y - 16 +end + +local function AddSummaryRow(p, lbl, val, y, lc, vc) + local f1 = MakeFS(p, 9, "LEFT", lc or T.labelText) + f1:SetPoint("TOPLEFT", p, "TOPLEFT", 8, y) + f1:SetText(lbl) + table.insert(p._r, f1) + + local f2 = MakeFS(p, 9, "RIGHT", vc or T.valueText) + f2:SetPoint("TOPRIGHT", p, "TOPRIGHT", -12, y) + f2:SetWidth(80) + f2:SetJustifyH("RIGHT") + f2:SetText(val) + table.insert(p._r, f2) + return y - SUMMARY_ROW_H +end + +local INSP_STAT_COLORS = { + str = { 0.78, 0.61, 0.43 }, agi = { 0.52, 1, 0.52 }, + sta = { 0.75, 0.55, 0.25 }, int = { 0.41, 0.80, 0.94 }, + spi = { 1, 1, 1 }, +} +local INSP_RESIST_COLORS = { + arcaneres = { 0.95, 0.90, 0.40 }, fireres = { 1, 0.50, 0.15 }, + natureres = { 0.35, 0.90, 0.25 }, frostres = { 0.45, 0.70, 1.00 }, + shadowres = { 0.60, 0.35, 0.90 }, +} +local INSP_PHYS_COLOR = { 0.90, 0.75, 0.55 } +local INSP_SPELL_COLOR = { 0.60, 0.80, 1.00 } +local INSP_REGEN_COLOR = { 0.40, 0.90, 0.70 } +local INSP_DEF_COLOR = { 0.35, 0.90, 0.25 } +local INSP_ENCHANTED = { 0.30, 1, 0.30 } +local INSP_NO_ENCHANT = { 1, 0.35, 0.35 } + +local function BuildInspectSummary() + if inspSummary then return inspSummary end + + local f = CreateFrame("Frame", "SFramesInspectSummary", UIParent) + f:SetWidth(SUMMARY_W) + f:SetHeight(SUMMARY_H) + f:SetFrameStrata("HIGH") + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetClampedToScreen(true) + SetRoundBackdrop(f, T.bg, T.border) + CreateShadow(f, 4) + f:Hide() + + local hdr = MakeFS(f, 11, "LEFT", T.gold) + hdr:SetPoint("TOPLEFT", f, "TOPLEFT", 8, -5) + hdr:SetText("装备属性") + + local tabW = 52 + f.tabs = {} + f.curTab = 1 + local tNames = { "属性", "装备" } + for i = 1, 2 do + local btn = CreateFrame("Button", NextName("IST"), f) + btn:SetWidth(tabW) + btn:SetHeight(16) + btn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -(8 + (2 - i) * (tabW + 2) + 18), -4) + btn:SetFrameLevel(f:GetFrameLevel() + 2) + SetPixelBackdrop(btn, T.btnBg, T.btnBorder) + local lbl = MakeFS(btn, 9, "CENTER", T.dimText) + lbl:SetPoint("CENTER", btn, "CENTER", 0, 0) + lbl:SetText(tNames[i]) + btn.lbl = lbl + btn.idx = i + btn:SetScript("OnClick", function() IP:SetSummaryTab(this.idx) end) + btn:SetScript("OnEnter", function() + if this.idx ~= (inspSummary.curTab or 1) then + this:SetBackdropColor(T.btnHover[1], T.btnHover[2], T.btnHover[3], T.btnHover[4]) + end + end) + btn:SetScript("OnLeave", function() + if this.idx ~= (inspSummary.curTab or 1) then + SetPixelBackdrop(this, T.btnBg, T.btnBorder) + end + end) + f.tabs[i] = btn + end + + local closeBtn = CreateFrame("Button", nil, f) + closeBtn:SetWidth(14) + closeBtn:SetHeight(14) + closeBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -4, -5) + closeBtn:SetFrameLevel(f:GetFrameLevel() + 3) + SetRoundBackdrop(closeBtn, T.buttonDownBg, T.btnBorder) + local closeTxt = MakeFS(closeBtn, 8, "CENTER", T.title) + closeTxt:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeTxt:SetText("x") + closeBtn:SetScript("OnClick", function() f:Hide() end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.buttonDownBg[1], T.buttonDownBg[2], T.buttonDownBg[3], T.buttonDownBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end) + + MakeSep(f, 4, -SUMMARY_HEADER_H, -4, -SUMMARY_HEADER_H) + + local cH = SUMMARY_H - SUMMARY_HEADER_H - 8 + local cW = SUMMARY_W - 8 + + f.statsScroll = CreateScrollFrame(f, cW, cH) + f.statsScroll:SetPoint("TOPLEFT", f, "TOPLEFT", 4, -(SUMMARY_HEADER_H + 2)) + + f.equipScroll = CreateScrollFrame(f, cW, cH) + f.equipScroll:SetPoint("TOPLEFT", f, "TOPLEFT", 4, -(SUMMARY_HEADER_H + 2)) + f.equipScroll:Hide() + + inspSummary = f + return f +end + +function IP:SetSummaryTab(idx) + if not inspSummary then return end + inspSummary.curTab = idx + for i = 1, 2 do + local btn = inspSummary.tabs[i] + if i == idx then + SetPixelBackdrop(btn, T.tabActiveBg, T.tabActiveBorder) + btn.lbl:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + else + SetPixelBackdrop(btn, T.btnBg, T.btnBorder) + btn.lbl:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end + end + if idx == 1 then + inspSummary.statsScroll:Show() + inspSummary.equipScroll:Hide() + local ok, err = pcall(function() IP:BuildInspectStats() end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444IP BuildStats err: " .. tostring(err) .. "|r") + end + else + inspSummary.statsScroll:Hide() + inspSummary.equipScroll:Show() + local ok, err = pcall(function() IP:BuildInspectEquipList() end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444IP BuildEquip err: " .. tostring(err) .. "|r") + end + end +end + +function IP:BuildInspectStats() + if not inspSummary then return end + local child = inspSummary.statsScroll.child + HideSummaryRows(child) + local y = -4 + + local stats = ScanInspectGearStats() + + local pNames = { + { k = "str", n = "力量" }, { k = "agi", n = "敏捷" }, + { k = "sta", n = "耐力" }, { k = "int", n = "智力" }, + { k = "spi", n = "精神" }, + } + local hasP = false + for _, p in ipairs(pNames) do + if stats[p.k] and stats[p.k] > 0 then hasP = true; break end + end + if hasP then + y = AddSummaryHeader(child, "装备主属性:", y) + for _, p in ipairs(pNames) do + local v = stats[p.k] or 0 + if v > 0 then + local c = INSP_STAT_COLORS[p.k] or T.valueText + y = AddSummaryRow(child, p.n, "+" .. tostring(v), y, c, c) + end + end + y = y - SUMMARY_SECTION_GAP + end + + local hasPhys = (stats.ap and stats.ap > 0) or (stats.hit and stats.hit > 0) or (stats.crit and stats.crit > 0) + if hasPhys then + y = AddSummaryHeader(child, "物理:", y, INSP_PHYS_COLOR) + if stats.ap and stats.ap > 0 then + y = AddSummaryRow(child, "攻击强度", "+" .. tostring(stats.ap), y, nil, INSP_PHYS_COLOR) + end + if stats.hit and stats.hit > 0 then + y = AddSummaryRow(child, "命中", "+" .. tostring(stats.hit) .. "%", y) + end + if stats.crit and stats.crit > 0 then + y = AddSummaryRow(child, "暴击", "+" .. tostring(stats.crit) .. "%", y) + end + y = y - SUMMARY_SECTION_GAP + end + + local hasSpell = (stats.spelldmg and stats.spelldmg > 0) or (stats.healing and stats.healing > 0) + or (stats.spellcrit and stats.spellcrit > 0) or (stats.spellhit and stats.spellhit > 0) + if hasSpell then + y = AddSummaryHeader(child, "法术:", y, INSP_SPELL_COLOR) + if stats.spelldmg and stats.spelldmg > 0 then + y = AddSummaryRow(child, "法术伤害", "+" .. tostring(stats.spelldmg), y, nil, INSP_SPELL_COLOR) + end + if stats.healing and stats.healing > 0 then + y = AddSummaryRow(child, "法术治疗", "+" .. tostring(stats.healing), y) + end + if stats.spellcrit and stats.spellcrit > 0 then + y = AddSummaryRow(child, "法术暴击", "+" .. tostring(stats.spellcrit) .. "%", y) + end + if stats.spellhit and stats.spellhit > 0 then + y = AddSummaryRow(child, "法术命中", "+" .. tostring(stats.spellhit) .. "%", y) + end + y = y - SUMMARY_SECTION_GAP + end + + local hasDef = (stats.defense and stats.defense > 0) or (stats.dodge and stats.dodge > 0) + or (stats.parry and stats.parry > 0) or (stats.block and stats.block > 0) + if hasDef then + y = AddSummaryHeader(child, "防御:", y, INSP_DEF_COLOR) + if stats.defense and stats.defense > 0 then + y = AddSummaryRow(child, "防御技能", "+" .. tostring(stats.defense), y, nil, INSP_DEF_COLOR) + end + if stats.dodge and stats.dodge > 0 then + y = AddSummaryRow(child, "躲闪", "+" .. tostring(stats.dodge) .. "%", y) + end + if stats.parry and stats.parry > 0 then + y = AddSummaryRow(child, "招架", "+" .. tostring(stats.parry) .. "%", y) + end + if stats.block and stats.block > 0 then + y = AddSummaryRow(child, "格挡", "+" .. tostring(stats.block) .. "%", y) + end + y = y - SUMMARY_SECTION_GAP + end + + if stats.mp5 and stats.mp5 > 0 then + y = AddSummaryHeader(child, "回复:", y, INSP_REGEN_COLOR) + y = AddSummaryRow(child, "装备回蓝", tostring(stats.mp5) .. " MP/5s", y, nil, INSP_REGEN_COLOR) + y = y - SUMMARY_SECTION_GAP + end + + local resInfo = { + { k = "arcaneres", n = "奥术抗性" }, { k = "fireres", n = "火焰抗性" }, + { k = "natureres", n = "自然抗性" }, { k = "frostres", n = "冰霜抗性" }, + { k = "shadowres", n = "暗影抗性" }, + } + local hasRes = false + for _, ri in ipairs(resInfo) do + if stats[ri.k] and stats[ri.k] > 0 then hasRes = true; break end + end + if hasRes then + y = AddSummaryHeader(child, "抗性:", y, INSP_RESIST_COLORS.arcaneres) + for _, ri in ipairs(resInfo) do + local v = stats[ri.k] or 0 + if v > 0 then + local c = INSP_RESIST_COLORS[ri.k] or T.valueText + y = AddSummaryRow(child, ri.n, "+" .. tostring(v), y, c, c) + end + end + y = y - SUMMARY_SECTION_GAP + end + + if not HasAnyStats(stats) then + y = AddSummaryHeader(child, "提示:", y, T.dimText) + local noData = MakeFS(child, 9, "LEFT", T.dimText) + noData:SetPoint("TOPLEFT", child, "TOPLEFT", 8, y) + noData:SetText("未获取到装备属性数据") + table.insert(child._r, noData) + y = y - SUMMARY_ROW_H + end + + inspSummary.statsScroll:SetContentHeight(math.abs(y) + 12) +end + +function IP:BuildInspectEquipList() + if not inspSummary then return end + local child = inspSummary.equipScroll.child + HideSummaryRows(child) + local y = -4 + + y = AddSummaryHeader(child, "装备列表 & 附魔检查:", y, T.gold) + + local unit = GetInspectUnit() + local totalSlots = 0 + local enchCount = 0 + + for si = 1, table.getn(ENCHANTABLE_INSPECT_SLOTS) do + local slot = ENCHANTABLE_INSPECT_SLOTS[si] + local link = GetInventoryItemLink(unit, slot.id) + + if link then + totalSlots = totalSlots + 1 + local _, _, rawName = string.find(link, "%[(.-)%]") + local itemName = rawName or slot.label + + local quality = nil + local _, _, qH = string.find(link, "|c(%x+)|H") + local qMap = { + ["ff9d9d9d"] = 0, ["ffffffff"] = 1, ["ff1eff00"] = 2, + ["ff0070dd"] = 3, ["ffa335ee"] = 4, ["ffff8000"] = 5, + } + if qH then quality = qMap[qH] end + local nc = (quality and QUALITY_COLORS[quality]) or T.valueText + + local sf = MakeFS(child, 8, "LEFT", T.dimText) + sf:SetPoint("TOPLEFT", child, "TOPLEFT", 4, y) + sf:SetText(slot.label) + sf:SetWidth(32) + table.insert(child._r, sf) + + local nf = MakeFS(child, 9, "LEFT", nc) + nf:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + nf:SetWidth(120) + if string.len(itemName) > 16 then + itemName = string.sub(itemName, 1, 14) .. ".." + end + nf:SetText(itemName) + table.insert(child._r, nf) + + local hasE, eTxt = false, nil + local eOk, eR1, eR2 = pcall(GetInspectEnchant, slot.id) + if eOk then hasE = eR1; eTxt = eR2 end + + local ico = MakeFS(child, 9, "RIGHT") + ico:SetPoint("TOPRIGHT", child, "TOPRIGHT", -8, y) + if hasE then + ico:SetTextColor(INSP_ENCHANTED[1], INSP_ENCHANTED[2], INSP_ENCHANTED[3]) + ico:SetText("*") + enchCount = enchCount + 1 + else + ico:SetTextColor(INSP_NO_ENCHANT[1], INSP_NO_ENCHANT[2], INSP_NO_ENCHANT[3]) + ico:SetText("-") + end + table.insert(child._r, ico) + + y = y - SUMMARY_ROW_H + + if hasE and eTxt then + local ef = MakeFS(child, 8, "LEFT", INSP_ENCHANTED) + ef:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + ef:SetWidth(145) + ef:SetText(" " .. eTxt) + table.insert(child._r, ef) + y = y - 12 + elseif not hasE then + local ef = MakeFS(child, 8, "LEFT", INSP_NO_ENCHANT) + ef:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + ef:SetText(" 未附魔") + table.insert(child._r, ef) + y = y - 12 + end + y = y - 2 + else + local sf = MakeFS(child, 8, "LEFT", T.dimText) + sf:SetPoint("TOPLEFT", child, "TOPLEFT", 4, y) + sf:SetText(slot.label) + table.insert(child._r, sf) + + local ef = MakeFS(child, 9, "LEFT", T.dimText) + ef:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + ef:SetText("-- 未装备 --") + table.insert(child._r, ef) + y = y - SUMMARY_ROW_H - 2 + end + end + + y = y - SUMMARY_SECTION_GAP + y = AddSummaryHeader(child, "附魔统计:", y, T.gold) + local sc2 = (enchCount == totalSlots and totalSlots > 0) and INSP_ENCHANTED or INSP_NO_ENCHANT + y = AddSummaryRow(child, "已附魔/总装备", enchCount .. "/" .. totalSlots, y, nil, sc2) + if enchCount < totalSlots then + y = AddSummaryRow(child, "缺少附魔", tostring(totalSlots - enchCount) .. " 件", y, INSP_NO_ENCHANT, INSP_NO_ENCHANT) + end + + inspSummary.equipScroll:SetContentHeight(math.abs(y) + 12) +end + +function IP:ShowSummary() + BuildInspectSummary() + if ipanel and ipanel:IsShown() then + inspSummary:ClearAllPoints() + inspSummary:SetPoint("TOPLEFT", ipanel, "TOPRIGHT", 2, 0) + else + inspSummary:ClearAllPoints() + inspSummary:SetPoint("CENTER", UIParent, "CENTER", 200, 0) + end + inspSummary:Show() + + IP:SetSummaryTab(2) +end + +function IP:HideSummary() + if inspSummary then inspSummary:Hide() end +end + +function IP:RefreshSummary() + if not inspSummary or not inspSummary:IsShown() then return end + IP:SetSummaryTab(inspSummary.curTab or 1) +end + +-------------------------------------------------------------------------------- +-- Open native InspectFrame for a specific tab (honor / talent) +-- Turtle WoW tabs: 1=角色, 2=荣誉, 3=天赋, ... +-------------------------------------------------------------------------------- +local NATIVE_TAB_INDEX = { honor = 2, talent = 3 } + +function IP:OpenNativeTab(which) + local unit = inspectUnit or "target" + if not UnitExists(unit) then return end + + local tabIdx = NATIVE_TAB_INDEX[which] + + self.switchingToNative = true + self.allowNativeFrame = true + + if ipanel then ipanel:Hide() end + self.switchingToNative = false + + if not IsAddOnLoaded("Blizzard_InspectUI") then + pcall(function() LoadAddOn("Blizzard_InspectUI") end) + end + + local inspF = _G["InspectFrame"] + if inspF and inspF._origShow then + inspF.Show = inspF._origShow + inspF._origShow = nil + end + + if IP._origInspectUnit then + IP._origInspectUnit(unit) + end + + inspF = _G["InspectFrame"] + if inspF then + inspF:SetAlpha(1) + inspF:Show() + end + + if tabIdx then + local tab = _G["InspectFrameTab" .. tabIdx] + if tab and tab.Click then + tab:Click() + elseif tab and tab:GetScript("OnClick") then + tab:GetScript("OnClick")() + end + end + + if not self._resetFrame then + self._resetFrame = CreateFrame("Frame", nil, UIParent) + end + self._resetFrame.elapsed = 0 + self._resetFrame:SetScript("OnUpdate", function() + this.elapsed = (this.elapsed or 0) + (arg1 or 0) + if this.elapsed > 1.0 then + IP.allowNativeFrame = false + this:SetScript("OnUpdate", nil) + end + end) +end + +-------------------------------------------------------------------------------- +-- Open / Close / Toggle +-------------------------------------------------------------------------------- +function IP:Open(unit) + inspectUnit = unit or "target" + + if not UnitExists(inspectUnit) then + if SFrames and SFrames.Print then + SFrames:Print("没有有效的观察目标。") + end + return + end + if not UnitIsPlayer(inspectUnit) then + if SFrames and SFrames.Print then + SFrames:Print("只能观察其他玩家。") + end + return + end + + CreateMainFrame() + self:BuildEquipmentPage() + + NotifyInspect(inspectUnit) + + ipanel:Show() + self:UpdateTitle() + self:UpdateEquipment() + self:ShowSummary() +end + +function IP:Close() + self:HideSummary() + if ipanel then ipanel:Hide() end + if ClearInspectPlayer then ClearInspectPlayer() end + inspectUnit = nil +end + +function IP:Toggle(unit) + if ipanel and ipanel:IsShown() then + self:Close() + else + self:Open(unit) + end +end + +-------------------------------------------------------------------------------- +-- Events & Hooking +-------------------------------------------------------------------------------- +local eventFrame = CreateFrame("Frame", "SFramesIPEvents", UIParent) +eventFrame:RegisterEvent("UNIT_INVENTORY_CHANGED") +eventFrame:RegisterEvent("ADDON_LOADED") + +eventFrame:SetScript("OnEvent", function() + if event == "ADDON_LOADED" then + -- Re-hook InspectUnit whenever a new addon loads (in case it replaces our hook) + if type(InspectUnit) == "function" and InspectUnit ~= IP._ourHook then + IP._origInspectUnit = InspectUnit + local hook = function(unit) + if (SFramesDB and SFramesDB.enableInspect == false) or IP.allowNativeFrame then + if IP._origInspectUnit then + IP._origInspectUnit(unit) + end + return + end + IP:Open(unit or "target") + end + IP._ourHook = hook + InspectUnit = hook + end + return + end + + if event == "UNIT_INVENTORY_CHANGED" then + if not ipanel or not ipanel:IsShown() then return end + local unit = GetInspectUnit() + if arg1 and UnitIsUnit(arg1, unit) then + IP:UpdateEquipment() + IP:RefreshSummary() + end + end +end) + +-- Hook UnitPopup_OnClick to catch right-click menu "Inspect" +if UnitPopup_OnClick then + local orig_UnitPopup_OnClick = UnitPopup_OnClick + UnitPopup_OnClick = function() + local button = this and this.value + if button == "INSPECT" and not (SFramesDB and SFramesDB.enableInspect == false) then + local dropdownFrame = _G[UIDROPDOWNMENU_INIT_MENU] + local unit = (dropdownFrame and dropdownFrame.unit) or "target" + IP:Open(unit) + return + end + return orig_UnitPopup_OnClick() + end +end + +-- Hook InspectUnit +local function HookInspectUnit() + if type(InspectUnit) ~= "function" then return end + if InspectUnit == IP._ourHook then return end + IP._origInspectUnit = InspectUnit + local hook = function(unit) + if (SFramesDB and SFramesDB.enableInspect == false) or IP.allowNativeFrame then + if IP._origInspectUnit then + IP._origInspectUnit(unit) + end + return + end + IP:Open(unit or "target") + end + IP._ourHook = hook + InspectUnit = hook +end + +-- Hook ShowUIPanel to block native InspectFrame when we don't want it +if ShowUIPanel then + local _origShowUIPanel = ShowUIPanel + ShowUIPanel = function(frame) + if frame and frame.GetName and not IP.allowNativeFrame and not (SFramesDB and SFramesDB.enableInspect == false) then + local name = frame:GetName() or "" + if string.find(name, "Inspect") then + return + end + end + return _origShowUIPanel(frame) + end +end + +HookInspectUnit() diff --git a/Mail.lua b/Mail.lua new file mode 100644 index 0000000..36db9a0 --- /dev/null +++ b/Mail.lua @@ -0,0 +1,1633 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Mail UI (Mail.lua) +-- Replaces MailFrame with Nanami-UI styled interface +-- Tabs: Inbox / Send +-- Inbox: select-all / per-item checkboxes, batch collect +-- Send: multi-item queue, split into individual sends +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.Mail = {} +local ML = SFrames.Mail +SFramesDB = SFramesDB or {} + +-- Save original Blizzard functions BEFORE other addons (TurtleMail etc.) hook them. +-- File-level locals are captured at load time, which is before later-alphabetical addons. +local _ClickSendMailItemButton = ClickSendMailItemButton +local _PickupContainerItem = PickupContainerItem +local _ClearCursor = ClearCursor +local _SendMail = SendMail + +-------------------------------------------------------------------------------- +-- Theme +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + moneyGold = { 1, 0.84, 0.0 }, + moneySilver = { 0.78, 0.78, 0.78 }, + moneyCopper = { 0.71, 0.43, 0.18 }, + codColor = { 1.0, 0.35, 0.35 }, + unreadMark = { 1.0, 0.85, 0.3 }, + successText = { 0.3, 1.0, 0.4 }, + errorText = { 1.0, 0.3, 0.3 }, + friendColor = { 0.3, 1.0, 0.5 }, + guildColor = { 0.4, 0.8, 1.0 }, + whoColor = { 0.85, 0.85, 0.85 }, +}) + +-------------------------------------------------------------------------------- +-- Shared state table (avoids excessive upvalues) +-------------------------------------------------------------------------------- +local S = { + frame = nil, -- MainFrame + inboxRows = {}, + currentTab = 1, + inboxPage = 1, + inboxChecked = {}, + collectQueue = {}, + collectTimer = nil, + isCollecting = false, + sendQueue = {}, + isSending = false, + collectElapsed = 0, + multiSend = nil, -- active multi-send state table +} + +local L = { + W = 360, H = 480, HEADER = 34, PAD = 12, TAB_H = 28, + BOTTOM = 46, ROWS = 8, ROW_H = 38, ICON = 30, MAX_SEND = 12, +} + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +local function FormatMoneyString(copper) + if not copper or copper <= 0 then return "0|cFFB87333c|r" end + local g = math.floor(copper / 10000) + local sv = math.floor(math.mod(copper, 10000) / 100) + local c = math.mod(copper, 100) + local parts = "" + if g > 0 then parts = parts .. "|cFFFFD700" .. g .. "g|r " end + if sv > 0 then parts = parts .. "|cFFC7C7CF" .. sv .. "s|r " end + if c > 0 then parts = parts .. "|cFFB87333" .. c .. "c|r" end + return parts +end + +local function CreateMoneyIcons(parent, fontSize, iconSize) + fontSize = fontSize or 10 + iconSize = iconSize or 11 + local font = GetFont() + local mf = CreateFrame("Frame", nil, parent) + mf:SetWidth(100); mf:SetHeight(iconSize + 2) + + local function MakePair(mfRef, r, g, b, tcL, tcR) + local txt = mfRef:CreateFontString(nil, "OVERLAY") + txt:SetFont(font, fontSize, "OUTLINE"); txt:SetTextColor(r, g, b) + local tex = mfRef:CreateTexture(nil, "ARTWORK") + tex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + tex:SetTexCoord(tcL, tcR, 0, 1); tex:SetWidth(iconSize); tex:SetHeight(iconSize) + return txt, tex + end + mf.gTxt, mf.gTex = MakePair(mf, 1, 0.84, 0, 0, 0.25) + mf.sTxt, mf.sTex = MakePair(mf, 0.78, 0.78, 0.81, 0.25, 0.5) + mf.cTxt, mf.cTex = MakePair(mf, 0.72, 0.45, 0.2, 0.5, 0.75) + + function mf:SetMoney(copper) + copper = copper or 0 + local gv = math.floor(copper / 10000) + local sv = math.floor(math.mod(copper, 10000) / 100) + local cv = math.mod(copper, 100) + self.gTxt:Hide(); self.gTex:Hide(); self.gTxt:ClearAllPoints() + self.sTxt:Hide(); self.sTex:Hide(); self.sTxt:ClearAllPoints() + self.cTxt:Hide(); self.cTex:Hide(); self.cTxt:ClearAllPoints() + self.gTex:ClearAllPoints(); self.sTex:ClearAllPoints(); self.cTex:ClearAllPoints() + if copper <= 0 then return end + local anchor = nil + local function Attach(txt, tex, val) + txt:SetText(val) + txt:ClearAllPoints(); tex:ClearAllPoints() + if anchor then txt:SetPoint("LEFT", anchor, "RIGHT", 3, 0) + else txt:SetPoint("LEFT", self, "LEFT", 0, 0) end + tex:SetPoint("LEFT", txt, "RIGHT", 1, 0) + txt:Show(); tex:Show() + anchor = tex + end + if gv > 0 then Attach(self.gTxt, self.gTex, gv) end + if sv > 0 then Attach(self.sTxt, self.sTex, sv) end + if cv > 0 then Attach(self.cTxt, self.cTex, cv) end + end + return mf +end + +local function FormatExpiry(daysLeft) + if not daysLeft then return "" end + local d = math.floor(daysLeft) + if d <= 0 then return "|cFFFF3333即将过期|r" end + if d == 1 then return "|cFFFF6633剩余 1 天|r" end + if d <= 3 then return "|cFFFFAA33剩余 " .. d .. " 天|r" end + return "|cFF88FF88" .. d .. " 天|r" +end + +-------------------------------------------------------------------------------- +-- Action Button Factory +-------------------------------------------------------------------------------- +local function CreateActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 100) + btn:SetHeight(26) + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + + btn.disabled = false + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + btn:SetScript("OnMouseDown", function() + if not this.disabled then + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end + end) + btn:SetScript("OnMouseUp", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end + end) + + return btn +end + +-------------------------------------------------------------------------------- +-- Tab Button Factory +-------------------------------------------------------------------------------- +local function CreateTabBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 70) + btn:SetHeight(22) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + btn:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], 0.5) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 12, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + btn.label = fs + + btn:SetScript("OnEnter", function() + if not this.active then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end + end) + btn:SetScript("OnLeave", function() + if this.active then + this:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], T.tabActiveBg[4]) + this:SetBackdropBorderColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], T.tabActiveBorder[4]) + else + this:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + this:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], 0.5) + end + end) + + function btn:SetActive(flag) + self.active = flag + if flag then + self:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], T.tabActiveBg[4]) + self:SetBackdropBorderColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], T.tabActiveBorder[4]) + self.label:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + self:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + self:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], 0.5) + self.label:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end + + return btn +end + +-------------------------------------------------------------------------------- +-- Checkbox Factory +-------------------------------------------------------------------------------- +local function CreateSmallCheckbox(parent, size) + local sz = size or 16 + local cb = CreateFrame("Button", nil, parent) + cb:SetWidth(sz); cb:SetHeight(sz) + cb:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + cb:SetBackdropColor(T.checkBg[1], T.checkBg[2], T.checkBg[3], T.checkBg[4]) + cb:SetBackdropBorderColor(T.checkBorder[1], T.checkBorder[2], T.checkBorder[3], T.checkBorder[4]) + local mark = cb:CreateTexture(nil, "OVERLAY") + mark:SetTexture("Interface\\Buttons\\UI-CheckBox-Check") + mark:SetAllPoints(cb); mark:Hide() + cb.mark = mark; cb.checked = false + function cb:SetChecked(flag) + self.checked = flag + if flag then self.mark:Show(); self:SetBackdropColor(T.checkFill[1], T.checkFill[2], T.checkFill[3], 0.3) + else self.mark:Hide(); self:SetBackdropColor(T.checkBg[1], T.checkBg[2], T.checkBg[3], T.checkBg[4]) end + end + function cb:IsChecked() return self.checked end + cb:SetScript("OnClick", function() + this:SetChecked(not this.checked) + if this.onToggle then this.onToggle(this.checked) end + end) + cb:SetScript("OnEnter", function() this:SetBackdropBorderColor(T.checkHoverBorder[1], T.checkHoverBorder[2], T.checkHoverBorder[3], T.checkHoverBorder[4]) end) + cb:SetScript("OnLeave", function() this:SetBackdropBorderColor(T.checkBorder[1], T.checkBorder[2], T.checkBorder[3], T.checkBorder[4]) end) + return cb +end + +-------------------------------------------------------------------------------- +-- Styled EditBox Factory +-------------------------------------------------------------------------------- +local function CreateStyledEditBox(parent, width, height, numeric) + local eb = CreateFrame("EditBox", nil, parent) + eb:SetWidth(width or 120); eb:SetHeight(height or 22) + eb:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + eb:SetBackdropColor(T.inputBg[1], T.inputBg[2], T.inputBg[3], T.inputBg[4] or 0.95) + eb:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], 0.8) + eb:SetFont(GetFont(), 11, "OUTLINE") + eb:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + eb:SetJustifyH("LEFT"); eb:SetAutoFocus(false); eb:SetTextInsets(6, 6, 2, 2) + if numeric then eb:SetNumeric(true) end + return eb +end + +-------------------------------------------------------------------------------- +-- INBOX: Row Factory +-------------------------------------------------------------------------------- +local function CreateInboxRow(parent, index) + local row = CreateFrame("Frame", "SFramesMailInboxRow" .. index, parent) + row:SetWidth(L.W - L.PAD * 2); row:SetHeight(L.ROW_H) + local bg = row:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\Buttons\\WHITE8X8"); bg:SetAllPoints(row) + local normalR, normalG, normalB, normalA + if math.mod(index, 2) == 0 then + normalR, normalG, normalB, normalA = T.rowNormal[1], T.rowNormal[2], T.rowNormal[3], T.rowNormal[4] + else + normalR, normalG, normalB, normalA = T.panelBg[1], T.panelBg[2], T.panelBg[3], 0.3 + end + bg:SetVertexColor(normalR, normalG, normalB, normalA) + row.bg = bg + + local hl = row:CreateTexture(nil, "ARTWORK") + hl:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + hl:SetBlendMode("ADD"); hl:SetAllPoints(row); hl:SetAlpha(0); hl:Hide() + row.highlight = hl + + row:EnableMouse(false) + + local cb = CreateSmallCheckbox(row, 16) + cb:SetPoint("LEFT", row, "LEFT", 4, 0) + cb:SetFrameLevel(row:GetFrameLevel() + 10) + row.checkbox = cb + + local iconFrame = CreateFrame("Frame", nil, row) + iconFrame:SetWidth(L.ICON); iconFrame:SetHeight(L.ICON) + iconFrame:SetPoint("LEFT", cb, "RIGHT", 6, 0) + iconFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + iconFrame:EnableMouse(true) + iconFrame:SetScript("OnEnter", function() + if not row.mailIndex then return end + row.highlight:SetAlpha(0.1); row.highlight:Show() + GameTooltip:SetOwner(iconFrame, "ANCHOR_RIGHT") + pcall(GameTooltip.SetInboxItem, GameTooltip, row.mailIndex) + GameTooltip:Show() + end) + iconFrame:SetScript("OnLeave", function() + row.highlight:SetAlpha(0); row.highlight:Hide() + GameTooltip:Hide() + end) + iconFrame:SetScript("OnMouseUp", function() + if row.mailIndex then ML:ShowMailDetail(row.mailIndex) end + end) + row.iconFrame = iconFrame + + local icon = iconFrame:CreateTexture(nil, "ARTWORK") + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetPoint("TOPLEFT", 3, -3); icon:SetPoint("BOTTOMRIGHT", -3, 3) + row.icon = icon + + local font = GetFont() + local senderFS = row:CreateFontString(nil, "OVERLAY") + senderFS:SetFont(font, 11, "OUTLINE") + senderFS:SetPoint("TOPLEFT", iconFrame, "TOPRIGHT", 6, -2) + senderFS:SetWidth(110); senderFS:SetJustifyH("LEFT") + senderFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + row.senderFS = senderFS + + local subjectFS = row:CreateFontString(nil, "OVERLAY") + subjectFS:SetFont(font, 9, "OUTLINE") + subjectFS:SetPoint("TOPLEFT", senderFS, "BOTTOMLEFT", 0, -1) + subjectFS:SetWidth(110); subjectFS:SetJustifyH("LEFT") + subjectFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + row.subjectFS = subjectFS + + local moneyFrame = CreateMoneyIcons(row, 9, 10) + moneyFrame:SetPoint("RIGHT", row, "RIGHT", -52, 6) + row.moneyFrame = moneyFrame + + local codFS = row:CreateFontString(nil, "OVERLAY") + codFS:SetFont(font, 9, "OUTLINE"); codFS:SetTextColor(1, 0.33, 0.33) + codFS:SetPoint("RIGHT", moneyFrame, "LEFT", -2, 0) + codFS:Hide() + row.codFS = codFS + + local expiryFS = row:CreateFontString(nil, "OVERLAY") + expiryFS:SetFont(font, 9, "OUTLINE") + expiryFS:SetPoint("RIGHT", row, "RIGHT", -52, -6); expiryFS:SetJustifyH("RIGHT") + row.expiryFS = expiryFS + + local takeBtn = CreateActionBtn(row, "收取", 40) + takeBtn:SetHeight(17); takeBtn:SetPoint("TOPRIGHT", row, "TOPRIGHT", -6, -3) + takeBtn:SetFrameLevel(row:GetFrameLevel() + 10) + row.takeBtn = takeBtn + + local returnBtn = CreateActionBtn(row, "退回", 40) + returnBtn:SetHeight(17); returnBtn:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", -6, 3) + returnBtn:SetFrameLevel(row:GetFrameLevel() + 10) + row.returnBtn = returnBtn + + row.mailIndex = nil + return row +end + +-------------------------------------------------------------------------------- +-- INBOX: Update +-------------------------------------------------------------------------------- +local function UpdateInbox() + if not S.frame or not S.frame:IsVisible() or S.currentTab ~= 1 then return end + local numItems = GetInboxNumItems() + local totalPages = math.max(1, math.ceil(numItems / L.ROWS)) + if S.inboxPage > totalPages then S.inboxPage = totalPages end + if S.inboxPage < 1 then S.inboxPage = 1 end + + S.frame.inboxPageText:SetText(string.format("第 %d / %d 页 (%d 封)", S.inboxPage, totalPages, numItems)) + S.frame.inboxPrevBtn:SetDisabled(S.inboxPage <= 1) + S.frame.inboxNextBtn:SetDisabled(S.inboxPage >= totalPages) + + for i = 1, L.ROWS do + local row = S.inboxRows[i] + local mi = (S.inboxPage - 1) * L.ROWS + i + if mi <= numItems then + local _, _, sender, subject, money, CODAmount, daysLeft, hasItem, wasRead = GetInboxHeaderInfo(mi) + row.mailIndex = mi + if hasItem then + local _, itemTex = GetInboxItem(mi) + row.icon:SetTexture(itemTex or "Interface\\Icons\\INV_Misc_Note_01") + elseif money and money > 0 then + row.icon:SetTexture("Interface\\Icons\\INV_Misc_Coin_01") + else + row.icon:SetTexture("Interface\\Icons\\INV_Misc_Note_01") + end + row.senderFS:SetText(sender or "未知") + if not wasRead then + row.senderFS:SetTextColor(T.unreadMark[1], T.unreadMark[2], T.unreadMark[3]) + else + row.senderFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + row.subjectFS:SetText(subject or "") + row.codFS:Hide(); row.codFS:SetText("") + if money and money > 0 then + row.moneyFrame:SetMoney(money) + elseif CODAmount and CODAmount > 0 then + row.codFS:SetText("COD:"); row.codFS:Show() + row.moneyFrame:SetMoney(CODAmount) + else + row.moneyFrame:SetMoney(0) + end + row.expiryFS:SetText(FormatExpiry(daysLeft)) + local canTake = (hasItem or (money and money > 0)) and (not CODAmount or CODAmount == 0) + row.takeBtn:SetDisabled(not canTake) + row.takeBtn:SetScript("OnClick", function() + if row.mailIndex then + if hasItem then + TakeInboxItem(row.mailIndex) + elseif money and money > 0 then + local idx = row.mailIndex + TakeInboxMoney(idx) + if not S.deleteTimer then S.deleteTimer = CreateFrame("Frame") end + S.deleteElapsed = 0 + S.deleteTimer:SetScript("OnUpdate", function() + S.deleteElapsed = S.deleteElapsed + arg1 + if S.deleteElapsed >= 0.5 then + this:SetScript("OnUpdate", nil) + if idx <= GetInboxNumItems() then DeleteInboxItem(idx) end + end + end) + end + end + end) + row.returnBtn:SetScript("OnClick", function() + if row.mailIndex then ReturnInboxItem(row.mailIndex) end + end) + row.checkbox:SetChecked(S.inboxChecked[mi] == true) + row.checkbox.onToggle = function(checked) + S.inboxChecked[mi] = checked or nil + local any = false + for _, v in pairs(S.inboxChecked) do if v then any = true; break end end + S.frame.collectSelectedBtn:SetDisabled(not any) + end + if CODAmount and CODAmount > 0 then + row.checkbox:SetChecked(false); row.checkbox.disabled = true; S.inboxChecked[mi] = nil + else + row.checkbox.disabled = false + end + row:Show() + else + row.mailIndex = nil; row:Hide() + end + end + + local hasChecked = false + for _, v in pairs(S.inboxChecked) do if v then hasChecked = true; break end end + S.frame.collectSelectedBtn:SetDisabled(not hasChecked and not S.isCollecting) + S.frame.collectAllBtn:SetDisabled(numItems == 0 and not S.isCollecting) + if S.isCollecting then + S.frame.collectAllBtn.label:SetText("收取中...") + S.frame.collectSelectedBtn.label:SetText("收取中...") + else + S.frame.collectAllBtn.label:SetText("全部收取") + S.frame.collectSelectedBtn.label:SetText("收取选中") + end +end + +-------------------------------------------------------------------------------- +-- INBOX: Batch Collect +-------------------------------------------------------------------------------- +local function StopCollecting() + S.isCollecting = false; S.collectQueue = {}; S.collectPendingDelete = nil + if S.collectTimer then S.collectTimer:SetScript("OnUpdate", nil) end + UpdateInbox() +end + +local function ProcessCollectQueue() + if S.collectPendingDelete then + local mi = S.collectPendingDelete + S.collectPendingDelete = nil + if mi <= GetInboxNumItems() then DeleteInboxItem(mi) end + return + end + if table.getn(S.collectQueue) == 0 then StopCollecting(); return end + local mi = table.remove(S.collectQueue, 1) + if mi > GetInboxNumItems() then ProcessCollectQueue(); return end + local _, _, _, _, money, CODAmount, _, hasItem = GetInboxHeaderInfo(mi) + if CODAmount and CODAmount > 0 then ProcessCollectQueue(); return end + if hasItem then TakeInboxItem(mi) + elseif money and money > 0 then + TakeInboxMoney(mi) + S.collectPendingDelete = mi + else DeleteInboxItem(mi) end +end + +local function StartCollecting(indices) + if S.isCollecting then return end + S.collectQueue = {} + for i = table.getn(indices), 1, -1 do table.insert(S.collectQueue, indices[i]) end + if table.getn(S.collectQueue) == 0 then return end + S.isCollecting = true; S.collectElapsed = 0 + if not S.collectTimer then S.collectTimer = CreateFrame("Frame") end + local nextDelay = 0 + S.collectTimer:SetScript("OnUpdate", function() + if not S.isCollecting then this:SetScript("OnUpdate", nil); return end + S.collectElapsed = S.collectElapsed + arg1 + if S.collectElapsed >= nextDelay then + S.collectElapsed = 0; nextDelay = 0.5; ProcessCollectQueue() + end + end) + UpdateInbox() +end + +local function CollectAll() + local n = GetInboxNumItems() + if n == 0 then return end + local idx = {} + for i = 1, n do + local _, _, _, _, _, COD = GetInboxHeaderInfo(i) + if not COD or COD == 0 then table.insert(idx, i) end + end + StartCollecting(idx) +end + +local function CollectSelected() + local idx = {} + for k, v in pairs(S.inboxChecked) do if v then table.insert(idx, k) end end + table.sort(idx) + if table.getn(idx) == 0 then return end + S.inboxChecked = {} + StartCollecting(idx) +end + +local function SelectAllInbox() + local n = GetInboxNumItems() + for i = 1, n do + local _, _, _, _, _, COD = GetInboxHeaderInfo(i) + if not COD or COD == 0 then S.inboxChecked[i] = true end + end + UpdateInbox() +end + +local function DeselectAllInbox() + S.inboxChecked = {}; UpdateInbox() +end + +-------------------------------------------------------------------------------- +-- SEND: Item Queue +-------------------------------------------------------------------------------- +local function AddSendItem(bag, slot) + if table.getn(S.sendQueue) >= L.MAX_SEND then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[Nanami-Mail]|r 发送队列已满 (" .. L.MAX_SEND .. " 件)") + return + end + local link = GetContainerItemLink(bag, slot) + if not link then return end + local texture, count = GetContainerItemInfo(bag, slot) + for i = 1, table.getn(S.sendQueue) do + if S.sendQueue[i].bag == bag and S.sendQueue[i].slot == slot then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[Nanami-Mail]|r 该物品已在发送列表中"); return + end + end + table.insert(S.sendQueue, { bag = bag, slot = slot, link = link, texture = texture, count = count or 1 }) +end + +-------------------------------------------------------------------------------- +-- SEND: Accept cursor drag (find the locked bag slot the cursor picked up) +-------------------------------------------------------------------------------- +local function AcceptCursorItem() + if not CursorHasItem() then return false end + for bag = 0, 4 do + local slots = GetContainerNumSlots(bag) + for slot = 1, slots do + local _, _, locked = GetContainerItemInfo(bag, slot) + if locked then + AddSendItem(bag, slot) + ClearCursor() + ML:UpdateSendPanel() + return true + end + end + end + ClearCursor() + return false +end + +local function RemoveSendItem(index) + if index >= 1 and index <= table.getn(S.sendQueue) then table.remove(S.sendQueue, index) end +end + +local function ClearSendItems() S.sendQueue = {} end + +local function FlashStatus(text, color, duration) + if not S.frame or not S.frame.sendStatus then return end + S.frame.sendStatus:SetText(text) + S.frame.sendStatus:SetTextColor(color[1], color[2], color[3]) + S.statusFadeElapsed = 0 + if not S.statusFadeTimer then S.statusFadeTimer = CreateFrame("Frame") end + S.statusFadeTimer:SetScript("OnUpdate", function() + S.statusFadeElapsed = S.statusFadeElapsed + arg1 + if S.statusFadeElapsed >= (duration or 3) then + S.frame.sendStatus:SetText("") + this:SetScript("OnUpdate", nil) + end + end) +end + +-------------------------------------------------------------------------------- +-- SEND: Multi-Send Logic +-------------------------------------------------------------------------------- +local function ResetSendForm() + if not S.frame then return end + ClearSendItems() + if S.frame.toEditBox then S.frame.toEditBox:SetText("") end + if S.frame.subjectEditBox then S.frame.subjectEditBox:SetText("") end + if S.frame.bodyEditBox then S.frame.bodyEditBox:SetText("") end + if S.frame.goldEB then S.frame.goldEB:SetText("0") end + if S.frame.silverEB then S.frame.silverEB:SetText("0") end + if S.frame.copperEB then S.frame.copperEB:SetText("0") end + ML:UpdateSendPanel() +end + +local function FinishMultiSend() + local ms = S.multiSend + S.multiSend = nil + S.isSending = false + if S.updateFrame then S.updateFrame:SetScript("OnUpdate", nil) end + ResetSendForm() + if S.frame and S.frame.sendBtn then + S.frame.sendBtn.label:SetText("发送"); S.frame.sendBtn:SetDisabled(false) + end + if ms then + DEFAULT_CHAT_FRAME:AddMessage("|cFF88FF88[Nanami-Mail]|r 所有 " .. ms.total .. " 封邮件已发送完成") + FlashStatus("全部发送完成!", T.successText, 3) + end +end + +local function AbortMultiSend(reason) + S.multiSend = nil + S.isSending = false + if S.updateFrame then S.updateFrame:SetScript("OnUpdate", nil) end + if S.frame and S.frame.sendBtn then + S.frame.sendBtn.label:SetText("发送"); S.frame.sendBtn:SetDisabled(false) + end + if S.frame and S.frame.sendStatus then S.frame.sendStatus:SetText("") end + if reason then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[Nanami-Mail]|r " .. reason) + FlashStatus("发送失败!", T.errorText, 5) + end +end + +local function DoMultiSend(recipient, subject, body, money) + if S.isSending then return end + if not recipient or recipient == "" then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[Nanami-Mail]|r 请输入收件人名字"); return + end + if not subject or subject == "" then subject = "Mail" end + if S.frame and S.frame.sendBtn then + S.frame.sendBtn.label:SetText("发送中..."); S.frame.sendBtn:SetDisabled(true) + end + local items = {} + for i = 1, table.getn(S.sendQueue) do table.insert(items, S.sendQueue[i]) end + + -- No attachments: plain text / money mail + if table.getn(items) == 0 then + if money and money > 0 then SetSendMailMoney(money) end + SendMail(recipient, subject, body or "") + return + end + + S.multiSend = { + items = items, + recipient = recipient, + subject = subject or "", + body = body or "", + money = money, + total = table.getn(items), + sentCount = 0, + phase = "attach", -- "attach" → "wait_send" → "cooldown" → "attach" ... + elapsed = 0, + } + S.isSending = true + + if not S.updateFrame then S.updateFrame = CreateFrame("Frame") end + S.updateFrame:SetScript("OnUpdate", function() + local ms = S.multiSend + if not ms then this:SetScript("OnUpdate", nil); return end + ms.elapsed = ms.elapsed + arg1 + + --------------------------------------------------------------- + -- Phase: attach — pick next item, attach to Blizzard mail slot, then send + --------------------------------------------------------------- + if ms.phase == "attach" then + ms.sentCount = ms.sentCount + 1 + if ms.sentCount > ms.total then + FinishMultiSend() + return + end + + local item = ms.items[ms.sentCount] + if not item then FinishMultiSend(); return end + + if S.frame and S.frame.sendStatus then + if S.statusFadeTimer then S.statusFadeTimer:SetScript("OnUpdate", nil) end + S.frame.sendStatus:SetText("发送中 " .. ms.sentCount .. "/" .. ms.total) + S.frame.sendStatus:SetTextColor(T.successText[1], T.successText[2], T.successText[3]) + end + + -- Ensure Blizzard send tab is active + if MailFrameTab_OnClick then MailFrameTab_OnClick(2) end + + -- Check item still in bag + if not GetContainerItemLink(item.bag, item.slot) then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[Nanami-Mail]|r 第" .. ms.sentCount .. "件物品已不在背包,跳过") + ms.elapsed = 0 + return + end + + -- Attach: clear → pick up → place + _ClearCursor() + _ClickSendMailItemButton() + _ClearCursor() + _PickupContainerItem(item.bag, item.slot) + _ClickSendMailItemButton() + + -- Verify + if not GetSendMailItem() then + DEFAULT_CHAT_FRAME:AddMessage("|cFFFF6666[Nanami-Mail]|r 第" .. ms.sentCount .. "件附件挂载失败,跳过") + _ClearCursor() + ms.elapsed = 0 + return + end + + -- Money only on first mail + if ms.sentCount == 1 and ms.money and ms.money > 0 then + SetSendMailMoney(ms.money) + end + + -- Send this single-attachment mail + ms.sendOk = false + ms.phase = "wait_send" + ms.elapsed = 0 + SendMail(ms.recipient, ms.subject, ms.body) + + --------------------------------------------------------------- + -- Phase: wait_send — waiting for MAIL_SEND_SUCCESS + --------------------------------------------------------------- + elseif ms.phase == "wait_send" then + if ms.sendOk then + ms.phase = "cooldown" + ms.elapsed = 0 + elseif ms.elapsed >= 15 then + AbortMultiSend("发送超时,已停止") + end + + --------------------------------------------------------------- + -- Phase: cooldown — let server & Blizzard UI fully reset + --------------------------------------------------------------- + elseif ms.phase == "cooldown" then + if ms.elapsed >= 0.6 then + ms.phase = "attach" + ms.elapsed = 0 + end + end + end) +end + +-------------------------------------------------------------------------------- +-- SEND: Panel Update +-------------------------------------------------------------------------------- +function ML:UpdateSendPanel() + if not S.frame or S.currentTab ~= 2 then return end + if not S.frame.sendItemSlots then return end + for i = 1, L.MAX_SEND do + local slot = S.frame.sendItemSlots[i] + if not slot then break end + local entry = S.sendQueue[i] + if entry then + slot.icon:SetTexture(entry.texture); slot.icon:Show() + slot.countFS:SetText(entry.count > 1 and entry.count or "") + slot.removeBtn:Show(); slot.hasItem = true + else + slot.icon:SetTexture(nil); slot.icon:Hide() + slot.countFS:SetText(""); slot.removeBtn:Hide(); slot.hasItem = false + end + end +end + +-------------------------------------------------------------------------------- +-- BUILD: Main frame + header + tabs +-------------------------------------------------------------------------------- +local function BuildMainFrame() + local f = CreateFrame("Frame", "SFramesMailFrame", UIParent) + f:SetWidth(L.W); f:SetHeight(L.H) + f:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 16, -104) + f:SetFrameStrata("HIGH"); f:SetToplevel(true) + f:EnableMouse(true); f:SetMovable(true); f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + SetRoundBackdrop(f); CreateShadow(f) + S.frame = f + + local font = GetFont() + local header = CreateFrame("Frame", nil, f) + header:SetPoint("TOPLEFT", 0, 0); header:SetPoint("TOPRIGHT", 0, 0); header:SetHeight(L.HEADER) + header:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8" }) + header:SetBackdropColor(T.headerBg[1], T.headerBg[2], T.headerBg[3], T.headerBg[4]) + + local titleIco = SFrames:CreateIcon(header, "mail", 16) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("LEFT", header, "LEFT", L.PAD, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local titleFS = header:CreateFontString(nil, "OVERLAY") + titleFS:SetFont(font, 14, "OUTLINE"); titleFS:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]); titleFS:SetText("邮箱") + + local closeBtn = CreateFrame("Button", nil, header) + closeBtn:SetWidth(20); closeBtn:SetHeight(20); closeBtn:SetPoint("RIGHT", header, "RIGHT", -8, 0) + local closeTex = closeBtn:CreateTexture(nil, "ARTWORK") + closeTex:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + closeTex:SetTexCoord(0.25, 0.375, 0, 0.125); closeTex:SetAllPoints() + closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + closeBtn:SetScript("OnClick", function() S.frame:Hide() end) + closeBtn:SetScript("OnEnter", function() closeTex:SetVertexColor(1, 0.6, 0.7) end) + closeBtn:SetScript("OnLeave", function() closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) end) + + local sep = f:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8"); sep:SetHeight(1) + sep:SetPoint("TOPLEFT", f, "TOPLEFT", 6, -L.HEADER) + sep:SetPoint("TOPRIGHT", f, "TOPRIGHT", -6, -L.HEADER) + sep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + local tabInbox = CreateTabBtn(f, "收件箱", 70) + tabInbox:SetPoint("TOPLEFT", f, "TOPLEFT", L.PAD, -(L.HEADER + 6)) + tabInbox:SetScript("OnClick", function() S.currentTab = 1; ML:ShowInboxPanel() end) + f.tabInbox = tabInbox + + local tabSend = CreateTabBtn(f, "发送", 70) + tabSend:SetPoint("LEFT", tabInbox, "RIGHT", 4, 0) + tabSend:SetScript("OnClick", function() S.currentTab = 2; ML:ShowSendPanel() end) + f.tabSend = tabSend + + f:Hide() +end + +-------------------------------------------------------------------------------- +-- BUILD: Inbox panel +-------------------------------------------------------------------------------- +local function BuildInboxPanel() + local f = S.frame + local panelTop = L.HEADER + 6 + L.TAB_H + 4 + local ip = CreateFrame("Frame", nil, f) + ip:SetPoint("TOPLEFT", f, "TOPLEFT", 0, -panelTop) + ip:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0) + f.inboxPanel = ip + + local font = GetFont() + + local selAll = CreateActionBtn(ip, "全选", 50) + selAll:SetHeight(20); selAll:SetPoint("TOPLEFT", ip, "TOPLEFT", L.PAD, 0) + selAll:SetScript("OnClick", function() SelectAllInbox() end) + + local desel = CreateActionBtn(ip, "取消全选", 66) + desel:SetHeight(20); desel:SetPoint("LEFT", selAll, "RIGHT", 4, 0) + desel:SetScript("OnClick", function() DeselectAllInbox() end) + + local pageFS = ip:CreateFontString(nil, "OVERLAY") + pageFS:SetFont(font, 10, "OUTLINE"); pageFS:SetPoint("LEFT", desel, "RIGHT", 12, 0) + pageFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + f.inboxPageText = pageFS + + for i = 1, L.ROWS do + local row = CreateInboxRow(ip, i) + row:SetPoint("TOPLEFT", ip, "TOPLEFT", L.PAD, -(26 + (i - 1) * L.ROW_H)) + S.inboxRows[i] = row + end + + local bsep = ip:CreateTexture(nil, "ARTWORK") + bsep:SetTexture("Interface\\Buttons\\WHITE8X8"); bsep:SetHeight(1) + bsep:SetPoint("BOTTOMLEFT", ip, "BOTTOMLEFT", 6, L.BOTTOM) + bsep:SetPoint("BOTTOMRIGHT", ip, "BOTTOMRIGHT", -6, L.BOTTOM) + bsep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + local prev = CreateActionBtn(ip, "<", 28) + prev:SetHeight(22); prev:SetPoint("BOTTOMLEFT", ip, "BOTTOMLEFT", L.PAD, 12) + prev:SetScript("OnClick", function() S.inboxPage = S.inboxPage - 1; UpdateInbox() end) + f.inboxPrevBtn = prev + + local nxt = CreateActionBtn(ip, ">", 28) + nxt:SetHeight(22); nxt:SetPoint("LEFT", prev, "RIGHT", 4, 0) + nxt:SetScript("OnClick", function() S.inboxPage = S.inboxPage + 1; UpdateInbox() end) + f.inboxNextBtn = nxt + + local colSel = CreateActionBtn(ip, "收取选中", 80) + colSel:SetHeight(24); colSel:SetPoint("BOTTOMRIGHT", ip, "BOTTOMRIGHT", -L.PAD, 10) + colSel:SetScript("OnClick", function() + if S.isCollecting then StopCollecting() else CollectSelected() end + end) + f.collectSelectedBtn = colSel + + local colAll = CreateActionBtn(ip, "全部收取", 80) + colAll:SetHeight(24); colAll:SetPoint("RIGHT", colSel, "LEFT", -6, 0) + colAll:SetScript("OnClick", function() + if S.isCollecting then StopCollecting() else CollectAll() end + end) + f.collectAllBtn = colAll +end + +-------------------------------------------------------------------------------- +-- BUILD: Mail detail panel (overlays inbox when a mail is clicked) +-------------------------------------------------------------------------------- +local function BuildDetailPanel() + local f = S.frame + local panelTop = L.HEADER + 6 + L.TAB_H + 4 + local dp = CreateFrame("Frame", nil, f) + dp:SetPoint("TOPLEFT", f, "TOPLEFT", 0, -panelTop) + dp:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0) + dp:Hide() + f.detailPanel = dp + + local font = GetFont() + local pad = L.PAD + + local backBtn = CreateActionBtn(dp, "< 返回", 60) + backBtn:SetHeight(20); backBtn:SetPoint("TOPLEFT", dp, "TOPLEFT", pad, 0) + backBtn:SetScript("OnClick", function() ML:HideMailDetail() end) + + local senderFS = dp:CreateFontString(nil, "OVERLAY") + senderFS:SetFont(font, 11, "OUTLINE"); senderFS:SetJustifyH("LEFT") + senderFS:SetPoint("TOPLEFT", dp, "TOPLEFT", pad, -26) + senderFS:SetWidth(L.W - pad * 2) + senderFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + dp.senderFS = senderFS + + local subjectFS = dp:CreateFontString(nil, "OVERLAY") + subjectFS:SetFont(font, 11, "OUTLINE"); subjectFS:SetJustifyH("LEFT") + subjectFS:SetPoint("TOPLEFT", senderFS, "BOTTOMLEFT", 0, -4) + subjectFS:SetWidth(L.W - pad * 2) + subjectFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + dp.subjectFS = subjectFS + + local sep1 = dp:CreateTexture(nil, "ARTWORK") + sep1:SetTexture("Interface\\Buttons\\WHITE8X8"); sep1:SetHeight(1) + sep1:SetPoint("TOPLEFT", subjectFS, "BOTTOMLEFT", 0, -6) + sep1:SetPoint("RIGHT", dp, "RIGHT", -pad, 0) + sep1:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- Body scroll frame + local bsf = CreateFrame("ScrollFrame", "SFramesMailDetailScroll", dp, "UIPanelScrollFrameTemplate") + bsf:SetPoint("TOPLEFT", sep1, "BOTTOMLEFT", 0, -4) + bsf:SetWidth(L.W - pad * 2 - 24); bsf:SetHeight(180) + + local bodyFS = CreateFrame("Frame", nil, bsf) + bodyFS:SetWidth(L.W - pad * 2 - 36); bodyFS:SetHeight(400) + local bodyText = bodyFS:CreateFontString(nil, "OVERLAY") + bodyText:SetFont(font, 11, "OUTLINE") + bodyText:SetPoint("TOPLEFT", 0, 0) + bodyText:SetWidth(L.W - pad * 2 - 36); bodyText:SetJustifyH("LEFT"); bodyText:SetJustifyV("TOP") + bodyText:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + bsf:SetScrollChild(bodyFS) + dp.bodyText = bodyText + dp.bodyFrame = bodyFS + + local sep2 = dp:CreateTexture(nil, "ARTWORK") + sep2:SetTexture("Interface\\Buttons\\WHITE8X8"); sep2:SetHeight(1) + sep2:SetPoint("TOPLEFT", bsf, "BOTTOMLEFT", 0, -4) + sep2:SetPoint("RIGHT", dp, "RIGHT", -pad, 0) + sep2:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- Item + money info line + local infoFS = dp:CreateFontString(nil, "OVERLAY") + infoFS:SetFont(font, 10, "OUTLINE"); infoFS:SetJustifyH("LEFT") + infoFS:SetPoint("TOPLEFT", sep2, "BOTTOMLEFT", 0, -6) + infoFS:SetWidth(L.W - pad * 2) + infoFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + dp.infoFS = infoFS + + local moneyLabel = dp:CreateFontString(nil, "OVERLAY") + moneyLabel:SetFont(font, 10, "OUTLINE"); moneyLabel:SetTextColor(1, 0.84, 0) + moneyLabel:SetPoint("TOPLEFT", infoFS, "BOTTOMLEFT", 0, -3) + moneyLabel:Hide() + dp.detailMoneyLabel = moneyLabel + + local detailMoney = CreateMoneyIcons(dp, 10, 11) + detailMoney:SetPoint("LEFT", moneyLabel, "RIGHT", 4, 0) + detailMoney:Hide() + dp.detailMoney = detailMoney + + local codLabel = dp:CreateFontString(nil, "OVERLAY") + codLabel:SetFont(font, 10, "OUTLINE"); codLabel:SetTextColor(1, 0.33, 0.33) + codLabel:SetPoint("LEFT", detailMoney, "RIGHT", 8, 0) + codLabel:Hide() + dp.detailCodLabel = codLabel + + local detailCod = CreateMoneyIcons(dp, 10, 11) + detailCod:SetPoint("LEFT", codLabel, "RIGHT", 4, 0) + detailCod:Hide() + dp.detailCod = detailCod + + -- Action buttons at bottom + local takeItemBtn = CreateActionBtn(dp, "收取物品", 72) + takeItemBtn:SetHeight(24); takeItemBtn:SetPoint("BOTTOMLEFT", dp, "BOTTOMLEFT", pad, 10) + dp.takeItemBtn = takeItemBtn + + local takeMoneyBtn = CreateActionBtn(dp, "收取金币", 72) + takeMoneyBtn:SetHeight(24); takeMoneyBtn:SetPoint("LEFT", takeItemBtn, "RIGHT", 4, 0) + dp.takeMoneyBtn = takeMoneyBtn + + local returnBtn = CreateActionBtn(dp, "退回", 50) + returnBtn:SetHeight(24); returnBtn:SetPoint("LEFT", takeMoneyBtn, "RIGHT", 4, 0) + dp.returnBtn = returnBtn + + local deleteBtn = CreateActionBtn(dp, "删除", 50) + deleteBtn:SetHeight(24); deleteBtn:SetPoint("LEFT", returnBtn, "RIGHT", 4, 0) + dp.deleteBtn = deleteBtn + + local replyBtn = CreateActionBtn(dp, "回复", 50) + replyBtn:SetHeight(24); replyBtn:SetPoint("BOTTOMRIGHT", dp, "BOTTOMRIGHT", -pad, 10) + dp.replyBtn = replyBtn +end + +-------------------------------------------------------------------------------- +-- Show / Hide mail detail +-------------------------------------------------------------------------------- +function ML:ShowMailDetail(mailIndex) + if not S.frame or not S.frame.detailPanel then return end + local dp = S.frame.detailPanel + S.detailMailIndex = mailIndex + + local _, _, sender, subject, money, CODAmount, daysLeft, hasItem, wasRead = GetInboxHeaderInfo(mailIndex) + local bodyText = GetInboxText(mailIndex) + + dp.senderFS:SetText("发件人: |cFFFFFFFF" .. (sender or "未知") .. "|r " .. FormatExpiry(daysLeft)) + dp.subjectFS:SetText("主题: |cFFFFFFFF" .. (subject or "(无主题)") .. "|r") + + dp.bodyText:SetText(bodyText or "(无正文)") + local ok, textH = pcall(function() return dp.bodyText:GetStringHeight() end) + if not ok or not textH then textH = 40 end + dp.bodyFrame:SetHeight(math.max(textH + 10, 40)) + + local info = "" + if hasItem then + local itemName, itemTex = GetInboxItem(mailIndex) + if itemName then info = info .. "|cFFFFD700附件:|r " .. itemName end + end + if info == "" and (not money or money <= 0) and (not CODAmount or CODAmount <= 0) then + info = "无附件,无金币" + end + dp.infoFS:SetText(info) + + dp.detailMoneyLabel:Hide(); dp.detailMoney:Hide() + dp.detailCodLabel:Hide(); dp.detailCod:Hide() + if money and money > 0 then + dp.detailMoneyLabel:SetText("金额:"); dp.detailMoneyLabel:Show() + dp.detailMoney:SetMoney(money); dp.detailMoney:Show() + end + if CODAmount and CODAmount > 0 then + dp.detailCodLabel:SetText("COD:"); dp.detailCodLabel:Show() + dp.detailCod:SetMoney(CODAmount); dp.detailCod:Show() + end + + -- Take items button + local canTakeItem = hasItem and (not CODAmount or CODAmount == 0) + dp.takeItemBtn:SetDisabled(not canTakeItem) + dp.takeItemBtn:SetScript("OnClick", function() + if S.detailMailIndex then + TakeInboxItem(S.detailMailIndex) + end + end) + + -- Take money button + local canTakeMoney = money and money > 0 and (not CODAmount or CODAmount == 0) + dp.takeMoneyBtn:SetDisabled(not canTakeMoney) + dp.takeMoneyBtn:SetScript("OnClick", function() + if S.detailMailIndex then + local idx = S.detailMailIndex + local _, _, _, _, _, _, _, hi = GetInboxHeaderInfo(idx) + TakeInboxMoney(idx) + if not hi then + if not S.deleteTimer then S.deleteTimer = CreateFrame("Frame") end + S.deleteElapsed = 0 + S.deleteTimer:SetScript("OnUpdate", function() + S.deleteElapsed = S.deleteElapsed + arg1 + if S.deleteElapsed >= 0.5 then + this:SetScript("OnUpdate", nil) + if idx <= GetInboxNumItems() then DeleteInboxItem(idx) end + end + end) + end + ML:HideMailDetail() + end + end) + + -- Return button + dp.returnBtn:SetScript("OnClick", function() + if S.detailMailIndex then + ReturnInboxItem(S.detailMailIndex) + ML:HideMailDetail() + end + end) + + -- Delete button + dp.deleteBtn:SetScript("OnClick", function() + if S.detailMailIndex then + DeleteInboxItem(S.detailMailIndex) + ML:HideMailDetail() + end + end) + + -- Reply button + dp.replyBtn:SetScript("OnClick", function() + if sender then + S.currentTab = 2; ML:ShowSendPanel() + if S.frame.toEditBox then S.frame.toEditBox:SetText(sender) end + if S.frame.subjectEditBox then + local re = subject or "" + if string.sub(re, 1, 4) ~= "Re: " then re = "Re: " .. re end + S.frame.subjectEditBox:SetText(re) + end + end + end) + + S.frame.inboxPanel:Hide() + dp:Show() +end + +function ML:HideMailDetail() + if not S.frame then return end + S.detailMailIndex = nil + if S.frame.detailPanel then S.frame.detailPanel:Hide() end + S.frame.inboxPanel:Show() + UpdateInbox() +end + +-------------------------------------------------------------------------------- +-- BUILD: Send panel +-------------------------------------------------------------------------------- +local function BuildSendPanel() + local f = S.frame + local panelTop = L.HEADER + 6 + L.TAB_H + 4 + local sp = CreateFrame("Frame", "SFramesMailSendPanel", f) + sp:SetPoint("TOPLEFT", f, "TOPLEFT", 0, -panelTop) + sp:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0) + sp:EnableMouse(true) + sp:SetScript("OnReceiveDrag", function() AcceptCursorItem() end) + sp:SetScript("OnMouseUp", function() + if CursorHasItem() then AcceptCursorItem() end + end) + sp:Hide() + f.sendPanel = sp + + local font = GetFont() + + -- Recipient + local labelW = 50 + local ebW = L.W - L.PAD * 2 - labelW - 6 + local toLabel = sp:CreateFontString(nil, "OVERLAY") + toLabel:SetFont(font, 11, "OUTLINE"); toLabel:SetPoint("TOPLEFT", sp, "TOPLEFT", L.PAD, -6) + toLabel:SetWidth(labelW); toLabel:SetJustifyH("RIGHT") + toLabel:SetText("收件人:"); toLabel:SetTextColor(T.labelText[1], T.labelText[2], T.labelText[3]) + local toEB = CreateStyledEditBox(sp, ebW, 22) + toEB:SetPoint("LEFT", toLabel, "RIGHT", 6, 0) + f.toEditBox = toEB + + -- Autocomplete dropdown for recipient + local AC_MAX = 8 + local acBox = CreateFrame("Frame", "SFramesMailAutoComplete", f) + acBox:SetWidth(ebW); acBox:SetFrameStrata("TOOLTIP") + acBox:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + acBox:SetBackdropColor(0.05, 0.05, 0.1, 0.95) + acBox:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], 0.9) + acBox:SetPoint("TOPLEFT", toEB, "BOTTOMLEFT", 0, -2) + acBox:Hide() + acBox:EnableMouse(true) + f.acBox = acBox + + local acButtons = {} + for ai = 1, AC_MAX do + local btn = CreateFrame("Button", nil, acBox) + btn:SetHeight(18); btn:SetPoint("TOPLEFT", acBox, "TOPLEFT", 4, -4 - (ai - 1) * 18) + btn:SetPoint("RIGHT", acBox, "RIGHT", -4, 0) + btn:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + local bfs = btn:CreateFontString(nil, "OVERLAY") + bfs:SetFont(font, 11, "OUTLINE"); bfs:SetAllPoints(btn) + bfs:SetJustifyH("LEFT") + btn.label = bfs + btn.sourceName = nil + btn:SetScript("OnClick", function() + if btn.sourceName then + toEB:SetText(btn.sourceName) + end + acBox:Hide() + f.subjectEditBox:SetFocus() + end) + btn:Hide() + acButtons[ai] = btn + end + f.acButtons = acButtons + + local friendCache = {} + local function BuildFriendCache() + friendCache = {} + for fi = 1, GetNumFriends() do + local name = GetFriendInfo(fi) + if name then friendCache[name] = true end + end + end + + local function ShowSuggestions() + local input = toEB:GetText() + if not input or input == "" then acBox:Hide(); return end + local upper = string.upper(input) + + BuildFriendCache() + + local seen = { [UnitName("player")] = true } + local results = {} + + local function addName(name, source) + if not name or name == "" or seen[name] then return end + if string.find(string.upper(name), upper, 1, true) == 1 then + table.insert(results, { name = name, source = source }) + end + seen[name] = true + end + + for fi = 1, GetNumFriends() do + local name = GetFriendInfo(fi) + addName(name, "friend") + end + if GetNumGuildMembers then + for gi = 1, GetNumGuildMembers(true) do + local name = GetGuildRosterInfo(gi) + addName(name, "guild") + end + end + + local count = math.min(table.getn(results), AC_MAX) + if count == 0 then acBox:Hide(); return end + if count == 1 and results[1].name == input then acBox:Hide(); return end + + for ai = 1, AC_MAX do + local btn = acButtons[ai] + if ai <= count then + local r = results[ai] + local col = T.whoColor + local tag = "" + if r.source == "friend" then + col = T.friendColor; tag = " |cFF66FF88[好友]|r" + elseif r.source == "guild" then + col = T.guildColor; tag = " |cFF66CCFF[公会]|r" + end + btn.label:SetText("|cFF" .. string.format("%02x%02x%02x", + col[1] * 255, col[2] * 255, col[3] * 255) .. r.name .. "|r" .. tag) + btn.sourceName = r.name + btn:Show() + else + btn:Hide() + end + end + acBox:SetHeight(count * 18 + 8) + acBox:Show() + end + + toEB:SetScript("OnTextChanged", function() ShowSuggestions() end) + toEB:SetScript("OnEscapePressed", function() acBox:Hide(); this:ClearFocus() end) + toEB:SetScript("OnEnterPressed", function() + acBox:Hide(); f.subjectEditBox:SetFocus() + end) + + -- Subject (second line, aligned with recipient) + local subLabel = sp:CreateFontString(nil, "OVERLAY") + subLabel:SetFont(font, 11, "OUTLINE"); subLabel:SetPoint("TOPLEFT", sp, "TOPLEFT", L.PAD, -32) + subLabel:SetWidth(labelW); subLabel:SetJustifyH("RIGHT") + subLabel:SetText("主题:"); subLabel:SetTextColor(T.labelText[1], T.labelText[2], T.labelText[3]) + local subEB = CreateStyledEditBox(sp, ebW, 22) + subEB:SetPoint("LEFT", subLabel, "RIGHT", 6, 0) + f.subjectEditBox = subEB + + toEB:SetScript("OnTabPressed", function() acBox:Hide(); f.subjectEditBox:SetFocus() end) + subEB:SetScript("OnTabPressed", function() f.toEditBox:SetFocus() end) + + -- Body + local bodyLabel = sp:CreateFontString(nil, "OVERLAY") + bodyLabel:SetFont(font, 11, "OUTLINE"); bodyLabel:SetPoint("TOPLEFT", sp, "TOPLEFT", L.PAD, -58) + bodyLabel:SetText("正文:"); bodyLabel:SetTextColor(T.labelText[1], T.labelText[2], T.labelText[3]) + + local bsf = CreateFrame("ScrollFrame", "SFramesMailBodyScroll", sp, "UIPanelScrollFrameTemplate") + bsf:SetPoint("TOPLEFT", bodyLabel, "BOTTOMLEFT", 0, -4) + bsf:SetWidth(L.W - L.PAD * 2 - 28); bsf:SetHeight(100) + bsf:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + bsf:SetBackdropColor(T.inputBg[1], T.inputBg[2], T.inputBg[3], T.inputBg[4] or 0.95) + bsf:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], 0.8) + + local bodyEB = CreateFrame("EditBox", "SFramesMailBodyEditBox", bsf) + bodyEB:SetWidth(L.W - L.PAD * 2 - 40); bodyEB:SetHeight(200) + bodyEB:SetFont(font, 11, "OUTLINE"); bodyEB:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + bodyEB:SetAutoFocus(false); bodyEB:SetMultiLine(true); bodyEB:SetMaxLetters(500) + bodyEB:SetTextInsets(6, 6, 4, 4) + bsf:SetScrollChild(bodyEB) + f.bodyEditBox = bodyEB + + -- Money row + local mLabel = sp:CreateFontString(nil, "OVERLAY") + mLabel:SetFont(font, 11, "OUTLINE"); mLabel:SetPoint("TOPLEFT", bsf, "BOTTOMLEFT", 0, -10) + mLabel:SetText("附加金币:"); mLabel:SetTextColor(T.labelText[1], T.labelText[2], T.labelText[3]) + + local gL = sp:CreateFontString(nil, "OVERLAY") + gL:SetFont(font, 10, "OUTLINE"); gL:SetPoint("LEFT", mLabel, "RIGHT", 6, 0) + gL:SetText("金"); gL:SetTextColor(T.moneyGold[1], T.moneyGold[2], T.moneyGold[3]) + local gEB = CreateStyledEditBox(sp, 60, 20, true); gEB:SetPoint("LEFT", gL, "RIGHT", 4, 0); gEB:SetText("0"); f.goldEB = gEB + + local sL = sp:CreateFontString(nil, "OVERLAY") + sL:SetFont(font, 10, "OUTLINE"); sL:SetPoint("LEFT", gEB, "RIGHT", 6, 0) + sL:SetText("银"); sL:SetTextColor(T.moneySilver[1], T.moneySilver[2], T.moneySilver[3]) + local sEB = CreateStyledEditBox(sp, 40, 20, true); sEB:SetPoint("LEFT", sL, "RIGHT", 4, 0); sEB:SetText("0"); f.silverEB = sEB + + local cL = sp:CreateFontString(nil, "OVERLAY") + cL:SetFont(font, 10, "OUTLINE"); cL:SetPoint("LEFT", sEB, "RIGHT", 6, 0) + cL:SetText("铜"); cL:SetTextColor(T.moneyCopper[1], T.moneyCopper[2], T.moneyCopper[3]) + local cEB = CreateStyledEditBox(sp, 40, 20, true); cEB:SetPoint("LEFT", cL, "RIGHT", 4, 0); cEB:SetText("0"); f.copperEB = cEB + + -- Attachments + local aLabel = sp:CreateFontString(nil, "OVERLAY") + aLabel:SetFont(font, 11, "OUTLINE"); aLabel:SetPoint("TOPLEFT", mLabel, "TOPLEFT", 0, -28) + aLabel:SetText("附件 (右击/拖放背包物品添加):"); aLabel:SetTextColor(T.labelText[1], T.labelText[2], T.labelText[3]) + + local clrBtn = CreateActionBtn(sp, "清空", 50) + clrBtn:SetHeight(20); clrBtn:SetPoint("LEFT", aLabel, "RIGHT", 8, 0) + clrBtn:SetScript("OnClick", function() ClearSendItems(); ML:UpdateSendPanel() end) + + -- Item slot grid + f.sendItemSlots = {} + BuildSendSlots(sp, aLabel, f) + + -- Send button & status + local status = sp:CreateFontString(nil, "OVERLAY") + status:SetFont(font, 11, "OUTLINE"); status:SetPoint("BOTTOMLEFT", sp, "BOTTOMLEFT", L.PAD, 14) + status:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + f.sendStatus = status + + local sendBtn = CreateActionBtn(sp, "发送", 80) + sendBtn:SetHeight(26); sendBtn:SetPoint("BOTTOMRIGHT", sp, "BOTTOMRIGHT", -L.PAD, 10) + sendBtn:SetScript("OnClick", function() + local r = f.toEditBox:GetText() + local sub = f.subjectEditBox:GetText() + local bd = f.bodyEditBox:GetText() + local g = tonumber(f.goldEB:GetText()) or 0 + local sv = tonumber(f.silverEB:GetText()) or 0 + local c = tonumber(f.copperEB:GetText()) or 0 + DoMultiSend(r, sub, bd, g * 10000 + sv * 100 + c) + end) + f.sendBtn = sendBtn +end + +-------------------------------------------------------------------------------- +-- BUILD: Send item slots (separate function to stay under upvalue limit) +-------------------------------------------------------------------------------- +function BuildSendSlots(parent, anchor, f) + local slotSize, slotGap, perRow = 34, 4, 6 + for i = 1, L.MAX_SEND do + local row = math.floor((i - 1) / perRow) + local col = math.mod((i - 1), perRow) + local sf = CreateFrame("Button", "SFramesMailSendSlot" .. i, parent) + sf:SetWidth(slotSize); sf:SetHeight(slotSize) + sf:SetPoint("TOPLEFT", anchor, "BOTTOMLEFT", col * (slotSize + slotGap), -(4 + row * (slotSize + slotGap))) + sf:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + sf:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + sf:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + + local ico = sf:CreateTexture(nil, "ARTWORK") + ico:SetTexCoord(0.08, 0.92, 0.08, 0.92) + ico:SetPoint("TOPLEFT", 3, -3); ico:SetPoint("BOTTOMRIGHT", -3, 3); ico:Hide() + sf.icon = ico + + local cnt = sf:CreateFontString(nil, "OVERLAY") + cnt:SetFont("Fonts\\ARIALN.TTF", 11, "OUTLINE") + cnt:SetPoint("BOTTOMRIGHT", sf, "BOTTOMRIGHT", -2, 2); cnt:SetJustifyH("RIGHT") + sf.countFS = cnt + + local rb = CreateFrame("Button", nil, sf) + rb:SetWidth(14); rb:SetHeight(14); rb:SetPoint("TOPRIGHT", sf, "TOPRIGHT", 2, 2) + local rtx = rb:CreateTexture(nil, "OVERLAY") + rtx:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + rtx:SetTexCoord(0.25, 0.375, 0, 0.125); rtx:SetAllPoints(); rtx:SetVertexColor(1, 0.4, 0.4) + rb:Hide(); sf.removeBtn = rb; sf.hasItem = false + + local si = i + rb:SetScript("OnClick", function() RemoveSendItem(si); ML:UpdateSendPanel() end) + sf:SetScript("OnReceiveDrag", function() AcceptCursorItem() end) + sf:SetScript("OnClick", function() + if CursorHasItem() then AcceptCursorItem(); return end + if arg1 == "RightButton" and sf.hasItem then RemoveSendItem(si); ML:UpdateSendPanel() end + end) + sf:RegisterForClicks("LeftButtonUp", "RightButtonUp") + sf:SetScript("OnEnter", function() + this:SetBackdropBorderColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4]) + local e = S.sendQueue[si] + if e and e.link then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT"); pcall(GameTooltip.SetHyperlink, GameTooltip, e.link); GameTooltip:Show() + end + end) + sf:SetScript("OnLeave", function() + this:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + GameTooltip:Hide() + end) + f.sendItemSlots[i] = sf + end +end + +-------------------------------------------------------------------------------- +-- BUILD: Events & hooks +-------------------------------------------------------------------------------- +local function SetupEvents() + local f = S.frame + + f:SetScript("OnHide", function() + StopCollecting(); if S.multiSend then AbortMultiSend() end; pcall(CloseMail) + end) + + f:SetScript("OnEvent", function() + if event == "MAIL_SHOW" then + if SFramesDB and SFramesDB.enableMail == false then return end + S.currentTab = 1; S.inboxPage = 1; S.inboxChecked = {} + CheckInbox(); f:Show(); ML:ShowInboxPanel() + elseif event == "MAIL_INBOX_UPDATE" then + if f:IsVisible() then + if S.detailMailIndex and f.detailPanel and f.detailPanel:IsVisible() then + if S.detailMailIndex <= GetInboxNumItems() then + ML:ShowMailDetail(S.detailMailIndex) + else + ML:HideMailDetail() + end + else + UpdateInbox() + end + end + elseif event == "MAIL_CLOSED" then + if S.multiSend then AbortMultiSend("邮箱已关闭") end + f:Hide() + elseif event == "MAIL_SEND_SUCCESS" then + if S.multiSend then + S.multiSend.sendOk = true + S.multiSend.phase = "cooldown" + S.multiSend.elapsed = 0 + else + FlashStatus("发送成功!", T.successText, 3) + ResetSendForm() + if f.sendBtn then f.sendBtn.label:SetText("发送"); f.sendBtn:SetDisabled(false) end + end + elseif event == "MAIL_SEND_INFO_UPDATE" then + -- noop + elseif event == "MAIL_FAILED" then + if S.multiSend and S.multiSend.phase == "wait_send" and not S.multiSend.sendOk then + AbortMultiSend("发送失败") + elseif not S.multiSend then + if f.sendBtn then f.sendBtn.label:SetText("发送"); f.sendBtn:SetDisabled(false) end + FlashStatus("发送失败!", T.errorText, 5) + end + end + end) + + f:RegisterEvent("MAIL_SHOW"); f:RegisterEvent("MAIL_INBOX_UPDATE") + f:RegisterEvent("MAIL_CLOSED"); f:RegisterEvent("MAIL_SEND_SUCCESS") + f:RegisterEvent("MAIL_SEND_INFO_UPDATE"); f:RegisterEvent("MAIL_FAILED") + + if MailFrame then + local origMailOnShow = MailFrame:GetScript("OnShow") + MailFrame:SetScript("OnShow", function() + if origMailOnShow then origMailOnShow() end + this:ClearAllPoints() + this:SetPoint("TOPLEFT", UIParent, "TOPLEFT", -10000, 10000) + this:EnableMouse(false) + end) + for i = table.getn(UISpecialFrames), 1, -1 do + if UISpecialFrames[i] == "MailFrame" then + table.remove(UISpecialFrames, i) + end + end + end + if OpenMailFrame then + OpenMailFrame:UnregisterAllEvents(); OpenMailFrame:Hide() + end + + tinsert(UISpecialFrames, "SFramesMailFrame") + + SFrames.Mail.TryAddItemFromBag = function(bag, slot) + if S.frame and S.frame:IsVisible() and not S.isSending then + if bag and slot then + if S.currentTab ~= 2 then S.currentTab = 2; ML:ShowSendPanel() end + AddSendItem(bag, slot); ML:UpdateSendPanel() + return true + end + end + return false + end + + if ContainerFrameItemButton_OnClick then + local orig = ContainerFrameItemButton_OnClick + ContainerFrameItemButton_OnClick = function(button, ignoreShift) + if arg1 == "RightButton" then + if SFrames.Mail.TryAddItemFromBag(this:GetParent():GetID(), this:GetID()) then return end + end + orig(button, ignoreShift) + end + end +end + +-------------------------------------------------------------------------------- +-- Initialize (calls sub-builders) +-------------------------------------------------------------------------------- +function ML:Initialize() + if S.frame then return end + BuildMainFrame() + BuildInboxPanel() + BuildDetailPanel() + BuildSendPanel() + SetupEvents() +end + +-------------------------------------------------------------------------------- +-- Panel Switching +-------------------------------------------------------------------------------- +function ML:ShowInboxPanel() + if not S.frame then return end + S.frame.tabInbox:SetActive(true); S.frame.tabSend:SetActive(false) + if S.frame.detailPanel then S.frame.detailPanel:Hide() end + S.frame.inboxPanel:Show(); S.frame.sendPanel:Hide() + S.detailMailIndex = nil + UpdateInbox() +end + +function ML:ShowSendPanel() + if not S.frame then return end + S.frame.tabInbox:SetActive(false); S.frame.tabSend:SetActive(true) + if S.frame.detailPanel then S.frame.detailPanel:Hide() end + S.detailMailIndex = nil + S.frame.inboxPanel:Hide(); S.frame.sendPanel:Show() + if S.frame.sendStatus then S.frame.sendStatus:SetText("") end + if S.statusFadeTimer then S.statusFadeTimer:SetScript("OnUpdate", nil) end + ML:UpdateSendPanel() +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableMail == nil then SFramesDB.enableMail = true end + if SFramesDB.enableMail ~= false then ML:Initialize() end + end +end) diff --git a/MapIcons.lua b/MapIcons.lua new file mode 100644 index 0000000..09d56db --- /dev/null +++ b/MapIcons.lua @@ -0,0 +1,337 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: MapIcons - Class-colored party/raid icons on maps +-- Shows class icon circles on World Map, Battlefield Minimap, and Minimap +-- Uses UI-Classes-Circles.tga for class-specific circular portraits +-- Zone size data: prefers pfQuest DB, falls back to built-in table +-------------------------------------------------------------------------------- + +SFrames.MapIcons = SFrames.MapIcons or {} +local MI = SFrames.MapIcons + +local CLASS_ICON_PATH = "Interface\\AddOns\\Nanami-UI\\img\\UI-Classes-Circles" +local CLASS_ICON_TCOORDS = SFrames.CLASS_ICON_TCOORDS +local CLASS_COLORS = SFrames.Config.colors.class + +-------------------------------------------------------------------------------- +-- Minimap zoom yard ranges: [indoor/outdoor][zoomLevel] = diameter in yards +-- indoor=0, outdoor=1 +-------------------------------------------------------------------------------- +local MM_ZOOM = { + [0] = { [0]=300, [1]=240, [2]=180, [3]=120, [4]=80, [5]=50 }, + [1] = { [0]=466.67, [1]=400, [2]=333.33, [3]=266.67, [4]=200, [5]=133.33 }, +} + +-------------------------------------------------------------------------------- +-- Built-in zone sizes (width, height in yards) keyed by GetMapInfo() file name +-- Fallback when pfQuest is not installed +-------------------------------------------------------------------------------- +local ZONE_SIZES = { + ["Ashenvale"] = { 5766.67, 3843.75 }, + ["Aszhara"] = { 5533.33, 3689.58 }, + ["Darkshore"] = { 6550.00, 4366.66 }, + ["Desolace"] = { 4600.00, 3066.67 }, + ["Durotar"] = { 4925.00, 3283.34 }, + ["Dustwallow"] = { 5250.00, 3500.00 }, + ["Felwood"] = { 5750.00, 3833.33 }, + ["Feralas"] = { 6950.00, 4633.33 }, + ["Moonglade"] = { 2308.33, 1539.59 }, + ["Mulgore"] = { 5250.00, 3500.00 }, + ["Silithus"] = { 3483.33, 2322.92 }, + ["StonetalonMountains"] = { 4883.33, 3256.25 }, + ["Tanaris"] = { 6900.00, 4600.00 }, + ["Teldrassil"] = { 4925.00, 3283.34 }, + ["Barrens"] = { 10133.34, 6756.25 }, + ["ThousandNeedles"] = { 4400.00, 2933.33 }, + ["UngoroCrater"] = { 3677.08, 2452.08 }, + ["Winterspring"] = { 7100.00, 4733.33 }, + ["Alterac"] = { 2800.00, 1866.67 }, + ["ArathiHighlands"] = { 3600.00, 2400.00 }, + ["Badlands"] = { 2487.50, 1658.34 }, + ["BlastedLands"] = { 3350.00, 2233.30 }, + ["BurningSteppes"] = { 2929.16, 1952.08 }, + ["DeadwindPass"] = { 2500.00, 1666.63 }, + ["DunMorogh"] = { 4925.00, 3283.34 }, + ["Duskwood"] = { 2700.00, 1800.03 }, + ["EasternPlaguelands"] = { 4031.25, 2687.50 }, + ["ElwynnForest"] = { 3470.84, 2314.62 }, + ["Hilsbrad"] = { 3200.00, 2133.33 }, + ["Hinterlands"] = { 3850.00, 2566.67 }, + ["LochModan"] = { 2758.33, 1839.58 }, + ["RedridgeMountains"] = { 2170.84, 1447.90 }, + ["SearingGorge"] = { 1837.50, 1225.00 }, + ["SilverpineForest"] = { 4200.00, 2800.00 }, + ["Stranglethorn"] = { 6381.25, 4254.10 }, + ["SwampOfSorrows"] = { 2293.75, 1529.17 }, + ["Tirisfal"] = { 4518.75, 3012.50 }, + ["WesternPlaguelands"] = { 4300.00, 2866.67 }, + ["Westfall"] = { 3500.00, 2333.30 }, + ["Wetlands"] = { 4300.00, 2866.67 }, +} + +-------------------------------------------------------------------------------- +-- Indoor detection (CVar trick from pfQuest) +-- Returns 0 = indoor, 1 = outdoor +-------------------------------------------------------------------------------- +local cachedIndoor = 1 +local indoorCheckTime = 0 + +local function DetectIndoor() + if pfMap and pfMap.minimap_indoor then + return pfMap.minimap_indoor() + end + local ok1, zoomVal = pcall(GetCVar, "minimapZoom") + local ok2, insideVal = pcall(GetCVar, "minimapInsideZoom") + if not ok1 or not ok2 then return 1 end + local tempzoom = 0 + local state = 1 + if zoomVal == insideVal then + local cur = Minimap:GetZoom() + if cur >= 3 then + Minimap:SetZoom(cur - 1) + tempzoom = 1 + else + Minimap:SetZoom(cur + 1) + tempzoom = -1 + end + end + local ok3, zoomVal2 = pcall(GetCVar, "minimapZoom") + local ok4, insideVal2 = pcall(GetCVar, "minimapInsideZoom") + if ok3 and ok4 and zoomVal2 ~= insideVal2 then + state = 0 + end + if tempzoom ~= 0 then + Minimap:SetZoom(Minimap:GetZoom() + tempzoom) + end + return state +end + +-------------------------------------------------------------------------------- +-- Get current zone dimensions in yards +-------------------------------------------------------------------------------- +local function GetZoneYards() + if pfMap and pfMap.GetMapIDByName and pfDB and pfDB["minimap"] then + local name = GetRealZoneText and GetRealZoneText() or "" + if name ~= "" then + local id = pfMap:GetMapIDByName(name) + if id and pfDB["minimap"][id] then + return pfDB["minimap"][id][1], pfDB["minimap"][id][2] + end + end + end + if GetMapInfo then + local ok, info = pcall(GetMapInfo) + if ok and info and ZONE_SIZES[info] then + return ZONE_SIZES[info][1], ZONE_SIZES[info][2] + end + end + return nil, nil +end + +-------------------------------------------------------------------------------- +-- 1. World Map + Battlefield Minimap: class icon overlays +-------------------------------------------------------------------------------- +local mapButtons + +local function InitMapButtons() + if mapButtons then return end + mapButtons = {} + for i = 1, 4 do + mapButtons["WorldMapParty" .. i] = "party" .. i + mapButtons["BattlefieldMinimapParty" .. i] = "party" .. i + end + for i = 1, 40 do + mapButtons["WorldMapRaid" .. i] = "raid" .. i + mapButtons["BattlefieldMinimapRaid" .. i] = "raid" .. i + end +end + +local mapTickTime = 0 + +local function UpdateMapClassIcons() + mapTickTime = mapTickTime + (arg1 or 0) + if mapTickTime < 0.15 then return end + mapTickTime = 0 + + if not mapButtons then InitMapButtons() end + + local _G = getfenv(0) + for name, unit in pairs(mapButtons) do + local frame = _G[name] + if frame and frame:IsVisible() and UnitExists(unit) then + local defIcon = _G[name .. "Icon"] + if defIcon then defIcon:SetTexture() end + + if not frame.nanamiClassTex then + frame.nanamiClassTex = frame:CreateTexture(nil, "OVERLAY") + frame.nanamiClassTex:SetTexture(CLASS_ICON_PATH) + frame.nanamiClassTex:SetPoint("TOPLEFT", frame, "TOPLEFT", 2, -2) + frame.nanamiClassTex:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -2, 2) + end + + local _, class = UnitClass(unit) + if class and CLASS_ICON_TCOORDS and CLASS_ICON_TCOORDS[class] then + local tc = CLASS_ICON_TCOORDS[class] + frame.nanamiClassTex:SetTexCoord(tc[1], tc[2], tc[3], tc[4]) + frame.nanamiClassTex:Show() + else + frame.nanamiClassTex:Hide() + end + end + end +end + +-------------------------------------------------------------------------------- +-- 2. Minimap: class-colored party dot overlays +-------------------------------------------------------------------------------- +local MAX_PARTY = 4 +local mmDots = {} + +local function CreateMinimapDot(index) + local dot = CreateFrame("Frame", "NanamiMMDot" .. index, Minimap) + dot:SetWidth(10) + dot:SetHeight(10) + dot:SetFrameStrata("MEDIUM") + dot:SetFrameLevel(Minimap:GetFrameLevel() + 5) + + dot.icon = dot:CreateTexture(nil, "ARTWORK") + dot.icon:SetTexture("Interface\\Minimap\\UI-Minimap-Background") + dot.icon:SetAllPoints() + dot.icon:SetVertexColor(1, 0.82, 0, 1) + + dot:Hide() + return dot +end + +local mmTickTime = 0 + +local function UpdateMinimapDots() + mmTickTime = mmTickTime + (arg1 or 0) + if mmTickTime < 0.25 then return end + mmTickTime = 0 + + if not Minimap or not Minimap:IsVisible() then + for i = 1, MAX_PARTY do + if mmDots[i] then mmDots[i]:Hide() end + end + return + end + + local numParty = GetNumPartyMembers and GetNumPartyMembers() or 0 + if numParty == 0 then + for i = 1, MAX_PARTY do + if mmDots[i] then mmDots[i]:Hide() end + end + return + end + + if WorldMapFrame and WorldMapFrame:IsVisible() then + return + end + + if SetMapToCurrentZone then + pcall(SetMapToCurrentZone) + end + + local px, py = GetPlayerMapPosition("player") + if not px or not py or (px == 0 and py == 0) then + for i = 1, MAX_PARTY do + if mmDots[i] then mmDots[i]:Hide() end + end + return + end + + local zw, zh = GetZoneYards() + if not zw or not zh or zw == 0 or zh == 0 then + for i = 1, MAX_PARTY do + if mmDots[i] then mmDots[i]:Hide() end + end + return + end + + local now = GetTime() + if now - indoorCheckTime > 3 then + indoorCheckTime = now + cachedIndoor = DetectIndoor() + end + + local zoom = Minimap:GetZoom() + local mmYards = MM_ZOOM[cachedIndoor] and MM_ZOOM[cachedIndoor][zoom] + or MM_ZOOM[1][zoom] or 466.67 + local mmHalfYards = mmYards / 2 + local mmHalfPx = Minimap:GetWidth() / 2 + + local facing = 0 + local doRotate = false + local okCvar, rotateVal = pcall(GetCVar, "rotateMinimap") + if okCvar and rotateVal == "1" and GetPlayerFacing then + local ok2, f = pcall(GetPlayerFacing) + if ok2 and f then + facing = f + doRotate = true + end + end + + for i = 1, MAX_PARTY do + local unit = "party" .. i + if i <= numParty and UnitExists(unit) and UnitIsConnected(unit) then + local mx, my = GetPlayerMapPosition(unit) + if mx and my and (mx ~= 0 or my ~= 0) then + local dx = (mx - px) * zw + local dy = (py - my) * zh + + if doRotate then + local s = math.sin(facing) + local c = math.cos(facing) + dx, dy = dx * c + dy * s, -dx * s + dy * c + end + + local dist = math.sqrt(dx * dx + dy * dy) + if dist < mmHalfYards * 0.92 then + local scale = mmHalfPx / mmHalfYards + + if not mmDots[i] then + mmDots[i] = CreateMinimapDot(i) + end + local dot = mmDots[i] + + local _, class = UnitClass(unit) + local cc = class and CLASS_COLORS and CLASS_COLORS[class] + if cc then + dot.icon:SetVertexColor(cc.r, cc.g, cc.b, 1) + else + dot.icon:SetVertexColor(1, 0.82, 0, 1) + end + + dot:ClearAllPoints() + dot:SetPoint("CENTER", Minimap, "CENTER", dx * scale, dy * scale) + dot:Show() + else + if mmDots[i] then mmDots[i]:Hide() end + end + else + if mmDots[i] then mmDots[i]:Hide() end + end + else + if mmDots[i] then mmDots[i]:Hide() end + end + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function MI:Initialize() + InitMapButtons() + + local updater = CreateFrame("Frame", "NanamiMapIconsUpdater", UIParent) + updater._elapsed = 0 + updater:SetScript("OnUpdate", function() + this._elapsed = (this._elapsed or 0) + arg1 + if this._elapsed < 0.2 then return end + this._elapsed = 0 + UpdateMapClassIcons() + UpdateMinimapDots() + end) + + SFrames:Print("地图职业图标模块已加载") +end diff --git a/MapReveal.lua b/MapReveal.lua new file mode 100644 index 0000000..6105df0 --- /dev/null +++ b/MapReveal.lua @@ -0,0 +1,287 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: MapReveal -- Reveal unexplored world map areas +-- Adapted from ShaguTweaks-extras worldmap-reveal approach +-- Uses LibMapOverlayData (from !Libs) supplemented with Turtle WoW zones +-------------------------------------------------------------------------------- + +SFrames.MapReveal = SFrames.MapReveal or {} + +local MapReveal = SFrames.MapReveal +local origWorldMapFrame_Update = nil +local overlayDBPatched = false + +local errata = { + ["Interface\\WorldMap\\Tirisfal\\BRIGHTWATERLAKE"] = { offsetX = { 587, 584 } }, + ["Interface\\WorldMap\\Silverpine\\BERENSPERIL"] = { offsetY = { 417, 415 } }, +} + +-- Turtle WoW new/modified zones not present in LibMapOverlayData +local TurtleWoW_Zones = { + ["StonetalonMountains"] = { + "SUNROCKRETREAT:512:256:256:256", "WINDSHEARCRAG:256:256:512:256", + "MIRKFALLONLAKE:512:512:256:0", "THECHARREDVALE:256:512:256:256", + "STONETALONPEAK:256:256:256:0", "WEBWINDERPATH:256:512:512:256", + "AMANIALOR:512:256:0:0", "GRIMTOTEMPOST:512:256:512:512", + "CAMPAPARAJE:512:256:512:512", "MALAKAJIN:512:256:512:512", + "BOULDERSLIDERAVINE:256:256:512:512", "SISHIRCANYON:256:512:512:256", + "VENTURECOMPANYCAMP:256:512:256:0", "BLACKSANDOILFIELDS:512:512:0:0", + "POWDERTOWN:256:256:256:256", "BRAMBLETHORNPASS:512:512:512:256", + "BAELHARDUL:512:256:512:256", "BROKENCLIFFMINE:256:512:256:0", + "THEEARTHENRING:512:256:256:256", + }, + ["UpperKarazhan2f"] = { + "OUTLAND:1024:768:0:0", + }, + ["GrimReaches"] = { + "DUNKITHAS:512:256:256:256", "THEGRIMHOLLOW:512:512:256:256", + "LAKEKITHAS:512:256:256:256", "SLATEBEARDSFORGE:512:256:256:256", + "THEHIGHPASS:256:256:256:256", "SALGAZMINES:256:256:512:256", + "EASTRIDGEOUTPOST:512:512:256:0", "BAGGOTHSRAMPART:256:512:256:0", + "RUINSOFSTOLGAZKEEP:256:256:256:0", "GROLDANSEXCAVATION:256:512:512:0", + "ZARMGETHSTRONGHOLD:512:256:256:0", "GETHKAR:512:256:256:0", + "ZARMGETHPOINT:512:256:256:0", "SHATTERBLADEPOST:256:256:512:0", + "BRANGARSFOLLY:256:256:512:0", "BARLEYCRESTFARMSTEAD:512:512:256:0", + }, + ["Balor"] = { + "GULLWINGWRECKAGE:512:256:0:0", "BILGERATCOMPOUND:256:256:256:0", + "SIOUTPOST:256:512:512:256", "RUINSOFBREEZEHAVEN:512:256:256:256", + "CROAKINGPLATEAU:512:512:256:0", "LANGSTONORCHARD:256:256:256:256", + "SORROWMORELAKE:256:256:256:256", "SCURRYINGTHICKET:256:512:256:0", + "STORMWROUGHTCASTLE:512:256:256:256", "STORMREAVERSPIRE:512:512:256:256", + "WINDROCKCLIFFS:256:512:256:256", "TREACHEROUSCRAGS:512:512:256:256", + "VANDERFARMSTEAD:256:256:256:256", "GRAHANESTATE:256:256:256:256", + "STORMBREAKERPOINT:512:512:512:0", + }, + ["Northwind"] = { + "MERCHANTSHIGHROAD:512:512:256:256", "AMBERSHIRE:512:256:256:256", + "AMBERWOODKEEP:512:256:0:256", "CRYSTALFALLS:512:512:512:256", + "CRAWFORDWINERY:256:256:512:256", "NORTHWINDLOGGINGCAMP:256:512:256:0", + "WITCHCOVEN:256:256:256:0", "RUINSOFBIRKHAVEN:512:512:512:0", + "SHERWOODQUARRY:512:512:512:0", "BLACKROCKBREACH:512:512:512:0", + "GRIMMENLAKE:256:512:512:256", "ABBEYGARDENS:256:256:512:0", + "STILLHEARTPORT:512:512:0:0", "TOWEROFMAGILOU:512:512:0:0", + "BRISTLEWHISKERCAVERN:256:512:512:0", "NORTHRIDGEPOINT:512:512:256:0", + "CINDERFALLPASS:512:512:512:256", + }, +} + +local function IsTurtleWoW() + return TargetHPText and TargetHPPercText +end + +local function GetOverlayDB() + return MapOverlayData or LibMapOverlayData or zMapOverlayData or mapOverlayData +end + +local function PatchOverlayDB() + if overlayDBPatched then return end + overlayDBPatched = true + + if not IsTurtleWoW() then return end + + local db = GetOverlayDB() + if not db then return end + + for zone, data in pairs(TurtleWoW_Zones) do + db[zone] = data + end +end + +local function GetConfig() + if not SFramesDB or type(SFramesDB.MapReveal) ~= "table" then + return { enabled = true, unexploredAlpha = 0.7 } + end + return SFramesDB.MapReveal +end + +local function NextPowerOf2(n) + local p = 16 + while p < n do + p = p * 2 + end + return p +end + +local function DoMapRevealUpdate() + local db = GetOverlayDB() + if not db then return end + + local mapFileName = GetMapInfo and GetMapInfo() + if not mapFileName then mapFileName = "World" end + + local zoneData = db[mapFileName] + if not zoneData then return end + + local prefix = "Interface\\WorldMap\\" .. mapFileName .. "\\" + + local numExploredOverlays = GetNumMapOverlays and GetNumMapOverlays() or 0 + local explored = {} + for i = 1, numExploredOverlays do + local textureName = GetMapOverlayInfo(i) + if textureName and textureName ~= "" then + explored[textureName] = true + end + end + + local cfg = GetConfig() + local dimR, dimG, dimB = 0.4, 0.4, 0.4 + if cfg.unexploredAlpha then + dimR = cfg.unexploredAlpha + dimG = cfg.unexploredAlpha + dimB = cfg.unexploredAlpha + end + + local textureCount = 0 + + for idx = 1, table.getn(zoneData) do + local entry = zoneData[idx] + local _, _, name, sW, sH, sX, sY = string.find(entry, "^(%u+):(%d+):(%d+):(%d+):(%d+)$") + if not name then + _, _, name, sW, sH, sX, sY = string.find(entry, "^([^:]+):(%d+):(%d+):(%d+):(%d+)$") + end + if name then + local textureWidth = tonumber(sW) + local textureHeight = tonumber(sH) + local offsetX = tonumber(sX) + local offsetY = tonumber(sY) + local textureName = prefix .. name + + local isExplored = explored[textureName] + + if cfg.enabled or isExplored then + if errata[textureName] then + local e = errata[textureName] + if e.offsetX and e.offsetX[1] == offsetX then + offsetX = e.offsetX[2] + end + if e.offsetY and e.offsetY[1] == offsetY then + offsetY = e.offsetY[2] + end + end + + local numTexturesHorz = math.ceil(textureWidth / 256) + local numTexturesVert = math.ceil(textureHeight / 256) + local neededTextures = textureCount + (numTexturesHorz * numTexturesVert) + + if neededTextures > NUM_WORLDMAP_OVERLAYS then + for j = NUM_WORLDMAP_OVERLAYS + 1, neededTextures do + WorldMapDetailFrame:CreateTexture("WorldMapOverlay" .. j, "ARTWORK") + end + NUM_WORLDMAP_OVERLAYS = neededTextures + end + + for row = 1, numTexturesVert do + local texturePixelHeight, textureFileHeight + if row < numTexturesVert then + texturePixelHeight = 256 + textureFileHeight = 256 + else + texturePixelHeight = math.mod(textureHeight, 256) + if texturePixelHeight == 0 then texturePixelHeight = 256 end + textureFileHeight = NextPowerOf2(texturePixelHeight) + end + + for col = 1, numTexturesHorz do + if textureCount > NUM_WORLDMAP_OVERLAYS then return end + + local texture = _G["WorldMapOverlay" .. (textureCount + 1)] + + local texturePixelWidth, textureFileWidth + if col < numTexturesHorz then + texturePixelWidth = 256 + textureFileWidth = 256 + else + texturePixelWidth = math.mod(textureWidth, 256) + if texturePixelWidth == 0 then texturePixelWidth = 256 end + textureFileWidth = NextPowerOf2(texturePixelWidth) + end + + texture:SetWidth(texturePixelWidth) + texture:SetHeight(texturePixelHeight) + texture:SetTexCoord(0, texturePixelWidth / textureFileWidth, + 0, texturePixelHeight / textureFileHeight) + texture:ClearAllPoints() + texture:SetPoint("TOPLEFT", "WorldMapDetailFrame", "TOPLEFT", + offsetX + (256 * (col - 1)), + -(offsetY + (256 * (row - 1)))) + + local tileIndex = ((row - 1) * numTexturesHorz) + col + texture:SetTexture(textureName .. tileIndex) + + if not isExplored then + texture:SetVertexColor(dimR, dimG, dimB, 1) + else + texture:SetVertexColor(1, 1, 1, 1) + end + + texture:Show() + textureCount = textureCount + 1 + end + end + end + end + end +end + +function MapReveal:Initialize() + local db = GetOverlayDB() + if not db then + SFrames:Print("MapReveal: LibMapOverlayData 未找到,地图揭示功能不可用。") + return + end + + PatchOverlayDB() + + if not origWorldMapFrame_Update and WorldMapFrame_Update then + origWorldMapFrame_Update = WorldMapFrame_Update + WorldMapFrame_Update = function() + for i = 1, NUM_WORLDMAP_OVERLAYS do + local tex = _G["WorldMapOverlay" .. i] + if tex then tex:Hide() end + end + + origWorldMapFrame_Update() + + local cfg = GetConfig() + if cfg.enabled then + DoMapRevealUpdate() + end + end + end +end + +function MapReveal:Toggle() + if not SFramesDB then SFramesDB = {} end + if type(SFramesDB.MapReveal) ~= "table" then + SFramesDB.MapReveal = { enabled = true, unexploredAlpha = 0.7 } + end + + SFramesDB.MapReveal.enabled = not SFramesDB.MapReveal.enabled + + if SFramesDB.MapReveal.enabled then + SFrames:Print("地图迷雾揭示: |cff00ff00已开启|r") + if not origWorldMapFrame_Update and WorldMapFrame_Update then + self:Initialize() + end + else + SFrames:Print("地图迷雾揭示: |cffff0000已关闭|r") + end + + if WorldMapFrame and WorldMapFrame:IsShown() then + WorldMapFrame_Update() + end +end + +function MapReveal:SetAlpha(alpha) + if not SFramesDB or type(SFramesDB.MapReveal) ~= "table" then return end + SFramesDB.MapReveal.unexploredAlpha = alpha + if SFramesDB.MapReveal.enabled and WorldMapFrame and WorldMapFrame:IsShown() then + WorldMapFrame_Update() + end +end + +function MapReveal:Refresh() + if WorldMapFrame and WorldMapFrame:IsShown() then + WorldMapFrame_Update() + end +end diff --git a/Media.lua b/Media.lua new file mode 100644 index 0000000..d4ef9f5 --- /dev/null +++ b/Media.lua @@ -0,0 +1,47 @@ +SFrames.Media = { + -- Default ElvUI-like texture + -- Default ElvUI-like texture + -- Using the standard flat Vanilla UI status bar texture for a clean flat aesthetic + statusbar = "Interface\\TargetingFrame\\UI-StatusBar", + + -- Fonts + -- We can use a default WoW font, or eventually load a custom one here. + font = "Fonts\\ARIALN.TTF", + fontOutline = "OUTLINE", +} + +function SFrames:GetSharedMedia() + if LibStub then + local ok, LSM = pcall(function() return LibStub("LibSharedMedia-3.0", true) end) + if ok and LSM then return LSM end + end + return nil +end + +function SFrames:GetTexture() + if SFramesDB and SFramesDB.barTexture then + local LSM = self:GetSharedMedia() + if LSM then + local path = LSM:Fetch("statusbar", SFramesDB.barTexture, true) + if path then return path end + end + end + return self.Media.statusbar +end + +function SFrames:GetFont() + if SFramesDB and SFramesDB.fontName then + local LSM = self:GetSharedMedia() + if LSM then + local path = LSM:Fetch("font", SFramesDB.fontName, true) + if path then return path end + end + end + return self.Media.font +end + +function SFrames:GetSharedMediaList(mediaType) + local LSM = self:GetSharedMedia() + if LSM and LSM.List then return LSM:List(mediaType) end + return nil +end diff --git a/Merchant.lua b/Merchant.lua new file mode 100644 index 0000000..29f8738 --- /dev/null +++ b/Merchant.lua @@ -0,0 +1,1110 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Merchant UI (Merchant.lua) +-- Replaces MerchantFrame with Nanami-UI styled interface +-- Tabs: Merchant / Buyback, 4x5 grid, batch buy, repair +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.Merchant = {} +local MUI = SFrames.Merchant +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme (Pink Cat-Paw) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + moneyGold = { 1, 0.84, 0.0 }, + moneySilver = { 0.78, 0.78, 0.78 }, + moneyCopper = { 0.71, 0.43, 0.18 }, + cantAfford = { 0.80, 0.20, 0.20 }, + unusable = { 1.00, 0.25, 0.25 }, +}) + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, [5] = { 1, 0.5, 0 }, +} + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local NUM_COLS = 4 +local NUM_ROWS = 5 +local ITEMS_PER_PAGE = NUM_COLS * NUM_ROWS +local FRAME_W = 620 +local HEADER_H = 34 +local SIDE_PAD = 14 +local ITEM_W = 138 +local ITEM_H = 42 +local ITEM_GAP_X = 6 +local ITEM_GAP_Y = 4 +local ICON_SIZE = 34 +local BOTTOM_H = 50 +local TAB_AREA_H = 28 +local FRAME_H = HEADER_H + 6 + TAB_AREA_H + (ITEM_H + ITEM_GAP_Y) * NUM_ROWS + 6 + BOTTOM_H + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local MainFrame = nil +local ItemButtons = {} +local CurrentPage = 1 +local CurrentTab = 1 +local BuyPopup = nil +local ScanTip = nil + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +local function FormatMoney(copper) + if not copper or copper <= 0 then return 0, 0, 0 end + local g = math.floor(copper / 10000) + local s = math.floor(math.mod(copper, 10000) / 100) + local c = math.mod(copper, 100) + return g, s, c +end + +local function GetBuybackQualityColor(index) + if not ScanTip then + ScanTip = CreateFrame("GameTooltip", "SFramesMerchantScanTip", UIParent, "GameTooltipTemplate") + ScanTip:SetOwner(UIParent, "ANCHOR_NONE") + end + ScanTip:ClearLines() + ScanTip:SetBuybackItem(index) + local textLine = _G["SFramesMerchantScanTipTextLeft1"] + if textLine then + local r, g, b = textLine:GetTextColor() + if r and g and b then return r, g, b end + end + return nil +end + +-------------------------------------------------------------------------------- +-- Item Stack Helpers +-------------------------------------------------------------------------------- +local function GetMaxStack(link) + if not link then return 1 end + local _, _, _, _, _, _, ms = GetItemInfo(link) + if ms and ms > 0 then return ms end + return 1 +end + +local function GetItemCountInBags(link) + if not link then return 0 end + local _, _, searchID = string.find(link, "item:(%d+)") + if not searchID then return 0 end + local total = 0 + for bag = 0, 4 do + local slots = GetContainerNumSlots(bag) + for slot = 1, slots do + local bagLink = GetContainerItemLink(bag, slot) + if bagLink then + local _, _, bagID = string.find(bagLink, "item:(%d+)") + if bagID == searchID then + local _, count = GetContainerItemInfo(bag, slot) + total = total + (count or 1) + end + end + end + end + return total +end + +-------------------------------------------------------------------------------- +-- Rounded Action Button Factory (for popups) +-------------------------------------------------------------------------------- +local function CreateRoundActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 100) + btn:SetHeight(28) + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + + btn.disabled = false + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + self:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + self:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + btn:SetScript("OnMouseDown", function() + if not this.disabled then + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end + end) + btn:SetScript("OnMouseUp", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end + end) + + return btn +end + +-------------------------------------------------------------------------------- +-- Action Button Factory (matching TrainerUI / QuestUI) +-------------------------------------------------------------------------------- +local function CreateActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 100) + btn:SetHeight(28) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 12, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + + btn.disabled = false + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + self:SetBackdropBorderColor(0.2, 0.15, 0.18, 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + self:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + btn:SetScript("OnMouseDown", function() + if not this.disabled then + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end + end) + btn:SetScript("OnMouseUp", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end + end) + + return btn +end + +-------------------------------------------------------------------------------- +-- Tab Button Factory +-------------------------------------------------------------------------------- +local function CreateTabBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 70) + btn:SetHeight(22) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + btn:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], 0.5) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 12, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + btn.label = fs + + btn:SetScript("OnEnter", function() + if not this.active then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end + end) + btn:SetScript("OnLeave", function() + if this.active then + this:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], T.tabActiveBg[4]) + this:SetBackdropBorderColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], T.tabActiveBorder[4]) + else + this:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + this:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], 0.5) + end + end) + + function btn:SetActive(flag) + self.active = flag + if flag then + self:SetBackdropColor(T.tabActiveBg[1], T.tabActiveBg[2], T.tabActiveBg[3], T.tabActiveBg[4]) + self:SetBackdropBorderColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], T.tabActiveBorder[4]) + self.label:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + self:SetBackdropColor(T.tabBg[1], T.tabBg[2], T.tabBg[3], T.tabBg[4]) + self:SetBackdropBorderColor(T.tabBorder[1], T.tabBorder[2], T.tabBorder[3], 0.5) + self.label:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end + + return btn +end + +-------------------------------------------------------------------------------- +-- Buy Popup (Nanami themed, rounded corners, simple quantity input) +-------------------------------------------------------------------------------- +local function EnsureBuyPopup() + if BuyPopup then return end + + BuyPopup = CreateFrame("Frame", "SFramesMerchantBuyPopup", UIParent) + BuyPopup:SetWidth(240) + BuyPopup:SetHeight(110) + BuyPopup:SetPoint("CENTER", UIParent, "CENTER", 0, 60) + BuyPopup:SetFrameStrata("DIALOG") + SetRoundBackdrop(BuyPopup) + CreateShadow(BuyPopup) + BuyPopup:Hide() + + local font = GetFont() + + local titleFS = BuyPopup:CreateFontString(nil, "OVERLAY") + titleFS:SetFont(font, 13, "OUTLINE") + titleFS:SetPoint("TOP", BuyPopup, "TOP", 0, -12) + titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + titleFS:SetText("批量购买") + BuyPopup.titleFS = titleFS + + local customLabel = BuyPopup:CreateFontString(nil, "OVERLAY") + customLabel:SetFont(font, 11, "OUTLINE") + customLabel:SetPoint("TOP", titleFS, "BOTTOM", -18, -10) + customLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + customLabel:SetText("购买数量:") + + local editbox = CreateFrame("EditBox", "SFramesMerchantBuyEditBox", BuyPopup) + editbox:SetWidth(60) + editbox:SetHeight(22) + editbox:SetPoint("LEFT", customLabel, "RIGHT", 6, 0) + editbox:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + editbox:SetBackdropColor(T.inputBg[1], T.inputBg[2], T.inputBg[3], T.inputBg[4] or 0.95) + editbox:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], 0.8) + editbox:SetFont(font, 12, "OUTLINE") + editbox:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + editbox:SetJustifyH("CENTER") + editbox:SetNumeric(true) + editbox:SetAutoFocus(false) + editbox:SetTextInsets(4, 4, 2, 2) + + local confirm = CreateRoundActionBtn(BuyPopup, "确定", 75) + confirm:SetPoint("BOTTOMLEFT", BuyPopup, "BOTTOMLEFT", 28, 12) + + local cancel = CreateRoundActionBtn(BuyPopup, "取消", 75) + cancel:SetPoint("BOTTOMRIGHT", BuyPopup, "BOTTOMRIGHT", -28, 12) + + BuyPopup.index = 1 + BuyPopup.maxPurchase = 100 + BuyPopup.itemLink = nil + + local function DoBuy() + local qty = tonumber(editbox:GetText()) or 0 + if qty > 0 then + if qty > BuyPopup.maxPurchase then qty = BuyPopup.maxPurchase end + MUI:BuyMultiple(BuyPopup.index, qty) + end + BuyPopup:Hide() + end + + confirm:SetScript("OnClick", DoBuy) + cancel:SetScript("OnClick", function() BuyPopup:Hide() end) + editbox:SetScript("OnEnterPressed", DoBuy) + editbox:SetScript("OnEscapePressed", function() BuyPopup:Hide() end) + + BuyPopup.ShowPopup = function(index, maxAfford, itemLink) + BuyPopup.index = index + BuyPopup.maxPurchase = math.min(9999, maxAfford) + BuyPopup.itemLink = itemLink + editbox:SetText("1") + + BuyPopup.titleFS:SetText("批量购买") + + BuyPopup:Show() + editbox:SetFocus() + end +end + +-------------------------------------------------------------------------------- +-- Batch Buy Logic +-------------------------------------------------------------------------------- +function MUI:BuyMultiple(index, totalAmount) + if totalAmount <= 0 then return end + if CurrentTab == 2 then + BuybackItem(index) + return + end + + local name, _, price, batchQty, numAvailable = GetMerchantItemInfo(index) + + if numAvailable > -1 and totalAmount > numAvailable then + totalAmount = numAvailable + end + + for i = 1, totalAmount do + BuyMerchantItem(index, 1) + end +end + +-------------------------------------------------------------------------------- +-- Merchant Item Button Factory +-------------------------------------------------------------------------------- +local function CreateMerchantButton(parent, id) + local btn = CreateFrame("Button", "SFramesMerchantItem" .. id, parent) + btn:SetWidth(ITEM_W) + btn:SetHeight(ITEM_H) + + local iconFrame = CreateFrame("Button", btn:GetName() .. "Icon", btn) + iconFrame:SetWidth(ICON_SIZE) + iconFrame:SetHeight(ICON_SIZE) + iconFrame:SetPoint("LEFT", btn, "LEFT", 2, 0) + iconFrame:RegisterForClicks("LeftButtonUp", "RightButtonUp") + iconFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + btn.iconFrame = iconFrame + + local qualGlow = iconFrame:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.7) + qualGlow:SetWidth(ICON_SIZE * 1.8) + qualGlow:SetHeight(ICON_SIZE * 1.8) + qualGlow:SetPoint("CENTER", iconFrame, "CENTER", 0, 0) + qualGlow:Hide() + btn.qualGlow = qualGlow + + function btn:SetQualityBorder(r, g, b) + self.qualGlow:SetVertexColor(r, g, b) + self.qualGlow:Show() + self.iconFrame:SetBackdropBorderColor(r, g, b, 1) + end + function btn:ResetBorder() + self.qualGlow:Hide() + self.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + + local icon = iconFrame:CreateTexture(nil, "ARTWORK") + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetPoint("TOPLEFT", iconFrame, "TOPLEFT", 3, -3) + icon:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", -3, 3) + btn.icon = icon + + local font = GetFont() + local nameFS = btn:CreateFontString(nil, "OVERLAY") + nameFS:SetFont(font, 11, "OUTLINE") + nameFS:SetPoint("TOPLEFT", iconFrame, "TOPRIGHT", 5, -1) + nameFS:SetPoint("RIGHT", btn, "RIGHT", -2, 0) + nameFS:SetJustifyH("LEFT") + nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + btn.nameFS = nameFS + + btn.gTxt = btn:CreateFontString(nil, "OVERLAY") + btn.gTxt:SetFont(font, 10, "OUTLINE") + btn.gTex = btn:CreateTexture(nil, "ARTWORK") + btn.gTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + btn.gTex:SetTexCoord(0, 0.25, 0, 1) + btn.gTex:SetWidth(11); btn.gTex:SetHeight(11) + + btn.sTxt = btn:CreateFontString(nil, "OVERLAY") + btn.sTxt:SetFont(font, 10, "OUTLINE") + btn.sTex = btn:CreateTexture(nil, "ARTWORK") + btn.sTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + btn.sTex:SetTexCoord(0.25, 0.5, 0, 1) + btn.sTex:SetWidth(11); btn.sTex:SetHeight(11) + + btn.cTxt = btn:CreateFontString(nil, "OVERLAY") + btn.cTxt:SetFont(font, 10, "OUTLINE") + btn.cTex = btn:CreateTexture(nil, "ARTWORK") + btn.cTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + btn.cTex:SetTexCoord(0.5, 0.75, 0, 1) + btn.cTex:SetWidth(11); btn.cTex:SetHeight(11) + + local countFS = iconFrame:CreateFontString(nil, "OVERLAY") + countFS:SetFont("Fonts\\ARIALN.TTF", 11, "OUTLINE") + countFS:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", -2, 2) + countFS:SetJustifyH("RIGHT") + btn.countFS = countFS + + local highlight = btn:CreateTexture(nil, "HIGHLIGHT") + highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + highlight:SetBlendMode("ADD") + highlight:SetAllPoints(btn) + highlight:SetAlpha(0.15) + + local function OnEnter() + if not btn.itemIndex then return end + btn.iconFrame:SetBackdropBorderColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4]) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + if CurrentTab == 1 then + GameTooltip:SetMerchantItem(btn.itemIndex) + ShowMerchantSellCursor(btn.itemIndex) + local _, _, price = GetMerchantItemInfo(btn.itemIndex) + if price and price > 0 then + GameTooltip:AddLine(" ") + GameTooltip:AddLine(">> 本店售价:", 1, 0.8, 0) + SetTooltipMoney(GameTooltip, price) + end + else + GameTooltip:SetBuybackItem(btn.itemIndex) + local _, _, price = GetBuybackItemInfo(btn.itemIndex) + if price and price > 0 then + GameTooltip:AddLine(" ") + GameTooltip:AddLine(">> 购回需花费:", 1, 0.5, 0) + SetTooltipMoney(GameTooltip, price) + end + end + local ttLink = (CurrentTab == 1) and GetMerchantItemLink(btn.itemIndex) or nil + if not ttLink and CurrentTab == 2 and GetBuybackItemLink then + ttLink = GetBuybackItemLink(btn.itemIndex) + end + if ttLink then + local ms = GetMaxStack(ttLink) + if ms and ms > 1 then + GameTooltip:AddLine(" ") + GameTooltip:AddLine("最大堆叠: " .. ms, 0.5, 0.8, 1) + end + end + if IsControlKeyDown() then ShowInspectCursor() end + GameTooltip:Show() + end + + local function OnLeave() + GameTooltip:Hide() + ResetCursor() + if btn._qualR then + btn.iconFrame:SetBackdropBorderColor(btn._qualR, btn._qualG, btn._qualB, 1) + else + btn.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + end + + iconFrame:SetScript("OnEnter", OnEnter) + iconFrame:SetScript("OnLeave", OnLeave) + + iconFrame:SetScript("OnUpdate", function() + if GameTooltip:IsOwned(this) then + if IsControlKeyDown() then + if not this.controlDownLast then + this.controlDownLast = true + ShowInspectCursor() + end + else + if this.controlDownLast then + this.controlDownLast = false + ResetCursor() + end + end + end + end) + + iconFrame:SetScript("OnClick", function() + if not btn.itemIndex then return end + if IsControlKeyDown() and arg1 == "LeftButton" then + local link = GetMerchantItemLink(btn.itemIndex) + if link and DressUpItemLink then + DressUpItemLink(link) + return + end + end + if IsShiftKeyDown() then + if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + local link = nil + if CurrentTab == 1 then link = GetMerchantItemLink(btn.itemIndex) end + if link then ChatFrameEditBox:Insert(link) end + else + if CurrentTab == 1 then + local name, _, price, quantity, numAvailable = GetMerchantItemInfo(btn.itemIndex) + if not name then return end + local popupLink = GetMerchantItemLink(btn.itemIndex) + local maxCanAfford = 9999 + if price and price > 0 then + maxCanAfford = math.floor(GetMoney() / price) + end + if numAvailable > -1 and numAvailable < maxCanAfford then + maxCanAfford = numAvailable + end + if maxCanAfford < 1 then return end + EnsureBuyPopup() + BuyPopup.ShowPopup(btn.itemIndex, maxCanAfford, popupLink) + else + BuybackItem(btn.itemIndex) + end + end + elseif arg1 == "RightButton" then + if CurrentTab == 1 then + BuyMerchantItem(btn.itemIndex, 1) + else + BuybackItem(btn.itemIndex) + end + end + end) + + return btn +end + +-------------------------------------------------------------------------------- +-- Money Layout Helper +-------------------------------------------------------------------------------- +local function LayoutMoney(btn, copper, canBuy) + btn.gTxt:Hide(); btn.gTex:Hide() + btn.sTxt:Hide(); btn.sTex:Hide() + btn.cTxt:Hide(); btn.cTex:Hide() + + local r, g, b + if canBuy then + r, g, b = T.bodyText[1], T.bodyText[2], T.bodyText[3] + else + r, g, b = T.cantAfford[1], T.cantAfford[2], T.cantAfford[3] + end + + if copper == 0 then + btn.cTxt:SetText("0") + btn.cTxt:SetTextColor(r, g, b) + btn.cTxt:ClearAllPoints() + btn.cTxt:SetPoint("BOTTOMLEFT", btn.iconFrame, "BOTTOMRIGHT", 5, 2) + btn.cTxt:Show() + btn.cTex:ClearAllPoints() + btn.cTex:SetPoint("LEFT", btn.cTxt, "RIGHT", 1, 0) + btn.cTex:Show() + return + end + + local vG, vS, vC = FormatMoney(copper) + local anchor = nil + + local function AttachPair(txt, tex, val, coinR, coinG, coinB) + txt:SetText(val) + txt:SetTextColor(canBuy and coinR or r, canBuy and coinG or g, canBuy and coinB or b) + txt:ClearAllPoints() + if not anchor then + txt:SetPoint("BOTTOMLEFT", btn.iconFrame, "BOTTOMRIGHT", 5, 2) + else + txt:SetPoint("LEFT", anchor, "RIGHT", 4, 0) + end + txt:Show() + tex:ClearAllPoints() + tex:SetPoint("LEFT", txt, "RIGHT", 1, 0) + tex:Show() + anchor = tex + end + + if vG > 0 then AttachPair(btn.gTxt, btn.gTex, vG, T.moneyGold[1], T.moneyGold[2], T.moneyGold[3]) end + if vS > 0 then AttachPair(btn.sTxt, btn.sTex, vS, T.moneySilver[1], T.moneySilver[2], T.moneySilver[3]) end + if vC > 0 then AttachPair(btn.cTxt, btn.cTex, vC, T.moneyCopper[1], T.moneyCopper[2], T.moneyCopper[3]) end +end + +-------------------------------------------------------------------------------- +-- Update +-------------------------------------------------------------------------------- +function MUI:Update() + if not MainFrame or not MainFrame:IsVisible() then return end + + local numItems = (CurrentTab == 1) and GetMerchantNumItems() or GetNumBuybackItems() + local name = UnitName("NPC") or "商人" + if CurrentTab == 2 then name = name .. " - 购回" end + MainFrame.npcNameFS:SetText(name) + + local totalPages = math.max(1, math.ceil(numItems / ITEMS_PER_PAGE)) + if CurrentPage > totalPages then CurrentPage = totalPages end + if CurrentPage < 1 then CurrentPage = 1 end + + MainFrame.pageText:SetText(string.format("第 %d / %d 页", CurrentPage, totalPages)) + MainFrame.prevBtn:SetDisabled(CurrentPage <= 1) + MainFrame.nextBtn:SetDisabled(CurrentPage >= totalPages) + + MainFrame.tabMerchant:SetActive(CurrentTab == 1) + MainFrame.tabBuyback:SetActive(CurrentTab == 2) + + for i = 1, ITEMS_PER_PAGE do + local btn = ItemButtons[i] + local itemIndex = (CurrentPage - 1) * ITEMS_PER_PAGE + i + + if itemIndex <= numItems then + local itemName, itemTexture, itemPrice, itemQuantity, numAvailable, isUsable + local itemLink + + if CurrentTab == 1 then + itemName, itemTexture, itemPrice, itemQuantity, numAvailable, isUsable = GetMerchantItemInfo(itemIndex) + itemLink = GetMerchantItemLink(itemIndex) + else + itemName, itemTexture, itemPrice, itemQuantity, numAvailable, isUsable = GetBuybackItemInfo(itemIndex) + if GetBuybackItemLink then itemLink = GetBuybackItemLink(itemIndex) end + end + + btn.itemIndex = itemIndex + btn.icon:SetTexture(itemTexture) + btn.nameFS:SetText(itemName) + btn._qualR = nil; btn._qualG = nil; btn._qualB = nil + + if CurrentTab == 2 and isUsable == nil then isUsable = true end + local canAfford = (GetMoney() >= itemPrice) + local isRequirementBlocked = (CurrentTab == 1 and not isUsable) + local canBuy = (not isRequirementBlocked) and canAfford + if canBuy then + btn.icon:SetVertexColor(1, 1, 1) + btn.nameFS:SetAlpha(1) + else + btn.icon:SetVertexColor(0.5, 0.2, 0.2) + btn.nameFS:SetAlpha(0.6) + end + + LayoutMoney(btn, itemPrice, canBuy) + + if CurrentTab == 1 and numAvailable and numAvailable > -1 then + btn.countFS:SetText(numAvailable) + if numAvailable == 0 then + btn.countFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + else + btn.countFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + elseif itemQuantity and itemQuantity > 1 then + btn.countFS:SetText(itemQuantity) + btn.countFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + else + btn.countFS:SetText("") + end + + local qr, qg, qb + local quality + + if itemLink then + local _, _, q = GetItemInfo(itemLink) + quality = q + if not quality then + local _, _, itemID = string.find(itemLink, "item:(%d+)") + if itemID then _, _, quality = GetItemInfo("item:" .. itemID) end + end + if quality then + qr, qg, qb = GetItemQualityColor(quality) + else + local _, _, hexColor = string.find(itemLink, "|c(%x%x%x%x%x%x%x%x)|") + if hexColor then + qr = tonumber(string.sub(hexColor, 3, 4), 16) / 255 + qg = tonumber(string.sub(hexColor, 5, 6), 16) / 255 + qb = tonumber(string.sub(hexColor, 7, 8), 16) / 255 + end + end + elseif CurrentTab == 2 and itemName then + qr, qg, qb = GetBuybackQualityColor(itemIndex) + end + + if isRequirementBlocked then + -- Level / weapon skill / class requirements not met: always mark red. + btn.nameFS:SetTextColor(T.unusable[1], T.unusable[2], T.unusable[3]) + btn.nameFS:SetAlpha(1) + btn.icon:SetVertexColor(0.75, 0.25, 0.25) + btn:SetQualityBorder(T.unusable[1], T.unusable[2], T.unusable[3]) + btn._qualR = T.unusable[1]; btn._qualG = T.unusable[2]; btn._qualB = T.unusable[3] + elseif qr then + btn.nameFS:SetTextColor(qr, qg, qb) + btn._qualR = qr; btn._qualG = qg; btn._qualB = qb + if quality and quality > 1 then + btn:SetQualityBorder(qr, qg, qb) + else + local isWhite = (qr > 0.95 and qg > 0.95 and qb > 0.95) + local isGrey = (qr < 0.7 and qg < 0.7 and qb < 0.7) + if not isWhite and not isGrey then + btn:SetQualityBorder(qr, qg, qb) + else + btn:ResetBorder() + btn._qualR = nil; btn._qualG = nil; btn._qualB = nil + end + end + else + btn.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + btn:ResetBorder() + end + + if CurrentTab == 1 and numAvailable and numAvailable == 0 then + btn.icon:SetVertexColor(0.4, 0.4, 0.4) + btn.nameFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + btn.nameFS:SetAlpha(0.5) + btn:ResetBorder() + btn._qualR = nil; btn._qualG = nil; btn._qualB = nil + LayoutMoney(btn, itemPrice, false) + end + + btn:Show() + else + btn.itemIndex = nil + btn._qualR = nil; btn._qualG = nil; btn._qualB = nil + btn:ResetBorder() + btn:Hide() + end + end + + if CanMerchantRepair() then + MainFrame.repairAllBtn:Show() + MainFrame.repairItemBtn:Show() + local repairCost, canRepair = GetRepairAllCost() + if canRepair and repairCost > 0 and (GetMoney() >= repairCost) then + MainFrame.repairAllBtn.canClick = true + if MainFrame.repairAllBtn.iconTex then + MainFrame.repairAllBtn.iconTex:SetVertexColor(1, 1, 1) + end + else + MainFrame.repairAllBtn.canClick = false + if MainFrame.repairAllBtn.iconTex then + MainFrame.repairAllBtn.iconTex:SetVertexColor(0.5, 0.5, 0.5) + end + end + else + MainFrame.repairAllBtn:Hide() + MainFrame.repairItemBtn:Hide() + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function MUI:Initialize() + if MainFrame then return end + + MainFrame = CreateFrame("Frame", "SFramesMerchantFrame", UIParent) + MainFrame:SetWidth(FRAME_W) + MainFrame:SetHeight(FRAME_H) + MainFrame:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 12, -104) + MainFrame:SetFrameStrata("HIGH") + MainFrame:SetToplevel(true) + MainFrame:EnableMouse(true) + MainFrame:SetMovable(true) + MainFrame:RegisterForDrag("LeftButton") + MainFrame:SetScript("OnDragStart", function() this:StartMoving() end) + MainFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + SetRoundBackdrop(MainFrame) + CreateShadow(MainFrame) + + -- Header + local header = CreateFrame("Frame", nil, MainFrame) + header:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", 0, 0) + header:SetHeight(HEADER_H) + header:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8" }) + header:SetBackdropColor(T.headerBg[1], T.headerBg[2], T.headerBg[3], T.headerBg[4]) + + local titleIco = SFrames:CreateIcon(header, "merchant", 16) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("LEFT", header, "LEFT", SIDE_PAD, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local npcNameFS = header:CreateFontString(nil, "OVERLAY") + npcNameFS:SetFont(GetFont(), 14, "OUTLINE") + npcNameFS:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + npcNameFS:SetPoint("RIGHT", header, "RIGHT", -30, 0) + npcNameFS:SetJustifyH("LEFT") + npcNameFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + MainFrame.npcNameFS = npcNameFS + + local closeBtn = CreateFrame("Button", nil, header) + closeBtn:SetWidth(20); closeBtn:SetHeight(20) + closeBtn:SetPoint("RIGHT", header, "RIGHT", -8, 0) + local closeTex = closeBtn:CreateTexture(nil, "ARTWORK") + closeTex:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + closeTex:SetTexCoord(0.25, 0.375, 0, 0.125) + closeTex:SetAllPoints() + closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + closeBtn:SetScript("OnClick", function() MainFrame:Hide() end) + closeBtn:SetScript("OnEnter", function() closeTex:SetVertexColor(1, 0.6, 0.7) end) + closeBtn:SetScript("OnLeave", function() closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) end) + + local headerSep = MainFrame:CreateTexture(nil, "ARTWORK") + headerSep:SetTexture("Interface\\Buttons\\WHITE8X8") + headerSep:SetHeight(1) + headerSep:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 6, -HEADER_H) + headerSep:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", -6, -HEADER_H) + headerSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- Tabs + local tabMerchant = CreateTabBtn(MainFrame, "商人", 60) + tabMerchant:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", SIDE_PAD, -(HEADER_H + 6)) + tabMerchant:SetScript("OnClick", function() + CurrentTab = 1 + CurrentPage = 1 + MUI:Update() + end) + MainFrame.tabMerchant = tabMerchant + + local tabBuyback = CreateTabBtn(MainFrame, "购回", 60) + tabBuyback:SetPoint("LEFT", tabMerchant, "RIGHT", 4, 0) + tabBuyback:SetScript("OnClick", function() + CurrentTab = 2 + CurrentPage = 1 + MUI:Update() + end) + MainFrame.tabBuyback = tabBuyback + + -- Item Grid + local gridTop = HEADER_H + 6 + 22 + 6 + for i = 1, ITEMS_PER_PAGE do + local btn = CreateMerchantButton(MainFrame, i) + local row = math.floor((i - 1) / NUM_COLS) + local col = math.mod((i - 1), NUM_COLS) + btn:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", + SIDE_PAD + col * (ITEM_W + ITEM_GAP_X), + -(gridTop + row * (ITEM_H + ITEM_GAP_Y))) + ItemButtons[i] = btn + end + + -- Bottom bar separator + local bottomSep = MainFrame:CreateTexture(nil, "ARTWORK") + bottomSep:SetTexture("Interface\\Buttons\\WHITE8X8") + bottomSep:SetHeight(1) + bottomSep:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", 6, BOTTOM_H) + bottomSep:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -6, BOTTOM_H) + bottomSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- Page Navigation + local prevBtn = CreateActionBtn(MainFrame, "<", 28) + prevBtn:SetHeight(22) + prevBtn:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", SIDE_PAD, 14) + prevBtn:SetScript("OnClick", function() + CurrentPage = CurrentPage - 1 + MUI:Update() + end) + MainFrame.prevBtn = prevBtn + + local nextBtn = CreateActionBtn(MainFrame, ">", 28) + nextBtn:SetHeight(22) + nextBtn:SetPoint("LEFT", prevBtn, "RIGHT", 4, 0) + nextBtn:SetScript("OnClick", function() + CurrentPage = CurrentPage + 1 + MUI:Update() + end) + MainFrame.nextBtn = nextBtn + + local pageText = MainFrame:CreateFontString(nil, "OVERLAY") + pageText:SetFont(GetFont(), 11, "OUTLINE") + pageText:SetPoint("LEFT", nextBtn, "RIGHT", 8, 0) + pageText:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + MainFrame.pageText = pageText + + -- Repair Buttons + local repairAllBtn = CreateFrame("Button", nil, MainFrame) + repairAllBtn:SetWidth(32); repairAllBtn:SetHeight(32) + repairAllBtn:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -(SIDE_PAD), 10) + repairAllBtn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + repairAllBtn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + repairAllBtn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.6) + + local repairAllIcon = repairAllBtn:CreateTexture(nil, "ARTWORK") + repairAllIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + repairAllIcon:SetPoint("TOPLEFT", 3, -3) + repairAllIcon:SetPoint("BOTTOMRIGHT", -3, 3) + repairAllIcon:SetTexture("Interface\\Icons\\Trade_BlackSmithing") + repairAllBtn.iconTex = repairAllIcon + + repairAllBtn:SetScript("OnClick", function() + if this.canClick then RepairAllItems() end + end) + repairAllBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText("修理所有物品", 1, 1, 1) + local repairCost, canRepair = GetRepairAllCost() + if canRepair and repairCost > 0 then SetTooltipMoney(GameTooltip, repairCost) end + GameTooltip:Show() + end) + repairAllBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.6) + GameTooltip:Hide() + end) + MainFrame.repairAllBtn = repairAllBtn + + local repairItemBtn = CreateFrame("Button", nil, MainFrame) + repairItemBtn:SetWidth(32); repairItemBtn:SetHeight(32) + repairItemBtn:SetPoint("RIGHT", repairAllBtn, "LEFT", -6, 0) + repairItemBtn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + repairItemBtn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + repairItemBtn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.6) + + local repairItemIcon = repairItemBtn:CreateTexture(nil, "ARTWORK") + repairItemIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + repairItemIcon:SetPoint("TOPLEFT", 3, -3) + repairItemIcon:SetPoint("BOTTOMRIGHT", -3, 3) + repairItemIcon:SetTexture("Interface\\Icons\\INV_Hammer_20") + repairItemBtn.iconTex = repairItemIcon + + repairItemBtn:SetScript("OnClick", function() + if InRepairMode() then HideRepairCursor() else ShowRepairCursor() end + end) + repairItemBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText("修理一件物品", 1, 1, 1) + GameTooltip:Show() + end) + repairItemBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.6) + GameTooltip:Hide() + end) + MainFrame.repairItemBtn = repairItemBtn + + -- Events + MainFrame:EnableMouseWheel(true) + MainFrame:SetScript("OnMouseWheel", function() + local numItems = (CurrentTab == 1) and GetMerchantNumItems() or GetNumBuybackItems() + local totalPages = math.max(1, math.ceil(numItems / ITEMS_PER_PAGE)) + if arg1 > 0 then + if CurrentPage > 1 then + CurrentPage = CurrentPage - 1 + MUI:Update() + end + elseif arg1 < 0 then + if CurrentPage < totalPages then + CurrentPage = CurrentPage + 1 + MUI:Update() + end + end + end) + + MainFrame:SetScript("OnHide", function() pcall(CloseMerchant) end) + MainFrame:SetScript("OnEvent", function() + if event == "MERCHANT_SHOW" then + if SFramesDB and SFramesDB.enableMerchant == false then return end + CurrentTab = 1 + CurrentPage = 1 + MainFrame:Show() + MUI:Update() + elseif event == "MERCHANT_UPDATE" then + if MainFrame:IsVisible() then MUI:Update() end + elseif event == "MERCHANT_CLOSED" then + MainFrame:Hide() + end + end) + + MainFrame:RegisterEvent("MERCHANT_SHOW") + MainFrame:RegisterEvent("MERCHANT_UPDATE") + MainFrame:RegisterEvent("MERCHANT_CLOSED") + MainFrame:Hide() + + if MerchantFrame then + MerchantFrame:UnregisterEvent("MERCHANT_SHOW") + end + tinsert(UISpecialFrames, "SFramesMerchantFrame") +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local f = CreateFrame("Frame") +f:RegisterEvent("PLAYER_LOGIN") +f:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB and SFramesDB.enableMerchant == nil then + SFramesDB.enableMerchant = true + end + if SFramesDB and SFramesDB.enableMerchant ~= false then + MUI:Initialize() + end + end +end) diff --git a/Minimap.lua b/Minimap.lua new file mode 100644 index 0000000..6462412 --- /dev/null +++ b/Minimap.lua @@ -0,0 +1,590 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Minimap Skin (Minimap.lua) +-- Custom cat-paw pixel art frame for the minimap +-------------------------------------------------------------------------------- + +SFrames.Minimap = SFrames.Minimap or {} +local MM = SFrames.Minimap +local _A = SFrames.ActiveTheme + +local MAP_STYLES = { + { key = "map", tex = "Interface\\AddOns\\Nanami-UI\\img\\map", label = "猫爪", plateY = -10, textColor = {0.45, 0.32, 0.20} }, + { key = "zs", tex = "Interface\\AddOns\\Nanami-UI\\img\\zs", label = "战士", plateY = -6, textColor = {1, 1, 1} }, + { key = "qs", tex = "Interface\\AddOns\\Nanami-UI\\img\\qs", label = "圣骑士", plateY = -6, textColor = {0.22, 0.13, 0.07} }, + { key = "lr", tex = "Interface\\AddOns\\Nanami-UI\\img\\lr", label = "猎人", plateY = -6, textColor = {1, 1, 1} }, + { key = "qxz", tex = "Interface\\AddOns\\Nanami-UI\\img\\qxz", label = "潜行者", plateY = -6, textColor = {1, 1, 1} }, + { key = "ms", tex = "Interface\\AddOns\\Nanami-UI\\img\\ms", label = "牧师", plateY = -6, textColor = {0.22, 0.13, 0.07} }, + { key = "sm", tex = "Interface\\AddOns\\Nanami-UI\\img\\sm", label = "萨满", plateY = -6, textColor = {1, 1, 1} }, + { key = "fs", tex = "Interface\\AddOns\\Nanami-UI\\img\\fs", label = "法师", plateY = -6, textColor = {1, 1, 1} }, + { key = "ss", tex = "Interface\\AddOns\\Nanami-UI\\img\\ss", label = "术士", plateY = -6, textColor = {1, 1, 1} }, + { key = "dly", tex = "Interface\\AddOns\\Nanami-UI\\img\\dly", label = "德鲁伊", plateY = -6, textColor = {0.22, 0.13, 0.07} }, +} +local TEX_SIZE = 512 +local CIRCLE_CX = 256 +local CIRCLE_CY = 256 +local CIRCLE_R = 210 +local PLATE_X = 103 +local PLATE_Y = 29 +local PLATE_W = 200 +local PLATE_H = 66 +local BASE_SIZE = 180 + +local CLASS_STYLE_MAP = { + ["Warrior"] = "zs", ["WARRIOR"] = "zs", ["战士"] = "zs", + ["Paladin"] = "qs", ["PALADIN"] = "qs", ["圣骑士"] = "qs", + ["Hunter"] = "lr", ["HUNTER"] = "lr", ["猎人"] = "lr", + ["Rogue"] = "qxz", ["ROGUE"] = "qxz", ["潜行者"] = "qxz", + ["Priest"] = "ms", ["PRIEST"] = "ms", ["牧师"] = "ms", + ["Shaman"] = "sm", ["SHAMAN"] = "sm", ["萨满祭司"] = "sm", + ["Mage"] = "fs", ["MAGE"] = "fs", ["法师"] = "fs", + ["Warlock"] = "ss", ["WARLOCK"] = "ss", ["术士"] = "ss", + ["Druid"] = "dly", ["DRUID"] = "dly", ["德鲁伊"] = "dly", +} + +local DEFAULTS = { + enabled = true, + scale = 1.0, + showClock = true, + showCoords = true, + mapStyle = "auto", + posX = -5, + posY = -5, + mailIconX = nil, + mailIconY = nil, +} + +local container, overlayFrame, overlayTex +local zoneFs, clockFs, clockBg, coordFs +local built = false + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetDB() + if not SFramesDB then SFramesDB = {} end + if type(SFramesDB.Minimap) ~= "table" then SFramesDB.Minimap = {} end + local db = SFramesDB.Minimap + for k, v in pairs(DEFAULTS) do + if db[k] == nil then db[k] = v end + end + return db +end + +local function ResolveStyleKey() + local key = GetDB().mapStyle or "auto" + if key == "auto" then + local localName, engName = UnitClass("player") + key = CLASS_STYLE_MAP[engName] + or CLASS_STYLE_MAP[localName] + or "map" + end + return key +end + +local function GetCurrentStyle() + local key = ResolveStyleKey() + for _, s in ipairs(MAP_STYLES) do + if s.key == key then return s end + end + return MAP_STYLES[1] +end + +local function GetMapTexture() + return GetCurrentStyle().tex +end + +local function S(texPx, frameSize) + return texPx / TEX_SIZE * frameSize +end + +local function FrameSize() + return math.floor(BASE_SIZE * ((GetDB().scale) or 1)) +end + +local function ApplyPosition() + if not container then return end + local db = GetDB() + local x = tonumber(db.posX) or -5 + local y = tonumber(db.posY) or -5 + container:ClearAllPoints() + container:SetPoint("TOPRIGHT", UIParent, "TOPRIGHT", x, y) +end + +-------------------------------------------------------------------------------- +-- Hide default Blizzard minimap chrome +-- MUST be called AFTER BuildFrame (Minimap is already reparented) +-------------------------------------------------------------------------------- +local function HideDefaultElements() + local kill = { + MinimapBorder, + MinimapBorderTop, + MinimapZoomIn, + MinimapZoomOut, + MinimapToggleButton, + MiniMapWorldMapButton, + GameTimeFrame, + MinimapZoneTextButton, + MiniMapTracking, + MinimapBackdrop, + } + for _, f in ipairs(kill) do + if f then + f:Hide() + f.Show = function() end + end + end + + -- Hide all tracking-related frames (Turtle WoW dual tracking, etc.) + local trackNames = { + "MiniMapTrackingButton", "MiniMapTrackingFrame", + "MiniMapTrackingIcon", "MiniMapTracking1", "MiniMapTracking2", + } + for _, name in ipairs(trackNames) do + local f = _G[name] + if f and f.Hide then + f:Hide() + f.Show = function() end + end + end + + -- Also hide any tracking textures that are children of Minimap + if Minimap.GetChildren then + local children = { Minimap:GetChildren() } + for _, child in ipairs(children) do + local n = child.GetName and child:GetName() + if n and string.find(n, "Track") then + child:Hide() + child.Show = function() end + end + end + end + + -- Move MinimapCluster off-screen instead of Hide() + -- Hide() would cascade-hide children that were still parented at load time + if MinimapCluster then + MinimapCluster:ClearAllPoints() + MinimapCluster:SetPoint("TOP", UIParent, "BOTTOM", 0, -500) + MinimapCluster:SetWidth(1) + MinimapCluster:SetHeight(1) + MinimapCluster:EnableMouse(false) + end +end + +-------------------------------------------------------------------------------- +-- Build +-------------------------------------------------------------------------------- +local function BuildFrame() + if built then return end + built = true + + local fs = FrameSize() + local mapDiam = math.floor(S((CIRCLE_R + 8) * 2, fs)) + + -- Main container + container = CreateFrame("Frame", "SFramesMinimapContainer", UIParent) + container:SetWidth(fs) + container:SetHeight(fs) + container:SetFrameStrata("LOW") + container:SetFrameLevel(1) + container:EnableMouse(false) + container:SetClampedToScreen(true) + + -- Reparent the actual minimap into our container + Minimap:SetParent(container) + Minimap:ClearAllPoints() + Minimap:SetPoint("CENTER", container, "TOPLEFT", + S(CIRCLE_CX, fs), -S(CIRCLE_CY, fs)) + Minimap:SetWidth(mapDiam) + Minimap:SetHeight(mapDiam) + Minimap:SetFrameStrata("LOW") + Minimap:SetFrameLevel(2) + Minimap:Show() + + if Minimap.SetMaskTexture then + Minimap:SetMaskTexture("Textures\\MinimapMask") + end + + -- Decorative overlay (map.tga with transparent circle) + overlayFrame = CreateFrame("Frame", nil, container) + overlayFrame:SetAllPoints(container) + overlayFrame:SetFrameStrata("LOW") + overlayFrame:SetFrameLevel(Minimap:GetFrameLevel() + 3) + overlayFrame:EnableMouse(false) + + overlayTex = overlayFrame:CreateTexture(nil, "ARTWORK") + overlayTex:SetTexture(GetMapTexture()) + overlayTex:SetAllPoints(overlayFrame) + + -- Zone name on the scroll plate (horizontally centered on frame) + local style = GetCurrentStyle() + local pcy = S(PLATE_Y + PLATE_H / 2 + (style.plateY or -6), fs) + + zoneFs = overlayFrame:CreateFontString(nil, "OVERLAY") + zoneFs:SetFont(SFrames:GetFont(), 11, "") + zoneFs:SetPoint("CENTER", container, "TOP", 0, -pcy) + zoneFs:SetWidth(S(PLATE_W + 60, fs)) + zoneFs:SetHeight(S(PLATE_H, fs)) + zoneFs:SetJustifyH("CENTER") + zoneFs:SetJustifyV("MIDDLE") + local tc = style.textColor or {0.22, 0.13, 0.07} + zoneFs:SetTextColor(tc[1], tc[2], tc[3]) + + -- Clock background (semi-transparent rounded) + clockBg = CreateFrame("Frame", nil, overlayFrame) + clockBg:SetFrameLevel(overlayFrame:GetFrameLevel() + 1) + clockBg:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + local _clkBg = _A.clockBg or { 0, 0, 0, 0.55 } + local _clkBd = _A.clockBorder or { 0, 0, 0, 0.3 } + clockBg:SetBackdropColor(_clkBg[1], _clkBg[2], _clkBg[3], _clkBg[4]) + clockBg:SetBackdropBorderColor(_clkBd[1], _clkBd[2], _clkBd[3], _clkBd[4]) + clockBg:SetWidth(46) + clockBg:SetHeight(18) + clockBg:SetPoint("CENTER", container, "BOTTOM", 0, + S((TEX_SIZE - CIRCLE_CY - CIRCLE_R) / 2, fs)) + + -- Clock text + clockFs = clockBg:CreateFontString(nil, "OVERLAY") + clockFs:SetFont(SFrames:GetFont(), 10, "OUTLINE") + clockFs:SetPoint("CENTER", clockBg, "CENTER", 0, 0) + clockFs:SetJustifyH("CENTER") + local _clkTxt = _A.clockText or { 0.92, 0.84, 0.72 } + clockFs:SetTextColor(_clkTxt[1], _clkTxt[2], _clkTxt[3]) + + -- Coordinates (inside circle, near bottom) + coordFs = overlayFrame:CreateFontString(nil, "OVERLAY") + coordFs:SetFont(SFrames:GetFont(), 9, "OUTLINE") + coordFs:SetPoint("BOTTOM", Minimap, "BOTTOM", 0, 8) + coordFs:SetJustifyH("CENTER") + local _coordTxt = _A.coordText or { 0.80, 0.80, 0.80 } + coordFs:SetTextColor(_coordTxt[1], _coordTxt[2], _coordTxt[3]) + + MM.container = container + MM.overlayFrame = overlayFrame +end + +-------------------------------------------------------------------------------- +-- Interactions +-------------------------------------------------------------------------------- +local function SetupScrollZoom() + Minimap:EnableMouseWheel(true) + Minimap:SetScript("OnMouseWheel", function() + if arg1 > 0 then + Minimap_ZoomIn() + else + Minimap_ZoomOut() + end + end) +end + +local function SetupMouseHandler() + Minimap:SetScript("OnMouseUp", function() + if arg1 == "RightButton" then + if MiniMapTrackingDropDown then + ToggleDropDownMenu(1, nil, MiniMapTrackingDropDown, "cursor") + end + else + if Minimap_OnClick then + Minimap_OnClick(this) + end + end + end) +end + +MM.ApplyPosition = ApplyPosition + +-------------------------------------------------------------------------------- +-- Reposition child icons +-------------------------------------------------------------------------------- +local function SetupMailDragging() + if not MiniMapMailFrame then return end + + MiniMapMailFrame:SetMovable(true) + MiniMapMailFrame:EnableMouse(true) + MiniMapMailFrame:RegisterForDrag("LeftButton") + + MiniMapMailFrame:SetScript("OnDragStart", function() + MiniMapMailFrame:StartMoving() + end) + + MiniMapMailFrame:SetScript("OnDragStop", function() + MiniMapMailFrame:StopMovingOrSizing() + local db = GetDB() + local cx, cy = MiniMapMailFrame:GetCenter() + local ux, uy = UIParent:GetCenter() + if cx and cy and ux and uy then + db.mailIconX = cx - ux + db.mailIconY = cy - uy + end + end) +end + +local function RepositionIcons() + if MiniMapMailFrame then + local db = GetDB() + MiniMapMailFrame:ClearAllPoints() + if db.mailIconX and db.mailIconY then + MiniMapMailFrame:SetPoint("CENTER", UIParent, "CENTER", db.mailIconX, db.mailIconY) + else + local mapDiam = Minimap:GetWidth() + MiniMapMailFrame:SetPoint("RIGHT", Minimap, "RIGHT", 8, mapDiam * 0.12) + end + MiniMapMailFrame:SetFrameStrata("LOW") + MiniMapMailFrame:SetFrameLevel((overlayFrame and overlayFrame:GetFrameLevel() or 5) + 2) + SetupMailDragging() + end + + if MiniMapBattlefieldFrame then + MiniMapBattlefieldFrame:ClearAllPoints() + MiniMapBattlefieldFrame:SetPoint("BOTTOMLEFT", Minimap, "BOTTOM", 15, -8) + MiniMapBattlefieldFrame:SetFrameStrata("LOW") + MiniMapBattlefieldFrame:SetFrameLevel((overlayFrame and overlayFrame:GetFrameLevel() or 5) + 2) + end +end + +-------------------------------------------------------------------------------- +-- Update helpers +-------------------------------------------------------------------------------- +local function UpdateZoneText() + if not zoneFs then return end + local text = GetMinimapZoneText and GetMinimapZoneText() or "" + lastZoneText = text + zoneFs:SetText(text) +end + +local function SetZoneMap() + if SetMapToCurrentZone then + pcall(SetMapToCurrentZone) + end +end + +local clockTimer = 0 +local coordTimer = 0 +local zoneTimer = 0 +local lastZoneText = "" + +local function OnUpdate() + local dt = arg1 or 0 + local db = GetDB() + + -- Clock (every 1 s) + clockTimer = clockTimer + dt + if clockTimer >= 1 then + clockTimer = 0 + if db.showClock and clockFs then + local timeStr + if date then + timeStr = date("%H:%M") + else + local h, m = GetGameTime() + timeStr = string.format("%02d:%02d", h, m) + end + clockFs:SetText(timeStr) + clockFs:Show() + if clockBg then clockBg:Show() end + elseif clockFs then + clockFs:Hide() + if clockBg then clockBg:Hide() end + end + end + + -- Zone text (every 1 s) – catches late API updates missed by events + zoneTimer = zoneTimer + dt + if zoneTimer >= 1 then + zoneTimer = 0 + if zoneFs and GetMinimapZoneText then + local cur = GetMinimapZoneText() or "" + if cur ~= lastZoneText then + lastZoneText = cur + zoneFs:SetText(cur) + end + end + end + + -- Coordinates (every 0.25 s) + coordTimer = coordTimer + dt + if coordTimer >= 0.25 then + coordTimer = 0 + if db.showCoords and coordFs and GetPlayerMapPosition then + local ok, x, y = pcall(GetPlayerMapPosition, "player") + if ok and x and y and (x > 0 or y > 0) then + coordFs:SetText(string.format("%.1f, %.1f", x * 100, y * 100)) + coordFs:Show() + else + coordFs:Hide() + end + elseif coordFs then + coordFs:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Public API +-------------------------------------------------------------------------------- +function MM:Refresh() + if not container then return end + + local fs = FrameSize() + local mapDiam = math.floor(S((CIRCLE_R + 8) * 2, fs)) + + container:SetWidth(fs) + container:SetHeight(fs) + + Minimap:ClearAllPoints() + Minimap:SetPoint("CENTER", container, "TOPLEFT", + S(CIRCLE_CX, fs), -S(CIRCLE_CY, fs)) + Minimap:SetWidth(mapDiam) + Minimap:SetHeight(mapDiam) + + if zoneFs then + local style = GetCurrentStyle() + local pcy = S(PLATE_Y + PLATE_H / 2 + (style.plateY or -6), fs) + zoneFs:ClearAllPoints() + zoneFs:SetPoint("CENTER", container, "TOP", 0, -pcy) + zoneFs:SetWidth(S(PLATE_W + 60, fs)) + local tc = style.textColor or {0.22, 0.13, 0.07} + zoneFs:SetTextColor(tc[1], tc[2], tc[3]) + end + + if clockBg then + clockBg:ClearAllPoints() + clockBg:SetPoint("CENTER", container, "BOTTOM", 0, + S((TEX_SIZE - CIRCLE_CY - CIRCLE_R) / 2, fs)) + end + + if coordFs then + coordFs:ClearAllPoints() + coordFs:SetPoint("BOTTOM", Minimap, "BOTTOM", 0, 8) + end + + if overlayTex then + overlayTex:SetTexture(GetMapTexture()) + end + + UpdateZoneText() + RepositionIcons() +end + +MM.MAP_STYLES = MAP_STYLES + +-------------------------------------------------------------------------------- +-- Shield: re-apply our skin after other addons (ShaguTweaks etc.) touch Minimap +-------------------------------------------------------------------------------- +local shielded = false + +local function ShieldMinimap() + if shielded then return end + shielded = true + + -- Override any external changes to Minimap parent / position / size + if Minimap:GetParent() ~= container then + Minimap:SetParent(container) + end + + local fs = FrameSize() + local mapDiam = math.floor(S((CIRCLE_R + 8) * 2, fs)) + Minimap:ClearAllPoints() + Minimap:SetPoint("CENTER", container, "TOPLEFT", + S(CIRCLE_CX, fs), -S(CIRCLE_CY, fs)) + Minimap:SetWidth(mapDiam) + Minimap:SetHeight(mapDiam) + Minimap:SetFrameStrata("LOW") + Minimap:SetFrameLevel(2) + Minimap:Show() + + if Minimap.SetMaskTexture then + Minimap:SetMaskTexture("Textures\\MinimapMask") + end + + HideDefaultElements() + + -- Kill any border/backdrop that ShaguTweaks may have injected + local regions = { Minimap:GetRegions() } + for _, r in ipairs(regions) do + if r and r:IsObjectType("Texture") then + local tex = r.GetTexture and r:GetTexture() + if tex and type(tex) == "string" then + local low = string.lower(tex) + if string.find(low, "border") or string.find(low, "backdrop") + or string.find(low, "overlay") or string.find(low, "background") then + r:Hide() + end + end + end + end + + shielded = false +end + +function MM:Initialize() + if not Minimap then return end + + local db = GetDB() + if db.enabled == false then return end + + local ok, err = pcall(function() + -- Build first (reparents Minimap), THEN hide old chrome + BuildFrame() + HideDefaultElements() + + -- Ensure Minimap is visible after reparent + Minimap:Show() + + SetupScrollZoom() + SetupMouseHandler() + + -- Apply position from settings + ApplyPosition() + + RepositionIcons() + + -- Zone text events + SFrames:RegisterEvent("ZONE_CHANGED", function() + SetZoneMap() + UpdateZoneText() + end) + SFrames:RegisterEvent("ZONE_CHANGED_NEW_AREA", function() + SetZoneMap() + UpdateZoneText() + end) + SFrames:RegisterEvent("ZONE_CHANGED_INDOORS", function() + SetZoneMap() + UpdateZoneText() + end) + + -- Re-apply after other addons finish loading (ShaguTweaks etc.) + SFrames:RegisterEvent("PLAYER_ENTERING_WORLD", function() + pcall(ShieldMinimap) + pcall(UpdateZoneText) + end) + + -- Delayed zone text: GetMinimapZoneText() may be empty at PLAYER_LOGIN + local zoneDelay = CreateFrame("Frame") + local elapsed = 0 + zoneDelay:SetScript("OnUpdate", function() + elapsed = elapsed + (arg1 or 0) + if elapsed >= 1 then + zoneDelay:SetScript("OnUpdate", nil) + pcall(SetZoneMap) + pcall(UpdateZoneText) + end + end) + + -- Tick + container:SetScript("OnUpdate", OnUpdate) + + -- First refresh + SetZoneMap() + UpdateZoneText() + MM:Refresh() + end) + + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI Minimap error: " .. tostring(err) .. "|r") + end +end diff --git a/MinimapBuffs.lua b/MinimapBuffs.lua new file mode 100644 index 0000000..aa5cd81 --- /dev/null +++ b/MinimapBuffs.lua @@ -0,0 +1,638 @@ +SFrames.MinimapBuffs = {} + +local MB = SFrames.MinimapBuffs +local MAX_BUFFS = 32 +local MAX_DEBUFFS = 16 +local UPDATE_INTERVAL = 0.2 + +local BASE_X = -209 +local BASE_Y = -26 + +local ROUND_BACKDROP = { + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 8, edgeSize = 8, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, +} + +local function GetDB() + if not SFramesDB or type(SFramesDB.MinimapBuffs) ~= "table" then + return { + enabled = true, iconSize = 30, iconsPerRow = 8, + spacing = 2, growDirection = "LEFT", position = "TOPRIGHT", + offsetX = 0, offsetY = 0, showTimer = true, + showDebuffs = true, debuffIconSize = 30, + } + end + return SFramesDB.MinimapBuffs +end + +local function FormatBuffTime(seconds) + if not seconds or seconds <= 0 or seconds >= 99999 then + return "N/A" + end + if seconds >= 3600 then + local h = math.floor(seconds / 3600) + local m = math.floor(math.mod(seconds, 3600) / 60) + return h .. "h" .. m .. "m" + elseif seconds >= 60 then + return math.floor(seconds / 60) .. "m" + else + return math.floor(seconds) .. "s" + end +end + +local DEBUFF_TYPE_COLORS = { + Magic = { r = 0.20, g = 0.60, b = 1.00 }, + Curse = { r = 0.60, g = 0.00, b = 1.00 }, + Disease = { r = 0.60, g = 0.40, b = 0.00 }, + Poison = { r = 0.00, g = 0.60, b = 0.00 }, +} +local DEBUFF_DEFAULT_COLOR = { r = 0.80, g = 0.00, b = 0.00 } +local WEAPON_ENCHANT_COLOR = { r = 0.58, g = 0.22, b = 0.82 } + +local function HideBlizzardBuffs() + for i = 0, 23 do + local btn = _G["BuffButton" .. i] + if btn then + btn:Hide() + btn:UnregisterAllEvents() + btn.Show = function() end + end + end + for i = 1, 3 do + local te = _G["TempEnchant" .. i] + if te then + te:Hide() + te:UnregisterAllEvents() + te.Show = function() end + end + end + if BuffFrame then + BuffFrame:Hide() + BuffFrame:UnregisterAllEvents() + BuffFrame.Show = function() end + end + if TemporaryEnchantFrame then + TemporaryEnchantFrame:Hide() + TemporaryEnchantFrame:UnregisterAllEvents() + TemporaryEnchantFrame.Show = function() end + end +end + +local function ApplySlotBackdrop(btn, isBuff) + btn:SetBackdrop(ROUND_BACKDROP) + btn:SetBackdropColor(0.06, 0.06, 0.08, 0.92) + if isBuff then + btn:SetBackdropBorderColor(0.25, 0.25, 0.30, 1) + else + local c = DEBUFF_DEFAULT_COLOR + btn:SetBackdropBorderColor(c.r, c.g, c.b, 1) + end +end + +local function CreateSlot(parent, namePrefix, index, isBuff) + local db = GetDB() + local size = isBuff and (db.iconSize or 30) or (db.debuffIconSize or 30) + + local btn = CreateFrame("Button", namePrefix .. index, parent) + btn:SetWidth(size) + btn:SetHeight(size) + ApplySlotBackdrop(btn, isBuff) + + btn.icon = btn:CreateTexture(nil, "ARTWORK") + btn.icon:SetPoint("TOPLEFT", btn, "TOPLEFT", 2, -2) + btn.icon:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -2, 2) + btn.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + btn.count = SFrames:CreateFontString(btn, 10, "RIGHT") + btn.count:SetPoint("TOPRIGHT", btn, "TOPRIGHT", -1, -1) + btn.count:SetTextColor(1, 1, 1) + btn.count:SetShadowColor(0, 0, 0, 1) + btn.count:SetShadowOffset(1, -1) + + btn.timer = SFrames:CreateFontString(btn, 9, "CENTER") + btn.timer:SetPoint("BOTTOM", btn, "BOTTOM", 0, -11) + btn.timer:SetTextColor(1, 0.82, 0) + btn.timer:SetShadowColor(0, 0, 0, 1) + btn.timer:SetShadowOffset(1, -1) + + btn.isBuff = isBuff + btn:EnableMouse(true) + btn:RegisterForClicks("RightButtonUp") + + btn:SetScript("OnEnter", function() + if this._sfSimulated then + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT") + GameTooltip:AddLine(this._sfSimLabel or "Simulated", 1, 1, 1) + GameTooltip:AddLine(this._sfSimDesc or "", 0.7, 0.7, 0.7) + GameTooltip:Show() + return + end + if this._isWeaponEnchant and this._weaponSlotID then + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT") + GameTooltip:SetInventoryItem("player", this._weaponSlotID) + return + end + if this.buffIndex and this.buffIndex >= 0 then + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT") + GameTooltip:SetPlayerBuff(this.buffIndex) + end + end) + btn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + btn:SetScript("OnClick", function() + if this._sfSimulated then return end + if this._isWeaponEnchant then return end + if this.isBuff and this.buffIndex and this.buffIndex >= 0 then + CancelPlayerBuff(this.buffIndex) + end + end) + + btn.buffIndex = -1 + btn._sfSimulated = false + btn._isWeaponEnchant = false + btn._weaponSlotID = nil + btn:Hide() + return btn +end + +function MB:ApplyLayout() + if not self.buffSlots then return end + local db = GetDB() + local size = db.iconSize or 30 + local spacing = db.spacing or 2 + local perRow = db.iconsPerRow or 8 + local growLeft = (db.growDirection == "LEFT") + + for i = 1, MAX_BUFFS do + local btn = self.buffSlots[i] + btn:SetWidth(size) + btn:SetHeight(size) + btn:ClearAllPoints() + + local col = math.mod(i - 1, perRow) + local row = math.floor((i - 1) / perRow) + + local xDir = growLeft and -1 or 1 + local xOfs = col * (size + spacing) * xDir + local yOfs = -row * (size + 14 + spacing) + + local anchor = growLeft and "TOPRIGHT" or "TOPLEFT" + btn:SetPoint(anchor, self.buffContainer, anchor, xOfs, yOfs) + end + + if not self.debuffSlots then return end + local dSize = db.debuffIconSize or 30 + for i = 1, MAX_DEBUFFS do + local btn = self.debuffSlots[i] + btn:SetWidth(dSize) + btn:SetHeight(dSize) + btn:ClearAllPoints() + + local col = math.mod(i - 1, perRow) + local row = math.floor((i - 1) / perRow) + + local xDir = growLeft and -1 or 1 + local xOfs = col * (dSize + spacing) * xDir + local yOfs = -row * (dSize + 14 + spacing) + + local anchor = growLeft and "TOPRIGHT" or "TOPLEFT" + btn:SetPoint(anchor, self.debuffContainer, anchor, xOfs, yOfs) + end +end + +local function CountVisibleRows(slots, maxSlots, perRow) + local maxVisible = 0 + for i = 1, maxSlots do + if slots[i]:IsShown() then maxVisible = i end + end + if maxVisible == 0 then return 0 end + return math.floor((maxVisible - 1) / perRow) + 1 +end + +function MB:ApplyPosition() + if not self.buffContainer then return end + local db = GetDB() + local pos = db.position or "TOPRIGHT" + local x = BASE_X + (db.offsetX or 0) + local y = BASE_Y + (db.offsetY or 0) + + self.buffContainer:ClearAllPoints() + self.buffContainer:SetPoint(pos, UIParent, pos, x, y) + + self:AnchorDebuffs() +end + +function MB:AnchorDebuffs() + if not self.debuffContainer or not self.buffContainer then return end + local db = GetDB() + local size = db.iconSize or 30 + local spacing = db.spacing or 2 + local perRow = db.iconsPerRow or 8 + local rows = CountVisibleRows(self.buffSlots, MAX_BUFFS, perRow) + local rowHeight = size + 14 + spacing + local gap = 6 + + self.debuffContainer:ClearAllPoints() + self.debuffContainer:SetPoint("TOPRIGHT", self.buffContainer, "TOPRIGHT", 0, -(rows * rowHeight + gap)) +end + +local function ApplyTimerColor(btn, timeText) + if timeText == "N/A" then + btn.timer:SetTextColor(0.6, 0.6, 0.6) + return + end + local secs = nil + local _, _, hVal = string.find(timeText, "(%d+)h") + local _, _, mVal = string.find(timeText, "(%d+)m") + local _, _, sVal = string.find(timeText, "(%d+)s") + local h = tonumber(hVal) + local m = tonumber(mVal) + local s = tonumber(sVal) + if h then + secs = h * 3600 + (m or 0) * 60 + elseif m then + secs = m * 60 + elseif s then + secs = s + end + if secs and secs < 30 then + btn.timer:SetTextColor(1, 0.3, 0.3) + elseif secs and secs < 120 then + btn.timer:SetTextColor(1, 0.82, 0) + else + btn.timer:SetTextColor(0.8, 1, 0.8) + end +end + +local function SetTimerFromSeconds(btn, timeLeft, untilCancelled, showTimer) + if not showTimer then + btn.timer:Hide() + return + end + if untilCancelled == 1 or not timeLeft or timeLeft == 0 or timeLeft >= 99999 then + btn.timer:SetText("N/A") + btn.timer:SetTextColor(0.6, 0.6, 0.6) + else + btn.timer:SetText(FormatBuffTime(timeLeft)) + if timeLeft < 30 then + btn.timer:SetTextColor(1, 0.3, 0.3) + elseif timeLeft < 120 then + btn.timer:SetTextColor(1, 0.82, 0) + else + btn.timer:SetTextColor(0.8, 1, 0.8) + end + end + btn.timer:Show() +end + +function MB:UpdateBuffs() + if not self.buffSlots then return end + if self._simulating then return end + local db = GetDB() + local showTimer = db.showTimer ~= false + + local slotIdx = 0 + for i = 0, 31 do + local buffIndex, untilCancelled = GetPlayerBuff(i, "HELPFUL") + if buffIndex and buffIndex >= 0 then + slotIdx = slotIdx + 1 + if slotIdx > MAX_BUFFS then break end + + local btn = self.buffSlots[slotIdx] + local texture = GetPlayerBuffTexture(buffIndex) + if texture then + btn.icon:SetTexture(texture) + btn.buffIndex = buffIndex + btn._sfSimulated = false + btn._isWeaponEnchant = false + btn._weaponSlotID = nil + + local apps = GetPlayerBuffApplications(buffIndex) + if apps and apps > 1 then + btn.count:SetText(apps) + btn.count:Show() + else + btn.count:SetText("") + btn.count:Hide() + end + + local timeLeft = GetPlayerBuffTimeLeft(buffIndex) + SetTimerFromSeconds(btn, timeLeft, untilCancelled, showTimer) + + btn:SetBackdropBorderColor(0.25, 0.25, 0.30, 1) + btn:Show() + else + btn:Hide() + btn.buffIndex = -1 + btn._isWeaponEnchant = false + btn._weaponSlotID = nil + end + end + end + + local hasMainHandEnchant, mainHandExpiration, mainHandCharges, + hasOffHandEnchant, offHandExpiration, offHandCharges = GetWeaponEnchantInfo() + + if hasMainHandEnchant then + slotIdx = slotIdx + 1 + if slotIdx <= MAX_BUFFS then + local btn = self.buffSlots[slotIdx] + local texture = GetInventoryItemTexture("player", 16) + if texture then + btn.icon:SetTexture(texture) + btn.buffIndex = -1 + btn._sfSimulated = false + btn._isWeaponEnchant = true + btn._weaponSlotID = 16 + + if mainHandCharges and mainHandCharges > 0 then + btn.count:SetText(mainHandCharges) + btn.count:Show() + else + btn.count:SetText("") + btn.count:Hide() + end + + local timeLeft = mainHandExpiration and (mainHandExpiration / 1000) or 0 + SetTimerFromSeconds(btn, timeLeft, 0, showTimer) + + btn:SetBackdropBorderColor(WEAPON_ENCHANT_COLOR.r, WEAPON_ENCHANT_COLOR.g, WEAPON_ENCHANT_COLOR.b, 1) + btn:Show() + end + end + end + + if hasOffHandEnchant then + slotIdx = slotIdx + 1 + if slotIdx <= MAX_BUFFS then + local btn = self.buffSlots[slotIdx] + local texture = GetInventoryItemTexture("player", 17) + if texture then + btn.icon:SetTexture(texture) + btn.buffIndex = -1 + btn._sfSimulated = false + btn._isWeaponEnchant = true + btn._weaponSlotID = 17 + + if offHandCharges and offHandCharges > 0 then + btn.count:SetText(offHandCharges) + btn.count:Show() + else + btn.count:SetText("") + btn.count:Hide() + end + + local timeLeft = offHandExpiration and (offHandExpiration / 1000) or 0 + SetTimerFromSeconds(btn, timeLeft, 0, showTimer) + + btn:SetBackdropBorderColor(WEAPON_ENCHANT_COLOR.r, WEAPON_ENCHANT_COLOR.g, WEAPON_ENCHANT_COLOR.b, 1) + btn:Show() + end + end + end + + for j = slotIdx + 1, MAX_BUFFS do + local btn = self.buffSlots[j] + btn:Hide() + btn.buffIndex = -1 + btn._isWeaponEnchant = false + btn._weaponSlotID = nil + end + + self:UpdateDebuffs() + self:AnchorDebuffs() +end + +function MB:UpdateDebuffs() + if not self.debuffSlots then return end + if self._simulating then return end + local db = GetDB() + local showTimer = db.showTimer ~= false + + if db.showDebuffs == false then + for i = 1, MAX_DEBUFFS do + self.debuffSlots[i]:Hide() + end + if self.debuffContainer then self.debuffContainer:Hide() end + return + end + if self.debuffContainer then self.debuffContainer:Show() end + + local slotIdx = 0 + for i = 0, 15 do + local buffIndex, untilCancelled = GetPlayerBuff(i, "HARMFUL") + if buffIndex and buffIndex >= 0 then + slotIdx = slotIdx + 1 + if slotIdx > MAX_DEBUFFS then break end + + local btn = self.debuffSlots[slotIdx] + local texture = GetPlayerBuffTexture(buffIndex) + if texture then + btn.icon:SetTexture(texture) + btn.buffIndex = buffIndex + btn._sfSimulated = false + + local apps = GetPlayerBuffApplications(buffIndex) + if apps and apps > 1 then + btn.count:SetText(apps) + btn.count:Show() + else + btn.count:SetText("") + btn.count:Hide() + end + + local timeLeft = GetPlayerBuffTimeLeft(buffIndex) + SetTimerFromSeconds(btn, timeLeft, untilCancelled, showTimer) + + local debuffType = nil + SFrames.Tooltip:ClearLines() + SFrames.Tooltip:SetPlayerBuff(buffIndex) + local dTypeStr = SFramesScanTooltipTextRight1 and SFramesScanTooltipTextRight1:GetText() + if dTypeStr and dTypeStr ~= "" then debuffType = dTypeStr end + + local c = DEBUFF_TYPE_COLORS[debuffType] or DEBUFF_DEFAULT_COLOR + btn:SetBackdropBorderColor(c.r, c.g, c.b, 1) + + btn:Show() + else + btn:Hide() + btn.buffIndex = -1 + end + end + end + + for j = slotIdx + 1, MAX_DEBUFFS do + self.debuffSlots[j]:Hide() + self.debuffSlots[j].buffIndex = -1 + end +end + +-------------------------------------------------------------------------------- +-- Simulation (2 rows each for buff & debuff) +-------------------------------------------------------------------------------- +local SIM_BUFFS = { + -- Row 1 + { tex = "Interface\\Icons\\Spell_Holy_WordFortitude", label = "Power Word: Fortitude", desc = "Stamina +54", time = "N/A" }, + { tex = "Interface\\Icons\\Spell_Shadow_AntiShadow", label = "Shadow Protection", desc = "Shadow Resistance +60", time = "N/A" }, + { tex = "Interface\\Icons\\Spell_Holy_MagicalSentry", label = "Arcane Intellect", desc = "Intellect +31", time = "42m" }, + { tex = "Interface\\Icons\\Spell_Nature_Regeneration", label = "Mark of the Wild", desc = "All stats +12", time = "38m" }, + { tex = "Interface\\Icons\\Spell_Holy_GreaterBlessingofKings", label = "Blessing of Kings", desc = "All stats +10%", time = "7m" }, + { tex = "Interface\\Icons\\Spell_Holy_PrayerOfHealing02", label = "Renew", desc = "Heals 152 over 15 sec", time = "12s" }, + { tex = "Interface\\Icons\\Spell_Holy_DivineSpirit", label = "Divine Spirit", desc = "Spirit +40", time = "N/A" }, + { tex = "Interface\\Icons\\Spell_Fire_SealOfFire", label = "Fire Shield", desc = "Fire damage absorb", time = "25m" }, + -- Row 2 + { tex = "Interface\\Icons\\Spell_Holy_PowerWordShield", label = "Power Word: Shield", desc = "Absorbs 942 damage", time = "28s" }, + { tex = "Interface\\Icons\\Spell_Nature_Lightning", label = "Lightning Shield", desc = "3 charges", time = "9m", count = 3 }, + { tex = "Interface\\Icons\\Spell_Holy_SealOfWisdom", label = "Blessing of Wisdom", desc = "MP5 +33", time = "5m" }, + { tex = "Interface\\Icons\\Spell_Nature_UndyingStrength", label = "Thorns", desc = "Nature damage on hit", time = "N/A" }, + { tex = "Interface\\Icons\\Spell_Nature_Invisibilty", label = "Innervate", desc = "Spirit +400%", time = "18s" }, + { tex = "Interface\\Icons\\Spell_Holy_PowerInfusion", label = "Power Infusion", desc = "+20% spell damage", time = "14s" }, + { tex = "Interface\\Icons\\Spell_Holy_SealOfValor", label = "Blessing of Sanctuary", desc = "Block damage reduced", time = "3m" }, + { tex = "Interface\\Icons\\Spell_Nature_EnchantArmor", label = "Nature Resistance", desc = "Nature Resistance +60", time = "1h12m" }, +} + +local SIM_DEBUFFS = { + -- Row 1 + { tex = "Interface\\Icons\\Spell_Shadow_CurseOfTounable", label = "Curse of Tongues", desc = "Casting 50% slower", time = "28s", dtype = "Curse" }, + { tex = "Interface\\Icons\\Spell_Shadow_UnholyStrength", label = "Weakened Soul", desc = "Cannot be shielded", time = "15s", dtype = "Magic" }, + { tex = "Interface\\Icons\\Ability_Creature_Disease_02", label = "Corrupted Blood", desc = "Inflicts disease damage", time = "N/A", dtype = "Disease" }, + { tex = "Interface\\Icons\\Spell_Nature_CorrosiveBreath", label = "Deadly Poison", desc = "Inflicts Nature damage", time = "8s", dtype = "Poison" }, + { tex = "Interface\\Icons\\Spell_Shadow_Possession", label = "Fear", desc = "Feared for 8 sec", time = "6s", dtype = "Magic" }, + { tex = "Interface\\Icons\\Spell_Shadow_ShadowWordPain", label = "Shadow Word: Pain", desc = "Shadow damage over time", time = "24s", dtype = "Magic" }, + { tex = "Interface\\Icons\\Spell_Shadow_AbominationExplosion", label = "Mortal Strike", desc = "Healing reduced 50%", time = "5s", dtype = nil }, + { tex = "Interface\\Icons\\Spell_Frost_FrostArmor02", label = "Frostbolt", desc = "Movement slowed 40%", time = "4s", dtype = "Magic" }, + -- Row 2 + { tex = "Interface\\Icons\\Spell_Shadow_CurseOfSargeras", label = "Curse of Agony", desc = "Shadow damage over time", time = "22s", dtype = "Curse" }, + { tex = "Interface\\Icons\\Spell_Nature_Slow", label = "Crippling Poison", desc = "Movement slowed 70%", time = "10s", dtype = "Poison" }, + { tex = "Interface\\Icons\\Spell_Shadow_CurseOfMannoroth", label = "Curse of Elements", desc = "Resistance reduced 75", time = "N/A", dtype = "Curse" }, + { tex = "Interface\\Icons\\Ability_Creature_Disease_03", label = "Devouring Plague", desc = "Disease damage + heal", time = "20s", dtype = "Disease" }, +} + +function MB:SimulateBuffs() + if not self.buffSlots or not self.debuffSlots then return end + self._simulating = true + + for i = 1, MAX_BUFFS do + local btn = self.buffSlots[i] + local sim = SIM_BUFFS[i] + if sim then + btn.icon:SetTexture(sim.tex) + btn.buffIndex = -1 + btn._sfSimulated = true + btn._isWeaponEnchant = false + btn._weaponSlotID = nil + btn._sfSimLabel = sim.label + btn._sfSimDesc = sim.desc + + btn.timer:SetText(sim.time) + ApplyTimerColor(btn, sim.time) + btn.timer:Show() + + if sim.count and sim.count > 1 then + btn.count:SetText(sim.count) + btn.count:Show() + else + btn.count:Hide() + end + + btn:SetBackdropBorderColor(0.25, 0.25, 0.30, 1) + btn:Show() + else + btn:Hide() + end + end + + for i = 1, MAX_DEBUFFS do + local btn = self.debuffSlots[i] + local sim = SIM_DEBUFFS[i] + if sim then + btn.icon:SetTexture(sim.tex) + btn.buffIndex = -1 + btn._sfSimulated = true + btn._sfSimLabel = sim.label + btn._sfSimDesc = sim.desc + + btn.timer:SetText(sim.time) + ApplyTimerColor(btn, sim.time) + btn.timer:Show() + btn.count:Hide() + + local c = DEBUFF_TYPE_COLORS[sim.dtype] or DEBUFF_DEFAULT_COLOR + btn:SetBackdropBorderColor(c.r, c.g, c.b, 1) + btn:Show() + else + btn:Hide() + end + end + + if self.debuffContainer then self.debuffContainer:Show() end + self:AnchorDebuffs() +end + +function MB:StopSimulation() + self._simulating = false + self:UpdateBuffs() +end + +function MB:Refresh() + if not self.buffContainer then return end + local db = GetDB() + if db.enabled == false then + self.buffContainer:Hide() + if self.debuffContainer then self.debuffContainer:Hide() end + return + end + self:ApplyPosition() + self:ApplyLayout() + if not self._simulating then + self:UpdateBuffs() + else + self:AnchorDebuffs() + end + self.buffContainer:Show() +end + +function MB:Initialize() + local db = GetDB() + if db.enabled == false then return end + + HideBlizzardBuffs() + + self.buffContainer = CreateFrame("Frame", "SFramesMBuffContainer", UIParent) + self.buffContainer:SetWidth(400) + self.buffContainer:SetHeight(200) + self.buffContainer:SetFrameStrata("LOW") + + self.debuffContainer = CreateFrame("Frame", "SFramesMDebuffContainer", UIParent) + self.debuffContainer:SetWidth(400) + self.debuffContainer:SetHeight(100) + self.debuffContainer:SetFrameStrata("LOW") + + self.buffSlots = {} + for i = 1, MAX_BUFFS do + self.buffSlots[i] = CreateSlot(self.buffContainer, "SFramesMBuff", i, true) + end + + self.debuffSlots = {} + for i = 1, MAX_DEBUFFS do + self.debuffSlots[i] = CreateSlot(self.debuffContainer, "SFramesMDebuff", i, false) + end + + self:ApplyPosition() + self:ApplyLayout() + + self.updater = CreateFrame("Frame", nil, self.buffContainer) + self.updater.timer = 0 + self.updater:SetScript("OnUpdate", function() + this.timer = this.timer + arg1 + if this.timer >= UPDATE_INTERVAL then + MB:UpdateBuffs() + this.timer = 0 + end + end) + + self:UpdateBuffs() +end diff --git a/MinimapButton.lua b/MinimapButton.lua new file mode 100644 index 0000000..7c1c0d6 --- /dev/null +++ b/MinimapButton.lua @@ -0,0 +1,220 @@ +-------------------------------------------------------------------------------- +-- S-Frames: Minimap quick access button (MinimapButton.lua) +-- Left Click : open /nui UI settings +-- Right Click : open /nui bag settings +-- Shift + Drag: move icon around minimap +-------------------------------------------------------------------------------- + +SFrames.MinimapButton = SFrames.MinimapButton or {} + +local button = nil +local DEFAULT_ANGLE = 225 + +local function EnsureDB() + if not SFramesDB then + SFramesDB = {} + end + + if type(SFramesDB.minimapButton) ~= "table" then + SFramesDB.minimapButton = {} + end + + local db = SFramesDB.minimapButton + if type(db.angle) ~= "number" then + db.angle = DEFAULT_ANGLE + end + if db.hide == nil then + db.hide = false + end + + return db +end + +local function SafeAtan2(y, x) + if math.atan2 then + return math.atan2(y, x) + end + + if x > 0 then + return math.atan(y / x) + elseif x < 0 and y >= 0 then + return math.atan(y / x) + math.pi + elseif x < 0 and y < 0 then + return math.atan(y / x) - math.pi + elseif x == 0 and y > 0 then + return math.pi / 2 + elseif x == 0 and y < 0 then + return -math.pi / 2 + end + + return 0 +end + +local function GetOrbitRadius() + local w = Minimap and Minimap:GetWidth() or 140 + return w / 2 + 6 +end + +local function UpdatePosition() + if not button or not Minimap then + return + end + + local db = EnsureDB() + local radius = GetOrbitRadius() + local angleRad = math.rad(db.angle or DEFAULT_ANGLE) + local x = math.cos(angleRad) * radius + local y = math.sin(angleRad) * radius + + button:ClearAllPoints() + button:SetPoint("CENTER", Minimap, "CENTER", x, y) +end + +local function StartDrag() + if not button or not Minimap then + return + end + + button:SetScript("OnUpdate", function() + local mx, my = GetCursorPosition() + local scale = Minimap:GetEffectiveScale() or 1 + if scale == 0 then scale = 1 end + + mx = mx / scale + my = my / scale + + local cx, cy = Minimap:GetCenter() + if not cx or not cy then + return + end + + local angle = math.deg(SafeAtan2(my - cy, mx - cx)) + if angle < 0 then + angle = angle + 360 + end + + EnsureDB().angle = angle + UpdatePosition() + end) +end + +local function StopDrag() + if button then + button:SetScript("OnUpdate", nil) + end +end + +function SFrames.MinimapButton:Refresh() + local db = EnsureDB() + + if not button then + return + end + + if db.hide then + button:Hide() + else + button:Show() + end + + if button.icon and SFrames.SetIcon then + SFrames:SetIcon(button.icon, "logo") + local A = SFrames.ActiveTheme + if A and A.accentLight then + button.icon:SetVertexColor(A.accentLight[1], A.accentLight[2], A.accentLight[3], 1) + end + end + + UpdatePosition() +end + +function SFrames.MinimapButton:Initialize() + if button then + self:Refresh() + return + end + + if not Minimap then + return + end + + EnsureDB() + + button = CreateFrame("Button", "SFramesMinimapButton", Minimap) + button:SetWidth(32) + button:SetHeight(32) + button:SetFrameStrata("MEDIUM") + button:SetMovable(false) + button:RegisterForClicks("LeftButtonUp", "RightButtonUp") + button:RegisterForDrag("LeftButton") + + local border = button:CreateTexture(nil, "OVERLAY") + border:SetTexture("Interface\\Minimap\\MiniMap-TrackingBorder") + border:SetWidth(56) + border:SetHeight(56) + border:SetPoint("TOPLEFT", button, "TOPLEFT", 0, 0) + + local bg = button:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\Minimap\\UI-Minimap-Background") + bg:SetWidth(20) + bg:SetHeight(20) + bg:SetPoint("CENTER", button, "CENTER", 0, 0) + + local icon = button:CreateTexture(nil, "ARTWORK") + icon:SetWidth(20) + icon:SetHeight(20) + icon:SetPoint("CENTER", button, "CENTER", 0, 0) + + local hl = button:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\Minimap\\UI-Minimap-ZoomButton-Highlight") + hl:SetBlendMode("ADD") + hl:SetWidth(31) + hl:SetHeight(31) + hl:SetPoint("CENTER", button, "CENTER", 0, 0) + + button.icon = icon + + button:SetScript("OnClick", function() + if arg1 == "RightButton" then + if SFrames.ConfigUI and SFrames.ConfigUI.Build then + SFrames.ConfigUI:Build("bags") + end + else + if SFrames.ConfigUI and SFrames.ConfigUI.Build then + SFrames.ConfigUI:Build("ui") + end + end + end) + + button:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_LEFT") + GameTooltip:ClearLines() + local A = SFrames.ActiveTheme + local tr, tg, tb = 1, 0.82, 0.94 + if A and A.accentLight then + tr, tg, tb = A.accentLight[1], A.accentLight[2], A.accentLight[3] + end + GameTooltip:AddLine("Nanami-UI", tr, tg, tb) + GameTooltip:AddLine("左键: 打开 UI 设置", 0.85, 0.85, 0.85) + GameTooltip:AddLine("右键: 打开背包设置", 0.85, 0.85, 0.85) + GameTooltip:AddLine("Shift+拖动: 移动图标", 0.6, 0.9, 0.6) + GameTooltip:Show() + end) + + button:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + button:SetScript("OnDragStart", function() + if not IsShiftKeyDown() then + return + end + StartDrag() + end) + + button:SetScript("OnDragStop", function() + StopDrag() + end) + + self:Refresh() +end diff --git a/Nanami-UI.toc b/Nanami-UI.toc new file mode 100644 index 0000000..1dd3af1 --- /dev/null +++ b/Nanami-UI.toc @@ -0,0 +1,67 @@ +## Interface: 11200 +## Title: Nanami-UI +## Notes: 现代极简猫系单位框架插件 - 喵~ (Nanami-UI) +## Author: AI Assistant +## Version: 1.0.0 +## OptionalDeps: ShaguTweaks, Blizzard_CombatLog, HealComm-1.0, DruidManaLib-1.0, !Libs, pfQuest +## SavedVariablesPerCharacter: SFramesDB +## SavedVariables: SFramesGlobalDB +Bindings.xml +Core.lua +Config.lua +Media.lua +IconMap.lua +Factory.lua +Chat.lua +Whisper.lua +ConfigUI.lua +SetupWizard.lua +GameMenu.lua +MinimapButton.lua +Minimap.lua +MapReveal.lua +WorldMap.lua +MapIcons.lua +Tweaks.lua +MinimapBuffs.lua +Focus.lua +ClassSkillData.lua +Units\Player.lua +Units\Pet.lua +Units\Target.lua +Units\ToT.lua +Units\Party.lua +Units\TalentTree.lua +SellPriceDB.lua +GearScore.lua +Tooltip.lua +Units\Raid.lua +ActionBars.lua + +Bags\Offline.lua +Bags\Sort.lua +Bags\Container.lua +Bags\Bank.lua +Bags\Features.lua +Bags\Core.lua +Merchant.lua +Trade.lua +Roll.lua +QuestUI.lua +BookUI.lua +QuestLogSkin.lua +TrainerUI.lua +TradeSkillDB.lua +TradeSkillUI.lua +CharacterPanel.lua +StatSummary.lua +InspectPanel.lua +SpellBookUI.lua +SocialUI.lua +FlightData.lua +FlightMap.lua +Mail.lua +PetStableSkin.lua +DarkmoonGuide.lua +DarkmoonMapMarker.lua +AFKScreen.lua diff --git a/PetStableSkin.lua b/PetStableSkin.lua new file mode 100644 index 0000000..ac6cd25 --- /dev/null +++ b/PetStableSkin.lua @@ -0,0 +1,565 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Pet Stable Skin (PetStableSkin.lua) +-- Skins the Blizzard PetStableFrame with Nanami-UI theme +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.PetStableSkin = {} +SFramesDB = SFramesDB or {} + +local T = SFrames.ActiveTheme +local skinned = false + +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function NukeTextures(frame, exceptions) + local regions = { frame:GetRegions() } + for _, r in ipairs(regions) do + if r:IsObjectType("Texture") and not r.sfKeep then + local rName = r:GetName() + local skip = false + if exceptions and rName then + for _, exc in ipairs(exceptions) do + if string.find(rName, exc) then + skip = true + break + end + end + end + if not skip then + r:SetTexture(nil) + r:SetAlpha(0) + r:Hide() + r.sfNuked = true + r:ClearAllPoints() + r:SetPoint("CENTER", UIParent, "CENTER", 9999, 9999) + end + end + end +end + +local function NukeChildTextures(frame) + local children = { frame:GetChildren() } + for _, child in ipairs(children) do + local cName = child:GetName() or "" + if string.find(cName, "Inset") or string.find(cName, "Bg") then + NukeTextures(child) + if child.SetBackdrop then child:SetBackdrop(nil) end + end + end +end + +local function SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +local function MarkBackdropRegions(frame) + local regions = { frame:GetRegions() } + for _, r in ipairs(regions) do + if not r.sfNuked then r.sfKeep = true end + end +end + +-------------------------------------------------------------------------------- +-- Slot styling (ItemButton-type pet slot buttons) +-------------------------------------------------------------------------------- +local function StyleSlot(btn) + if not btn or btn.sfSkinned then return end + btn.sfSkinned = true + + local bname = btn:GetName() or "" + + local normalTex = _G[bname .. "NormalTexture"] + if normalTex then normalTex:SetAlpha(0) end + + NukeTextures(btn, { "Icon", "Count" }) + + local iconTex = _G[bname .. "IconTexture"] + if iconTex then + iconTex:SetTexCoord(0.08, 0.92, 0.08, 0.92) + iconTex.sfKeep = true + end + + local bg = btn:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\Tooltips\\UI-Tooltip-Background") + bg:SetAllPoints() + bg:SetVertexColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4] or 0.8) + bg.sfKeep = true + + local border = CreateFrame("Frame", nil, btn) + border:SetPoint("TOPLEFT", btn, "TOPLEFT", -2, 2) + border:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", 2, -2) + border:SetBackdrop({ + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + border:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + btn.sfBorder = border + + local origEnter = btn:GetScript("OnEnter") + local origLeave = btn:GetScript("OnLeave") + + btn:SetScript("OnEnter", function() + if origEnter then origEnter() end + if this.sfBorder then + this.sfBorder:SetBackdropBorderColor( + T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4] or 1) + end + end) + + btn:SetScript("OnLeave", function() + if origLeave then origLeave() end + if this.sfBorder then + this.sfBorder:SetBackdropBorderColor( + T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + end) +end + +-------------------------------------------------------------------------------- +-- Close button styling +-------------------------------------------------------------------------------- +local function StyleCloseButton(btn) + if not btn or btn.sfSkinned then return end + btn.sfSkinned = true + + btn:SetWidth(22) + btn:SetHeight(22) + btn:ClearAllPoints() + btn:SetPoint("TOPRIGHT", btn:GetParent(), "TOPRIGHT", -6, -6) + + if btn.GetNormalTexture and btn:GetNormalTexture() then + btn:GetNormalTexture():SetAlpha(0) + end + if btn.GetPushedTexture and btn:GetPushedTexture() then + btn:GetPushedTexture():SetAlpha(0) + end + if btn.GetHighlightTexture and btn:GetHighlightTexture() then + btn:GetHighlightTexture():SetAlpha(0) + end + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 8, edgeSize = 8, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + + local cbg = { 0.5, 0.1, 0.1, 0.85 } + local cbd = { 0.6, 0.2, 0.2, 0.8 } + local cbgH = { 0.7, 0.15, 0.15, 1 } + local cbdH = { 0.9, 0.3, 0.3, 1 } + + btn:SetBackdropColor(cbg[1], cbg[2], cbg[3], cbg[4]) + btn:SetBackdropBorderColor(cbd[1], cbd[2], cbd[3], cbd[4]) + + local xLabel = btn:CreateFontString(nil, "OVERLAY") + xLabel:SetFont(GetFont(), 11, "OUTLINE") + xLabel:SetPoint("CENTER", 0, 0) + xLabel:SetText("X") + xLabel:SetTextColor(0.9, 0.8, 0.8) + + local origEnter = btn:GetScript("OnEnter") + local origLeave = btn:GetScript("OnLeave") + + btn:SetScript("OnEnter", function() + if origEnter then origEnter() end + this:SetBackdropColor(cbgH[1], cbgH[2], cbgH[3], cbgH[4]) + this:SetBackdropBorderColor(cbdH[1], cbdH[2], cbdH[3], cbdH[4]) + end) + + btn:SetScript("OnLeave", function() + if origLeave then origLeave() end + this:SetBackdropColor(cbg[1], cbg[2], cbg[3], cbg[4]) + this:SetBackdropBorderColor(cbd[1], cbd[2], cbd[3], cbd[4]) + end) +end + +-------------------------------------------------------------------------------- +-- UIPanelButton styling (purchase button etc.) +-------------------------------------------------------------------------------- +local function StyleActionButton(btn) + if not btn or btn.sfSkinned then return end + btn.sfSkinned = true + + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + + local bg = T.btnBg + local bd = T.btnBorder + btn:SetBackdropColor(bg[1], bg[2], bg[3], bg[4]) + btn:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4]) + + if btn.GetNormalTexture and btn:GetNormalTexture() then + btn:GetNormalTexture():SetTexture(nil) + end + if btn.GetPushedTexture and btn:GetPushedTexture() then + btn:GetPushedTexture():SetTexture(nil) + end + if btn.GetHighlightTexture and btn:GetHighlightTexture() then + btn:GetHighlightTexture():SetAlpha(0) + end + if btn.GetDisabledTexture and btn:GetDisabledTexture() then + btn:GetDisabledTexture():SetTexture(nil) + end + + local name = btn:GetName() or "" + for _, suffix in ipairs({ "Left", "Right", "Middle" }) do + local tex = _G[name .. suffix] + if tex then tex:SetAlpha(0); tex:Hide() end + end + + local fs = btn:GetFontString() + if fs then + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetTextColor(T.text[1], T.text[2], T.text[3]) + end + + local hoverBg = T.btnHoverBg + local hoverBd = T.btnHoverBd + + local origEnter = btn:GetScript("OnEnter") + local origLeave = btn:GetScript("OnLeave") + + btn:SetScript("OnEnter", function() + if origEnter then origEnter() end + this:SetBackdropColor(hoverBg[1], hoverBg[2], hoverBg[3], hoverBg[4]) + this:SetBackdropBorderColor(hoverBd[1], hoverBd[2], hoverBd[3], hoverBd[4]) + end) + + btn:SetScript("OnLeave", function() + if origLeave then origLeave() end + this:SetBackdropColor(bg[1], bg[2], bg[3], bg[4]) + this:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4]) + end) +end + +-------------------------------------------------------------------------------- +-- Style all FontStrings on a frame with our themed font +-------------------------------------------------------------------------------- +local function StyleFontStrings(frame, size, color) + local regions = { frame:GetRegions() } + local font = GetFont() + for _, r in ipairs(regions) do + if r:IsObjectType("FontString") then + r:SetFont(font, size or 11, "OUTLINE") + if color then + r:SetTextColor(color[1], color[2], color[3]) + end + end + end +end + +-------------------------------------------------------------------------------- +-- Main skin application +-------------------------------------------------------------------------------- +local function ApplySkin() + if skinned then return end + if not PetStableFrame then return end + if SFramesDB.enablePetStable == false then return end + skinned = true + + local frame = PetStableFrame + local font = GetFont() + + -- 1) Remove Blizzard decorative textures from main frame + NukeTextures(frame, { "Icon", "Food", "Diet", "Selected" }) + + -- 2) Remove textures from sub-inset frames + NukeChildTextures(frame) + + -- 3) Apply themed backdrop + SetRoundBackdrop(frame) + MarkBackdropRegions(frame) + + -- 4) Shadow for depth (tagged so auto-compact ignores it) + local shadow = CreateShadow(frame) + shadow.sfOverlay = true + + -- 5) Free drag support with position persistence + frame:SetMovable(true) + frame:EnableMouse(true) + frame:SetClampedToScreen(true) + frame:RegisterForDrag("LeftButton") + frame:SetScript("OnDragStart", function() + this:StartMoving() + end) + frame:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + local point, _, relPoint, xOfs, yOfs = this:GetPoint() + SFramesDB.petStablePos = { + point = point, relPoint = relPoint, + x = xOfs, y = yOfs, + } + end) + + -- 6) Title + local titleFS = PetStableFrameTitleText + if titleFS then + titleFS:SetFont(font, 13, "OUTLINE") + titleFS:SetTextColor(T.title[1], T.title[2], T.title[3]) + titleFS.sfKeep = true + end + + -- 7) Close button + if PetStableFrameCloseButton then + StyleCloseButton(PetStableFrameCloseButton) + end + + -- 8) Style pet info FontStrings (try various naming patterns) + local infoFS = { + "PetStablePetName", "PetStableSelectedPetName", + "PetStablePetLevel", "PetStableSelectedPetLevel", + "PetStablePetFamily", "PetStableSelectedPetFamily", + "PetStablePetLoyalty", "PetStableSelectedPetLoyalty", + } + for _, n in ipairs(infoFS) do + local fs = _G[n] + if fs and fs.SetFont then + fs:SetFont(font, 11, "OUTLINE") + fs:SetTextColor(T.text[1], T.text[2], T.text[3]) + end + end + + local labelFS = { + "PetStableDietLabel", "PetStableTypeLabel", + "PetStableNameLabel", "PetStableLevelLabel", + "PetStableLoyaltyLabel", "PetStableFamilyLabel", + "PetStableDietText", + } + for _, n in ipairs(labelFS) do + local fs = _G[n] + if fs and fs.SetFont then + fs:SetFont(font, 10, "OUTLINE") + fs:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end + end + + -- Also style any remaining FontStrings on the main frame + StyleFontStrings(frame, 11, T.text) + + -- 9) Current pet slot + if PetStableCurrentPet then + StyleSlot(PetStableCurrentPet) + end + + -- 10) Stable slots (dynamic count for Turtle WoW, check up to 20) + for i = 1, 20 do + local slot = _G["PetStableStableSlot" .. i] + if slot then + StyleSlot(slot) + end + end + -- Alternate naming pattern + for i = 1, 20 do + local slot = _G["PetStableSlot" .. i] + if slot and not slot.sfSkinned then + StyleSlot(slot) + end + end + + -- 11) Purchase button + if PetStablePurchaseButton then + StyleActionButton(PetStablePurchaseButton) + end + + -- 12) Model frame background (tagged so auto-compact ignores it) + if PetStableModel then + local modelBg = CreateFrame("Frame", nil, frame) + modelBg.sfOverlay = true + modelBg:SetPoint("TOPLEFT", PetStableModel, "TOPLEFT", -3, 3) + modelBg:SetPoint("BOTTOMRIGHT", PetStableModel, "BOTTOMRIGHT", 3, -3) + modelBg:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + modelBg:SetBackdropColor( + T.modelBg[1], T.modelBg[2], T.modelBg[3], T.modelBg[4] or 0.5) + modelBg:SetBackdropBorderColor( + T.modelBorder[1], T.modelBorder[2], T.modelBorder[3], T.modelBorder[4]) + modelBg:SetFrameLevel(math.max(0, PetStableModel:GetFrameLevel() - 1)) + end + + -- 13) Food/diet icons + for i = 1, 10 do + local food = _G["PetStableFood" .. i] or _G["PetStableDietIcon" .. i] + if food and food.SetTexCoord then + food:SetTexCoord(0.08, 0.92, 0.08, 0.92) + end + end + + -- 14) Any additional child frames that look like insets + local insets = { + "PetStableLeftInset", "PetStableBottomInset", + "PetStableRightInset", "PetStableTopInset", + } + for _, iname in ipairs(insets) do + local inset = _G[iname] + if inset then + NukeTextures(inset) + if inset.SetBackdrop then inset:SetBackdrop(nil) end + end + end + + -- 14b) Aggressive cleanup: clear backdrops/textures on ALL non-essential children + local knownFrames = {} + if PetStableModel then knownFrames[PetStableModel] = true end + if PetStableFrameCloseButton then knownFrames[PetStableFrameCloseButton] = true end + if PetStablePurchaseButton then knownFrames[PetStablePurchaseButton] = true end + if PetStableCurrentPet then knownFrames[PetStableCurrentPet] = true end + for si = 1, 20 do + local ss = _G["PetStableStableSlot" .. si] + if ss then knownFrames[ss] = true end + local ps = _G["PetStableSlot" .. si] + if ps then knownFrames[ps] = true end + end + local allCh = { frame:GetChildren() } + for _, child in ipairs(allCh) do + if not knownFrames[child] and not child.sfSkinned + and not child.sfOverlay and not child.sfBorder then + NukeTextures(child) + if child.SetBackdrop then child:SetBackdrop(nil) end + local subCh = { child:GetChildren() } + for _, sc in ipairs(subCh) do + NukeTextures(sc) + if sc.SetBackdrop then sc:SetBackdrop(nil) end + end + end + end + + -- 15) Auto-compact: measure left padding, then apply uniformly to right & bottom + local frameTop = frame:GetTop() + local frameLeft = frame:GetLeft() + local frameRight = frame:GetRight() + local frameBot = frame:GetBottom() + if frameTop and frameLeft and frameRight and frameBot then + local contentLeft = frameRight + local contentRight = frameLeft + local contentBot = frameTop + local function Scan(obj) + if not obj:IsShown() then return end + local l = obj.GetLeft and obj:GetLeft() + local r = obj.GetRight and obj:GetRight() + local b = obj.GetBottom and obj:GetBottom() + if l and l < contentLeft then contentLeft = l end + if r and r > contentRight then contentRight = r end + if b and b < contentBot then contentBot = b end + end + local children = { frame:GetChildren() } + for _, child in ipairs(children) do + if not child.sfOverlay and not child.sfBorder then + Scan(child) + end + end + local regions = { frame:GetRegions() } + for _, r in ipairs(regions) do + if not r.sfNuked and not r.sfKeep then + Scan(r) + end + end + -- Also scan named Blizzard content elements directly + local contentNames = { + "PetStableCurrentPet", "PetStablePurchaseButton", + "PetStableModel", "PetStableFrameCloseButton", + } + for i = 1, 20 do + table.insert(contentNames, "PetStableStableSlot" .. i) + table.insert(contentNames, "PetStableSlot" .. i) + end + for _, n in ipairs(contentNames) do + local obj = _G[n] + if obj and obj.IsShown and obj:IsShown() then Scan(obj) end + end + -- Scan visible FontStrings on the frame (they are content) + for _, r in ipairs(regions) do + if r:IsObjectType("FontString") and r:IsShown() and r:GetText() + and r:GetText() ~= "" then + local l = r:GetLeft() + local ri = r:GetRight() + local b = r:GetBottom() + if l and l < contentLeft then contentLeft = l end + if ri and ri > contentRight then contentRight = ri end + if b and b < contentBot then contentBot = b end + end + end + local leftPad = contentLeft - frameLeft + if leftPad < 4 then leftPad = 4 end + if leftPad > 16 then leftPad = 16 end + local newW = (contentRight - frameLeft) + leftPad + local newH = (frameTop - contentBot) + leftPad + if newW < frame:GetWidth() then + frame:SetWidth(newW) + end + if newH < frame:GetHeight() then + frame:SetHeight(newH) + end + end +end + +-------------------------------------------------------------------------------- +-- Restore saved position (runs every time the frame is shown) +-------------------------------------------------------------------------------- +local function RestorePosition() + if not PetStableFrame then return end + if not SFramesDB.petStablePos then return end + local pos = SFramesDB.petStablePos + PetStableFrame:ClearAllPoints() + PetStableFrame:SetPoint(pos.point, UIParent, pos.relPoint, pos.x, pos.y) +end + +-------------------------------------------------------------------------------- +-- Event-driven skin application + position restore +-------------------------------------------------------------------------------- +local eventFrame = CreateFrame("Frame") +eventFrame:RegisterEvent("PET_STABLE_SHOW") +eventFrame:SetScript("OnEvent", function() + if event == "PET_STABLE_SHOW" then + ApplySkin() + RestorePosition() + end +end) + +if PetStableFrame then + local origOnShow = PetStableFrame:GetScript("OnShow") + PetStableFrame:SetScript("OnShow", function() + if origOnShow then origOnShow() end + ApplySkin() + RestorePosition() + end) +end diff --git a/QuestLogSkin.lua b/QuestLogSkin.lua new file mode 100644 index 0000000..2cbbb3c --- /dev/null +++ b/QuestLogSkin.lua @@ -0,0 +1,1308 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Quest Log Skin (QuestLogSkin.lua) +-- Reskins the default QuestLogFrame with Nanami-UI styled interface +-- Maintains full compatibility with pfquest and other quest addons +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.QuestLogSkin = {} +local QLS = SFrames.QuestLogSkin +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme (Pink Cat-Paw) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + objectiveComplete = { 0.45, 0.90, 0.45 }, + objectiveIncomplete = { 0.85, 0.78, 0.70 }, + tagElite = { 1.0, 0.65, 0.20 }, + tagDungeon = { 0.40, 0.70, 1.0 }, + tagRaid = { 0.70, 0.45, 1.0 }, + tagPvP = { 0.90, 0.30, 0.30 }, + tagComplete = { 0.40, 0.90, 0.40 }, +}) + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local FRAME_W = 595 +local LIST_W = 250 +local DETAIL_PAD = 8 +local HEADER_H = 30 +local BOTTOM_H = 36 +local INNER_PAD = 6 +local SCROLL_W = 14 +local LIST_BTN_W = LIST_W - INNER_PAD * 2 - SCROLL_W - 4 + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local skinApplied = false + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or T.panelBg + local bd = borderColor or T.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.6) + s:SetBackdropBorderColor(0, 0, 0, 0.45) + return s +end + +local function StripTextures(frame) + if not frame then return end + local regions = { frame:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.SetTexture and not region._nanamiKeep then + local drawLayer = region.GetDrawLayer and region:GetDrawLayer() + if drawLayer == "BACKGROUND" or drawLayer == "BORDER" or drawLayer == "ARTWORK" then + region:SetTexture(nil) + region:SetAlpha(0) + region:Hide() + end + end + end +end + +local function StripAllTextures(frame) + if not frame then return end + local regions = { frame:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.SetTexture and not region._nanamiKeep then + region:SetTexture(nil) + region:SetAlpha(0) + region:Hide() + end + end +end + +local function StripNormalTexture(btn) + if not btn or not btn.GetNormalTexture then return end + local nt = btn:GetNormalTexture() + if nt then nt:SetTexture(nil); nt:SetAlpha(0) end +end + +local function StripPushedTexture(btn) + if not btn or not btn.GetPushedTexture then return end + local pt = btn:GetPushedTexture() + if pt then pt:SetTexture(nil); pt:SetAlpha(0) end +end + +local function StripHighlightTexture(btn) + if not btn or not btn.GetHighlightTexture then return end + local ht = btn:GetHighlightTexture() + if ht then ht:SetTexture(nil); ht:SetAlpha(0) end +end + +local function StripDisabledTexture(btn) + if not btn or not btn.GetDisabledTexture then return end + local dt = btn:GetDisabledTexture() + if dt then dt:SetTexture(nil); dt:SetAlpha(0) end +end + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, [5] = { 1, 0.5, 0 }, +} + +local LINK_QUALITY_MAP = { + ["9d9d9d"] = 0, ["ffffff"] = 1, ["1eff00"] = 2, + ["0070dd"] = 3, ["a335ee"] = 4, ["ff8000"] = 5, + ["e6cc80"] = 6, +} + +local function QualityFromLink(link) + if not link then return nil end + local _, _, hex = string.find(link, "|c(%x%x%x%x%x%x%x%x)|") + if hex and string.len(hex) == 8 then + local color = string.lower(string.sub(hex, 3, 8)) + return LINK_QUALITY_MAP[color] + end + return nil +end + +local function GetQuestGreenRange() + local level = UnitLevel("player") or 60 + if level <= 5 then return 0 end + if level <= 39 then return math.floor(level / 10) + 5 end + return math.floor(level / 5) + 1 + 8 +end + +local function GetDiffColor(level) + local pLvl = UnitLevel("player") or 60 + local diff = (level or pLvl) - pLvl + if diff >= 5 then return 1, 0.10, 0.10 + elseif diff >= 3 then return 1, 0.50, 0.25 + elseif diff >= -2 then return 1, 1, 0 + elseif diff >= -GetQuestGreenRange() then return 0.25, 0.75, 0.25 + else return 0.50, 0.50, 0.50 + end +end + +-------------------------------------------------------------------------------- +-- Scrollbar Skinning +-------------------------------------------------------------------------------- +local function SkinScrollBar(scrollBarName) + local sb = _G[scrollBarName] + if not sb then return end + StripAllTextures(sb) + + local track = sb:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetVertexColor(T.scrollTrack[1], T.scrollTrack[2], T.scrollTrack[3], T.scrollTrack[4]) + track:SetWidth(6) + track:SetPoint("TOP", sb, "TOP", 0, -16) + track:SetPoint("BOTTOM", sb, "BOTTOM", 0, 16) + + local thumb = sb:GetThumbTexture() + if thumb then + thumb:SetTexture("Interface\\Buttons\\WHITE8X8") + thumb:SetVertexColor(T.scrollThumb[1], T.scrollThumb[2], T.scrollThumb[3], T.scrollThumb[4]) + thumb:SetWidth(6) + thumb:SetHeight(40) + end + + for _, suffix in ipairs({"ScrollUpButton", "ScrollDownButton"}) do + local b = _G[scrollBarName .. suffix] + if b then + StripAllTextures(b) + StripNormalTexture(b) + StripPushedTexture(b) + StripDisabledTexture(b) + StripHighlightTexture(b) + b:SetWidth(6) + b:SetHeight(6) + end + end +end + +-------------------------------------------------------------------------------- +-- Action Button Skinning +-------------------------------------------------------------------------------- +local btnDisabledBg = { 0.08, 0.04, 0.06, 0.60 } +local btnDisabledBd = { 0.22, 0.14, 0.18, 0.40 } +local btnDisabledText = { 0.35, 0.25, 0.30 } + +local function RefreshButtonDisabledLook(btn) + if not btn then return end + local disabled = false + if btn.IsEnabled then + local ok, result = pcall(btn.IsEnabled, btn) + if ok then disabled = not result end + end + if disabled then + SetRoundBackdrop(btn, btnDisabledBg, btnDisabledBd) + if btn.GetFontString then + local fs = btn:GetFontString() + if fs then fs:SetTextColor(btnDisabledText[1], btnDisabledText[2], btnDisabledText[3]) end + end + else + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + if btn.GetFontString then + local fs = btn:GetFontString() + if fs then fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) end + end + end +end + +local function SkinActionButton(btn) + if not btn or btn._nanamiActionSkinned then return end + btn._nanamiActionSkinned = true + StripAllTextures(btn) + StripNormalTexture(btn) + StripPushedTexture(btn) + StripHighlightTexture(btn) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + + if btn.GetFontString then + local fs = btn:GetFontString() + if fs then + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end + + local origEnter = btn:GetScript("OnEnter") + btn:SetScript("OnEnter", function() + local disabled = false + if this.IsEnabled then + local ok, r = pcall(this.IsEnabled, this) + if ok then disabled = not r end + end + if disabled then + if origEnter then origEnter() end + return + end + SetRoundBackdrop(this, T.btnHoverBg, T.btnHoverBd) + if this.GetFontString then + local tfs = this:GetFontString() + if tfs then tfs:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end + end + if origEnter then origEnter() end + end) + local origLeave = btn:GetScript("OnLeave") + btn:SetScript("OnLeave", function() + local disabled = false + if this.IsEnabled then + local ok, r = pcall(this.IsEnabled, this) + if ok then disabled = not r end + end + if disabled then + RefreshButtonDisabledLook(this) + if origLeave then origLeave() end + return + end + SetRoundBackdrop(this, T.btnBg, T.btnBorder) + if this.GetFontString then + local tfs = this:GetFontString() + if tfs then tfs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) end + end + if origLeave then origLeave() end + end) + btn:SetScript("OnMouseDown", function() + local disabled = false + if this.IsEnabled then + local ok, r = pcall(this.IsEnabled, this) + if ok then disabled = not r end + end + if disabled then return end + SetRoundBackdrop(this, T.btnDownBg, T.btnBorder) + end) + btn:SetScript("OnMouseUp", function() + local disabled = false + if this.IsEnabled then + local ok, r = pcall(this.IsEnabled, this) + if ok then disabled = not r end + end + if disabled then return end + SetRoundBackdrop(this, T.btnHoverBg, T.btnHoverBd) + end) +end + +-------------------------------------------------------------------------------- +-- Reward Item Skinning +-------------------------------------------------------------------------------- +local function SkinRewardItem(btn) + if not btn or btn._nanamiSkinned then return end + btn._nanamiSkinned = true + + local bname = btn:GetName() or "" + + local iconTex = _G[bname .. "IconTexture"] + if iconTex then iconTex._nanamiKeep = true end + + StripAllTextures(btn) + StripNormalTexture(btn) + SetRoundBackdrop(btn, T.rewardBg, T.rewardBorder) + + if iconTex then + iconTex:SetTexCoord(0.08, 0.92, 0.08, 0.92) + iconTex:ClearAllPoints() + iconTex:SetPoint("LEFT", btn, "LEFT", 4, 0) + iconTex:SetWidth(30); iconTex:SetHeight(30) + iconTex:SetAlpha(1) + iconTex:Show() + end + local nameFrame = _G[bname .. "NameFrame"] + if nameFrame then nameFrame:SetTexture(nil); nameFrame:SetAlpha(0) end + local nameText = _G[bname .. "Name"] + if nameText then + nameText:SetFont(GetFont(), 11, "OUTLINE") + nameText:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + local countText = _G[bname .. "Count"] + if countText then countText:SetFont(GetFont(), 10, "OUTLINE") end +end + +-------------------------------------------------------------------------------- +-- Quest Log Item Quality Coloring +-------------------------------------------------------------------------------- +local function GetQuestLogItemQuality(itemType, index) + if itemType == "choice" and GetQuestLogChoiceInfo then + local ok, name, tex, num, q, usable = pcall(GetQuestLogChoiceInfo, index) + if ok and q and q > 0 then return q end + elseif itemType == "reward" and GetQuestLogRewardInfo then + local ok, name, tex, num, q, usable = pcall(GetQuestLogRewardInfo, index) + if ok and q and q > 0 then return q end + end + if GetQuestLogItemLink then + local ok, link = pcall(GetQuestLogItemLink, itemType, index) + if ok and link then + local q = QualityFromLink(link) + if q then return q end + if GetItemInfo then + local ok2, _, _, iq = pcall(GetItemInfo, link) + if ok2 and iq and iq > 0 then return iq end + end + end + end + return nil +end + +local function ApplyQuestLogItemQuality() + local choiceIdx = 0 + local rewardIdx = 0 + for i = 1, 10 do + local item = _G["QuestLogItem" .. i] + if not item or not item:IsVisible() then break end + + local bname = item:GetName() or "" + local nameText = _G[bname .. "Name"] + if not nameText then break end + + local itemType = item.type + local idx = 0 + if itemType == "choice" then + choiceIdx = choiceIdx + 1 + idx = choiceIdx + elseif itemType == "reward" then + rewardIdx = rewardIdx + 1 + idx = rewardIdx + else + break + end + + local quality = GetQuestLogItemQuality(itemType, idx) + local qc = quality and QUALITY_COLORS[quality] + if qc and quality >= 2 then + nameText:SetTextColor(qc[1], qc[2], qc[3]) + item:SetBackdropBorderColor(qc[1], qc[2], qc[3], 0.8) + elseif qc and quality == 1 then + nameText:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + item:SetBackdropBorderColor(T.rewardBorder[1], T.rewardBorder[2], T.rewardBorder[3], T.rewardBorder[4]) + else + nameText:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + item:SetBackdropBorderColor(T.rewardBorder[1], T.rewardBorder[2], T.rewardBorder[3], T.rewardBorder[4]) + end + end +end + +-------------------------------------------------------------------------------- +-- Tag Color for elite/dungeon/raid/pvp/complete +-------------------------------------------------------------------------------- +local function GetTagColor(tagText) + if not tagText or tagText == "" then return nil end + local t = string.lower(tagText) + if string.find(t, "elite") or string.find(t, "精英") then + return T.tagElite + elseif string.find(t, "dungeon") or string.find(t, "地下城") then + return T.tagDungeon + elseif string.find(t, "raid") or string.find(t, "团队") then + return T.tagRaid + elseif string.find(t, "pvp") then + return T.tagPvP + elseif string.find(t, "complete") or string.find(t, "完成") then + return T.tagComplete + end + return T.dimText +end + +-------------------------------------------------------------------------------- +-- Main Frame Skinning +-------------------------------------------------------------------------------- +local function SkinMainFrame() + local f = QuestLogFrame + if not f then return end + + -- Resize frame to remove excess right-side space + f:SetWidth(FRAME_W) + + StripTextures(f) + SetRoundBackdrop(f, T.panelBg, T.panelBorder) + CreateShadow(f) + + for _, pName in ipairs({"QuestLogFramePortrait", "QuestLogPortrait"}) do + local p = _G[pName] + if p then p:SetTexture(nil); p:SetAlpha(0); p:Hide() end + end + + local titleText = QuestLogTitleText + if titleText then + titleText:SetFont(GetFont(), 14, "OUTLINE") + titleText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + titleText:ClearAllPoints() + titleText:SetPoint("LEFT", f, "TOPLEFT", 14, -15) + end + + -- Quest count to top-right + local questCount = QuestLogQuestCount + if questCount then + questCount:SetFont(GetFont(), 11, "OUTLINE") + questCount:SetTextColor(T.countText[1], T.countText[2], T.countText[3]) + questCount:ClearAllPoints() + questCount:SetPoint("RIGHT", f, "TOPRIGHT", -30, -15) + end + + local closeBtn = _G["QuestLogFrameCloseButton"] + if closeBtn then + closeBtn:ClearAllPoints() + closeBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -2, -2) + closeBtn:SetWidth(22); closeBtn:SetHeight(22) + closeBtn:SetFrameLevel(f:GetFrameLevel() + 10) + end + + -- Make frame draggable and respond to ESC + if UIPanelWindows then + UIPanelWindows["QuestLogFrame"] = nil + end + table.insert(UISpecialFrames, "QuestLogFrame") + f:SetMovable(true) + f:EnableMouse(true) + f:SetClampedToScreen(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + -- Header separator + local sep = f:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", f, "TOPLEFT", 8, -HEADER_H) + sep:SetPoint("TOPRIGHT", f, "TOPRIGHT", -8, -HEADER_H) + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + + -- Bottom separator + local bsep = f:CreateTexture(nil, "ARTWORK") + bsep:SetTexture("Interface\\Buttons\\WHITE8X8") + bsep:SetHeight(1) + bsep:SetPoint("BOTTOMLEFT", f, "BOTTOMLEFT", 8, BOTTOM_H) + bsep:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -8, BOTTOM_H) + bsep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + + -- Detect and preserve Turtle WoW translate / ? buttons + -- Also find any unrecognized buttons and ensure they remain visible + local knownPrefixes = { + "QuestLogTitle", "QuestLogFrame", "QuestLogCollapseAll", + "QuestLogTrack", "QuestFramePush", "pfQuest", + } + local function isKnownButton(child) + if child._nanamiPfSkinned or child._nanamiBottomBtn + or child._nanamiActionSkinned then return true end + local cname = child:GetName() or "" + if cname == "" then return false end + for ki = 1, table.getn(knownPrefixes) do + if string.find(cname, knownPrefixes[ki]) then return true end + end + return false + end + + f._skinExtraButtons = function() + local searchParents = {} + table.insert(searchParents, f) + local dc = _G["QuestLogDetailScrollFrameChildFrame"] + or _G["QuestLogDetailScrollFrameChild"] + if dc then table.insert(searchParents, dc) end + local ds = QuestLogDetailScrollFrame + if ds then table.insert(searchParents, ds) end + + local detailLevel = (f._nanamiDetailPanel and f._nanamiDetailPanel:GetFrameLevel()) or (f:GetFrameLevel() + 2) + + for pi = 1, table.getn(searchParents) do + local parent = searchParents[pi] + if parent and parent.GetChildren then + local children = { parent:GetChildren() } + for ci = 1, table.getn(children) do + local child = children[ci] + if child and child.GetObjectType then + local objType = child:GetObjectType() + if objType == "Button" and not isKnownButton(child) then + -- Ensure button is visible above detailPanel + if child:GetFrameLevel() <= detailLevel then + child:SetFrameLevel(detailLevel + 3) + end + child:Show() + SkinPfQuestButton(child) + end + end + end + end + end + + -- Also search for globally named Turtle WoW translate buttons + for _, gname in ipairs({ + "QuestTranslateButton", "QuestLogTranslateButton", + "QuestInfoTranslateButton", "TurtleTranslateButton", + "QuestTranslationButton", "QuestHelpButton", + }) do + local gb = _G[gname] + if gb and gb.GetObjectType and not gb._nanamiPfSkinned then + gb:Show() + if gb:GetFrameLevel() <= detailLevel then + gb:SetFrameLevel(detailLevel + 3) + end + SkinPfQuestButton(gb) + end + end + end +end + +-------------------------------------------------------------------------------- +-- Quest List Panel Skinning +-------------------------------------------------------------------------------- +local function SkinQuestList() + local listFrame = QuestLogListScrollFrame + if not listFrame then return end + local f = QuestLogFrame + + local listPanel = CreateFrame("Frame", nil, f) + listPanel:SetPoint("TOPLEFT", f, "TOPLEFT", DETAIL_PAD, -(HEADER_H + 2)) + listPanel:SetPoint("BOTTOMLEFT", f, "BOTTOMLEFT", DETAIL_PAD, BOTTOM_H + 2) + listPanel:SetWidth(LIST_W) + SetRoundBackdrop(listPanel, T.listBg, T.listBorder) + listPanel:SetFrameLevel(f:GetFrameLevel() + 1) + f._nanamiListPanel = listPanel + + listFrame:ClearAllPoints() + listFrame:SetPoint("TOPLEFT", listPanel, "TOPLEFT", INNER_PAD, -INNER_PAD) + listFrame:SetPoint("BOTTOMRIGHT", listPanel, "BOTTOMRIGHT", -(SCROLL_W + INNER_PAD), 4) + listFrame:SetWidth(LIST_W - INNER_PAD * 2 - SCROLL_W) + + StripTextures(listFrame) + SkinScrollBar("QuestLogListScrollFrameScrollBar") + + local collapseAll = QuestLogCollapseAllButton + if collapseAll then + StripNormalTexture(collapseAll) + StripPushedTexture(collapseAll) + StripHighlightTexture(collapseAll) + end + + local highlight = _G["QuestLogHighlightFrame"] + if highlight then + StripAllTextures(highlight) + highlight:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + tile = true, tileSize = 16, + insets = { left = 0, right = 0, top = 0, bottom = 0 }, + }) + highlight:SetBackdropColor(T.questSelected[1], T.questSelected[2], T.questSelected[3], T.questSelected[4]) + + local hlBar = highlight:CreateTexture(nil, "OVERLAY") + hlBar:SetTexture("Interface\\Buttons\\WHITE8X8") + hlBar:SetWidth(3) + hlBar:SetPoint("TOPLEFT", highlight, "TOPLEFT", 0, 0) + hlBar:SetPoint("BOTTOMLEFT", highlight, "BOTTOMLEFT", 0, 0) + hlBar:SetVertexColor(T.questSelBar[1], T.questSelBar[2], T.questSelBar[3], T.questSelBar[4]) + end +end + +-------------------------------------------------------------------------------- +-- Quest Detail Panel Skinning +-------------------------------------------------------------------------------- +local function SkinQuestDetail() + local detailFrame = QuestLogDetailScrollFrame + if not detailFrame then return end + local f = QuestLogFrame + + local DETAIL_W = FRAME_W - LIST_W - DETAIL_PAD * 2 - 4 + + local detailPanel = CreateFrame("Frame", nil, f) + detailPanel:SetPoint("TOPLEFT", f, "TOPLEFT", LIST_W + DETAIL_PAD + 4, -(HEADER_H + 2)) + detailPanel:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -DETAIL_PAD, BOTTOM_H + 2) + SetRoundBackdrop(detailPanel, T.detailBg, T.detailBorder) + detailPanel:SetFrameLevel(f:GetFrameLevel() + 1) + f._nanamiDetailPanel = detailPanel + + detailFrame:ClearAllPoints() + detailFrame:SetPoint("TOPLEFT", detailPanel, "TOPLEFT", INNER_PAD, -INNER_PAD) + detailFrame:SetPoint("BOTTOMRIGHT", detailPanel, "BOTTOMRIGHT", -(SCROLL_W + INNER_PAD), INNER_PAD) + detailFrame:SetFrameLevel(detailPanel:GetFrameLevel() + 2) + + StripTextures(detailFrame) + SkinScrollBar("QuestLogDetailScrollFrameScrollBar") + + local contentW = DETAIL_W - INNER_PAD * 2 - SCROLL_W - 6 + local detailChild = _G["QuestLogDetailScrollFrameChildFrame"] + or _G["QuestLogDetailScrollFrameChild"] + if detailChild and contentW > 100 then + detailChild:SetWidth(contentW) + end + + if QuestLogNoQuestsText then + QuestLogNoQuestsText:SetFont(GetFont(), 13) + QuestLogNoQuestsText:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end + if EmptyQuestLogFrame then + StripTextures(EmptyQuestLogFrame) + local et = _G["EmptyQuestLogFrameText"] + if et then + et:SetFont(GetFont(), 13) + et:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end + end +end + +-------------------------------------------------------------------------------- +-- Bottom Buttons Skinning +-------------------------------------------------------------------------------- +local function SkinBottomButtons() + local f = QuestLogFrame + local btnW = math.floor((FRAME_W - 40) / 3) + if btnW > 120 then btnW = 120 end + if btnW < 80 then btnW = 80 end + + local abandonBtn = QuestLogFrameAbandonButton + if abandonBtn then + SkinActionButton(abandonBtn) + abandonBtn:SetHeight(24) + abandonBtn:ClearAllPoints() + abandonBtn:SetPoint("BOTTOMLEFT", f, "BOTTOMLEFT", 12, 6) + abandonBtn:SetWidth(btnW) + abandonBtn._nanamiBottomBtn = true + end + + local shareBtn = _G["QuestLogFramePushQuestButton"] or _G["QuestFramePushQuestButton"] + if shareBtn then + SkinActionButton(shareBtn) + shareBtn:SetHeight(24) + shareBtn:ClearAllPoints() + shareBtn:SetPoint("BOTTOM", f, "BOTTOM", 0, 6) + shareBtn:SetWidth(btnW) + shareBtn._nanamiBottomBtn = true + shareBtn._nanamiOrigText = nil + if shareBtn.GetFontString then + local fs = shareBtn:GetFontString() + if fs then shareBtn._nanamiOrigText = fs:GetText() end + end + + shareBtn._nanamiRefreshShare = function(sb) + if not sb then return end + local canShare = GetQuestLogPushable and GetQuestLogPushable() + local fs = sb.GetFontString and sb:GetFontString() + if not canShare then + SetRoundBackdrop(sb, btnDisabledBg, btnDisabledBd) + if fs then + fs:SetTextColor(btnDisabledText[1], btnDisabledText[2], btnDisabledText[3]) + end + else + SetRoundBackdrop(sb, T.btnBg, T.btnBorder) + if fs then + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end + end + + shareBtn._nanamiRefreshShare(shareBtn) + + local sharePoll = CreateFrame("Frame", nil, shareBtn) + sharePoll._t = 0 + sharePoll:SetScript("OnUpdate", function() + this._t = (this._t or 0) + (arg1 or 0) + if this._t < 1.0 then return end + this._t = 0 + local sb = this:GetParent() + if sb and sb._nanamiRefreshShare then sb._nanamiRefreshShare(sb) end + end) + end + + -- Search for exit button by multiple names and text content + local exitBtn = nil + for _, eName in ipairs({ + "QuestLogFrameExitButton", "QuestLogExitButton", + "QuestLogCancelButton", "QuestLogCloseButton", + "QuestLogFrameCancelButton", + }) do + if _G[eName] then exitBtn = _G[eName]; break end + end + + -- Fallback: find any bottom button with "退出"/"Exit"/"Close" text + if not exitBtn then + local children = { f:GetChildren() } + for ci = 1, table.getn(children) do + local child = children[ci] + if child and child.GetObjectType and child:GetObjectType() == "Button" + and child.GetFontString then + local cfs = child:GetFontString() + if cfs then + local txt = cfs:GetText() + if txt and (string.find(txt, "退出") or string.find(txt, "Exit") + or string.find(txt, "Close") or string.find(txt, "关闭")) then + exitBtn = child + break + end + end + end + end + end + + if exitBtn then + SkinActionButton(exitBtn) + exitBtn:SetHeight(24) + exitBtn:ClearAllPoints() + exitBtn:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -12, 6) + exitBtn:SetWidth(btnW) + exitBtn._nanamiBottomBtn = true + end + + -- Also skin any other unskinned bottom-area buttons (Turtle WoW additions) + local children = { f:GetChildren() } + for ci = 1, table.getn(children) do + local child = children[ci] + if child and child.GetObjectType and child:GetObjectType() == "Button" + and not child._nanamiBottomBtn and not child._nanamiPfSkinned + and not child._nanamiActionSkinned then + -- Check if this button is near the bottom of the frame + local point = child.GetPoint and child:GetPoint() + if point and (point == "BOTTOMLEFT" or point == "BOTTOMRIGHT" or point == "BOTTOM") then + if child.GetFontString then + local cfs = child:GetFontString() + if cfs then + local txt = cfs:GetText() + if txt and txt ~= "" then + SkinActionButton(child) + child._nanamiBottomBtn = true + end + end + end + end + end + end +end + +-------------------------------------------------------------------------------- +-- Quest List Entries Restyling +-------------------------------------------------------------------------------- +local function GetHighlightAnchorBtn() + local hl = _G["QuestLogHighlightFrame"] + if hl and hl.IsVisible and hl:IsVisible() and hl.GetPoint then + local ok, _, anchor = pcall(hl.GetPoint, hl) + if ok and anchor then return anchor end + end + return nil +end + +local function StyleQuestListEntries() + local numEntries, numQuests = 0, 0 + if GetNumQuestLogEntries then + numEntries, numQuests = GetNumQuestLogEntries() + end + local questsDisplayed = QUESTS_DISPLAYED or 22 + local hlBtn = GetHighlightAnchorBtn() + + for i = 1, questsDisplayed do + local btn = _G["QuestLogTitle" .. i] + if not btn then break end + + if not btn._nanamiSkinned then + StripPushedTexture(btn) + + local nt = _G["QuestLogTitle" .. i .. "NormalText"] + if nt then nt:SetFont(GetFont(), 11) end + local tg = _G["QuestLogTitle" .. i .. "Tag"] + if tg then tg:SetFont(GetFont(), 10, "OUTLINE") end + + local origHL = btn:GetHighlightTexture() + if origHL then + origHL:SetTexture("Interface\\Buttons\\WHITE8X8") + origHL:SetVertexColor(T.questHover[1], T.questHover[2], T.questHover[3], T.questHover[4]) + origHL:SetAllPoints(btn) + origHL:SetBlendMode("ADD") + end + + btn._nanamiCollapse = btn:CreateFontString(nil, "OVERLAY") + btn._nanamiCollapse:SetFont(GetFont(), 12, "OUTLINE") + btn._nanamiCollapse:SetPoint("LEFT", btn, "LEFT", 2, 0) + btn._nanamiCollapse:SetTextColor(T.collapseIcon[1], T.collapseIcon[2], T.collapseIcon[3]) + btn._nanamiCollapse:Hide() + + btn._nanamiTrackBar = btn:CreateTexture(nil, "OVERLAY") + btn._nanamiTrackBar:SetTexture("Interface\\Buttons\\WHITE8X8") + btn._nanamiTrackBar:SetWidth(3) + btn._nanamiTrackBar:SetPoint("TOPRIGHT", btn, "TOPRIGHT", 0, 0) + btn._nanamiTrackBar:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", 0, 0) + btn._nanamiTrackBar:SetVertexColor(T.trackBar[1], T.trackBar[2], T.trackBar[3], 1) + btn._nanamiTrackBar:Hide() + + btn._nanamiTrackLabel = btn:CreateFontString(nil, "OVERLAY") + btn._nanamiTrackLabel:SetFont(GetFont(), 9, "OUTLINE") + btn._nanamiTrackLabel:SetPoint("RIGHT", btn, "RIGHT", -6, 0) + btn._nanamiTrackLabel:SetTextColor(T.trackBar[1], T.trackBar[2], T.trackBar[3], 1) + btn._nanamiTrackLabel:Hide() + + local gmFS = _G["QuestLogTitle" .. i .. "GroupMates"] + if gmFS and gmFS.SetFont then + gmFS:SetFont(GetFont(), 10, "OUTLINE") + end + + btn._nanamiSkinned = true + end + + btn:SetWidth(LIST_BTN_W) + + local normalText = _G["QuestLogTitle" .. i .. "NormalText"] + local tagFS = _G["QuestLogTitle" .. i .. "Tag"] + + if btn:IsVisible() and normalText then + normalText:SetWidth(LIST_BTN_W - 30) + + local questIndex = btn.questLogIndex + local isSelected = (btn == hlBtn) and not btn.isHeader + + if btn.isHeader then + normalText:SetTextColor(T.zoneHeader[1], T.zoneHeader[2], T.zoneHeader[3]) + if btn._nanamiCollapse then + local collapsed = false + if btn.IsExpanded then + collapsed = not btn:IsExpanded() + elseif btn.IsCollapsed then + collapsed = btn:IsCollapsed() + end + local ntex = btn.GetNormalTexture and btn:GetNormalTexture() + if ntex then + local tex = ntex.GetTexture and ntex:GetTexture() + if tex then + tex = string.lower(tex) + if string.find(tex, "plus") or string.find(tex, "expand") then + collapsed = true + elseif string.find(tex, "minus") or string.find(tex, "collapse") then + collapsed = false + end + end + ntex:SetAlpha(0) + end + btn._nanamiCollapse:SetText(collapsed and "+" or "-") + btn._nanamiCollapse:Show() + end + if btn._nanamiTrackBar then btn._nanamiTrackBar:Hide() end + if btn._nanamiTrackLabel then btn._nanamiTrackLabel:Hide() end + if tagFS then tagFS:SetText("") end + else + local diffR, diffG, diffB + if questIndex and GetQuestLogTitle then + local _, level = GetQuestLogTitle(questIndex) + if level and level > 0 then + if GetQuestDifficultyColor then + local c = GetQuestDifficultyColor(level) + if c then diffR, diffG, diffB = c.r, c.g, c.b end + end + if not diffR then + diffR, diffG, diffB = GetDiffColor(level) + end + end + end + if diffR then + normalText:SetTextColor(diffR, diffG, diffB) + elseif btn.GetTextColor then + local cr, cg, cb = btn:GetTextColor() + if cr then normalText:SetTextColor(cr, cg, cb) end + end + + if isSelected then + normalText:SetTextColor(1, 1, 1) + end + + if btn._nanamiCollapse then btn._nanamiCollapse:Hide() end + + local check = _G["QuestLogTitle" .. i .. "Check"] + local isTracked = check and check.IsVisible and check:IsVisible() + if btn._nanamiTrackBar then + if isTracked then btn._nanamiTrackBar:Show() else btn._nanamiTrackBar:Hide() end + end + if btn._nanamiTrackLabel then btn._nanamiTrackLabel:Hide() end + if check then + if isTracked then + check:SetVertexColor(T.trackBar[1], T.trackBar[2], T.trackBar[3], 1) + check:SetWidth(14) + check:SetHeight(14) + else + check:SetWidth(12) + check:SetHeight(12) + end + end + + if tagFS then + local tagText = tagFS:GetText() + if tagText and tagText ~= "" then + if isSelected then + tagFS:SetTextColor(1, 1, 1) + elseif diffR then + tagFS:SetTextColor(diffR, diffG, diffB) + elseif btn.GetTextColor then + local cr, cg, cb = btn:GetTextColor() + if cr then tagFS:SetTextColor(cr, cg, cb) end + end + end + end + end + + -- check icon is handled in the tracking section above + end + end +end + +-------------------------------------------------------------------------------- +-- Quest Detail Text Restyling +-------------------------------------------------------------------------------- +local function StyleQuestDetailText() + local titleFS = _G["QuestLogQuestTitle"] + if titleFS then + titleFS:SetFont(GetFont(), 14, "OUTLINE") + titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + + local descFS = _G["QuestLogQuestDescription"] + if descFS then + descFS:SetFont(GetFont(), 12) + descFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + end + + local objectivesTitle = _G["QuestLogObjectivesText"] + if objectivesTitle then + objectivesTitle:SetFont(GetFont(), 12) + objectivesTitle:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + end + + local descTitle = _G["QuestLogDescriptionTitle"] + if descTitle then + descTitle:SetFont(GetFont(), 12, "OUTLINE") + descTitle:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + end + + for i = 1, 20 do + local objFS = _G["QuestLogObjective" .. i] + if not objFS then break end + objFS:SetFont(GetFont(), 11) + local text = objFS:GetText() + if text then + local _, _, done, needed = string.find(text, "(%d+)/(%d+)") + if done and needed and tonumber(done) >= tonumber(needed) then + objFS:SetTextColor(T.objectiveComplete[1], T.objectiveComplete[2], T.objectiveComplete[3]) + else + objFS:SetTextColor(T.objectiveIncomplete[1], T.objectiveIncomplete[2], T.objectiveIncomplete[3]) + end + end + end + + local styledTexts = { + "QuestLogRewardTitleText", "QuestLogHeaderText", + "QuestLogItemChooseText", "QuestLogItemReceiveText", + "QuestLogSpellLearnText", + } + for _, name in ipairs(styledTexts) do + local fs = _G[name] + if fs then + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + end + end + + local rewardMoney = _G["QuestLogRequiredMoneyText"] + if rewardMoney then rewardMoney:SetFont(GetFont(), 11) end + + local timerText = _G["QuestLogTimerText"] + if timerText then + timerText:SetFont(GetFont(), 11, "OUTLINE") + timerText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end + + for i = 1, 10 do + local item = _G["QuestLogItem" .. i] + if item then SkinRewardItem(item) end + end + + ApplyQuestLogItemQuality() +end + +-------------------------------------------------------------------------------- +-- pfquest Button Detection & Styling +-------------------------------------------------------------------------------- +local pfquestSkinned = false + +local function SkinPfQuestButton(btn) + if not btn or btn._nanamiPfSkinned then return end + btn._nanamiPfSkinned = true + StripAllTextures(btn) + StripNormalTexture(btn) + StripPushedTexture(btn) + StripHighlightTexture(btn) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + + if btn.GetFontString then + local fs = btn:GetFontString() + if fs then + fs:SetFont(GetFont(), 10, "OUTLINE") + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end + + local origEnter = btn:GetScript("OnEnter") + btn:SetScript("OnEnter", function() + SetRoundBackdrop(this, T.btnHoverBg, T.btnHoverBd) + if this.GetFontString then + local tfs = this:GetFontString() + if tfs then tfs:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end + end + if origEnter then origEnter() end + end) + local origLeave = btn:GetScript("OnLeave") + btn:SetScript("OnLeave", function() + SetRoundBackdrop(this, T.btnBg, T.btnBorder) + if this.GetFontString then + local tfs = this:GetFontString() + if tfs then tfs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) end + end + if origLeave then origLeave() end + end) +end + +local function IsPfQuestButtonText(text) + if not text then return false end + return string.find(text, "show") or string.find(text, "hide") + or string.find(text, "clean") or string.find(text, "reset") + or string.find(text, "Show") or string.find(text, "Hide") + or string.find(text, "Clean") or string.find(text, "Reset") + or string.find(text, "显示") or string.find(text, "隐藏") + or string.find(text, "清空") or string.find(text, "重置") +end + +local function TrySkinPfQuestButtons() + local pfBtns = {} + + for _, name in ipairs({ + "pfQuestShow", "pfQuestHide", "pfQuestClean", "pfQuestReset", + "pfQuest.show", "pfQuest.hide", "pfQuest.clean", "pfQuest.reset", + }) do + local btn = _G[name] + if btn then + SkinPfQuestButton(btn) + table.insert(pfBtns, btn) + end + end + + if pfQuest and pfQuest.buttons then + for _, btn in pairs(pfQuest.buttons) do + if type(btn) == "table" and btn.GetObjectType then + SkinPfQuestButton(btn) + table.insert(pfBtns, btn) + end + end + end + + local detailChild = _G["QuestLogDetailScrollFrameChildFrame"] + or _G["QuestLogDetailScrollFrameChild"] + if detailChild and detailChild.GetChildren then + local children = { detailChild:GetChildren() } + for idx = 1, table.getn(children) do + local child = children[idx] + if child and child.GetObjectType and child:GetObjectType() == "Button" and child.GetFontString then + local fs = child:GetFontString() + if fs then + local text = fs:GetText() + if IsPfQuestButtonText(text) then + SkinPfQuestButton(child) + table.insert(pfBtns, child) + end + end + end + end + end + + -- Resize pfquest buttons to fit within the detail content area (keep original positions) + local contentW = FRAME_W - LIST_W - DETAIL_PAD * 2 - 4 - INNER_PAD * 2 - SCROLL_W - 6 + local btnCount = table.getn(pfBtns) + if btnCount > 0 and contentW > 100 then + local gap = 2 + local pfBtnW = math.floor((contentW - gap * (btnCount - 1)) / btnCount) + if pfBtnW < 50 then pfBtnW = 50 end + for bi = 1, btnCount do + local btn = pfBtns[bi] + if btn and btn.SetWidth then + btn:SetWidth(pfBtnW) + end + end + end +end + +-------------------------------------------------------------------------------- +-- Quest Tracker Button Skinning +-------------------------------------------------------------------------------- +local function SkinQuestTrackButton() + for _, bname in ipairs({ + "QuestLogTrack", "QuestLogFrameTrackButton", "QuestLogTrackButton", + }) do + local trackBtn = _G[bname] + if trackBtn then + trackBtn:Hide() + trackBtn:SetAlpha(0) + trackBtn:SetWidth(1) + trackBtn:SetHeight(1) + trackBtn:ClearAllPoints() + trackBtn:SetPoint("TOPLEFT", QuestLogFrame, "TOPLEFT", -9999, 0) + end + end + for _, tname in ipairs({ + "QuestLogTrackText", "QuestLogTrackButtonText", + "QuestLogTrackHighlight", + }) do + local t = _G[tname] + if t then + t:Hide() + if t.SetAlpha then t:SetAlpha(0) end + end + end +end + +-------------------------------------------------------------------------------- +-- Hooks +-------------------------------------------------------------------------------- +local function ClampHighlightWidth() + local hl = _G["QuestLogHighlightFrame"] + if hl and hl.IsVisible and hl:IsVisible() then + hl:SetWidth(LIST_BTN_W) + end +end + +local function EnforceListScrollSize() + local lf = QuestLogListScrollFrame + local f = QuestLogFrame + if not lf or not f or not f._nanamiListPanel then return end + local panelH = f._nanamiListPanel:GetHeight() + if panelH and panelH > 50 then + lf:SetHeight(panelH - INNER_PAD - 4) + end +end + +local function InstallHooks() + local origUpdate = QuestLog_Update + if origUpdate then + QuestLog_Update = function() + origUpdate() + if QuestLogFrame then QuestLogFrame:SetWidth(FRAME_W) end + EnforceListScrollSize() + StyleQuestListEntries() + ClampHighlightWidth() + if not pfquestSkinned then + pfquestSkinned = true + TrySkinPfQuestButtons() + end + end + end + + local origSetSelection = QuestLog_SetSelection + if origSetSelection then + QuestLog_SetSelection = function(index) + origSetSelection(index) + EnforceListScrollSize() + StyleQuestListEntries() + ClampHighlightWidth() + StyleQuestDetailText() + TrySkinPfQuestButtons() + if QuestLogFrame and QuestLogFrame._skinExtraButtons then + QuestLogFrame._skinExtraButtons() + end + local sb = _G["QuestLogFramePushQuestButton"] or _G["QuestFramePushQuestButton"] + if sb and sb._nanamiRefreshShare then sb._nanamiRefreshShare(sb) end + end + end + + local origUpdateDetails = QuestLog_UpdateQuestDetails + if origUpdateDetails then + QuestLog_UpdateQuestDetails = function(doNotShow) + origUpdateDetails(doNotShow) + StyleQuestDetailText() + TrySkinPfQuestButtons() + if QuestLogFrame and QuestLogFrame._skinExtraButtons then + QuestLogFrame._skinExtraButtons() + end + end + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function QLS:Initialize() + if skinApplied then return end + if not QuestLogFrame then return end + skinApplied = true + + SkinMainFrame() + SkinQuestList() + SkinQuestDetail() + SkinBottomButtons() + SkinQuestTrackButton() + InstallHooks() + + local origOnShow = QuestLogFrame:GetScript("OnShow") + QuestLogFrame:SetScript("OnShow", function() + if origOnShow then origOnShow() end + QuestLogFrame:SetWidth(FRAME_W) + EnforceListScrollSize() + StyleQuestListEntries() + ClampHighlightWidth() + StyleQuestDetailText() + if not pfquestSkinned then + pfquestSkinned = true + TrySkinPfQuestButtons() + end + if QuestLogFrame._skinExtraButtons then + QuestLogFrame._skinExtraButtons() + end + end) + + -- Delayed pfquest + translate button detection + local pfCheck = CreateFrame("Frame", nil, QuestLogFrame) + pfCheck._e = 0; pfCheck._n = 0 + pfCheck:SetScript("OnUpdate", function() + this._e = (this._e or 0) + (arg1 or 0) + if this._e < 0.5 then return end + this._e = 0 + this._n = (this._n or 0) + 1 + TrySkinPfQuestButtons() + if QuestLogFrame._skinExtraButtons then + QuestLogFrame._skinExtraButtons() + end + if this._n >= 8 then this:SetScript("OnUpdate", nil) end + end) + + if QuestLogFrame:IsVisible() then + StyleQuestListEntries() + StyleQuestDetailText() + end +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableQuestLogSkin == nil then + SFramesDB.enableQuestLogSkin = true + end + if SFramesDB.enableQuestLogSkin ~= false then + QLS:Initialize() + end + end +end) diff --git a/QuestUI.lua b/QuestUI.lua new file mode 100644 index 0000000..443f917 --- /dev/null +++ b/QuestUI.lua @@ -0,0 +1,1663 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Quest & NPC Interaction UI (QuestUI.lua) +-- Replaces GossipFrame and QuestFrame with Nanami-UI styled interface +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.QuestUI = {} +local QUI = SFrames.QuestUI +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme: Pink Cat-Paw (matching Nanami-UI) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + questAvail = { 0.9, 0.82, 0.18 }, + questActive = { 0.65, 0.65, 0.65 }, + questComplete = { 0.9, 0.82, 0.18 }, + moneyGold = { 1, 0.84, 0.0 }, + moneySilver = { 0.78, 0.78, 0.78 }, + moneyCopper = { 0.71, 0.43, 0.18 }, +}) + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, [5] = { 1, 0.5, 0 }, +} + +local GOSSIP_ICONS = { + ["gossip"] = "Interface\\GossipFrame\\GossipGossipIcon", + ["vendor"] = "Interface\\GossipFrame\\VendorGossipIcon", + ["taxi"] = "Interface\\GossipFrame\\TaxiGossipIcon", + ["trainer"] = "Interface\\GossipFrame\\TrainerGossipIcon", + ["banker"] = "Interface\\GossipFrame\\BankerGossipIcon", + ["petition"] = "Interface\\GossipFrame\\PetitionGossipIcon", + ["tabard"] = "Interface\\GossipFrame\\TabardGossipIcon", + ["battlemaster"] = "Interface\\GossipFrame\\BattleMasterGossipIcon", +} + +local QUEST_ICON_AVAILABLE = "Interface\\GossipFrame\\AvailableQuestIcon" +local QUEST_ICON_ACTIVE = "Interface\\GossipFrame\\ActiveQuestIcon" + +local GOSSIP_TRIGGER_TEXTS = { + ["TRANSMOG_TRIGGER"] = true, +} + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local FRAME_W = 340 +local FRAME_H = 400 +local HEADER_H = 34 +local BOTTOM_H = 42 +local SIDE_PAD = 14 +local CONTENT_W = FRAME_W - SIDE_PAD * 2 +local ITEM_SIZE = 36 +local ITEM_GAP = 4 +local SCROLL_STEP = 40 +local MAX_OPTIONS = 24 +local MAX_ITEMS = 10 + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local MainFrame = nil +local currentPage = nil +local previousPage = nil +local selectedReward = 0 +local pendingClose = false +local closeTimer = 0 +local pages = {} + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +local function MakeSep(parent, width) + local sep = parent:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetWidth(width or CONTENT_W) + sep:SetHeight(1) + sep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + return sep +end + +local function GetDiffColor(level) + if GetDifficultyColor then + local c = GetDifficultyColor(level) + if c then return c.r, c.g, c.b end + end + local pLvl = UnitLevel("player") or 60 + local diff = (level or pLvl) - pLvl + if diff >= 5 then return 1, 0.1, 0.1 + elseif diff >= 3 then return 1, 0.5, 0.25 + elseif diff >= -2 then return 1, 1, 0 + else return 0.25, 0.75, 0.25 + end +end + +local function TextHeight(fs, fallback) + if not fs then return fallback or 14 end + local h = fs.GetStringHeight and fs:GetStringHeight() + if h and h > 0 then return h end + h = fs:GetHeight() + if h and h > 1 then return h end + return fallback or 14 +end + +local function ForwardScrollWheel(frame) + frame:EnableMouseWheel(true) + frame:SetScript("OnMouseWheel", function() + local p = this:GetParent() + while p do + if p:GetObjectType() == "ScrollFrame" then + local cur = p:GetVerticalScroll() + local maxVal = p:GetVerticalScrollRange() + if arg1 > 0 then + p:SetVerticalScroll(math.max(0, cur - SCROLL_STEP)) + else + p:SetVerticalScroll(math.min(maxVal, cur + SCROLL_STEP)) + end + return + end + p = p:GetParent() + end + end) +end + +local function FormatMoney(copper) + if not copper or copper <= 0 then return nil end + local g = math.floor(copper / 10000) + local s = math.floor(math.mod(copper, 10000) / 100) + local c = math.mod(copper, 100) + return g, s, c +end + +local LINK_QUALITY_MAP = { + ["9d9d9d"] = 0, ["ffffff"] = 1, ["1eff00"] = 2, + ["0070dd"] = 3, ["a335ee"] = 4, ["ff8000"] = 5, + ["e6cc80"] = 6, +} + +local function QualityFromLink(link) + if not link then return nil end + local _, _, hex = string.find(link, "|c(%x%x%x%x%x%x%x%x)|") + if hex and string.len(hex) == 8 then + local color = string.lower(string.sub(hex, 3, 8)) + return LINK_QUALITY_MAP[color] + end + return nil +end + +local function GetItemQuality(itemType, index) + local name, texture, numItems, quality, isUsable = GetQuestItemInfo(itemType, index) + if quality and quality > 0 then return quality end + local link + if GetQuestItemLink then + link = GetQuestItemLink(itemType, index) + end + if link then + if GetItemInfo then + local _, _, q = GetItemInfo(link) + if q and q > 0 then return q end + end + local q = QualityFromLink(link) + if q then return q end + end + return nil +end +-------------------------------------------------------------------------------- +-- Scroll Area Factory +-------------------------------------------------------------------------------- +local function CreateScrollArea(parent, name) + local scroll = CreateFrame("ScrollFrame", name, parent) + local content = CreateFrame("Frame", name .. "Content", scroll) + content:SetWidth(CONTENT_W) + content:SetHeight(1) + scroll:SetScrollChild(content) + + scroll:EnableMouseWheel(true) + scroll:SetScript("OnMouseWheel", function() + local cur = this:GetVerticalScroll() + local maxVal = this:GetVerticalScrollRange() + if arg1 > 0 then + this:SetVerticalScroll(math.max(0, cur - SCROLL_STEP)) + else + this:SetVerticalScroll(math.min(maxVal, cur + SCROLL_STEP)) + end + end) + + scroll.content = content + return scroll +end + +-------------------------------------------------------------------------------- +-- Action Button Factory +-------------------------------------------------------------------------------- +local function CreateActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 100) + btn:SetHeight(28) + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + fs:SetText(text) + btn.label = fs + + btn.disabled = false + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + self:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + self:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + btn:SetScript("OnMouseDown", function() + if not this.disabled then + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end + end) + btn:SetScript("OnMouseUp", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end + end) + + return btn +end + +-------------------------------------------------------------------------------- +-- Gossip / Quest Option Button Factory +-------------------------------------------------------------------------------- +local function CreateOptionButton(parent) + local btn = CreateFrame("Button", nil, parent) + btn:SetHeight(22) + btn:SetWidth(CONTENT_W) + + local icon = btn:CreateTexture(nil, "ARTWORK") + icon:SetWidth(16) + icon:SetHeight(16) + icon:SetPoint("LEFT", btn, "LEFT", 2, 0) + btn.icon = icon + + local text = btn:CreateFontString(nil, "OVERLAY") + text:SetFont(GetFont(), 12) + text:SetPoint("LEFT", icon, "RIGHT", 6, 0) + text:SetPoint("RIGHT", btn, "RIGHT", -4, 0) + text:SetJustifyH("LEFT") + text:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + btn.text = text + + btn:SetHighlightTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight", "ADD") + + btn.normalR = T.nameText[1] + btn.normalG = T.nameText[2] + btn.normalB = T.nameText[3] + + btn:SetScript("OnEnter", function() + this.text:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end) + btn:SetScript("OnLeave", function() + this.text:SetTextColor(this.normalR, this.normalG, this.normalB) + end) + + ForwardScrollWheel(btn) + return btn +end +-------------------------------------------------------------------------------- +-- Item Slot Factory +-------------------------------------------------------------------------------- +local function CreateItemSlot(parent) + local slot = CreateFrame("Button", nil, parent) + slot:SetWidth(CONTENT_W) + slot:SetHeight(ITEM_SIZE + 4) + + -- Selection highlight background (covers entire row) + local selBg = slot:CreateTexture(nil, "BACKGROUND") + selBg:SetTexture("Interface\\Buttons\\WHITE8X8") + selBg:SetAllPoints(slot) + selBg:SetVertexColor(T.questSelected[1], T.questSelected[2], T.questSelected[3], T.questSelected[4] or 0.45) + selBg:Hide() + slot.selBg = selBg + + -- Selection glow border around entire row + local selGlow = CreateFrame("Frame", nil, slot) + selGlow:SetPoint("TOPLEFT", slot, "TOPLEFT", -2, 2) + selGlow:SetPoint("BOTTOMRIGHT", slot, "BOTTOMRIGHT", 2, -2) + selGlow:SetBackdrop({ + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + selGlow:SetBackdropBorderColor(T.questSelBorder[1], T.questSelBorder[2], T.questSelBorder[3], T.questSelBorder[4] or 0.9) + selGlow:Hide() + slot.selGlow = selGlow + + local iconFrame = CreateFrame("Frame", nil, slot) + iconFrame:SetWidth(ITEM_SIZE) + iconFrame:SetHeight(ITEM_SIZE) + iconFrame:SetPoint("LEFT", slot, "LEFT", 0, 0) + iconFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + slot.iconFrame = iconFrame + + local icon = iconFrame:CreateTexture(nil, "ARTWORK") + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetPoint("TOPLEFT", iconFrame, "TOPLEFT", 3, -3) + icon:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", -3, 3) + slot.icon = icon + + local qualGlow = iconFrame:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.7) + qualGlow:SetWidth(ITEM_SIZE * 1.8) + qualGlow:SetHeight(ITEM_SIZE * 1.8) + qualGlow:SetPoint("CENTER", iconFrame, "CENTER", 0, 0) + qualGlow:Hide() + slot.qualGlow = qualGlow + + local countFS = iconFrame:CreateFontString(nil, "OVERLAY") + countFS:SetFont("Fonts\\ARIALN.TTF", 11, "OUTLINE") + countFS:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", -2, 2) + countFS:SetJustifyH("RIGHT") + slot.countFS = countFS + + local nameFS = slot:CreateFontString(nil, "OVERLAY") + nameFS:SetFont(GetFont(), 12, "OUTLINE") + nameFS:SetPoint("LEFT", iconFrame, "RIGHT", 8, 0) + nameFS:SetPoint("RIGHT", slot, "RIGHT", -4, 0) + nameFS:SetJustifyH("LEFT") + nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + slot.nameFS = nameFS + + slot.itemType = nil + slot.itemIndex = nil + + slot:SetScript("OnEnter", function() + if this.itemType and this.itemIndex then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetQuestItem(this.itemType, this.itemIndex) + GameTooltip:Show() + end + this.iconFrame:SetBackdropBorderColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4]) + end) + slot:SetScript("OnLeave", function() + GameTooltip:Hide() + if this.selected then + this.iconFrame:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], T.slotSelected[4]) + else + local qc = QUALITY_COLORS[this._quality] + if qc and this._quality and this._quality >= 2 then + this.iconFrame:SetBackdropBorderColor(qc[1], qc[2], qc[3], 1) + else + this.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + end + end) + + function slot:ApplyItemData(name, texture, numItems, quality) + self.icon:SetTexture(texture) + self.nameFS:SetText(name or "") + if numItems and numItems > 1 then + self.countFS:SetText(numItems) + else + self.countFS:SetText("") + end + self._quality = quality + local qc = QUALITY_COLORS[quality] + if qc and quality and quality >= 2 then + self.qualGlow:SetVertexColor(qc[1], qc[2], qc[3]) + self.qualGlow:Show() + self.nameFS:SetTextColor(qc[1], qc[2], qc[3]) + self.iconFrame:SetBackdropBorderColor(qc[1], qc[2], qc[3], 1) + else + self.qualGlow:Hide() + self.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + self.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + end + + function slot:SetItemInfo(iType, idx) + self.itemType = iType + self.itemIndex = idx + local name, texture, numItems, quality, isUsable = GetQuestItemInfo(iType, idx) + if not quality or quality <= 0 then + quality = GetItemQuality(iType, idx) + end + self:ApplyItemData(name, texture, numItems, quality or 1) + self:Show() + + self:SetScript("OnUpdate", nil) + local needRetry = (not name or name == "") or (quality == nil) or (not texture or texture == "") + if needRetry then + self._retryElapsed = 0 + self._retryAttempts = 0 + self:SetScript("OnUpdate", function() + this._retryElapsed = (this._retryElapsed or 0) + (arg1 or 0) + if this._retryElapsed < 0.2 then return end + this._retryElapsed = 0 + this._retryAttempts = (this._retryAttempts or 0) + 1 + if this._retryAttempts > 15 then + this:SetScript("OnUpdate", nil) + return + end + if this.itemType and this.itemIndex then + local n, t, ni, q = GetQuestItemInfo(this.itemType, this.itemIndex) + if not q or q <= 0 then q = GetItemQuality(this.itemType, this.itemIndex) end + local nameOk = n and n ~= "" + local texOk = t and t ~= "" + local qualOk = q ~= nil + if nameOk and texOk and qualOk then + this:ApplyItemData(n, t, ni, q) + this:SetScript("OnUpdate", nil) + elseif this._retryAttempts >= 15 then + if nameOk then + this:ApplyItemData(n, t, ni, q or 1) + end + this:SetScript("OnUpdate", nil) + end + end + end) + end + end + + function slot:SetSelected(flag) + self.selected = flag + if flag then + self.iconFrame:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], T.slotSelected[4]) + self.iconFrame:SetBackdropColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], T.slotSelected[4] or 0.95) + self.selBg:Show() + self.selGlow:Show() + self.nameFS:SetTextColor(T.title[1], T.title[2], T.title[3]) + else + local qc = QUALITY_COLORS[self._quality] + if qc and self._quality and self._quality >= 2 then + self.iconFrame:SetBackdropBorderColor(qc[1], qc[2], qc[3], 1) + self.nameFS:SetTextColor(qc[1], qc[2], qc[3]) + else + self.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + self.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + self.iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + self.selBg:Hide() + self.selGlow:Hide() + end + end + + function slot:Clear() + self:SetScript("OnUpdate", nil) + self.itemType = nil + self.itemIndex = nil + self._quality = nil + self.icon:SetTexture(nil) + self.nameFS:SetText("") + self.countFS:SetText("") + self.qualGlow:Hide() + self.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + self.selected = false + self.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + self.iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + self.selBg:Hide() + self.selGlow:Hide() + self:Hide() + end + + ForwardScrollWheel(slot) + return slot +end +-------------------------------------------------------------------------------- +-- Money Display +-------------------------------------------------------------------------------- +local function CreateMoneyLine(parent) + local frame = CreateFrame("Frame", nil, parent) + frame:SetWidth(CONTENT_W) + frame:SetHeight(16) + + local font = GetFont() + + local gTxt = frame:CreateFontString(nil, "OVERLAY") + gTxt:SetFont(font, 12, "OUTLINE") + local gTex = frame:CreateTexture(nil, "ARTWORK") + gTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + gTex:SetTexCoord(0, 0.25, 0, 1) + gTex:SetWidth(13); gTex:SetHeight(13) + + local sTxt = frame:CreateFontString(nil, "OVERLAY") + sTxt:SetFont(font, 12, "OUTLINE") + local sTex = frame:CreateTexture(nil, "ARTWORK") + sTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + sTex:SetTexCoord(0.25, 0.5, 0, 1) + sTex:SetWidth(13); sTex:SetHeight(13) + + local cTxt = frame:CreateFontString(nil, "OVERLAY") + cTxt:SetFont(font, 12, "OUTLINE") + local cTex = frame:CreateTexture(nil, "ARTWORK") + cTex:SetTexture("Interface\\MoneyFrame\\UI-MoneyIcons") + cTex:SetTexCoord(0.5, 0.75, 0, 1) + cTex:SetWidth(13); cTex:SetHeight(13) + + frame.gTxt = gTxt; frame.gTex = gTex + frame.sTxt = sTxt; frame.sTex = sTex + frame.cTxt = cTxt; frame.cTex = cTex + + function frame:SetMoney(copper) + local g, s, c = FormatMoney(copper) + if not g then self:Hide(); return end + local x = 0 + if g > 0 then + self.gTxt:SetText(g) + self.gTxt:SetTextColor(T.moneyGold[1], T.moneyGold[2], T.moneyGold[3]) + self.gTxt:ClearAllPoints() + self.gTxt:SetPoint("LEFT", self, "LEFT", x, 0) + x = x + self.gTxt:GetStringWidth() + 1 + self.gTex:ClearAllPoints() + self.gTex:SetPoint("LEFT", self, "LEFT", x, 0) + x = x + 15 + self.gTxt:Show(); self.gTex:Show() + else + self.gTxt:Hide(); self.gTex:Hide() + end + if s > 0 or g > 0 then + self.sTxt:SetText(s) + self.sTxt:SetTextColor(T.moneySilver[1], T.moneySilver[2], T.moneySilver[3]) + self.sTxt:ClearAllPoints() + self.sTxt:SetPoint("LEFT", self, "LEFT", x, 0) + x = x + self.sTxt:GetStringWidth() + 1 + self.sTex:ClearAllPoints() + self.sTex:SetPoint("LEFT", self, "LEFT", x, 0) + x = x + 15 + self.sTxt:Show(); self.sTex:Show() + else + self.sTxt:Hide(); self.sTex:Hide() + end + if c > 0 or (g == 0 and s == 0) then + self.cTxt:SetText(c) + self.cTxt:SetTextColor(T.moneyCopper[1], T.moneyCopper[2], T.moneyCopper[3]) + self.cTxt:ClearAllPoints() + self.cTxt:SetPoint("LEFT", self, "LEFT", x, 0) + x = x + self.cTxt:GetStringWidth() + 1 + self.cTex:ClearAllPoints() + self.cTex:SetPoint("LEFT", self, "LEFT", x, 0) + self.cTxt:Show(); self.cTex:Show() + else + self.cTxt:Hide(); self.cTex:Hide() + end + self:Show() + end + + return frame +end + +-------------------------------------------------------------------------------- +-- Gossip data parsers +-------------------------------------------------------------------------------- +local function ParseGossipAvailableQuests() + local data = { GetGossipAvailableQuests() } + local out = {} + local i = 1 + while i <= table.getn(data) do + if type(data[i]) == "string" then + table.insert(out, { title = data[i], level = tonumber(data[i + 1]) or 0 }) + i = i + 2 + else + i = i + 1 + end + end + return out +end + +local function ParseGossipActiveQuests() + local data = { GetGossipActiveQuests() } + local out = {} + local i = 1 + while i <= table.getn(data) do + if type(data[i]) == "string" then + local q = { title = data[i], level = tonumber(data[i + 1]) or 0 } + if i + 2 <= table.getn(data) and type(data[i + 2]) ~= "string" then + q.isComplete = data[i + 2] + i = i + 3 + else + i = i + 2 + end + table.insert(out, q) + else + i = i + 1 + end + end + return out +end + +local function ParseGossipOptions() + local data = { GetGossipOptions() } + local out = {} + local i = 1 + while i <= table.getn(data) do + if i + 1 <= table.getn(data) then + table.insert(out, { title = data[i], gtype = data[i + 1] or "gossip" }) + end + i = i + 2 + end + return out +end + +-------------------------------------------------------------------------------- +-- AutoGossip logic (integrated from AutoGossip.lua) +-------------------------------------------------------------------------------- +local function TryAutoGossip() + if SFramesDB and SFramesDB.autoGossip == false then return false end + if IsShiftKeyDown() then return false end + + local active = { GetGossipActiveQuests() } + local avail = { GetGossipAvailableQuests() } + local opts = { GetGossipOptions() } + + local nActive = table.getn(active) or 0 + local nAvail = table.getn(avail) or 0 + local nOpts = table.getn(opts) or 0 + + if nActive == 0 and nAvail == 0 and nOpts == 2 then + SelectGossipOption(1) + return true + end + return false +end +-------------------------------------------------------------------------------- +-- Page Management +-------------------------------------------------------------------------------- +local function HideAllPages() + for _, p in pairs(pages) do + if p and p.Hide then p:Hide() end + end +end + +local function ShowPage(name) + HideAllPages() + currentPage = name + if pages[name] then + pages[name]:Show() + if pages[name].scroll then + pages[name].scroll:SetVerticalScroll(0) + end + end + if MainFrame then + MainFrame.btn1:Hide() + MainFrame.btn2:Hide() + end +end + +local function GoBack() + if DeclineQuest then DeclineQuest() end +end + +local function CloseFrame() + currentPage = nil + MainFrame:Hide() +end + +local function UpdateBottomButtons() + if not MainFrame then return end + local bL = MainFrame.btn1 + local bR = MainFrame.btn2 + local hasBack = previousPage and (currentPage ~= "gossip") and (currentPage ~= "greeting") + + if currentPage == "gossip" or currentPage == "greeting" then + bL:Hide() + bR.label:SetText("关闭") + bR:SetDisabled(false) + bR:SetScript("OnClick", function() + if currentPage == "gossip" then + if CloseGossip then CloseGossip() end + end + currentPage = nil + MainFrame:Hide() + end) + bR:Show() + + elseif currentPage == "detail" then + bL.label:SetText("接受") + bL:SetDisabled(false) + bL:SetScript("OnClick", function() + if AcceptQuest then AcceptQuest() end + end) + bL:Show() + + bR.label:SetText(hasBack and "返回" or "拒绝") + bR:SetDisabled(false) + bR:SetScript("OnClick", function() + if hasBack then + GoBack() + else + if DeclineQuest then DeclineQuest() end + end + end) + bR:Show() + + elseif currentPage == "progress" then + local canComplete = IsQuestCompletable and IsQuestCompletable() + bL.label:SetText("继续") + bL:SetDisabled(not canComplete) + bL:SetScript("OnClick", function() + if not this.disabled and CompleteQuest then + CompleteQuest() + end + end) + bL:Show() + + bR.label:SetText(hasBack and "返回" or "关闭") + bR:SetDisabled(false) + bR:SetScript("OnClick", function() + if hasBack then + GoBack() + else + CloseFrame() + end + end) + bR:Show() + + elseif currentPage == "complete" then + local numChoices = GetNumQuestChoices and GetNumQuestChoices() or 0 + local canFinish = (numChoices == 0) or (selectedReward > 0) + bL.label:SetText("完成任务") + bL:SetDisabled(not canFinish) + bL:SetScript("OnClick", function() + if this.disabled then return end + if GetQuestReward then + local nc = GetNumQuestChoices and GetNumQuestChoices() or 0 + if nc > 0 then + GetQuestReward(selectedReward) + else + GetQuestReward() + end + end + end) + bL:Show() + + bR.label:SetText(hasBack and "返回" or "关闭") + bR:SetDisabled(false) + bR:SetScript("OnClick", function() + if hasBack then + GoBack() + else + CloseFrame() + end + end) + bR:Show() + end +end +-------------------------------------------------------------------------------- +-- GOSSIP PAGE +-------------------------------------------------------------------------------- +local gossipOptionBtns = {} +local gossipSectionLabels = {} + +local function CreateGossipPage(parent) + local page = CreateFrame("Frame", nil, parent) + page:SetAllPoints(parent) + page:Hide() + + local scroll = CreateScrollArea(page, "SFramesQuestGossipScroll") + scroll:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + page.scroll = scroll + + local content = scroll.content + + local npcText = content:CreateFontString(nil, "OVERLAY") + npcText:SetFont(GetFont(), 12) + npcText:SetWidth(CONTENT_W - 4) + npcText:SetJustifyH("LEFT") + npcText:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + page.npcText = npcText + + for i = 1, 3 do + local lbl = content:CreateFontString(nil, "OVERLAY") + lbl:SetFont(GetFont(), 11, "OUTLINE") + lbl:SetWidth(CONTENT_W) + lbl:SetJustifyH("LEFT") + lbl:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + gossipSectionLabels[i] = lbl + end + + for i = 1, MAX_OPTIONS do + gossipOptionBtns[i] = CreateOptionButton(content) + end + + page.Update = function() + local y = 6 + local gossipText = GetGossipText and GetGossipText() or "" + page.npcText:SetText(gossipText) + page.npcText:ClearAllPoints() + page.npcText:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.npcText, 14) + 12 + + local availQuests = ParseGossipAvailableQuests() + local activeQuests = ParseGossipActiveQuests() + local gossipOpts = ParseGossipOptions() + + local btnIdx = 1 + for i = 1, 3 do gossipSectionLabels[i]:Hide() end + for i = 1, MAX_OPTIONS do gossipOptionBtns[i]:Hide() end + + if table.getn(availQuests) > 0 then + gossipSectionLabels[1]:SetText("可接任务") + gossipSectionLabels[1]:ClearAllPoints() + gossipSectionLabels[1]:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + gossipSectionLabels[1]:Show() + y = y + 16 + + for qi = 1, table.getn(availQuests) do + local q = availQuests[qi] + if btnIdx <= MAX_OPTIONS then + local btn = gossipOptionBtns[btnIdx] + btn.icon:SetTexture(QUEST_ICON_AVAILABLE) + local levelStr = q.level > 0 and ("[" .. q.level .. "] ") or "" + btn.text:SetText(levelStr .. (q.title or "")) + if q.level > 0 then + local r, g, b = GetDiffColor(q.level) + btn.normalR = r; btn.normalG = g; btn.normalB = b + btn.text:SetTextColor(r, g, b) + else + btn.normalR = T.questAvail[1]; btn.normalG = T.questAvail[2]; btn.normalB = T.questAvail[3] + btn.text:SetTextColor(T.questAvail[1], T.questAvail[2], T.questAvail[3]) + end + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + local idx = qi + btn:SetScript("OnClick", function() + currentPage = nil + MainFrame:Hide() + SelectGossipAvailableQuest(idx) + end) + btn:Show() + y = y + 22 + btnIdx = btnIdx + 1 + end + end + y = y + 4 + end + + if table.getn(activeQuests) > 0 then + gossipSectionLabels[2]:SetText("进行中任务") + gossipSectionLabels[2]:ClearAllPoints() + gossipSectionLabels[2]:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + gossipSectionLabels[2]:Show() + y = y + 16 + + for qi = 1, table.getn(activeQuests) do + local q = activeQuests[qi] + if btnIdx <= MAX_OPTIONS then + local btn = gossipOptionBtns[btnIdx] + btn.icon:SetTexture(QUEST_ICON_ACTIVE) + local levelStr = q.level > 0 and ("[" .. q.level .. "] ") or "" + btn.text:SetText(levelStr .. (q.title or "")) + if q.isComplete then + btn.normalR = T.questComplete[1]; btn.normalG = T.questComplete[2]; btn.normalB = T.questComplete[3] + btn.text:SetTextColor(T.questComplete[1], T.questComplete[2], T.questComplete[3]) + else + btn.normalR = T.questActive[1]; btn.normalG = T.questActive[2]; btn.normalB = T.questActive[3] + btn.text:SetTextColor(T.questActive[1], T.questActive[2], T.questActive[3]) + end + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + local idx = qi + btn:SetScript("OnClick", function() + currentPage = nil + MainFrame:Hide() + SelectGossipActiveQuest(idx) + end) + btn:Show() + y = y + 22 + btnIdx = btnIdx + 1 + end + end + y = y + 4 + end + + if table.getn(gossipOpts) > 0 then + gossipSectionLabels[3]:SetText("对话") + gossipSectionLabels[3]:ClearAllPoints() + gossipSectionLabels[3]:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + gossipSectionLabels[3]:Show() + y = y + 16 + + for oi = 1, table.getn(gossipOpts) do + local opt = gossipOpts[oi] + if btnIdx <= MAX_OPTIONS then + local btn = gossipOptionBtns[btnIdx] + btn.icon:SetTexture(GOSSIP_ICONS[opt.gtype] or GOSSIP_ICONS["gossip"]) + btn.text:SetText(opt.title or "") + btn.normalR = T.nameText[1]; btn.normalG = T.nameText[2]; btn.normalB = T.nameText[3] + btn.text:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + local idx = oi + btn:SetScript("OnClick", function() + currentPage = nil + MainFrame:Hide() + SelectGossipOption(idx) + end) + btn:Show() + y = y + 22 + btnIdx = btnIdx + 1 + end + end + end + + content:SetHeight(y + 10) + end + + return page +end +-------------------------------------------------------------------------------- +-- GREETING PAGE (multi-quest NPC via QuestFrame) +-------------------------------------------------------------------------------- +local greetingOptionBtns = {} +local greetingSectionLabels = {} + +local function CreateGreetingPage(parent) + local page = CreateFrame("Frame", nil, parent) + page:SetAllPoints(parent) + page:Hide() + + local scroll = CreateScrollArea(page, "SFramesQuestGreetingScroll") + scroll:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + page.scroll = scroll + + local content = scroll.content + + local npcText = content:CreateFontString(nil, "OVERLAY") + npcText:SetFont(GetFont(), 12) + npcText:SetWidth(CONTENT_W - 4) + npcText:SetJustifyH("LEFT") + npcText:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + page.npcText = npcText + + for i = 1, 2 do + local lbl = content:CreateFontString(nil, "OVERLAY") + lbl:SetFont(GetFont(), 11, "OUTLINE") + lbl:SetWidth(CONTENT_W) + lbl:SetJustifyH("LEFT") + lbl:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + greetingSectionLabels[i] = lbl + end + + for i = 1, MAX_OPTIONS do + greetingOptionBtns[i] = CreateOptionButton(content) + end + + page.Update = function() + local y = 6 + local greeting = GetGreetingText and GetGreetingText() or "" + page.npcText:SetText(greeting) + page.npcText:ClearAllPoints() + page.npcText:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.npcText, 14) + 12 + + local numAvail = GetNumAvailableQuests and GetNumAvailableQuests() or 0 + local numActive = GetNumActiveQuests and GetNumActiveQuests() or 0 + + local btnIdx = 1 + for i = 1, 2 do greetingSectionLabels[i]:Hide() end + for i = 1, MAX_OPTIONS do greetingOptionBtns[i]:Hide() end + + if numAvail > 0 then + greetingSectionLabels[1]:SetText("可接任务") + greetingSectionLabels[1]:ClearAllPoints() + greetingSectionLabels[1]:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + greetingSectionLabels[1]:Show() + y = y + 16 + + for qi = 1, numAvail do + if btnIdx <= MAX_OPTIONS then + local title = GetAvailableTitle and GetAvailableTitle(qi) or ("Quest " .. qi) + local btn = greetingOptionBtns[btnIdx] + btn.icon:SetTexture(QUEST_ICON_AVAILABLE) + btn.text:SetText(title) + btn.normalR = T.questAvail[1]; btn.normalG = T.questAvail[2]; btn.normalB = T.questAvail[3] + btn.text:SetTextColor(T.questAvail[1], T.questAvail[2], T.questAvail[3]) + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + local idx = qi + btn:SetScript("OnClick", function() + currentPage = nil + MainFrame:Hide() + SelectAvailableQuest(idx) + end) + btn:Show() + y = y + 22 + btnIdx = btnIdx + 1 + end + end + y = y + 4 + end + + if numActive > 0 then + greetingSectionLabels[2]:SetText("进行中任务") + greetingSectionLabels[2]:ClearAllPoints() + greetingSectionLabels[2]:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + greetingSectionLabels[2]:Show() + y = y + 16 + + for qi = 1, numActive do + if btnIdx <= MAX_OPTIONS then + local title = GetActiveTitle and GetActiveTitle(qi) or ("Quest " .. qi) + local btn = greetingOptionBtns[btnIdx] + btn.icon:SetTexture(QUEST_ICON_ACTIVE) + btn.text:SetText(title) + btn.normalR = T.questActive[1]; btn.normalG = T.questActive[2]; btn.normalB = T.questActive[3] + btn.text:SetTextColor(T.questActive[1], T.questActive[2], T.questActive[3]) + btn:ClearAllPoints() + btn:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + local idx = qi + btn:SetScript("OnClick", function() + currentPage = nil + MainFrame:Hide() + SelectActiveQuest(idx) + end) + btn:Show() + y = y + 22 + btnIdx = btnIdx + 1 + end + end + end + + content:SetHeight(y + 10) + end + + return page +end +-------------------------------------------------------------------------------- +-- DETAIL PAGE (accept / decline quest) +-------------------------------------------------------------------------------- +local detailItemSlots = {} + +local function CreateDetailPage(parent) + local page = CreateFrame("Frame", nil, parent) + page:SetAllPoints(parent) + page:Hide() + + local scroll = CreateScrollArea(page, "SFramesQuestDetailScroll") + scroll:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + page.scroll = scroll + local content = scroll.content + + page.titleFS = content:CreateFontString(nil, "OVERLAY") + page.titleFS:SetFont(GetFont(), 14, "OUTLINE") + page.titleFS:SetWidth(CONTENT_W - 4) + page.titleFS:SetJustifyH("LEFT") + page.titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + + page.sepLine = MakeSep(content, CONTENT_W) + + page.descFS = content:CreateFontString(nil, "OVERLAY") + page.descFS:SetFont(GetFont(), 12) + page.descFS:SetWidth(CONTENT_W - 4) + page.descFS:SetJustifyH("LEFT") + page.descFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + + page.objLabel = content:CreateFontString(nil, "OVERLAY") + page.objLabel:SetFont(GetFont(), 12, "OUTLINE") + page.objLabel:SetWidth(CONTENT_W) + page.objLabel:SetJustifyH("LEFT") + page.objLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.objLabel:SetText("任务目标") + + page.objFS = content:CreateFontString(nil, "OVERLAY") + page.objFS:SetFont(GetFont(), 12) + page.objFS:SetWidth(CONTENT_W - 4) + page.objFS:SetJustifyH("LEFT") + page.objFS:SetTextColor(T.objectiveText[1], T.objectiveText[2], T.objectiveText[3]) + + page.reqLabel = content:CreateFontString(nil, "OVERLAY") + page.reqLabel:SetFont(GetFont(), 11, "OUTLINE") + page.reqLabel:SetWidth(CONTENT_W) + page.reqLabel:SetJustifyH("LEFT") + page.reqLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.reqLabel:SetText("所需物品") + + for i = 1, MAX_ITEMS do detailItemSlots[i] = CreateItemSlot(content) end + + page.rewardLabel = content:CreateFontString(nil, "OVERLAY") + page.rewardLabel:SetFont(GetFont(), 11, "OUTLINE") + page.rewardLabel:SetWidth(CONTENT_W) + page.rewardLabel:SetJustifyH("LEFT") + page.rewardLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.rewardLabel:SetText("任务奖励") + + page.detailRewardSlots = {} + for i = 1, MAX_ITEMS do page.detailRewardSlots[i] = CreateItemSlot(content) end + + page.detailChoiceLabel = content:CreateFontString(nil, "OVERLAY") + page.detailChoiceLabel:SetFont(GetFont(), 11, "OUTLINE") + page.detailChoiceLabel:SetWidth(CONTENT_W) + page.detailChoiceLabel:SetJustifyH("LEFT") + page.detailChoiceLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.detailChoiceLabel:SetText("可选奖励") + + page.detailChoiceSlots = {} + for i = 1, MAX_ITEMS do page.detailChoiceSlots[i] = CreateItemSlot(content) end + + page.moneyLine = CreateMoneyLine(content) + + page.Update = function() + local y = 6 + page.titleFS:SetText(GetTitleText and GetTitleText() or "") + page.titleFS:ClearAllPoints() + page.titleFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.titleFS, 16) + 8 + + page.sepLine:ClearAllPoints() + page.sepLine:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + page.sepLine:Show() + y = y + 6 + + page.descFS:SetText(GetQuestText and GetQuestText() or "") + page.descFS:ClearAllPoints() + page.descFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.descFS, 14) + 12 + + local obj = GetObjectiveText and GetObjectiveText() or "" + if obj ~= "" then + page.objLabel:ClearAllPoints() + page.objLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.objLabel:Show(); y = y + 16 + page.objFS:SetText(obj) + page.objFS:ClearAllPoints() + page.objFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.objFS:Show() + y = y + TextHeight(page.objFS, 14) + 10 + else + page.objLabel:Hide(); page.objFS:Hide() + end + + local numReq = GetNumQuestItems and GetNumQuestItems() or 0 + for i = 1, MAX_ITEMS do detailItemSlots[i]:Clear() end + if numReq > 0 then + page.reqLabel:ClearAllPoints() + page.reqLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.reqLabel:Show(); y = y + 16 + for i = 1, math.min(numReq, MAX_ITEMS) do + detailItemSlots[i]:ClearAllPoints() + detailItemSlots[i]:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + detailItemSlots[i]:SetItemInfo("required", i) + y = y + ITEM_SIZE + ITEM_GAP + end + y = y + 4 + else + page.reqLabel:Hide() + end + + local numRew = GetNumQuestRewards and GetNumQuestRewards() or 0 + local numCho = GetNumQuestChoices and GetNumQuestChoices() or 0 + local money = GetRewardMoney and GetRewardMoney() or 0 + + for i = 1, MAX_ITEMS do page.detailRewardSlots[i]:Clear(); page.detailChoiceSlots[i]:Clear() end + page.rewardLabel:Hide(); page.detailChoiceLabel:Hide(); page.moneyLine:Hide() + + if numRew > 0 or money > 0 then + page.rewardLabel:ClearAllPoints() + page.rewardLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.rewardLabel:Show(); y = y + 16 + for i = 1, math.min(numRew, MAX_ITEMS) do + page.detailRewardSlots[i]:ClearAllPoints() + page.detailRewardSlots[i]:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + page.detailRewardSlots[i]:SetItemInfo("reward", i) + y = y + ITEM_SIZE + ITEM_GAP + end + if money > 0 then + page.moneyLine:ClearAllPoints() + page.moneyLine:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + page.moneyLine:SetMoney(money); y = y + 20 + end + y = y + 4 + end + + if numCho > 0 then + page.detailChoiceLabel:ClearAllPoints() + page.detailChoiceLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.detailChoiceLabel:Show(); y = y + 16 + for i = 1, math.min(numCho, MAX_ITEMS) do + page.detailChoiceSlots[i]:ClearAllPoints() + page.detailChoiceSlots[i]:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + page.detailChoiceSlots[i]:SetItemInfo("choice", i) + y = y + ITEM_SIZE + ITEM_GAP + end + y = y + 4 + end + content:SetHeight(y + 10) + end + return page +end +-------------------------------------------------------------------------------- +-- PROGRESS PAGE (turn-in requirements) +-------------------------------------------------------------------------------- +local progressItemSlots = {} + +local function CreateProgressPage(parent) + local page = CreateFrame("Frame", nil, parent) + page:SetAllPoints(parent) + page:Hide() + + local scroll = CreateScrollArea(page, "SFramesQuestProgressScroll") + scroll:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + page.scroll = scroll + local content = scroll.content + + page.titleFS = content:CreateFontString(nil, "OVERLAY") + page.titleFS:SetFont(GetFont(), 14, "OUTLINE") + page.titleFS:SetWidth(CONTENT_W - 4) + page.titleFS:SetJustifyH("LEFT") + page.titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + + page.sepLine = MakeSep(content, CONTENT_W) + + page.progressFS = content:CreateFontString(nil, "OVERLAY") + page.progressFS:SetFont(GetFont(), 12) + page.progressFS:SetWidth(CONTENT_W - 4) + page.progressFS:SetJustifyH("LEFT") + page.progressFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + + page.reqLabel = content:CreateFontString(nil, "OVERLAY") + page.reqLabel:SetFont(GetFont(), 11, "OUTLINE") + page.reqLabel:SetWidth(CONTENT_W) + page.reqLabel:SetJustifyH("LEFT") + page.reqLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.reqLabel:SetText("需要的物品") + + for i = 1, MAX_ITEMS do progressItemSlots[i] = CreateItemSlot(content) end + + page.Update = function() + local y = 6 + page.titleFS:SetText(GetTitleText and GetTitleText() or "") + page.titleFS:ClearAllPoints() + page.titleFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.titleFS, 16) + 8 + + page.sepLine:ClearAllPoints() + page.sepLine:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + page.sepLine:Show(); y = y + 6 + + page.progressFS:SetText(GetProgressText and GetProgressText() or "") + page.progressFS:ClearAllPoints() + page.progressFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.progressFS, 14) + 12 + + local numReq = GetNumQuestItems and GetNumQuestItems() or 0 + for i = 1, MAX_ITEMS do progressItemSlots[i]:Clear() end + if numReq > 0 then + page.reqLabel:ClearAllPoints() + page.reqLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.reqLabel:Show(); y = y + 16 + for i = 1, math.min(numReq, MAX_ITEMS) do + progressItemSlots[i]:ClearAllPoints() + progressItemSlots[i]:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + progressItemSlots[i]:SetItemInfo("required", i) + y = y + ITEM_SIZE + ITEM_GAP + end + else + page.reqLabel:Hide() + end + content:SetHeight(y + 10) + end + return page +end +-------------------------------------------------------------------------------- +-- COMPLETE PAGE (reward selection & finish) +-------------------------------------------------------------------------------- +local completeRewardSlots = {} +local completeChoiceSlots = {} + +local function CreateCompletePage(parent) + local page = CreateFrame("Frame", nil, parent) + page:SetAllPoints(parent) + page:Hide() + + local scroll = CreateScrollArea(page, "SFramesQuestCompleteScroll") + scroll:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + scroll:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + page.scroll = scroll + local content = scroll.content + + page.titleFS = content:CreateFontString(nil, "OVERLAY") + page.titleFS:SetFont(GetFont(), 14, "OUTLINE") + page.titleFS:SetWidth(CONTENT_W - 4) + page.titleFS:SetJustifyH("LEFT") + page.titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + + page.sepLine = MakeSep(content, CONTENT_W) + + page.rewardTextFS = content:CreateFontString(nil, "OVERLAY") + page.rewardTextFS:SetFont(GetFont(), 12) + page.rewardTextFS:SetWidth(CONTENT_W - 4) + page.rewardTextFS:SetJustifyH("LEFT") + page.rewardTextFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + + page.rewardLabel = content:CreateFontString(nil, "OVERLAY") + page.rewardLabel:SetFont(GetFont(), 11, "OUTLINE") + page.rewardLabel:SetWidth(CONTENT_W) + page.rewardLabel:SetJustifyH("LEFT") + page.rewardLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.rewardLabel:SetText("你将获得") + + for i = 1, MAX_ITEMS do completeRewardSlots[i] = CreateItemSlot(content) end + + page.moneyLine = CreateMoneyLine(content) + + page.choiceLabel = content:CreateFontString(nil, "OVERLAY") + page.choiceLabel:SetFont(GetFont(), 11, "OUTLINE") + page.choiceLabel:SetWidth(CONTENT_W) + page.choiceLabel:SetJustifyH("LEFT") + page.choiceLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + page.choiceLabel:SetText("选择一项奖励") + + for i = 1, MAX_ITEMS do + local slot = CreateItemSlot(content) + local slotIdx = i + slot:SetScript("OnClick", function() + selectedReward = slotIdx + for si = 1, MAX_ITEMS do completeChoiceSlots[si]:SetSelected(si == slotIdx) end + UpdateBottomButtons() + end) + completeChoiceSlots[i] = slot + end + + page.Update = function() + selectedReward = 0 + local y = 6 + + page.titleFS:SetText(GetTitleText and GetTitleText() or "") + page.titleFS:ClearAllPoints() + page.titleFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.titleFS, 16) + 8 + + page.sepLine:ClearAllPoints() + page.sepLine:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + page.sepLine:Show(); y = y + 6 + + page.rewardTextFS:SetText(GetRewardText and GetRewardText() or "") + page.rewardTextFS:ClearAllPoints() + page.rewardTextFS:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + y = y + TextHeight(page.rewardTextFS, 14) + 12 + + local numRew = GetNumQuestRewards and GetNumQuestRewards() or 0 + local numCho = GetNumQuestChoices and GetNumQuestChoices() or 0 + local money = GetRewardMoney and GetRewardMoney() or 0 + + for i = 1, MAX_ITEMS do completeRewardSlots[i]:Clear(); completeChoiceSlots[i]:Clear() end + page.rewardLabel:Hide(); page.choiceLabel:Hide(); page.moneyLine:Hide() + + if numRew > 0 or money > 0 then + page.rewardLabel:ClearAllPoints() + page.rewardLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.rewardLabel:Show(); y = y + 16 + for i = 1, math.min(numRew, MAX_ITEMS) do + completeRewardSlots[i]:ClearAllPoints() + completeRewardSlots[i]:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + completeRewardSlots[i]:SetItemInfo("reward", i) + y = y + ITEM_SIZE + ITEM_GAP + end + if money > 0 then + page.moneyLine:ClearAllPoints() + page.moneyLine:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + page.moneyLine:SetMoney(money); y = y + 20 + end + y = y + 4 + end + + if numCho > 0 then + page.choiceLabel:ClearAllPoints() + page.choiceLabel:SetPoint("TOPLEFT", content, "TOPLEFT", 2, -y) + page.choiceLabel:Show(); y = y + 16 + for i = 1, math.min(numCho, MAX_ITEMS) do + completeChoiceSlots[i]:ClearAllPoints() + completeChoiceSlots[i]:SetPoint("TOPLEFT", content, "TOPLEFT", 4, -y) + completeChoiceSlots[i]:SetItemInfo("choice", i) + completeChoiceSlots[i]:SetSelected(false) + y = y + ITEM_SIZE + ITEM_GAP + end + if numCho == 1 then + selectedReward = 1 + completeChoiceSlots[1]:SetSelected(true) + end + end + content:SetHeight(y + 10) + end + return page +end +-------------------------------------------------------------------------------- +-- INITIALIZE +-------------------------------------------------------------------------------- +function QUI:Initialize() + if MainFrame then return end + + MainFrame = CreateFrame("Frame", "SFramesQuestFrame", UIParent) + MainFrame:SetWidth(FRAME_W) + MainFrame:SetHeight(FRAME_H) + MainFrame:SetPoint("LEFT", UIParent, "LEFT", 64, 0) + MainFrame:SetFrameStrata("HIGH") + MainFrame:SetToplevel(true) + MainFrame:EnableMouse(true) + MainFrame:SetMovable(true) + MainFrame:RegisterForDrag("LeftButton") + MainFrame:SetScript("OnDragStart", function() this:StartMoving() end) + MainFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + SetRoundBackdrop(MainFrame) + CreateShadow(MainFrame) + + local header = CreateFrame("Frame", nil, MainFrame) + header:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", 0, 0) + header:SetHeight(HEADER_H) + + local titleIco = SFrames:CreateIcon(header, "quest", 16) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("LEFT", header, "LEFT", SIDE_PAD, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local npcNameFS = header:CreateFontString(nil, "OVERLAY") + npcNameFS:SetFont(GetFont(), 14, "OUTLINE") + npcNameFS:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + npcNameFS:SetPoint("RIGHT", header, "RIGHT", -30, 0) + npcNameFS:SetJustifyH("LEFT") + npcNameFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + MainFrame.npcNameFS = npcNameFS + + local closeBtn = CreateFrame("Button", nil, MainFrame, "UIPanelCloseButton") + closeBtn:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", 2, 2) + closeBtn:SetWidth(24); closeBtn:SetHeight(24) + + local headerSep = MainFrame:CreateTexture(nil, "ARTWORK") + headerSep:SetTexture("Interface\\Buttons\\WHITE8X8") + headerSep:SetHeight(1) + headerSep:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 6, -HEADER_H) + headerSep:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", -6, -HEADER_H) + headerSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + local contentArea = CreateFrame("Frame", nil, MainFrame) + contentArea:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", SIDE_PAD, -(HEADER_H + 4)) + contentArea:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, BOTTOM_H + 4) + MainFrame.contentArea = contentArea + + local bottomSep = MainFrame:CreateTexture(nil, "ARTWORK") + bottomSep:SetTexture("Interface\\Buttons\\WHITE8X8") + bottomSep:SetHeight(1) + bottomSep:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", 6, BOTTOM_H) + bottomSep:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -6, BOTTOM_H) + bottomSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + MainFrame.btn1 = CreateActionBtn(MainFrame, "", 100) + MainFrame.btn1:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", SIDE_PAD, 8) + MainFrame.btn1:Hide() + + MainFrame.btn2 = CreateActionBtn(MainFrame, "", 100) + MainFrame.btn2:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, 8) + MainFrame.btn2:Hide() + + pages.gossip = CreateGossipPage(contentArea) + pages.greeting = CreateGreetingPage(contentArea) + pages.detail = CreateDetailPage(contentArea) + pages.progress = CreateProgressPage(contentArea) + pages.complete = CreateCompletePage(contentArea) + + MainFrame:SetScript("OnHide", function() + if currentPage then + if CloseGossip then pcall(CloseGossip) end + if DeclineQuest then pcall(DeclineQuest) end + previousPage = nil + end + currentPage = nil + pendingClose = false + end) + + MainFrame:SetScript("OnUpdate", function() + if pendingClose then + closeTimer = closeTimer + (arg1 or 0) + if closeTimer > 0.15 then + pendingClose = false + closeTimer = 0 + previousPage = nil + if MainFrame:IsVisible() then + currentPage = nil + MainFrame:Hide() + end + end + end + end) + + MainFrame:Hide() + + MainFrame:RegisterEvent("GOSSIP_SHOW") + MainFrame:RegisterEvent("GOSSIP_CLOSED") + MainFrame:RegisterEvent("QUEST_GREETING") + MainFrame:RegisterEvent("QUEST_DETAIL") + MainFrame:RegisterEvent("QUEST_PROGRESS") + MainFrame:RegisterEvent("QUEST_COMPLETE") + MainFrame:RegisterEvent("QUEST_FINISHED") + MainFrame:SetScript("OnEvent", function() + if event == "GOSSIP_SHOW" then + pendingClose = false + local gText = GetGossipText() or "" + if GOSSIP_TRIGGER_TEXTS[strtrim and strtrim(gText) or gText] then return end + if TryAutoGossip() then return end + previousPage = "gossip" + MainFrame.npcNameFS:SetText(UnitName("npc") or "NPC") + ShowPage("gossip") + pages.gossip.Update() + UpdateBottomButtons() + MainFrame:Show() + + elseif event == "GOSSIP_CLOSED" then + if currentPage == "gossip" then + pendingClose = true + closeTimer = 0 + end + + elseif event == "QUEST_GREETING" then + pendingClose = false + previousPage = "greeting" + MainFrame.npcNameFS:SetText(UnitName("npc") or "NPC") + ShowPage("greeting") + pages.greeting.Update() + UpdateBottomButtons() + MainFrame:Show() + + elseif event == "QUEST_DETAIL" then + pendingClose = false + MainFrame.npcNameFS:SetText(UnitName("npc") or "NPC") + ShowPage("detail") + pages.detail.Update() + UpdateBottomButtons() + MainFrame:Show() + + elseif event == "QUEST_PROGRESS" then + pendingClose = false + MainFrame.npcNameFS:SetText(UnitName("npc") or "NPC") + ShowPage("progress") + pages.progress.Update() + UpdateBottomButtons() + MainFrame:Show() + + elseif event == "QUEST_COMPLETE" then + pendingClose = false + selectedReward = 0 + MainFrame.npcNameFS:SetText(UnitName("npc") or "NPC") + ShowPage("complete") + pages.complete.Update() + UpdateBottomButtons() + MainFrame:Show() + + elseif event == "QUEST_FINISHED" then + if previousPage then + pendingClose = true + closeTimer = 0 + else + pendingClose = false + currentPage = nil + MainFrame:Hide() + end + end + end) + + if GossipFrame then + GossipFrame:UnregisterEvent("GOSSIP_SHOW") + GossipFrame:UnregisterEvent("GOSSIP_CLOSED") + end + if QuestFrame then + QuestFrame:UnregisterEvent("QUEST_GREETING") + QuestFrame:UnregisterEvent("QUEST_DETAIL") + QuestFrame:UnregisterEvent("QUEST_PROGRESS") + QuestFrame:UnregisterEvent("QUEST_COMPLETE") + QuestFrame:UnregisterEvent("QUEST_FINISHED") + end + + tinsert(UISpecialFrames, "SFramesQuestFrame") +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableQuestUI == nil then + SFramesDB.enableQuestUI = true + end + if SFramesDB.enableQuestUI ~= false then + QUI:Initialize() + end + end +end) \ No newline at end of file diff --git a/Roll.lua b/Roll.lua new file mode 100644 index 0000000..1067517 --- /dev/null +++ b/Roll.lua @@ -0,0 +1,548 @@ +local AddOnName = "Nanami-UI" +SFrames = SFrames or {} + +-- ============================================================ +-- Roll Tracker Data +-- ============================================================ +local currentRolls = {} -- [itemName] = { [playerName] = { action, roll } } + +local _A = SFrames.ActiveTheme +local _bg = _A and _A.panelBg or { 0.08, 0.08, 0.10, 0.95 } +local _bd = _A and _A.panelBorder or { 0.3, 0.3, 0.35, 1 } + +local RollUI = CreateFrame("Frame") +RollUI:RegisterEvent("CHAT_MSG_LOOT") +RollUI:RegisterEvent("CHAT_MSG_SYSTEM") + +-- ============================================================ +-- String helpers (Lua 5.0 only - NO string.match!) +-- ============================================================ +local function StripLinks(msg) + return string.gsub(msg, "|c%x%x%x%x%x%x%x%x|H.-|h(.-)|h|r", "%1") +end + +local function GetBracketItem(text) + local _, _, name = string.find(text, "%[(.-)%]") + if name then return name end + text = string.gsub(text, "^%s+", "") + text = string.gsub(text, "%s+$", "") + text = string.gsub(text, "%.$", "") + return text +end + +local function TrimStr(s) + s = string.gsub(s, "^%s+", "") + s = string.gsub(s, "%s+$", "") + return s +end + +-- ============================================================ +-- Parse loot roll chat messages +-- ============================================================ +local function TrackRollEvent(msg) + if not msg or msg == "" then return nil end + + local clean = StripLinks(msg) + local player, rawItem, rollType, rollNum + + -- Patterns based on ACTUAL Turtle WoW Chinese message format: + -- "Buis选择了贪婪取向:[物品名]" + -- "Buis选择了需求取向:[物品名]" + + local _, _, p, i + + -- === PRIMARY: Turtle WoW Chinese format "选择了需求取向" / "选择了贪婪取向" === + _, _, p, i = string.find(clean, "^(.+)选择了需求取向:(.+)$") + if p and i then player = p; rawItem = i; rollType = "Need" end + + if not player then + _, _, p, i = string.find(clean, "^(.+)选择了需求取向: (.+)$") + if p and i then player = p; rawItem = i; rollType = "Need" end + end + + if not player then + _, _, p, i = string.find(clean, "^(.+)选择了贪婪取向:(.+)$") + if p and i then player = p; rawItem = i; rollType = "Greed" end + end + if not player then + _, _, p, i = string.find(clean, "^(.+)选择了贪婪取向: (.+)$") + if p and i then player = p; rawItem = i; rollType = "Greed" end + end + + -- Pass: "放弃了" format + if not player then + _, _, p, i = string.find(clean, "^(.+)放弃了:(.+)$") + if p and i then player = p; rawItem = i; rollType = "Pass" end + end + if not player then + _, _, p, i = string.find(clean, "^(.+)放弃了: (.+)$") + if p and i then player = p; rawItem = i; rollType = "Pass" end + end + if not player then + _, _, p, i = string.find(clean, "^(.+)放弃了(.+)$") + if p and i then player = p; rawItem = i; rollType = "Pass" end + end + + -- Roll (Chinese): "掷出 85 (1-100)" + if not player then + local r + _, _, p, r, i = string.find(clean, "^(.+)掷出%s*(%d+).-:(.+)$") + if p and r and i then player = p; rawItem = i; rollType = "Roll"; rollNum = r end + end + if not player then + local r + _, _, p, r, i = string.find(clean, "^(.+)掷出%s*(%d+).-: (.+)$") + if p and r and i then player = p; rawItem = i; rollType = "Roll"; rollNum = r end + end + + -- === FALLBACK: Other Chinese formats === + if not player then + _, _, p, i = string.find(clean, "^(.+)需求了:(.+)$") + if p and i then player = p; rawItem = i; rollType = "Need" end + end + if not player then + _, _, p, i = string.find(clean, "^(.+)贪婪了:(.+)$") + if p and i then player = p; rawItem = i; rollType = "Greed" end + end + + -- === ENGLISH patterns === + if not player then + _, _, p, i = string.find(clean, "^(.+) selected Need for: (.+)$") + if p and i then player = p; rawItem = i; rollType = "Need" end + end + if not player then + _, _, p, i = string.find(clean, "^(.+) selected Greed for: (.+)$") + if p and i then player = p; rawItem = i; rollType = "Greed" end + end + if not player then + _, _, p, i = string.find(clean, "^(.+) passed on: (.+)$") + if p and i then player = p; rawItem = i; rollType = "Pass" end + end + if not player then + local r + _, _, p, r, i = string.find(clean, "^(.+) rolls (%d+) .+for: (.+)$") + if p and r and i then player = p; rawItem = i; rollType = "Roll"; rollNum = r end + end + if not player then + _, _, p, i = string.find(clean, "^(.+) passes on (.+)$") + if p and i then player = p; rawItem = i; rollType = "Pass" end + end + + if player and rawItem then + player = TrimStr(player) + local itemName = GetBracketItem(rawItem) + + if itemName == "" or player == "" then return nil end + + if not currentRolls[itemName] then currentRolls[itemName] = {} end + if not currentRolls[itemName][player] then currentRolls[itemName][player] = {} end + + if rollType == "Roll" then + currentRolls[itemName][player].roll = rollNum + else + currentRolls[itemName][player].action = rollType + end + return itemName + end + return nil +end + +-- ============================================================ +-- Update the tracker text on visible roll frames +-- ============================================================ +local function UpdateRollTrackers() + for idx = 1, 4 do + local frame = _G["GroupLootFrame"..idx] + if frame and frame:IsVisible() and frame.rollID then + local _, itemName = GetLootRollItemInfo(frame.rollID) + + if itemName and frame.sfNeedFS then + local data = currentRolls[itemName] + local needText, greedText, passText = "", "", "" + if data then + local needs, greeds, passes = {}, {}, {} + for pl, info in pairs(data) do + local hex = SFrames and SFrames:GetClassHexForName(pl) + local coloredPl = hex and ("|cff" .. hex .. pl .. "|r") or pl + local rollStr = "" + if info.roll then rollStr = "|cffaaaaaa(" .. info.roll .. ")|r" end + if info.action == "Need" then + table.insert(needs, coloredPl .. rollStr) + elseif info.action == "Greed" then + table.insert(greeds, coloredPl .. rollStr) + elseif info.action == "Pass" then + table.insert(passes, coloredPl) + end + end + if table.getn(needs) > 0 then + needText = "|cffff5555需求|r " .. table.concat(needs, " ") + end + if table.getn(greeds) > 0 then + greedText = "|cff55ff55贪婪|r " .. table.concat(greeds, " ") + end + if table.getn(passes) > 0 then + passText = "|cff888888放弃|r " .. table.concat(passes, " ") + end + end + frame.sfNeedFS:SetText(needText) + frame.sfGreedFS:SetText(greedText) + frame.sfPassFS:SetText(passText) + end + end + end +end + +-- ============================================================ +-- Event Handler +-- ============================================================ +RollUI:SetScript("OnEvent", function() + if event == "CHAT_MSG_LOOT" or event == "CHAT_MSG_SYSTEM" then + local matched = TrackRollEvent(arg1) + if matched then + UpdateRollTrackers() + end + end +end) + +-- ============================================================ +-- Kill ALL Blizzard textures on the main frame only +-- ============================================================ +local function NukeBlizzTextures(frame) + local regions = {frame:GetRegions()} + for _, r in ipairs(regions) do + if r:IsObjectType("Texture") and not r.sfKeep then + r:SetTexture(nil) + r:SetAlpha(0) + r:Hide() + -- Don't override Show! SetBackdrop needs it. + -- Instead mark as nuked and move off-screen + if not r.sfNuked then + r.sfNuked = true + r:ClearAllPoints() + r:SetPoint("CENTER", UIParent, "CENTER", 9999, 9999) + end + end + end +end + +-- ============================================================ +-- Style the GroupLootFrame +-- ============================================================ +local function StyleGroupLootFrame(frame) + if frame.sfSkinned then return end + frame.sfSkinned = true + + local fname = frame:GetName() + + -- 1) Kill all Blizz textures on main frame + NukeBlizzTextures(frame) + + -- 2) Alt-Drag + frame:SetMovable(true) + frame:EnableMouse(true) + frame:RegisterForDrag("LeftButton") + frame:SetScript("OnDragStart", function() + if IsAltKeyDown() then + this:StartMoving() + end + end) + frame:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + end) + + -- 3) Rounded backdrop + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + frame:SetBackdropColor(_bg[1], _bg[2], _bg[3], _bg[4]) + frame:SetBackdropBorderColor(_bd[1], _bd[2], _bd[3], _bd[4]) + + -- Tag all backdrop regions so NukeBlizzTextures won't kill them + local bdRegions = {frame:GetRegions()} + for _, r in ipairs(bdRegions) do + r.sfKeep = true + end + + -- 5) Frame size (taller for tracker area) + frame:SetWidth(300) + frame:SetHeight(100) + + -- 6) Icon + local iconFrame = _G[fname.."IconFrame"] + if iconFrame then + iconFrame:ClearAllPoints() + iconFrame:SetPoint("TOPLEFT", frame, "TOPLEFT", 12, -10) + iconFrame:SetWidth(36) + iconFrame:SetHeight(36) + + -- Kill IconFrame's own textures + local iRegions = {iconFrame:GetRegions()} + for _, r in ipairs(iRegions) do + if r:IsObjectType("Texture") then + local tName = r:GetName() or "" + if string.find(tName, "Icon") then + r:SetTexCoord(0.08, 0.92, 0.08, 0.92) + r:ClearAllPoints() + r:SetAllPoints(iconFrame) + r.sfKeep = true + else + r:SetTexture(nil) + r:SetAlpha(0) + r:Hide() + r.sfNuked = true + r:ClearAllPoints() + r:SetPoint("CENTER", UIParent, "CENTER", 9999, 9999) + end + end + end + + -- Clean icon border + local iconBorder = frame:CreateTexture(nil, "ARTWORK") + iconBorder:SetTexture("Interface\\Buttons\\WHITE8X8") + iconBorder:SetVertexColor(0.4, 0.4, 0.45, 1) + iconBorder:SetPoint("TOPLEFT", iconFrame, "TOPLEFT", -2, 2) + iconBorder:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", 2, -2) + iconBorder.sfKeep = true + + local qualGlow = frame:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.8) + qualGlow:SetWidth(68) + qualGlow:SetHeight(68) + qualGlow:SetPoint("CENTER", iconFrame, "CENTER", 0, 0) + qualGlow:Hide() + qualGlow.sfKeep = true + frame.sfQualGlow = qualGlow + end + + -- 7) Item Name (shorter width to make room for buttons) + local itemNameFS = _G[fname.."Name"] + if itemNameFS then + itemNameFS:ClearAllPoints() + itemNameFS:SetPoint("LEFT", iconFrame, "RIGHT", 10, 0) + itemNameFS:SetWidth(145) + itemNameFS:SetHeight(36) + itemNameFS:SetJustifyH("LEFT") + itemNameFS:SetJustifyV("MIDDLE") + end + + -- 8) Buttons: right side, vertically centered with icon + local need = _G[fname.."NeedButton"] + local greed = _G[fname.."GreedButton"] + local pass = _G[fname.."PassButton"] + + -- Create our own close/pass button since Blizz keeps hiding PassButton + local closeBtn = CreateFrame("Button", nil, frame) + closeBtn:SetWidth(20) + closeBtn:SetHeight(20) + closeBtn:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -6, -6) + closeBtn:SetFrameLevel(frame:GetFrameLevel() + 10) + + -- Rounded backdrop matching UI + closeBtn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 8, edgeSize = 8, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + local _cbg = _A and _A.closeBtnBg or { 0.5, 0.1, 0.1, 0.85 } + local _cbd = _A and _A.closeBtnBorder or { 0.6, 0.2, 0.2, 0.8 } + local _cbgH = _A and _A.closeBtnHoverBg or { 0.7, 0.15, 0.15, 1 } + local _cbdH = _A and _A.closeBtnHoverBorder or { 0.9, 0.3, 0.3, 1 } + closeBtn:SetBackdropColor(_cbg[1], _cbg[2], _cbg[3], _cbg[4]) + closeBtn:SetBackdropBorderColor(_cbd[1], _cbd[2], _cbd[3], _cbd[4]) + + -- "X" text + local closeText = closeBtn:CreateFontString(nil, "OVERLAY") + closeText:SetFont(SFrames:GetFont() or "Fonts\\ARKai_T.ttf", 11, "OUTLINE") + closeText:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeText:SetText("X") + closeText:SetTextColor(0.9, 0.8, 0.8) + + closeBtn:SetScript("OnClick", function() + local parent = this:GetParent() + if parent and parent.rollID then + ConfirmLootRoll(parent.rollID, 0) + end + end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(_cbgH[1], _cbgH[2], _cbgH[3], _cbgH[4]) + this:SetBackdropBorderColor(_cbdH[1], _cbdH[2], _cbdH[3], _cbdH[4]) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText("放弃 / Pass") + GameTooltip:Show() + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(_cbg[1], _cbg[2], _cbg[3], _cbg[4]) + this:SetBackdropBorderColor(_cbd[1], _cbd[2], _cbd[3], _cbd[4]) + GameTooltip:Hide() + end) + + -- Position need/greed to the left of close button + if need and greed then + greed:ClearAllPoints() + greed:SetPoint("RIGHT", closeBtn, "LEFT", -6, 0) + greed:SetWidth(22); greed:SetHeight(22) + greed:Show() + + need:ClearAllPoints() + need:SetPoint("RIGHT", greed, "LEFT", -4, 0) + need:SetWidth(22); need:SetHeight(22) + need:Show() + end + + -- Hide Blizz pass button + if pass then + pass:ClearAllPoints() + pass:SetPoint("CENTER", UIParent, "CENTER", 9999, 9999) + pass:SetAlpha(0) + end + + -- 9) HIDE Blizz timer completely + local blizzTimer = _G[fname.."Timer"] + if blizzTimer then + blizzTimer:SetAlpha(0) + blizzTimer:ClearAllPoints() + blizzTimer:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0, 500) + end + + -- 10) Our own timer bar + local myTimer = CreateFrame("StatusBar", nil, frame) + myTimer:SetPoint("BOTTOMLEFT", frame, "BOTTOMLEFT", 12, 8) + myTimer:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", -12, 8) + myTimer:SetHeight(6) + myTimer:SetMinMaxValues(0, 1) + myTimer:SetValue(1) + myTimer:SetStatusBarTexture("Interface\\TargetingFrame\\UI-StatusBar") + myTimer:SetStatusBarColor(0.9, 0.7, 0.15) + + local myTimerBg = myTimer:CreateTexture(nil, "BACKGROUND") + myTimerBg:SetTexture("Interface\\Buttons\\WHITE8X8") + myTimerBg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + myTimerBg:SetAllPoints(myTimer) + + frame.sfTimer = myTimer + frame.sfTimerMax = nil -- will be set on first OnUpdate + + -- 11) OnUpdate: record max time on first tick, then animate + frame:SetScript("OnUpdate", function() + if this.rollID and this.sfTimer then + local timeLeft = GetLootRollTimeLeft(this.rollID) + if timeLeft and timeLeft > 0 then + if not this.sfTimerMax or this.sfTimerMax < timeLeft then + this.sfTimerMax = timeLeft + end + this.sfTimer:SetMinMaxValues(0, this.sfTimerMax) + this.sfTimer:SetValue(timeLeft) + else + this.sfTimer:SetValue(0) + end + end + end) + + -- 12) Clean button textures so they don't extend beyond bounds + if need then + local nRegions = {need:GetRegions()} + for _, r in ipairs(nRegions) do + if r:IsObjectType("Texture") then + r:ClearAllPoints() + r:SetAllPoints(need) + end + end + end + if greed then + local gRegions = {greed:GetRegions()} + for _, r in ipairs(gRegions) do + if r:IsObjectType("Texture") then + r:ClearAllPoints() + r:SetAllPoints(greed) + end + end + end + + -- 13) Three FontStrings for Need / Greed / Pass (vertical stack, full width) + local textWidth = 276 + + local needFS = frame:CreateFontString(nil, "OVERLAY") + needFS:SetFont(SFrames:GetFont() or "Fonts\\ARKai_T.ttf", 10, "OUTLINE") + needFS:SetPoint("TOPLEFT", iconFrame, "BOTTOMLEFT", 0, -4) + needFS:SetWidth(textWidth) + needFS:SetJustifyH("LEFT") + needFS:SetJustifyV("TOP") + needFS:SetTextColor(1, 1, 1) + frame.sfNeedFS = needFS + + local greedFS = frame:CreateFontString(nil, "OVERLAY") + greedFS:SetFont(SFrames:GetFont() or "Fonts\\ARKai_T.ttf", 10, "OUTLINE") + greedFS:SetPoint("TOPLEFT", needFS, "BOTTOMLEFT", 0, -1) + greedFS:SetWidth(textWidth) + greedFS:SetJustifyH("LEFT") + greedFS:SetJustifyV("TOP") + greedFS:SetTextColor(1, 1, 1) + frame.sfGreedFS = greedFS + + local passFS = frame:CreateFontString(nil, "OVERLAY") + passFS:SetFont(SFrames:GetFont() or "Fonts\\ARKai_T.ttf", 10, "OUTLINE") + passFS:SetPoint("TOPLEFT", greedFS, "BOTTOMLEFT", 0, -1) + passFS:SetWidth(textWidth) + passFS:SetJustifyH("LEFT") + passFS:SetJustifyV("TOP") + passFS:SetTextColor(1, 1, 1) + frame.sfPassFS = passFS +end + +-- ============================================================ +-- Hooks +-- ============================================================ +local function RestoreBackdrop(frame) + if not frame.sfSkinned then return end + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + frame:SetBackdropColor(_bg[1], _bg[2], _bg[3], _bg[4]) + frame:SetBackdropBorderColor(_bd[1], _bd[2], _bd[3], _bd[4]) +end + +local function UpdateRollQualityGlow(frame) + if frame.sfQualGlow and frame.rollID then + local _, _, _, quality = GetLootRollItemInfo(frame.rollID) + if quality and quality > 1 then + local r, g, b = GetItemQualityColor(quality) + frame.sfQualGlow:SetVertexColor(r, g, b) + frame.sfQualGlow:Show() + else + frame.sfQualGlow:Hide() + end + end +end + +local Hook_GroupLootFrame_OnShow = GroupLootFrame_OnShow +function GroupLootFrame_OnShow() + if Hook_GroupLootFrame_OnShow then Hook_GroupLootFrame_OnShow() end + StyleGroupLootFrame(this) + NukeBlizzTextures(this) + RestoreBackdrop(this) + UpdateRollQualityGlow(this) + UpdateRollTrackers() +end + +local Hook_GroupLootFrame_Update = GroupLootFrame_Update +function GroupLootFrame_Update() + if Hook_GroupLootFrame_Update then Hook_GroupLootFrame_Update() end + for idx = 1, 4 do + local f = _G["GroupLootFrame"..idx] + if f and f:IsVisible() and f.sfSkinned then + NukeBlizzTextures(f) + RestoreBackdrop(f) + UpdateRollQualityGlow(f) + end + end + UpdateRollTrackers() +end diff --git a/SellPriceDB.lua b/SellPriceDB.lua new file mode 100644 index 0000000..6b5fefc --- /dev/null +++ b/SellPriceDB.lua @@ -0,0 +1,3983 @@ +-- Nanami-UI Embedded Sell Price Database +-- Merged: ShaguTweaks Turtle WoW (priority) + Informant + SellValue wowhead data +-- [itemID] = vendorSellPrice (in copper) +-- Total entries: 23853 + +NanamiSellPriceDB = { + [1]=0, [7]=0, [8]=1584, [9]=0, [10]=46, [11]=0, + [13]=5, [14]=0, [16]=22500, [17]=32, [18]=32, [19]=32, + [20]=2, [21]=2, [22]=0, [24]=2300, [25]=7, [26]=9, + [27]=7, [28]=7, [29]=0, [31]=1800, [33]=0, [35]=9, + [36]=7, [37]=7, [38]=1, [39]=1, [40]=1, [42]=1, + [43]=1, [44]=1, [45]=1, [46]=1, [47]=1, [48]=1, + [49]=1, [50]=1, [51]=1, [52]=1, [53]=1, [54]=1, + [55]=1, [56]=1, [57]=1, [58]=1, [59]=1, [60]=12, + [61]=12, [62]=0, [64]=11, [65]=1000, [66]=150, [67]=150, + [68]=5000, [69]=1625, [70]=2800, [71]=1800, [74]=1800, [75]=1900, + [76]=1800, [77]=1800, [79]=10, [80]=7, [81]=0, [82]=150, + [83]=2300, [84]=0, [85]=12, [86]=0, [87]=150, [88]=3600, + [89]=1, [90]=1, [91]=1, [92]=1, [93]=1, [94]=0, + [95]=32, [96]=32, [97]=32, [98]=32, [99]=32, [100]=32, + [101]=32, [102]=32, [103]=150, [104]=12500, [112]=0, [113]=4800, + [117]=1, [118]=5, [119]=0, [120]=1, [121]=1, [122]=1, + [123]=0, [124]=10500, [127]=1, [128]=0, [129]=1, [130]=0, + [131]=150, [132]=25000, [137]=1, [138]=0, [139]=1, [140]=1, + [141]=1, [142]=0, [143]=1, [146]=1, [147]=1, [148]=1, + [151]=10, [152]=1, [153]=1, [154]=1, [156]=3682, [159]=1, + [193]=9, [194]=9, [195]=7, [200]=454, [201]=455, [202]=342, + [203]=229, [209]=12, [210]=9, [212]=32, [236]=559, [237]=561, + [238]=422, [239]=282, [285]=711, [286]=645, [287]=488, [414]=6, + [422]=25, [537]=87, [555]=8, [556]=106, [647]=70024, [710]=72, + [711]=5, [714]=6, [718]=322, [719]=4, [720]=1070, [723]=15, + [724]=25, [727]=244, [728]=50, [729]=17, [730]=16, [731]=27, + [732]=6, [733]=100, [744]=10000, [753]=3842, [754]=23556, [755]=1, + [756]=4963, [763]=58, [765]=10, [766]=57, [767]=100, [768]=113, + [769]=3, [770]=316, [771]=38, [774]=15, [776]=5765, [777]=21, + [778]=55, [779]=18, [781]=110, [783]=50, [785]=20, [787]=1, + [789]=1969, [790]=2020, [791]=7069, [792]=41, [793]=27, [794]=55, + [795]=56, [796]=52, [797]=35, [798]=70, [799]=71, [804]=2500, + [805]=250, [809]=39125, [810]=45267, [811]=54123, [812]=57018, [813]=58, + [814]=25, [816]=305, [818]=100, [820]=947, [821]=249, [826]=732, + [827]=971, [828]=250, [832]=203, [833]=28000, [835]=23, [837]=224, + [838]=225, [839]=113, [840]=170, [843]=215, [844]=144, [845]=289, + [846]=290, [847]=349, [848]=351, [849]=265, [850]=176, [851]=404, + [852]=347, [853]=481, [854]=604, [856]=875, [857]=2500, [858]=25, + [859]=87, [860]=89, [862]=38222, [863]=8964, [864]=9716, [865]=5096, + [866]=16640, [867]=5344, [868]=21532, [869]=18529, [870]=21528, [871]=29627, + [872]=2362, [873]=21770, [875]=1, [876]=1, [878]=56, [880]=2692, + [885]=2300, [886]=2949, [887]=82, [888]=980, [890]=3517, [892]=369, + [893]=137, [897]=1022, [899]=1248, [911]=3324, [913]=5037, [914]=2669, + [918]=1250, [920]=2821, [922]=2407, [923]=1748, [924]=2194, [925]=1559, + [926]=1956, [927]=1390, [928]=1972, [929]=75, [932]=637, [933]=2500, + [934]=10682, [935]=1742, [936]=11620, [937]=14577, [940]=12566, [942]=4500, + [943]=42863, [944]=83000, [945]=3, [948]=3, [954]=50, [955]=37, + [961]=2, [964]=12, [966]=87, [967]=1050, [968]=20, [973]=250, + [974]=75, [975]=187, [976]=625, [980]=750, [983]=21, [985]=550, + [986]=50, [989]=75, [992]=125, [994]=2425, [997]=3, [1002]=1675, + [1004]=2000, [1008]=144, [1009]=490, [1010]=99, [1011]=80, [1015]=24, + [1017]=100, [1029]=20, [1030]=187, [1031]=20, [1032]=87, [1033]=625, + [1034]=1000, [1035]=187, [1036]=450, [1037]=75, [1038]=87, [1048]=325, + [1049]=150, [1052]=325, [1053]=225, [1057]=450, [1058]=550, [1061]=1500, + [1063]=1500, [1072]=62, [1074]=491, [1076]=650, [1077]=25, [1080]=78, + [1081]=50, [1082]=150, [1084]=50, [1085]=1050, [1086]=150, [1087]=10, + [1088]=225, [1089]=325, [1090]=75, [1091]=20, [1092]=10, [1093]=1000, + [1095]=550, [1096]=75, [1100]=225, [1101]=2750, [1102]=75, [1105]=4500, + [1108]=725, [1109]=2000, [1111]=50, [1112]=150, [1116]=1250, [1117]=2, + [1119]=50, [1121]=1075, [1127]=25, [1131]=1136, [1132]=0, [1134]=0, + [1136]=550, [1138]=10, [1139]=2425, [1141]=20, [1144]=3250, [1149]=750, + [1150]=20, [1151]=225, [1154]=102, [1155]=5954, [1156]=812, [1158]=146, + [1159]=32, [1161]=25, [1166]=16, [1167]=96, [1168]=42296, [1169]=18815, + [1171]=55, [1172]=968, [1173]=52, [1175]=28, [1176]=32, [1177]=3, + [1178]=7, [1179]=6, [1180]=37, [1181]=25, [1182]=44, [1183]=29, + [1187]=1081, [1189]=625, [1190]=630, [1191]=82, [1193]=355, [1194]=20, + [1195]=47, [1196]=442, [1197]=533, [1198]=535, [1200]=16, [1201]=94, + [1202]=367, [1203]=23505, [1204]=12577, [1205]=25, [1206]=400, [1207]=9892, + [1210]=250, [1211]=347, [1212]=21, [1213]=87, [1214]=930, [1215]=469, + [1216]=1197, [1218]=2064, [1219]=823, [1220]=1807, [1222]=14, [1224]=1325, + [1228]=50, [1229]=550, [1231]=25, [1232]=75, [1238]=50, [1239]=1675, + [1243]=150, [1244]=1050, [1245]=75, [1246]=325, [1250]=1675, [1251]=10, + [1262]=111, [1263]=79064, [1264]=3671, [1265]=11774, [1270]=213, [1273]=1656, + [1274]=8, [1275]=1668, [1276]=2220, [1280]=3696, [1282]=2825, [1287]=703, + [1288]=185, [1292]=3300, [1296]=1681, [1297]=2038, [1299]=390, [1300]=1854, + [1302]=262, [1303]=418, [1304]=279, [1306]=352, [1310]=715, [1314]=362, + [1315]=13000, [1317]=3500, [1318]=3066, [1319]=462, [1322]=68, [1326]=10, + [1328]=550, [1332]=225, [1334]=75, [1339]=50, [1341]=10, [1351]=768, + [1352]=200, [1355]=251, [1359]=19, [1360]=42, [1364]=8, [1366]=2, + [1367]=2, [1368]=2, [1369]=4, [1370]=2, [1372]=2, [1374]=3, + [1376]=4, [1377]=1, [1378]=1, [1380]=4, [1382]=24, [1383]=25, + [1384]=11, [1386]=32, [1387]=1578, [1388]=14, [1389]=58, [1391]=1392, + [1394]=740, [1395]=1, [1396]=1, [1399]=12, [1400]=337, [1401]=14, + [1402]=162, [1404]=10306, [1405]=1184, [1406]=2079, [1411]=68, [1412]=49, + [1413]=55, [1414]=97, [1415]=72, [1416]=72, [1417]=65, [1418]=9, + [1419]=19, [1420]=18, [1421]=28, [1422]=6, [1423]=18, [1425]=37, + [1427]=29, [1429]=7, [1430]=7, [1431]=20, [1433]=14, [1434]=43, + [1436]=458, [1438]=70, [1440]=1230, [1443]=21125, [1445]=583, [1446]=568, + [1447]=22775, [1448]=405, [1449]=1875, [1450]=10, [1454]=3937, [1455]=2931, + [1457]=1850, [1458]=2623, [1459]=2380, [1460]=1768, [1461]=3387, [1462]=1306, + [1464]=71, [1465]=9824, [1468]=28, [1469]=1180, [1470]=875, [1473]=1497, + [1475]=82, [1476]=6, [1477]=87, [1478]=62, [1479]=47, [1480]=954, + [1481]=3337, [1482]=2964, [1483]=2025, [1484]=2922, [1485]=1410, [1486]=1202, + [1488]=3379, [1489]=1553, [1490]=8910, [1491]=2207, [1493]=3922, [1495]=58, + [1497]=71, [1498]=57, [1499]=51, [1501]=80, [1502]=60, [1503]=109, + [1504]=32, [1505]=48, [1506]=51, [1507]=123, [1509]=59, [1510]=150, + [1511]=193, [1512]=194, [1513]=293, [1514]=294, [1515]=196, [1516]=237, + [1520]=71, [1521]=19205, [1522]=10224, [1523]=10261, [1529]=700, [1534]=1050, + [1536]=2425, [1537]=62, [1539]=1572, [1547]=2795, [1554]=225, [1557]=918, + [1559]=325, [1560]=513, [1561]=268, [1566]=1132, [1567]=2425, [1568]=2000, + [1571]=1675, [1574]=725, [1588]=1050, [1589]=1750, [1591]=1325, [1597]=750, + [1602]=11685, [1603]=5000, [1604]=19463, [1607]=43420, [1608]=18940, [1613]=19139, + [1619]=2000, [1623]=5000, [1624]=6172, [1625]=14754, [1630]=66, [1639]=28460, + [1640]=15637, [1641]=550, [1645]=100, [1648]=3250, [1651]=3750, [1652]=5000, + [1657]=1675, [1658]=1675, [1659]=2136, [1664]=14695, [1676]=750, [1677]=10093, + [1678]=4581, [1679]=9635, [1680]=18234, [1681]=450, [1685]=6250, [1686]=733, + [1687]=243, [1688]=806, [1696]=606, [1697]=445, [1701]=376, [1702]=320, + [1703]=81, [1705]=600, [1706]=86, [1707]=62, [1708]=50, [1710]=125, + [1711]=75, [1712]=62, [1713]=5350, [1714]=2535, [1715]=10301, [1716]=5067, + [1717]=3108, [1718]=8040, [1720]=26209, [1721]=35815, [1722]=19407, [1725]=5000, + [1726]=12183, [1727]=4562, [1728]=87008, [1729]=500, [1730]=48, [1731]=92, + [1732]=73, [1733]=88, [1734]=39, [1735]=89, [1737]=139, [1738]=147, + [1739]=255, [1740]=97, [1741]=112, [1742]=129, [1743]=299, [1744]=260, + [1745]=198, [1746]=332, [1747]=302, [1748]=232, [1749]=396, [1750]=298, + [1751]=676, [1752]=286, [1753]=439, [1754]=359, [1755]=597, [1756]=438, + [1757]=728, [1758]=534, [1759]=732, [1760]=609, [1761]=892, [1764]=113, + [1766]=131, [1767]=101, [1768]=217, [1769]=163, [1770]=143, [1772]=247, + [1774]=281, [1775]=212, [1776]=257, [1777]=222, [1778]=337, [1780]=489, + [1782]=541, [1783]=247, [1784]=546, [1785]=464, [1786]=683, [1787]=102, + [1788]=176, [1789]=136, [1790]=93, [1791]=90, [1792]=208, [1793]=207, + [1794]=277, [1795]=235, [1796]=400, [1797]=161, [1798]=279, [1799]=211, + [1800]=479, [1801]=418, [1802]=337, [1803]=465, [1804]=478, [1805]=351, + [1806]=466, [1807]=387, [1808]=856, [1809]=440, [1810]=648, [1811]=451, + [1812]=452, [1813]=522, [1814]=603, [1815]=366, [1816]=486, [1817]=501, + [1818]=1221, [1819]=768, [1820]=963, [1821]=988, [1822]=1096, [1823]=779, + [1824]=1104, [1825]=1548, [1826]=1765, [1827]=1282, [1828]=1609, [1829]=1563, + [1830]=1783, [1831]=1790, [1832]=362, [1835]=6, [1836]=6, [1839]=36, + [1840]=37, [1843]=145, [1844]=145, [1845]=175, [1846]=176, [1849]=277, + [1850]=278, [1851]=1785, [1852]=336, [1853]=338, [1877]=325, [1882]=325, + [1886]=75, [1893]=1775, [1895]=3, [1896]=3, [1897]=3, [1899]=3, + [1900]=3, [1901]=3, [1902]=3, [1903]=3, [1904]=3, [1905]=3, + [1906]=3, [1907]=3, [1908]=4, [1909]=3, [1910]=3, [1911]=3, + [1913]=148, [1917]=251, [1925]=787, [1926]=687, [1927]=690, [1928]=995, + [1929]=434, [1930]=408, [1933]=905, [1934]=731, [1935]=2974, [1936]=1113, + [1937]=1700, [1938]=1962, [1939]=168, [1941]=203, [1942]=316, [1943]=713, + [1944]=259, [1945]=267, [1951]=1258, [1955]=1573, [1957]=1, [1958]=975, + [1959]=1223, [1961]=1, [1965]=36, [1970]=120, [1973]=4618, [1974]=464, + [1975]=5744, [1976]=6340, [1978]=980, [1979]=23273, [1980]=6200, [1981]=14113, + [1982]=29513, [1983]=4, [1984]=2, [1985]=2, [1986]=14861, [1988]=2852, + [1990]=10077, [1991]=8357, [1992]=5468, [1993]=2100, [1994]=16696, [1996]=1720, + [1997]=2538, [1998]=7239, [2000]=8827, [2011]=3840, [2013]=3644, [2014]=4869, + [2015]=4443, [2016]=1769, [2017]=895, [2018]=3269, [2020]=1049, [2021]=1025, + [2023]=2, [2024]=1215, [2025]=1060, [2026]=1257, [2027]=763, [2028]=1013, + [2029]=883, [2030]=1108, [2032]=1665, [2033]=967, [2034]=1035, [2035]=2300, + [2036]=258, [2037]=469, [2039]=750, [2040]=15296, [2041]=1412, [2042]=3639, + [2043]=10209, [2044]=8826, [2046]=2461, [2047]=25, [2048]=25, [2051]=1, + [2052]=1, [2053]=1, [2054]=16, [2055]=16, [2056]=92, [2057]=16, + [2058]=4197, [2059]=863, [2064]=191, [2065]=113, [2066]=81, [2067]=186, + [2069]=121, [2070]=1, [2072]=4414, [2073]=742, [2074]=1054, [2075]=386, + [2077]=5059, [2078]=1070, [2079]=933, [2080]=6590, [2082]=250, [2084]=5709, + [2085]=15, [2087]=252, [2088]=729, [2089]=1113, [2090]=1580, [2091]=213, + [2092]=7, [2098]=3020, [2099]=45040, [2100]=24539, [2101]=1, [2102]=1, + [2105]=1, [2108]=8, [2109]=14, [2110]=6, [2112]=54, [2114]=31, + [2117]=7, [2119]=4, [2120]=10, [2121]=10, [2122]=6, [2123]=9, + [2124]=6, [2125]=6, [2126]=11, [2127]=12, [2128]=20, [2129]=15, + [2130]=10, [2131]=10, [2132]=20, [2133]=15, [2134]=16, [2137]=24, + [2138]=38, [2139]=11, [2140]=323, [2141]=1044, [2142]=524, [2143]=788, + [2144]=527, [2145]=529, [2146]=961, [2147]=3, [2148]=581, [2149]=879, + [2150]=586, [2151]=588, [2152]=1181, [2153]=1185, [2156]=615, [2158]=413, + [2159]=829, [2160]=832, [2163]=46710, [2164]=27031, [2165]=45, [2166]=810, + [2167]=339, [2168]=469, [2169]=943, [2172]=7, [2173]=6, [2175]=2683, + [2176]=4, [2177]=4, [2178]=3, [2179]=3, [2180]=3, [2181]=3, + [2182]=3, [2183]=3, [2184]=3, [2186]=6, [2194]=3276, [2195]=25, + [2196]=2, [2197]=540, [2198]=2, [2199]=2, [2200]=2, [2201]=2, + [2202]=2, [2203]=1492, [2204]=1133, [2205]=3961, [2207]=478, [2208]=730, + [2209]=1423, [2210]=3, [2211]=7, [2212]=16, [2213]=24, [2214]=182, + [2215]=81, [2216]=210, [2217]=243, [2218]=501, [2219]=457, [2220]=519, + [2221]=910, [2222]=1005, [2224]=24, [2225]=183, [2226]=4117, [2227]=4133, + [2230]=714, [2231]=4386, [2232]=812, [2233]=1690, [2234]=1806, [2235]=1281, + [2236]=3386, [2237]=75, [2238]=60, [2240]=151, [2241]=615, [2243]=70554, + [2244]=51857, [2245]=27636, [2246]=30000, [2249]=91, [2251]=12, [2254]=506, + [2256]=2996, [2257]=188, [2258]=83, [2259]=75, [2260]=106, [2262]=8746, + [2263]=2619, [2264]=1957, [2265]=477, [2266]=479, [2267]=711, [2268]=146, + [2271]=3255, [2273]=436, [2274]=289, [2276]=4093, [2277]=3620, [2278]=2326, + [2280]=4023, [2281]=300, [2282]=139, [2283]=140, [2284]=211, [2287]=6, + [2289]=87, [2290]=75, [2291]=44580, [2292]=1334, [2295]=70, [2296]=50, + [2299]=8756, [2300]=192, [2302]=29, [2303]=71, [2304]=15, [2307]=385, + [2308]=267, [2309]=268, [2310]=112, [2311]=150, [2312]=181, [2313]=200, + [2314]=1356, [2315]=547, [2316]=561, [2317]=689, [2318]=15, [2319]=50, + [2320]=2, [2321]=25, [2324]=6, [2325]=250, [2326]=29, [2327]=36, + [2361]=9, [2362]=1, [2364]=59, [2366]=59, [2367]=44, [2369]=30, + [2370]=75, [2371]=37, [2372]=68, [2373]=51, [2374]=34, [2375]=34, + [2376]=89, [2377]=89, [2379]=15, [2380]=7, [2381]=15, [2383]=11, + [2384]=7, [2385]=7, [2386]=15, [2387]=7, [2388]=15, [2389]=11, + [2390]=7, [2391]=7, [2392]=82, [2393]=41, [2394]=83, [2395]=64, + [2396]=43, [2397]=43, [2398]=86, [2399]=43, [2400]=87, [2401]=66, + [2402]=43, [2403]=44, [2406]=25, [2407]=162, [2408]=125, [2409]=350, + [2410]=1, [2411]=0, [2413]=0, [2414]=0, [2417]=3134, [2418]=3146, + [2419]=1578, [2420]=2387, [2421]=1590, [2422]=1596, [2423]=8554, [2424]=4292, + [2425]=8615, [2426]=6513, [2427]=4029, [2428]=4044, [2429]=2027, [2431]=2043, + [2432]=1538, [2434]=1033, [2435]=5536, [2437]=5578, [2438]=4199, [2440]=2819, + [2441]=729, [2442]=1312, [2443]=3417, [2444]=9393, [2445]=686, [2446]=1236, + [2447]=10, [2448]=3231, [2449]=20, [2450]=25, [2451]=8725, [2452]=15, + [2453]=25, [2454]=20, [2455]=10, [2456]=15, [2457]=15, [2458]=15, + [2459]=25, [2460]=25, [2463]=2739, [2464]=1374, [2465]=2495, [2467]=1886, + [2468]=1262, [2469]=1266, [2470]=6790, [2471]=3408, [2472]=6842, [2473]=5150, + [2474]=3446, [2475]=3459, [2479]=21, [2480]=14, [2481]=17, [2482]=11, + [2483]=14, [2484]=17, [2485]=10, [2486]=13, [2487]=20, [2488]=107, + [2489]=68, [2490]=108, [2491]=96, [2492]=56, [2493]=140, [2494]=80, + [2495]=100, [2496]=80, [2497]=142, [2498]=81, [2499]=143, [2500]=58, + [2501]=144, [2502]=59, [2503]=103, [2504]=5, [2505]=12, [2506]=57, + [2507]=350, [2508]=5, [2509]=82, [2510]=8, [2511]=264, [2512]=0, + [2515]=0, [2516]=0, [2519]=0, [2520]=4925, [2521]=6179, [2522]=4509, + [2523]=5657, [2524]=3838, [2525]=5297, [2526]=3867, [2527]=5871, [2528]=10367, + [2529]=13006, [2530]=10443, [2531]=11233, [2532]=10521, [2533]=12221, [2534]=9086, + [2535]=12311, [2540]=53622, [2541]=53622, [2545]=1796, [2546]=55, [2547]=7, + [2549]=5016, [2550]=1, [2551]=1, [2552]=1, [2553]=25, [2555]=40, + [2556]=40, [2557]=4, [2558]=3, [2559]=4, [2562]=575, [2564]=6817, + [2565]=3113, [2566]=1322, [2567]=2509, [2568]=31, [2569]=87, [2570]=11, + [2571]=16, [2572]=99, [2575]=25, [2576]=75, [2577]=75, [2578]=224, + [2579]=37, [2580]=67, [2581]=20, [2582]=358, [2583]=359, [2584]=253, + [2585]=638, [2586]=1, [2587]=200, [2589]=13, [2590]=5, [2591]=5, + [2592]=33, [2593]=37, [2594]=375, [2595]=500, [2596]=30, [2598]=30, + [2601]=100, [2604]=12, [2605]=25, [2608]=63, [2612]=32, [2613]=121, + [2614]=232, [2615]=1018, [2616]=531, [2617]=2198, [2618]=5327, [2620]=3013, + [2621]=2357, [2622]=2603, [2623]=3554, [2624]=3852, [2632]=605, [2633]=25, + [2635]=16, [2642]=33, [2643]=28, [2644]=11, [2645]=11, [2646]=31, + [2648]=58, [2649]=1, [2650]=3, [2651]=3, [2652]=7, [2653]=3, + [2654]=2, [2656]=9, [2657]=875, [2662]=8750, [2663]=8750, [2664]=1073, + [2665]=5, [2672]=4, [2673]=10, [2674]=12, [2675]=11, [2677]=15, + [2678]=0, [2679]=5, [2680]=10, [2681]=6, [2682]=25, [2683]=25, + [2684]=20, [2685]=75, [2686]=12, [2687]=25, [2688]=12, [2690]=7, + [2691]=10, [2692]=10, [2693]=20, [2694]=539, [2695]=3, [2697]=100, + [2698]=100, [2699]=200, [2700]=100, [2701]=400, [2703]=2, [2704]=2, + [2705]=2, [2706]=2, [2707]=2, [2708]=2, [2709]=2, [2710]=2, + [2711]=3, [2714]=238, [2715]=3, [2716]=2, [2717]=2, [2718]=2, + [2721]=1982, [2723]=12, [2725]=375, [2728]=375, [2730]=375, [2732]=375, + [2734]=375, [2735]=375, [2738]=375, [2740]=375, [2742]=375, [2744]=375, + [2745]=375, [2748]=375, [2749]=375, [2750]=375, [2751]=375, [2754]=13, + [2763]=240, [2764]=440, [2765]=811, [2766]=1564, [2770]=5, [2771]=25, + [2772]=150, [2773]=39, [2774]=28, [2775]=75, [2776]=500, [2777]=146, + [2778]=147, [2780]=374, [2781]=335, [2782]=751, [2783]=590, [2785]=1062, + [2786]=1173, [2787]=10, [2798]=25, [2799]=67, [2800]=1525, [2801]=104729, + [2802]=1625, [2805]=2352, [2807]=2452, [2808]=2364, [2809]=3, [2810]=3, + [2813]=3, [2815]=19778, [2816]=7324, [2817]=201, [2818]=363, [2819]=3830, + [2820]=4662, [2821]=1117, [2822]=1402, [2823]=1618, [2824]=32032, [2825]=14722, + [2827]=3, [2835]=2, [2836]=15, [2838]=60, [2840]=10, [2841]=50, + [2842]=100, [2844]=106, [2845]=109, [2847]=110, [2848]=1119, [2849]=1269, + [2850]=1439, [2851]=56, [2852]=67, [2853]=17, [2854]=373, [2857]=312, + [2862]=3, [2863]=10, [2864]=630, [2865]=962, [2866]=1312, [2867]=629, + [2868]=807, [2869]=1831, [2870]=2935, [2871]=40, [2877]=8524, [2878]=5143, + [2879]=3121, [2880]=25, [2881]=150, [2882]=300, [2883]=375, [2886]=5, + [2887]=5, [2888]=10, [2889]=60, [2890]=5, [2892]=30, [2893]=55, + [2894]=12, [2895]=12, [2896]=25, [2898]=32, [2899]=169, [2900]=89, + [2901]=16, [2902]=1305, [2903]=515, [2904]=595, [2905]=53, [2906]=1810, + [2907]=1755, [2908]=1409, [2910]=1257, [2911]=524, [2912]=6731, [2913]=1153, + [2915]=55289, [2916]=4405, [2917]=665, [2919]=1000, [2920]=50, [2921]=125, + [2922]=250, [2923]=500, [2924]=16, [2927]=50, [2928]=5, [2929]=2, + [2930]=12, [2931]=25, [2932]=50, [2933]=3750, [2934]=7, [2940]=43, + [2941]=3552, [2942]=3663, [2943]=537, [2946]=20, [2947]=10, [2949]=1039, + [2950]=3476, [2951]=656, [2953]=2321, [2954]=2485, [2955]=3449, [2957]=119, + [2958]=94, [2959]=32, [2960]=21, [2961]=155, [2962]=120, [2963]=41, + [2964]=36, [2965]=189, [2966]=146, [2967]=66, [2968]=33, [2969]=381, + [2970]=333, [2971]=108, [2972]=72, [2973]=484, [2974]=392, [2975]=128, + [2976]=171, [2977]=476, [2978]=415, [2979]=157, [2980]=209, [2981]=648, + [2982]=565, [2983]=280, [2984]=215, [2985]=822, [2986]=718, [2987]=408, + [2988]=314, [2989]=1001, [2990]=933, [2991]=705, [2992]=408, [2996]=40, + [2997]=100, [3000]=119, [3002]=1000, [3003]=50, [3004]=125, [3005]=250, + [3006]=500, [3008]=43, [3010]=101, [3011]=2846, [3012]=50, [3013]=25, + [3018]=781, [3019]=423, [3020]=2655, [3021]=2421, [3022]=1085, [3023]=754, + [3024]=1419, [3025]=3695, [3026]=762, [3027]=1269, [3028]=3086, [3030]=0, + [3033]=0, [3034]=0, [3036]=515, [3037]=4814, [3039]=1610, [3040]=940, + [3041]=3769, [3042]=4577, [3044]=3, [3045]=1573, [3047]=1052, [3048]=1919, + [3049]=2119, [3053]=2140, [3055]=1526, [3056]=1532, [3057]=903, [3058]=682, + [3065]=658, [3066]=497, [3067]=1275, [3069]=1412, [3070]=11, [3071]=231, + [3072]=1207, [3073]=1211, [3074]=476, [3075]=15073, [3076]=636, [3078]=2314, + [3079]=297, [3087]=11, [3088]=1050, [3089]=325, [3090]=10, [3091]=225, + [3092]=2750, [3093]=1325, [3094]=225, [3095]=1050, [3096]=150, [3097]=75, + [3098]=1750, [3099]=5000, [3100]=2025, [3101]=5000, [3102]=2025, [3103]=466, + [3107]=45, [3108]=90, [3111]=10, [3113]=20, [3114]=1250, [3115]=1675, + [3116]=150, [3118]=5000, [3119]=2425, [3120]=1050, [3121]=3250, [3122]=550, + [3123]=1325, [3124]=2425, [3125]=187, [3126]=250, [3127]=750, [3129]=1675, + [3130]=1250, [3131]=20, [3132]=2425, [3133]=2000, [3134]=20, [3135]=45, + [3137]=90, [3138]=725, [3139]=3250, [3140]=625, [3141]=225, [3142]=187, + [3143]=50, [3144]=450, [3146]=1750, [3151]=87, [3152]=28, [3153]=33, + [3154]=1094, [3158]=60, [3160]=470, [3161]=294, [3164]=33, [3166]=407, + [3167]=68, [3168]=5, [3169]=18, [3170]=47, [3171]=6, [3172]=18, + [3173]=15, [3174]=16, [3175]=100, [3176]=75, [3177]=50, [3179]=125, + [3180]=168, [3181]=23, [3182]=387, [3184]=1394, [3185]=8088, [3186]=4436, + [3187]=14870, [3188]=879, [3189]=99, [3190]=99, [3191]=3857, [3192]=495, + [3193]=2072, [3194]=2495, [3195]=1372, [3196]=1377, [3197]=9295, [3198]=2741, + [3199]=2262, [3200]=19, [3201]=4496, [3202]=584, [3203]=5436, [3204]=751, + [3205]=229, [3206]=4582, [3207]=87, [3208]=25378, [3209]=6783, [3210]=5626, + [3211]=373, [3212]=929, [3213]=89, [3214]=33, [3216]=55, [3217]=134, + [3220]=40, [3222]=1203, [3223]=306, [3224]=28, [3225]=109, [3227]=2633, + [3228]=1098, [3229]=424, [3230]=768, [3231]=1266, [3233]=212, [3235]=412, + [3239]=3, [3240]=10, [3241]=40, [3259]=5, [3260]=6, [3261]=7, + [3262]=10, [3263]=4, [3267]=25, [3268]=25, [3269]=25, [3270]=10, + [3272]=13, [3273]=15, [3274]=7, [3275]=5, [3276]=15, [3277]=30, + [3278]=1720, [3279]=105, [3280]=33, [3281]=56, [3282]=235, [3283]=295, + [3284]=88, [3285]=36, [3286]=59, [3287]=199, [3288]=250, [3289]=57, + [3290]=48, [3291]=202, [3292]=203, [3293]=11, [3294]=11, [3295]=10, + [3296]=10, [3299]=48, [3300]=9, [3301]=102, [3302]=319, [3303]=70, + [3304]=106, [3305]=492, [3306]=653, [3307]=215, [3308]=144, [3309]=333, + [3310]=442, [3311]=152, [3312]=70, [3313]=519, [3314]=171, [3315]=454, + [3319]=110, [3320]=22, [3321]=41, [3322]=11, [3323]=15, [3324]=1119, + [3325]=140, [3326]=3, [3327]=141, [3328]=46, [3329]=179, [3330]=281, + [3331]=101, [3332]=48, [3334]=68, [3335]=46, [3336]=3986, [3340]=31, + [3341]=1621, [3342]=137, [3343]=450, [3344]=145, [3345]=2720, [3346]=3, + [3350]=2, [3351]=2, [3352]=1250, [3355]=50, [3356]=30, [3357]=75, + [3358]=175, [3360]=625, [3361]=3, [3362]=2, [3363]=1, [3364]=3, + [3365]=3, [3366]=3, [3367]=2, [3368]=2, [3369]=25, [3370]=10, + [3371]=1, [3372]=10, [3373]=14, [3374]=45, [3375]=30, [3376]=86, + [3377]=99, [3378]=132, [3379]=152, [3380]=365, [3381]=303, [3382]=10, + [3383]=100, [3384]=20, [3385]=30, [3386]=35, [3387]=30, [3388]=40, + [3389]=40, [3390]=35, [3391]=20, [3392]=1663, [3393]=250, [3394]=250, + [3395]=250, [3396]=250, [3399]=81, [3400]=2761, [3401]=81, [3402]=602, + [3403]=321, [3404]=181, [3413]=3229, [3414]=4028, [3415]=3598, [3416]=2213, + [3417]=4629, [3419]=125, [3420]=1250, [3421]=50, [3422]=500, [3423]=5000, + [3424]=125000, [3426]=1000, [3427]=1500, [3428]=100, [3429]=586, [3430]=11026, + [3431]=1335, [3432]=2, [3433]=2, [3434]=3, [3435]=19, [3437]=23, + [3438]=28, [3439]=30, [3440]=640, [3442]=44, [3443]=138, [3444]=90, + [3445]=226, [3446]=592, [3447]=34, [3448]=6, [3449]=207, [3450]=443, + [3451]=607, [3452]=2322, [3453]=46, [3454]=105, [3455]=188, [3456]=6375, + [3457]=444, [3458]=334, [3461]=1005, [3462]=2283, [3463]=9, [3464]=8, + [3465]=9, [3466]=500, [3469]=49, [3470]=5, [3471]=142, [3472]=182, + [3473]=299, [3474]=216, [3475]=26018, [3478]=10, [3480]=319, [3481]=1284, + [3482]=1317, [3483]=965, [3484]=1767, [3485]=1295, [3486]=100, [3487]=1498, + [3488]=613, [3489]=937, [3490]=2731, [3491]=2741, [3492]=4552, [3493]=3426, + [3494]=2, [3511]=267, [3522]=2, [3526]=1, [3527]=2, [3528]=1, + [3529]=1, [3530]=28, [3531]=57, [3533]=1, [3535]=1, [3536]=1, + [3537]=1, [3538]=1, [3541]=1, [3542]=1, [3545]=1, [3546]=1, + [3547]=1, [3555]=1032, [3556]=1285, [3558]=1044, [3559]=473, [3560]=2102, + [3561]=895, [3562]=823, [3563]=557, [3565]=280, [3566]=2023, [3567]=922, + [3569]=1262, [3570]=839, [3571]=2118, [3572]=972, [3573]=212, [3574]=212, + [3575]=200, [3576]=35, [3577]=600, [3578]=339, [3581]=1046, [3582]=474, + [3583]=57, [3585]=953, [3586]=1034, [3587]=2862, [3588]=2873, [3589]=115, + [3590]=115, [3591]=419, [3592]=420, [3593]=1095, [3594]=1099, [3595]=4, + [3596]=4, [3597]=216, [3598]=217, [3599]=4, [3600]=4, [3602]=29, + [3603]=29, [3604]=500, [3605]=500, [3606]=29, [3607]=29, [3608]=500, + [3609]=25, [3610]=50, [3611]=500, [3612]=500, [3641]=15, [3642]=22, + [3643]=71, [3644]=47, [3645]=189, [3647]=433, [3648]=73, [3649]=115, + [3650]=68, [3651]=435, [3652]=364, [3653]=438, [3654]=366, [3655]=1022, + [3656]=2116, [3661]=9, [3662]=25, [3663]=125, [3664]=100, [3665]=150, + [3666]=100, [3667]=25, [3669]=195, [3670]=70, [3671]=201, [3673]=45, + [3674]=95, [3675]=56, [3676]=106, [3678]=100, [3679]=100, [3680]=400, + [3681]=400, [3682]=400, [3683]=400, [3685]=71, [3696]=2, [3699]=2, + [3702]=498, [3703]=36, [3712]=87, [3713]=40, [3719]=1027, [3722]=213, + [3723]=68, [3724]=81, [3725]=166, [3726]=125, [3727]=125, [3728]=300, + [3729]=300, [3730]=45, [3731]=55, [3732]=801, [3733]=1269, [3734]=400, + [3735]=450, [3736]=500, [3737]=550, [3738]=3439, [3739]=1250, [3740]=2452, + [3741]=922, [3742]=2862, [3743]=2451, [3747]=1092, [3748]=1304, [3749]=1320, + [3750]=2209, [3751]=2661, [3752]=745, [3753]=1635, [3754]=1492, [3755]=5447, + [3758]=1817, [3759]=1216, [3760]=1500, [3761]=3306, [3762]=1000, [3763]=6761, + [3764]=3181, [3765]=4811, [3766]=30, [3767]=23, [3769]=13, [3770]=25, + [3771]=50, [3774]=2, [3775]=13, [3776]=175, [3777]=10, [3778]=1541, + [3779]=2835, [3780]=1877, [3781]=3125, [3782]=3451, [3783]=3048, [3784]=4208, + [3785]=3650, [3786]=3957, [3787]=4289, [3788]=3000, [3789]=2000, [3790]=2000, + [3791]=3000, [3792]=521, [3793]=648, [3794]=774, [3795]=981, [3796]=493, + [3797]=1692, [3798]=902, [3799]=1460, [3800]=1068, [3801]=1031, [3802]=627, + [3803]=1086, [3804]=765, [3805]=1049, [3806]=1271, [3807]=1162, [3808]=770, + [3809]=962, [3810]=1145, [3811]=1064, [3812]=971, [3813]=1772, [3814]=1891, + [3815]=1475, [3816]=2102, [3817]=1585, [3818]=125, [3819]=100, [3820]=100, + [3821]=150, [3822]=6481, [3823]=100, [3824]=150, [3825]=110, [3826]=105, + [3827]=120, [3828]=150, [3829]=150, [3830]=500, [3831]=550, [3832]=550, + [3833]=24, [3834]=32, [3835]=1771, [3836]=3053, [3837]=4405, [3840]=2571, + [3841]=3106, [3842]=2906, [3843]=3882, [3844]=5658, [3845]=6558, [3846]=3937, + [3847]=6183, [3848]=1426, [3849]=5468, [3850]=7304, [3851]=6258, [3852]=8360, + [3853]=10153, [3854]=14120, [3855]=11248, [3856]=14221, [3857]=125, [3858]=250, + [3859]=60, [3860]=400, [3861]=125, [3864]=800, [3866]=1000, [3867]=950, + [3868]=1250, [3869]=1250, [3870]=750, [3871]=850, [3872]=800, [3873]=1100, + [3874]=1100, [3875]=1250, [3882]=13, [3889]=1584, [3890]=2040, [3891]=2456, + [3892]=4388, [3893]=5504, [3894]=5997, [3899]=25, [3902]=1317, [3914]=6250, + [3927]=150, [3928]=250, [3931]=185, [3936]=985, [3937]=2018, [3938]=1189, + [3939]=2256, [3940]=1630, [3941]=2598, [3942]=2636, [3943]=2244, [3944]=2277, + [3945]=3852, [3946]=2431, [3947]=3258, [3948]=3092, [3949]=6517, [3950]=4157, + [3951]=5897, [3952]=5109, [3953]=6327, [3954]=4133, [3955]=5375, [3956]=3776, + [3957]=9216, [3958]=7649, [3959]=8843, [3961]=1503, [3962]=3079, [3963]=1402, + [3964]=2127, [3965]=2221, [3966]=2625, [3967]=2903, [3968]=3331, [3969]=3256, + [3970]=4296, [3971]=3811, [3972]=3891, [3973]=3657, [3974]=5486, [3975]=3896, + [3976]=6978, [3977]=4738, [3978]=9560, [3979]=5802, [3980]=6844, [3981]=6137, + [3982]=11175, [3983]=260, [3984]=10209, [3986]=5332, [3987]=6837, [3988]=12924, + [3989]=3154, [3990]=8237, [3991]=15134, [3992]=3082, [3993]=4940, [3994]=4404, + [3995]=6284, [3996]=4659, [3997]=7929, [3998]=5656, [3999]=7109, [4000]=1797, + [4001]=3170, [4002]=2463, [4003]=4090, [4004]=2357, [4005]=3477, [4006]=2434, + [4007]=3696, [4008]=5494, [4009]=9161, [4010]=6409, [4011]=10687, [4012]=6781, + [4013]=11759, [4014]=11349, [4015]=10747, [4017]=6910, [4018]=6372, [4019]=8336, + [4020]=11189, [4021]=7198, [4022]=12059, [4023]=6215, [4024]=9821, [4025]=5070, + [4026]=4362, [4030]=4000, [4031]=4000, [4032]=5000, [4033]=5000, [4035]=1988, + [4036]=681, [4037]=1821, [4038]=3562, [4039]=2215, [4040]=1347, [4041]=3149, + [4042]=2107, [4043]=1958, [4044]=4584, [4045]=2683, [4046]=6783, [4047]=3959, + [4048]=1767, [4049]=888, [4050]=2374, [4051]=1669, [4052]=2699, [4054]=3625, + [4055]=2481, [4057]=4032, [4058]=6056, [4059]=2233, [4060]=5648, [4061]=3306, + [4062]=8359, [4063]=3596, [4064]=2987, [4065]=5311, [4066]=4845, [4067]=6381, + [4068]=6918, [4069]=11900, [4070]=7527, [4071]=2939, [4072]=1340, [4073]=2230, + [4074]=4785, [4075]=1984, [4076]=3301, [4077]=3298, [4078]=4672, [4079]=6753, + [4080]=7469, [4082]=11699, [4083]=4328, [4084]=10136, [4086]=6386, [4087]=8722, + [4088]=18523, [4089]=15060, [4090]=20736, [4091]=22479, [4092]=1296, [4093]=713, + [4096]=608, [4097]=305, [4099]=1131, [4100]=23, [4101]=26, [4102]=33, + [4107]=2136, [4108]=5403, [4109]=4393, [4110]=11999, [4111]=12042, [4112]=4182, + [4113]=4853, [4114]=5826, [4115]=5783, [4116]=12337, [4117]=3119, [4118]=7313, + [4119]=7271, [4120]=5031, [4121]=1380, [4122]=8384, [4123]=3804, [4124]=3991, + [4125]=3142, [4126]=6396, [4127]=8073, [4128]=14587, [4129]=9444, [4130]=2171, + [4131]=3815, [4132]=2681, [4133]=1794, [4134]=26994, [4135]=1130, [4136]=6021, + [4137]=4010, [4138]=10140, [4139]=2749, [4140]=1875, [4141]=20, [4142]=750, + [4143]=26994, [4144]=2000, [4145]=2025, [4146]=5000, [4147]=1050, [4148]=1325, + [4149]=3000, [4150]=2425, [4151]=725, [4152]=2750, [4153]=1325, [4154]=5000, + [4155]=5000, [4157]=125, [4158]=5500, [4159]=50, [4160]=4500, [4161]=550, + [4162]=4250, [4164]=2425, [4165]=4500, [4166]=50, [4167]=5000, [4168]=450, + [4169]=1250, [4170]=2000, [4171]=1750, [4172]=3750, [4173]=1750, [4174]=3750, + [4175]=2750, [4176]=3750, [4177]=2500, [4178]=3250, [4179]=2500, [4180]=3000, + [4181]=4250, [4182]=4250, [4183]=3750, [4184]=4500, [4185]=5000, [4186]=2500, + [4187]=5000, [4188]=5000, [4189]=2750, [4190]=1025, [4194]=520, [4195]=727, + [4196]=1944, [4197]=2765, [4198]=250, [4199]=750, [4200]=1050, [4201]=2025, + [4202]=1325, [4203]=1500, [4204]=1750, [4205]=3250, [4206]=1250, [4207]=2000, + [4208]=2500, [4209]=2000, [4210]=325, [4211]=325, [4212]=2500, [4213]=2500, + [4214]=2425, [4215]=725, [4216]=5000, [4217]=3750, [4218]=1500, [4219]=5000, + [4220]=2000, [4221]=5000, [4223]=3750, [4225]=2025, [4226]=4500, [4228]=1050, + [4230]=2750, [4231]=110, [4232]=125, [4233]=200, [4234]=150, [4235]=200, + [4236]=225, [4237]=34, [4238]=200, [4239]=71, [4240]=300, [4241]=450, + [4242]=347, [4243]=461, [4244]=723, [4245]=2000, [4246]=193, [4247]=1049, + [4248]=791, [4249]=703, [4250]=705, [4251]=1199, [4252]=1457, [4253]=962, + [4254]=1071, [4255]=2366, [4256]=3477, [4257]=1311, [4258]=2055, [4259]=1934, + [4260]=2559, [4261]=31, [4262]=2652, [4263]=94, [4264]=2804, [4265]=650, + [4266]=725, [4267]=750, [4268]=1050, [4269]=2425, [4270]=2025, [4271]=2425, + [4272]=2425, [4273]=325, [4274]=3750, [4275]=4250, [4276]=2500, [4277]=3750, + [4278]=25, [4279]=3250, [4280]=1325, [4281]=2425, [4282]=3750, [4283]=5000, + [4284]=4500, [4285]=3750, [4286]=5000, [4287]=2500, [4288]=4250, [4289]=12, + [4290]=715, [4291]=125, [4292]=200, [4293]=162, [4294]=400, [4295]=375, + [4296]=525, [4297]=500, [4298]=162, [4299]=500, [4300]=700, [4301]=875, + [4302]=146, [4303]=398, [4304]=300, [4305]=600, [4306]=150, [4307]=29, + [4308]=45, [4309]=226, [4310]=180, [4311]=475, [4312]=237, [4313]=416, + [4314]=331, [4315]=896, [4316]=743, [4317]=1076, [4318]=610, [4319]=815, + [4320]=979, [4321]=1120, [4322]=1810, [4323]=1999, [4324]=1874, [4325]=2272, + [4326]=2496, [4327]=3788, [4328]=1524, [4329]=2120, [4330]=250, [4331]=526, + [4332]=500, [4333]=1200, [4334]=550, [4335]=1500, [4336]=1500, [4337]=750, + [4338]=250, [4339]=1250, [4340]=87, [4341]=125, [4342]=625, [4343]=60, + [4344]=11, [4345]=100, [4346]=100, [4347]=150, [4348]=175, [4349]=175, + [4350]=200, [4351]=225, [4352]=275, [4353]=300, [4354]=350, [4355]=375, + [4356]=375, [4357]=4, [4358]=30, [4359]=12, [4360]=60, [4361]=120, + [4362]=187, [4363]=50, [4364]=12, [4365]=75, [4366]=75, [4367]=150, + [4368]=408, [4369]=1179, [4370]=175, [4371]=200, [4372]=1800, [4373]=722, + [4374]=200, [4375]=115, [4376]=200, [4377]=150, [4378]=350, [4379]=2357, + [4380]=500, [4381]=600, [4382]=600, [4383]=3183, [4384]=1000, [4385]=1410, + [4386]=175, [4387]=400, [4388]=1000, [4389]=750, [4390]=500, [4391]=4000, + [4392]=2500, [4393]=3172, [4394]=750, [4395]=1600, [4396]=6000, [4397]=5000, + [4398]=900, [4399]=50, [4400]=500, [4401]=100, [4402]=250, [4403]=2000, + [4404]=25, [4405]=125, [4406]=600, [4407]=1200, [4408]=162, [4409]=200, + [4410]=250, [4411]=275, [4412]=375, [4413]=450, [4414]=462, [4415]=550, + [4416]=600, [4417]=675, [4419]=112, [4421]=100, [4422]=112, [4424]=100, + [4425]=125, [4426]=125, [4428]=331, [4430]=4307, [4434]=572, [4436]=331, + [4437]=1855, [4438]=1692, [4439]=1788, [4443]=3472, [4444]=1490, [4445]=2068, + [4446]=3594, [4447]=901, [4448]=1991, [4449]=3332, [4454]=3800, [4455]=3096, + [4456]=1553, [4457]=300, [4459]=150, [4460]=175, [4461]=208, [4462]=1425, + [4463]=953, [4464]=2380, [4465]=1585, [4470]=9, [4471]=33, [4474]=4207, + [4476]=2734, [4477]=4390, [4478]=10176, [4479]=178, [4480]=185, [4481]=176, + [4496]=125, [4497]=5000, [4498]=625, [4499]=25000, [4500]=8750, [4504]=2222, + [4505]=1974, [4507]=9938, [4508]=9351, [4509]=2794, [4511]=11256, [4534]=1173, + [4535]=882, [4536]=1, [4537]=6, [4538]=25, [4539]=50, [4540]=1, + [4541]=6, [4542]=25, [4543]=4098, [4544]=50, [4545]=2202, [4546]=533, + [4547]=8319, [4548]=15028, [4549]=2092, [4550]=2092, [4552]=530, [4553]=411, + [4554]=708, [4555]=155, [4556]=903, [4557]=225, [4558]=1565, [4560]=37, + [4561]=309, [4562]=298, [4563]=110, [4564]=610, [4565]=38, [4566]=631, + [4567]=1049, [4568]=1694, [4569]=612, [4570]=922, [4571]=979, [4575]=1487, + [4576]=1184, [4577]=356, [4580]=787, [4581]=862, [4582]=745, [4583]=812, + [4584]=937, [4585]=583, [4586]=713, [4587]=807, [4588]=900, [4589]=530, + [4590]=655, [4591]=413, [4592]=1, [4593]=4, [4594]=6, [4595]=75, + [4596]=25, [4597]=250, [4598]=212, [4599]=100, [4600]=85, [4601]=100, + [4602]=100, [4603]=4, [4604]=1, [4605]=6, [4606]=25, [4607]=50, + [4608]=100, [4609]=250, [4611]=50, [4616]=3, [4623]=375, [4624]=550, + [4625]=250, [4632]=50, [4633]=70, [4634]=87, [4636]=110, [4637]=150, + [4638]=200, [4639]=162, [4643]=2748, [4652]=10126, [4653]=7178, [4655]=71, + [4656]=1, [4658]=23, [4659]=23, [4660]=324, [4661]=929, [4662]=24, + [4663]=23, [4665]=22, [4666]=26, [4668]=32, [4669]=41, [4671]=32, + [4672]=28, [4674]=32, [4675]=35, [4676]=278, [4677]=70, [4678]=108, + [4680]=91, [4681]=109, [4683]=92, [4684]=61, [4686]=67, [4687]=67, + [4689]=106, [4690]=71, [4692]=68, [4693]=86, [4694]=515, [4695]=327, + [4696]=5537, [4697]=435, [4698]=301, [4699]=221, [4700]=379, [4701]=252, + [4704]=3, [4705]=1449, [4706]=687, [4707]=881, [4708]=461, [4709]=982, + [4710]=561, [4711]=1112, [4712]=1228, [4713]=926, [4714]=681, [4715]=1026, + [4716]=1658, [4717]=2014, [4718]=2223, [4719]=1676, [4720]=1234, [4721]=2809, + [4722]=2118, [4723]=1703, [4724]=1763, [4725]=4736, [4726]=2340, [4727]=2791, + [4729]=3036, [4731]=3824, [4732]=2632, [4733]=7957, [4734]=4208, [4735]=3621, + [4736]=2616, [4737]=5743, [4738]=3294, [4741]=5438, [4743]=5430, [4744]=1986, + [4745]=3230, [4746]=4324, [4750]=4, [4756]=5, [4757]=4, [4763]=135, + [4765]=575, [4766]=481, [4767]=139, [4768]=139, [4771]=264, [4772]=70, + [4775]=28, [4776]=41, [4777]=1408, [4778]=1470, [4779]=13, [4780]=56, + [4781]=547, [4782]=415, [4784]=360, [4785]=469, [4786]=278, [4787]=577, + [4788]=526, [4789]=399, [4790]=831, [4791]=133, [4792]=655, [4793]=744, + [4794]=703, [4795]=705, [4796]=708, [4797]=852, [4798]=1166, [4799]=608, + [4800]=1221, [4810]=3351, [4813]=33, [4814]=6, [4816]=1503, [4817]=2462, + [4818]=2854, [4820]=1664, [4821]=1308, [4822]=1349, [4824]=3371, [4825]=4094, + [4826]=3087, [4827]=749, [4828]=684, [4829]=830, [4830]=1894, [4831]=1571, + [4832]=2099, [4833]=1731, [4835]=2110, [4836]=2000, [4837]=2000, [4838]=2000, + [4840]=142, [4852]=300, [4860]=741, [4861]=119, [4865]=5, [4867]=8, + [4872]=95, [4873]=15, [4874]=46, [4875]=13, [4876]=78, [4877]=10, + [4878]=56, [4879]=7, [4880]=86, [4906]=21, [4907]=13, [4908]=6, + [4909]=368, [4910]=7, [4911]=15, [4913]=7, [4914]=5, [4915]=7, + [4916]=9, [4917]=14, [4919]=5, [4920]=7, [4921]=12, [4922]=15, + [4923]=25, [4924]=25, [4925]=25, [4928]=20, [4929]=58, [4930]=250, + [4931]=134, [4932]=179, [4933]=48, [4935]=23, [4936]=23, [4937]=71, + [4938]=236, [4939]=395, [4940]=36, [4941]=11, [4942]=89, [4944]=72, + [4945]=37, [4946]=67, [4947]=325, [4948]=326, [4949]=1706, [4950]=780, + [4951]=13, [4952]=63, [4953]=88, [4954]=6, [4957]=250, [4958]=36, + [4959]=1, [4960]=12, [4961]=183, [4962]=20, [4963]=30, [4964]=503, + [4965]=149, [4967]=116, [4968]=90, [4969]=42, [4970]=54, [4971]=383, + [4972]=64, [4973]=35, [4974]=388, [4975]=6477, [4976]=5486, [4977]=11893, + [4978]=7976, [4979]=2587, [4980]=2209, [4981]=1000, [4982]=961, [4983]=16837, + [4984]=5630, [4987]=15584, [4988]=3657, [4989]=9058, [4990]=4546, [4991]=2, + [4993]=2, [4994]=2, [4998]=837, [4999]=1052, [5000]=962, [5001]=1038, + [5002]=1535, [5003]=1713, [5004]=1806, [5005]=1840, [5007]=1632, [5008]=1546, + [5009]=1696, [5010]=1803, [5011]=1912, [5013]=38, [5016]=2955, [5020]=3, + [5024]=10, [5028]=5537, [5029]=5282, [5042]=12, [5047]=1250, [5048]=12, + [5049]=12, [5051]=1, [5057]=1, [5060]=0, [5066]=21, [5069]=293, + [5071]=443, [5075]=25, [5079]=4642, [5081]=250, [5082]=25, [5083]=50, + [5092]=240, [5093]=247, [5094]=233, [5095]=3, [5105]=25, [5107]=139, + [5108]=1616, [5109]=223, [5110]=257, [5111]=320, [5112]=730, [5113]=250, + [5114]=96, [5115]=101, [5116]=303, [5117]=825, [5118]=71, [5119]=118, + [5120]=193, [5121]=162, [5122]=287, [5123]=117, [5124]=117, [5125]=155, + [5126]=500, [5127]=500, [5128]=202, [5129]=500, [5130]=500, [5131]=500, + [5132]=500, [5133]=300, [5134]=92, [5135]=142, [5136]=177, [5137]=217, + [5139]=20, [5140]=6, [5141]=150, [5142]=20, [5145]=87, [5147]=550, + [5148]=225, [5149]=225, [5150]=225, [5151]=1050, [5152]=725, [5153]=2425, + [5154]=1325, [5155]=75, [5156]=2425, [5158]=2425, [5160]=1675, [5163]=725, + [5172]=25, [5173]=25, [5180]=2777, [5181]=1778, [5182]=1769, [5183]=1575, + [5187]=2011, [5191]=2964, [5192]=1803, [5193]=940, [5194]=3079, [5195]=364, + [5196]=1830, [5197]=1597, [5198]=1660, [5199]=804, [5200]=2323, [5201]=3161, + [5202]=1147, [5205]=31, [5206]=37, [5207]=1081, [5208]=668, [5209]=771, + [5210]=1161, [5211]=1166, [5212]=672, [5213]=5218, [5214]=3935, [5215]=8656, + [5216]=11821, [5235]=41, [5236]=2878, [5237]=18, [5238]=7145, [5239]=7746, + [5240]=1244, [5241]=821, [5242]=623, [5243]=1312, [5244]=3465, [5245]=5091, + [5246]=3490, [5247]=7961, [5248]=6849, [5249]=8658, [5250]=2646, [5252]=1175, + [5253]=7952, [5254]=308, [5255]=685, [5256]=7227, [5257]=3159, [5258]=1, + [5259]=1, [5260]=1, [5261]=1, [5262]=1, [5263]=1, [5265]=1, + [5266]=11157, [5267]=59851, [5268]=218, [5269]=95, [5274]=1003, [5275]=175, + [5276]=7, [5277]=3, [5278]=6, [5279]=1436, [5280]=6, [5281]=6, + [5282]=2, [5283]=2, [5284]=6, [5285]=6, [5286]=2, [5287]=8, + [5288]=7, [5289]=7, [5291]=3, [5292]=2, [5293]=7, [5299]=359, + [5300]=7, [5301]=4, [5302]=929, [5303]=4, [5304]=2, [5305]=2, + [5306]=1710, [5309]=1038, [5310]=555, [5311]=601, [5312]=419, [5313]=650, + [5314]=528, [5315]=213, [5316]=1355, [5317]=1360, [5318]=1789, [5319]=323, + [5320]=372, [5321]=1484, [5322]=4016, [5323]=1632, [5324]=776, [5325]=498, + [5326]=776, [5327]=519, [5328]=205, [5329]=15, [5331]=236, [5332]=0, + [5337]=167, [5340]=919, [5341]=368, [5342]=88, [5343]=462, [5344]=562, + [5345]=705, [5346]=425, [5347]=3142, [5351]=403, [5355]=947, [5356]=2594, + [5357]=2221, [5361]=16, [5362]=18, [5363]=20, [5364]=27, [5367]=22, + [5368]=48, [5369]=32, [5370]=37, [5371]=48, [5373]=72, [5374]=87, + [5375]=95, [5376]=66, [5377]=57, [5379]=1, [5392]=25, [5393]=32, + [5394]=6, [5395]=16, [5398]=13, [5399]=11, [5400]=17, [5401]=17, + [5402]=17, [5403]=17, [5404]=721, [5405]=7, [5419]=13, [5420]=227, + [5421]=650, [5422]=692, [5423]=2084, [5425]=419, [5426]=1686, [5427]=147, + [5428]=322, [5429]=137, [5430]=277, [5431]=155, [5432]=330, [5433]=138, + [5435]=272, [5439]=25, [5441]=250, [5443]=1067, [5444]=548, [5446]=13, + [5447]=20, [5448]=17, [5451]=22, [5457]=23, [5458]=27, [5459]=472, + [5465]=3, [5466]=8, [5467]=7, [5468]=12, [5469]=9, [5470]=28, + [5471]=30, [5472]=10, [5473]=10, [5474]=9, [5476]=3, [5477]=18, + [5478]=70, [5479]=125, [5480]=95, [5482]=10, [5483]=35, [5484]=60, + [5485]=100, [5486]=110, [5487]=200, [5488]=100, [5489]=300, [5491]=9, + [5495]=7, [5498]=200, [5500]=750, [5502]=2, [5503]=16, [5504]=22, + [5506]=71, [5507]=600, [5516]=317, [5517]=100, [5518]=150, [5523]=15, + [5524]=21, [5525]=20, [5526]=75, [5527]=95, [5528]=200, [5529]=125, + [5530]=125, [5532]=2, [5540]=2107, [5541]=3693, [5542]=370, [5543]=450, + [5565]=250, [5566]=105, [5567]=196, [5568]=4, [5569]=203, [5571]=250, + [5572]=250, [5573]=875, [5574]=875, [5575]=2500, [5576]=2500, [5577]=300, + [5578]=300, [5579]=32, [5580]=25, [5581]=32, [5586]=26, [5587]=512, + [5589]=41, [5590]=35, [5591]=67, [5592]=54, [5593]=116, [5595]=235, + [5596]=141, [5597]=2, [5598]=2, [5599]=2, [5600]=2, [5601]=22, + [5602]=63, [5603]=300, [5604]=380, [5605]=150, [5606]=23, [5608]=3463, + [5609]=447, [5610]=208, [5611]=452, [5612]=72, [5613]=2635, [5614]=6147, + [5615]=1776, [5616]=22738, [5617]=247, [5618]=86, [5622]=556, [5624]=2926, + [5626]=1717, [5627]=1379, [5629]=347, [5630]=348, [5631]=30, [5632]=85, + [5633]=150, [5634]=75, [5635]=45, [5636]=75, [5637]=75, [5640]=25, + [5641]=375, [5642]=450, [5643]=500, [5644]=10, [5647]=1000, [5648]=725, + [5649]=725, [5650]=725, [5654]=100, [5655]=0, [5656]=0, [5657]=250, + [5658]=87, [5660]=325, [5661]=1675, [5662]=3750, [5665]=0, [5666]=5000, + [5667]=1250, [5668]=0, [5670]=14750, [5671]=2500, [5672]=725, [5673]=2025, + [5674]=3750, [5676]=725, [5677]=1325, [5678]=3750, [5679]=3750, [5680]=725, + [5682]=4500, [5683]=8750, [5684]=1050, [5685]=5000, [5696]=20, [5697]=50, + [5698]=50, [5699]=250, [5700]=250, [5701]=325, [5702]=625, [5703]=750, + [5704]=750, [5705]=750, [5706]=750, [5707]=1675, [5708]=1250, [5709]=1750, + [5710]=1750, [5711]=2000, [5712]=2000, [5713]=2500, [5714]=3000, [5715]=5000, + [5716]=5000, [5719]=1050, [5720]=750, [5721]=3000, [5722]=4500, [5723]=3750, + [5724]=1050, [5725]=4250, [5726]=4250, [5727]=5000, [5728]=5000, [5729]=5000, + [5730]=10, [5739]=4935, [5740]=1, [5741]=111, [5742]=10770, [5743]=1803, + [5744]=386, [5745]=2, [5746]=2, [5747]=2, [5748]=609, [5749]=2664, + [5750]=641, [5751]=1028, [5752]=3109, [5753]=1884, [5754]=2538, [5755]=4127, + [5756]=10026, [5757]=1363, [5758]=250, [5759]=375, [5760]=500, [5761]=30, + [5762]=250, [5763]=700, [5764]=3000, [5765]=4000, [5766]=1338, [5767]=44, + [5768]=1250, [5769]=1250, [5770]=1807, [5771]=50, [5772]=125, [5773]=250, + [5774]=275, [5775]=350, [5776]=30, [5777]=30, [5778]=30, [5779]=30, + [5780]=260, [5781]=601, [5782]=3211, [5783]=2316, [5784]=75, [5785]=500, + [5786]=137, [5787]=150, [5788]=162, [5789]=700, [5812]=1129, [5813]=7087, + [5814]=2351, [5815]=5871, [5816]=405, [5817]=3226, [5818]=3239, [5819]=3201, + [5820]=1622, [5821]=900, [5822]=722, [5823]=5, [5829]=804, [5839]=1, + [5856]=3, [5857]=37, [5858]=37, [5859]=25, [5864]=0, [5870]=3, + [5871]=318, [5872]=0, [5873]=0, [5878]=92, [5936]=19, [5939]=20, + [5940]=153, [5941]=115, [5943]=840, [5944]=331, [5951]=41, [5956]=3, + [5957]=40, [5958]=829, [5961]=1089, [5962]=2794, [5963]=3151, [5964]=2609, + [5965]=2536, [5966]=2299, [5967]=209, [5968]=259, [5969]=781, [5970]=418, + [5971]=1136, [5972]=375, [5973]=162, [5974]=350, [5975]=532, [5976]=5000, + [5996]=95, [5997]=5, [6037]=1250, [6038]=312, [6039]=1250, [6040]=2497, + [6041]=1500, [6042]=250, [6043]=500, [6044]=450, [6045]=650, [6046]=950, + [6047]=1100, [6048]=100, [6049]=170, [6050]=300, [6051]=62, [6052]=300, + [6053]=200, [6054]=225, [6055]=375, [6056]=500, [6057]=500, [6058]=6, + [6059]=13, [6060]=4, [6061]=23, [6062]=28, [6063]=23, [6068]=375, + [6070]=6, [6076]=9, [6078]=15, [6084]=290, [6085]=243, [6087]=1727, + [6088]=2, [6092]=420, [6093]=4418, [6094]=1278, [6095]=688, [6096]=1, + [6097]=1, [6098]=1, [6116]=1, [6117]=1, [6118]=1, [6119]=1, + [6120]=1, [6121]=1, [6122]=1, [6123]=1, [6124]=1, [6125]=1, + [6126]=1, [6127]=1, [6129]=1, [6130]=1, [6131]=1, [6132]=250, + [6133]=225, [6134]=1, [6135]=1, [6136]=1, [6137]=1, [6138]=1, + [6139]=1, [6140]=1, [6144]=1, [6147]=37, [6148]=44, [6149]=120, + [6150]=22, [6171]=6, [6173]=7, [6174]=694, [6176]=15, [6177]=69, + [6179]=556, [6180]=423, [6182]=1, [6183]=2, [6185]=9, [6186]=1372, + [6187]=613, [6188]=305, [6189]=624, [6191]=615, [6194]=5308, [6195]=416, + [6197]=929, [6198]=1113, [6199]=650, [6200]=1223, [6201]=54, [6202]=35, + [6203]=121, [6204]=2065, [6205]=922, [6206]=555, [6211]=450, [6214]=595, + [6215]=601, [6216]=6, [6217]=24, [6218]=24, [6219]=144, [6220]=4893, + [6222]=25, [6223]=4797, [6224]=4, [6225]=3, [6226]=890, [6227]=3, + [6228]=3, [6229]=3, [6230]=1, [6231]=1, [6232]=2, [6233]=2, + [6234]=2, [6235]=2, [6236]=2, [6237]=2, [6238]=98, [6239]=160, + [6240]=161, [6241]=99, [6242]=243, [6243]=445, [6254]=2, [6256]=4, + [6260]=12, [6261]=250, [6263]=589, [6264]=884, [6266]=205, [6267]=149, + [6268]=234, [6269]=193, [6270]=50, [6271]=50, [6272]=75, [6273]=187, + [6274]=100, [6275]=200, [6282]=2243, [6289]=1, [6290]=1, [6291]=1, + [6292]=8, [6293]=33, [6294]=10, [6295]=12, [6296]=28, [6297]=7, + [6298]=130, [6299]=1, [6300]=443, [6301]=20, [6302]=628, [6303]=1, + [6304]=25, [6305]=25, [6306]=25, [6307]=1, [6308]=2, [6309]=100, + [6310]=150, [6311]=187, [6314]=1268, [6315]=2546, [6316]=3, [6317]=2, + [6318]=4802, [6319]=803, [6320]=2711, [6321]=1650, [6322]=4, [6323]=2611, + [6324]=1892, [6325]=10, [6326]=10, [6327]=12823, [6328]=100, [6329]=100, + [6330]=300, [6331]=9466, [6332]=1153, [6333]=1929, [6334]=3, [6335]=1581, + [6336]=305, [6337]=245, [6338]=125, [6339]=24, [6340]=875, [6341]=666, + [6342]=75, [6343]=87, [6344]=100, [6345]=100, [6346]=100, [6347]=100, + [6348]=125, [6349]=125, [6350]=469, [6351]=1, [6352]=1, [6353]=1, + [6354]=1, [6355]=1, [6356]=1, [6357]=1, [6358]=4, [6359]=5, + [6360]=2581, [6361]=2, [6362]=4, [6363]=250, [6364]=375, [6365]=180, + [6366]=1066, [6367]=3378, [6368]=100, [6369]=550, [6370]=10, [6371]=12, + [6372]=35, [6373]=35, [6374]=125, [6375]=250, [6376]=250, [6377]=250, + [6378]=292, [6379]=244, [6380]=654, [6381]=625, [6382]=523, [6383]=1519, + [6384]=250, [6385]=250, [6386]=2692, [6387]=1228, [6388]=2043, [6389]=2245, + [6390]=150, [6391]=150, [6392]=1000, [6393]=760, [6394]=1041, [6395]=1264, + [6396]=2814, [6397]=985, [6398]=989, [6399]=1639, [6400]=3089, [6401]=275, + [6402]=4699, [6403]=1771, [6404]=3242, [6405]=3167, [6406]=1970, [6407]=1198, + [6408]=1654, [6409]=1660, [6410]=1514, [6411]=7268, [6412]=4711, [6413]=2497, + [6414]=2055, [6415]=4565, [6416]=2728, [6417]=2536, [6418]=1697, [6419]=2299, + [6420]=3739, [6421]=2317, [6422]=3768, [6423]=7233, [6424]=3825, [6425]=4478, + [6426]=4162, [6427]=7016, [6428]=2795, [6429]=4544, [6430]=9098, [6431]=5436, + [6432]=3741, [6433]=4953, [6434]=1, [6438]=362, [6439]=237, [6440]=15812, + [6444]=228, [6445]=88, [6446]=532, [6447]=562, [6448]=1942, [6449]=701, + [6450]=200, [6451]=400, [6452]=28, [6453]=62, [6454]=225, [6455]=4, + [6456]=3, [6457]=4, [6458]=1, [6459]=934, [6460]=844, [6461]=1190, + [6463]=1527, [6465]=768, [6466]=413, [6467]=420, [6468]=658, [6469]=2240, + [6470]=20, [6471]=500, [6472]=3018, [6473]=1010, [6474]=137, [6475]=375, + [6476]=500, [6477]=274, [6478]=634, [6480]=713, [6481]=641, [6482]=728, + [6502]=1140, [6503]=762, [6504]=2933, [6505]=3680, [6506]=87, [6507]=44, + [6508]=34, [6509]=44, [6510]=54, [6511]=121, [6512]=191, [6513]=28, + [6514]=42, [6515]=37, [6517]=35, [6518]=70, [6519]=36, [6520]=41, + [6521]=47, [6522]=4, [6523]=284, [6524]=574, [6525]=1033, [6526]=2497, + [6527]=187, [6528]=358, [6529]=12, [6530]=25, [6531]=417, [6532]=62, + [6533]=62, [6536]=488, [6537]=210, [6538]=492, [6539]=162, [6540]=431, + [6541]=163, [6542]=219, [6543]=147, [6545]=675, [6546]=533, [6547]=267, + [6548]=233, [6549]=101, [6550]=204, [6551]=409, [6552]=601, [6553]=525, + [6554]=229, [6555]=130, [6556]=174, [6557]=302, [6558]=180, [6559]=533, + [6560]=615, [6561]=675, [6562]=508, [6563]=295, [6564]=512, [6565]=393, + [6566]=411, [6567]=1036, [6568]=920, [6569]=1044, [6570]=363, [6571]=1166, + [6572]=1323, [6573]=938, [6574]=568, [6575]=431, [6576]=572, [6577]=649, + [6578]=1302, [6579]=667, [6580]=1312, [6581]=422, [6582]=731, [6583]=425, + [6584]=1416, [6585]=558, [6586]=505, [6587]=1146, [6588]=458, [6589]=1056, + [6590]=1830, [6591]=1007, [6592]=2447, [6593]=922, [6594]=1120, [6595]=1124, + [6596]=2258, [6597]=1707, [6598]=2426, [6599]=2678, [6600]=867, [6601]=1437, + [6602]=873, [6603]=2334, [6604]=1200, [6605]=971, [6607]=2202, [6608]=1328, + [6609]=2148, [6610]=2156, [6611]=812, [6612]=1112, [6613]=744, [6614]=1120, + [6615]=824, [6616]=2203, [6617]=1371, [6618]=6, [6622]=55400, [6627]=2620, + [6628]=370, [6629]=630, [6630]=2067, [6631]=4053, [6632]=642, [6633]=2131, + [6641]=3675, [6642]=1880, [6643]=6, [6644]=6, [6645]=25, [6646]=31, + [6647]=40, [6651]=234, [6657]=5, [6659]=541, [6660]=36157, [6661]=115, + [6662]=95, [6663]=150, [6664]=892, [6665]=895, [6666]=830, [6667]=992, + [6668]=1245, [6669]=1378, [6670]=1672, [6671]=2068, [6672]=500, [6675]=1048, + [6676]=2245, [6677]=2401, [6678]=677, [6679]=4852, [6680]=2, [6681]=3124, + [6682]=1900, [6685]=1310, [6686]=2627, [6687]=9930, [6688]=2059, [6689]=8267, + [6690]=3346, [6691]=8866, [6692]=9788, [6693]=1816, [6694]=6309, [6695]=3002, + [6696]=5086, [6697]=2041, [6709]=545, [6710]=137, [6712]=12, [6713]=10, + [6714]=75, [6715]=21, [6716]=200, [6719]=1097, [6720]=3218, [6721]=1418, + [6722]=1331, [6723]=8155, [6725]=6105, [6726]=2388, [6727]=2996, [6729]=7187, + [6730]=496, [6731]=871, [6732]=2421, [6733]=1145, [6734]=62, [6735]=150, + [6736]=450, [6737]=2805, [6738]=7040, [6739]=2991, [6740]=1000, [6741]=3014, + [6742]=2830, [6743]=1462, [6744]=1190, [6745]=2239, [6746]=7075, [6747]=5015, + [6748]=897, [6749]=897, [6750]=897, [6751]=1411, [6752]=1601, [6754]=500, + [6756]=1375, [6757]=5567, [6773]=7366, [6774]=2885, [6780]=1560, [6784]=2031, + [6786]=59, [6787]=466, [6788]=3331, [6789]=4012, [6790]=1540, [6791]=3464, + [6792]=4738, [6793]=3157, [6794]=2641, [6795]=500, [6796]=750, [6797]=6362, + [6798]=6386, [6801]=4456, [6802]=18255, [6803]=4885, [6804]=11262, [6806]=10209, + [6807]=62, [6811]=25, [6826]=548, [6827]=150, [6828]=6268, [6829]=18714, + [6830]=23476, [6831]=17522, [6832]=3769, [6833]=500, [6834]=1, [6835]=504, + [6836]=1, [6837]=1, [6886]=18, [6887]=5, [6888]=10, [6889]=4, + [6890]=6, [6891]=6, [6892]=62, [6898]=4132, [6899]=5382, [6900]=4685, + [6901]=1523, [6902]=877, [6903]=1549, [6904]=4665, [6905]=4010, [6906]=1275, + [6907]=1872, [6908]=522, [6909]=7155, [6910]=2298, [6911]=1442, [6946]=2, + [6947]=5, [6949]=20, [6950]=30, [6951]=75, [6953]=7459, [6966]=693, + [6967]=696, [6968]=698, [6969]=701, [6970]=906, [6971]=2221, [6972]=3242, + [6973]=2465, [6974]=1497, [6975]=16766, [6976]=17264, [6977]=17325, [6978]=672, + [6979]=675, [6980]=677, [6981]=680, [6982]=683, [6983]=685, [6984]=688, + [6985]=690, [6986]=50, [6987]=13, [6998]=774, [7000]=650, [7001]=3535, + [7002]=3028, [7003]=981, [7004]=984, [7005]=16, [7009]=16, [7010]=4, + [7011]=20, [7012]=1, [7013]=1580, [7026]=22, [7027]=1125, [7046]=1494, + [7047]=824, [7048]=1244, [7049]=914, [7050]=1257, [7051]=2696, [7052]=1488, + [7053]=2240, [7054]=4700, [7055]=1503, [7056]=2314, [7057]=2323, [7058]=3329, + [7059]=2781, [7060]=2791, [7061]=2017, [7062]=3899, [7063]=4741, [7064]=2569, + [7065]=2398, [7067]=400, [7068]=400, [7069]=400, [7070]=400, [7071]=100, + [7072]=150, [7073]=6, [7074]=4, [7075]=400, [7076]=400, [7077]=400, + [7078]=400, [7079]=400, [7080]=400, [7081]=400, [7082]=400, [7084]=350, + [7085]=350, [7086]=375, [7087]=300, [7088]=1250, [7089]=375, [7090]=250, + [7091]=250, [7092]=250, [7093]=200, [7094]=174, [7095]=32, [7096]=5, + [7097]=1, [7098]=6, [7099]=6, [7100]=7, [7101]=5, [7106]=1234, + [7107]=1858, [7108]=209, [7109]=74, [7110]=2069, [7111]=3329, [7112]=4547, + [7113]=6707, [7114]=250, [7115]=683, [7116]=685, [7117]=688, [7118]=690, + [7120]=895, [7129]=1546, [7130]=2328, [7132]=2338, [7133]=3098, [7148]=21, + [7166]=194, [7170]=692, [7187]=979, [7188]=1485, [7189]=4712, [7191]=275, + [7192]=300, [7228]=25, [7229]=285, [7230]=3103, [7276]=34, [7277]=28, + [7278]=25, [7279]=25, [7280]=162, [7281]=84, [7282]=599, [7283]=519, + [7284]=586, [7285]=588, [7286]=25, [7287]=100, [7288]=125, [7289]=162, + [7290]=400, [7296]=56, [7298]=468, [7307]=62, [7326]=696, [7327]=698, + [7328]=701, [7329]=703, [7330]=3923, [7331]=4330, [7332]=6692, [7334]=1544, + [7335]=1937, [7336]=1509, [7337]=250000, [7338]=2500, [7339]=62500, [7340]=125000, + [7341]=12500, [7342]=25000, [7344]=5000, [7348]=690, [7349]=861, [7350]=29, + [7351]=58, [7352]=1306, [7353]=2998, [7354]=1864, [7355]=1031, [7356]=1411, + [7357]=1875, [7358]=885, [7359]=978, [7360]=400, [7361]=450, [7362]=500, + [7363]=525, [7364]=550, [7366]=1098, [7367]=1818, [7368]=2677, [7369]=2955, + [7370]=1012, [7371]=500, [7372]=500, [7373]=3097, [7374]=3760, [7375]=3773, + [7377]=2269, [7378]=2146, [7386]=2387, [7387]=2587, [7390]=4237, [7391]=4253, + [7392]=200, [7406]=1372, [7407]=3666, [7408]=2281, [7409]=2289, [7410]=1174, + [7411]=1769, [7412]=1302, [7413]=2157, [7414]=3175, [7415]=1484, [7416]=1442, + [7417]=2903, [7418]=4256, [7419]=1326, [7420]=2658, [7421]=1778, [7422]=1622, + [7423]=3941, [7424]=2709, [7426]=1243, [7427]=3788, [7428]=250, [7429]=4620, + [7430]=4194, [7431]=3899, [7432]=2717, [7433]=1684, [7434]=2536, [7435]=2749, + [7436]=2111, [7437]=1554, [7438]=1560, [7439]=5425, [7440]=5042, [7441]=3514, + [7443]=2243, [7444]=3377, [7445]=3660, [7446]=3092, [7447]=2068, [7448]=2076, + [7449]=625, [7450]=500, [7451]=700, [7452]=875, [7453]=875, [7454]=5915, + [7455]=5937, [7456]=4139, [7457]=2564, [7458]=3983, [7459]=4317, [7460]=2000, + [7461]=2429, [7462]=2682, [7463]=6202, [7465]=6747, [7466]=1921, [7467]=5658, + [7468]=6763, [7469]=6284, [7470]=3668, [7471]=2455, [7472]=3423, [7473]=3710, + [7474]=3281, [7475]=2371, [7476]=2203, [7477]=8124, [7478]=6991, [7479]=4873, + [7480]=3019, [7481]=4908, [7482]=4926, [7483]=4238, [7484]=3062, [7485]=3073, + [7486]=9325, [7487]=8665, [7488]=6038, [7489]=3740, [7490]=5680, [7491]=6158, + [7492]=3015, [7493]=3268, [7494]=3543, [7495]=9558, [7496]=8882, [7497]=1983, + [7506]=500, [7507]=400, [7508]=400, [7509]=553, [7510]=556, [7511]=1938, + [7512]=1945, [7513]=9805, [7514]=9842, [7515]=5382, [7517]=9372, [7518]=9406, + [7519]=7635, [7520]=5747, [7521]=3560, [7522]=4962, [7523]=4993, [7524]=4297, + [7525]=3106, [7526]=3367, [7527]=11284, [7528]=9894, [7529]=6897, [7530]=4273, + [7531]=6434, [7532]=6975, [7533]=5557, [7534]=4016, [7535]=4353, [7536]=13048, + [7537]=14012, [7538]=12322, [7539]=12692, [7540]=8845, [7541]=5479, [7542]=8284, + [7543]=8123, [7544]=4296, [7545]=4658, [7546]=5050, [7547]=3092, [7548]=6507, + [7549]=6420, [7550]=7645, [7551]=7145, [7552]=2542, [7553]=2542, [7554]=1039, + [7555]=7123, [7556]=5387, [7557]=7596, [7558]=1609, [7559]=666, [7560]=300, + [7561]=500, [7606]=557, [7607]=1399, [7608]=1106, [7609]=4210, [7610]=5811, + [7611]=7364, [7612]=7, [7613]=500, [7673]=8990, [7676]=30, [7678]=50, + [7682]=7678, [7683]=7755, [7684]=2184, [7685]=5468, [7686]=4308, [7687]=8836, + [7688]=5320, [7689]=11124, [7690]=2232, [7691]=2689, [7706]=3, [7708]=6649, + [7709]=3559, [7710]=12279, [7711]=1171, [7712]=881, [7713]=4777, [7714]=3835, + [7717]=18923, [7718]=6867, [7719]=6863, [7720]=5356, [7721]=17922, [7722]=9295, + [7723]=22567, [7724]=5436, [7726]=11681, [7727]=2488, [7728]=3223, [7729]=5514, + [7730]=10146, [7731]=3482, [7734]=15495, [7736]=11970, [7738]=211, [7739]=480, + [7742]=600, [7743]=0, [7746]=8430, [7747]=7754, [7748]=10862, [7749]=4885, + [7750]=1712, [7751]=1614, [7752]=6902, [7753]=7874, [7754]=1959, [7755]=4140, + [7756]=1606, [7757]=12874, [7758]=15074, [7759]=6723, [7760]=6074, [7761]=11290, + [7762]=10, [7786]=5605, [7787]=3960, [7788]=10, [7806]=10, [7807]=10, + [7808]=10, [7809]=1024, [7814]=10, [7826]=4, [7849]=10, [7873]=10, + [7888]=8990, [7909]=1000, [7910]=5000, [7911]=500, [7912]=100, [7913]=2500, + [7914]=3330, [7915]=3337, [7916]=3700, [7917]=2711, [7918]=3701, [7919]=2476, + [7920]=8053, [7921]=5387, [7922]=3964, [7924]=4103, [7925]=4447, [7926]=5952, + [7927]=2987, [7928]=4857, [7929]=7739, [7930]=7045, [7931]=7955, [7932]=10365, + [7933]=5769, [7934]=5790, [7935]=8368, [7936]=6739, [7937]=6763, [7938]=4028, + [7939]=10899, [7940]=10, [7941]=12520, [7942]=14659, [7943]=15891, [7944]=20092, + [7945]=17291, [7946]=12576, [7947]=24892, [7948]=1357, [7949]=3990, [7950]=6473, + [7951]=1372, [7952]=3025, [7953]=4907, [7954]=23159, [7955]=241, [7956]=1944, + [7957]=2205, [7958]=2435, [7959]=33857, [7960]=38548, [7961]=25508, [7963]=6488, + [7964]=40, [7965]=40, [7966]=200, [7967]=250, [7969]=250, [7971]=1000, + [7972]=400, [7973]=46, [7974]=50, [7975]=1500, [7976]=2000, [7977]=2000, + [7978]=750, [7979]=750, [7980]=850, [7981]=1100, [7982]=1100, [7983]=2000, + [7984]=2000, [7985]=2000, [7986]=2500, [7987]=2500, [7988]=2500, [7989]=2500, + [7990]=2500, [7991]=2500, [7992]=2000, [7993]=2500, [7994]=2000, [7995]=1500, + [7996]=244, [7997]=81, [8000]=62, [8006]=12472, [8028]=2500, [8029]=2000, + [8030]=2500, [8067]=0, [8068]=0, [8069]=0, [8071]=1534, [8080]=5987, + [8081]=2834, [8082]=3189, [8083]=2261, [8084]=2703, [8085]=5253, [8086]=3730, + [8088]=2667, [8089]=4016, [8090]=2687, [8091]=2697, [8092]=4062, [8093]=5437, + [8094]=5458, [8106]=10438, [8107]=5938, [8108]=3594, [8109]=5011, [8110]=3622, + [8111]=5890, [8112]=8436, [8113]=9694, [8114]=3677, [8115]=5980, [8116]=4632, + [8117]=7161, [8118]=4436, [8119]=12725, [8120]=6207, [8121]=4843, [8122]=7875, + [8123]=11275, [8124]=7932, [8125]=6367, [8126]=15656, [8127]=5937, [8128]=6229, + [8129]=6253, [8130]=9458, [8131]=10115, [8132]=14485, [8133]=10517, [8134]=15993, + [8135]=11234, [8137]=2807, [8138]=7666, [8139]=3053, [8140]=2837, [8141]=4613, + [8142]=4630, [8143]=7227, [8144]=5036, [8146]=500, [8147]=200, [8148]=250, + [8150]=250, [8151]=250, [8152]=500, [8153]=5, [8154]=250, [8156]=2219, + [8157]=5197, [8158]=2236, [8159]=2244, [8160]=3378, [8161]=3390, [8162]=4900, + [8163]=3688, [8165]=500, [8167]=100, [8168]=100, [8169]=500, [8170]=500, + [8171]=500, [8172]=500, [8173]=1000, [8174]=4131, [8175]=5971, [8176]=4495, + [8177]=71, [8178]=306, [8179]=28, [8180]=240, [8181]=79, [8182]=40, + [8183]=2426, [8184]=2947, [8185]=10952, [8186]=2231, [8187]=3477, [8188]=6414, + [8189]=7567, [8190]=37286, [8191]=7780, [8192]=4782, [8193]=8708, [8194]=13877, + [8195]=5263, [8196]=13979, [8197]=7158, [8198]=4013, [8199]=24661, [8200]=7275, + [8201]=5350, [8202]=9022, [8203]=8628, [8204]=4676, [8205]=4346, [8206]=12704, + [8207]=8978, [8208]=10272, [8209]=8375, [8210]=5537, [8211]=8002, [8212]=11585, + [8213]=8150, [8214]=6230, [8215]=9017, [8216]=6323, [8217]=1000, [8218]=1000, + [8223]=10066, [8224]=7655, [8225]=9222, [8226]=5747, [8227]=10, [8244]=10000, + [8245]=12922, [8246]=7917, [8247]=4997, [8248]=7032, [8249]=5336, [8250]=8034, + [8251]=12080, [8252]=13622, [8253]=5107, [8254]=8639, [8255]=6010, [8256]=10261, + [8257]=6053, [8258]=17396, [8259]=9144, [8260]=6938, [8261]=10617, [8262]=14605, + [8263]=10373, [8264]=7857, [8265]=19914, [8266]=7468, [8267]=8927, [8268]=8960, + [8269]=14362, [8270]=14351, [8271]=20358, [8272]=13697, [8273]=3574, [8274]=10251, + [8275]=22028, [8276]=3901, [8277]=3625, [8278]=5477, [8279]=5937, [8280]=8503, + [8281]=5982, [8282]=15695, [8283]=17138, [8284]=10514, [8285]=6637, [8286]=9427, + [8287]=7087, [8288]=11876, [8289]=16688, [8290]=17585, [8291]=6784, [8292]=11476, + [8293]=8542, [8294]=12651, [8295]=7988, [8296]=20861, [8297]=9113, [8298]=8565, + [8299]=14353, [8300]=20172, [8301]=14463, [8302]=11060, [8303]=26989, [8304]=10513, + [8305]=11743, [8306]=11787, [8307]=18717, [8308]=18703, [8309]=26278, [8310]=19419, + [8311]=5844, [8312]=14810, [8313]=30637, [8314]=5344, [8315]=5061, [8316]=8078, + [8317]=8595, [8318]=12926, [8319]=9181, [8320]=22092, [8343]=500, [8345]=7421, + [8346]=5363, [8347]=5979, [8348]=10819, [8349]=14478, [8350]=1130, [8364]=6, + [8365]=4, [8366]=100, [8367]=18455, [8368]=1000, [8384]=875, [8385]=875, + [8386]=1000, [8387]=1000, [8388]=1250, [8389]=1250, [8390]=1250, [8395]=1000, + [8397]=1000, [8398]=1125, [8399]=1250, [8400]=1250, [8401]=1375, [8402]=1375, + [8403]=5537, [8404]=8002, [8405]=6230, [8406]=8150, [8407]=11585, [8408]=9017, + [8409]=1000, [8429]=31, [8430]=46, [8483]=171, [8484]=68, [8485]=1000, + [8486]=1000, [8487]=1000, [8488]=1000, [8489]=1500, [8490]=1500, [8491]=1500, + [8492]=1000, [8494]=1000, [8495]=1000, [8496]=1000, [8497]=500, [8498]=2500, + [8499]=2500, [8500]=1250, [8501]=1250, [8502]=0, [8503]=0, [8504]=0, + [8505]=0, [8506]=0, [8507]=0, [8508]=178, [8523]=0, [8529]=175, + [8543]=13, [8544]=400, [8545]=600, [8546]=50, [8547]=200000, [8563]=0, + [8564]=200, [8588]=0, [8589]=0, [8591]=0, [8592]=0, [8595]=0, + [8624]=250, [8625]=250, [8626]=250, [8629]=0, [8631]=0, [8632]=0, + [8643]=2500, [8644]=1500, [8645]=750, [8646]=250, [8683]=1, [8703]=6492, + [8743]=2, [8744]=50, [8745]=50, [8746]=682, [8747]=1036, [8748]=774, + [8749]=1603, [8750]=1863, [8751]=2618, [8752]=5217, [8753]=5198, [8754]=3937, + [8755]=3728, [8756]=550, [8757]=725, [8758]=1050, [8759]=1325, [8760]=1675, + [8761]=1675, [8762]=2025, [8763]=2025, [8764]=2425, [8765]=2425, [8766]=200, + [8768]=3250, [8769]=3250, [8770]=3250, [8771]=3250, [8772]=3750, [8773]=7750, + [8774]=4500, [8775]=5000, [8776]=8750, [8777]=10000, [8778]=5000, [8779]=5500, + [8780]=8750, [8781]=7750, [8782]=6250, [8783]=8750, [8784]=7000, [8785]=10000, + [8786]=8750, [8787]=1050, [8788]=4500, [8789]=11000, [8790]=11000, [8791]=11000, + [8792]=11000, [8793]=7000, [8794]=12000, [8795]=13250, [8796]=13250, [8797]=13250, + [8798]=13250, [8799]=14750, [8800]=14750, [8801]=14750, [8802]=2, [8803]=20, + [8804]=225, [8805]=325, [8806]=550, [8807]=550, [8808]=725, [8809]=50, + [8810]=725, [8811]=1050, [8812]=1050, [8813]=1325, [8814]=1325, [8815]=1675, + [8816]=1675, [8818]=2025, [8819]=2025, [8820]=2425, [8821]=2425, [8822]=1050, + [8823]=2425, [8824]=2425, [8825]=5500, [8826]=2750, [8827]=125, [8828]=2750, + [8829]=3250, [8830]=2750, [8831]=300, [8832]=3750, [8833]=3750, [8834]=3750, + [8835]=3750, [8836]=95, [8837]=7000, [8838]=60, [8839]=375, [8840]=4500, + [8841]=4500, [8842]=4500, [8843]=5000, [8844]=5000, [8845]=375, [8846]=250, + [8847]=7000, [8848]=5000, [8849]=5000, [8850]=5000, [8851]=5500, [8852]=5500, + [8853]=5500, [8854]=5500, [8855]=5500, [8856]=6250, [8857]=6250, [8858]=6250, + [8859]=7000, [8860]=7750, [8861]=7750, [8862]=7750, [8863]=7750, [8864]=7750, + [8865]=8750, [8866]=8750, [8867]=8750, [8868]=8750, [8869]=8750, [8870]=8750, + [8871]=10000, [8872]=10000, [8873]=10000, [8874]=10000, [8875]=10000, [8876]=2750, + [8877]=11000, [8878]=11000, [8879]=11000, [8880]=11000, [8881]=11000, [8882]=11000, + [8883]=12000, [8884]=12000, [8885]=12000, [8886]=12000, [8887]=13250, [8888]=13250, + [8889]=13250, [8890]=14750, [8891]=14750, [8892]=14750, [8893]=14750, [8894]=14750, + [8895]=14750, [8896]=14750, [8897]=14750, [8898]=4500, [8899]=5000, [8900]=4500, + [8901]=6250, [8902]=5000, [8903]=5000, [8904]=7000, [8905]=5500, [8906]=6250, + [8907]=5500, [8909]=50, [8910]=75, [8911]=75, [8912]=75, [8913]=325, + [8914]=1050, [8915]=1325, [8916]=1675, [8917]=2425, [8918]=2425, [8919]=2750, + [8920]=3250, [8921]=5000, [8922]=5000, [8923]=50, [8924]=25, [8925]=125, + [8926]=75, [8927]=100, [8928]=125, [8929]=6250, [8930]=7000, [8931]=7000, + [8932]=200, [8933]=7000, [8934]=7750, [8935]=8750, [8936]=8750, [8937]=8750, + [8938]=10000, [8939]=10000, [8940]=11000, [8941]=11000, [8942]=12000, [8943]=12000, + [8944]=13250, [8945]=14750, [8947]=14750, [8948]=200, [8949]=200, [8950]=200, + [8951]=200, [8952]=200, [8953]=200, [8954]=2, [8955]=50, [8956]=200, + [8957]=200, [8958]=75, [8959]=160, [8960]=225, [8961]=225, [8962]=325, + [8963]=725, [8964]=725, [8965]=725, [8966]=725, [8967]=1050, [8968]=1325, + [8969]=1675, [8971]=2025, [8972]=2025, [8974]=2425, [8975]=2425, [8976]=2750, + [8977]=2750, [8978]=2750, [8980]=3250, [8981]=3750, [8983]=4500, [8984]=100, + [8985]=150, [8986]=5000, [8987]=5000, [8988]=5000, [8989]=5000, [8990]=5000, + [8991]=5000, [8992]=5500, [8993]=5500, [8994]=5500, [8995]=5500, [8996]=5500, + [8997]=6250, [8998]=6250, [8999]=6250, [9000]=6250, [9001]=7000, [9002]=7000, + [9003]=7000, [9004]=7750, [9005]=7750, [9006]=7750, [9007]=8750, [9008]=8750, + [9009]=8750, [9010]=8750, [9011]=8750, [9012]=8750, [9013]=10000, [9014]=10000, + [9015]=10000, [9016]=11000, [9017]=11000, [9018]=11000, [9019]=12000, [9020]=12000, + [9021]=12000, [9022]=12000, [9023]=12000, [9024]=13250, [9025]=13250, [9026]=13250, + [9027]=13250, [9028]=13250, [9029]=14750, [9030]=200, [9031]=14750, [9032]=14750, + [9033]=14750, [9034]=14750, [9035]=14750, [9036]=20, [9037]=2, [9039]=10, + [9040]=20, [9041]=20, [9043]=50, [9044]=50, [9046]=75, [9047]=75, + [9048]=150, [9049]=150, [9050]=150, [9051]=225, [9052]=225, [9053]=325, + [9054]=550, [9055]=550, [9056]=550, [9057]=725, [9058]=725, [9059]=75, + [9060]=1000, [9061]=250, [9062]=1050, [9063]=1050, [9064]=1050, [9065]=1050, + [9066]=1325, [9067]=1325, [9068]=1325, [9069]=1325, [9070]=1325, [9071]=1675, + [9072]=1675, [9073]=1675, [9074]=2025, [9075]=550, [9076]=550, [9077]=550, + [9078]=2425, [9079]=2425, [9080]=2425, [9081]=2425, [9082]=2425, [9083]=2425, + [9084]=2750, [9085]=2750, [9086]=2750, [9087]=2750, [9088]=250, [9089]=3250, + [9090]=3250, [9091]=3250, [9092]=3250, [9093]=3750, [9094]=3750, [9095]=3750, + [9096]=4500, [9097]=4500, [9098]=4500, [9099]=4500, [9100]=5000, [9101]=5000, + [9102]=5000, [9103]=5000, [9104]=5000, [9105]=5000, [9123]=5500, [9124]=5500, + [9125]=5500, [9126]=5500, [9127]=5500, [9128]=5500, [9129]=6250, [9130]=6250, + [9131]=6250, [9132]=7000, [9133]=7000, [9134]=7000, [9135]=7000, [9136]=7000, + [9137]=7750, [9138]=7750, [9139]=7750, [9140]=7750, [9141]=7750, [9142]=7750, + [9143]=7750, [9144]=250, [9145]=8750, [9146]=8750, [9147]=8750, [9148]=8750, + [9149]=250, [9150]=10000, [9151]=10000, [9152]=10000, [9154]=300, [9155]=400, + [9156]=8750, [9157]=8750, [9158]=8750, [9159]=8750, [9160]=8750, [9161]=8750, + [9162]=12000, [9164]=12000, [9165]=12000, [9166]=12000, [9167]=12000, [9168]=12000, + [9169]=13250, [9170]=13250, [9171]=13250, [9172]=500, [9174]=13250, [9175]=13250, + [9176]=13250, [9177]=14750, [9178]=14750, [9179]=1000, [9180]=14750, [9181]=14750, + [9182]=14750, [9183]=5000, [9184]=5000, [9185]=4500, [9186]=175, [9187]=600, + [9188]=725, [9190]=2, [9191]=10, [9192]=10, [9193]=25, [9194]=50, + [9195]=75, [9197]=600, [9198]=150, [9199]=150, [9200]=225, [9201]=325, + [9202]=550, [9203]=725, [9204]=725, [9205]=725, [9206]=700, [9207]=1325, + [9208]=1325, [9209]=1325, [9210]=750, [9211]=1675, [9212]=2025, [9214]=2500, + [9215]=2025, [9216]=2025, [9217]=2425, [9218]=2425, [9219]=2425, [9221]=2750, + [9222]=2750, [9223]=3250, [9224]=700, [9225]=3750, [9226]=3750, [9227]=4500, + [9228]=4500, [9229]=4500, [9230]=5000, [9231]=5000, [9233]=500, [9242]=2421, + [9243]=8155, [9249]=1553, [9251]=62, [9252]=62, [9253]=62, [9259]=64, + [9260]=400, [9261]=250, [9262]=1000, [9264]=35, [9265]=15, [9276]=100, + [9279]=45, [9285]=2388, [9286]=6040, [9287]=2406, [9288]=2414, [9289]=3635, + [9290]=3940, [9291]=5286, [9292]=3684, [9293]=1250, [9294]=2000, [9295]=2000, + [9296]=2000, [9297]=2500, [9298]=2250, [9300]=2500, [9301]=2500, [9302]=2250, + [9303]=2000, [9304]=2000, [9305]=2000, [9308]=38, [9312]=1, [9313]=0, + [9314]=12, [9315]=1, [9317]=25, [9318]=0, [9327]=625, [9332]=38, + [9333]=73, [9334]=47, [9335]=52, [9336]=1288, [9338]=73, [9355]=376, + [9356]=217, [9357]=227, [9358]=228, [9359]=19577, [9360]=400, [9361]=400, + [9363]=12, [9366]=3689, [9367]=1250, [9372]=61936, [9375]=4220, [9378]=11380, + [9379]=26383, [9380]=28334, [9381]=8628, [9382]=3607, [9383]=16895, [9384]=9789, + [9385]=12280, [9386]=9859, [9387]=3438, [9388]=3196, [9389]=4331, [9390]=2146, + [9391]=12831, [9392]=12980, [9393]=7882, [9394]=1372, [9395]=1565, [9396]=7319, + [9397]=3672, [9398]=1244, [9399]=3, [9400]=8722, [9401]=5070, [9402]=25308, + [9403]=7162, [9404]=2819, [9405]=2055, [9406]=4161, [9407]=5094, [9408]=18639, + [9409]=4490, [9410]=3785, [9411]=8587, [9412]=16681, [9413]=32248, [9414]=10374, + [9415]=8997, [9416]=28218, [9417]=10795, [9418]=32851, [9419]=21692, [9420]=4083, + [9422]=13052, [9423]=25463, [9424]=13594, [9425]=21489, [9426]=10275, [9427]=14853, + [9428]=2096, [9429]=5236, [9430]=8553, [9431]=4885, [9432]=3027, [9433]=4133, + [9434]=5648, [9435]=2916, [9443]=1, [9444]=1120, [9445]=2260, [9446]=7564, + [9447]=3237, [9448]=1154, [9449]=9564, [9450]=2181, [9451]=25, [9452]=8210, + [9453]=6592, [9454]=1984, [9455]=1825, [9456]=6652, [9457]=8902, [9458]=6917, + [9459]=13560, [9461]=4586, [9465]=18560, [9467]=22478, [9469]=14634, [9470]=7858, + [9473]=13241, [9474]=13290, [9475]=33346, [9476]=8593, [9477]=35936, [9478]=28853, + [9479]=10858, [9480]=31725, [9481]=34067, [9482]=29585, [9483]=19139, [9484]=10962, + [9485]=5288, [9486]=5483, [9487]=3632, [9488]=4419, [9489]=3690, [9490]=6121, + [9491]=1308, [9492]=3172, [9496]=11, [9508]=2352, [9509]=2683, [9510]=2945, + [9511]=21060, [9512]=6341, [9513]=305, [9514]=306, [9515]=2011, [9516]=2071, + [9517]=15737, [9518]=1899, [9519]=2288, [9520]=11461, [9521]=14382, [9522]=4938, + [9527]=21613, [9531]=5264, [9533]=7092, [9534]=8847, [9535]=1406, [9536]=1411, + [9538]=6463, [9539]=50, [9540]=150, [9541]=200, [9587]=6250, [9588]=6463, + [9598]=94, [9599]=142, [9600]=93, [9601]=87, [9602]=301, [9603]=302, + [9604]=5632, [9605]=1356, [9607]=1762, [9608]=5028, [9609]=1009, [9622]=5665, + [9623]=4198, [9624]=5267, [9625]=6344, [9626]=16243, [9627]=2542, [9630]=5780, + [9631]=3868, [9632]=3883, [9633]=5847, [9634]=3381, [9635]=4713, [9636]=3154, + [9637]=4749, [9638]=6875, [9639]=24111, [9640]=4840, [9641]=13041, [9642]=2092, + [9643]=15988, [9644]=9885, [9645]=6768, [9646]=6791, [9647]=7962, [9648]=6392, + [9649]=15875, [9650]=21619, [9651]=32193, [9652]=16159, [9653]=6745, [9654]=16928, + [9655]=7092, [9656]=4251, [9657]=5333, [9658]=4086, [9659]=2, [9660]=4227, + [9661]=9051, [9662]=4258, [9663]=9969, [9664]=5002, [9665]=4826, [9666]=7266, + [9678]=17485, [9679]=17550, [9680]=14090, [9681]=50, [9682]=3831, [9683]=38459, + [9684]=30875, [9685]=32277, [9686]=31097, [9687]=1554, [9698]=1504, [9699]=1812, + [9700]=2, [9701]=2, [9702]=2, [9703]=4272, [9704]=3573, [9705]=3586, + [9706]=9212, [9718]=11421, [9719]=6250, [9742]=49, [9743]=67, [9744]=44, + [9745]=54, [9746]=56, [9747]=227, [9748]=274, [9749]=275, [9750]=57, + [9751]=86, [9752]=57, [9753]=248, [9754]=70, [9755]=73, [9756]=294, + [9757]=363, [9758]=72, [9759]=138, [9760]=73, [9761]=58, [9762]=92, + [9763]=336, [9764]=300, [9765]=406, [9766]=361, [9767]=616, [9768]=317, + [9769]=1637, [9770]=416, [9771]=532, [9772]=1328, [9773]=1369, [9774]=1374, + [9775]=315, [9776]=547, [9777]=318, [9778]=940, [9779]=334, [9780]=369, + [9781]=982, [9782]=1113, [9783]=811, [9784]=533, [9785]=268, [9786]=234, + [9787]=358, [9788]=312, [9789]=741, [9790]=794, [9791]=1644, [9792]=823, + [9793]=550, [9794]=829, [9795]=626, [9796]=1038, [9797]=1528, [9798]=1686, + [9799]=635, [9800]=2027, [9801]=708, [9802]=1204, [9803]=729, [9804]=1874, + [9805]=709, [9806]=833, [9807]=1255, [9808]=1848, [9809]=1855, [9810]=1231, + [9811]=725, [9812]=570, [9813]=825, [9814]=733, [9815]=1664, [9816]=1781, + [9817]=1426, [9818]=1682, [9819]=2726, [9820]=1541, [9821]=871, [9822]=1192, + [9823]=965, [9824]=1599, [9825]=2355, [9826]=2600, [9827]=1114, [9828]=1845, + [9829]=1020, [9830]=3489, [9831]=1233, [9832]=1248, [9833]=3031, [9834]=2074, + [9835]=3053, [9836]=3677, [9837]=1287, [9838]=1174, [9839]=1426, [9840]=1432, + [9841]=3163, [9842]=2391, [9843]=3739, [9844]=3709, [9845]=2136, [9846]=1429, + [9847]=1779, [9848]=1584, [9849]=2385, [9850]=2394, [9851]=3524, [9852]=3820, + [9853]=1368, [9854]=4935, [9855]=1895, [9856]=2839, [9857]=1570, [9858]=4882, + [9859]=2871, [9860]=2382, [9861]=1753, [9862]=4260, [9863]=3207, [9864]=3527, + [9865]=1942, [9866]=5605, [9867]=1778, [9868]=2160, [9869]=2225, [9870]=3686, + [9871]=5425, [9872]=4101, [9873]=5828, [9874]=5801, [9875]=2139, [9876]=3146, + [9877]=2708, [9878]=3424, [9879]=1964, [9880]=2130, [9881]=3464, [9882]=6209, + [9883]=5026, [9884]=5448, [9885]=4179, [9886]=2589, [9887]=7071, [9889]=4240, + [9890]=2919, [9891]=2636, [9892]=2857, [9893]=6689, [9894]=4661, [9895]=5221, + [9896]=2913, [9897]=7368, [9898]=2718, [9899]=7920, [9900]=3195, [9901]=3294, + [9902]=5357, [9903]=7742, [9904]=5420, [9905]=8251, [9906]=3043, [9907]=4581, + [9908]=4257, [9909]=2848, [9910]=3087, [9911]=7228, [9912]=5037, [9913]=8490, + [9914]=7557, [9915]=5091, [9916]=3566, [9917]=5519, [9918]=10212, [9919]=5149, + [9920]=3721, [9921]=6050, [9922]=8745, [9923]=6095, [9924]=10276, [9925]=3789, + [9926]=6368, [9927]=3927, [9928]=9930, [9929]=3662, [9930]=4287, [9931]=4303, + [9932]=6995, [9933]=9394, [9934]=6577, [9935]=10097, [9936]=6403, [9937]=4004, + [9938]=6029, [9939]=4317, [9940]=6954, [9941]=6523, [9942]=9341, [9943]=11271, + [9944]=8570, [9945]=4124, [9946]=11396, [9947]=5193, [9948]=8365, [9949]=4855, + [9950]=13418, [9951]=6795, [9952]=5255, [9953]=8467, [9954]=12125, [9955]=8530, + [9956]=5130, [9957]=13753, [9958]=14724, [9959]=4803, [9960]=5623, [9961]=5644, + [9962]=9218, [9963]=9211, [9964]=13190, [9965]=9973, [9966]=6743, [9967]=2900, + [9968]=2695, [9969]=3964, [9970]=5730, [9971]=3995, [9972]=2475, [9973]=3727, + [9974]=16449, [9998]=4815, [9999]=4832, [10001]=5257, [10002]=5276, [10003]=2859, + [10004]=5738, [10007]=5799, [10008]=4365, [10009]=5284, [10010]=5729, [10011]=2875, + [10018]=3275, [10019]=3944, [10020]=6597, [10021]=7946, [10023]=3334, [10024]=5421, + [10025]=6790, [10026]=5459, [10027]=5479, [10028]=5938, [10029]=5391, [10030]=6007, + [10031]=6030, [10032]=6052, [10033]=6075, [10034]=2000, [10035]=1735, [10036]=1741, + [10038]=2620, [10039]=7110, [10040]=1767, [10041]=8593, [10042]=6644, [10043]=2033, + [10044]=6765, [10045]=23, [10046]=32, [10047]=164, [10048]=935, [10049]=2653, + [10050]=2500, [10051]=2500, [10052]=1500, [10053]=4499, [10054]=3000, [10055]=3000, + [10056]=1500, [10057]=12711, [10058]=7083, [10059]=4739, [10060]=6667, [10061]=7661, + [10062]=4758, [10063]=7165, [10064]=10774, [10065]=12153, [10066]=4220, [10067]=5295, + [10068]=9128, [10069]=5335, [10070]=15482, [10071]=8063, [10072]=6177, [10073]=9858, + [10074]=13985, [10075]=9369, [10076]=6571, [10077]=16968, [10078]=18642, [10079]=6370, + [10080]=7319, [10081]=7345, [10082]=10752, [10083]=10745, [10084]=15246, [10085]=11529, + [10086]=8438, [10087]=3393, [10088]=3154, [10089]=4749, [10090]=5148, [10091]=7441, + [10092]=5602, [10093]=18903, [10094]=3311, [10095]=10295, [10096]=6130, [10097]=10991, + [10098]=8736, [10099]=6567, [10100]=11108, [10101]=15756, [10102]=15020, [10103]=5687, + [10104]=15137, [10105]=19942, [10106]=12120, [10107]=7218, [10108]=8203, [10109]=7273, + [10110]=7947, [10111]=13444, [10112]=19071, [10113]=13541, [10118]=23381, [10119]=16676, + [10120]=8797, [10121]=10515, [10122]=9007, [10123]=15239, [10124]=20396, [10125]=14551, + [10126]=8865, [10127]=4350, [10128]=11907, [10129]=4689, [10130]=4706, [10131]=7085, + [10132]=7608, [10133]=10792, [10134]=7664, [10135]=20663, [10136]=8530, [10137]=13484, + [10138]=12274, [10139]=14258, [10140]=9085, [10141]=20103, [10142]=13401, [10143]=19772, + [10144]=8164, [10145]=9755, [10146]=16194, [10147]=10319, [10148]=11273, [10149]=10915, + [10150]=17254, [10151]=25456, [10152]=24333, [10153]=17444, [10154]=13337, [10155]=20168, + [10156]=12794, [10157]=31216, [10158]=31040, [10159]=11444, [10160]=19948, [10161]=12713, + [10162]=28137, [10163]=20264, [10164]=14808, [10165]=6240, [10166]=5908, [10167]=9429, + [10168]=10032, [10169]=14230, [10170]=10105, [10171]=6018, [10172]=9603, [10173]=5718, + [10174]=8121, [10175]=9010, [10176]=5689, [10177]=12833, [10178]=14475, [10179]=8632, + [10180]=5141, [10181]=14640, [10182]=18370, [10183]=10954, [10184]=6523, [10185]=7412, + [10186]=6966, [10187]=11785, [10188]=16717, [10189]=11872, [10190]=6669, [10191]=7777, + [10192]=13212, [10193]=19775, [10194]=7345, [10195]=19221, [10196]=7593, [10197]=7623, + [10198]=12167, [10199]=17261, [10200]=12314, [10201]=5960, [10202]=3988, [10203]=10397, + [10204]=19888, [10205]=4316, [10206]=4048, [10207]=6695, [10208]=9586, [10209]=7216, + [10210]=12845, [10211]=12276, [10212]=11069, [10213]=7850, [10214]=8271, [10215]=17387, + [10216]=7180, [10217]=16688, [10218]=17589, [10219]=12011, [10220]=23263, [10221]=9148, + [10222]=14462, [10223]=9466, [10224]=10755, [10225]=10012, [10226]=16616, [10227]=23348, + [10228]=15940, [10229]=10331, [10230]=25686, [10231]=9815, [10232]=11732, [10233]=11106, + [10234]=17801, [10235]=16896, [10236]=22615, [10237]=16287, [10238]=7650, [10239]=4962, + [10240]=12576, [10241]=8425, [10242]=5318, [10243]=5035, [10244]=12039, [10245]=8548, + [10246]=21542, [10247]=14707, [10248]=9371, [10249]=13435, [10250]=14866, [10251]=9946, + [10252]=20959, [10253]=15024, [10254]=22164, [10255]=8934, [10256]=10675, [10257]=16877, + [10258]=12292, [10259]=11335, [10260]=11945, [10261]=17985, [10262]=25272, [10263]=18116, + [10264]=26729, [10265]=13904, [10266]=32310, [10267]=13337, [10268]=14758, [10269]=14106, + [10270]=22396, [10271]=32592, [10272]=20865, [10273]=29323, [10274]=21118, [10275]=16204, + [10276]=9847, [10277]=6985, [10278]=6239, [10279]=11188, [10280]=15723, [10281]=11272, + [10282]=6712, [10285]=1000, [10286]=400, [10287]=964, [10288]=1410, [10289]=1557, + [10290]=625, [10298]=1243, [10299]=3778, [10300]=1250, [10301]=1250, [10302]=1250, + [10303]=1250, [10304]=1250, [10305]=100, [10306]=100, [10307]=112, [10308]=112, + [10309]=125, [10310]=125, [10311]=750, [10312]=1500, [10313]=1500, [10314]=1000, + [10315]=1750, [10316]=200, [10317]=1000, [10318]=1750, [10319]=1750, [10320]=1750, + [10321]=1125, [10322]=1875, [10323]=1125, [10324]=2000, [10325]=2500, [10326]=1250, + [10328]=6992, [10329]=2507, [10330]=9587, [10331]=2728, [10332]=3790, [10333]=2314, + [10358]=2421, [10359]=2430, [10360]=1250, [10361]=1250, [10362]=24760, [10363]=27396, + [10364]=24938, [10365]=26276, [10366]=32052, [10367]=32971, [10368]=17868, [10369]=7377, + [10370]=6985, [10371]=11149, [10372]=11750, [10373]=17336, [10374]=11837, [10375]=7116, + [10376]=12519, [10377]=7978, [10378]=19466, [10379]=13290, [10380]=8468, [10381]=8094, + [10382]=18808, [10383]=12521, [10384]=20370, [10385]=13247, [10386]=8865, [10387]=8475, + [10388]=14068, [10389]=19770, [10390]=14175, [10391]=8193, [10392]=1250, [10393]=1250, + [10394]=1250, [10398]=1000, [10399]=1467, [10400]=563, [10401]=255, [10402]=385, + [10403]=451, [10404]=864, [10405]=409, [10406]=1976, [10407]=431, [10408]=2390, + [10409]=2409, [10410]=1256, [10411]=787, [10412]=405, [10413]=307, [10418]=16464, + [10421]=32, [10423]=2842, [10424]=750, [10450]=396, [10455]=6464, [10457]=142, + [10460]=629, [10461]=3082, [10462]=3608, [10463]=1750, [10479]=24, [10498]=16, + [10499]=2105, [10500]=3478, [10501]=4398, [10502]=4088, [10503]=5169, [10504]=7770, + [10505]=250, [10506]=5227, [10507]=350, [10508]=8958, [10510]=11369, [10512]=2, + [10513]=5, [10514]=750, [10518]=4696, [10542]=5255, [10543]=3517, [10544]=25, + [10545]=3929, [10546]=1500, [10547]=81, [10548]=2500, [10549]=162, [10550]=48, + [10553]=131, [10554]=119, [10558]=250, [10559]=750, [10560]=1000, [10561]=1000, + [10562]=750, [10567]=8725, [10568]=2, [10570]=15875, [10571]=10927, [10572]=9592, + [10573]=13754, [10574]=3775, [10576]=6000, [10577]=2000, [10578]=3377, [10579]=0, + [10580]=750, [10581]=5310, [10582]=3606, [10583]=6191, [10584]=2905, [10585]=0, + [10586]=750, [10587]=1500, [10588]=5834, [10591]=2, [10592]=150, [10601]=500, + [10602]=750, [10603]=825, [10604]=825, [10605]=875, [10606]=875, [10607]=900, + [10608]=950, [10609]=1000, [10611]=2, [10612]=2, [10613]=2, [10614]=2, + [10615]=2, [10616]=2, [10617]=2, [10618]=2, [10619]=2, [10620]=250, + [10623]=24748, [10624]=17249, [10625]=27366, [10626]=36732, [10627]=26974, [10628]=29245, + [10629]=8066, [10630]=8664, [10631]=6086, [10632]=7624, [10633]=11684, [10634]=10812, + [10635]=14, [10636]=6, [10637]=139, [10638]=210, [10644]=500, [10645]=750, + [10646]=500, [10647]=500, [10648]=125, [10651]=257, [10652]=36370, [10653]=1639, + [10654]=965, [10655]=9, [10656]=14, [10657]=933, [10658]=1249, [10659]=4662, + [10683]=8750, [10684]=500, [10685]=2, [10686]=25395, [10696]=41890, [10697]=42044, + [10698]=52747, [10700]=4983, [10701]=7536, [10702]=5379, [10703]=16792, [10704]=13649, + [10705]=3666, [10706]=5521, [10707]=7772, [10708]=8982, [10709]=10953, [10710]=6130, + [10711]=8377, [10713]=500, [10716]=750, [10719]=1500, [10720]=750, [10721]=3317, + [10723]=750, [10724]=4697, [10725]=1500, [10726]=5520, [10727]=2000, [10728]=375, + [10739]=5292, [10740]=10692, [10741]=10063, [10742]=9589, [10743]=10830, [10744]=24159, + [10745]=8498, [10746]=4549, [10747]=2327, [10748]=4380, [10749]=10554, [10750]=35315, + [10751]=10634, [10756]=2, [10758]=20144, [10760]=2914, [10761]=17193, [10762]=6903, + [10763]=5197, [10764]=10434, [10765]=4114, [10766]=9660, [10767]=9652, [10768]=4541, + [10769]=5277, [10770]=7835, [10771]=2910, [10772]=14604, [10774]=5957, [10775]=6377, + [10776]=4799, [10777]=4014, [10778]=16930, [10779]=8807, [10780]=5542, [10781]=15072, + [10782]=4539, [10783]=11476, [10784]=18432, [10785]=13200, [10786]=11977, [10787]=6382, + [10788]=5338, [10795]=5542, [10796]=8982, [10797]=35069, [10798]=6263, [10799]=39288, + [10800]=7562, [10801]=11704, [10802]=7831, [10803]=29441, [10804]=29551, [10805]=29661, + [10806]=15146, [10807]=15202, [10808]=7629, [10820]=138, [10821]=208, [10822]=2500, + [10823]=17796, [10824]=5930, [10825]=2, [10826]=25501, [10827]=10238, [10828]=40427, + [10829]=10680, [10830]=750, [10833]=8597, [10835]=24645, [10836]=28989, [10837]=38801, + [10838]=34665, [10841]=85, [10842]=17595, [10843]=10595, [10844]=44314, [10845]=14233, + [10846]=16143, [10847]=56921, [10858]=750, [10878]=2, [10898]=2, [10918]=42, + [10919]=214, [10920]=67, [10921]=125, [10922]=175, [10938]=0, [10939]=0, + [10940]=0, [10959]=8750, [10978]=0, [10998]=0, [11018]=146, [11019]=2, + [11020]=0, [11021]=1, [11022]=250, [11023]=2500, [11025]=2, [11026]=2500, + [11027]=2500, [11038]=200, [11039]=200, [11040]=1, [11041]=1, [11042]=2, + [11081]=200, [11082]=0, [11083]=0, [11084]=0, [11086]=27403, [11087]=2, + [11098]=500, [11099]=250, [11101]=625, [11105]=0, [11109]=6, [11110]=2, + [11111]=134, [11118]=10795, [11120]=30144, [11121]=2941, [11122]=7162, [11123]=15037, + [11124]=16980, [11128]=500, [11130]=500, [11134]=0, [11135]=0, [11137]=0, + [11138]=0, [11139]=0, [11141]=0, [11144]=1000, [11145]=1250, [11150]=750, + [11151]=750, [11152]=750, [11163]=750, [11164]=750, [11165]=750, [11166]=1000, + [11167]=1000, [11168]=1000, [11174]=0, [11175]=0, [11176]=0, [11177]=0, + [11178]=0, [11187]=5, [11189]=10, [11190]=5, [11191]=45, [11192]=4, + [11193]=16938, [11194]=20404, [11195]=13655, [11196]=16875, [11199]=2, [11200]=2, + [11201]=2, [11202]=1100, [11203]=1100, [11204]=1100, [11205]=1250, [11206]=1250, + [11207]=3000, [11208]=1350, [11223]=1450, [11224]=1450, [11225]=1550, [11226]=1550, + [11229]=1696, [11262]=8142, [11263]=10103, [11264]=2, [11265]=16484, [11284]=1, + [11285]=2, [11287]=508, [11288]=1535, [11289]=3581, [11290]=5263, [11291]=1125, + [11302]=7130, [11303]=636, [11304]=972, [11305]=5162, [11306]=3893, [11307]=13590, + [11308]=15765, [11310]=6598, [11311]=6132, [11314]=2, [11317]=2, [11321]=2, + [11322]=2, [11323]=2, [11324]=6250, [11325]=150, [11342]=2, [11343]=2, + [11362]=250, [11363]=250, [11365]=2, [11369]=2, [11370]=500, [11371]=600, + [11382]=750, [11383]=2, [11384]=70, [11385]=145, [11386]=676, [11387]=1013, + [11388]=1563, [11389]=2163, [11390]=80, [11391]=205, [11392]=403, [11393]=780, + [11394]=580, [11395]=830, [11402]=1205, [11403]=1592, [11404]=2080, [11406]=168, + [11407]=108, [11408]=898, [11409]=503, [11410]=578, [11411]=1484, [11414]=1828, + [11415]=200, [11416]=328, [11417]=1204, [11418]=604, [11419]=1900, [11420]=1712, + [11424]=2, [11444]=200, [11469]=3563, [11474]=500, [11475]=7, [11502]=6510, + [11505]=2, [11506]=2, [11508]=1, [11513]=1, [11514]=1, [11515]=1, + [11542]=2, [11562]=1000, [11563]=1000, [11564]=1000, [11565]=1000, [11566]=1000, + [11567]=1000, [11584]=1, [11585]=1, [11586]=1, [11587]=1, [11588]=2, + [11589]=1, [11590]=250, [11591]=2, [11603]=30656, [11604]=19428, [11605]=10776, + [11606]=19255, [11607]=51225, [11608]=45760, [11610]=3000, [11611]=3000, [11612]=3000, + [11614]=3000, [11615]=3000, [11623]=9999, [11624]=9079, [11625]=10452, [11626]=9698, + [11627]=14668, [11628]=24433, [11629]=24527, [11630]=5, [11631]=19893, [11632]=9360, + [11633]=14076, [11634]=7063, [11635]=35451, [11662]=7462, [11665]=8532, [11669]=17157, + [11675]=14464, [11677]=11655, [11678]=15596, [11679]=11738, [11684]=63086, [11685]=13941, + [11686]=9329, [11702]=36752, [11703]=7378, [11722]=16610, [11726]=33533, [11728]=25336, + [11729]=19073, [11730]=12762, [11731]=19300, [11735]=16669, [11742]=8750, [11743]=30734, + [11744]=39242, [11745]=7878, [11746]=11861, [11747]=16659, [11748]=25083, [11749]=20141, + [11750]=43234, [11755]=14627, [11762]=2, [11763]=2, [11764]=10398, [11765]=12525, + [11766]=8606, [11767]=8637, [11768]=7224, [11782]=12720, [11783]=12767, [11784]=33835, + [11785]=29083, [11786]=50739, [11787]=13732, [11802]=17976, [11803]=50177, [11805]=40439, + [11807]=9153, [11808]=19292, [11809]=51287, [11810]=10000, [11811]=1500, [11812]=13979, + [11813]=3000, [11814]=13083, [11815]=10000, [11816]=48882, [11817]=39254, [11819]=10000, + [11820]=26761, [11821]=22384, [11822]=14153, [11823]=23677, [11824]=13657, [11825]=2500, + [11826]=2500, [11827]=675, [11828]=675, [11832]=10000, [11838]=2, [11839]=11191, + [11840]=7137, [11841]=15032, [11842]=17050, [11845]=62, [11846]=30, [11847]=7, + [11848]=5, [11849]=7, [11850]=7, [11851]=12, [11852]=14, [11853]=388, + [11854]=1494, [11855]=782, [11856]=15775, [11857]=21377, [11858]=4768, [11859]=7135, + [11860]=12970, [11861]=5207, [11862]=7042, [11863]=27191, [11864]=34108, [11865]=8708, + [11866]=9819, [11867]=8769, [11868]=6542, [11869]=6542, [11870]=10287, [11871]=10666, + [11872]=8566, [11873]=9661, [11874]=12124, [11875]=5776, [11876]=16287, [11882]=20520, + [11884]=1846, [11885]=711, [11887]=12, [11888]=4879, [11889]=7345, [11902]=34194, + [11903]=1000, [11904]=13815, [11905]=6203, [11906]=32723, [11907]=41050, [11908]=9886, + [11909]=8267, [11910]=12345, [11911]=12392, [11913]=14044, [11915]=20124, [11916]=11834, + [11917]=6334, [11918]=9537, [11919]=9572, [11920]=40732, [11921]=54167, [11922]=43491, + [11923]=43648, [11924]=20475, [11925]=16484, [11926]=24590, [11927]=16456, [11928]=22045, + [11929]=16581, [11930]=14588, [11931]=58103, [11932]=58322, [11933]=19646, [11934]=19921, + [11935]=13162, [11936]=284, [11937]=187, [11938]=213, [11939]=671, [11940]=389, + [11941]=5896, [11942]=5303, [11943]=21485, [11944]=8821, [11945]=6592, [11946]=7912, + [11962]=7939, [11963]=10025, [11964]=30156, [11965]=464, [11966]=164, [11967]=1087, + [11968]=997, [11969]=1721, [11970]=1710, [11971]=3969, [11972]=4649, [11973]=3971, + [11974]=4971, [11975]=4739, [11976]=7778, [11977]=7896, [11978]=7414, [11979]=7471, + [11980]=10539, [11981]=496, [11982]=1062, [11983]=1130, [11984]=2189, [11985]=2144, + [11986]=1745, [11987]=2885, [11988]=7113, [11989]=7471, [11990]=8306, [11991]=6317, + [11992]=7396, [11993]=874, [11994]=1312, [11995]=914, [11996]=1713, [11997]=6469, + [11998]=2896, [11999]=5538, [12000]=41053, [12001]=4971, [12002]=6322, [12003]=250, + [12004]=9163, [12005]=8813, [12006]=1064, [12007]=1064, [12008]=895, [12009]=2174, + [12010]=2469, [12011]=4649, [12012]=2463, [12013]=4649, [12014]=6289, [12015]=8811, + [12016]=7781, [12017]=8963, [12018]=13842, [12019]=4220, [12020]=3969, [12021]=9327, + [12022]=4718, [12023]=4971, [12024]=5396, [12025]=5282, [12026]=7757, [12027]=6257, + [12028]=4007, [12029]=5395, [12030]=7143, [12031]=7894, [12032]=5396, [12034]=5012, + [12035]=5513, [12036]=5982, [12037]=87, [12038]=9092, [12039]=4224, [12040]=4164, + [12041]=14446, [12042]=4749, [12043]=5396, [12044]=5145, [12045]=7767, [12046]=5757, + [12047]=4996, [12048]=6507, [12049]=16850, [12050]=8963, [12051]=8996, [12052]=837, + [12053]=837, [12054]=837, [12055]=8375, [12056]=8375, [12057]=8375, [12058]=8376, + [12059]=12377, [12061]=40212, [12062]=40365, [12063]=2, [12064]=1, [12065]=7953, + [12066]=11149, [12082]=13726, [12083]=7348, [12102]=9042, [12103]=12157, [12104]=20879, + [12105]=25144, [12106]=16824, [12107]=16885, [12108]=23054, [12109]=11569, [12110]=11610, + [12111]=7768, [12112]=10406, [12113]=10443, [12114]=8734, [12115]=7012, [12142]=2, + [12162]=750, [12163]=1100, [12164]=1100, [12182]=2, [12183]=2, [12184]=87, + [12185]=12895, [12190]=250, [12202]=87, [12203]=87, [12204]=112, [12205]=112, + [12206]=112, [12207]=150, [12208]=150, [12209]=95, [12210]=300, [12211]=300, + [12212]=300, [12213]=300, [12214]=300, [12215]=300, [12216]=300, [12217]=300, + [12218]=300, [12223]=4, [12224]=10, [12225]=187, [12226]=6, [12227]=400, + [12228]=1250, [12229]=1250, [12231]=750, [12232]=1250, [12233]=750, [12238]=2, + [12239]=1750, [12240]=1750, [12243]=45980, [12247]=5674, [12248]=6405, [12249]=6039, + [12250]=8068, [12251]=10779, [12252]=12619, [12253]=3545, [12254]=4483, [12255]=6997, + [12256]=8765, [12257]=3885, [12258]=4549, [12259]=8072, [12260]=10395, [12261]=950, + [12264]=1500, [12282]=8, [12285]=2, [12290]=2, [12294]=2, [12295]=282, + [12296]=722, [12297]=2, [12298]=2, [12299]=16, [12304]=2, [12322]=2, + [12328]=2, [12329]=2, [12331]=2, [12332]=2, [12338]=3, [12348]=2, + [12351]=0, [12353]=0, [12354]=0, [12359]=600, [12360]=5000, [12361]=7000, + [12363]=2000, [12364]=10000, [12365]=250, [12403]=2, [12404]=75, [12405]=9239, + [12406]=4636, [12408]=4998, [12409]=10336, [12410]=10372, [12414]=17376, [12415]=17003, + [12416]=7595, [12417]=17034, [12418]=10242, [12419]=16421, [12420]=25330, [12421]=2, + [12422]=16204, [12424]=5533, [12425]=6044, [12426]=12062, [12427]=12106, [12428]=8646, + [12429]=17923, [12442]=11463, [12443]=17896, [12446]=19, [12447]=19, [12448]=19, + [12449]=19, [12450]=1500, [12451]=1500, [12452]=1, [12453]=1, [12454]=1, + [12455]=1500, [12456]=1, [12457]=1500, [12458]=1500, [12459]=1500, [12460]=1500, + [12461]=2, [12462]=20274, [12463]=42446, [12464]=8520, [12465]=10261, [12466]=6865, + [12468]=8644, [12469]=29179, [12470]=8784, [12471]=8409, [12482]=2, [12502]=2, + [12522]=182, [12523]=1, [12527]=35332, [12528]=37833, [12529]=1500, [12531]=28883, + [12532]=48501, [12535]=34925, [12542]=12356, [12543]=7156, [12544]=7407, [12545]=7082, + [12546]=7463, [12547]=10519, [12548]=7102, [12549]=13669, [12550]=6464, [12551]=11594, + [12552]=10980, [12553]=17699, [12554]=9474, [12555]=11406, [12556]=14317, [12557]=14368, + [12582]=51199, [12583]=74346, [12584]=49636, [12585]=10000, [12587]=21031, [12588]=25446, + [12589]=10251, [12590]=75624, [12591]=2, [12592]=95241, [12593]=2, [12602]=35212, + [12603]=25048, [12604]=14368, [12605]=29106, [12606]=12668, [12607]=8048, [12608]=13232, + [12609]=20498, [12610]=12247, [12611]=12293, [12612]=12956, [12613]=18205, [12614]=18272, + [12615]=27510, [12616]=21841, [12617]=21919, [12618]=23972, [12619]=24058, [12620]=17245, + [12621]=45085, [12624]=20642, [12625]=13080, [12626]=9191, [12628]=16640, [12629]=2, + [12631]=8919, [12632]=14099, [12633]=14859, [12634]=15310, [12636]=24285, [12637]=10316, + [12639]=15271, [12640]=21894, [12641]=43836, [12643]=75, [12644]=200, [12645]=500, + [12651]=36055, [12653]=36318, [12654]=62, [12655]=500, [12662]=600, [12682]=3000, + [12683]=3000, [12684]=3000, [12685]=3000, [12686]=57991, [12687]=3000, [12688]=3000, + [12689]=3500, [12690]=3000, [12691]=4000, [12692]=4000, [12693]=5000, [12694]=5000, + [12695]=5000, [12696]=5000, [12697]=5500, [12698]=5500, [12699]=5000, [12700]=6250, + [12701]=6250, [12702]=6250, [12703]=10000, [12704]=7500, [12705]=7500, [12706]=7500, + [12707]=7500, [12709]=57991, [12711]=10000, [12713]=10000, [12714]=10000, [12715]=10000, + [12716]=15000, [12717]=15000, [12718]=15000, [12719]=15000, [12720]=20000, [12725]=15000, + [12726]=15000, [12727]=15000, [12728]=20000, [12742]=2, [12743]=2, [12744]=2, + [12745]=2, [12746]=2, [12747]=2, [12748]=2, [12749]=2, [12750]=2, + [12751]=2, [12752]=22907, [12754]=2, [12755]=4, [12756]=35057, [12757]=35192, + [12763]=200, [12764]=33621, [12769]=46154, [12772]=38871, [12773]=33079, [12774]=36044, + [12775]=39949, [12776]=48124, [12777]=38648, [12779]=35338, [12781]=42721, [12782]=56808, + [12783]=58215, [12784]=73036, [12786]=2, [12787]=2, [12788]=2, [12790]=74619, + [12791]=39411, [12792]=39255, [12793]=19846, [12794]=56304, [12795]=48821, [12796]=70912, + [12797]=56943, [12798]=57150, [12799]=7000, [12800]=10000, [12801]=2, [12802]=62625, + [12803]=500, [12804]=2000, [12805]=3987, [12808]=1000, [12809]=10000, [12810]=500, + [12811]=20000, [12816]=3000, [12817]=4000, [12818]=3125, [12819]=4000, [12821]=4000, + [12823]=5000, [12824]=5000, [12825]=5000, [12826]=5000, [12827]=5000, [12828]=5500, + [12830]=5500, [12831]=10000, [12832]=10000, [12833]=20000, [12834]=20000, [12835]=20000, + [12836]=20000, [12837]=20000, [12838]=20000, [12839]=20000, [12850]=2, [12851]=2, + [12852]=2, [12853]=2, [12854]=2, [12855]=2, [12856]=2, [12857]=2, + [12858]=2, [12859]=2, [12860]=6000, [12861]=2, [12863]=2, [12864]=2, + [12865]=2, [12866]=2, [12867]=2, [12868]=2, [12869]=2, [12871]=8048, + [12882]=3, [12883]=2, [12889]=2, [12890]=2, [12892]=2, [12893]=1, + [12895]=29461, [12901]=3, [12902]=2, [12903]=45482, [12904]=13584, [12905]=16359, + [12926]=14907, [12927]=19149, [12929]=19646, [12930]=10000, [12931]=1, [12932]=1, + [12933]=1, [12934]=2, [12935]=23196, [12936]=11640, [12937]=2, [12939]=60363, + [12940]=54812, [12941]=1, [12943]=2, [12944]=2, [12945]=42565, [12949]=2, + [12950]=2, [12951]=2, [12952]=14861, [12953]=22374, [12958]=12500, [12959]=3, + [12960]=17752, [12963]=27717, [12964]=33388, [12965]=22344, [12966]=14018, [12967]=16884, + [12968]=16948, [12969]=70884, [12970]=22768, [12974]=6105, [12975]=2205, [12976]=1770, + [12977]=355, [12978]=534, [12979]=617, [12980]=1, [12981]=1, [12982]=850, + [12983]=2362, [12984]=1423, [12985]=1153, [12986]=2, [12987]=906, [12988]=1137, + [12989]=2854, [12990]=2589, [12991]=2, [12992]=3260, [12993]=2, [12994]=787, + [12995]=1, [12996]=1527, [12997]=1920, [12998]=1020, [12999]=853, [13000]=65225, + [13001]=10648, [13002]=14617, [13003]=49640, [13004]=33590, [13005]=1331, [13006]=54840, + [13007]=13585, [13008]=12815, [13009]=15167, [13010]=2241, [13011]=1031, [13012]=1241, + [13013]=12355, [13014]=34705, [13015]=53957, [13016]=4771, [13017]=17209, [13018]=31967, + [13019]=4765, [13020]=8985, [13021]=16694, [13022]=27990, [13023]=42703, [13024]=4863, + [13025]=10464, [13026]=19441, [13027]=33832, [13028]=52605, [13029]=5613, [13030]=13113, + [13031]=1401, [13032]=4138, [13033]=8094, [13034]=14710, [13035]=25141, [13036]=40988, + [13037]=4729, [13038]=9630, [13039]=17892, [13040]=29444, [13041]=4516, [13042]=17596, + [13043]=32389, [13044]=52800, [13045]=10809, [13046]=35042, [13047]=56588, [13048]=5971, + [13049]=6191, [13050]=2, [13051]=22911, [13052]=41677, [13053]=59186, [13054]=15805, + [13055]=29367, [13056]=48330, [13057]=5382, [13058]=21833, [13059]=38719, [13060]=60784, + [13061]=2, [13062]=2991, [13063]=5851, [13064]=11487, [13065]=20945, [13066]=8997, + [13067]=14341, [13068]=4785, [13069]=2, [13070]=14087, [13071]=4061, [13072]=10426, + [13073]=9080, [13074]=8024, [13075]=22090, [13076]=4715, [13077]=8226, [13078]=2, + [13079]=3359, [13080]=22512, [13081]=7123, [13082]=13235, [13083]=34694, [13084]=6614, + [13085]=9137, [13086]=0, [13087]=5896, [13088]=7413, [13089]=8039, [13090]=35955, + [13091]=10637, [13093]=3381, [13094]=2646, [13095]=6646, [13096]=7913, [13097]=2164, + [13098]=15282, [13099]=1431, [13100]=5421, [13101]=14318, [13102]=6879, [13103]=3453, + [13104]=2, [13105]=2147, [13106]=1216, [13107]=11291, [13108]=2446, [13109]=8152, + [13110]=4968, [13111]=13993, [13112]=9624, [13113]=20546, [13114]=2574, [13115]=6990, + [13116]=19370, [13117]=3830, [13118]=10601, [13119]=3063, [13120]=9505, [13121]=3428, + [13122]=11489, [13123]=33387, [13124]=3996, [13125]=12954, [13126]=10374, [13127]=3021, + [13128]=10543, [13129]=7621, [13130]=25065, [13131]=2312, [13132]=7340, [13133]=23083, + [13134]=7716, [13135]=14001, [13136]=1456, [13137]=5874, [13138]=11532, [13139]=21029, + [13141]=12093, [13142]=11642, [13143]=21372, [13144]=6865, [13145]=2704, [13146]=34704, + [13147]=1, [13148]=62629, [13150]=2, [13160]=2, [13161]=65749, [13162]=10558, + [13163]=69537, [13164]=10539, [13165]=2, [13166]=14204, [13167]=59410, [13168]=19085, + [13169]=23948, [13170]=19230, [13171]=7000, [13173]=600, [13175]=30619, [13177]=16396, + [13178]=13782, [13179]=14916, [13181]=8797, [13182]=44142, [13183]=51771, [13184]=13638, + [13185]=16422, [13198]=50851, [13199]=4398, [13203]=15529, [13204]=51945, [13205]=35031, + [13206]=19880, [13208]=12520, [13210]=18024, [13211]=14474, [13212]=10670, [13213]=9633, + [13216]=13250, [13217]=8814, [13218]=53388, [13220]=2, [13222]=2, [13243]=36515, + [13244]=14482, [13245]=1064, [13246]=53622, [13247]=5837, [13248]=29670, [13249]=67782, + [13252]=12434, [13253]=9983, [13254]=25883, [13255]=14366, [13257]=18088, [13258]=13343, + [13259]=16069, [13260]=22561, [13261]=10452, [13262]=261407, [13282]=13684, [13283]=14907, + [13284]=19785, [13285]=54924, [13286]=44106, [13287]=625, [13288]=625, [13290]=1, + [13291]=1, [13292]=1, [13293]=1, [13308]=450, [13309]=250, [13310]=500, + [13311]=2500, [13312]=2, [13314]=30222, [13315]=11396, [13316]=2, [13318]=1, + [13319]=1, [13320]=0, [13321]=0, [13322]=0, [13323]=0, [13324]=0, + [13326]=0, [13327]=0, [13329]=0, [13331]=0, [13332]=0, [13333]=0, + [13334]=0, [13335]=250000, [13336]=2, [13337]=2, [13338]=2, [13339]=2, + [13340]=16498, [13342]=0, [13343]=0, [13344]=17210, [13345]=15457, [13346]=23118, + [13348]=72770, [13349]=58429, [13353]=10452, [13358]=21036, [13359]=25336, [13360]=56517, + [13361]=56730, [13362]=2000, [13363]=2000, [13364]=2000, [13365]=2000, [13366]=3000, + [13368]=55438, [13369]=17526, [13371]=6657, [13372]=63769, [13373]=14846, [13374]=14315, + [13375]=30656, [13376]=13738, [13377]=7, [13378]=21972, [13379]=10734, [13380]=38443, + [13381]=15433, [13382]=10850, [13383]=26864, [13384]=8988, [13385]=13237, [13386]=15722, + [13387]=15779, [13388]=21117, [13389]=21746, [13390]=16367, [13391]=16425, [13392]=12211, + [13393]=62380, [13394]=18176, [13395]=11403, [13396]=30853, [13397]=15201, [13398]=20028, + [13399]=46312, [13400]=9296, [13401]=51440, [13402]=21168, [13403]=9401, [13404]=15895, + [13405]=13102, [13408]=44142, [13409]=8119, [13422]=10, [13423]=125, [13442]=500, + [13443]=400, [13444]=1500, [13445]=500, [13446]=1000, [13447]=1250, [13452]=1250, + [13453]=1250, [13454]=750, [13455]=750, [13456]=750, [13457]=750, [13458]=750, + [13459]=100, [13460]=750, [13461]=750, [13462]=750, [13463]=100, [13464]=100, + [13465]=150, [13466]=250, [13467]=250, [13468]=1000, [13473]=7164, [13474]=24724, + [13475]=8109, [13476]=3000, [13477]=3000, [13478]=3250, [13479]=3500, [13480]=3750, + [13481]=3750, [13482]=0, [13483]=0, [13484]=0, [13485]=0, [13486]=3750, + [13487]=3750, [13488]=3750, [13489]=3750, [13490]=4000, [13491]=4000, [13492]=5000, + [13493]=5000, [13494]=6000, [13495]=6000, [13496]=6000, [13497]=6000, [13498]=19890, + [13499]=6000, [13500]=6000, [13501]=7500, [13502]=11987, [13503]=25000, [13504]=2, + [13505]=91345, [13506]=5000, [13508]=4778, [13509]=5393, [13510]=5000, [13511]=5000, + [13512]=5000, [13513]=5000, [13514]=5820, [13515]=9600, [13517]=0, [13518]=10000, + [13519]=10000, [13520]=10000, [13521]=10000, [13522]=10000, [13524]=12458, [13525]=8698, + [13526]=10897, [13527]=13149, [13528]=13198, [13529]=32303, [13530]=12453, [13531]=21191, + [13532]=12762, [13533]=12810, [13534]=37727, [13535]=16829, [13537]=9884, [13538]=19223, + [13539]=8535, [13546]=62, [13607]=2, [13608]=2, [13610]=0, [13612]=2, + [13622]=2, [13623]=2, [13625]=2, [13627]=2, [13628]=1, [13629]=1, + [13630]=1, [13631]=2, [13632]=2, [13698]=2, [13705]=2, [13706]=2, + [13707]=2, [13708]=2, [13709]=2, [13718]=2, [13719]=2, [13720]=2, + [13721]=2, [13722]=2, [13723]=2, [13724]=300, [13750]=3, [13751]=2, + [13753]=2, [13754]=6, [13755]=7, [13756]=9, [13757]=10, [13758]=4, + [13759]=10, [13760]=10, [13810]=300, [13811]=8988, [13812]=8303, [13813]=300, + [13814]=1, [13816]=10561, [13817]=18796, [13818]=13431, [13819]=19880, [13820]=12042, + [13821]=17993, [13822]=11442, [13823]=11924, [13824]=9015, [13825]=10168, [13842]=375, + [13843]=375, [13844]=375, [13845]=375, [13846]=375, [13847]=375, [13848]=375, + [13849]=375, [13851]=312, [13856]=5112, [13857]=10878, [13858]=10917, [13860]=8741, + [13861]=2, [13863]=6617, [13864]=9553, [13865]=13555, [13866]=11358, [13867]=12570, + [13868]=9665, [13869]=9702, [13870]=5471, [13871]=13436, [13874]=1, [13875]=1, + [13876]=25, [13877]=30, [13878]=32, [13879]=35, [13880]=37, [13881]=100, + [13882]=60, [13883]=60, [13884]=75, [13885]=50, [13886]=50, [13887]=75, + [13888]=12, [13889]=5, [13890]=70, [13891]=100, [13893]=15, [13894]=2, + [13895]=101324, [13896]=11020, [13897]=595, [13898]=57739, [13899]=3528, [13900]=27442, + [13901]=25, [13902]=25, [13903]=25, [13904]=25, [13905]=25, [13906]=50, + [13907]=50, [13908]=55, [13909]=55, [13910]=62, [13911]=80, [13912]=90, + [13913]=100, [13914]=125, [13915]=125, [13916]=150, [13917]=200, [13918]=1, + [13922]=1, [13923]=1, [13924]=1, [13925]=2, [13926]=10000, [13927]=8, + [13928]=8, [13929]=10, [13930]=5, [13931]=12, [13932]=12, [13933]=14, + [13934]=18, [13935]=10, [13937]=87013, [13938]=39304, [13939]=4000, [13940]=4000, + [13941]=4000, [13942]=4000, [13943]=4000, [13944]=26808, [13945]=5000, [13946]=5000, + [13947]=5000, [13948]=5000, [13949]=5000, [13950]=16447, [13951]=11005, [13952]=56683, + [13953]=56880, [13954]=20386, [13955]=16367, [13956]=10950, [13957]=12427, [13958]=9505, + [13959]=9542, [13960]=12828, [13961]=18028, [13962]=12064, [13963]=14533, [13964]=53612, + [13965]=16250, [13966]=16250, [13967]=23338, [13968]=16250, [13969]=16019, [13982]=69826, + [13983]=66754, [13984]=57806, [13986]=17469, [14002]=36720, [14022]=8991, [14023]=8991, + [14024]=52422, [14025]=188, [14042]=10561, [14043]=5955, [14044]=9503, [14045]=13480, + [14046]=5000, [14047]=400, [14048]=2000, [14082]=2, [14083]=20, [14084]=2, + [14085]=2, [14086]=45, [14087]=16, [14088]=24, [14089]=30, [14090]=119, + [14091]=119, [14092]=2, [14093]=21, [14094]=121, [14095]=36, [14096]=325, + [14097]=236, [14098]=43, [14099]=47, [14100]=12089, [14101]=6066, [14102]=60, + [14103]=9716, [14104]=15484, [14105]=1, [14106]=18053, [14107]=13140, [14108]=11112, + [14109]=341, [14110]=84, [14111]=10775, [14112]=13509, [14113]=139, [14114]=242, + [14115]=70, [14116]=106, [14117]=163, [14118]=1, [14119]=378, [14120]=577, + [14121]=579, [14122]=219, [14123]=287, [14124]=292, [14125]=676, [14126]=396, + [14127]=999, [14128]=16093, [14129]=415, [14130]=12768, [14131]=242, [14132]=12441, + [14133]=950, [14134]=11280, [14136]=17025, [14137]=18113, [14138]=20042, [14139]=15840, + [14140]=16693, [14141]=12859, [14142]=6087, [14143]=5763, [14144]=14374, [14145]=1032, + [14146]=14084, [14147]=311, [14148]=208, [14149]=307, [14150]=420, [14151]=1055, + [14152]=28815, [14153]=28920, [14154]=29028, [14155]=20000, [14156]=40000, [14157]=433, + [14158]=1236, [14159]=570, [14160]=251, [14161]=337, [14162]=445, [14163]=1168, + [14164]=312, [14165]=1041, [14166]=238, [14167]=358, [14168]=275, [14169]=286, + [14170]=331, [14171]=738, [14172]=837, [14173]=281, [14174]=368, [14175]=847, + [14176]=920, [14177]=631, [14178]=1532, [14179]=747, [14180]=1870, [14181]=775, + [14182]=1167, [14183]=1710, [14184]=1716, [14185]=647, [14186]=1179, [14187]=717, + [14188]=982, [14189]=1588, [14190]=1932, [14191]=881, [14192]=1946, [14193]=2006, + [14194]=756, [14195]=1252, [14196]=1673, [14197]=925, [14198]=1531, [14199]=1240, + [14200]=2258, [14201]=2060, [14202]=3336, [14203]=2754, [14204]=3041, [14205]=1042, + [14206]=1046, [14207]=3076, [14208]=2316, [14209]=1196, [14210]=1636, [14211]=1325, + [14212]=2194, [14213]=3553, [14214]=2009, [14215]=3579, [14216]=4887, [14217]=1638, + [14218]=2713, [14219]=2046, [14220]=3442, [14221]=1510, [14222]=1834, [14223]=2698, + [14224]=3901, [14225]=4694, [14226]=1731, [14227]=2500, [14228]=3559, [14229]=2387, + [14230]=5164, [14231]=1904, [14232]=3097, [14233]=4476, [14234]=5240, [14235]=1789, + [14236]=2909, [14237]=7206, [14238]=3691, [14239]=3176, [14240]=2294, [14241]=2311, + [14242]=5413, [14243]=4075, [14244]=6870, [14245]=2346, [14246]=4451, [14247]=4467, + [14248]=2372, [14249]=7559, [14250]=3872, [14251]=3332, [14252]=4914, [14253]=2819, + [14254]=7698, [14255]=2628, [14256]=2000, [14257]=6194, [14258]=3109, [14259]=5056, + [14260]=2900, [14261]=4044, [14262]=3156, [14263]=5987, [14264]=8013, [14265]=9853, + [14266]=5606, [14267]=9926, [14268]=3486, [14269]=5669, [14270]=4877, [14271]=6599, + [14272]=3820, [14273]=6374, [14274]=10448, [14275]=11115, [14276]=3598, [14277]=10131, + [14278]=6725, [14279]=4206, [14280]=5919, [14281]=8178, [14282]=4552, [14283]=11646, + [14284]=13135, [14285]=6905, [14286]=4620, [14287]=13282, [14288]=14132, [14289]=5131, + [14290]=7725, [14291]=4830, [14292]=6795, [14293]=9857, [14294]=5223, [14295]=13236, + [14296]=7568, [14297]=13556, [14298]=9628, [14299]=8602, [14300]=7685, [14301]=5451, + [14302]=6517, [14303]=16209, [14304]=6194, [14305]=14349, [14306]=16830, [14307]=12064, + [14308]=17799, [14309]=6866, [14310]=11615, [14311]=6524, [14312]=13541, [14313]=9298, + [14314]=7854, [14315]=16550, [14316]=11271, [14317]=16633, [14318]=18408, [14319]=11401, + [14320]=6855, [14321]=9438, [14322]=13712, [14323]=8322, [14324]=16706, [14325]=13204, + [14326]=19479, [14327]=7659, [14328]=21633, [14329]=14066, [14330]=8962, [14331]=11654, + [14332]=15674, [14333]=9987, [14334]=20044, [14335]=15086, [14336]=20137, [14337]=8546, + [14340]=21778, [14341]=1250, [14342]=4000, [14343]=0, [14344]=0, [14364]=324, + [14365]=214, [14366]=189, [14367]=251, [14368]=346, [14369]=809, [14370]=472, + [14371]=815, [14372]=1430, [14373]=524, [14374]=699, [14375]=528, [14376]=551, + [14377]=602, [14378]=997, [14379]=1615, [14380]=1473, [14382]=1, [14383]=1, + [14384]=1, [14385]=1, [14386]=1, [14387]=1, [14388]=1, [14389]=2, + [14390]=1, [14391]=3, [14392]=4, [14393]=2, [14394]=2, [14397]=1600, + [14398]=2355, [14399]=1465, [14400]=1215, [14401]=1786, [14402]=837, [14403]=1017, + [14404]=2471, [14405]=2480, [14406]=935, [14407]=4266, [14408]=2275, [14409]=1707, + [14410]=2709, [14411]=1387, [14412]=2298, [14413]=3947, [14414]=1276, [14415]=3410, + [14416]=1285, [14417]=5888, [14418]=3098, [14419]=1919, [14420]=2889, [14421]=3945, + [14422]=2262, [14423]=3406, [14424]=5316, [14425]=6223, [14426]=2125, [14427]=9124, + [14428]=4717, [14429]=2644, [14430]=3686, [14431]=2877, [14432]=4679, [14433]=6764, + [14434]=8706, [14435]=2778, [14436]=5270, [14437]=12002, [14438]=6192, [14439]=3836, + [14440]=5347, [14441]=7166, [14442]=4481, [14443]=6745, [14444]=10955, [14445]=12353, + [14446]=4248, [14447]=8801, [14448]=5555, [14449]=10125, [14450]=7364, [14451]=5536, + [14452]=8836, [14453]=15677, [14454]=5598, [14455]=15792, [14456]=20230, [14457]=7575, + [14458]=12573, [14459]=10798, [14460]=14661, [14461]=9342, [14462]=18751, [14463]=14114, + [14464]=20822, [14465]=8596, [14466]=3000, [14467]=3000, [14468]=3000, [14469]=3000, + [14470]=3000, [14471]=3000, [14472]=3000, [14473]=3000, [14474]=3000, [14475]=2, + [14476]=3500, [14477]=3500, [14478]=3500, [14479]=3500, [14480]=4000, [14481]=4000, + [14482]=4000, [14483]=4000, [14484]=4000, [14485]=4000, [14486]=10000, [14487]=53222, + [14488]=5000, [14489]=5000, [14490]=5000, [14491]=5000, [14492]=5000, [14493]=5000, + [14494]=5500, [14495]=5500, [14496]=5500, [14497]=5500, [14498]=6250, [14499]=7500, + [14500]=7500, [14501]=7500, [14502]=13051, [14503]=19652, [14504]=10000, [14505]=10000, + [14506]=10000, [14507]=10000, [14508]=15000, [14509]=15000, [14510]=15000, [14511]=15000, + [14512]=15000, [14513]=15000, [14514]=15000, [14522]=31318, [14524]=2, [14525]=10561, + [14526]=5000, [14527]=2, [14528]=34181, [14529]=500, [14530]=1000, [14531]=59891, + [14532]=2, [14533]=2, [14534]=2, [14535]=3, [14536]=32271, [14537]=17001, + [14538]=17062, [14539]=21404, [14541]=68426, [14543]=10478, [14545]=26397, [14548]=24792, + [14549]=7807, [14550]=8802, [14551]=10601, [14552]=15378, [14553]=17733, [14554]=29900, + [14555]=78772, [14557]=17880, [14558]=10500, [14559]=279, [14560]=484, [14561]=245, + [14562]=1039, [14563]=275, [14564]=304, [14565]=809, [14566]=1010, [14567]=529, + [14568]=797, [14569]=472, [14570]=1870, [14571]=496, [14572]=609, [14573]=1289, + [14574]=1568, [14575]=2, [14576]=48770, [14577]=21585, [14578]=983, [14579]=1791, + [14580]=818, [14581]=2912, [14582]=1088, [14583]=1333, [14584]=2673, [14585]=2687, + [14586]=2, [14587]=2030, [14588]=1989, [14589]=3294, [14590]=1821, [14591]=4180, + [14592]=5594, [14593]=2210, [14594]=2236, [14595]=4500, [14596]=3388, [14598]=2655, + [14599]=4663, [14600]=2675, [14601]=7307, [14602]=2995, [14603]=4383, [14604]=5986, + [14605]=6868, [14606]=2955, [14607]=5581, [14608]=3162, [14611]=32509, [14612]=32622, + [14614]=16427, [14615]=14916, [14616]=22559, [14617]=6250, [14618]=2, [14620]=10135, + [14621]=15261, [14622]=10212, [14623]=20503, [14624]=20578, [14626]=20732, [14627]=200, + [14629]=10758, [14630]=250, [14631]=16251, [14632]=21746, [14633]=16367, [14634]=625, + [14635]=750, [14636]=12476, [14637]=25048, [14638]=25145, [14639]=375, [14640]=12668, + [14641]=19074, [14642]=1, [14643]=2, [14652]=4215, [14653]=6854, [14654]=3931, + [14655]=10392, [14656]=4300, [14657]=4195, [14658]=7884, [14659]=9382, [14660]=7063, + [14661]=5461, [14662]=9413, [14663]=5141, [14664]=15058, [14665]=6214, [14666]=6367, + [14667]=10770, [14668]=13596, [14669]=9654, [14670]=20396, [14671]=13012, [14672]=7309, + [14673]=8303, [14674]=8270, [14675]=8182, [14676]=13841, [14677]=18524, [14678]=13156, + [14680]=25101, [14681]=17139, [14682]=9906, [14683]=11932, [14684]=10477, [14685]=11594, + [14686]=18327, [14687]=23357, [14688]=16742, [14706]=2, [14707]=2, [14722]=424, + [14723]=290, [14724]=253, [14725]=292, [14726]=337, [14727]=778, [14728]=485, + [14729]=870, [14730]=1223, [14742]=1118, [14743]=583, [14744]=2310, [14745]=444, + [14746]=589, [14747]=668, [14748]=1550, [14749]=1325, [14750]=1068, [14751]=3454, + [14752]=978, [14753]=2610, [14754]=1193, [14755]=1118, [14756]=1860, [14757]=3298, + [14758]=2267, [14759]=2009, [14760]=6263, [14761]=2024, [14762]=4074, [14763]=1685, + [14764]=2250, [14765]=4427, [14766]=5486, [14767]=4478, [14768]=8566, [14769]=5554, + [14770]=3172, [14771]=3030, [14772]=3284, [14773]=3052, [14774]=6252, [14775]=8367, + [14776]=6326, [14777]=9710, [14778]=4933, [14779]=13347, [14780]=14289, [14781]=4617, + [14782]=5004, [14783]=5424, [14784]=8202, [14785]=9558, [14786]=11841, [14787]=8323, + [14788]=6408, [14789]=17541, [14790]=18781, [14791]=6056, [14792]=6960, [14793]=6985, + [14794]=10563, [14795]=12690, [14796]=16983, [14797]=11427, [14798]=24037, [14799]=17308, + [14800]=25826, [14801]=8156, [14802]=9749, [14803]=9087, [14804]=16296, [14805]=20577, + [14806]=15560, [14807]=8211, [14808]=11581, [14809]=20276, [14810]=11669, [14811]=29898, + [14812]=32007, [14813]=10601, [14814]=21593, [14815]=13760, [14816]=27620, [14817]=20883, + [14818]=2, [14820]=2, [14821]=5290, [14822]=2, [14823]=2, [14824]=2, + [14825]=8595, [14826]=2311, [14827]=2320, [14828]=3772, [14829]=5049, [14830]=3801, + [14831]=4120, [14832]=2363, [14833]=2988, [14834]=2777, [14835]=8192, [14836]=2, + [14837]=2, [14838]=2892, [14839]=4701, [14840]=7925, [14841]=4284, [14842]=12483, + [14843]=5036, [14844]=11471, [14845]=2, [14846]=4534, [14847]=4254, [14848]=6854, + [14849]=8271, [14850]=10442, [14851]=7416, [14852]=19420, [14853]=4174, [14854]=16204, + [14855]=6502, [14856]=6156, [14857]=9266, [14858]=11740, [14859]=14820, [14860]=10523, + [14861]=5045, [14862]=18339, [14863]=7951, [14864]=7602, [14865]=12018, [14866]=13301, + [14867]=17802, [14868]=13109, [14869]=7577, [14870]=2, [14871]=2, [14873]=2, + [14874]=2, [14875]=2, [14876]=2, [14877]=2, [14878]=2, [14879]=3, + [14880]=2, [14881]=2, [14882]=2, [14893]=2, [14895]=4904, [14896]=3418, + [14897]=2286, [14898]=2295, [14899]=3731, [14900]=4298, [14901]=3494, [14902]=7482, + [14903]=2173, [14904]=9245, [14905]=3217, [14906]=2989, [14907]=6123, [14908]=8195, + [14909]=4897, [14910]=3033, [14911]=5327, [14912]=15232, [14913]=6697, [14914]=3590, + [14915]=11569, [14916]=17254, [14917]=3931, [14918]=3654, [14919]=7717, [14920]=9744, + [14921]=6407, [14922]=8273, [14923]=4604, [14924]=14031, [14925]=10562, [14926]=5598, + [14927]=5301, [14928]=12673, [14929]=8999, [14930]=22950, [14931]=18548, [14932]=11784, + [14933]=7884, [14934]=6754, [14935]=11885, [14936]=16702, [14937]=11406, [14938]=6470, + [14939]=6793, [14940]=4059, [14941]=2515, [14942]=2524, [14943]=2534, [14944]=4806, + [14945]=6432, [14946]=4151, [14947]=11198, [14948]=10301, [14949]=3907, [14950]=3630, + [14951]=5902, [14952]=7323, [14953]=9158, [14954]=15234, [14955]=5418, [14956]=3108, + [14957]=7223, [14958]=12938, [14959]=5143, [14960]=4870, [14961]=9259, [14962]=11690, + [14963]=8301, [14964]=21741, [14965]=4450, [14966]=17801, [14967]=6867, [14968]=6502, + [14969]=12241, [14970]=15598, [14971]=11076, [14972]=10486, [14973]=27810, [14974]=6009, + [14975]=20219, [14976]=8349, [14977]=7982, [14978]=13913, [14979]=14664, [14980]=19201, + [14981]=13764, [14982]=34119, [14983]=7985, [15003]=20, [15004]=42, [15005]=28, + [15006]=72, [15007]=24, [15008]=37, [15009]=162, [15010]=163, [15011]=183, + [15012]=296, [15013]=86, [15014]=585, [15015]=86, [15016]=200, [15017]=611, + [15018]=706, [15019]=366, [15045]=19938, [15046]=22482, [15047]=29836, [15048]=24409, + [15049]=20543, [15050]=26071, [15051]=21736, [15052]=31933, [15053]=17275, [15054]=14559, + [15055]=16019, [15056]=20966, [15057]=18728, [15058]=17631, [15059]=24776, [15060]=21277, + [15061]=13803, [15062]=25709, [15063]=11701, [15064]=19717, [15065]=22233, [15066]=23650, + [15067]=12758, [15068]=21835, [15069]=17012, [15070]=9504, [15071]=11443, [15072]=16233, + [15073]=11530, [15074]=6867, [15075]=18449, [15076]=16604, [15077]=7615, [15078]=9649, + [15079]=21760, [15080]=18230, [15081]=20261, [15082]=10375, [15083]=6872, [15084]=7311, + [15085]=22732, [15086]=13154, [15087]=17892, [15088]=9901, [15090]=22002, [15091]=7195, + [15092]=7656, [15093]=8368, [15094]=14155, [15095]=20885, [15096]=17332, [15104]=3188, + [15105]=14397, [15106]=14447, [15107]=5000, [15108]=5000, [15109]=3344, [15110]=351, + [15111]=609, [15112]=354, [15113]=1361, [15114]=372, [15115]=473, [15116]=1163, + [15117]=1219, [15118]=1562, [15119]=13683, [15120]=786, [15121]=1433, [15122]=701, + [15123]=2463, [15124]=847, [15125]=990, [15126]=1989, [15127]=1647, [15128]=2425, + [15129]=1825, [15130]=3252, [15131]=2023, [15132]=1017, [15133]=3826, [15134]=3295, + [15135]=1357, [15136]=1248, [15137]=1516, [15138]=15198, [15139]=3055, [15140]=2529, + [15141]=41937, [15142]=2603, [15143]=1439, [15144]=4232, [15145]=4943, [15146]=3730, + [15147]=1753, [15148]=1613, [15149]=1960, [15150]=2951, [15151]=3949, [15152]=4449, + [15153]=2626, [15154]=2372, [15155]=2571, [15156]=5266, [15157]=6200, [15158]=4320, + [15159]=6743, [15160]=2430, [15161]=3319, [15162]=5829, [15163]=3344, [15164]=9135, + [15165]=3744, [15166]=3945, [15167]=7484, [15168]=7951, [15169]=5542, [15170]=13103, + [15171]=8697, [15172]=4706, [15173]=5387, [15174]=6017, [15175]=9692, [15176]=12121, + [15177]=8525, [15178]=4935, [15179]=18593, [15180]=6686, [15181]=11312, [15182]=5996, + [15183]=6751, [15184]=7197, [15185]=12905, [15186]=15373, [15187]=10918, [15188]=8702, + [15189]=15722, [15190]=9614, [15191]=9034, [15192]=10595, [15193]=17586, [15194]=22412, + [15195]=23617, [15196]=2500, [15197]=2500, [15198]=10000, [15199]=10000, [15200]=5000, + [15202]=515, [15203]=621, [15204]=779, [15205]=1063, [15206]=857, [15207]=868, + [15210]=825, [15211]=1916, [15212]=3450, [15213]=8165, [15214]=11356, [15215]=16744, + [15216]=25932, [15217]=30996, [15218]=37047, [15219]=41376, [15220]=43493, [15221]=51946, + [15222]=1219, [15223]=2376, [15224]=2695, [15225]=5958, [15226]=8755, [15227]=21925, + [15228]=28308, [15229]=31924, [15230]=2755, [15231]=5033, [15232]=6112, [15233]=10476, + [15234]=11354, [15235]=21090, [15236]=27485, [15237]=30526, [15238]=36496, [15239]=42409, + [15240]=49281, [15241]=3012, [15242]=4426, [15243]=7871, [15244]=12769, [15245]=23284, + [15246]=45704, [15247]=50576, [15248]=1791, [15249]=3877, [15250]=6894, [15251]=17685, + [15252]=27906, [15253]=31547, [15254]=35584, [15255]=42545, [15256]=47531, [15257]=55234, + [15258]=64185, [15259]=3306, [15260]=11556, [15261]=13530, [15262]=21552, [15263]=28889, + [15264]=41517, [15265]=46823, [15266]=54405, [15267]=60203, [15268]=1024, [15269]=3036, + [15270]=22775, [15271]=43701, [15272]=51740, [15273]=57108, [15274]=31666, [15275]=35714, + [15276]=45263, [15277]=0, [15278]=50285, [15279]=18267, [15280]=20603, [15281]=26110, + [15282]=30628, [15283]=37365, [15284]=3039, [15285]=4061, [15286]=5568, [15287]=12516, + [15288]=33743, [15289]=41161, [15290]=0, [15291]=19591, [15292]=0, [15293]=0, + [15294]=20135, [15295]=22712, [15296]=34657, [15297]=45, [15298]=305, [15299]=42, + [15300]=86, [15301]=108, [15302]=47, [15303]=299, [15304]=414, [15305]=412, + [15306]=208, [15307]=815, [15308]=241, [15309]=220, [15310]=279, [15311]=982, + [15312]=745, [15313]=514, [15322]=7745, [15323]=17791, [15324]=25565, [15325]=31784, + [15326]=200, [15327]=200, [15329]=622, [15330]=1059, [15331]=555, [15332]=2263, + [15333]=537, [15334]=828, [15335]=580, [15336]=1669, [15337]=2027, [15338]=1387, + [15339]=2466, [15340]=1016, [15341]=1697, [15342]=2907, [15343]=1139, [15344]=2516, + [15345]=1894, [15346]=2788, [15347]=955, [15348]=792, [15349]=1549, [15350]=2384, + [15351]=1090, [15352]=4101, [15353]=3467, [15354]=1600, [15355]=1620, [15356]=3935, + [15357]=2693, [15358]=3604, [15359]=5955, [15360]=2372, [15361]=2204, [15362]=3871, + [15363]=4894, [15364]=2431, [15365]=2415, [15366]=5250, [15367]=6246, [15368]=3674, + [15369]=3097, [15370]=5439, [15371]=3467, [15372]=3383, [15373]=6930, [15374]=7363, + [15375]=5132, [15376]=8653, [15377]=3191, [15378]=4358, [15379]=7654, [15380]=4390, + [15381]=12593, [15382]=5043, [15383]=5313, [15384]=9155, [15385]=11449, [15386]=7287, + [15387]=5583, [15388]=6357, [15389]=10146, [15390]=16175, [15391]=12178, [15392]=6382, + [15393]=6479, [15394]=14615, [15395]=10379, [15396]=582, [15397]=731, [15398]=108, + [15399]=151, [15400]=109, [15401]=72, [15402]=109, [15403]=279, [15404]=337, + [15405]=245, [15406]=402, [15407]=500, [15408]=500, [15409]=1000, [15410]=5000, + [15411]=10283, [15412]=500, [15413]=22519, [15414]=1500, [15415]=500, [15416]=1000, + [15417]=500, [15418]=73597, [15419]=600, [15420]=100, [15421]=17855, [15422]=500, + [15423]=500, [15424]=1404, [15425]=8272, [15426]=13419, [15427]=8536, [15428]=8024, + [15429]=9049, [15430]=15435, [15431]=19673, [15432]=14104, [15433]=21849, [15434]=10964, + [15435]=18199, [15436]=10519, [15437]=13301, [15438]=12264, [15439]=19387, [15440]=24707, + [15441]=18595, [15442]=27433, [15443]=1119, [15444]=1404, [15445]=1127, [15449]=425, + [15450]=533, [15451]=643, [15452]=215, [15453]=269, [15455]=3541, [15456]=4442, + [15457]=1134, [15458]=1423, [15459]=1142, [15460]=1, [15461]=841, [15462]=653, + [15463]=787, [15464]=4504, [15465]=2713, [15466]=2323, [15467]=8630, [15468]=1207, + [15469]=1009, [15470]=2432, [15471]=2034, [15472]=33, [15473]=65, [15474]=23, + [15475]=24, [15476]=44, [15477]=192, [15478]=52, [15479]=179, [15480]=84, + [15481]=127, [15482]=54, [15483]=41, [15484]=68, [15485]=344, [15486]=245, + [15487]=479, [15488]=967, [15489]=363, [15490]=105, [15491]=211, [15492]=212, + [15493]=647, [15494]=693, [15495]=220, [15496]=461, [15497]=387, [15498]=674, + [15499]=307, [15500]=1377, [15501]=269, [15502]=411, [15503]=1091, [15504]=1168, + [15505]=561, [15506]=723, [15507]=364, [15508]=365, [15509]=485, [15510]=423, + [15511]=1474, [15512]=1578, [15513]=1264, [15514]=1902, [15515]=844, [15516]=1587, + [15517]=850, [15518]=2825, [15519]=607, [15520]=879, [15521]=1942, [15522]=2516, + [15523]=1474, [15524]=2876, [15525]=1634, [15526]=704, [15527]=1020, [15528]=930, + [15529]=2487, [15530]=3222, [15531]=2076, [15532]=944, [15533]=2290, [15534]=2308, + [15535]=1270, [15536]=4107, [15537]=1163, [15538]=1412, [15539]=1282, [15540]=2827, + [15541]=3441, [15542]=2365, [15543]=4179, [15544]=2448, [15545]=1348, [15546]=4793, + [15547]=1234, [15548]=1649, [15549]=1504, [15550]=3316, [15551]=4438, [15552]=5226, + [15553]=3061, [15554]=1853, [15555]=2802, [15556]=1697, [15557]=5486, [15558]=4128, + [15559]=1450, [15560]=1937, [15561]=4705, [15562]=3558, [15563]=5562, [15564]=1000, + [15565]=4274, [15566]=2178, [15567]=6666, [15568]=1813, [15569]=7162, [15570]=2431, + [15571]=2218, [15572]=4714, [15573]=5840, [15574]=5150, [15575]=2300, [15576]=4462, + [15577]=2317, [15578]=6962, [15579]=2122, [15580]=4871, [15581]=2794, [15582]=6544, + [15583]=5344, [15584]=7594, [15585]=1446, [15587]=1822, [15588]=2194, [15589]=5462, + [15590]=2674, [15591]=8739, [15592]=8465, [15593]=5532, [15594]=2520, [15595]=2950, + [15596]=6909, [15597]=5642, [15598]=2763, [15599]=6631, [15600]=3787, [15601]=10345, + [15602]=7211, [15603]=3546, [15604]=11158, [15605]=3858, [15606]=3585, [15607]=9305, + [15608]=7035, [15609]=11806, [15610]=4354, [15611]=4369, [15612]=4285, [15613]=3688, + [15614]=7026, [15615]=7584, [15616]=10151, [15617]=7107, [15618]=11782, [15619]=5987, + [15620]=5564, [15621]=15766, [15622]=14834, [15623]=10715, [15624]=4971, [15625]=5818, + [15626]=8798, [15627]=14493, [15628]=9570, [15629]=6374, [15630]=10312, [15631]=16672, + [15632]=4997, [15633]=16210, [15634]=11441, [15635]=5896, [15636]=6333, [15637]=14557, + [15638]=9614, [15639]=7040, [15640]=20233, [15641]=7587, [15642]=12162, [15643]=6675, + [15644]=8130, [15645]=14577, [15646]=19506, [15647]=13125, [15648]=22212, [15649]=7808, + [15650]=22230, [15651]=15785, [15652]=7139, [15653]=8053, [15654]=8569, [15655]=19862, + [15656]=13366, [15657]=22625, [15658]=17850, [15659]=9508, [15660]=26315, [15661]=9036, + [15662]=10801, [15663]=10226, [15664]=19071, [15665]=25520, [15666]=18375, [15667]=28785, + [15668]=11697, [15669]=28538, [15670]=20455, [15671]=9782, [15672]=12164, [15673]=11075, + [15674]=18464, [15675]=28932, [15676]=25928, [15677]=19605, [15678]=21693, [15679]=13108, + [15680]=31983, [15681]=11406, [15682]=14610, [15683]=12666, [15684]=23178, [15685]=29539, + [15686]=22331, [15687]=32493, [15689]=4040, [15690]=4912, [15691]=6909, [15692]=6935, + [15693]=14533, [15694]=13264, [15695]=5771, [15697]=2825, [15698]=4273, [15699]=25, + [15702]=7396, [15703]=9032, [15704]=6145, [15705]=33830, [15706]=33830, [15707]=7215, + [15708]=8965, [15709]=7270, [15723]=2825, [15724]=4000, [15725]=3000, [15726]=3000, + [15727]=6000, [15728]=3000, [15729]=3000, [15730]=3000, [15731]=3500, [15732]=3500, + [15733]=3500, [15734]=3500, [15735]=3500, [15737]=4000, [15738]=10000, [15739]=4000, + [15740]=4000, [15741]=4000, [15742]=4000, [15743]=5000, [15744]=5000, [15745]=5000, + [15746]=5000, [15747]=5000, [15748]=5000, [15749]=5000, [15751]=5000, [15752]=5000, + [15753]=5000, [15754]=5000, [15755]=5500, [15756]=5500, [15757]=5500, [15758]=5500, + [15759]=5500, [15760]=5500, [15761]=6250, [15762]=6250, [15763]=6250, [15764]=6250, + [15765]=7500, [15768]=7500, [15769]=7500, [15770]=7500, [15771]=7500, [15772]=7500, + [15773]=10000, [15774]=10000, [15775]=10000, [15776]=10000, [15777]=15000, [15778]=1250, + [15779]=15000, [15780]=30000, [15781]=15000, [15782]=43142, [15783]=43292, [15784]=11541, + [15786]=18826, [15787]=22592, [15789]=9574, [15791]=7172, [15792]=14154, [15793]=50, + [15794]=1, [15795]=7631, [15796]=12063, [15797]=7530, [15798]=50, [15799]=7108, + [15800]=36082, [15801]=35860, [15802]=11648, [15804]=9574, [15805]=14662, [15806]=51273, + [15807]=58, [15808]=728, [15809]=2938, [15810]=2029, [15811]=5426, [15812]=9574, + [15813]=10113, [15814]=41911, [15815]=11860, [15822]=11290, [15823]=9191, [15824]=15061, + [15825]=19302, [15827]=22592, [15846]=7500, [15853]=51418, [15854]=64502, [15855]=7888, + [15856]=8788, [15857]=15335, [15858]=7530, [15859]=11296, [15860]=7907, [15861]=14969, + [15862]=28789, [15863]=28896, [15864]=1947, [15865]=6562, [15866]=562, [15867]=7464, + [15869]=50, [15870]=300, [15871]=625, [15872]=625, [15873]=8144, [15887]=29581, + [15890]=25831, [15891]=2014, [15892]=3582, [15893]=1082, [15894]=1802, [15895]=53, + [15902]=20000, [15903]=1623, [15904]=4341, [15905]=426, [15906]=427, [15907]=1647, + [15909]=4421, [15910]=2, [15912]=1148, [15918]=4848, [15925]=439, [15926]=802, + [15927]=1864, [15928]=2387, [15929]=4396, [15930]=9146, [15931]=10646, [15932]=527, + [15933]=620, [15934]=2596, [15935]=3323, [15936]=8950, [15937]=7922, [15938]=9550, + [15939]=10455, [15940]=10957, [15941]=12345, [15942]=12757, [15943]=27752, [15944]=512, + [15945]=837, [15946]=802, [15947]=1887, [15962]=2716, [15963]=4887, [15964]=6364, + [15965]=7996, [15966]=9137, [15967]=10304, [15968]=802, [15969]=425, [15970]=587, + [15971]=1064, [15972]=1171, [15973]=2313, [15974]=1461, [15975]=2421, [15976]=4146, + [15977]=4614, [15978]=5385, [15979]=7215, [15980]=7469, [15981]=7215, [15982]=8142, + [15983]=8387, [15984]=9614, [15985]=9887, [15986]=10813, [15987]=10996, [15988]=12471, + [15989]=12498, [15990]=6850, [15991]=29230, [15992]=250, [15993]=1500, [15994]=2500, + [15995]=19739, [15996]=2500, [15997]=10, [15999]=9002, [16000]=3750, [16004]=29152, + [16005]=1250, [16006]=10000, [16007]=40625, [16008]=11739, [16009]=5930, [16022]=40000, + [16023]=10000, [16026]=7160, [16027]=9488, [16028]=9488, [16029]=4828, [16030]=7270, + [16031]=7297, [16033]=4901, [16034]=7116, [16035]=7407, [16036]=9488, [16037]=9488, + [16038]=7116, [16039]=53598, [16040]=4000, [16041]=3000, [16042]=3000, [16043]=3000, + [16044]=4000, [16045]=4000, [16046]=4000, [16047]=4000, [16048]=4000, [16049]=5000, + [16050]=5000, [16051]=5000, [16052]=5000, [16053]=5000, [16054]=6000, [16055]=6000, + [16056]=6000, [16057]=5000, [16058]=10156, [16059]=100, [16060]=100, [16072]=2500, + [16073]=5000, [16082]=5000, [16083]=2500, [16084]=2500, [16085]=5000, [16110]=3000, + [16111]=3000, [16112]=550, [16113]=1250, [16166]=1, [16167]=6, [16168]=100, + [16169]=62, [16170]=25, [16171]=200, [16202]=0, [16203]=0, [16204]=0, + [16206]=300000, [16207]=1250, [16214]=3000, [16215]=3000, [16216]=3000, [16217]=3000, + [16218]=3500, [16219]=3500, [16220]=4000, [16221]=4000, [16222]=5000, [16223]=5000, + [16224]=5000, [16242]=5500, [16243]=5500, [16244]=6000, [16245]=6000, [16246]=6000, + [16247]=6000, [16248]=6000, [16249]=7500, [16250]=7500, [16251]=7500, [16252]=7500, + [16253]=7500, [16254]=7500, [16255]=7500, [16302]=25, [16315]=805, [16316]=375, + [16317]=1250, [16318]=2500, [16319]=3500, [16320]=6000, [16321]=25, [16322]=225, + [16323]=1000, [16324]=2500, [16325]=3750, [16326]=225, [16327]=750, [16328]=2000, + [16329]=3000, [16330]=5000, [16331]=150, [16335]=10000, [16336]=2917, [16337]=7491, + [16339]=0, [16341]=4285, [16342]=8830, [16345]=49483, [16346]=500, [16347]=1500, + [16348]=2750, [16349]=3750, [16350]=6500, [16351]=300, [16352]=750, [16353]=1750, + [16354]=2750, [16355]=3500, [16356]=5500, [16357]=375, [16358]=1000, [16359]=2000, + [16360]=2750, [16361]=3750, [16362]=6000, [16363]=750, [16364]=2250, [16365]=3500, + [16366]=6500, [16367]=4810, [16368]=1250, [16369]=8416, [16370]=4865, [16371]=2250, + [16372]=3000, [16373]=4500, [16374]=6500, [16375]=625, [16376]=2000, [16377]=3250, + [16378]=6000, [16379]=1000, [16380]=1750, [16381]=2500, [16382]=3250, [16383]=5000, + [16384]=1750, [16385]=2750, [16386]=3500, [16387]=5500, [16388]=2250, [16389]=4500, + [16390]=2750, [16391]=5652, [16392]=10638, [16393]=10676, [16394]=6171, [16395]=6359, + [16396]=7388, [16397]=7414, [16398]=6427, [16399]=6450, [16400]=7768, [16401]=13596, + [16402]=7823, [16403]=8223, [16404]=4754, [16405]=8286, [16406]=5545, [16407]=4809, + [16409]=8413, [16410]=5630, [16411]=5013, [16412]=5031, [16413]=11692, [16414]=11735, + [16415]=8833, [16416]=8864, [16417]=14827, [16418]=11160, [16419]=14934, [16420]=11239, + [16421]=15039, [16422]=15092, [16423]=10278, [16424]=10317, [16425]=16571, [16426]=16635, + [16427]=12923, [16428]=12914, [16429]=8641, [16430]=11564, [16431]=11606, [16432]=8736, + [16433]=11691, [16434]=8800, [16435]=11775, [16436]=8863, [16437]=17523, [16438]=8749, + [16439]=8779, [16440]=11807, [16441]=20575, [16442]=23780, [16443]=25692, [16444]=19342, + [16445]=10429, [16446]=21041, [16447]=10506, [16448]=14132, [16449]=24631, [16450]=28472, + [16451]=24811, [16452]=33202, [16453]=33324, [16454]=14444, [16455]=25172, [16456]=29098, + [16457]=25352, [16458]=10934, [16459]=20492, [16460]=10233, [16461]=12326, [16462]=24982, + [16463]=16644, [16464]=12466, [16465]=29117, [16466]=38968, [16467]=33788, [16468]=29576, + [16469]=8466, [16470]=8497, [16471]=11429, [16472]=17205, [16473]=26654, [16474]=20063, + [16475]=23793, [16476]=18757, [16477]=25107, [16478]=18903, [16479]=21856, [16480]=19047, + [16481]=8216, [16482]=8247, [16483]=16642, [16484]=11135, [16485]=8511, [16486]=5695, + [16487]=5716, [16488]=4956, [16489]=8638, [16490]=11560, [16491]=11906, [16492]=8962, + [16493]=6474, [16494]=11282, [16495]=6519, [16496]=6853, [16497]=6880, [16498]=10360, + [16499]=6932, [16500]=6011, [16501]=10479, [16502]=14025, [16503]=10558, [16504]=14130, + [16505]=14184, [16506]=10676, [16507]=11002, [16508]=14723, [16509]=8866, [16510]=5931, + [16511]=5142, [16512]=5160, [16513]=11991, [16514]=9024, [16515]=12075, [16516]=8223, + [16517]=7131, [16518]=12485, [16519]=8318, [16520]=7213, [16521]=12572, [16522]=16827, + [16523]=17349, [16524]=13117, [16525]=17475, [16526]=13154, [16527]=17603, [16528]=13309, + [16529]=7657, [16530]=8896, [16531]=13452, [16532]=8960, [16533]=20504, [16534]=23700, + [16535]=27533, [16536]=18751, [16537]=8088, [16538]=8120, [16539]=16836, [16540]=11265, + [16541]=26178, [16542]=19707, [16543]=22782, [16544]=19850, [16545]=17210, [16546]=8593, + [16547]=8624, [16548]=11598, [16549]=33688, [16550]=25357, [16551]=25448, [16552]=29413, + [16553]=11013, [16554]=22217, [16555]=13819, [16556]=10351, [16557]=10390, [16558]=20964, + [16559]=10467, [16560]=14080, [16561]=24540, [16562]=24631, [16563]=32959, [16564]=28576, + [16565]=39843, [16566]=29991, [16567]=34666, [16568]=30341, [16569]=26305, [16570]=13073, + [16571]=16331, [16572]=12233, [16573]=24795, [16574]=16518, [16575]=12373, [16576]=12420, + [16577]=38681, [16578]=29117, [16579]=33662, [16580]=29466, [16582]=1, [16583]=500, + [16604]=17, [16605]=17, [16606]=17, [16607]=16, [16608]=193, [16622]=27307, + [16623]=7783, [16645]=62, [16646]=62, [16647]=62, [16648]=62, [16649]=62, + [16650]=62, [16651]=62, [16652]=62, [16653]=62, [16654]=62, [16655]=62, + [16656]=62, [16658]=1649, [16659]=856, [16660]=2200, [16661]=965, [16664]=9234, + [16666]=35962, [16667]=25778, [16668]=30541, [16669]=21995, [16670]=21027, [16671]=12586, + [16672]=14059, [16673]=13440, [16674]=34435, [16675]=21421, [16676]=14268, [16677]=24868, + [16678]=31694, [16679]=22822, [16680]=13788, [16681]=13055, [16682]=14582, [16683]=8765, + [16684]=9093, [16685]=8694, [16686]=15912, [16687]=20281, [16688]=22445, [16689]=14597, + [16690]=22616, [16691]=14005, [16692]=9372, [16693]=16335, [16694]=20820, [16695]=14925, + [16696]=9058, [16697]=8577, [16698]=16636, [16699]=21202, [16700]=24071, [16701]=15650, + [16702]=8592, [16703]=8138, [16704]=13639, [16705]=9127, [16706]=27841, [16707]=19962, + [16708]=18175, [16709]=25542, [16710]=10446, [16711]=17505, [16712]=11714, [16713]=11196, + [16714]=10602, [16715]=17766, [16716]=11620, [16717]=12244, [16718]=19354, [16719]=27192, + [16720]=21490, [16721]=30190, [16722]=8105, [16723]=8625, [16724]=9091, [16725]=13688, + [16726]=22270, [16727]=15968, [16728]=20354, [16729]=14592, [16730]=22609, [16731]=16210, + [16732]=21213, [16733]=15207, [16734]=14536, [16735]=8738, [16736]=9295, [16737]=9794, + [16738]=3893, [16739]=7300, [16740]=942, [16741]=1178, [16747]=27, [16748]=15, + [16766]=100, [16767]=750, [16768]=37500, [16769]=26616, [16788]=5095, [16789]=5992, + [16791]=1912, [16792]=8886, [16793]=4353, [16794]=2705, [16795]=27359, [16796]=33990, + [16797]=25591, [16798]=34253, [16799]=17192, [16800]=25885, [16801]=17322, [16802]=17388, + [16803]=26181, [16804]=17517, [16805]=17583, [16806]=17649, [16807]=26572, [16808]=26668, + [16809]=35690, [16810]=35821, [16811]=26962, [16812]=18040, [16813]=27866, [16814]=37286, + [16815]=33855, [16816]=25490, [16817]=17059, [16818]=27895, [16819]=17189, [16820]=43137, + [16821]=32476, [16822]=43466, [16823]=32719, [16824]=32842, [16825]=21977, [16826]=22057, + [16827]=22139, [16828]=22221, [16829]=34339, [16830]=22972, [16831]=23055, [16832]=56532, + [16833]=46439, [16834]=34949, [16835]=42315, [16836]=31859, [16837]=38550, [16838]=25682, + [16839]=25781, [16840]=25879, [16841]=51956, [16842]=39111, [16843]=52346, [16844]=39582, + [16845]=54148, [16846]=40759, [16847]=54543, [16848]=41237, [16849]=41382, [16850]=27564, + [16851]=27663, [16852]=27762, [16853]=37144, [16854]=27956, [16855]=33848, [16856]=25485, + [16857]=17054, [16858]=17119, [16859]=25778, [16860]=17249, [16861]=17786, [16862]=26778, + [16863]=17917, [16864]=17981, [16865]=36095, [16866]=27170, [16867]=36358, [16868]=27364, + [16873]=2254, [16886]=5492, [16887]=1988, [16889]=3093, [16890]=2483, [16891]=1697, + [16894]=1993, [16897]=71351, [16898]=53709, [16899]=35940, [16900]=54111, [16901]=72415, + [16902]=54507, [16903]=36472, [16904]=36606, [16905]=73480, [16906]=55305, [16907]=37004, + [16908]=55707, [16909]=69209, [16910]=34738, [16911]=34872, [16912]=42007, [16913]=28109, + [16914]=42324, [16915]=56647, [16916]=56861, [16917]=42802, [16918]=28642, [16919]=43123, + [16920]=28856, [16921]=43440, [16922]=58135, [16923]=58349, [16924]=43918, [16925]=30153, + [16926]=30260, [16927]=45551, [16928]=27573, [16929]=41521, [16930]=55575, [16931]=55790, + [16932]=41998, [16933]=28106, [16934]=28213, [16935]=42481, [16936]=42637, [16937]=64482, + [16938]=85917, [16939]=64672, [16940]=43275, [16941]=67178, [16942]=89496, [16943]=44904, + [16944]=45065, [16945]=68140, [16946]=90773, [16947]=68314, [16948]=41356, [16949]=62552, + [16950]=83355, [16951]=27889, [16952]=27996, [16953]=42155, [16954]=56415, [16955]=42472, + [16956]=28422, [16957]=43944, [16958]=58801, [16959]=29507, [16960]=29614, [16961]=44583, + [16962]=59652, [16963]=44900, [16964]=30040, [16965]=45221, [16966]=60503, [16971]=300, + [16975]=813, [16977]=1448, [16978]=1158, [16979]=28711, [16980]=25490, [16981]=271, + [16982]=26397, [16983]=28711, [16984]=41382, [16985]=847, [16986]=850, [16987]=884, + [16988]=47832, [16989]=25682, [16990]=998, [16992]=30874, [16993]=30989, [16994]=9884, + [16995]=14826, [16996]=41451, [16997]=41603, [16998]=35631, [16999]=10709, [17000]=10314, + [17001]=10314, [17002]=44825, [17003]=44982, [17004]=56429, [17005]=1632, [17006]=1966, + [17007]=11447, [17010]=2000, [17011]=2000, [17012]=1000, [17013]=17013, [17014]=13643, + [17015]=87004, [17016]=87000, [17017]=45000, [17018]=20000, [17019]=175, [17020]=250, + [17021]=175, [17022]=37500, [17023]=40000, [17024]=175, [17025]=40000, [17026]=250, + [17027]=100, [17028]=175, [17029]=250, [17030]=500, [17031]=250, [17032]=500, + [17033]=500, [17034]=50, [17035]=100, [17036]=200, [17037]=350, [17038]=500, + [17039]=8317, [17040]=2, [17041]=2, [17042]=5692, [17043]=3054, [17044]=15038, + [17045]=14846, [17046]=4796, [17047]=1313, [17048]=400, [17049]=22500, [17050]=12536, + [17051]=17500, [17052]=45000, [17053]=50000, [17054]=28788, [17055]=26747, [17056]=7, + [17057]=7, [17058]=7, [17059]=55000, [17060]=55000, [17061]=12888, [17062]=550, + [17063]=23961, [17064]=45914, [17065]=33381, [17066]=57970, [17067]=75452, [17068]=134832, + [17069]=75746, [17070]=109307, [17071]=104472, [17072]=82572, [17073]=113631, [17074]=98514, + [17075]=135266, [17076]=196438, [17077]=59741, [17078]=37203, [17082]=46146, [17102]=38689, + [17103]=111823, [17104]=179067, [17105]=102178, [17106]=87960, [17107]=37537, [17108]=24213, + [17109]=33625, [17110]=24648, [17111]=34648, [17112]=90558, [17113]=119278, [17119]=6, + [17123]=2, [17142]=159115, [17182]=332623, [17183]=6, [17184]=6, [17185]=48, + [17186]=48, [17187]=215, [17188]=453, [17189]=2408, [17190]=6921, [17192]=879, + [17193]=122311, [17194]=0, [17195]=0, [17196]=12, [17197]=10, [17198]=9, + [17199]=9, [17200]=6, [17201]=60, [17202]=0, [17203]=100000, [17204]=200000, + [17222]=300, [17223]=97074, [17282]=2, [17283]=2, [17303]=2, [17304]=2, + [17307]=2, [17344]=1, [17348]=250, [17349]=125, [17351]=250, [17352]=125, + [17382]=3, [17383]=2, [17402]=500, [17403]=37, [17404]=6, [17405]=50, + [17406]=6, [17407]=50, [17408]=100, [17413]=7750, [17414]=14750, [17422]=2, + [17462]=2, [17463]=2, [17482]=1, [17508]=7270, [17522]=2, [17523]=10758, + [17542]=2, [17562]=8736, [17563]=5049, [17564]=5866, [17565]=4744, [17566]=8863, + [17567]=11860, [17568]=11054, [17569]=8322, [17570]=8354, [17571]=11182, [17572]=11223, + [17573]=8449, [17574]=4744, [17575]=4744, [17576]=8544, [17577]=5717, [17578]=19632, + [17579]=22695, [17580]=19775, [17581]=26465, [17582]=8561, [17583]=17270, [17584]=11856, + [17585]=8878, [17586]=16206, [17587]=8093, [17588]=10887, [17589]=8155, [17590]=19051, + [17591]=19121, [17592]=25593, [17593]=22192, [17594]=8481, [17595]=4744, [17596]=5696, + [17597]=4744, [17598]=8607, [17599]=11518, [17600]=11866, [17601]=8931, [17602]=20439, + [17603]=23626, [17604]=20585, [17605]=27544, [17606]=8060, [17607]=16266, [17608]=10886, + [17609]=8154, [17610]=8352, [17611]=11179, [17612]=11221, [17613]=8447, [17614]=4744, + [17615]=4744, [17616]=8772, [17617]=5868, [17618]=17404, [17619]=8689, [17620]=11687, + [17621]=8751, [17622]=20437, [17623]=20510, [17624]=27444, [17625]=23789, [17682]=8750, + [17683]=14750, [17686]=9937, [17687]=9937, [17688]=3155, [17692]=881, [17694]=881, + [17695]=930, [17704]=9178, [17705]=32854, [17706]=950, [17707]=11631, [17708]=35, + [17709]=500, [17710]=35483, [17711]=14244, [17713]=14641, [17714]=10225, [17715]=10225, + [17716]=7500, [17717]=26425, [17718]=22630, [17719]=32106, [17720]=600, [17721]=2268, + [17722]=700, [17723]=750, [17724]=375, [17725]=750, [17728]=12458, [17730]=42951, + [17732]=10383, [17733]=34735, [17734]=10457, [17736]=9646, [17737]=10163, [17738]=33351, + [17739]=9100, [17740]=11401, [17741]=11447, [17742]=14450, [17743]=40747, [17744]=9031, + [17745]=22519, [17746]=5723, [17747]=500, [17748]=9107, [17749]=11425, [17750]=6151, + [17751]=15344, [17752]=28785, [17753]=26046, [17754]=17394, [17755]=5818, [17759]=10307, + [17766]=44863, [17767]=13610, [17768]=7891, [17769]=8673, [17770]=3851, [17771]=100000, + [17772]=7132, [17773]=7132, [17774]=6133, [17775]=7841, [17776]=7377, [17777]=10815, + [17778]=4506, [17779]=5547, [17780]=46796, [17782]=33625, [17783]=33625, [17922]=115, + [17942]=2, [17943]=32156, [17962]=4762, [17963]=213, [17964]=5512, [17965]=213, + [17966]=8750, [17967]=5000, [17968]=5000, [17969]=4773, [17982]=23961, [18002]=2, + [18022]=10709, [18023]=15538, [18042]=10, [18043]=15495, [18044]=41478, [18045]=300, + [18046]=3000, [18047]=24428, [18048]=49204, [18062]=2, [18082]=28161, [18083]=4522, + [18102]=17158, [18103]=15252, [18104]=17285, [18122]=2, [18123]=2, [18160]=50, + [18166]=1, [18167]=2, [18168]=56416, [18169]=25000, [18170]=25000, [18171]=25000, + [18172]=25000, [18173]=25000, [18182]=100000, [18202]=90576, [18203]=90905, [18204]=27370, + [18205]=33287, [18208]=29147, [18209]=1231, [18222]=1023, [18223]=1228, [18224]=864, + [18225]=140, [18226]=408, [18227]=248, [18228]=2500, [18229]=790, [18230]=509, + [18231]=361, [18232]=10000, [18233]=130, [18234]=225, [18235]=25000, [18236]=2716, + [18237]=1622, [18238]=3321, [18239]=875, [18241]=0, [18242]=0, [18243]=0, + [18244]=0, [18245]=0, [18246]=0, [18247]=0, [18248]=0, [18251]=5000, + [18252]=50000, [18253]=15, [18254]=18, [18255]=15, [18256]=1500, [18257]=50000, + [18258]=275, [18259]=7500, [18260]=7500, [18262]=1250, [18263]=16911, [18264]=25000, + [18265]=30000, [18267]=5000, [18269]=375, [18282]=66347, [18283]=25000, [18284]=375, + [18285]=4558, [18286]=2953, [18287]=50, [18288]=250, [18289]=9701, [18290]=30000, + [18291]=30000, [18292]=30000, [18293]=2, [18294]=250, [18295]=11582, [18296]=12322, + [18298]=20685, [18300]=200, [18301]=29363, [18302]=7530, [18303]=25232, [18304]=21480, + [18305]=14375, [18306]=7215, [18307]=11163, [18308]=14006, [18309]=11296, [18310]=47406, + [18311]=56644, [18312]=18073, [18313]=13694, [18314]=12100, [18315]=12100, [18316]=13117, + [18317]=12503, [18318]=22057, [18319]=20989, [18320]=21157, [18321]=49320, [18322]=16137, + [18323]=32988, [18324]=55189, [18325]=16137, [18326]=9036, [18327]=9376, [18328]=14116, + [18337]=8103, [18338]=36595, [18339]=11370, [18340]=28853, [18341]=7638, [18342]=29442, + [18343]=14615, [18344]=11587, [18345]=14727, [18346]=16345, [18347]=43067, [18348]=112651, + [18349]=12454, [18350]=13063, [18351]=8740, [18352]=28072, [18353]=55030, [18354]=17466, + [18355]=14996, [18366]=9805, [18367]=14762, [18368]=12348, [18369]=9915, [18370]=21612, + [18371]=20737, [18372]=56716, [18373]=28459, [18374]=21418, [18375]=14329, [18376]=52306, + [18377]=13076, [18378]=31384, [18379]=23791, [18380]=21135, [18381]=21635, [18382]=15971, + [18383]=10179, [18384]=16093, [18385]=21536, [18386]=20588, [18387]=9488, [18388]=41928, + [18389]=16830, [18390]=26811, [18391]=13076, [18392]=56710, [18393]=14944, [18394]=17133, + [18395]=36645, [18396]=57516, [18397]=22464, [18398]=27103, [18399]=27103, [18400]=14853, + [18402]=18662, [18403]=49060, [18404]=6714, [18405]=14744, [18406]=46030, [18407]=11139, + [18408]=11178, [18409]=11219, [18410]=45516, [18411]=13704, [18413]=17070, [18414]=30000, + [18415]=10000, [18416]=10000, [18417]=10000, [18418]=10000, [18419]=2, [18420]=71236, + [18421]=25741, [18424]=20595, [18425]=5537, [18427]=1322, [18428]=7500, [18429]=5889, + [18430]=2878, [18432]=4348, [18434]=7493, [18435]=3662, [18436]=3417, [18437]=2744, + [18438]=5000, [18440]=1288, [18441]=4178, [18442]=5000, [18443]=10000, [18444]=7500, + [18445]=5804, [18447]=2847, [18448]=8801, [18449]=4301, [18450]=15814, [18451]=9884, + [18452]=6910, [18453]=3378, [18454]=6963, [18455]=3404, [18456]=5613, [18457]=2674, + [18458]=12212, [18459]=7907, [18460]=30762, [18461]=8577, [18462]=41319, [18463]=41472, + [18464]=29135, [18475]=7907, [18476]=15149, [18477]=19768, [18478]=19768, [18479]=17791, + [18480]=11860, [18481]=51451, [18482]=30986, [18483]=37362, [18484]=53822, [18485]=34569, + [18486]=21683, [18487]=10000, [18490]=18655, [18491]=40695, [18493]=14233, [18494]=21444, + [18495]=16770, [18496]=14233, [18497]=9488, [18498]=47443, [18499]=34589, [18500]=31340, + [18502]=70127, [18503]=22521, [18504]=14126, [18505]=13076, [18506]=21340, [18507]=15692, + [18508]=17194, [18509]=23006, [18510]=20889, [18511]=20971, [18512]=4000, [18514]=15000, + [18515]=15000, [18516]=15000, [18517]=40000, [18518]=40000, [18519]=40000, [18520]=73101, + [18521]=17606, [18522]=36253, [18523]=34810, [18524]=35596, [18525]=13730, [18526]=17924, + [18527]=17988, [18528]=20465, [18529]=9963, [18530]=31331, [18531]=65383, [18532]=21629, + [18533]=10984, [18534]=71503, [18535]=30231, [18536]=38664, [18537]=66135, [18538]=96748, + [18541]=33028, [18542]=125278, [18543]=63728, [18544]=29212, [18545]=42546, [18546]=48035, + [18547]=23619, [18562]=100000, [18567]=37500, [18582]=1224473, [18583]=1111948, [18584]=1116267, + [18585]=14853, [18586]=14853, [18587]=2000, [18588]=200, [18592]=20000, [18594]=3000, + [18595]=25000, [18596]=2, [18600]=12000, [18602]=25000, [18606]=12500, [18607]=12500, + [18610]=36, [18611]=27, [18612]=34, [18627]=250, [18629]=0, [18630]=250, + [18631]=3000, [18632]=50, [18633]=6, [18634]=12500, [18635]=100, [18636]=100, + [18637]=600, [18638]=12500, [18639]=12500, [18641]=500, [18644]=2, [18645]=1500, + [18647]=450, [18648]=450, [18649]=450, [18650]=1250, [18651]=3000, [18652]=3000, + [18653]=4000, [18654]=4000, [18655]=4000, [18656]=4000, [18657]=5000, [18658]=6000, + [18660]=7500, [18661]=3000, [18662]=0, [18663]=0, [18664]=25, [18670]=0, + [18671]=45184, [18672]=17855, [18673]=28918, [18674]=22003, [18675]=25, [18676]=16080, + [18677]=12487, [18678]=26635, [18679]=25136, [18680]=37894, [18681]=15215, [18682]=25456, + [18683]=51100, [18684]=36141, [18685]=5000, [18686]=24527, [18687]=0, [18689]=16460, + [18690]=22026, [18691]=31400, [18692]=14375, [18693]=11425, [18694]=25910, [18695]=34450, + [18696]=33476, [18697]=10867, [18698]=14454, [18699]=15380, [18700]=10910, [18701]=36410, + [18702]=9695, [18706]=10031, [18709]=5758, [18710]=7224, [18711]=8700, [18712]=5821, + [18716]=18655, [18717]=68818, [18718]=16580, [18720]=16706, [18721]=14944, [18722]=10688, + [18723]=41953, [18725]=59927, [18726]=11296, [18727]=14487, [18728]=32466, [18729]=38302, + [18730]=10250, [18731]=500, [18734]=17194, [18735]=17253, [18736]=26112, [18737]=52427, + [18738]=37593, [18739]=20124, [18740]=10101, [18741]=10416, [18742]=22503, [18743]=14275, + [18744]=11371, [18745]=17228, [18754]=10461, [18755]=43129, [18756]=33420, [18757]=16162, + [18758]=54072, [18759]=67844, [18760]=30866, [18761]=41011, [18762]=27631, [18766]=0, + [18767]=0, [18772]=0, [18773]=0, [18774]=0, [18776]=0, [18777]=0, + [18778]=0, [18785]=0, [18786]=0, [18787]=0, [18788]=0, [18789]=0, + [18790]=0, [18791]=0, [18793]=0, [18794]=0, [18795]=0, [18796]=0, + [18797]=0, [18798]=0, [18802]=5000, [18803]=135594, [18805]=109275, [18806]=33761, + [18807]=25796, [18808]=22665, [18809]=21611, [18810]=40678, [18811]=32665, [18812]=32458, + [18813]=89103, [18814]=89135, [18815]=64095, [18816]=148714, [18817]=63975, [18820]=66290, + [18821]=64030, [18822]=125768, [18823]=26506, [18824]=33518, [18825]=31807, [18826]=31917, + [18827]=50048, [18828]=50225, [18829]=48836, [18830]=57227, [18831]=57448, [18832]=104089, + [18833]=34731, [18834]=3750, [18835]=34997, [18836]=35130, [18837]=35259, [18838]=48458, + [18839]=250, [18840]=48812, [18841]=275, [18842]=138646, [18843]=49339, [18844]=49516, + [18845]=3750, [18846]=3750, [18847]=50043, [18848]=50215, [18849]=3750, [18850]=3750, + [18851]=3750, [18852]=3750, [18853]=3750, [18854]=3750, [18855]=35945, [18856]=3750, + [18857]=3750, [18858]=3750, [18859]=3750, [18860]=36602, [18861]=28493, [18862]=3750, + [18863]=3750, [18864]=3750, [18865]=49684, [18866]=49861, [18867]=62542, [18868]=62763, + [18869]=56993, [18870]=31384, [18871]=59017, [18872]=30394, [18873]=59459, [18874]=59681, + [18875]=38445, [18876]=60118, [18877]=60339, [18878]=85645, [18879]=53364, [18902]=0, + [18944]=123, [18945]=100, [18948]=1589, [18949]=500, [18957]=250, [18963]=100, + [18964]=100, [18965]=100, [18966]=100, [18967]=100, [18983]=2, [18984]=5000, + [18985]=2, [18986]=5000, [19014]=2, [19015]=2, [19019]=255355, [19022]=28580, + [19024]=10031, [19026]=1, [19027]=1250, [19028]=1078, [19029]=0, [19030]=0, + [19031]=2500, [19032]=2500, [19035]=250, [19037]=5877, [19038]=11145, [19039]=7403, + [19040]=19468, [19041]=9946, [19042]=9984, [19043]=13291, [19044]=11116, [19045]=12500, + [19046]=12500, [19047]=9232, [19048]=28061, [19049]=15576, [19050]=18758, [19051]=9365, + [19052]=17621, [19053]=2, [19056]=12941, [19057]=11606, [19058]=21845, [19059]=17541, + [19060]=100, [19061]=75, [19062]=50, [19065]=17831, [19066]=100, [19067]=75, + [19068]=50, [19082]=0, [19083]=15044, [19084]=15100, [19085]=15155, [19086]=15209, + [19087]=10176, [19088]=15319, [19089]=11860, [19090]=10285, [19091]=9488, [19092]=14233, + [19093]=11860, [19094]=9488, [19095]=17912, [19096]=17912, [19097]=17912, [19098]=17912, + [19099]=63065, [19100]=63300, [19101]=79411, [19102]=79705, [19103]=63999, [19104]=64227, + [19105]=17540, [19106]=73353, [19107]=44171, [19108]=44327, [19109]=33920, [19110]=54922, + [19111]=24824, [19112]=10984, [19113]=13730, [19114]=17887, [19115]=11003, [19116]=4590, + [19117]=8915, [19118]=17344, [19119]=5803, [19120]=16283, [19121]=8585, [19123]=4114, + [19124]=8259, [19125]=6652, [19126]=4451, [19127]=12258, [19128]=13358, [19129]=8355, + [19130]=77791, [19131]=29746, [19132]=28438, [19133]=43277, [19134]=23365, [19135]=16954, + [19136]=22280, [19137]=31469, [19138]=79853, [19139]=42244, [19140]=60256, [19141]=16612, + [19142]=18903, [19143]=21283, [19144]=45973, [19145]=37033, [19146]=20183, [19147]=91453, + [19148]=25399, [19149]=21248, [19156]=34911, [19157]=31943, [19159]=21141, [19162]=27831, + [19163]=27931, [19164]=22425, [19165]=45006, [19166]=92896, [19167]=116531, [19168]=102890, + [19169]=129112, [19170]=103689, [19182]=25, [19202]=5500, [19203]=5500, [19204]=10000, + [19205]=10000, [19206]=15000, [19207]=20000, [19208]=17500, [19209]=17500, [19210]=30000, + [19211]=30000, [19212]=30000, [19214]=2, [19215]=5500, [19216]=5500, [19217]=10000, + [19218]=10000, [19219]=15000, [19220]=22500, [19221]=12, [19222]=2, [19223]=1, + [19224]=50, [19225]=200, [19227]=12500, [19228]=100000, [19230]=12500, [19231]=12500, + [19232]=12500, [19233]=12500, [19234]=12500, [19235]=12500, [19236]=12500, [19257]=100000, + [19258]=12500, [19259]=12500, [19260]=12500, [19261]=12500, [19262]=12500, [19263]=12500, + [19264]=12500, [19265]=12500, [19267]=100000, [19268]=12500, [19269]=12500, [19270]=12500, + [19271]=12500, [19272]=12500, [19273]=12500, [19274]=12500, [19275]=12500, [19276]=12500, + [19277]=100000, [19278]=12500, [19279]=12500, [19280]=12500, [19281]=12500, [19282]=12500, + [19283]=12500, [19284]=12500, [19287]=100000, [19288]=100000, [19289]=100000, [19290]=100000, + [19291]=4000, [19292]=4022, [19293]=19376, [19295]=750, [19296]=250, [19297]=110, + [19298]=50, [19299]=25, [19300]=100, [19301]=350, [19302]=12500, [19303]=12500, + [19304]=6, [19305]=25, [19306]=100, [19307]=100, [19308]=125000, [19309]=125000, + [19310]=125000, [19311]=125000, [19312]=125000, [19315]=125000, [19316]=7, [19317]=7, + [19318]=250, [19319]=87500, [19320]=87500, [19321]=159059, [19323]=312980, [19324]=251323, + [19325]=188888, [19326]=5500, [19327]=10000, [19328]=5500, [19329]=10000, [19330]=15000, + [19331]=22500, [19332]=22500, [19333]=22500, [19334]=160453, [19335]=128825, [19336]=72039, + [19337]=72039, [19339]=72039, [19340]=72039, [19341]=72039, [19342]=72039, [19343]=72039, + [19344]=72039, [19345]=72039, [19346]=130907, [19347]=152104, [19348]=84402, [19349]=98056, + [19350]=104609, [19351]=139989, [19352]=158929, [19353]=180812, [19354]=135086, [19355]=164835, + [19356]=221750, [19357]=166093, [19358]=130638, [19360]=180116, [19361]=111546, [19362]=106098, + [19363]=182148, [19364]=228517, [19365]=136928, [19366]=203059, [19367]=103461, [19368]=106574, + [19369]=25870, [19370]=38944, [19371]=88355, [19372]=41178, [19373]=65375, [19374]=26268, + [19375]=58442, [19376]=111528, [19377]=105328, [19378]=59115, [19379]=205863, [19380]=59561, + [19381]=74734, [19382]=128280, [19383]=128862, [19384]=130616, [19385]=61990, [19386]=46661, + [19387]=46826, [19388]=31329, [19389]=58954, [19390]=39443, [19391]=47496, [19392]=31776, + [19393]=47833, [19394]=39395, [19395]=103103, [19396]=33084, [19397]=107438, [19398]=40003, + [19399]=53541, [19400]=27603, [19401]=83116, [19402]=55609, [19403]=105328, [19404]=2, + [19405]=70277, [19406]=91160, [19407]=28312, [19426]=25000, [19430]=42919, [19431]=103117, + [19432]=147286, [19433]=80659, [19434]=80863, [19435]=79598, [19436]=31956, [19437]=32075, + [19438]=33805, [19439]=56552, [19440]=500, [19441]=1500, [19442]=25000, [19444]=7500, + [19445]=7500, [19446]=7500, [19447]=15000, [19448]=20000, [19449]=25000, [19485]=2, + [19486]=2, [19487]=2, [19488]=2, [19491]=25000, [19505]=12500, [19506]=12500, + [19507]=1701, [19508]=1423, [19509]=2583, [19510]=18750, [19511]=15000, [19512]=11250, + [19513]=5000, [19514]=18750, [19515]=11250, [19516]=15000, [19517]=5000, [19518]=18750, + [19519]=15000, [19520]=11250, [19521]=5000, [19522]=18750, [19523]=15000, [19524]=11250, + [19525]=5000, [19526]=18116, [19527]=9631, [19528]=4780, [19529]=2122, [19530]=17098, + [19531]=10048, [19532]=4986, [19533]=2154, [19534]=18750, [19535]=15000, [19536]=11250, + [19537]=5000, [19538]=18750, [19539]=15000, [19540]=11250, [19541]=5000, [19542]=59534, + [19543]=34982, [19544]=17358, [19545]=6969, [19546]=56143, [19547]=32996, [19548]=16376, + [19549]=7074, [19550]=54922, [19551]=32156, [19552]=15899, [19553]=6843, [19554]=54922, + [19555]=32156, [19556]=15899, [19557]=7285, [19558]=44011, [19559]=24117, [19560]=11924, + [19561]=5132, [19562]=41191, [19563]=24117, [19564]=11924, [19565]=5132, [19566]=70171, + [19567]=40195, [19568]=19874, [19569]=8554, [19570]=71229, [19571]=41856, [19572]=20772, + [19573]=8974, [19578]=17699, [19580]=9635, [19581]=4945, [19582]=24220, [19583]=14452, + [19584]=7418, [19587]=20183, [19589]=12043, [19590]=6181, [19595]=17509, [19596]=10485, + [19597]=5401, [19623]=2, [19670]=500, [19671]=500, [19682]=25035, [19683]=25129, + [19684]=18915, [19685]=31644, [19686]=15880, [19687]=15939, [19688]=31993, [19689]=24082, + [19690]=39683, [19691]=30000, [19692]=19980, [19693]=24192, [19694]=24286, [19695]=18285, + [19726]=500, [19727]=15000, [19762]=2, [19763]=1, [19764]=12500, [19765]=12500, + [19766]=12500, [19767]=2000, [19768]=2000, [19769]=12500, [19770]=12500, [19771]=12500, + [19772]=12500, [19773]=12500, [19774]=5000, [19776]=12500, [19777]=12500, [19778]=12500, + [19779]=12500, [19780]=12500, [19781]=12500, [19808]=15556, [19852]=98086, [19853]=73837, + [19854]=123502, [19855]=39665, [19856]=48628, [19857]=29966, [19859]=100605, [19861]=75990, + [19862]=65077, [19863]=61286, [19864]=102408, [19865]=102760, [19866]=86994, [19867]=87323, + [19869]=21051, [19870]=25356, [19871]=50287, [19873]=48660, [19874]=112009, [19875]=38739, + [19876]=85311, [19877]=43354, [19878]=26107, [19884]=107909, [19885]=44203, [19886]=24979, + [19887]=50147, [19888]=25165, [19889]=42099, [19890]=88292, [19891]=63628, [19892]=31925, + [19893]=55355, [19894]=17152, [19895]=34428, [19896]=85949, [19897]=25878, [19898]=55035, + [19899]=28009, [19900]=87868, [19901]=70566, [19903]=81895, [19904]=49325, [19905]=45253, + [19906]=26969, [19907]=21655, [19908]=62589, [19909]=104707, [19910]=84070, [19912]=43548, + [19913]=22142, [19914]=8750, [19915]=48826, [19916]=2, [19917]=2, [19918]=111003, + [19919]=31646, [19920]=56037, [19921]=60951, [19922]=63655, [19923]=44030, [19924]=2, + [19925]=43635, [19927]=62348, [19928]=27168, [19929]=16834, [19930]=73852, [19931]=300, + [19933]=2080, [19934]=1400, [19935]=830, [19936]=830, [19937]=780, [19938]=580, + [19943]=2000, [19944]=102729, [19945]=30936, [19946]=89871, [19947]=86528, [19948]=111303, + [19949]=111303, [19950]=111303, [19961]=70537, [19962]=88511, [19963]=91276, [19964]=73293, + [19965]=73565, [19967]=55576, [19968]=74373, [19969]=3360, [19970]=2175, [19971]=2000, + [19972]=3396, [19974]=2500, [19979]=25000, [19980]=2, [19981]=2, [19982]=9444, + [19983]=1, [19984]=11893, [19986]=11376, [19987]=2, [19988]=2, [19990]=25000, + [19991]=10000, [19992]=10000, [19993]=56783, [19998]=23211, [19999]=18639, [20000]=30000, + [20001]=12500, [20002]=1000, [20003]=31596, [20004]=1000, [20005]=31828, [20006]=8375, + [20007]=1000, [20008]=600, [20011]=12500, [20012]=12500, [20013]=12500, [20014]=12500, + [20015]=1658, [20016]=3635, [20030]=1580, [20032]=32257, [20035]=30651, [20036]=2750, + [20037]=15003, [20038]=64972, [20039]=31709, [20040]=20000, [20041]=11352, [20042]=11394, + [20043]=17613, [20044]=17677, [20045]=14784, [20046]=14836, [20047]=11911, [20048]=17931, + [20049]=17995, [20050]=27206, [20051]=27302, [20052]=20569, [20053]=20647, [20054]=16582, + [20055]=36867, [20056]=37009, [20057]=24654, [20058]=24748, [20059]=31894, [20060]=32012, + [20061]=25701, [20062]=100, [20063]=50, [20064]=75, [20065]=75, [20066]=100, + [20067]=50, [20068]=26353, [20069]=110199, [20070]=88472, [20071]=10307, [20072]=10307, + [20073]=24279, [20074]=300, [20075]=500, [20082]=24229, [20083]=40524, [20086]=350, + [20088]=10495, [20089]=5208, [20090]=1874, [20091]=14859, [20092]=7375, [20093]=2643, + [20094]=9974, [20095]=4949, [20096]=2138, [20097]=6723, [20098]=3336, [20099]=1441, + [20100]=12746, [20101]=6325, [20102]=2732, [20103]=8590, [20104]=4262, [20105]=1841, + [20106]=6946, [20107]=3201, [20108]=2075, [20109]=9787, [20110]=4857, [20111]=3162, + [20112]=12373, [20113]=6141, [20114]=2652, [20115]=8341, [20116]=4139, [20117]=1788, + [20118]=10121, [20119]=5022, [20120]=1808, [20121]=15417, [20122]=7650, [20123]=2742, + [20124]=7075, [20125]=3176, [20126]=2058, [20127]=9711, [20128]=4820, [20129]=3137, + [20130]=10000, [20131]=12500, [20132]=12500, [20134]=32440, [20150]=16775, [20151]=9858, + [20152]=1754, [20153]=4911, [20154]=25657, [20155]=15077, [20156]=7682, [20157]=2753, + [20158]=39293, [20159]=17803, [20160]=10461, [20161]=5191, [20162]=2242, [20163]=12038, + [20164]=1505, [20165]=6423, [20166]=3187, [20167]=20727, [20168]=6023, [20169]=2602, + [20170]=12274, [20171]=14029, [20172]=1802, [20173]=4202, [20174]=8530, [20175]=32243, + [20176]=25889, [20177]=11783, [20178]=2210, [20179]=6948, [20180]=3448, [20181]=17927, + [20182]=3377, [20183]=5227, [20184]=26635, [20185]=9632, [20186]=20645, [20187]=5999, + [20188]=2663, [20189]=12561, [20190]=14356, [20191]=1795, [20192]=4187, [20193]=8498, + [20194]=32123, [20195]=17545, [20196]=10309, [20197]=1834, [20198]=5134, [20199]=26818, + [20200]=7790, [20201]=2792, [20202]=15869, [20203]=39985, [20204]=11229, [20205]=6599, + [20206]=3275, [20207]=2122, [20208]=17098, [20209]=4968, [20210]=3234, [20211]=10122, + [20212]=25508, [20213]=16337, [20214]=85653, [20215]=24684, [20216]=20645, [20217]=16575, + [20218]=14590, [20219]=14641, [20220]=100919, [20222]=100, [20223]=50, [20224]=75, + [20225]=100, [20226]=50, [20227]=75, [20232]=75, [20234]=100, [20235]=50, + [20237]=75, [20238]=213369, [20239]=34271, [20240]=68808, [20241]=25902, [20242]=34665, + [20243]=100, [20244]=50, [20245]=131474, [20246]=52788, [20247]=70650, [20248]=7108, + [20249]=53380, [20250]=7888, [20251]=53777, [20252]=36933, [20253]=4000, [20254]=5000, + [20255]=12425, [20257]=30840, [20258]=75602, [20259]=15179, [20260]=42331, [20261]=15295, + [20262]=32135, [20263]=18495, [20264]=19101, [20265]=21571, [20266]=28870, [20280]=57576, + [20281]=9247, [20282]=18566, [20283]=6988, [20284]=9607, [20285]=36161, [20286]=14518, + [20287]=19426, [20288]=7108, [20289]=14676, [20290]=7888, [20291]=14781, [20292]=9889, + [20295]=31083, [20296]=12590, [20297]=46978, [20298]=63984, [20299]=128465, [20300]=44174, + [20301]=66510, [20302]=53401, [20303]=178668, [20304]=44832, [20305]=15038, [20306]=90319, + [20307]=7102, [20308]=68236, [20309]=91304, [20311]=12316, [20312]=18541, [20313]=37212, + [20314]=12448, [20315]=18739, [20316]=13985, [20317]=46790, [20318]=11742, [20319]=15038, + [20320]=23661, [20321]=7102, [20322]=17877, [20323]=23925, [20337]=85357, [20338]=35067, + [20339]=35199, [20340]=52993, [20341]=53191, [20342]=35593, [20343]=71445, [20344]=53783, + [20345]=12157, [20346]=15457, [20347]=72499, [20348]=54573, [20349]=234151, [20350]=140987, + [20351]=9144, [20352]=9179, [20353]=13822, [20354]=13875, [20355]=9285, [20356]=18641, + [20357]=14034, [20358]=12157, [20359]=15457, [20360]=18923, [20361]=14245, [20362]=59573, + [20363]=35877, [20368]=35582, [20369]=9975, [20380]=57958, [20381]=5000, [20382]=15000, + [20387]=0, [20391]=1, [20392]=1, [20400]=20000, [20406]=1929, [20407]=2581, + [20408]=1942, [20412]=2, [20417]=2, [20424]=175, [20425]=3042, [20426]=5000, + [20427]=730, [20428]=730, [20429]=5000, [20430]=2433, [20431]=5000, [20434]=3042, + [20437]=1825, [20438]=1825, [20439]=5000, [20440]=2582, [20441]=2433, [20442]=5000, + [20443]=2610, [20444]=5000, [20452]=250, [20468]=2, [20469]=12, [20475]=6250, + [20476]=16401, [20477]=16898, [20478]=33917, [20479]=34036, [20480]=17078, [20481]=17139, + [20487]=166093, [20498]=1000, [20499]=500, [20500]=2000, [20501]=2000, [20502]=21277, + [20503]=10000, [20504]=37873, [20505]=15457, [20506]=10000, [20507]=10000, [20508]=10000, + [20509]=10000, [20510]=10000, [20511]=10000, [20512]=10000, [20517]=9797, [20518]=500, + [20520]=2000, [20521]=9937, [20522]=41554, [20524]=15146, [20526]=500, [20527]=500, + [20528]=500, [20530]=12735, [20531]=750, [20532]=750, [20533]=750, [20534]=3975, + [20535]=750, [20536]=40671, [20537]=17736, [20538]=23733, [20539]=11908, [20540]=1250, + [20541]=500, [20542]=1250, [20543]=1250, [20544]=1250, [20545]=500, [20546]=10000, + [20547]=10000, [20548]=10000, [20549]=11484, [20550]=23051, [20551]=17352, [20552]=500, + [20553]=15000, [20554]=15000, [20555]=15000, [20556]=40667, [20557]=175, [20561]=1, + [20562]=1, [20563]=1, [20564]=1, [20565]=1, [20566]=1, [20567]=1, + [20568]=1, [20569]=1, [20570]=1, [20571]=1, [20572]=1, [20573]=1, + [20574]=1, [20575]=743, [20576]=350, [20577]=108080, [20578]=108499, [20579]=32675, + [20580]=109327, [20581]=137184, [20582]=62802, [20583]=4738, [20584]=4756, [20585]=4774, + [20586]=4792, [20587]=4810, [20588]=4827, [20589]=4845, [20590]=4992, [20591]=5010, + [20592]=5028, [20593]=5046, [20594]=5064, [20595]=5082, [20596]=5099, [20597]=4631, + [20598]=4649, [20599]=81672, [20600]=98660, [20601]=12, [20602]=12, [20603]=12, + [20604]=0, [20615]=29643, [20616]=21638, [20617]=68076, [20618]=22777, [20619]=34298, + [20621]=49595, [20622]=114103, [20623]=44713, [20624]=143303, [20625]=22879, [20626]=21638, + [20627]=57613, [20628]=45535, [20629]=55079, [20630]=24459, [20631]=35068, [20632]=101281, + [20633]=46353, [20634]=46518, [20635]=47424, [20636]=89103, [20637]=34030, [20638]=70220, + [20639]=46989, [20640]=4812, [20641]=4829, [20642]=7539, [20643]=7094, [20645]=21785, + [20646]=29963, [20647]=40097, [20648]=58693, [20649]=22425, [20650]=8511, [20652]=12858, + [20653]=8602, [20654]=60175, [20655]=8054, [20656]=18269, [20657]=47443, [20658]=15272, + [20659]=12263, [20660]=61543, [20661]=10295, [20662]=12400, [20663]=37336, [20664]=10628, + [20665]=27645, [20666]=52306, [20667]=13431, [20668]=33536, [20669]=70120, [20670]=15125, + [20671]=20984, [20672]=39497, [20673]=10199, [20674]=21227, [20675]=52306, [20676]=500, + [20677]=500, [20678]=500, [20679]=500, [20680]=31683, [20681]=18251, [20682]=73553, + [20683]=21028, [20684]=21028, [20685]=61617, [20686]=21028, [20687]=14019, [20688]=56644, + [20689]=26286, [20690]=14004, [20691]=24289, [20692]=13362, [20693]=11860, [20694]=17828, + [20695]=36253, [20696]=70171, [20697]=16903, [20698]=75410, [20699]=22708, [20700]=21968, + [20701]=34314, [20702]=35358, [20703]=29571, [20704]=27461, [20705]=21968, [20706]=21968, + [20707]=21968, [20708]=2, [20709]=50, [20710]=16457, [20711]=16521, [20712]=16583, + [20713]=16647, [20714]=20595, [20715]=20969, [20716]=11225, [20717]=10984, [20718]=2, + [20719]=2, [20720]=60551, [20721]=38790, [20722]=45413, [20723]=46934, [20724]=58873, + [20725]=0, [20726]=25000, [20727]=25000, [20728]=25000, [20729]=25000, [20730]=25000, + [20731]=25000, [20732]=25000, [20733]=25000, [20734]=25000, [20735]=25000, [20736]=25000, + [20738]=2, [20744]=500, [20745]=1000, [20746]=1000, [20747]=1000, [20748]=1000, + [20749]=1000, [20750]=1000, [20752]=750, [20753]=1000, [20754]=2500, [20755]=5000, + [20756]=10000, [20757]=10000, [20758]=125, [20761]=30000, [20763]=312, [20769]=2500, + [20770]=450, [20805]=12, [20808]=12, [20809]=12, [20812]=5, [20813]=4, + [20814]=400, [20815]=200, [20816]=20, [20817]=100, [20818]=625, [20820]=1064, + [20821]=1064, [20823]=837, [20824]=6250, [20826]=2207, [20827]=875, [20828]=677, + [20830]=1535, [20831]=1535, [20832]=1800, [20833]=1540, [20834]=600, [20835]=25, + [20836]=25, [20837]=26, [20838]=19, [20839]=32, [20840]=26, [20841]=16, + [20842]=5, [20843]=6, [20844]=150, [20845]=4, [20846]=5, [20847]=6, + [20848]=5, [20849]=16, [20850]=16, [20851]=17, [20852]=17, [20853]=21, + [20854]=450, [20855]=375, [20856]=375, [20857]=1, [20891]=1, [20892]=1, + [20893]=1, [20894]=1, [20895]=1, [20896]=1, [20897]=1, [20898]=1, + [20899]=1, [20900]=1, [20901]=1, [20906]=250, [20907]=300, [20908]=3, + [20909]=1010, [20910]=12, [20911]=7, [20912]=16, [20914]=7, [20915]=12, + [20916]=7, [20917]=7, [20918]=14, [20919]=14, [20920]=6, [20921]=9, + [20922]=6, [20923]=6, [20924]=12, [20925]=12, [20950]=1535, [20954]=5681, + [20955]=665, [20958]=1130, [20959]=1720, [20960]=1720, [20961]=1720, [20963]=900, + [20964]=6646, [20966]=3482, [20967]=3482, [20969]=5989, [20970]=375, [20971]=375, + [20973]=500, [20974]=625, [20975]=625, [20980]=5, [20981]=7, [20982]=7, + [20983]=7, [20985]=7, [20986]=10, [20987]=5, [20988]=5, [20989]=5, + [20990]=10, [20991]=7, [20992]=4, [20993]=6, [20994]=14, [20995]=4, + [20996]=6, [20997]=11, [20998]=4, [20999]=7, [21000]=6, [21001]=10, + [21002]=1, [21003]=3, [21004]=5, [21005]=1, [21006]=2, [21007]=4, + [21008]=3, [21009]=4, [21010]=2, [21011]=2, [21012]=2, [21013]=2, + [21014]=8, [21015]=1, [21016]=9, [21017]=2, [21018]=3, [21019]=3, + [21020]=3, [21021]=7, [21022]=3, [21023]=250, [21025]=1250, [21030]=100, + [21031]=200, [21033]=200, [21038]=0, [21039]=1, [21040]=1, [21071]=25, + [21072]=40, [21099]=125, [21113]=2, [21114]=50, [21115]=7057, [21116]=3807, + [21117]=7057, [21118]=3807, [21119]=1807, [21120]=1807, [21121]=2, [21122]=2, + [21123]=2, [21126]=206967, [21128]=168041, [21129]=2, [21131]=12, [21132]=12, + [21133]=12, [21134]=266569, [21135]=625, [21150]=2, [21151]=50, [21153]=125, + [21154]=1, [21156]=12, [21157]=1, [21162]=25, [21163]=40, [21164]=100, + [21168]=1500, [21176]=0, [21177]=37, [21178]=14231, [21179]=10709, [21180]=21612, + [21181]=21612, [21182]=10709, [21183]=25495, [21184]=14425, [21185]=10452, [21186]=14533, + [21187]=16409, [21188]=111220, [21189]=188888, [21190]=188888, [21192]=2, [21193]=40000, + [21194]=40000, [21195]=40000, [21214]=100000, [21215]=0, [21217]=125, [21218]=0, + [21219]=1250, [21222]=1750, [21223]=1500, [21224]=3000, [21225]=2500, [21226]=4000, + [21227]=7500, [21228]=2, [21235]=0, [21236]=0, [21240]=0, [21242]=164024, + [21243]=100, [21244]=165247, [21254]=0, [21266]=12, [21268]=172135, [21269]=110563, + [21272]=130949, [21273]=219003, [21275]=199583, [21277]=1250, [21278]=13212, [21279]=100000, + [21280]=100000, [21281]=100000, [21282]=100000, [21283]=100000, [21284]=100000, [21285]=100000, + [21286]=2, [21287]=100000, [21288]=100000, [21289]=100000, [21290]=100000, [21291]=100000, + [21292]=100000, [21293]=100000, [21294]=100000, [21295]=100000, [21296]=100000, [21297]=100000, + [21298]=100000, [21299]=100000, [21300]=100000, [21302]=100000, [21303]=100000, [21304]=100000, + [21306]=100000, [21307]=100000, [21311]=8473, [21312]=6377, [21313]=40000, [21316]=12407, + [21317]=11675, [21318]=7444, [21319]=9339, [21320]=22497, [21321]=0, [21322]=15108, + [21323]=0, [21324]=0, [21326]=8991, [21329]=53037, [21330]=45987, [21331]=100263, + [21332]=71529, [21333]=46519, [21334]=101407, [21335]=46868, [21336]=72615, [21337]=54661, + [21338]=47395, [21340]=5000, [21341]=20000, [21342]=80000, [21343]=104850, [21344]=48453, + [21345]=49895, [21346]=77286, [21347]=58170, [21348]=52826, [21349]=45805, [21350]=45983, + [21351]=100253, [21352]=71514, [21353]=67301, [21354]=58358, [21355]=58580, [21356]=90751, + [21357]=128176, [21358]=3000, [21359]=59459, [21360]=69081, [21361]=61483, [21362]=95240, + [21364]=134962, [21365]=75168, [21366]=86939, [21367]=87626, [21368]=105630, [21369]=5000, + [21370]=149787, [21371]=20000, [21372]=80445, [21373]=70067, [21374]=152080, [21375]=108479, + [21376]=70861, [21377]=200, [21383]=200, [21386]=12, [21387]=58153, [21388]=45619, + [21389]=99463, [21390]=70952, [21391]=46145, [21452]=147914, [21453]=35631, [21454]=53878, + [21455]=37098, [21456]=36024, [21457]=24104, [21458]=31027, [21459]=93411, [21460]=37496, + [21461]=45403, [21462]=22787, [21463]=34313, [21464]=22963, [21465]=2, [21466]=99935, + [21467]=50158, [21468]=28916, [21469]=24185, [21470]=29132, [21471]=88787, [21472]=30662, + [21473]=82878, [21474]=37936, [21475]=40611, [21476]=61136, [21477]=88503, [21478]=76570, + [21479]=20491, [21480]=29523, [21481]=26810, [21482]=40551, [21483]=75303, [21484]=33900, + [21485]=60674, [21486]=19033, [21487]=28658, [21488]=67812, [21489]=27637, [21490]=28487, + [21491]=23826, [21492]=113287, [21493]=34109, [21494]=21845, [21495]=35075, [21496]=17600, + [21497]=39919, [21498]=92593, [21499]=37165, [21500]=17850, [21501]=20262, [21502]=24409, + [21503]=16334, [21504]=111628, [21505]=111628, [21506]=111628, [21507]=111628, [21517]=42935, + [21519]=0, [21520]=151868, [21521]=137911, [21522]=142269, [21523]=142805, [21524]=1, + [21525]=1, [21526]=828085, [21527]=60872, [21529]=90788, [21530]=92311, [21531]=103030, + [21532]=58116, [21538]=1, [21539]=1, [21541]=1, [21542]=1, [21543]=1, + [21544]=1, [21546]=35, [21547]=2500, [21548]=15000, [21549]=1, [21550]=1, + [21551]=2, [21552]=5, [21553]=2, [21554]=1, [21555]=2, [21557]=6, + [21558]=6, [21559]=6, [21560]=2, [21561]=6, [21562]=6, [21563]=188888, + [21564]=1, [21565]=10000, [21566]=5000, [21567]=10000, [21568]=5000, [21569]=225, + [21570]=275, [21571]=25, [21572]=1, [21573]=2, [21574]=25, [21575]=25, + [21576]=25, [21577]=25, [21578]=25, [21579]=108030, [21580]=3, [21581]=50891, + [21582]=51078, [21583]=76906, [21584]=77194, [21585]=51655, [21586]=66525, [21587]=53413, + [21588]=80408, [21589]=12, [21590]=12, [21591]=12, [21592]=12, [21593]=12, + [21594]=61930, [21595]=12, [21596]=89033, [21597]=72651, [21598]=35753, [21599]=53835, + [21600]=54040, [21601]=79025, [21602]=46595, [21603]=121194, [21604]=37549, [21605]=47103, + [21606]=37819, [21607]=56933, [21608]=102777, [21609]=47782, [21610]=122759, [21611]=38499, + [21612]=87308, [21613]=72691, [21614]=66012, [21615]=53014, [21616]=114921, [21617]=38454, + [21618]=31727, [21619]=31846, [21620]=88661, [21621]=48118, [21622]=160986, [21623]=32315, + [21624]=48645, [21625]=83030, [21626]=97999, [21627]=46830, [21635]=186728, [21639]=45485, + [21645]=58116, [21647]=86370, [21648]=44756, [21650]=146570, [21651]=88279, [21652]=59078, + [21663]=61534, [21664]=86443, [21665]=58104, [21666]=91352, [21667]=55193, [21668]=83111, + [21669]=52140, [21670]=80303, [21671]=56044, [21672]=35158, [21673]=141169, [21674]=28340, + [21675]=35560, [21676]=57104, [21677]=96853, [21678]=99641, [21679]=230318, [21680]=79870, + [21681]=91369, [21682]=40230, [21683]=45100, [21684]=68186, [21685]=87120, [21686]=45577, + [21687]=102995, [21688]=39568, [21689]=33101, [21690]=73749, [21691]=26682, [21692]=26784, + [21693]=50412, [21694]=40482, [21695]=90277, [21696]=54379, [21697]=40937, [21698]=62117, + [21699]=57856, [21700]=90535, [21701]=38677, [21702]=78630, [21703]=162298, [21704]=39090, + [21705]=59105, [21706]=39364, [21707]=85399, [21708]=29905, [21709]=113642, [21710]=75174, + [21712]=115200, [21713]=250, [21714]=50, [21715]=120142, [21716]=50, [21717]=50, + [21718]=50, [21719]=50, [21720]=50, [21721]=3, [21722]=1250, [21723]=1250, + [21724]=175, [21725]=175, [21726]=175, [21727]=275, [21728]=275, [21729]=275, + [21730]=875, [21731]=875, [21732]=875, [21733]=4000, [21734]=4000, [21735]=4000, + [21736]=250000, [21737]=4000, [21738]=875, [21747]=75, [21748]=1500, [21752]=1250, + [21753]=5000, [21754]=4307, [21755]=4307, [21756]=1500, [21758]=1500, [21760]=1500, + [21763]=1500, [21764]=6420, [21765]=2542, [21766]=7500, [21767]=8375, [21768]=12500, + [21769]=1500, [21774]=11416, [21775]=8375, [21777]=3750, [21778]=18662, [21779]=21305, + [21784]=15000, [21789]=15000, [21790]=7767, [21791]=12503, [21792]=25218, [21794]=2, + [21795]=2, [21796]=2, [21800]=52522, [21801]=52726, [21802]=70573, [21803]=21253, + [21804]=31999, [21805]=21414, [21806]=103686, [21809]=48655, [21810]=25259, [21814]=51570, + [21815]=0, [21816]=1, [21817]=1, [21818]=1, [21819]=1, [21820]=1, + [21821]=1, [21822]=1, [21823]=1, [21829]=25, [21833]=25, [21835]=125, + [21836]=96853, [21837]=118175, [21838]=47433, [21839]=224399, [21840]=4000, [21841]=10000, + [21842]=8000, [21843]=10000, [21844]=8000, [21845]=4000, [21846]=21632, [21847]=21712, + [21848]=43584, [21849]=12261, [21850]=12306, [21851]=13059, [21852]=26926, [21853]=21336, + [21854]=29267, [21855]=30091, [21856]=147180, [21858]=20000, [21859]=31883, [21860]=24616, + [21861]=34308, [21862]=34437, [21863]=20474, [21864]=30824, [21865]=41251, [21866]=17197, + [21867]=26309, [21868]=35486, [21869]=32801, [21870]=32921, [21871]=44055, [21872]=40000, + [21873]=24089, [21874]=33398, [21875]=46852, [21876]=50000, [21877]=800, [21881]=5000, + [21882]=2500, [21884]=4000, [21885]=4000, [21886]=4000, [21887]=1250, [21888]=22875, + [21889]=27906, [21890]=42013, [21891]=99378, [21892]=10000, [21893]=10000, [21894]=10000, + [21895]=10000, [21896]=10000, [21897]=10000, [21898]=15000, [21899]=15000, [21900]=15000, + [21901]=15000, [21902]=20000, [21903]=15000, [21904]=15000, [21905]=15000, [21906]=15000, + [21907]=20000, [21908]=15000, [21909]=15000, [21910]=15000, [21911]=15000, [21912]=15000, + [21913]=15000, [21914]=15000, [21916]=15000, [21917]=15000, [21918]=15000, [21919]=15000, + [21927]=125, [21929]=2500, [21930]=2000, [21931]=250, [21932]=250, [21933]=750, + [21934]=1500, [21939]=100000, [21940]=1250, [21941]=1250, [21942]=1500, [21943]=1500, + [21944]=1875, [21945]=1875, [21947]=1875, [21948]=1875, [21949]=2500, [21952]=2500, + [21953]=3125, [21954]=2500, [21957]=3375, [21990]=1275, [21991]=3000, [21992]=5000, + [21993]=10000, [21994]=12476, [21995]=19624, [21996]=12568, [21997]=26359, [21998]=10074, + [21999]=19916, [22000]=26786, [22001]=19203, [22002]=16061, [22003]=25261, [22004]=16598, + [22005]=26102, [22006]=12034, [22007]=31889, [22008]=22864, [22009]=31970, [22010]=18432, + [22011]=18500, [22012]=12500, [22013]=29212, [22014]=333333, [22015]=14941, [22016]=28402, + [22017]=39735, [22053]=150, [22054]=150, [22055]=175, [22060]=41015, [22061]=31009, + [22062]=13180, [22063]=13227, [22064]=20800, [22065]=20873, [22066]=9623, [22067]=25501, + [22068]=18788, [22069]=26269, [22070]=12619, [22071]=12666, [22072]=26695, [22073]=19138, + [22074]=20067, [22075]=26852, [22076]=20213, [22077]=10299, [22078]=12992, [22079]=13038, + [22080]=20505, [22081]=10448, [22082]=19769, [22083]=27632, [22084]=19333, [22085]=26007, + [22086]=12431, [22087]=19552, [22088]=12524, [22089]=26266, [22090]=10038, [22091]=19845, + [22092]=26692, [22093]=19136, [22095]=19275, [22096]=30451, [22097]=30427, [22098]=19485, + [22099]=15558, [22100]=38271, [22101]=27564, [22102]=38368, [22106]=15536, [22107]=24438, + [22108]=15653, [22109]=24619, [22110]=12546, [22111]=33239, [22112]=23830, [22113]=33313, + [22137]=12, [22146]=100000, [22147]=1250, [22148]=375, [22149]=10283, [22150]=10283, + [22152]=12, [22153]=100000, [22179]=13500, [22180]=6500, [22181]=9000, [22182]=16750, + [22183]=8000, [22184]=11000, [22185]=9000, [22186]=13500, [22187]=16750, [22188]=7250, + [22189]=16750, [22190]=9000, [22191]=73128, [22194]=33521, [22195]=22885, [22196]=49624, + [22197]=14282, [22198]=67440, [22199]=3, [22202]=2500, [22203]=5000, [22204]=12403, + [22205]=8522, [22207]=14233, [22208]=57079, [22209]=12500, [22210]=2, [22211]=2, + [22212]=17311, [22213]=2, [22214]=12500, [22215]=2, [22219]=12500, [22220]=12500, + [22221]=20000, [22222]=20000, [22223]=11291, [22225]=14937, [22230]=9978, [22231]=16444, + [22232]=14933, [22233]=5837, [22234]=9713, [22240]=14972, [22241]=15739, [22242]=11489, + [22243]=250, [22244]=1000, [22245]=12375, [22246]=2500, [22247]=17874, [22248]=10000, + [22249]=30000, [22250]=250, [22251]=10000, [22252]=30000, [22253]=34450, [22254]=30655, + [22255]=32802, [22256]=8236, [22257]=36127, [22266]=43878, [22267]=17870, [22268]=66290, + [22269]=16476, [22270]=11882, [22271]=22328, [22272]=15152, [22273]=11408, [22274]=15270, + [22275]=15383, [22276]=1, [22277]=1, [22278]=1, [22279]=1, [22280]=1, + [22281]=1, [22282]=1, [22301]=23314, [22302]=17549, [22303]=22366, [22304]=10689, + [22305]=16090, [22306]=9963, [22307]=1500, [22308]=5000, [22309]=12500, [22310]=5000, + [22311]=14944, [22312]=12500, [22313]=9963, [22314]=64398, [22315]=49816, [22317]=52093, + [22318]=37362, [22319]=38664, [22320]=12, [22321]=10539, [22322]=53054, [22324]=200, + [22325]=12446, [22326]=15282, [22327]=2535, [22328]=22208, [22329]=34450, [22330]=15223, + [22331]=36253, [22332]=53683, [22333]=65383, [22334]=13782, [22335]=71251, [22336]=35150, + [22337]=16476, [22339]=15282, [22340]=65328, [22341]=2, [22342]=21968, [22343]=16476, + [22345]=15680, [22346]=2, [22347]=45728, [22348]=76507, [22377]=64976, [22378]=65211, + [22379]=65446, [22380]=65675, [22383]=84291, [22384]=80554, [22385]=25276, [22388]=15000, + [22389]=20000, [22390]=20000, [22391]=68652, [22392]=6250, [22393]=14750, [22394]=69400, + [22395]=12973, [22396]=48827, [22397]=13067, [22398]=16898, [22399]=49354, [22400]=13208, + [22401]=17078, [22402]=49885, [22403]=41953, [22404]=54793, [22405]=14944, [22406]=62270, + [22407]=18681, [22408]=42763, [22409]=27461, [22410]=17231, [22411]=16476, [22412]=16476, + [22416]=128887, [22417]=106420, [22418]=80096, [22419]=72911, [22420]=73173, [22421]=53974, + [22422]=50334, [22423]=50527, [22424]=50719, [22425]=123767, [22426]=51099, [22427]=102583, + [22428]=77225, [22429]=70300, [22430]=70562, [22431]=52055, [22433]=15282, [22436]=193311, + [22437]=159599, [22438]=111521, [22439]=101997, [22440]=102391, [22441]=75205, [22442]=75494, + [22443]=75782, [22448]=300, [22449]=335, [22451]=4000, [22452]=4000, [22456]=4000, + [22457]=4000, [22458]=37892, [22459]=350, [22460]=325, [22461]=1250, [22462]=32000, + [22463]=40000, [22464]=184892, [22465]=152688, [22466]=114949, [22467]=105109, [22468]=105504, + [22469]=77491, [22470]=79846, [22471]=80127, [22472]=20193, [22476]=165232, [22477]=136418, + [22478]=92905, [22479]=84595, [22480]=84922, [22481]=62658, [22482]=62892, [22483]=63132, + [22488]=160571, [22489]=132583, [22490]=99788, [22491]=90838, [22492]=91165, [22493]=67240, + [22494]=67481, [22495]=67721, [22496]=132173, [22497]=109114, [22498]=74316, [22499]=67669, + [22500]=67930, [22501]=50116, [22502]=51686, [22503]=51879, [22504]=126586, [22505]=104517, + [22506]=78676, [22507]=71623, [22508]=71878, [22509]=53023, [22510]=53215, [22511]=53407, + [22512]=130290, [22513]=107574, [22514]=80969, [22515]=73703, [22516]=73958, [22517]=54551, + [22518]=50917, [22519]=51109, [22521]=1500, [22522]=1500, [22525]=200, [22526]=200, + [22527]=200, [22528]=200, [22529]=200, [22530]=15000, [22531]=15000, [22532]=15000, + [22533]=15000, [22534]=20000, [22535]=25000, [22536]=25000, [22537]=25000, [22538]=50000, + [22539]=15000, [22540]=15000, [22541]=20000, [22542]=10000, [22543]=15000, [22544]=15000, + [22545]=15000, [22547]=15000, [22548]=15000, [22551]=15000, [22552]=15000, [22553]=20000, + [22554]=15000, [22555]=20000, [22556]=15000, [22557]=25000, [22558]=25000, [22559]=15000, + [22560]=15000, [22561]=15000, [22562]=12500, [22563]=17500, [22565]=15000, [22571]=62, + [22572]=400, [22573]=400, [22574]=400, [22575]=400, [22576]=400, [22577]=400, + [22578]=400, [22589]=562016, [22596]=4, [22630]=563844, [22631]=526276, [22632]=528264, + [22641]=146, [22642]=146, [22644]=12, [22645]=25, [22647]=100, [22648]=12, + [22649]=12, [22650]=12, [22651]=33147, [22652]=69171, [22654]=34846, [22655]=34973, + [22656]=47443, [22657]=33625, [22658]=53045, [22659]=33625, [22660]=24601, [22661]=89377, + [22662]=44851, [22663]=46175, [22664]=100642, [22665]=50516, [22666]=50712, [22667]=12789, + [22668]=16048, [22669]=68390, [22670]=34321, [22671]=34452, [22672]=33269, [22673]=50092, + [22676]=50650, [22678]=111303, [22679]=8750, [22680]=10709, [22681]=10709, [22682]=20000, + [22683]=22500, [22684]=30000, [22685]=30000, [22686]=37500, [22687]=30000, [22688]=64512, + [22689]=24282, [22690]=38147, [22691]=288527, [22692]=37500, [22694]=37500, [22695]=37500, + [22696]=37500, [22697]=37500, [22698]=37500, [22699]=72832, [22700]=73085, [22701]=91682, + [22702]=110409, [22703]=37500, [22704]=37500, [22705]=37500, [22707]=98660, [22709]=2, + [22710]=30, [22711]=22162, [22712]=22241, [22713]=74410, [22714]=14936, [22715]=22484, + [22716]=15043, [22718]=28410, [22720]=22889, [22721]=64030, [22722]=64030, [22724]=2, + [22725]=38790, [22728]=5000, [22729]=2000, [22730]=49596, [22731]=74394, [22732]=86443, + [22738]=2, [22739]=14750, [22740]=43935, [22741]=44092, [22742]=1, [22743]=1, + [22744]=1, [22745]=1, [22746]=12, [22747]=33526, [22748]=48441, [22749]=42217, + [22750]=42373, [22752]=34149, [22753]=34271, [22756]=33164, [22757]=24961, [22758]=25051, + [22759]=29190, [22760]=29302, [22761]=19607, [22762]=31492, [22763]=15806, [22764]=15864, + [22766]=12500, [22767]=12500, [22768]=12500, [22769]=12500, [22770]=12500, [22771]=12500, + [22772]=12500, [22773]=12500, [22774]=12500, [22775]=75, [22776]=25, [22777]=37, + [22778]=700, [22779]=700, [22783]=1387, [22784]=802, [22785]=500, [22786]=500, + [22787]=600, [22788]=750, [22789]=500, [22790]=750, [22791]=1000, [22792]=1250, + [22793]=2500, [22794]=10000, [22797]=1250, [22798]=326465, [22799]=327728, [22800]=245498, + [22801]=246440, [22802]=265185, [22803]=180171, [22804]=199392, [22806]=182204, [22807]=201633, + [22808]=207785, [22809]=260674, [22810]=142362, [22811]=157520, [22812]=211849, [22813]=239811, + [22815]=241520, [22816]=213775, [22818]=124717, [22819]=194225, [22820]=147283, [22821]=229338, + [22823]=2500, [22824]=2500, [22825]=2500, [22826]=2500, [22827]=2500, [22828]=2500, + [22829]=5000, [22830]=4000, [22831]=4000, [22832]=5000, [22833]=2500, [22834]=4000, + [22835]=6000, [22836]=5000, [22837]=5000, [22838]=5000, [22839]=5000, [22840]=6000, + [22841]=6000, [22842]=6000, [22843]=15084, [22844]=6000, [22845]=6000, [22846]=6000, + [22847]=6000, [22848]=7000, [22849]=7000, [22850]=7000, [22851]=20000, [22852]=11921, + [22853]=20000, [22854]=20000, [22855]=9536, [22856]=12192, [22857]=14751, [22858]=9827, + [22859]=9536, [22860]=9900, [22861]=20000, [22862]=9973, [22863]=7947, [22864]=8373, + [22865]=6723, [22866]=20000, [22867]=10157, [22868]=6357, [22869]=6821, [22870]=6845, + [22871]=5000, [22872]=14120, [22873]=14175, [22874]=21341, [22875]=21423, [22876]=21505, + [22877]=17987, [22878]=18055, [22879]=18123, [22880]=18191, [22881]=14605, [22882]=14660, + [22883]=14714, [22884]=14768, [22885]=14821, [22886]=14876, [22887]=22395, [22890]=10000, + [22891]=10000, [22897]=10000, [22900]=7500, [22901]=7500, [22902]=10000, [22903]=10000, + [22904]=10000, [22905]=12500, [22907]=12500, [22908]=15000, [22909]=12500, [22910]=20000, + [22911]=12500, [22912]=20000, [22913]=20000, [22914]=20000, [22915]=20000, [22917]=20000, + [22918]=20000, [22919]=25000, [22920]=15000, [22921]=15000, [22922]=25000, [22923]=25000, + [22924]=25000, [22925]=25000, [22926]=25000, [22927]=15000, [22935]=88355, [22936]=40803, + [22937]=72651, [22938]=61651, [22939]=60256, [22940]=62103, [22941]=77904, [22942]=189114, + [22943]=102777, [22947]=88355, [22951]=27, [22952]=16, [22953]=33, [22954]=91160, + [22956]=57, [22957]=57, [22958]=182, [22959]=183, [22960]=62091, [22961]=113642, + [22963]=149, [22964]=24, [22965]=20, [22966]=16, [22967]=95926, [22968]=59390, + [22969]=230, [22971]=231, [22976]=250, [22979]=403, [22980]=2493, [22981]=128862, + [22982]=1507, [22983]=62757, [22984]=1879, [22985]=407, [22986]=272, [22987]=342, + [22988]=197946, [22990]=576, [22991]=208, [22992]=261, [22993]=316, [22994]=91352, + [22995]=2448, [22996]=911, [22997]=1072, [22998]=717, [22999]=2500, [23000]=91256, + [23001]=91160, [23004]=58479, [23005]=58699, [23006]=58925, [23009]=148994, [23014]=183589, + [23017]=63014, [23018]=60256, [23019]=63466, [23020]=79607, [23021]=42608, [23023]=86443, + [23025]=60256, [23027]=91160, [23028]=98660, [23029]=72651, [23030]=59817, [23031]=60256, + [23032]=60264, [23033]=93164, [23034]=58290, [23035]=62561, [23036]=88355, [23037]=60256, + [23038]=60256, [23039]=264392, [23040]=91160, [23041]=91160, [23042]=91160, [23043]=174810, + [23044]=194870, [23045]=82578, [23046]=91160, [23047]=91160, [23048]=72651, [23049]=72651, + [23050]=86439, [23053]=86443, [23054]=278398, [23056]=280418, [23057]=102777, [23058]=88355, + [23059]=60256, [23060]=60256, [23061]=60256, [23062]=60256, [23063]=60256, [23064]=60256, + [23065]=60256, [23066]=60256, [23067]=60256, [23068]=81297, [23069]=89953, [23070]=90286, + [23071]=102741, [23072]=58039, [23073]=77614, [23075]=133426, [23077]=2500, [23078]=11912, + [23079]=2500, [23081]=13989, [23082]=16851, [23084]=11318, [23085]=22722, [23087]=22892, + [23088]=34463, [23089]=28825, [23090]=11572, [23091]=11615, [23092]=16476, [23093]=14624, + [23094]=2500, [23095]=2500, [23096]=2500, [23097]=2500, [23098]=2500, [23099]=2500, + [23100]=6898, [23101]=2500, [23103]=2500, [23104]=2500, [23105]=2500, [23106]=2500, + [23107]=2500, [23108]=2500, [23109]=2500, [23110]=2500, [23111]=2500, [23112]=2500, + [23113]=2500, [23114]=2500, [23115]=2500, [23116]=2500, [23117]=2500, [23118]=2500, + [23119]=2500, [23120]=2500, [23121]=2500, [23122]=40, [23123]=40, [23124]=59304, + [23125]=41953, [23126]=9488, [23127]=16476, [23128]=10461, [23129]=11269, [23130]=10000, + [23131]=12500, [23132]=56951, [23133]=15000, [23134]=15000, [23135]=10000, [23136]=12500, + [23137]=15000, [23138]=15000, [23139]=33837, [23140]=10000, [23141]=12500, [23142]=15000, + [23143]=15000, [23144]=10000, [23145]=12500, [23146]=15000, [23147]=15000, [23148]=10000, + [23149]=12500, [23150]=15000, [23151]=15000, [23152]=10000, [23153]=12500, [23154]=15000, + [23155]=15000, [23156]=13113, [23160]=200, [23161]=200, [23168]=2665, [23169]=3482, + [23170]=2684, [23171]=4213, [23173]=1243, [23176]=3, [23177]=10536, [23178]=4089, + [23192]=7143, [23193]=250000, [23197]=18717, [23198]=18165, [23199]=18858, [23200]=18929, + [23201]=18997, [23202]=18165, [23203]=19138, [23215]=500, [23219]=44473, [23220]=89270, + [23221]=203182, [23226]=97150, [23237]=60256, [23238]=128589, [23242]=267143, [23243]=13158, + [23244]=13205, [23251]=18384, [23252]=18536, [23253]=15438, [23254]=15495, [23255]=12443, + [23256]=12490, [23257]=15672, [23258]=16152, [23259]=19454, [23260]=19611, [23261]=13062, + [23262]=13109, [23263]=13156, [23264]=13204, [23265]=58, [23266]=98, [23267]=59, + [23272]=14169, [23273]=14222, [23274]=6651, [23275]=10013, [23276]=12826, [23277]=12873, + [23278]=15253, [23279]=10160, [23280]=8497, [23281]=12792, [23282]=6847, [23283]=10307, + [23284]=8619, [23285]=12976, [23286]=6945, [23287]=10454, [23288]=6993, [23289]=9526, + [23290]=6552, [23291]=9865, [23292]=21833, [23293]=21915, [23294]=18330, [23295]=18396, + [23296]=14771, [23297]=14826, [23298]=18600, [23299]=18666, [23300]=14987, [23301]=15042, + [23302]=15096, [23303]=15149, [23304]=15203, [23305]=15258, [23306]=18533, [23307]=18684, + [23308]=15560, [23309]=15619, [23310]=12541, [23311]=12589, [23312]=15795, [23313]=15854, + [23314]=12729, [23315]=12776, [23316]=12823, [23317]=12871, [23318]=12917, [23319]=12964, + [23320]=100000, [23321]=1, [23322]=1, [23323]=1, [23324]=1, [23325]=1, + [23328]=2, [23329]=5, [23331]=4, [23332]=3, [23333]=5, [23334]=10, + [23344]=1, [23345]=1, [23346]=9, [23347]=5, [23348]=1, [23353]=3, + [23354]=6, [23355]=200, [23356]=1, [23367]=9, [23369]=2, [23370]=38, + [23371]=48, [23372]=72, [23373]=58, [23375]=19, [23376]=11, [23377]=15, + [23380]=25, [23381]=10, [23383]=15, [23384]=15, [23385]=15, [23386]=17, + [23389]=15, [23390]=31, [23391]=25, [23392]=25, [23393]=25, [23395]=73, + [23396]=115, [23397]=23, [23398]=86, [23399]=100, [23400]=255, [23401]=802, + [23402]=577, [23403]=347, [23404]=218, [23405]=194, [23406]=368, [23407]=246, + [23408]=309, [23409]=1072, [23410]=1435, [23411]=1800, [23412]=429, [23413]=286, + [23414]=359, [23415]=726, [23423]=297, [23424]=1000, [23425]=1500, [23426]=2500, + [23427]=1250, [23429]=303, [23430]=243, [23431]=244, [23436]=30000, [23437]=30000, + [23438]=30000, [23439]=30000, [23440]=30000, [23441]=30000, [23444]=110, [23445]=2000, + [23446]=3000, [23447]=2500, [23448]=22500, [23449]=12500, [23451]=45671, [23452]=75452, + [23453]=75452, [23454]=45671, [23455]=57053, [23456]=45671, [23464]=45671, [23465]=57089, + [23466]=45671, [23467]=45671, [23468]=75452, [23469]=75452, [23473]=1, [23474]=1, + [23475]=1, [23476]=1, [23477]=1, [23478]=1, [23479]=1, [23482]=20269, + [23484]=20969, [23487]=33419, [23488]=44805, [23489]=47475, [23490]=39760, [23491]=18866, + [23493]=27683, [23494]=19615, [23497]=58164, [23498]=60063, [23499]=79583, [23502]=82647, + [23503]=85143, [23504]=68364, [23505]=70380, [23506]=28586, [23507]=58548, [23508]=28793, + [23509]=62984, [23510]=31529, [23511]=47104, [23512]=64163, [23513]=64391, [23514]=32234, + [23515]=29607, [23516]=44599, [23517]=30311, [23518]=60504, [23519]=45822, [23520]=30896, + [23521]=46159, [23522]=61891, [23523]=61628, [23524]=31103, [23525]=46837, [23526]=26912, + [23527]=54020, [23528]=750, [23529]=1000, [23530]=12000, [23531]=31259, [23532]=36818, + [23533]=36955, [23534]=47423, [23535]=55431, [23536]=55635, [23537]=37514, [23538]=37654, + [23539]=37795, [23540]=107762, [23541]=135202, [23542]=108562, [23543]=136202, [23544]=109350, + [23546]=137687, [23553]=176, [23554]=105375, [23555]=105763, [23556]=1, [23557]=132177, + [23558]=1807, [23559]=750, [23563]=68232, [23564]=80028, [23565]=91327, [23570]=1807, + [23571]=16000, [23572]=16000, [23573]=30000, [23574]=20000, [23575]=1500, [23576]=1250, + [23577]=269253, [23578]=700, [23582]=2, [23583]=2, [23585]=200, [23586]=85, + [23587]=18522, [23590]=10000, [23591]=10000, [23592]=10000, [23593]=10000, [23594]=15000, + [23595]=15000, [23596]=15000, [23597]=15000, [23598]=15000, [23599]=15000, [23600]=20000, + [23601]=15000, [23602]=15000, [23603]=15000, [23604]=20000, [23605]=15000, [23606]=15000, + [23607]=15000, [23608]=60000, [23609]=60000, [23610]=60000, [23611]=20000, [23612]=20000, + [23613]=25000, [23615]=15000, [23617]=15000, [23618]=15000, [23619]=15000, [23620]=120000, + [23621]=120000, [23622]=120000, [23623]=120000, [23624]=120000, [23625]=120000, [23626]=120000, + [23627]=120000, [23628]=120000, [23629]=120000, [23630]=120000, [23631]=120000, [23632]=120000, + [23633]=120000, [23634]=120000, [23635]=120000, [23636]=120000, [23637]=120000, [23638]=15000, + [23639]=75000, [23663]=64264, [23664]=96825, [23665]=128529, [23666]=43647, [23667]=65720, + [23668]=87950, [23676]=5, [23683]=750, [23684]=1500, [23689]=6250, [23690]=6250, + [23705]=12500, [23709]=12500, [23710]=12500, [23711]=4500, [23712]=1250, [23713]=1250, + [23730]=6500, [23731]=15000, [23734]=3750, [23736]=2500, [23737]=2500, [23742]=47216, + [23743]=2, [23745]=3750, [23746]=55725, [23747]=62413, [23748]=66312, [23755]=15000, + [23756]=10, [23758]=29667, [23761]=20534, [23762]=25324, [23763]=31774, [23764]=2500, + [23765]=2500, [23766]=20000, [23767]=5000, [23768]=250, [23769]=250, [23771]=250, + [23772]=20, [23773]=2, [23774]=30000, [23781]=500, [23782]=8000, [23783]=1500, + [23784]=10000, [23785]=30000, [23786]=12000, [23787]=12000, [23793]=6250, [23799]=20000, + [23800]=25000, [23802]=37500, [23803]=15000, [23804]=20000, [23805]=20000, [23806]=40000, + [23807]=15000, [23808]=40000, [23809]=15000, [23810]=20000, [23811]=15000, [23814]=15000, + [23815]=15000, [23816]=10000, [23819]=6000, [23820]=15000, [23821]=15000, [23822]=100000, + [23823]=100000, [23824]=32734, [23825]=17096, [23826]=3000, [23827]=4000, [23828]=30547, + [23829]=38321, [23831]=295, [23832]=295, [23835]=22500, [23836]=22500, [23838]=29454, + [23839]=44345, [23841]=3000, [23844]=666, [23848]=500, [23852]=875, [23858]=1500, + [23866]=1500, [23867]=1500, [23868]=1500, [23874]=20000, [23883]=17500, [23884]=20000, + [23885]=12500, [23887]=15000, [23888]=6000, [23909]=7, [23920]=3, [23922]=27, + [23923]=582, [23924]=17, [23931]=16, [23938]=1325, [23939]=1185, [23944]=7, + [23945]=8, [23946]=9, [23947]=14, [23948]=17, [23949]=22, [23965]=870, + [23976]=705, [23977]=498, [23978]=605, [23979]=990, [23987]=25, [23988]=30, + [23999]=2500, [24000]=15000, [24001]=12500, [24002]=15000, [24003]=15000, [24004]=2500, + [24006]=100, [24007]=100, [24008]=225, [24009]=225, [24020]=63979, [24021]=44959, + [24022]=38681, [24023]=16179, [24024]=19489, [24027]=30000, [24028]=30000, [24029]=30000, + [24030]=30000, [24031]=30000, [24032]=30000, [24033]=30000, [24035]=30000, [24036]=30000, + [24037]=30000, [24039]=30000, [24044]=81199, [24045]=13782, [24046]=40337, [24047]=30000, + [24048]=30000, [24050]=30000, [24051]=30000, [24052]=30000, [24053]=30000, [24054]=30000, + [24055]=30000, [24056]=30000, [24057]=30000, [24058]=30000, [24059]=30000, [24060]=30000, + [24061]=30000, [24062]=30000, [24063]=16619, [24064]=34963, [24065]=30000, [24066]=30000, + [24067]=30000, [24069]=84950, [24071]=78694, [24072]=6, [24073]=10283, [24074]=24491, + [24075]=24491, [24076]=25650, [24077]=27388, [24078]=27388, [24079]=38775, [24080]=39122, + [24082]=39122, [24083]=26588, [24085]=39470, [24086]=39818, [24087]=37037, [24088]=39122, + [24089]=39818, [24090]=20458, [24091]=24092, [24092]=39470, [24093]=39470, [24094]=80302, + [24095]=39470, [24096]=44030, [24097]=39470, [24098]=39470, [24101]=100000, [24102]=100000, + [24103]=29, [24104]=33, [24105]=6, [24106]=39122, [24107]=145, [24108]=121, + [24109]=48, [24110]=39122, [24111]=126, [24112]=76, [24113]=46, [24114]=39470, + [24116]=39470, [24117]=39818, [24118]=1500, [24119]=1500, [24120]=1500, [24121]=39818, + [24122]=30597, [24123]=30712, [24124]=12000, [24125]=15000, [24126]=15000, [24127]=15000, + [24128]=15000, [24129]=6, [24130]=7, [24131]=7, [24133]=14, [24134]=12, + [24135]=9, [24136]=284, [24138]=286, [24141]=23, [24142]=20, [24143]=1, + [24144]=16, [24145]=1, [24146]=1, [24150]=20984, [24151]=75303, [24154]=13782, + [24155]=80578, [24158]=30000, [24159]=15000, [24160]=15000, [24161]=35000, [24162]=35000, + [24163]=30000, [24164]=30000, [24165]=35000, [24166]=30000, [24167]=30000, [24168]=30000, + [24169]=30000, [24170]=35000, [24171]=35000, [24172]=15000, [24173]=15000, [24174]=30000, + [24175]=30000, [24176]=30000, [24177]=30000, [24178]=30000, [24179]=30000, [24180]=30000, + [24181]=30000, [24182]=30000, [24183]=30000, [24186]=50, [24188]=125, [24189]=1500, + [24190]=400, [24192]=30000, [24193]=30000, [24194]=30000, [24195]=30000, [24196]=30000, + [24197]=30000, [24198]=30000, [24199]=30000, [24200]=30000, [24201]=30000, [24202]=30000, + [24203]=30000, [24204]=30000, [24205]=30000, [24206]=30000, [24207]=30000, [24208]=30000, + [24209]=30000, [24210]=30000, [24211]=30000, [24212]=30000, [24213]=30000, [24214]=30000, + [24215]=30000, [24216]=30000, [24217]=30000, [24218]=30000, [24219]=30000, [24220]=30000, + [24222]=44210, [24231]=52, [24232]=225, [24234]=500, [24235]=800, [24241]=7, + [24242]=1500, [24243]=2250, [24245]=146, [24246]=400, [24249]=16563, [24250]=16626, + [24251]=16690, [24252]=25128, [24253]=25223, [24254]=26001, [24255]=21880, [24256]=21960, + [24257]=22040, [24258]=33181, [24259]=33297, [24260]=33417, [24261]=44716, [24262]=44876, + [24263]=45032, [24264]=33894, [24266]=30889, [24267]=31006, [24268]=100, [24270]=30000, + [24271]=4000, [24272]=4000, [24273]=20000, [24274]=50000, [24275]=20000, [24276]=50000, + [24281]=302, [24282]=4562, [24283]=38086, [24285]=375000, [24286]=125000, [24291]=500, + [24292]=15000, [24293]=15000, [24294]=90000, [24295]=90000, [24296]=20000, [24297]=20000, + [24298]=20000, [24299]=20000, [24300]=20000, [24301]=20000, [24302]=30000, [24303]=30000, + [24304]=30000, [24305]=30000, [24306]=30000, [24307]=30000, [24308]=15000, [24309]=15000, + [24310]=15000, [24311]=15000, [24312]=15000, [24313]=15000, [24314]=10000, [24316]=10000, + [24334]=798, [24338]=200, [24339]=299, [24340]=120, [24341]=90, [24342]=355, + [24343]=475, [24345]=100000, [24346]=421, [24347]=528, [24348]=636, [24349]=412, + [24350]=412, [24351]=1456, [24352]=1827, [24353]=1100, [24354]=1840, [24356]=74307, + [24357]=44738, [24359]=27182, [24360]=20465, [24361]=68476, [24362]=20621, [24363]=48302, + [24364]=48487, [24365]=17381, [24366]=31544, [24368]=500, [24376]=1807, [24378]=74821, + [24379]=20384, [24380]=51153, [24381]=51351, [24384]=69061, [24385]=19646, [24386]=20872, + [24387]=24577, [24388]=21023, [24389]=52751, [24390]=20737, [24391]=35419, [24392]=14219, + [24393]=14270, [24394]=89510, [24395]=14371, [24396]=36056, [24397]=28947, [24398]=27234, + [24401]=750, [24402]=12, [24403]=1000, [24404]=500, [24405]=500, [24406]=750, + [24407]=1000, [24408]=1000, [24413]=22693, [24417]=2, [24423]=15, [24424]=12, + [24425]=10, [24429]=2000, [24430]=184, [24431]=152, [24432]=172, [24433]=104, + [24434]=174, [24435]=24, [24436]=13, [24437]=11, [24438]=122, [24439]=153, + [24440]=185, [24441]=18, [24445]=43, [24446]=36, [24447]=67, [24448]=150, + [24449]=146, [24450]=15352, [24451]=23107, [24452]=17487, [24453]=70222, [24454]=21148, + [24455]=35379, [24456]=49720, [24457]=37361, [24458]=25193, [24459]=21551, [24460]=32466, + [24461]=90474, [24462]=10283, [24463]=39226, [24464]=75131, [24465]=45241, [24466]=37833, + [24476]=100, [24477]=100, [24478]=1000, [24479]=1000, [24481]=29723, [24507]=870, + [24508]=1185, [24510]=990, [24511]=1325, [24516]=870, [24517]=990, [24519]=1185, + [24521]=1325, [24540]=1000, [24575]=10617, [24576]=3666, [24577]=5520, [24578]=3693, + [24580]=5579, [24582]=16765, [24583]=22431, [24584]=11255, [24585]=15332, [24586]=20522, + [24587]=15449, [24588]=10339, [24589]=10715, [24590]=16134, [24591]=21592, [24592]=11130, + [24593]=16757, [24594]=22423, [24595]=16878, [24596]=11293, [24597]=11690, [24598]=17597, + [24599]=23547, [24600]=11815, [24601]=17787, [24602]=23798, [24603]=17912, [24604]=11983, + [24605]=11214, [24606]=16885, [24607]=22600, [24608]=11655, [24609]=17546, [24610]=23482, + [24611]=17677, [24612]=11828, [24613]=12221, [24614]=18399, [24615]=24622, [24616]=12356, + [24617]=18599, [24618]=24888, [24619]=18733, [24620]=12534, [24621]=12938, [24622]=19477, + [24623]=26061, [24624]=12158, [24625]=18306, [24626]=24501, [24627]=18445, [24628]=12341, + [24629]=12733, [24630]=19171, [24631]=25656, [24632]=12874, [24633]=19382, [24634]=25938, + [24635]=19524, [24636]=13062, [24637]=13465, [24638]=20271, [24639]=27126, [24640]=12642, + [24641]=19036, [24642]=25478, [24643]=19180, [24644]=12835, [24645]=13224, [24646]=19911, + [24647]=26646, [24648]=13373, [24649]=20134, [24650]=26946, [24651]=20282, [24652]=13571, + [24653]=13972, [24654]=21035, [24655]=28146, [24656]=14491, [24657]=21814, [24658]=26412, + [24659]=19886, [24660]=13308, [24661]=13695, [24662]=20619, [24663]=27597, [24664]=13851, + [24665]=20855, [24666]=27910, [24667]=21011, [24668]=14060, [24669]=14458, [24670]=21765, + [24671]=29128, [24672]=15003, [24673]=22583, [24674]=30219, [24675]=22745, [24676]=15217, + [24677]=15634, [24678]=21298, [24679]=28507, [24680]=14309, [24681]=21544, [24682]=28835, + [24683]=21709, [24684]=14528, [24685]=14921, [24686]=22467, [24687]=30069, [24688]=15495, + [24689]=23324, [24690]=31212, [24691]=23494, [24692]=15717, [24693]=13872, [24694]=20882, + [24695]=27942, [24696]=14019, [24697]=21103, [24698]=25553, [24699]=19239, [24700]=12874, + [24701]=13343, [24702]=20091, [24703]=26891, [24704]=13862, [24705]=20870, [24706]=27929, + [24707]=21021, [24708]=14065, [24709]=14560, [24710]=21919, [24711]=29328, [24712]=14717, + [24713]=22154, [24714]=29645, [24715]=22311, [24716]=14926, [24717]=15435, [24718]=21026, + [24719]=28141, [24720]=14515, [24721]=21854, [24722]=29244, [24723]=22015, [24724]=14731, + [24725]=15222, [24726]=22915, [24727]=30665, [24728]=15389, [24729]=23167, [24730]=30999, + [24731]=23333, [24732]=15611, [24733]=16117, [24734]=24259, [24735]=32461, [24736]=15142, + [24737]=22797, [24738]=30511, [24739]=22970, [24740]=15371, [24741]=15857, [24742]=23875, + [24743]=31951, [24744]=16035, [24745]=24139, [24746]=32304, [24747]=24316, [24748]=16270, + [24749]=16771, [24750]=25248, [24751]=33785, [24752]=15743, [24753]=23703, [24754]=31726, + [24755]=23886, [24756]=15983, [24757]=16468, [24758]=24796, [24759]=33186, [24760]=16653, + [24761]=25074, [24762]=33557, [24763]=25261, [24764]=16902, [24765]=17401, [24766]=26197, + [24767]=35058, [24768]=17591, [24769]=27171, [24770]=36357, [24771]=24761, [24772]=16571, + [24773]=17053, [24774]=25678, [24775]=34365, [24776]=17248, [24777]=25971, [24778]=34759, + [24779]=26165, [24780]=17509, [24781]=18005, [24782]=3572, [24783]=27207, [24784]=36410, + [24785]=18754, [24786]=28229, [24787]=37774, [24788]=28431, [24789]=19021, [24790]=19543, + [24791]=26622, [24792]=35634, [24793]=17886, [24794]=26930, [24795]=36044, [24796]=27136, + [24797]=18160, [24798]=18652, [24799]=28084, [24800]=37586, [24801]=19366, [24802]=29156, + [24803]=39015, [24804]=29367, [24805]=19646, [24806]=16646, [24807]=25170, [24808]=33531, + [24809]=16823, [24810]=25324, [24811]=30664, [24812]=23190, [24813]=15449, [24814]=16011, + [24815]=24217, [24816]=32269, [24817]=16634, [24818]=25044, [24819]=33515, [24820]=25338, + [24821]=16878, [24822]=17472, [24823]=26420, [24824]=35194, [24825]=17660, [24826]=26585, + [24827]=35574, [24828]=26892, [24829]=17912, [24830]=18522, [24831]=25344, [24832]=33770, + [24833]=17418, [24834]=26225, [24835]=35093, [24836]=26535, [24837]=17677, [24838]=18266, + [24839]=27620, [24840]=36799, [24841]=18466, [24842]=27801, [24843]=37198, [24844]=28124, + [24845]=18733, [24846]=19340, [24847]=29241, [24848]=38954, [24849]=18170, [24850]=27356, + [24851]=36613, [24852]=27686, [24853]=18445, [24854]=19028, [24855]=28777, [24856]=38342, + [24857]=19242, [24858]=28967, [24859]=38764, [24860]=29310, [24861]=19524, [24862]=20125, + [24863]=30432, [24864]=40543, [24865]=18890, [24866]=28444, [24867]=38072, [24868]=28791, + [24869]=19180, [24870]=19761, [24871]=29887, [24872]=39823, [24873]=19984, [24874]=30089, + [24875]=40269, [24876]=30449, [24877]=20282, [24878]=20881, [24879]=31577, [24880]=42070, + [24881]=21660, [24882]=32606, [24883]=43628, [24884]=29845, [24885]=19886, [24886]=20463, + [24887]=30951, [24888]=41238, [24889]=20698, [24890]=31165, [24891]=41711, [24892]=31538, + [24893]=21011, [24894]=21606, [24895]=32675, [24896]=43531, [24897]=22424, [24898]=33758, + [24899]=45167, [24900]=34148, [24901]=22745, [24902]=23371, [24903]=35334, [24904]=42596, + [24905]=21380, [24906]=32195, [24907]=43088, [24908]=32584, [24909]=21709, [24910]=22300, + [24911]=33723, [24912]=44934, [24913]=23157, [24914]=34860, [24915]=46649, [24916]=35270, + [24917]=23494, [24918]=19462, [24919]=29075, [24920]=38980, [24921]=19671, [24922]=29384, + [24923]=39393, [24924]=26780, [24925]=18059, [24926]=18715, [24927]=27967, [24928]=37504, + [24929]=19445, [24930]=29055, [24931]=38957, [24932]=29269, [24933]=19732, [24934]=20426, + [24935]=30518, [24936]=40916, [24937]=20647, [24938]=30847, [24939]=41355, [24940]=31068, + [24941]=20942, [24942]=21656, [24943]=32353, [24944]=39250, [24945]=20360, [24946]=30423, + [24947]=40794, [24948]=30648, [24949]=20664, [24950]=21354, [24951]=31906, [24952]=42775, + [24953]=21588, [24954]=32255, [24955]=43246, [24956]=32487, [24957]=21902, [24958]=22611, + [24959]=33781, [24960]=45285, [24961]=21238, [24962]=31737, [24963]=42554, [24964]=31976, + [24965]=21561, [24966]=22246, [24967]=33237, [24968]=44566, [24969]=22494, [24970]=33609, + [24971]=45059, [24972]=33854, [24973]=22825, [24974]=23530, [24975]=35152, [24976]=47129, + [24977]=22081, [24978]=32994, [24979]=44247, [24980]=33249, [24981]=22421, [24982]=23099, + [24983]=34517, [24984]=46285, [24985]=23363, [24986]=34906, [24987]=46805, [24988]=35168, + [24989]=23712, [24990]=24410, [24991]=36472, [24992]=48902, [24993]=24678, [24994]=37833, + [24995]=50720, [24996]=38102, [24997]=23242, [24998]=23918, [24999]=35743, [25000]=47933, + [25001]=24193, [25002]=36152, [25003]=48479, [25004]=36428, [25005]=24560, [25006]=25256, + [25007]=37739, [25008]=50603, [25009]=25538, [25010]=39168, [25011]=52512, [25012]=39446, + [25013]=26593, [25014]=27325, [25015]=40822, [25016]=54721, [25017]=24989, [25018]=37345, + [25019]=50081, [25020]=37630, [25021]=25375, [25022]=26066, [25023]=38951, [25024]=52226, + [25025]=26361, [25026]=40449, [25027]=54227, [25028]=40740, [25029]=27467, [25030]=16529, + [25031]=17124, [25032]=17725, [25033]=18330, [25034]=18939, [25035]=19549, [25036]=20166, + [25037]=18811, [25038]=19383, [25039]=19956, [25040]=20536, [25041]=21119, [25042]=22296, + [25043]=22901, [25044]=26809, [25045]=27678, [25046]=28546, [25047]=29415, [25048]=30284, + [25049]=31154, [25050]=32023, [25051]=32891, [25052]=33760, [25053]=34629, [25054]=35498, + [25055]=36368, [25056]=37236, [25057]=38105, [25058]=26809, [25059]=27678, [25060]=28546, + [25061]=29415, [25062]=30284, [25063]=31154, [25064]=32023, [25065]=32891, [25066]=33760, + [25067]=34629, [25068]=35498, [25069]=36368, [25070]=37236, [25071]=38105, [25072]=35505, + [25073]=36784, [25074]=35384, [25075]=36601, [25076]=37822, [25077]=39054, [25078]=40295, + [25079]=41545, [25080]=42798, [25081]=44063, [25082]=45337, [25083]=46619, [25084]=47905, + [25085]=49203, [25086]=26809, [25087]=27678, [25088]=28546, [25089]=29415, [25090]=30284, + [25091]=31154, [25092]=32023, [25093]=32891, [25094]=33760, [25095]=34629, [25096]=35498, + [25097]=36368, [25098]=37236, [25099]=38105, [25100]=53097, [25101]=55022, [25102]=56961, + [25103]=58907, [25104]=60871, [25105]=62848, [25106]=66529, [25107]=68578, [25108]=70639, + [25109]=72714, [25110]=67687, [25111]=69613, [25112]=71552, [25113]=73504, [25114]=51906, + [25115]=53793, [25116]=55694, [25117]=57607, [25118]=59526, [25119]=61465, [25120]=63416, + [25121]=65381, [25122]=69140, [25123]=71176, [25124]=73225, [25125]=75279, [25126]=77354, + [25127]=79441, [25128]=70111, [25129]=72632, [25130]=68033, [25131]=70376, [25132]=72735, + [25133]=75102, [25134]=77493, [25135]=79901, [25136]=82324, [25137]=84754, [25138]=89561, + [25139]=92090, [25140]=94626, [25141]=97186, [25142]=54898, [25143]=56882, [25144]=58874, + [25146]=62906, [25147]=64942, [25148]=66984, [25149]=69045, [25150]=64360, [25151]=66273, + [25152]=68191, [25153]=70130, [25154]=74055, [25155]=76057, [25156]=67135, [25157]=69567, + [25158]=72015, [25160]=76952, [25161]=79448, [25162]=81961, [25163]=84481, [25164]=87025, + [25165]=89585, [25166]=92161, [25167]=94745, [25168]=97353, [25169]=99977, [25170]=65647, + [25171]=68031, [25172]=70431, [25174]=75271, [25175]=77719, [25176]=80183, [25177]=82663, + [25178]=85151, [25179]=87663, [25180]=90191, [25181]=92736, [25182]=95287, [25183]=97863, + [25184]=55279, [25185]=57275, [25186]=55077, [25187]=56971, [25188]=58878, [25189]=60792, + [25190]=62725, [25191]=64670, [25192]=66629, [25193]=68593, [25194]=70577, [25195]=72574, + [25196]=74583, [25197]=76598, [25198]=54088, [25199]=56046, [25200]=58017, [25201]=59995, + [25202]=61992, [25203]=59415, [25204]=61303, [25205]=63210, [25206]=65130, [25207]=67062, + [25208]=69001, [25209]=70959, [25210]=72930, [25211]=74914, [25212]=66123, [25213]=68522, + [25214]=70937, [25215]=73369, [25216]=75809, [25217]=78272, [25218]=80752, [25219]=85418, + [25220]=87987, [25221]=90572, [25222]=93173, [25223]=86680, [25224]=89096, [25225]=91528, + [25226]=64642, [25227]=66986, [25228]=69353, [25229]=71736, [25230]=74136, [25231]=76543, + [25232]=78974, [25233]=81422, [25234]=83877, [25235]=88650, [25236]=91203, [25237]=93772, + [25238]=96348, [25239]=98949, [25240]=41917, [25241]=43430, [25242]=44947, [25243]=42062, + [25244]=43473, [25245]=44893, [25246]=46318, [25247]=47758, [25248]=49207, [25249]=50665, + [25250]=52128, [25251]=55052, [25252]=56574, [25253]=58100, [25254]=41025, [25255]=42508, + [25256]=44001, [25257]=45499, [25258]=47011, [25259]=48533, [25260]=50065, [25261]=51601, + [25262]=53152, [25263]=49512, [25264]=50952, [25265]=52395, [25266]=53854, [25267]=56837, + [25268]=40132, [25269]=41586, [25270]=43050, [25271]=44524, [25272]=46003, [25273]=47496, + [25274]=48998, [25275]=50511, [25276]=52027, [25277]=53559, [25278]=55100, [25279]=56650, + [25280]=58205, [25281]=59775, [25282]=42203, [25283]=40665, [25284]=42100, [25286]=44999, + [25287]=46458, [25288]=47932, [25289]=49415, [25290]=50908, [25291]=52406, [25292]=53918, + [25293]=55439, [25294]=56971, [25295]=58506, [25296]=55080, [25297]=57071, [25298]=59068, + [25299]=56754, [25300]=58654, [25301]=60568, [25302]=62488, [25303]=64427, [25304]=66379, + [25305]=68344, [25306]=70314, [25307]=72305, [25308]=74308, [25309]=76324, [25310]=53890, + [25311]=55842, [25312]=57806, [25313]=59783, [25314]=61768, [25315]=65421, [25316]=61072, + [25317]=62967, [25318]=64880, [25319]=66806, [25320]=68745, [25321]=70690, [25322]=72654, + [25323]=74632, [25324]=65881, [25325]=68266, [25326]=70673, [25327]=73097, [25328]=75536, + [25329]=77984, [25330]=80456, [25331]=85122, [25332]=87675, [25333]=90252, [25334]=92845, + [25335]=95454, [25336]=88752, [25337]=91175, [25338]=6906, [25339]=5199, [25340]=6959, + [25341]=3763, [25342]=5666, [25343]=3791, [25344]=3805, [25345]=5729, [25346]=7668, + [25347]=5926, [25348]=7930, [25349]=9234, [25350]=4633, [25351]=6974, [25352]=4666, + [25353]=4683, [25354]=7049, [25355]=9432, [25356]=6424, [25357]=9264, [25358]=4650, + [25359]=7001, [25360]=4685, [25361]=4703, [25362]=7081, [25363]=9733, [25364]=7327, + [25365]=10921, [25366]=5480, [25367]=8286, [25368]=5520, [25369]=8310, [25370]=5559, + [25371]=11158, [25372]=8436, [25373]=12108, [25374]=6075, [25375]=9185, [25376]=5536, + [25377]=8337, [25378]=5578, [25379]=11508, [25380]=8702, [25381]=6313, [25382]=9432, + [25383]=6359, [25384]=12694, [25385]=6406, [25386]=9571, [25387]=12832, [25388]=9640, + [25389]=7001, [25390]=10460, [25391]=7052, [25392]=14074, [25393]=7102, [25394]=10609, + [25395]=13226, [25396]=9937, [25397]=18352, [25398]=23027, [25399]=18490, [25400]=23197, + [25401]=18626, [25402]=23370, [25403]=18765, [25404]=23540, [25405]=14176, [25406]=14227, + [25408]=870, [25409]=1185, [25410]=990, [25411]=1325, [25412]=870, [25413]=1185, + [25414]=990, [25415]=1325, [25416]=200, [25417]=870, [25418]=1185, [25419]=12, + [25420]=990, [25421]=1325, [25422]=12, [25423]=12, [25424]=12, [25425]=870, + [25426]=1185, [25427]=990, [25428]=1325, [25429]=870, [25430]=1185, [25431]=990, + [25432]=1325, [25433]=200, [25434]=870, [25435]=1185, [25436]=990, [25437]=1325, + [25438]=750, [25439]=250, [25440]=870, [25441]=1185, [25442]=990, [25443]=1325, + [25444]=870, [25445]=1185, [25446]=990, [25447]=1325, [25450]=870, [25451]=1185, + [25452]=990, [25453]=1325, [25454]=990, [25455]=1325, [25456]=870, [25457]=1185, + [25463]=500, [25464]=3301, [25466]=4, [25467]=4, [25469]=6500, [25478]=21595, + [25479]=27828, [25480]=12358, [25481]=21829, [25482]=28132, [25483]=12491, [25484]=12536, + [25485]=22143, [25486]=15782, [25487]=30284, [25488]=30284, [25489]=17320, [25492]=60005, + [25494]=75559, [25495]=60671, [25496]=45671, [25498]=25, [25499]=30284, [25500]=30284, + [25501]=18603, [25502]=21275, [25503]=12132, [25504]=15219, [25505]=29415, [25506]=28403, + [25507]=31671, [25508]=29554, [25510]=23820, [25511]=41842, [25512]=35999, [25513]=22581, + [25514]=25751, [25515]=21444, [25516]=17218, [25517]=30284, [25518]=30665, [25519]=61556, + [25521]=3000, [25522]=32604, [25523]=18733, [25524]=21827, [25525]=18032, [25526]=15000, + [25530]=32096, [25534]=18650, [25536]=73751, [25537]=92529, [25538]=74294, [25540]=23032, + [25541]=36689, [25542]=36689, [25543]=64630, [25544]=48660, [25545]=65130, [25553]=30, + [25556]=40712, [25557]=35683, [25558]=20500, [25559]=27343, [25560]=24806, [25561]=28859, + [25562]=38775, [25563]=38775, [25564]=38775, [25565]=24421, [25566]=23009, [25567]=19684, + [25568]=39519, [25569]=46281, [25570]=24884, [25574]=27656, [25575]=31225, [25576]=17410, + [25577]=27953, [25578]=17533, [25579]=31672, [25583]=16154, [25584]=19460, [25585]=45576, + [25589]=35575, [25591]=17097, [25592]=20590, [25593]=36095, [25594]=31248, [25595]=27753, + [25597]=21431, [25598]=18330, [25599]=15329, [25600]=15382, [25601]=18524, [25602]=19739, + [25603]=90253, [25605]=18690, [25606]=32891, [25607]=32891, [25608]=94489, [25609]=18967, + [25610]=28044, [25611]=10742, [25612]=33757, [25613]=12711, [25614]=40408, [25615]=33543, + [25616]=24091, [25617]=24178, [25618]=19411, [25619]=7000, [25620]=7000, [25621]=18241, + [25622]=80542, [25623]=22766, [25624]=41549, [25628]=7000, [25629]=49598, [25630]=19910, + [25631]=19983, [25632]=50141, [25633]=7000, [25634]=7000, [25636]=19393, [25637]=12977, + [25639]=57838, [25640]=58059, [25643]=23486, [25644]=23574, [25645]=23660, [25649]=250, + [25650]=7500, [25651]=22500, [25652]=22500, [25653]=17500, [25654]=17436, [25655]=26106, + [25656]=36782, [25657]=39930, [25659]=30312, [25660]=38360, [25661]=17727, [25662]=32525, + [25668]=24047, [25669]=14274, [25670]=32249, [25671]=35070, [25673]=21717, [25674]=15897, + [25675]=30530, [25676]=32311, [25679]=250, [25680]=31300, [25681]=37703, [25682]=31539, + [25683]=37986, [25685]=20771, [25686]=32862, [25687]=43976, [25689]=45010, [25690]=44808, + [25691]=33726, [25692]=51110, [25693]=36667, [25694]=25734, [25695]=24563, [25696]=50116, + [25697]=25155, [25699]=1250, [25700]=1250, [25701]=48531, [25702]=41752, [25703]=100, + [25707]=6250, [25708]=750, [25710]=26858, [25711]=28751, [25712]=21640, [25713]=34604, + [25714]=28836, [25715]=33525, [25716]=19266, [25717]=24843, [25718]=19949, [25719]=868, + [25720]=12500, [25721]=12500, [25722]=12500, [25723]=20, [25724]=22, [25725]=12500, + [25726]=2500, [25728]=15000, [25729]=15000, [25730]=15000, [25731]=15000, [25732]=30000, + [25733]=35000, [25734]=35000, [25735]=40000, [25736]=35000, [25737]=35000, [25738]=30000, + [25739]=40000, [25740]=40000, [25741]=30000, [25742]=30000, [25743]=30000, [25744]=676, + [25759]=79164, [25760]=99323, [25761]=99692, [25762]=100050, [25763]=80334, [25764]=80629, + [25772]=75090, [25773]=75369, [25774]=75656, [25775]=38775, [25776]=38775, [25777]=22952, + [25778]=13373, [25779]=16778, [25780]=20207, [25781]=43576, [25782]=37485, [25783]=18810, + [25784]=28546, [25785]=28546, [25786]=7464, [25787]=8910, [25788]=29291, [25789]=25060, + [25790]=31447, [25791]=21045, [25792]=25349, [25802]=1500, [25803]=41903, [25804]=41903, + [25805]=26207, [25806]=65751, [25808]=59918, [25809]=41903, [25810]=24153, [25811]=41903, + [25813]=1020, [25819]=56869, [25820]=36691, [25821]=40916, [25822]=32847, [25823]=69463, + [25824]=28695, [25825]=69960, [25826]=28695, [25835]=89596, [25836]=71940, [25838]=36230, + [25843]=8000, [25844]=32000, [25845]=40000, [25846]=10000, [25847]=30000, [25848]=25000, + [25849]=30000, [25861]=3, [25867]=30000, [25868]=30000, [25869]=20000, [25870]=20000, + [25872]=7, [25873]=18, [25875]=50, [25876]=200, [25878]=13253, [25880]=150, + [25881]=600, [25882]=1000, [25883]=1000, [25886]=250, [25887]=15000, [25890]=30000, + [25893]=30000, [25894]=30000, [25895]=30000, [25896]=30000, [25897]=30000, [25898]=30000, + [25899]=30000, [25900]=5500, [25901]=30000, [25902]=30000, [25903]=30000, [25904]=30000, + [25905]=30000, [25906]=30000, [25907]=30000, [25908]=30000, [25909]=30000, [25910]=30000, + [25913]=30284, [25914]=30284, [25915]=62470, [25916]=64487, [25917]=80897, [25918]=64948, + [25919]=30284, [25920]=63579, [25921]=30284, [25922]=21574, [25923]=27810, [25924]=23159, + [25925]=18598, [25926]=32023, [25927]=19247, [25928]=32023, [25929]=42788, [25930]=27607, + [25931]=18470, [25932]=30896, [25933]=65575, [25934]=82265, [25935]=82553, [25936]=66290, + [25937]=66290, [25939]=59195, [25940]=23761, [25941]=32513, [25942]=26119, [25943]=74482, + [25944]=93451, [25945]=22512, [25946]=28242, [25947]=34167, [25948]=22665, [25949]=16156, + [25950]=95526, [25951]=29422, [25952]=76979, [25953]=57944, [25954]=8377, [25955]=35014, + [25956]=27487, [25957]=23508, [25958]=21241, [25959]=18172, [25960]=15201, [25961]=12205, + [25962]=83797, [25963]=31154, [25964]=76819, [25965]=18583, [25966]=18652, [25971]=40426, + [25972]=40569, [25973]=40717, [25974]=17826, [25975]=22369, [25976]=26944, [25977]=31496, + [25978]=50177, [25979]=38850, [25980]=33423, [25981]=20968, [25982]=11225, [25983]=16901, + [25984]=21204, [25985]=75264, [25986]=75544, [25987]=75824, [25989]=28546, [25992]=28546, + [25993]=28546, [26004]=124, [26005]=323, [26006]=160, [26007]=384, [26008]=101, + [26009]=294, [26010]=183, [26011]=386, [26012]=148, [26013]=298, [26014]=93, + [26016]=169, [26017]=358, [26018]=152, [26019]=395, [26020]=191, [26021]=458, + [26022]=123, [26023]=360, [26024]=224, [26025]=473, [26026]=364, [26027]=181, + [26028]=126, [26030]=507, [26031]=196, [26032]=246, [26033]=589, [26034]=140, + [26035]=408, [26036]=255, [26037]=539, [26038]=424, [26039]=211, [26040]=147, + [26049]=325, [26050]=844, [26051]=409, [26052]=1063, [26053]=330, [26054]=797, + [26055]=92386, [26322]=113, [27388]=2000, [27389]=383, [27390]=996, [27398]=425, + [27399]=254, [27400]=608, [27401]=300, [27402]=718, [27403]=302, [27404]=671, + [27408]=39509, [27409]=28382, [27410]=22792, [27411]=22876, [27412]=95675, [27413]=18750, + [27414]=34701, [27415]=29022, [27416]=10307, [27417]=30024, [27418]=32140, [27420]=42412, + [27422]=8, [27423]=22786, [27424]=76249, [27425]=8, [27426]=76831, [27427]=53987, + [27428]=23226, [27429]=8, [27430]=46800, [27431]=78296, [27432]=36645, [27433]=23663, + [27434]=29689, [27435]=8, [27436]=4308, [27437]=8, [27438]=8, [27439]=8, + [27440]=12377, [27441]=8, [27442]=60000, [27443]=5000, [27445]=2500, [27446]=1, + [27447]=29989, [27448]=25656, [27449]=54936, [27450]=38946, [27451]=25946, [27452]=17361, + [27453]=7102, [27454]=40584, [27455]=47219, [27456]=45215, [27457]=31946, [27458]=54649, + [27459]=32175, [27460]=55035, [27461]=46024, [27462]=18474, [27463]=83894, [27464]=22464, + [27465]=16907, [27466]=25458, [27467]=31941, [27468]=21376, [27474]=26933, [27475]=31713, + [27476]=90421, [27477]=34450, [27478]=27321, [27481]=1, [27483]=20969, [27484]=25260, + [27485]=26057, [27487]=61250, [27488]=26347, [27489]=31029, [27490]=88468, [27491]=30866, + [27492]=44559, [27493]=17889, [27494]=26928, [27495]=41953, [27497]=31936, [27498]=125, + [27499]=112, [27500]=100, [27501]=100, [27502]=112, [27503]=125, [27505]=45504, + [27506]=34866, [27507]=65619, [27508]=17563, [27509]=22033, [27510]=26538, [27511]=25, + [27512]=89111, [27513]=20, [27514]=44876, [27515]=500, [27516]=500, [27517]=16449, + [27518]=24770, [27519]=24865, [27520]=43593, [27521]=25661, [27522]=25759, [27523]=14846, + [27524]=105570, [27525]=25432, [27526]=63818, [27527]=61238, [27528]=26340, [27529]=66290, + [27531]=22191, [27532]=12500, [27533]=91750, [27534]=22045, [27535]=29422, [27536]=16782, + [27537]=16847, [27538]=84562, [27539]=44476, [27540]=63903, [27541]=25659, [27542]=17171, + [27543]=86172, [27544]=25949, [27545]=43411, [27546]=8788, [27547]=17493, [27548]=30902, + [27549]=40882, [27550]=27229, [27551]=10283, [27552]=12, [27553]=30, [27631]=36689, + [27635]=6, [27636]=25, [27640]=606, [27641]=1014, [27651]=150, [27655]=150, + [27656]=150, [27657]=150, [27658]=150, [27659]=150, [27660]=150, [27661]=150, + [27662]=150, [27663]=150, [27664]=150, [27665]=150, [27666]=150, [27667]=150, + [27668]=5, [27669]=5, [27671]=200, [27672]=29874, [27673]=85196, [27674]=200, + [27676]=200, [27677]=200, [27678]=200, [27681]=200, [27682]=200, [27683]=10000, + [27684]=5000, [27685]=10, [27686]=10, [27687]=100, [27688]=5000, [27690]=7500, + [27691]=7500, [27692]=7500, [27693]=7500, [27694]=5000, [27695]=5000, [27696]=5000, + [27697]=7500, [27698]=7500, [27699]=7500, [27700]=7500, [27712]=21793, [27713]=39550, + [27714]=34450, [27715]=30889, [27716]=40188, [27717]=35626, [27721]=32499, [27722]=18673, + [27723]=15616, [27724]=23508, [27725]=32966, [27726]=17603, [27727]=22086, [27728]=17736, + [27729]=667, [27730]=17870, [27731]=17421, [27732]=17486, [27733]=30284, [27734]=30284, + [27735]=30284, [27736]=5000, [27737]=33294, [27738]=26730, [27739]=46860, [27740]=10709, + [27741]=90078, [27742]=16784, [27743]=25273, [27744]=25371, [27745]=25469, [27746]=17042, + [27747]=85539, [27748]=60105, [27749]=78430, [27750]=78718, [27751]=79015, [27752]=79311, + [27753]=60223, [27754]=60447, [27755]=31020, [27756]=60895, [27757]=110959, [27758]=22464, + [27759]=41287, [27760]=23018, [27761]=10709, [27762]=10709, [27763]=31588, [27764]=16912, + [27765]=21219, [27766]=39470, [27767]=85530, [27768]=17171, [27769]=107715, [27770]=21612, + [27771]=45495, [27772]=55769, [27773]=52479, [27775]=27134, [27776]=34036, [27778]=27424, + [27779]=50287, [27780]=83797, [27781]=25073, [27783]=20557, [27784]=41903, [27787]=41742, + [27788]=43913, [27789]=25236, [27790]=45438, [27791]=108780, [27792]=8788, [27793]=26298, + [27794]=65983, [27795]=18086, [27796]=27226, [27797]=34155, [27798]=32175, [27799]=36689, + [27800]=46024, [27801]=41753, [27802]=37916, [27803]=44126, [27804]=25360, [27805]=10709, + [27806]=26252, [27813]=47044, [27814]=90096, [27815]=27126, [27816]=27224, [27817]=68304, + [27818]=45694, [27821]=27707, [27822]=55035, [27823]=51920, [27824]=34743, [27825]=21793, + [27826]=39550, [27827]=21956, [27828]=10000, [27829]=110586, [27831]=33419, [27835]=27123, + [27837]=45527, [27838]=33962, [27839]=59661, [27840]=106935, [27842]=107748, [27843]=17304, + [27844]=45504, [27845]=39399, [27846]=87492, [27847]=46016, [27848]=26440, [27854]=280, + [27855]=280, [27856]=280, [27857]=280, [27858]=280, [27859]=280, [27860]=320, + [27865]=26147, [27866]=26242, [27867]=32925, [27868]=86036, [27869]=41903, [27870]=62137, + [27871]=8788, [27872]=91750, [27873]=46037, [27874]=50151, [27875]=33564, [27876]=84237, + [27877]=105703, [27878]=25463, [27884]=44417, [27885]=63806, [27886]=25617, [27887]=56311, + [27888]=39736, [27889]=17722, [27890]=66698, [27891]=66290, [27892]=26870, [27893]=62913, + [27895]=30866, [27896]=10000, [27897]=57778, [27898]=62144, [27899]=85196, [27900]=21612, + [27901]=83803, [27902]=25849, [27903]=111025, [27904]=10709, [27905]=89462, [27906]=62851, + [27907]=36045, [27908]=45215, [27909]=54453, [27910]=58292, [27911]=22851, [27912]=55034, + [27913]=92049, [27914]=33819, [27915]=37017, [27916]=43988, [27917]=24759, [27918]=29163, + [27919]=25630, [27925]=7102, [27932]=870, [27933]=990, [27934]=1185, [27935]=1325, + [27936]=51920, [27937]=86858, [27938]=32690, [27940]=100000, [27941]=50000, [27944]=87500, + [27945]=37500, [27946]=26928, [27948]=36165, [27976]=62500, [27977]=60782, [27978]=2500, + [27979]=25000, [27980]=87800, [27981]=26437, [27982]=75000, [27985]=32296, [27986]=115094, + [27987]=61203, [27988]=24576, [27992]=12500, [27993]=37576, [27994]=25143, [27995]=31548, + [27996]=30866, [28026]=19557, [28027]=22457, [28028]=14852, [28029]=14047, [28030]=21753, + [28031]=22437, [28032]=22518, [28033]=107191, [28034]=10000, [28040]=66290, [28041]=66290, + [28042]=66290, [28050]=33134, [28051]=33255, [28052]=26703, [28053]=2, [28055]=47247, + [28056]=3, [28057]=40796, [28058]=870, [28059]=990, [28060]=2, [28061]=3, + [28062]=46848, [28063]=43673, [28064]=17536, [28065]=17603, [28066]=17669, [28068]=15000, + [28069]=36740, [28070]=21111, [28071]=3750, [28072]=6500, [28073]=16750, [28074]=26782, + [28075]=21505, [28100]=1000, [28101]=1500, [28102]=2500, [28103]=2500, [28104]=2500, + [28108]=10307, [28109]=10307, [28121]=10000, [28124]=21217, [28134]=22464, [28141]=134, + [28142]=169, [28143]=203, [28144]=77, [28146]=48, [28147]=60, [28148]=72, + [28149]=158, [28150]=149, [28151]=449, [28152]=240, [28153]=257, [28154]=334, + [28155]=193, [28156]=193, [28157]=422, [28158]=243, [28159]=244, [28160]=476, + [28161]=478, [28162]=276, [28163]=277, [28164]=876, [28166]=46065, [28167]=31029, + [28168]=39818, [28169]=24112, [28170]=26735, [28171]=22359, [28172]=40625, [28173]=48927, + [28174]=18082, [28175]=57488, [28176]=44320, [28177]=38377, [28178]=31961, [28179]=25664, + [28180]=44997, [28181]=38789, [28182]=32446, [28183]=26052, [28184]=85100, [28185]=34167, + [28186]=51441, [28187]=22045, [28188]=110575, [28189]=88785, [28190]=10000, [28191]=35771, + [28192]=41438, [28193]=25081, [28194]=25176, [28202]=43253, [28203]=60782, [28204]=43578, + [28205]=61232, [28206]=32925, [28207]=46177, [28210]=91424, [28211]=55035, [28212]=36830, + [28213]=34450, [28214]=20977, [28215]=37906, [28216]=84562, [28217]=41953, [28218]=34081, + [28219]=51318, [28220]=32192, [28221]=45154, [28222]=108122, [28223]=10000, [28224]=33551, + [28225]=47053, [28226]=90122, [28227]=83797, [28228]=54458, [28229]=36436, [28230]=36566, + [28231]=55044, [28232]=36823, [28233]=22464, [28248]=27226, [28249]=27324, [28250]=27422, + [28251]=34396, [28252]=36819, [28253]=115468, [28254]=22464, [28255]=31579, [28256]=26060, + [28257]=87193, [28258]=43988, [28259]=30866, [28260]=22045, [28262]=62162, [28263]=89128, + [28264]=44727, [28265]=55035, [28266]=54057, [28267]=90421, [28268]=22686, [28269]=27319, + [28270]=15000, [28271]=20000, [28272]=20000, [28273]=15000, [28274]=10000, [28275]=38940, + [28276]=15000, [28277]=15000, [28278]=26250, [28279]=30000, [28280]=30000, [28281]=15000, + [28282]=10000, [28284]=75, [28285]=47035, [28286]=67565, [28288]=10000, [28290]=2500, + [28291]=15000, [28296]=26052, [28301]=26538, [28303]=403, [28304]=17885, [28306]=37788, + [28311]=85213, [28315]=86506, [28316]=55572, [28317]=17431, [28318]=45836, [28321]=8788, + [28322]=91099, [28323]=7102, [28324]=32296, [28325]=115094, [28327]=14846, [28328]=25271, + [28337]=62630, [28338]=35918, [28339]=33796, [28340]=33918, [28341]=113456, [28342]=36436, + [28343]=10283, [28344]=41467, [28345]=92058, [28347]=41951, [28348]=31582, [28349]=38045, + [28350]=44472, [28367]=104856, [28370]=10000, [28371]=26252, [28372]=26350, [28373]=26448, + [28374]=26545, [28375]=31258, [28384]=41455, [28386]=64411, [28387]=22045, [28390]=30685, + [28391]=52500, [28392]=87826, [28393]=110190, [28394]=41903, [28396]=22279, [28397]=67077, + [28398]=22440, [28399]=280, [28400]=90413, [28401]=50552, [28403]=59434, [28406]=25762, + [28407]=55035, [28408]=9, [28412]=22045, [28413]=26440, [28414]=33172, [28415]=26635, + [28416]=89102, [28418]=10000, [28419]=39470, [28420]=750, [28421]=1000, [28425]=106842, + [28426]=121723, [28427]=133976, [28428]=135064, [28429]=153869, [28430]=169367, [28431]=109260, + [28432]=124467, [28433]=140623, [28434]=141739, [28435]=161430, [28436]=177659, [28437]=114600, + [28438]=130528, [28439]=129941, [28440]=131012, [28441]=149270, [28442]=164324, [28452]=175, + [28453]=30149, [28454]=36305, [28458]=5000, [28459]=5000, [28460]=5000, [28461]=5000, + [28462]=5000, [28463]=5000, [28464]=5000, [28465]=5000, [28466]=5000, [28467]=5000, + [28468]=5000, [28469]=5000, [28470]=5000, [28477]=24459, [28483]=76235, [28484]=89420, + [28485]=102060, [28486]=280, [28491]=22464, [28492]=28179, [28493]=34088, [28494]=39661, + [28495]=13258, [28496]=16632, [28497]=18615, [28498]=21925, [28501]=25, [28502]=40765, + [28503]=34870, [28504]=87501, [28505]=41219, [28506]=29384, [28507]=23591, [28508]=23678, + [28509]=128862, [28510]=60256, [28511]=23936, [28512]=42281, [28514]=28084, [28515]=22554, + [28516]=86443, [28517]=34092, [28518]=40150, [28519]=34349, [28520]=34479, [28521]=28841, + [28522]=115788, [28523]=34866, [28524]=116656, [28525]=203059, [28528]=91160, [28529]=35640, + [28530]=88355, [28531]=26809, [28532]=27678, [28533]=28546, [28534]=29415, [28535]=30284, + [28536]=31154, [28537]=32023, [28538]=32891, [28539]=33760, [28540]=34629, [28541]=35498, + [28542]=36368, [28543]=37236, [28544]=38105, [28545]=43900, [28565]=24032, [28566]=42450, + [28567]=36305, [28568]=36436, [28569]=63869, [28570]=36696, [28572]=111436, [28573]=139838, + [28578]=46850, [28579]=91160, [28581]=88820, [28582]=35654, [28583]=53677, [28584]=119717, + [28585]=36045, [28586]=36172, [28587]=151260, [28588]=91081, [28589]=55082, [28590]=91160, + [28591]=61366, [28592]=36949, [28593]=58607, [28594]=46155, [28595]=2500, [28596]=12500, + [28597]=81675, [28599]=70528, [28600]=58990, [28601]=59202, [28602]=47535, [28603]=203059, + [28604]=149618, [28606]=77160, [28608]=63623, [28609]=102777, [28610]=51371, [28611]=73015, + [28612]=34352, [28621]=82874, [28631]=51556, [28632]=15000, [28633]=143665, [28647]=42122, + [28649]=60256, [28652]=22897, [28653]=34472, [28654]=23068, [28655]=28944, [28656]=34863, + [28657]=116632, [28658]=150219, [28659]=36689, [28660]=36313, [28661]=60256, [28662]=85329, + [28663]=36700, [28666]=58626, [28669]=42439, [28670]=31250, [28671]=51318, [28672]=34338, + [28673]=86172, [28674]=88355, [28675]=60256, [28726]=34483, [28727]=91160, [28728]=203059, + [28729]=116234, [28730]=60256, [28731]=102777, [28732]=44071, [28733]=41521, [28734]=203059, + [28735]=71295, [28740]=67403, [28741]=56386, [28742]=45283, [28743]=59548, [28744]=34219, + [28745]=102777, [28746]=51949, [28747]=60451, [28748]=81051, [28749]=116222, [28750]=29164, + [28751]=70247, [28752]=44067, [28753]=60256, [28754]=75763, [28755]=45716, [28756]=36703, + [28757]=113642, [28762]=102777, [28763]=60256, [28764]=36919, [28765]=37059, [28766]=37196, + [28767]=124456, [28768]=124925, [28770]=125848, [28771]=129671, [28772]=97604, [28773]=163260, + [28774]=163829, [28775]=68922, [28776]=33000, [28777]=39740, [28778]=36076, [28779]=42494, + [28780]=24238, [28781]=203059, [28782]=152643, [28783]=91937, [28785]=91160, [28788]=2500, + [28789]=91160, [28790]=60256, [28791]=60256, [28792]=60256, [28793]=60256, [28794]=163813, + [28795]=46294, [28796]=49495, [28797]=39732, [28799]=24142, [28800]=151457, [28801]=54735, + [28802]=122102, [28803]=47221, [28804]=37914, [28810]=58388, [28822]=102777, [28823]=91160, + [28824]=44481, [28825]=81175, [28826]=36689, [28827]=38328, [28828]=32057, [28830]=91160, + [28972]=2350, [28979]=3, [29007]=7, [29008]=18, [29009]=50, [29010]=200, + [29013]=200, [29014]=200, [29108]=58074, [29109]=72850, [29110]=1, [29111]=1, + [29112]=75, [29115]=68812, [29116]=46037, [29117]=33434, [29118]=25000, [29119]=197528, + [29121]=399034, [29122]=125555, [29123]=197528, [29124]=414544, [29125]=416074, [29126]=197528, + [29127]=62408, [29128]=7102, [29129]=35918, [29130]=112653, [29131]=45224, [29132]=43988, + [29133]=113863, [29134]=32178, [29135]=41279, [29136]=41426, [29137]=104471, [29138]=104878, + [29139]=25265, [29140]=26062, [29141]=43600, [29142]=43763, [29143]=25000, [29144]=25000, + [29145]=43988, [29146]=43988, [29147]=33426, [29148]=33548, [29151]=318849, [29152]=319996, + [29153]=428192, [29155]=431211, [29156]=402301, [29157]=1500, [29158]=1750, [29159]=8375, + [29160]=9125, [29165]=415991, [29166]=111003, [29167]=111410, [29168]=43988, [29169]=43988, + [29170]=197528, [29171]=531363, [29172]=197528, [29173]=43988, [29174]=25474, [29175]=400730, + [29176]=268985, [29177]=197528, [29179]=43988, [29180]=26057, [29181]=197528, [29182]=411359, + [29183]=86279, [29184]=61700, [29185]=88468, [29186]=250000, [29187]=75000, [29189]=250000, + [29190]=250000, [29191]=250000, [29192]=250000, [29193]=250000, [29194]=250000, [29195]=250000, + [29196]=250000, [29197]=250000, [29198]=250000, [29199]=250000, [29200]=3658, [29201]=150, + [29202]=600, [29203]=10000, [29204]=20000, [29209]=500, [29211]=9954, [29212]=30000, + [29213]=30000, [29214]=40000, [29215]=40000, [29217]=30000, [29218]=30000, [29219]=30000, + [29232]=20000, [29238]=39896, [29239]=59610, [29240]=22835, [29241]=22916, [29242]=34499, + [29243]=34624, [29244]=34749, [29245]=52539, [29246]=29163, [29247]=29268, [29248]=44054, + [29249]=23578, [29250]=21406, [29251]=32235, [29252]=37965, [29253]=39163, [29254]=58518, + [29255]=22418, [29257]=22582, [29258]=33999, [29259]=34124, [29261]=34371, [29262]=51974, + [29263]=28848, [29264]=28952, [29265]=43585, [29292]=10, [29312]=11665, [29313]=33669, + [29314]=37384, [29315]=15009, [29316]=41649, [29317]=16377, [29318]=30818, [29319]=24743, + [29320]=7102, [29321]=7102, [29322]=7102, [29323]=7102, [29325]=37866, [29326]=32789, + [29327]=18203, [29328]=14618, [29329]=106924, [29330]=34450, [29332]=32440, [29333]=41953, + [29334]=41953, [29335]=41953, [29336]=41953, [29337]=55814, [29339]=48180, [29340]=40294, + [29341]=32350, [29342]=55280, [29343]=35848, [29344]=43186, [29345]=28902, [29346]=108284, + [29347]=88355, [29348]=104629, [29349]=88355, [29350]=84694, [29351]=81510, [29352]=60256, + [29353]=109480, [29354]=34374, [29355]=137836, [29356]=138335, [29357]=28958, [29359]=139821, + [29360]=112256, [29362]=113045, [29363]=100000, [29364]=25000, [29371]=69666, [29372]=69923, + [29377]=88988, [29378]=53585, [29380]=71952, [29391]=69653, [29393]=280, [29394]=400, + [29395]=320, [29398]=30284, [29399]=72796, [29400]=17538, [29401]=320, [29412]=280, + [29425]=200, [29426]=200, [29448]=400, [29449]=400, [29450]=400, [29451]=400, + [29452]=400, [29453]=400, [29454]=280, [29456]=69716, [29457]=69987, [29458]=77562, + [29463]=39750, [29483]=15000, [29485]=15000, [29486]=15000, [29487]=15000, [29488]=15000, + [29489]=52781, [29490]=26486, [29491]=40049, [29492]=53353, [29493]=40332, [29494]=24968, + [29495]=41772, [29496]=20965, [29497]=31564, [29498]=42245, [29499]=31803, [29500]=21281, + [29502]=40447, [29503]=27064, [29504]=40743, [29505]=40893, [29506]=27361, [29507]=27461, + [29508]=49606, [29509]=33190, [29510]=46388, [29511]=31045, [29512]=46950, [29514]=62803, + [29515]=71156, [29516]=34352, [29517]=31758, [29518]=936, [29519]=72225, [29520]=34870, + [29521]=35000, [29522]=60864, [29523]=29381, [29524]=29489, [29525]=61534, [29526]=30483, + [29527]=30589, [29528]=5000, [29529]=5000, [29530]=5000, [29531]=5000, [29532]=5000, + [29533]=20000, [29534]=20000, [29535]=40000, [29536]=40000, [29539]=1250, [29540]=30000, + [29547]=1250, [29548]=2000, [29549]=100000, [29550]=10000, [29553]=870, [29554]=990, + [29555]=1325, [29556]=1185, [29559]=1185, [29560]=1325, [29561]=870, [29562]=990, + [29563]=1185, [29564]=1325, [29567]=1185, [29568]=1325, [29570]=670, [29571]=670, + [29572]=670, [29573]=55, [29574]=80, [29575]=670, [29576]=670, [29577]=87, + [29578]=990, [29579]=870, [29580]=1185, [29581]=1325, [29583]=1462, [29584]=150, + [29664]=12500, [29669]=12500, [29672]=12500, [29673]=12500, [29674]=12500, [29675]=12500, + [29677]=20000, [29682]=20000, [29684]=20000, [29689]=20000, [29691]=20000, [29693]=20000, + [29698]=20000, [29700]=20000, [29701]=20000, [29702]=20000, [29703]=20000, [29704]=20000, + [29713]=30000, [29714]=40000, [29717]=30000, [29718]=40000, [29719]=15000, [29720]=15000, + [29721]=30000, [29722]=30000, [29723]=60000, [29724]=60000, [29725]=60000, [29726]=60000, + [29727]=60000, [29728]=60000, [29729]=60000, [29730]=60000, [29731]=60000, [29732]=60000, + [29733]=60000, [29734]=60000, [29753]=50000, [29754]=50000, [29755]=50000, [29756]=50000, + [29757]=50000, [29758]=50000, [29759]=50000, [29760]=50000, [29761]=50000, [29762]=50000, + [29763]=50000, [29764]=50000, [29765]=50000, [29766]=50000, [29767]=50000, [29771]=14706, + [29772]=18446, [29773]=33322, [29774]=52018, [29775]=34629, [29776]=34629, [29777]=19896, + [29779]=50120, [29780]=32469, [29781]=39728, [29782]=35891, [29783]=57552, [29784]=17922, + [29785]=21586, [29786]=37841, [29787]=72472, [29788]=43641, [29789]=51098, [29791]=38522, + [29792]=22133, [29793]=35498, [29794]=35498, [29799]=1185, [29800]=1325, [29804]=26881, + [29806]=21660, [29807]=25507, [29808]=21818, [29810]=27467, [29811]=22052, [29812]=25967, + [29813]=25562, [29814]=27999, [29815]=27999, [29901]=1250, [29902]=25000, [29903]=1250, + [29904]=1250, [29908]=63676, [29909]=51139, [29910]=64172, [29911]=64414, [29913]=53349, + [29914]=53547, [29915]=40305, [29916]=40454, [29917]=34647, [29918]=26216, [29919]=34898, + [29920]=60256, [29921]=79504, [29922]=60256, [29923]=203059, [29924]=139688, [29925]=40322, + [29926]=22362, [29927]=16831, [29928]=20942, [29929]=26277, [29930]=26374, [29931]=19855, + [29932]=31887, [29933]=32006, [29934]=24091, [29935]=37614, [29936]=37753, [29937]=28362, + [29938]=27162, [29939]=450000, [29940]=162500, [29941]=250000, [29942]=33067, [29943]=24890, + [29944]=36094, [29945]=36229, [29946]=27224, [29947]=31454, [29948]=131728, [29949]=99160, + [29950]=10000, [29951]=10000, [29952]=10000, [29953]=10000, [29954]=10000, [29955]=10000, + [29956]=10000, [29957]=10000, [29958]=10000, [29959]=10000, [29960]=10000, [29962]=128733, + [29964]=15290, [29965]=43947, [29966]=31332, [29967]=33680, [29968]=40565, [29969]=35561, + [29970]=15642, [29971]=18839, [29972]=51269, [29973]=38564, [29974]=38708, [29975]=46617, + [29976]=40050, [29977]=53592, [29978]=30242, [29979]=28450, [29980]=2500, [29981]=160275, + [29982]=96539, [29983]=64912, [29984]=31089, [29985]=74902, [29986]=37590, [29987]=26958, + [29988]=172526, [29989]=40745, [29990]=40895, [29991]=82099, [29992]=42305, [29993]=180462, + [29994]=42609, [29995]=71271, [29996]=145925, [29997]=60256, [29998]=50711, [29999]=27088, + [30000]=0, [30001]=19742, [30002]=34618, [30003]=17412, [30004]=31603, [30005]=36774, + [30006]=36368, [30007]=86443, [30008]=88355, [30009]=105395, [30010]=105783, [30011]=106170, + [30012]=106558, [30013]=85548, [30014]=41860, [30015]=102777, [30016]=44182, [30017]=88355, + [30018]=102777, [30019]=51135, [30020]=27073, [30021]=160225, [30022]=102777, [30023]=37156, + [30024]=38324, [30025]=36368, [30026]=38611, [30027]=67691, [30028]=60256, [30029]=32531, + [30030]=39181, [30031]=68688, [30032]=46305, [30033]=69183, [30034]=46642, [30035]=39891, + [30036]=26690, [30037]=40179, [30038]=26881, [30039]=50577, [30040]=31458, [30041]=47366, + [30042]=31697, [30043]=57519, [30044]=38320, [30045]=57952, [30046]=38607, [30047]=38747, + [30048]=67929, [30049]=203059, [30050]=33564, [30051]=39317, [30052]=60256, [30053]=69176, + [30054]=79488, [30055]=49859, [30056]=49567, [30057]=43787, [30058]=130230, [30059]=88355, + [30060]=47182, [30061]=60256, [30062]=31691, [30063]=38172, [30064]=25544, [30065]=89730, + [30066]=58156, [30067]=33564, [30068]=38886, [30069]=22391, [30070]=19263, [30071]=32222, + [30072]=32340, [30073]=33297, [30074]=51597, [30075]=61713, [30076]=44570, [30077]=74563, + [30079]=37598, [30080]=98401, [30081]=66166, [30082]=132200, [30083]=60256, [30084]=66912, + [30085]=57934, [30086]=96412, [30087]=77416, [30088]=97120, [30089]=80037, [30090]=174677, + [30091]=40338, [30092]=50597, [30093]=101472, [30095]=128719, [30096]=43605, [30097]=56209, + [30098]=37451, [30099]=86443, [30100]=37734, [30101]=63129, [30102]=95073, [30103]=139053, + [30104]=61847, [30105]=107885, [30106]=35382, [30107]=56812, [30108]=145402, [30109]=60256, + [30110]=60256, [30111]=54025, [30112]=50892, [30155]=150, [30183]=20000, [30218]=26421, + [30224]=21594, [30225]=25427, [30226]=54369, [30227]=34629, [30236]=50000, [30237]=50000, + [30238]=50000, [30239]=50000, [30240]=50000, [30241]=50000, [30242]=50000, [30243]=50000, + [30244]=50000, [30245]=50000, [30246]=50000, [30247]=50000, [30248]=50000, [30249]=50000, + [30250]=50000, [30252]=51684, [30253]=14527, [30254]=25661, [30255]=43902, [30256]=33847, + [30257]=42459, [30258]=59660, [30262]=26795, [30263]=32412, [30264]=25332, [30265]=13760, + [30266]=25899, [30267]=24403, [30268]=27154, [30269]=25551, [30270]=47874, [30271]=21111, + [30272]=35317, [30273]=32042, [30274]=20823, [30275]=36505, [30276]=34629, [30277]=71933, + [30278]=72196, [30279]=54344, [30280]=30000, [30281]=30000, [30282]=30000, [30283]=30000, + [30284]=20559, [30285]=17198, [30286]=31214, [30290]=35050, [30291]=36867, [30293]=21612, + [30294]=20821, [30295]=31483, [30296]=48936, [30297]=31838, [30298]=52460, [30299]=61414, + [30300]=41903, [30301]=60000, [30302]=60000, [30303]=60000, [30304]=60000, [30305]=60000, + [30306]=60000, [30307]=60000, [30308]=60000, [30321]=60000, [30322]=60000, [30323]=60000, + [30324]=60000, [30328]=35632, [30329]=32187, [30330]=25950, [30331]=14798, [30332]=18565, + [30333]=33684, [30334]=39191, [30335]=28148, [30336]=22599, [30337]=39610, [30338]=22758, + [30339]=36368, [30340]=36368, [30341]=17345, [30342]=20895, [30352]=26134, [30355]=400, + [30357]=400, [30358]=400, [30359]=400, [30361]=400, [30362]=25556, [30363]=41039, + [30364]=68655, [30365]=7086, [30366]=7086, [30368]=25292, [30369]=31731, [30370]=25475, + [30371]=30000, [30372]=21384, [30373]=32193, [30374]=38940, [30375]=30434, [30377]=7086, + [30378]=7086, [30379]=35377, [30380]=25000, [30381]=37358, [30382]=14311, [30383]=13678, + [30384]=17162, [30386]=36236, [30394]=86762, [30395]=87099, [30396]=87435, [30397]=50141, + [30398]=20638, [30399]=17264, [30400]=24400, [30401]=25452, [30402]=23981, [30405]=120, + [30419]=750, [30420]=677, [30421]=2542, [30422]=8375, [30443]=20000, [30444]=12500, + [30446]=72039, [30447]=72039, [30448]=72039, [30449]=72039, [30450]=72039, [30457]=320, + [30458]=280, [30463]=17128, [30466]=1185, [30467]=1325, [30475]=1185, [30476]=1325, + [30477]=1185, [30478]=1325, [30483]=10000, [30504]=1258, [30505]=631, [30506]=375, + [30507]=82, [30508]=27, [30509]=55, [30510]=1185, [30511]=1325, [30512]=1185, + [30513]=1325, [30514]=20361, [30515]=20438, [30516]=13677, [30517]=28831, [30518]=28939, + [30519]=21785, [30520]=14229, [30521]=13930, [30522]=91772, [30523]=55355, [30531]=43665, + [30532]=43827, [30533]=76989, [30534]=66241, [30535]=55409, [30536]=77857, [30538]=56029, + [30541]=69770, [30542]=5000, [30543]=46846, [30544]=5000, [30546]=30000, [30547]=30000, + [30548]=30000, [30549]=30000, [30550]=30000, [30551]=30000, [30552]=30000, [30553]=30000, + [30554]=30000, [30555]=30000, [30556]=30000, [30558]=30000, [30559]=30000, [30560]=30000, + [30563]=30000, [30564]=30000, [30565]=30000, [30566]=30000, [30568]=5535, [30569]=3633, + [30570]=17545, [30571]=35243, [30572]=30000, [30573]=30000, [30574]=30000, [30575]=30000, + [30581]=30000, [30582]=30000, [30583]=30000, [30584]=30000, [30585]=30000, [30586]=30000, + [30587]=30000, [30588]=30000, [30589]=30000, [30590]=30000, [30591]=30000, [30592]=30000, + [30593]=30000, [30594]=30000, [30597]=18492, [30598]=35243, [30599]=5535, [30600]=30000, + [30601]=30000, [30602]=30000, [30603]=30000, [30604]=30000, [30605]=30000, [30606]=30000, + [30607]=30000, [30608]=30000, [30610]=280, [30611]=6, [30612]=6, [30615]=1333, + [30619]=91160, [30620]=72039, [30621]=72039, [30622]=25000, [30623]=25000, [30626]=91160, + [30627]=91160, [30629]=91160, [30633]=25000, [30634]=25000, [30635]=25000, [30637]=25000, + [30641]=58878, [30642]=33835, [30643]=33965, [30644]=28413, [30663]=72039, [30664]=72039, + [30665]=72039, [30666]=88355, [30667]=60256, [30668]=23692, [30673]=24124, [30674]=45395, + [30675]=24295, [30676]=30477, [30677]=36703, [30678]=43218, [30681]=42122, [30682]=50968, + [30683]=60937, [30684]=93381, [30685]=29290, [30686]=35278, [30687]=41542, [30696]=15000, + [30705]=46039, [30707]=31466, [30708]=26648, [30709]=33564, [30710]=50287, [30720]=72039, + [30722]=150514, [30723]=120862, [30724]=90976, [30725]=24350, [30726]=102777, [30727]=49062, + [30728]=55392, [30729]=37063, [30730]=61998, [30731]=65210, [30732]=144890, [30733]=116363, + [30734]=46725, [30735]=35179, [30736]=60256, [30737]=44308, [30738]=60256, [30739]=71427, + [30740]=62616, [30741]=42221, [30744]=30000, [30745]=35000, [30746]=25000, [30747]=30000, + [30748]=35000, [30749]=29108, [30750]=37874, [30751]=29676, [30752]=33679, [30753]=65333, + [30754]=27483, [30755]=50995, [30757]=20851, [30758]=20675, [30759]=20499, [30765]=25321, + [30771]=13006, [30775]=21719, [30777]=11851, [30781]=20200, [30784]=10100, [30787]=90791, + [30788]=91108, [30789]=114292, [30804]=1064, [30809]=200, [30810]=200, [30811]=175, + [30812]=1185, [30813]=1325, [30814]=1185, [30815]=1325, [30816]=5, [30817]=150, + [30818]=9, [30819]=60, [30820]=1325, [30821]=1185, [30823]=75000, [30825]=37037, + [30826]=30000, [30830]=501016, [30831]=25066, [30832]=100968, [30833]=15000, [30834]=49382, + [30835]=52125, [30836]=34880, [30837]=17088, [30838]=17430, [30839]=35267, [30841]=43988, + [30842]=15000, [30843]=20000, [30844]=25000, [30846]=250000, [30855]=54657, [30856]=28744, + [30857]=27388, [30859]=62985, [30860]=41555, [30861]=51559, [30862]=51744, [30863]=36880, + [30864]=44409, [30865]=134401, [30866]=70700, [30868]=33989, [30869]=40943, [30870]=27400, + [30871]=27502, [30872]=203059, [30873]=62628, [30874]=139081, [30878]=75931, [30879]=36354, + [30880]=65964, [30881]=146462, [30882]=94071, [30883]=184368, [30884]=44405, [30885]=40316, + [30886]=50586, [30887]=81251, [30888]=27188, [30889]=87338, [30891]=51561, [30892]=64079, + [30893]=85374, [30894]=37542, [30895]=28664, [30896]=100692, [30897]=50818, [30898]=72439, + [30899]=72701, [30900]=87555, [30901]=146434, [30902]=195738, [30903]=110003, [30904]=110394, + [30905]=71583, [30906]=107792, [30907]=86568, [30908]=186039, [30909]=95599, [30910]=149931, + [30911]=203059, [30912]=60418, [30913]=60635, [30914]=35696, [30915]=50444, [30916]=57527, + [30917]=54128, [30918]=144864, [30919]=43616, [30922]=22675, [30923]=15170, [30924]=15901, + [30925]=24553, [30926]=20879, [30927]=14314, [30928]=28046, [30929]=28151, [30930]=14474, + [30931]=21789, [30932]=16799, [30933]=42153, [30936]=18492, [30937]=18559, [30938]=27273, + [30939]=32306, [30940]=17421, [30941]=34142, [30942]=17556, [30943]=20303, [30944]=20381, + [30945]=35512, [30946]=26096, [30947]=41907, [30948]=49654, [30950]=21188, [30951]=25103, + [30952]=32948, [30953]=33069, [30955]=32370, [30956]=22189, [30957]=45695, [30958]=31251, + [30959]=48587, [30960]=47610, [30961]=36652, [30962]=28475, [30964]=37072, [30966]=24490, + [30967]=29018, [30968]=37632, [30971]=21785, [30973]=40860, [30981]=36368, [30984]=52160, + [30986]=44524, [30999]=79950, [31000]=60195, [31002]=80880, [31009]=106568, [31010]=106956, + [31013]=86486, [31025]=24577, [31031]=25116, [31033]=25295, [31036]=108344, [31038]=101456, + [31062]=103834, [31071]=79665, [31072]=59981, [31073]=80285, [31074]=41555, [31075]=41555, + [31076]=41555, [31077]=41555, [31078]=41555, [31079]=10000, [31080]=4000, [31089]=50000, + [31090]=50000, [31091]=50000, [31092]=50000, [31093]=50000, [31094]=50000, [31095]=50000, + [31096]=50000, [31097]=50000, [31098]=50000, [31099]=50000, [31100]=50000, [31101]=50000, + [31102]=50000, [31103]=50000, [31104]=25765, [31105]=45161, [31106]=38922, [31107]=39062, + [31109]=32781, [31110]=32897, [31111]=13825, [31112]=26020, [31113]=43988, [31114]=20977, + [31115]=36782, [31116]=30000, [31117]=30000, [31118]=30000, [31125]=33546, [31126]=17317, + [31127]=41706, [31131]=16005, [31133]=25608, [31134]=82877, [31136]=48207, [31137]=24331, + [31138]=19802, [31139]=69628, [31140]=20965, [31142]=66009, [31143]=21832, [31145]=25499, + [31147]=28836, [31148]=27782, [31149]=13599, [31150]=13599, [31151]=24635, [31152]=50352, + [31153]=72203, [31154]=750, [31155]=58153, [31156]=50031, [31157]=41843, [31158]=33599, + [31159]=44177, [31160]=38247, [31161]=31844, [31162]=25568, [31163]=28611, [31164]=22786, + [31165]=18988, [31166]=15259, [31168]=43954, [31170]=37218, [31172]=31015, [31173]=31634, + [31174]=24812, [31175]=17496, [31176]=24964, [31177]=20399, [31178]=38775, [31179]=17928, + [31180]=25335, [31181]=13599, [31182]=33546, [31183]=31627, [31184]=24007, [31185]=19206, + [31186]=90367, [31187]=32533, [31188]=24635, [31189]=20996, [31190]=26991, [31191]=17496, + [31192]=13997, [31193]=71976, [31194]=37731, [31195]=27778, [31196]=8788, [31197]=22786, + [31198]=18988, [31199]=15191, [31200]=47338, [31201]=24836, [31202]=26036, [31203]=39818, + [31204]=55282, [31209]=56839, [31210]=48900, [31211]=40905, [31212]=32848, [31213]=41885, + [31214]=38398, [31215]=31973, [31216]=25672, [31217]=45002, [31218]=35970, [31219]=29975, + [31220]=23980, [31221]=26736, [31222]=36400, [31223]=22786, [31224]=18921, [31225]=15191, + [31226]=36982, [31227]=24126, [31228]=20399, [31229]=16999, [31230]=23239, [31231]=13599, + [31232]=35631, [31233]=30735, [31234]=80717, [31235]=25499, [31236]=21834, [31237]=40796, + [31238]=36689, [31240]=49481, [31242]=50527, [31243]=39605, [31244]=33004, [31246]=26403, + [31247]=35821, [31248]=31012, [31249]=24753, [31250]=20737, [31254]=21593, [31255]=24298, + [31256]=658, [31258]=55035, [31263]=523, [31264]=420, [31268]=1066, [31269]=1070, + [31270]=805, [31272]=24033, [31275]=41903, [31276]=40842, [31277]=41903, [31280]=23383, + [31281]=29587, [31282]=31177, [31283]=15899, [31284]=28806, [31285]=41068, [31286]=47960, + [31287]=51157, [31288]=29975, [31289]=99916, [31290]=10709, [31291]=107599, [31292]=52430, + [31293]=24576, [31294]=40363, [31295]=40961, [31297]=32769, [31298]=58768, [31299]=105351, + [31303]=64180, [31304]=85891, [31305]=86216, [31306]=33564, [31308]=104889, [31312]=21446, + [31313]=17936, [31314]=32544, [31315]=25434, [31318]=123328, [31319]=79025, [31320]=69592, + [31321]=115200, [31322]=125228, [31323]=75416, [31326]=60256, [31328]=63118, [31329]=28260, + [31330]=47683, [31331]=106334, [31332]=106717, [31333]=40162, [31334]=134340, [31335]=53927, + [31336]=432949, [31337]=6250, [31338]=88355, [31339]=60256, [31340]=39762, [31341]=20052, + [31342]=102901, [31343]=41313, [31354]=10000, [31355]=10000, [31356]=10000, [31357]=10000, + [31358]=30000, [31359]=15000, [31361]=15000, [31362]=30000, [31364]=82308, [31367]=83219, + [31368]=62517, [31369]=83818, [31370]=74152, [31371]=55708, [31380]=41903, [31381]=41903, + [31382]=41903, [31383]=41903, [31390]=60000, [31391]=60000, [31392]=60000, [31393]=60000, + [31394]=60000, [31395]=60000, [31398]=60256, [31399]=60256, [31401]=30000, [31402]=30000, + [31414]=83568, [31415]=44029, [31416]=50525, [31417]=102273, [31418]=12893, [31419]=24266, + [31420]=29359, [31421]=22947, [31422]=65433, [31423]=67420, [31424]=50747, [31425]=13580, + [31426]=17036, [31427]=30911, [31428]=24155, [31429]=20660, [31430]=15631, [31431]=18830, + [31432]=33015, [31433]=25968, [31434]=32585, [31435]=30196, [31436]=35293, [31438]=19848, + [31439]=17050, [31440]=20533, [31441]=35996, [31442]=27578, [31443]=34597, [31444]=31247, + [31445]=24530, [31446]=69937, [31447]=70180, [31448]=70430, [31452]=12932, [31453]=24342, + [31454]=19549, [31455]=23653, [31456]=20754, [31457]=26039, [31458]=41816, [31459]=48960, + [31460]=31388, [31461]=17899, [31462]=26944, [31464]=22616, [31465]=27237, [31470]=25002, + [31471]=32246, [31472]=19420, [31473]=22872, [31474]=50204, [31475]=67189, [31476]=67439, + [31477]=13188, [31478]=24818, [31479]=19928, [31480]=23468, [31481]=13381, [31482]=16787, + [31483]=35314, [31484]=20291, [31485]=27149, [31486]=34058, [31487]=28583, [31488]=33411, + [31490]=52380, [31491]=52578, [31492]=81771, [31493]=41555, [31494]=41555, [31501]=100000, + [31508]=26847, [31509]=20212, [31510]=13186, [31511]=33940, [31512]=16606, [31513]=16669, + [31514]=41189, [31515]=20669, [31516]=20225, [31519]=50226, [31520]=37732, [31521]=36916, + [31523]=41555, [31526]=41555, [31527]=41555, [31528]=41555, [31531]=13574, [31532]=25548, + [31533]=30910, [31534]=24159, [31537]=20835, [31538]=26135, [31539]=20983, [31540]=24708, + [31541]=72250, [31542]=90633, [31543]=82287, [31544]=39983, [31545]=40134, [31546]=24173, + [31547]=36399, [31548]=56839, [31549]=57050, [31552]=26659, [31553]=26754, [31554]=35802, + [31555]=17966, [31556]=36063, [31557]=25855, [31558]=18160, [31559]=18225, [31560]=34290, + [31561]=34412, [31562]=46046, [31563]=20903, [31564]=41964, [31565]=30097, [31566]=21145, + [31567]=21809, [31568]=39399, [31569]=39721, [31570]=52922, [31571]=26559, [31572]=53308, + [31573]=38395, [31574]=26849, [31575]=26944, [31576]=47233, [31577]=47404, [31578]=63553, + [31579]=32070, [31580]=64003, [31581]=45802, [31582]=32413, [31583]=30246, [31615]=8222, + [31617]=8222, [31657]=22454, [31658]=21130, [31659]=16969, [31660]=15873, [31661]=15092, + [31666]=5000, [31670]=200, [31671]=200, [31672]=150, [31673]=150, [31674]=7500, + [31675]=7500, [31676]=5000, [31677]=5000, [31679]=3000, [31680]=10000, [31681]=10000, + [31682]=10000, [31683]=13887, [31684]=17423, [31685]=41966, [31686]=49140, [31687]=21136, + [31688]=26514, [31689]=42577, [31690]=25068, [31691]=39818, [31692]=39818, [31693]=39818, + [31694]=39818, [31695]=39818, [31696]=39818, [31699]=34629, [31700]=85828, [31701]=86148, + [31703]=69424, [31711]=20900, [31712]=24355, [31713]=29338, [31714]=23037, [31715]=28546, + [31717]=27137, [31718]=34046, [31719]=41009, [31720]=48023, [31723]=62449, [31724]=48321, + [31725]=12933, [31726]=30574, [31727]=30574, [31728]=32023, [31729]=32023, [31730]=32023, + [31731]=32023, [31732]=32023, [31733]=61828, [31734]=39721, [31735]=25, [31737]=25, + [31745]=91143, [31746]=60256, [31747]=41953, [31748]=41953, [31749]=41953, [31756]=71638, + [31758]=72181, [31759]=72453, [31760]=5000, [31761]=47720, [31762]=47893, [31764]=39664, + [31765]=46440, [31766]=19974, [31768]=18476, [31770]=11890, [31773]=2500, [31774]=2500, + [31776]=2500, [31777]=2500, [31778]=2500, [31779]=2500, [31780]=2500, [31781]=2500, + [31782]=39375, [31783]=26345, [31784]=24787, [31785]=82921, [31786]=27639, [31787]=21600, + [31788]=15396, [31789]=16773, [31790]=34629, [31791]=41555, [31792]=20526, [31793]=17169, + [31794]=44616, [31796]=19263, [31797]=24165, [31798]=25871, [31804]=2500, [31816]=82425, + [31817]=29915, [31818]=34629, [31819]=34935, [31820]=32891, [31821]=67150, [31823]=32023, + [31837]=14750, [31856]=100000, [31857]=100000, [31858]=100000, [31859]=100000, [31860]=2500, + [31861]=30000, [31862]=2500, [31863]=30000, [31864]=2500, [31865]=30000, [31866]=2500, + [31867]=30000, [31868]=30000, [31869]=2500, [31870]=15000, [31871]=15000, [31872]=15000, + [31873]=15000, [31874]=15000, [31875]=30000, [31876]=30000, [31877]=30000, [31878]=30000, + [31879]=30000, [31882]=25000, [31883]=25000, [31884]=25000, [31885]=25000, [31886]=25000, + [31887]=25000, [31888]=25000, [31889]=25000, [31890]=200000, [31891]=200000, [31892]=25000, + [31893]=25000, [31894]=25000, [31895]=25000, [31896]=25000, [31898]=25000, [31899]=25000, + [31900]=25000, [31901]=25000, [31902]=25000, [31903]=25000, [31904]=25000, [31905]=25000, + [31906]=25000, [31907]=200000, [31908]=25000, [31909]=25000, [31910]=25000, [31911]=25000, + [31912]=25000, [31913]=25000, [31914]=200000, [31915]=25000, [31916]=25000, [31917]=25000, + [31918]=25000, [31919]=51700, [31920]=51700, [31921]=51700, [31922]=51700, [31923]=51700, + [31924]=51700, [31925]=10709, [31926]=10709, [31927]=10709, [31928]=10709, [31929]=10709, + [31935]=25757, [31936]=25850, [31937]=24090, [31938]=24183, [31939]=24276, [31940]=22464, + [31942]=25775, [31943]=10709, [31944]=870, [31945]=990, [31949]=6, [31951]=2500, + [31952]=750, [31955]=12, [32062]=1250, [32063]=1500, [32067]=1500, [32068]=1500, + [32070]=10000, [32072]=38286, [32073]=57213, [32076]=33127, [32077]=33252, [32078]=50288, + [32080]=42030, [32081]=197528, [32082]=74176, [32193]=60000, [32194]=60000, [32195]=60000, + [32196]=60000, [32197]=60000, [32198]=60000, [32199]=60000, [32200]=60000, [32201]=60000, + [32202]=60000, [32203]=60000, [32204]=60000, [32205]=60000, [32206]=60000, [32207]=60000, + [32208]=60000, [32209]=60000, [32210]=60000, [32211]=60000, [32212]=60000, [32213]=60000, + [32214]=60000, [32215]=60000, [32216]=60000, [32217]=60000, [32218]=60000, [32219]=60000, + [32220]=60000, [32221]=60000, [32222]=60000, [32223]=60000, [32224]=60000, [32225]=60000, + [32226]=60000, [32227]=50000, [32228]=50000, [32229]=50000, [32230]=50000, [32231]=50000, + [32232]=50639, [32234]=43467, [32235]=58105, [32236]=145939, [32237]=146462, [32238]=60256, + [32239]=37542, [32240]=55506, [32241]=60474, [32242]=62666, [32243]=72923, [32245]=73471, + [32247]=60256, [32248]=177210, [32249]=50000, [32250]=65575, [32251]=42997, [32252]=71923, + [32253]=108266, [32254]=144879, [32255]=93057, [32256]=29185, [32257]=43930, [32258]=40965, + [32259]=41122, [32260]=88355, [32261]=60256, [32262]=138629, [32263]=87600, [32264]=63126, + [32265]=35046, [32266]=60256, [32267]=67698, [32268]=74271, [32269]=142263, [32270]=28557, + [32271]=62571, [32273]=43302, [32274]=15000, [32275]=40494, [32276]=40647, [32277]=15000, + [32278]=48060, [32279]=48240, [32280]=44050, [32281]=15000, [32282]=15000, [32283]=15000, + [32284]=15000, [32285]=15000, [32286]=15000, [32287]=15000, [32288]=15000, [32289]=15000, + [32290]=15000, [32291]=15000, [32292]=15000, [32293]=15000, [32294]=15000, [32295]=15000, + [32296]=15000, [32297]=15000, [32298]=15000, [32299]=15000, [32300]=15000, [32301]=15000, + [32302]=15000, [32303]=15000, [32304]=15000, [32305]=15000, [32306]=15000, [32307]=15000, + [32308]=15000, [32309]=15000, [32310]=15000, [32311]=15000, [32312]=15000, [32323]=42852, + [32324]=35841, [32325]=107906, [32326]=36368, [32327]=57968, [32328]=36357, [32329]=43786, + [32330]=43943, [32331]=44100, [32332]=184386, [32333]=52107, [32334]=80640, [32335]=60256, + [32336]=108233, [32337]=40787, [32338]=40943, [32339]=35187, [32340]=50057, [32341]=87600, + [32342]=50091, [32343]=107110, [32344]=179172, [32345]=75383, [32346]=43315, [32347]=36223, + [32348]=181770, [32349]=88355, [32350]=203059, [32351]=36742, [32352]=55310, [32353]=29603, + [32354]=70418, [32361]=203059, [32362]=86443, [32363]=107100, [32365]=100692, [32366]=54133, + [32367]=57951, [32368]=75000, [32369]=145925, [32370]=102777, [32373]=72100, [32374]=183948, + [32375]=94538, [32376]=62618, [32377]=52373, [32378]=9, [32381]=4000, [32387]=25096, + [32388]=146, [32389]=50288, [32390]=25241, [32391]=38007, [32392]=25432, [32393]=31912, + [32394]=48050, [32395]=32155, [32396]=64546, [32397]=38873, [32398]=58788, [32399]=39164, + [32400]=78612, [32401]=46290, [32402]=69163, [32403]=47855, [32404]=95498, [32409]=30000, + [32410]=30000, [32411]=30000, [32412]=30000, [32413]=2500, [32420]=40345, [32423]=2000, + [32428]=20000, [32429]=20000, [32430]=20000, [32431]=20000, [32432]=20000, [32433]=20000, + [32434]=20000, [32435]=20000, [32436]=20000, [32437]=20000, [32438]=20000, [32439]=20000, + [32440]=20000, [32441]=20000, [32442]=20000, [32443]=20000, [32444]=20000, [32445]=2500, + [32447]=20000, [32453]=125, [32455]=60, [32461]=69205, [32464]=1500, [32468]=1000, + [32470]=1250, [32471]=149388, [32472]=66971, [32473]=67220, [32474]=57941, [32475]=58149, + [32476]=58363, [32478]=48992, [32479]=49165, [32480]=49343, [32483]=91160, [32485]=72039, + [32486]=72039, [32487]=72039, [32488]=72039, [32489]=72039, [32490]=72039, [32491]=72039, + [32492]=72039, [32493]=72039, [32494]=38619, [32495]=38762, [32496]=91160, [32497]=60256, + [32500]=143271, [32501]=91160, [32505]=91160, [32508]=3500, [32510]=63120, [32512]=49524, + [32513]=28240, [32514]=10709, [32515]=45804, [32516]=26806, [32517]=66456, [32518]=55331, + [32519]=29614, [32520]=22464, [32521]=75350, [32522]=53945, [32524]=43636, [32525]=43804, + [32526]=60256, [32527]=60256, [32528]=60256, [32529]=30465, [32531]=41953, [32532]=22462, + [32533]=22464, [32534]=66290, [32535]=55035, [32536]=91143, [32537]=91468, [32538]=27538, + [32539]=27633, [32540]=30808, [32541]=30928, [32568]=50091, [32570]=65575, [32571]=50639, + [32573]=65575, [32574]=43624, [32575]=65964, [32577]=44091, [32579]=66904, [32580]=34533, + [32581]=51991, [32582]=34791, [32583]=52383, [32584]=28039, [32585]=42216, [32586]=28249, + [32587]=42530, [32589]=60256, [32590]=42997, [32591]=88355, [32592]=86613, [32593]=54329, + [32596]=2300, [32597]=2300, [32598]=2300, [32599]=2300, [32600]=2300, [32601]=2300, + [32606]=49713, [32608]=44050, [32609]=42835, [32620]=1250, [32624]=32200, [32625]=24150, + [32626]=32200, [32627]=24150, [32628]=32200, [32629]=32200, [32630]=24150, [32631]=24150, + [32634]=9200, [32635]=9200, [32636]=9200, [32637]=9200, [32638]=9200, [32639]=9200, + [32640]=36800, [32641]=36800, [32645]=55200, [32647]=55200, [32648]=55200, [32650]=19550, + [32651]=55200, [32652]=19550, [32653]=19550, [32654]=19550, [32655]=20699, [32656]=31165, + [32658]=10000, [32659]=85574, [32660]=88222, [32661]=88547, [32662]=111091, [32663]=111498, + [32664]=43988, [32665]=26952, [32667]=85, [32668]=320, [32681]=155, [32682]=155, + [32683]=155, [32684]=155, [32685]=400, [32686]=400, [32688]=1, [32689]=1, + [32690]=1, [32691]=1, [32692]=1, [32693]=1, [32700]=1, [32701]=1, + [32702]=1, [32703]=1, [32704]=1, [32705]=1, [32706]=1, [32707]=1, + [32708]=1, [32709]=1, [32710]=1, [32711]=1, [32712]=1, [32713]=1, + [32714]=27, [32715]=12500, [32716]=12500, [32717]=12500, [32721]=225, [32722]=200, + [32725]=2, [32727]=2, [32728]=250, [32736]=7500, [32737]=7500, [32738]=7500, + [32739]=7500, [32742]=7500, [32744]=12500, [32745]=12500, [32746]=12500, [32747]=12500, + [32748]=12500, [32749]=12500, [32750]=12500, [32751]=12500, [32752]=12500, [32753]=12500, + [32754]=12500, [32755]=12500, [32756]=80011, [32758]=2500, [32759]=8050, [32769]=20977, + [32770]=10307, [32771]=10307, [32772]=39122, [32774]=39122, [32776]=26757, [32778]=43969, + [32779]=83797, [32780]=62933, [32781]=90808, [32782]=4618, [32783]=690, [32784]=460, + [32828]=2300, [32829]=103467, [32830]=103855, [32831]=62545, [32832]=9954, [32833]=10000, + [32836]=10000, [32837]=243112, [32838]=243974, [32839]=750, [32849]=750, [32850]=750, + [32851]=750, [32852]=750, [32854]=139429, [32863]=17500, [32865]=17688, [32866]=37217, + [32867]=14257, [32868]=32343, [32869]=36876, [32870]=44412, [32871]=38924, [32872]=55914, + [32882]=6, [32883]=6, [32909]=690, [32910]=460, [32941]=97528, [32942]=97528, + [32943]=140184, [32944]=134251, [32945]=141230, [32946]=141739, [33012]=25000, [33014]=12500, + [33023]=50, [33024]=100, [33025]=125, [33026]=200, [33028]=3, [33029]=12, + [33030]=1, [33031]=25, [33032]=50, [33033]=100, [33034]=100, [33035]=160, + [33036]=160, [33042]=320, [33048]=200, [33052]=200, [33053]=200, [33054]=60256, + [33055]=60256, [33058]=60256, [33081]=5, [33092]=5000, [33093]=5000, [33117]=20000, + [33122]=38029, [33124]=12500, [33131]=30000, [33133]=30000, [33134]=30000, [33135]=30000, + [33140]=30000, [33143]=30000, [33144]=30000, [33148]=25000, [33149]=25000, [33150]=25000, + [33151]=25000, [33152]=25000, [33153]=25000, [33155]=30000, [33156]=30000, [33157]=30000, + [33158]=30000, [33159]=30000, [33160]=30000, [33165]=7500, [33173]=46380, [33174]=20000, + [33185]=18000, [33186]=950, [33191]=69481, [33203]=48289, [33204]=52547, [33205]=60000, + [33206]=57303, [33208]=5000, [33209]=10000, [33211]=33146, [33214]=137848, [33215]=94140, + [33216]=94475, [33228]=3227, [33229]=3239, [33230]=4170, [33231]=3390, [33232]=2701, + [33233]=2276, [33234]=200, [33235]=1031, [33236]=280, [33237]=5772, [33239]=5407, + [33240]=5025, [33241]=5447, [33242]=5468, [33243]=3811, [33244]=3825, [33245]=1994, + [33246]=280, [33247]=3014, [33248]=3327, [33249]=3339, [33250]=2234, [33251]=6277, + [33252]=5401, [33253]=3696, [33254]=400, [33255]=3748, [33256]=3763, [33257]=3500, + [33258]=7540, [33259]=4171, [33260]=3617, [33261]=3631, [33262]=5105, [33263]=5514, + [33264]=4728, [33265]=4378, [33266]=4378, [33267]=9547, [33268]=9582, [33269]=8905, + [33270]=9651, [33271]=10487, [33272]=9026, [33273]=7339, [33274]=6316, [33281]=102777, + [33283]=132215, [33285]=25932, [33286]=58563, [33292]=2, [33293]=60256, [33297]=88355, + [33298]=129945, [33299]=66444, [33300]=47725, [33303]=69237, [33305]=30000, [33307]=15000, + [33317]=50333, [33322]=65813, [33326]=85458, [33327]=70220, [33328]=80691, [33329]=67482, + [33332]=79001, [33354]=131461, [33356]=48278, [33357]=37012, [33388]=128494, [33389]=128987, + [33421]=73002, [33432]=60691, [33446]=43619, [33453]=40605, [33463]=42080, [33464]=59168, + [33465]=163113, [33466]=88355, [33467]=136956, [33468]=137469, [33469]=80013, [33471]=38338, + [33473]=94727, [33474]=101161, [33476]=141544, [33478]=178195, [33479]=51857, [33480]=24892, + [33481]=65461, [33489]=38619, [33490]=166140, [33491]=100053, [33492]=167354, [33493]=134375, + [33494]=168585, [33495]=135360, [33496]=60256, [33497]=60256, [33498]=60256, [33499]=60256, + [33500]=60256, [33533]=80412, [33590]=39763, [33591]=39907, [33592]=37194, [33622]=30000, + [33640]=131408, [33782]=30000, [33791]=316, [33792]=25, [33803]=2, [33804]=15000, + [33805]=55765, [33820]=25490, [33823]=8, [33824]=8, [33825]=150, [33828]=91160, + [33829]=91160, [33830]=91160, [33831]=91160, [33844]=87, [33846]=463, [33854]=563, + [33855]=3750, [33856]=33, [33857]=113, [33865]=400, [33866]=550, [33867]=8, + [33869]=5000, [33870]=5000, [33871]=5000, [33872]=150, [33873]=5000, [33874]=150, + [33875]=5000, [33924]=125, [33925]=5000, [33926]=250, [33928]=250, [33934]=11500, + [33935]=11500, [33954]=120000, [33971]=61687, [34009]=134867, [34010]=41605, [34011]=86315, + [34012]=40460, [34017]=1, [34018]=3, [34019]=12, [34020]=25, [34021]=50, + [34022]=100, [34029]=8991, [34060]=350, [34061]=375, [34063]=12, [34064]=25, + [34065]=3, [34067]=50000, [34085]=1, [34086]=1, [34087]=1, [34099]=22500, + [34100]=22500, [34105]=37500, [34106]=37500, [34109]=625, [34113]=10000, [34114]=30000, + [34130]=95, [34164]=151025, [34165]=151593, [34166]=60256, [34167]=110128, [34168]=94746, + [34169]=62571, [34170]=63625, [34172]=40000, [34173]=40000, [34174]=40000, [34175]=40000, + [34176]=132215, [34177]=88355, [34178]=86443, [34179]=203059, [34180]=107273, [34181]=61526, + [34182]=187343, [34183]=188053, [34184]=102777, [34185]=97000, [34186]=94035, [34188]=81034, + [34189]=60256, [34190]=47535, [34192]=65575, [34193]=65575, [34194]=74834, [34195]=56371, + [34196]=109851, [34197]=147035, [34198]=184504, [34199]=148171, [34200]=40000, [34201]=40000, + [34202]=46315, [34203]=154493, [34204]=88355, [34205]=46684, [34206]=203059, [34207]=7500, + [34208]=73247, [34209]=60989, [34210]=48966, [34211]=81895, [34212]=82188, [34213]=60256, + [34214]=160693, [34215]=105203, [34216]=105613, [34218]=40000, [34220]=30000, [34221]=30000, + [34227]=6200, [34228]=97222, [34229]=97572, [34230]=60256, [34231]=101743, [34232]=65744, + [34233]=64043, [34234]=41378, [34240]=55395, [34241]=48771, [34242]=48952, [34243]=85819, + [34244]=61642, [34245]=61861, [34247]=207710, [34249]=250000, [34261]=1250, [34262]=1250, + [34319]=1250, [34329]=155299, [34330]=7500, [34331]=156503, [34332]=72630, [34333]=72901, + [34334]=182930, [34335]=163190, [34336]=163793, [34337]=205493, [34339]=49674, [34340]=49855, + [34341]=44050, [34342]=33477, [34343]=50392, [34344]=33715, [34345]=88649, [34346]=160109, + [34347]=120496, [34348]=112452, [34349]=36368, [34350]=45316, [34351]=37906, [34352]=44050, + [34353]=59014, [34354]=82761, [34355]=71337, [34356]=71600, [34357]=83681, [34358]=88355, + [34359]=88355, [34360]=88355, [34361]=60256, [34362]=60256, [34363]=60256, [34364]=60849, + [34365]=61077, [34366]=30655, [34367]=30772, [34369]=77508, [34370]=38900, [34371]=78093, + [34372]=39193, [34373]=94404, [34374]=47377, [34375]=95106, [34376]=47728, [34377]=111765, + [34378]=44050, [34379]=112584, [34380]=58294, [34410]=200, [34411]=160, [34412]=50, + [34413]=2500, [34416]=4005, [34417]=5007, [34418]=20060, [34419]=25914, [34421]=12089, + [34422]=14025, [34423]=10000, [34424]=10000, [34427]=72039, [34428]=72039, [34429]=72039, + [34430]=72039, [34440]=7000, [34469]=10000, [34470]=72039, [34471]=72039, [34472]=72039, + [34473]=72039, [34476]=100000, [34482]=30000, [34484]=2500, [34486]=2500, [34490]=40000, + [34491]=24000, [34504]=6250, [34535]=2500, [34537]=2500, [34538]=1500, [34539]=1500, + [34581]=12, [34582]=12, [34601]=61631, [34602]=29513, [34603]=36689, [34604]=118908, + [34605]=85715, [34606]=122873, [34607]=33469, [34608]=139999, [34609]=121317, [34610]=48709, + [34611]=122241, [34612]=64300, [34613]=46191, [34614]=74180, [34615]=86871, [34616]=124570, + [34622]=20000, [34625]=75000, [34664]=22500, [34665]=91803, [34666]=92128, [34667]=83638, + [34670]=86938, [34671]=87263, [34672]=87589, [34673]=109893, [34674]=66173, [34675]=75568, + [34676]=75846, [34677]=58188, [34678]=58188, [34679]=58188, [34680]=58188, [34689]=30000, + [34697]=16782, [34698]=25173, [34699]=83911, [34700]=29536, [34701]=41955, [34702]=25300, + [34703]=84659, [34704]=14846, [34705]=16782, [34706]=55035, [34707]=31466, [34708]=25173, + [34780]=250, [34783]=43988, [34788]=26567, [34789]=29536, [34790]=89207, [34791]=25173, + [34792]=25173, [34793]=16782, [34794]=104889, [34795]=43969, [34796]=41955, [34797]=104889, + [34798]=7102, [34799]=64477, [34807]=56310, [34808]=21492, [34809]=42681, [34810]=32238, + [34822]=250000, [34823]=180000, [34824]=150000, [34825]=110000, [34826]=150000, [34827]=112803, + [34828]=113219, [34829]=110000, [34831]=30000, [34832]=50, [34834]=5000, [34836]=2000, + [34837]=11300, [34838]=670, [34839]=15000, [34840]=20000, [34841]=4000, [34843]=15000, + [34845]=8750, [34846]=4762, [34847]=48800, [34848]=50000, [34850]=25, [34851]=50000, + [34852]=50000, [34853]=50000, [34854]=50000, [34855]=50000, [34856]=50000, [34857]=50000, + [34858]=50000, [34859]=42800, [34860]=17000, [34861]=137, [34872]=37500, [34907]=15000, + [35128]=11250, [35181]=46676, [35182]=58564, [35183]=58777, [35184]=72681, [35185]=84940, + [35186]=20000, [35187]=37500, [35189]=37500, [35190]=37500, [35191]=37500, [35192]=37500, + [35193]=37500, [35194]=37500, [35195]=37500, [35196]=37500, [35197]=37500, [35198]=35000, + [35199]=35000, [35200]=35000, [35201]=35000, [35202]=35000, [35203]=35000, [35204]=20000, + [35205]=20000, [35206]=20000, [35207]=20000, [35208]=20000, [35209]=20000, [35210]=20000, + [35211]=20000, [35212]=20000, [35213]=20000, [35214]=20000, [35215]=20000, [35216]=20000, + [35217]=20000, [35218]=20000, [35219]=20000, [35221]=2500, [35238]=125000, [35239]=125000, + [35240]=125000, [35241]=125000, [35242]=125000, [35243]=125000, [35244]=125000, [35245]=125000, + [35246]=125000, [35247]=125000, [35248]=125000, [35249]=125000, [35250]=125000, [35251]=125000, + [35252]=125000, [35253]=125000, [35254]=125000, [35255]=125000, [35256]=125000, [35257]=125000, + [35258]=125000, [35259]=125000, [35260]=125000, [35261]=125000, [35262]=125000, [35263]=125000, + [35264]=125000, [35265]=125000, [35266]=125000, [35267]=125000, [35268]=125000, [35269]=125000, + [35270]=125000, [35271]=125000, [35273]=20000, [35275]=4618, [35282]=60256, [35283]=60256, + [35284]=60256, [35285]=50, [35286]=100, [35287]=50, [35290]=60256, [35291]=60256, + [35292]=60256, [35294]=25000, [35295]=20000, [35296]=950, [35297]=30000, [35298]=10000, + [35299]=30000, [35300]=60000, [35301]=60000, [35302]=60000, [35303]=60000, [35304]=30000, + [35305]=30000, [35306]=30000, [35307]=30000, [35308]=20000, [35309]=30000, [35310]=17500, + [35311]=20000, [35314]=75, [35315]=30000, [35316]=30000, [35318]=30000, [35322]=30000, + [35323]=30000, [35325]=30000, [35328]=17391, [35329]=26181, [35330]=35039, [35331]=26377, + [35332]=35299, [35333]=26569, [35334]=35556, [35335]=17843, [35336]=26862, [35337]=35943, + [35338]=18036, [35339]=27152, [35340]=36334, [35341]=27345, [35342]=36591, [35343]=27540, + [35344]=25693, [35345]=17194, [35346]=34518, [35347]=34648, [35356]=22381, [35357]=33693, + [35358]=45087, [35359]=33937, [35360]=42171, [35361]=21167, [35362]=31872, [35363]=42655, + [35364]=32113, [35365]=55952, [35366]=21571, [35367]=32476, [35368]=43464, [35369]=32720, + [35370]=43790, [35371]=21974, [35372]=33083, [35373]=44273, [35374]=33327, [35375]=55952, + [35376]=53709, [35377]=27651, [35378]=37657, [35379]=50405, [35380]=38118, [35381]=50795, + [35382]=25492, [35383]=38385, [35384]=51376, [35385]=38850, [35386]=51761, [35387]=25978, + [35388]=47383, [35389]=52347, [35390]=39578, [35391]=52732, [35392]=26464, [35393]=40887, + [35394]=54712, [35395]=41363, [35402]=59477, [35403]=30023, [35404]=44864, [35405]=60154, + [35406]=45200, [35407]=60610, [35408]=30589, [35409]=46929, [35410]=62919, [35411]=47270, + [35412]=63369, [35413]=31980, [35414]=47777, [35415]=64052, [35416]=48114, [35464]=35165, + [35465]=26469, [35466]=26567, [35467]=35552, [35468]=22301, [35469]=44762, [35470]=33693, + [35471]=22543, [35472]=54295, [35473]=25302, [35474]=38100, [35475]=25498, [35476]=44702, + [35477]=30143, [35478]=45043, [35487]=60000, [35488]=60000, [35489]=60000, [35494]=32525, + [35495]=32647, [35496]=32772, [35497]=32238, [35498]=15000, [35500]=37500, [35501]=30000, + [35502]=37500, [35503]=30000, [35504]=2500, [35505]=37500, [35507]=50000, [35508]=50000, + [35509]=50000, [35511]=50000, [35514]=135496, [35516]=8750, [35562]=37, [35563]=12, + [35564]=4500, [35565]=12, [35566]=4500, [35581]=26127, [35582]=15000, [35691]=237, + [35693]=15000, [35694]=12000, [35695]=62500, [35696]=62500, [35697]=62500, [35698]=62500, + [35699]=62500, [35700]=15000, [35702]=15000, [35703]=15000, [35707]=30000, [35708]=30000, + [35720]=500, [35733]=60256, [35748]=25000, [35749]=25000, [35750]=25000, [35751]=25000, + [35752]=62500, [35753]=62500, [35754]=62500, [35755]=62500, [35756]=30000, [35758]=30000, + [35759]=30000, [35760]=60000, [35761]=60000, [35762]=15000, [35763]=15000, [35764]=15000, + [35765]=15000, [35766]=125000, [35767]=125000, [35768]=125000, [35769]=125000, [35945]=350, + [36017]=3894, [36018]=7054, [36019]=13854, [37148]=8750, [37503]=60000, [37504]=125000, + [37588]=275, [37606]=1, [37710]=5000, [37915]=1250, [37934]=50000, [38082]=100000, + [38089]=40000, [38090]=50000, [38225]=23750, [38276]=12556, [38277]=1824, [38278]=1664, + [38327]=1250, [38328]=1125, [38427]=280, [38428]=400, [38429]=200, [38430]=280, + [38431]=320, [38432]=375, [38466]=500, [38506]=25500, [38518]=37, [38628]=100000, + [40000]=130, [40001]=250, [40002]=500, [40003]=38530, [40061]=20000, [40065]=1755, + [40070]=7, [40071]=7, [40072]=8, [40073]=8, [40074]=8, [40075]=5, + [40076]=5, [40077]=4, [40078]=6, [40079]=6, [40080]=48330, [40082]=375, + [40083]=850, [40084]=500, [41011]=5500, [41013]=7, [41014]=7, [41016]=12, + [41017]=10, [41018]=7, [41019]=6, [41020]=5, [41021]=10, [41023]=16, + [41024]=25, [41025]=20, [41026]=30, [41029]=32, [41034]=48, [41035]=29, + [41040]=244, [41041]=133, [41042]=425, [41043]=204, [41044]=466, [41045]=284, + [41046]=202, [41047]=190, [41048]=298, [41049]=201, [41050]=527, [41051]=388, + [41054]=285, [41055]=215, [41056]=188, [41060]=10693, [41061]=31400, [41062]=14907, + [41063]=21117, [41070]=72, [41074]=32, [41075]=72, [41076]=198954, [41077]=101212, + [41078]=2500, [41079]=2500, [41080]=2500, [41081]=2500, [41082]=2500, [41083]=2500, + [41084]=2500, [41085]=2500, [41086]=5000, [41087]=2500, [41088]=2500, [41089]=2500, + [41090]=2500, [41091]=0, [41092]=0, [41093]=2500, [41094]=2500, [41095]=2500, + [41096]=25000, [41097]=2500, [41098]=2500, [41099]=25000, [41100]=25000, [41101]=25000, + [41102]=25000, [41103]=4, [41104]=6, [41105]=4, [41106]=4, [41107]=11, + [41108]=13, [41109]=24, [41110]=30, [41111]=26, [41112]=9, [41113]=14, + [41114]=13, [41115]=7, [41116]=6, [41117]=27, [41125]=13480, [41126]=10406, + [41127]=8024, [41128]=8478, [41134]=685, [41135]=814, [41136]=425, [41148]=566, + [41149]=418, [41150]=604, [41151]=40, [41152]=55, [41153]=24, [41154]=26, + [41155]=82, [41156]=27, [41157]=43, [41158]=3, [41159]=22, [41182]=70, + [41183]=47, [41184]=241, [41185]=102, [41186]=161, [41187]=193, [41188]=195, + [41189]=146, [41190]=241, [41191]=184, [41192]=290, [41193]=139, [41194]=228, + [41195]=200, [41204]=200000, [41205]=200000, [41206]=200000, [41207]=2500, [41210]=50000, + [41211]=50000, [41212]=50000, [41213]=50000, [41214]=50000, [41215]=50000, [41216]=50000, + [41217]=50000, [41218]=50000, [41219]=50000, [41220]=50000, [41221]=50000, [41222]=50000, + [41223]=50000, [41224]=50000, [41225]=50000, [41226]=50000, [41227]=50000, [41228]=50000, + [41229]=50000, [41230]=50000, [41231]=50000, [41232]=50000, [41233]=50000, [41234]=50000, + [41235]=50000, [41236]=50000, [41237]=50000, [41238]=50000, [41239]=50000, [41240]=50000, + [41241]=50000, [41242]=50000, [41243]=50000, [41244]=50000, [41245]=50000, [41246]=50000, + [41247]=50000, [41248]=50000, [41249]=50000, [41250]=50000, [41251]=50000, [41252]=50000, + [41253]=50000, [41254]=50000, [41255]=50000, [41256]=50000, [41257]=50000, [41258]=5000, + [41259]=5000, [41260]=50000, [41261]=50000, [41262]=50000, [41263]=50000, [41264]=50000, + [41265]=50000, [41266]=50000, [41267]=50000, [41268]=50000, [41269]=50000, [41270]=50000, + [41271]=50000, [41272]=50000, [41273]=50000, [41274]=50000, [41275]=50000, [41276]=50000, + [41277]=50000, [41278]=50000, [41279]=50000, [41280]=50000, [41281]=50000, [41282]=50000, + [41283]=50000, [41284]=50000, [41285]=50000, [41286]=50000, [41287]=50000, [41288]=50000, + [41289]=50000, [41290]=50000, [41291]=50000, [41292]=50000, [41293]=50000, [41295]=32377, + [41296]=11375, [41297]=14500, [41298]=7130, [41308]=442, [41309]=418, [41310]=188, + [41311]=505, [41312]=1206, [41313]=689, [41314]=788, [41315]=2068, [41316]=751, + [41317]=3988, [41318]=612, [41319]=100, [41320]=40, [41321]=600, [41322]=400, + [41323]=2671, [41324]=4628, [41325]=500, [41326]=500, [41327]=1500, [41328]=750, + [41329]=837, [41330]=5617, [41331]=600, [41332]=200, [41340]=4403, [41341]=1250, + [41342]=2231, [41343]=4964, [41344]=80, [41345]=15836, [41346]=2177, [41347]=2644, + [41348]=2644, [41349]=3845, [41350]=1000, [41351]=1000, [41352]=1000, [41399]=20000, + [41400]=12500, [41401]=45, [41402]=45, [41427]=73, [41451]=228, [41464]=41376, + [41465]=41376, [41466]=400, [41467]=400, [41468]=400, [41469]=1, [41480]=500, + [41481]=625, [41482]=750, [41483]=4, [41485]=12500, [41495]=10000, [41497]=0, + [41498]=0, [41500]=1, [41514]=500, [41515]=500, [41516]=500, [41517]=500, + [41518]=500, [41519]=500, [41520]=500, [41521]=500, [41522]=500, [41523]=500, + [41524]=500, [41525]=500, [41526]=500, [41527]=500, [41528]=500, [41529]=500, + [41530]=500, [41531]=500, [41532]=500, [41533]=500, [41534]=500, [41535]=500, + [41536]=500, [41537]=500, [41538]=500, [41539]=500, [41540]=500, [41558]=7157, + [41559]=5068, [41560]=4688, [41561]=3818, [41562]=10968, [41563]=4019, [41564]=11855, + [41565]=2982, [41566]=2203, [41567]=2098, [41568]=1802, [41569]=1385, [41570]=1974, + [41571]=5033, [41572]=1108, [41573]=2039, [41574]=1351, [41575]=722, [41576]=151, + [41577]=109, [41578]=2208, [41579]=723, [41580]=3071, [41581]=5508, [41601]=150, + [41602]=125, [41611]=0, [41613]=0, [41615]=0, [41617]=0, [41620]=0, + [41621]=1, [41622]=0, [41623]=1, [41624]=0, [41625]=1, [41626]=0, + [41627]=0, [41628]=1, [41629]=1, [41631]=1, [41633]=1, [41635]=1, + [41637]=1, [41642]=1, [41643]=1, [41644]=1, [41645]=1, [41646]=1, + [41651]=1, [41652]=1, [41653]=1, [41654]=1, [41655]=1, [41656]=1, + [41662]=1, [41663]=1, [41664]=1, [41665]=1, [41666]=1, [41667]=0, + [41668]=0, [41669]=0, [41670]=0, [41671]=250, [41672]=125, [41673]=300, + [41674]=300, [41675]=100, [41677]=100, [41684]=1, [41692]=3, [41696]=5000, + [41698]=8750, [41702]=20415, [41703]=20398, [41707]=8750, [41709]=3256, [41713]=2866, + [41714]=2499, [41715]=6873, [41717]=10155, [41718]=3058, [41719]=3188, [41720]=2689, + [41721]=4218, [41722]=1588, [41723]=5983, [41724]=3143, [41725]=4851, [41726]=2184, + [41727]=3188, [41732]=250, [41733]=375, [41734]=125, [41736]=500, [41746]=20, + [41778]=375, [41779]=375, [41780]=375, [41785]=4932, [41786]=3878, [41787]=4371, + [41789]=2049, [41790]=8335, [41793]=10863, [41794]=3006, [41798]=6746, [41801]=2851, + [41815]=2912, [41816]=8894, [41817]=5461, [41818]=12208, [41824]=89, [41826]=782, + [41827]=572, [41828]=822, [41830]=1187, [41831]=10933, [41832]=2087, [41833]=2758, + [41836]=3357, [41838]=1808, [41839]=3247, [41840]=1197, [41842]=2903, [41843]=1822, + [41844]=1218, [41845]=12406, [41846]=4482, [41847]=2916, [41848]=3082, [41849]=22, + [41850]=31, [41851]=3121, [41852]=2, [41854]=2589, [41855]=939, [41868]=1, + [41869]=1, [41878]=1, [41879]=1431, [41880]=2115, [41881]=1207, [41882]=1910, + [41886]=1, [41887]=1, [41888]=1, [41889]=1, [41890]=1, [41891]=1, + [41892]=1, [41893]=1, [41894]=1, [41898]=148, [41899]=89, [41905]=3, + [41910]=10201, [41911]=5738, [41912]=3738, [41916]=19802, [41917]=7278, [41919]=1132, + [41930]=200, [41931]=200, [41932]=200, [41933]=200, [41934]=200, [41935]=200, + [41936]=220, [41943]=1000, [41944]=300, [41946]=5738, [41947]=5738, [41952]=5738, + [41953]=5738, [41955]=5738, [41956]=5738, [41958]=5738, [41959]=5738, [41961]=375, + [41964]=3738, [41966]=3738, [41967]=3738, [41968]=3738, [41971]=3738, [41975]=3738, + [41977]=1, [41980]=3738, [41984]=2, [45001]=250, [46600]=871, [46602]=100000, + [47000]=27956, [47001]=25485, [47002]=37144, [47003]=17054, [47004]=17249, [47005]=17119, + [47006]=33848, [47007]=25778, [47008]=34946, [47009]=31856, [47010]=46430, [47011]=21317, + [47012]=21561, [47013]=21399, [47014]=42310, [47015]=32222, [47016]=53090, [47017]=52694, + [47018]=73501, [47019]=34861, [47020]=35527, [47021]=34995, [47022]=70519, [47023]=54930, + [47024]=53090, [47025]=52694, [47026]=73501, [47027]=34861, [47028]=35527, [47029]=34995, + [47030]=70519, [47031]=54930, [47032]=72691, [47033]=57682, [47034]=124328, [47035]=88690, + [47036]=57023, [47037]=72691, [47038]=57682, [47039]=124378, [47040]=88690, [47041]=57023, + [47042]=96532, [47043]=87876, [47044]=154709, [47045]=63399, [47046]=63873, [47047]=65069, + [47048]=128228, [47049]=88203, [47050]=60256, [47051]=96532, [47052]=87876, [47053]=154709, + [47054]=63399, [47055]=63873, [47056]=65069, [47057]=128228, [47058]=88203, [47059]=60256, + [47060]=78553, [47061]=74680, [47062]=159353, [47063]=103866, [47064]=53121, [47065]=115833, + [47066]=78353, [47067]=74680, [47068]=159353, [47069]=103866, [47070]=73394, [47071]=115833, + [47072]=78553, [47073]=74680, [47074]=159353, [47075]=103866, [47076]=53121, [47077]=115833, + [47078]=34199, [47079]=31989, [47080]=42817, [47081]=21490, [47082]=21653, [47083]=21735, + [47084]=42488, [47085]=32371, [47086]=52905, [47087]=53503, [47088]=71076, [47089]=35802, + [47090]=35136, [47091]=34868, [47092]=70809, [47093]=52509, [47094]=72712, [47095]=62368, + [47096]=131062, [47097]=96608, [47098]=60567, [47099]=92895, [47100]=84586, [47101]=165217, + [47102]=64848, [47103]=62645, [47104]=64608, [47105]=136392, [47106]=84913, [47107]=60256, + [47108]=98853, [47109]=88372, [47110]=171144, [47111]=142805, [47112]=87466, [47113]=115833, + [47114]=98380, [47115]=88578, [47116]=166096, [47117]=136681, [47118]=85319, [47119]=115833, + [47120]=39111, [47121]=39582, [47122]=51956, [47123]=25879, [47124]=25781, [47125]=25682, + [47126]=52346, [47127]=38550, [47128]=39189, [47129]=39582, [47130]=51956, [47131]=25879, + [47132]=25781, [47133]=25682, [47134]=52346, [47135]=38550, [47136]=68314, [47137]=68140, + [47138]=83355, [47139]=44904, [47140]=41356, [47141]=45065, [47142]=90773, [47143]=62552, + [47144]=68314, [47145]=68140, [47146]=83355, [47147]=44904, [47148]=41356, [47149]=45065, + [47150]=90773, [47151]=62552, [47152]=80445, [47153]=70861, [47154]=152080, [47155]=108479, + [47156]=70067, [47157]=80445, [47158]=70861, [47159]=152080, [47160]=108479, [47161]=70067, + [47162]=114849, [47163]=105109, [47164]=184892, [47165]=80127, [47166]=77491, [47167]=77446, + [47168]=152688, [47169]=105504, [47170]=60256, [47171]=114949, [47172]=105109, [47173]=184892, + [47174]=80127, [47175]=77491, [47176]=79846, [47177]=152688, [47178]=105504, [47179]=60256, + [47180]=145005, [47181]=136749, [47182]=252439, [47183]=207249, [47184]=132004, [47185]=116151, + [47186]=145005, [47187]=136749, [47188]=252439, [47189]=207249, [47190]=132004, [47191]=116151, + [47192]=145005, [47193]=135749, [47194]=252439, [47195]=207249, [47196]=132004, [47197]=116151, + [47198]=34832, [47199]=31863, [47200]=42319, [47201]=21486, [47202]=22550, [47203]=21324, + [47204]=46608, [47205]=33702, [47206]=54301, [47207]=54898, [47208]=72937, [47209]=37825, + [47210]=36070, [47211]=37691, [47212]=72669, [47213]=53904, [47214]=66033, [47215]=57478, + [47216]=125316, [47217]=89392, [47218]=57256, [47219]=101212, [47220]=92129, [47221]=162862, + [47222]=63886, [47223]=68189, [47224]=63646, [47225]=134468, [47226]=92448, [47227]=60256, + [47228]=84455, [47229]=77458, [47230]=133391, [47231]=113089, [47232]=72789, [47233]=115833, + [47234]=87538, [47235]=77308, [47236]=133391, [47237]=72789, [47238]=72789, [47239]=115833, + [47240]=33962, [47241]=34206, [47242]=45119, [47243]=22233, [47244]=22397, [47245]=22477, + [47246]=45448, [47247]=33472, [47248]=56125, [47249]=55728, [47250]=75629, [47251]=36884, + [47252]=37550, [47253]=37018, [47254]=74565, [47255]=56527, [47256]=66296, [47257]=57484, + [47258]=125329, [47259]=89411, [47260]=58149, [47261]=100120, [47262]=91139, [47263]=161108, + [47264]=63158, [47265]=67468, [47266]=62918, [47267]=133025, [47268]=91466, [47269]=60256, + [47270]=78553, [47271]=74680, [47272]=159353, [47273]=103866, [47274]=53121, [47275]=115833, + [47276]=26668, [47277]=26572, [47278]=35690, [47279]=17517, [47280]=17583, [47281]=17649, + [47282]=35821, [47283]=26181, [47284]=41521, [47285]=41598, [47286]=55790, [47287]=28213, + [47288]=27573, [47289]=28106, [47290]=55575, [47291]=45551, [47292]=54661, [47293]=46868, + [47294]=101407, [47295]=72615, [47296]=47396, [47297]=78676, [47298]=71623, [47299]=126586, + [47300]=53407, [47301]=53023, [47302]=53215, [47303]=104517, [47304]=71878, [47305]=60256, + [47306]=102824, [47307]=95310, [47308]=164411, [47309]=135014, [47310]=91153, [47311]=115833, + [47312]=102824, [47313]=95310, [47314]=164411, [47315]=135014, [47316]=91153, [47317]=115833, + [47318]=144936, [47319]=136758, [47320]=252458, [47321]=207238, [47322]=131959, [47323]=115833, + [47324]=131955, [47325]=113555, [47326]=216433, [47327]=183649, [47328]=110318, [47329]=115833, + [47330]=43686, [47331]=39824, [47332]=58048, [47333]=28716, [47334]=28818, [47335]=27777, + [47336]=52893, [47337]=42924, [47338]=43686, [47339]=39824, [47340]=58048, [47341]=28716, + [47342]=28818, [47343]=27777, [47344]=52893, [47345]=42924, [47346]=67638, [47347]=68134, + [47348]=89189, [47349]=45757, [47350]=44925, [47351]=45590, [47352]=90519, [47353]=67136, + [47354]=67638, [47355]=68134, [47356]=89189, [47357]=45757, [47358]=44925, [47359]=45590, + [47360]=90519, [47361]=67136, [47362]=84126, [47363]=72948, [47364]=160220, [47365]=113438, + [47366]=73225, [47367]=84126, [47368]=72948, [47369]=160215, [47370]=113438, [47371]=73225, + [47372]=124735, [47373]=113548, [47374]=200714, [47375]=84652, [47376]=84051, [47377]=84351, + [47378]=165729, [47379]=113957, [47380]=60256, [47381]=124735, [47382]=113548, [47383]=200714, + [47384]=84652, [47385]=84051, [47386]=84351, [47387]=165729, [47388]=113957, [47389]=60256, + [47390]=130344, [47391]=124144, [47392]=210871, [47393]=171410, [47394]=116980, [47395]=115833, + [47396]=129738, [47397]=121155, [47398]=208853, [47399]=171460, [47400]=116961, [47401]=115833, + [47402]=133605, [47403]=114741, [47404]=208893, [47405]=176678, [47406]=109466, [47407]=115833, + [47408]=150, [47409]=150, [47410]=600, [47411]=25, [47412]=600, [47413]=25, + [47414]=600, [47415]=25, [48298]=13360, [49000]=0, [49992]=75, [50010]=5, + [50016]=200, [50018]=0, [50020]=125, [50021]=125, [50024]=5342, [50025]=9634, + [50028]=2040, [50030]=3, [50031]=3, [50068]=1500, [50070]=5500, [50078]=5500, + [50081]=2500, [50094]=3, [50107]=0, [50108]=0, [50109]=0, [50110]=0, + [50111]=0, [50112]=0, [50113]=0, [50114]=0, [50115]=0, [50116]=0, + [50117]=0, [50118]=0, [50119]=0, [50120]=0, [50121]=0, [50122]=0, + [50123]=0, [50124]=0, [50125]=0, [50126]=0, [50127]=0, [50128]=0, + [50129]=0, [50130]=0, [50131]=0, [50132]=0, [50133]=0, [50134]=0, + [50135]=0, [50136]=0, [50137]=0, [50138]=0, [50139]=0, [50140]=0, + [50141]=0, [50142]=0, [50143]=0, [50144]=0, [50145]=0, [50146]=0, + [50147]=0, [50148]=0, [50149]=0, [50150]=0, [50151]=0, [50152]=0, + [50153]=0, [50154]=0, [50155]=0, [50156]=0, [50157]=0, [50158]=0, + [50159]=0, [50160]=0, [50161]=0, [50162]=0, [50163]=0, [50164]=0, + [50165]=0, [50166]=0, [50167]=0, [50168]=0, [50169]=0, [50170]=0, + [50171]=0, [50186]=140, [50187]=106, [50188]=12908, [50189]=38209, [50190]=18108, + [50191]=18294, [50192]=36425, [50193]=22865, [50231]=25, [50232]=0, [50234]=3750, + [50235]=3750, [50237]=750, [50238]=3750, [50256]=1, [50257]=790, [50298]=302, + [50315]=1, [50330]=0, [50331]=0, [50332]=0, [50333]=0, [50334]=0, + [50335]=0, [50336]=0, [50378]=0, [50391]=2500, [50417]=36762, [50418]=25745, + [50427]=25281, [50428]=15746, [50429]=40281, [50430]=13211, [50431]=11311, [50432]=12214, + [50440]=73, [50480]=2500, [50481]=2500, [50520]=0, [50521]=5, [50524]=6250, + [50525]=6250, [50527]=750, [50528]=500, [50529]=500, [50531]=500, [50708]=10000, + [50745]=0, [50746]=0, [50800]=2064, [51013]=250, [51014]=250, [51015]=250, + [51016]=250, [51017]=250, [51018]=250, [51019]=250, [51021]=1, [51023]=11458, + [51024]=3244, [51025]=13874, [51029]=0, [51030]=0, [51031]=0, [51032]=0, + [51033]=0, [51034]=0, [51035]=0, [51036]=0, [51037]=0, [51038]=0, + [51039]=0, [51040]=250, [51041]=250, [51042]=250, [51043]=40000, [51045]=12875, + [51046]=49103, [51047]=16852, [51048]=15965, [51050]=0, [51051]=0, [51052]=0, + [51058]=0, [51219]=935, [51224]=1192, [51230]=0, [51245]=8, [51252]=0, + [51256]=526, [51257]=0, [51258]=0, [51262]=300, [51263]=150, [51264]=435, + [51265]=50, [51268]=75, [51269]=200, [51270]=750, [51271]=1500, [51272]=3000, + [51273]=6000, [51274]=7500, [51275]=8750, [51276]=12000, [51277]=175, [51284]=385, + [51285]=25, [51286]=125, [51300]=2300, [51301]=1000, [51310]=1500, [51320]=113, + [51332]=238, [51400]=83, [51401]=83, [51403]=142, [51435]=87, [51600]=1250, + [51601]=1250, [51602]=1250, [51603]=1250, [51604]=10000, [51605]=1250, [51606]=1250, + [51607]=1250, [51608]=1250, [51609]=1250, [51610]=1250, [51611]=1250, [51612]=1250, + [51613]=1250, [51614]=1250, [51615]=1250, [51616]=1250, [51617]=1250, [51618]=1250, + [51619]=1250, [51620]=1250, [51621]=1250, [51622]=1250, [51623]=1250, [51624]=2500, + [51625]=1250, [51626]=1250, [51627]=1250, [51628]=2500, [51629]=1250, [51630]=1250, + [51631]=1250, [51632]=1250, [51633]=1250, [51634]=1250, [51635]=250, [51636]=250, + [51637]=750, [51638]=750, [51639]=1000, [51640]=1000, [51641]=1000, [51642]=1000, + [51643]=1000, [51644]=1000, [51645]=1000, [51646]=1000, [51660]=1250, [51705]=625, + [51716]=0, [51719]=3018, [51730]=13500, [51731]=16000, [51732]=16000, [51733]=16000, + [51734]=16000, [51735]=16000, [51736]=16000, [51737]=16000, [51738]=16000, [51740]=15750, + [51741]=8457, [51742]=4291, [51743]=8641, [51744]=3589, [51745]=6564, [51746]=10814, + [51747]=3034, [51748]=4196, [51749]=3783, [51752]=15471, [51753]=9871, [51754]=7461, + [51755]=13572, [51756]=5145, [51757]=9835, [51758]=867, [51759]=2244, [51760]=741, + [51761]=652, [51762]=1708, [51763]=2892, [51764]=10291, [51765]=2438, [51766]=7039, + [51767]=4966, [51768]=3983, [51769]=6361, [51770]=6864, [51771]=9311, [51772]=4370, + [51773]=4514, [51774]=6728, [51775]=9114, [51776]=9635, [51777]=6872, [51778]=10539, + [51779]=30246, [51780]=16295, [51781]=6672, [51782]=16336, [51783]=6474, [51784]=4421, + [51785]=6939, [51786]=13565, [51787]=8229, [51788]=8173, [51789]=6864, [51790]=1496, + [51791]=452, [51792]=108, [51793]=6241, [51794]=5053, [51795]=113, [51796]=14196, + [51797]=22768, [51798]=6381, [51799]=6368, [51800]=6468, [51801]=1250, [51802]=3191, + [51803]=2969, [51804]=2461, [51805]=1986, [51809]=1250, [51810]=512, [51812]=850, + [51816]=55, [51817]=38, [51818]=425, [51819]=136, [51820]=10, [51821]=75, + [51824]=212, [51825]=368, [51827]=14, [51828]=16, [51829]=22, [51832]=3013, + [51833]=3013, [51834]=3013, [51835]=0, [51841]=5, [51842]=2700, [51843]=2400, + [51844]=2600, [51848]=303, [51849]=891, [51850]=412, [51851]=923, [51856]=250, + [51861]=700, [51862]=1063, [51864]=925, [51865]=925, [51875]=4, [51876]=4, + [51877]=4, [51880]=4, [51881]=5, [51882]=5, [51885]=5, [51886]=5, + [51887]=3, [51888]=3, [51892]=52104, [51896]=1770, [51897]=1513, [53015]=250, + [53016]=5000, [53017]=25000, [54000]=5500, [54001]=5500, [54002]=5500, [54003]=5500, + [54004]=5500, [54005]=5500, [54006]=5500, [54007]=5500, [54008]=5500, [54009]=5, + [54010]=5, [55000]=1, [55001]=1, [55002]=1, [55003]=1, [55004]=73, + [55005]=1, [55006]=1, [55007]=1, [55008]=1, [55009]=1, [55010]=1, + [55011]=1, [55012]=1, [55013]=1, [55014]=1, [55015]=1, [55016]=1, + [55017]=1, [55018]=440, [55019]=1630, [55020]=1282, [55021]=16000, [55022]=6256, + [55023]=26250, [55024]=13750, [55025]=18755, [55026]=41125, [55027]=1, [55028]=81375, + [55029]=53500, [55030]=69500, [55031]=40000, [55032]=38375, [55033]=13750, [55034]=16000, + [55035]=9375, [55036]=11250, [55037]=35878, [55038]=28135, [55039]=27773, [55040]=44180, + [55041]=72231, [55042]=40000, [55043]=45500, [55044]=13125, [55045]=7500, [55046]=35, + [55047]=7500, [55048]=35, [55049]=10000, [55050]=12000, [55051]=2500, [55052]=28125, + [55053]=7500, [55054]=33250, [55055]=2500, [55056]=40500, [55057]=25000, [55058]=45000, + [55059]=25000, [55060]=146100, [55061]=2125, [55062]=1650, [55063]=1100, [55064]=3750, + [55065]=2500, [55066]=3750, [55067]=5625, [55068]=17750, [55069]=5500, [55070]=6250, + [55072]=875, [55073]=37500, [55074]=20000, [55075]=120000, [55076]=40000, [55077]=35000, + [55078]=86443, [55079]=168703, [55080]=333929, [55081]=87461, [55082]=79120, [55083]=143687, + [55084]=92993, [55085]=136392, [55086]=94367, [55087]=102106, [55088]=63613, [55089]=77413, + [55090]=155376, [55091]=115315, [55092]=109302, [55093]=108030, [55094]=115315, [55095]=92993, + [55096]=238821, [55097]=115200, [55098]=84051, [55099]=133025, [55100]=400399, [55101]=108030, + [55102]=168703, [55103]=89033, [55104]=108652, [55105]=101212, [55106]=63886, [55107]=64569, + [55108]=101139, [55109]=170523, [55110]=86380, [55111]=108030, [55112]=86443, [55113]=110120, + [55114]=93374, [55115]=346481, [55116]=428005, [55117]=101867, [55118]=110549, [55119]=123631, + [55120]=403815, [55121]=242782, [55122]=211382, [55123]=60256, [55124]=95283, [55125]=82155, + [55126]=113884, [55127]=420581, [55128]=274010, [55129]=278357, [55130]=71496, [55131]=93668, + [55132]=88986, [55133]=259732, [55134]=184104, [55135]=205863, [55141]=2500, [55142]=2000, + [55143]=2250, [55144]=1500, [55145]=3000, [55146]=3000, [55147]=3375, [55148]=3750, + [55150]=5, [55151]=10, [55152]=100, [55153]=200, [55154]=300, [55155]=50, + [55156]=5, [55157]=9, [55158]=92, [55159]=92, [55160]=114, [55161]=124, + [55162]=138, [55163]=133, [55164]=138, [55165]=904, [55166]=149, [55167]=158, + [55168]=168, [55169]=151, [55170]=173, [55171]=206, [55172]=206, [55173]=206, + [55174]=50, [55175]=1587, [55176]=354, [55177]=2775, [55178]=7450, [55179]=4000, + [55180]=7175, [55181]=2875, [55182]=8750, [55183]=2825, [55184]=5250, [55185]=6250, + [55186]=8875, [55187]=11375, [55188]=4700, [55189]=14500, [55190]=9750, [55191]=3625, + [55192]=5500, [55193]=7000, [55194]=7250, [55195]=8250, [55196]=9500, [55197]=10500, + [55198]=12500, [55199]=12775, [55200]=15250, [55201]=16000, [55202]=6500, [55203]=11250, + [55204]=13750, [55205]=15500, [55206]=22000, [55207]=27500, [55208]=21250, [55209]=31000, + [55210]=3050, [55211]=3000, [55212]=3250, [55213]=3250, [55214]=3500, [55215]=5250, + [55216]=7000, [55217]=5275, [55218]=7000, [55219]=3500, [55220]=5225, [55221]=6875, + [55222]=5375, [55223]=7750, [55224]=12500, [55225]=13750, [55226]=28000, [55227]=53750, + [55228]=13875, [55229]=28050, [55230]=55300, [55231]=12500, [55232]=15500, [55233]=30750, + [55234]=55625, [55235]=13850, [55236]=32000, [55237]=53125, [55238]=26250, [55239]=13750, + [55240]=18000, [55241]=22000, [55242]=16250, [55243]=10750, [55244]=19500, [55245]=25, + [55246]=125, [55247]=625, [55248]=1250, [55249]=600, [55250]=1000, [55251]=1000, + [55252]=10000, [55254]=3000, [55255]=3125, [55256]=3025, [55257]=3500, [55258]=3250, + [55259]=7000, [55260]=3150, [55261]=5500, [55262]=5725, [55263]=8250, [55264]=6375, + [55265]=7500, [55266]=8750, [55267]=11000, [55268]=6000, [55269]=6250, [55270]=10225, + [55271]=10000, [55272]=12250, [55273]=2500, [55274]=59817, [55275]=90541, [55276]=207784, + [55277]=239811, [55278]=57310, [55279]=91352, [55280]=119136, [55281]=74794, [55282]=74523, + [55283]=50652, [55284]=52408, [55285]=52452, [55286]=113642, [55316]=250, [55317]=275, + [55318]=300, [55319]=350, [55320]=400, [55321]=500, [55322]=550, [55323]=1000, + [55324]=750, [55325]=925, [55326]=1250, [55327]=1750, [55328]=1925, [55329]=200, + [55330]=256, [55331]=625, [55332]=650, [55333]=300, [55334]=450, [55335]=500, + [55336]=1050, [55337]=525, [55338]=1250, [55339]=1325, [55340]=275, [55341]=800, + [55346]=288870, [55347]=373805, [55348]=368866, [55349]=263570, [55350]=83527, [55351]=63605, + [55352]=108880, [55353]=63895, [55354]=75586, [55355]=69158, [55356]=71281, [55357]=91319, + [55359]=20000, [55360]=15000, [55361]=30000, [55362]=15625, [55363]=23625, [55364]=15000, + [55365]=30550, [55366]=22500, [55367]=15625, [55368]=35000, [55369]=808, [55370]=2500, + [55371]=391, [55372]=1228, [55373]=2500, [55374]=470, [55375]=500, [55376]=2384, + [55377]=675, [55378]=411, [55379]=2140, [55380]=929, [55381]=3179, [55382]=1708, + [55383]=2421, [55384]=3740, [55385]=2208, [55386]=2506, [55387]=3125, [55388]=6513, + [55389]=3371, [55470]=2078, [55471]=11683, [55472]=6072, [55473]=6904, [55474]=6650, + [55475]=3321, [55476]=3683, [55477]=8911, [55478]=7950, [55479]=6100, [55480]=12100, + [55481]=7525, [55494]=95653, [55495]=104132, [55496]=63044, [55497]=66865, [55498]=100628, + [55499]=47790, [55500]=66200, [55501]=45674, [55502]=71306, [55503]=44352, [55504]=106552, + [55505]=0, [55506]=72533, [55507]=115403, [55508]=102728, [55509]=850, [55510]=286672, + [55511]=286672, [55512]=119685, [55513]=216386, [55514]=1324, [55515]=112200, [55516]=65875, + [55517]=67775, [55518]=35000, [55519]=34231, [55520]=45131, [55521]=42475, [55522]=42126, + [55523]=37105, [55524]=47780, [55525]=43131, [55526]=44300, [55527]=36933, [55528]=49678, + [55529]=46555, [55530]=48150, [55531]=46833, [55532]=50627, [55533]=54601, [55534]=37105, + [55535]=2500, [55536]=2500, [55537]=2500, [55538]=2500, [55539]=2500, [55540]=2500, + [55541]=2500, [55542]=2500, [55543]=2500, [55544]=2500, [55545]=2500, [55546]=2500, + [55547]=2500, [55548]=2500, [55549]=2500, [55550]=2500, [55551]=2500, [55552]=100000, + [55553]=55906, [55554]=67797, [55555]=240627, [55556]=1, [55557]=1, [55558]=1, + [55559]=1, [55560]=1, [55561]=1, [55562]=1, [55563]=1, [55564]=1, + [55565]=1, [55566]=1, [55567]=1, [55568]=1, [55569]=1, [55570]=1, + [55571]=1, [55572]=1, [55573]=1, [55574]=1, [55575]=1, [55576]=1, + [55577]=1, [55580]=80000, [56000]=600, [56001]=700, [56002]=800, [56003]=1000, + [56004]=1000, [56005]=1000, [56006]=1000, [56007]=7000, [56008]=7000, [56009]=10000, + [56010]=10000, [56011]=2000, [56012]=2000, [56013]=2000, [56014]=10000, [56015]=10000, + [56016]=10000, [56017]=10000, [56018]=10000, [56019]=160, [56020]=120, [56021]=408, + [56022]=142, [56023]=2018, [56024]=2300, [56025]=2500, [56026]=5000, [56027]=1800, + [56028]=1500, [56029]=1100, [56030]=2400, [56031]=32267, [56032]=24618, [56033]=10000, + [56034]=2687, [56035]=6712, [56036]=6048, [56037]=245, [56038]=327, [56039]=336, + [56040]=509, [56041]=1501, [56042]=2149, [56043]=2251, [56044]=205, [56045]=642, + [56046]=1382, [56047]=2048, [56048]=1945, [56049]=2749, [56050]=2481, [56051]=3077, + [56052]=11538, [56053]=7169, [56054]=2499, [56055]=4308, [56056]=1000, [56057]=7000, + [56058]=1000, [56059]=31508, [56060]=27634, [56061]=16833, [56062]=25635, [56063]=26899, + [56065]=17740, [56066]=11875, [56067]=21508, [56068]=6308, [56069]=7058, [56070]=3285, + [56071]=28837, [56072]=19414, [56073]=8300, [56074]=500, [56075]=4000, [56076]=8000, + [56077]=8000, [56089]=3108, [56090]=5011, [56091]=809, [56092]=7067, [56093]=10233, + [56094]=10633, [56095]=8305, [56096]=8688, [56097]=1000, [56098]=1000, [56099]=1000, + [56112]=10000, [58000]=5800, [58001]=13071, [58002]=6403, [58003]=4156, [58004]=4620, + [58005]=3875, [58006]=3405, [58007]=13800, [58008]=3050, [58009]=8125, [58010]=7375, + [58011]=4050, [58012]=2500, [58013]=2300, [58014]=13474, [58015]=13095, [58016]=7777, + [58017]=10297, [58018]=10405, [58019]=13589, [58020]=4701, [58021]=2782, [58022]=4951, + [58023]=2608, [58024]=5031, [58025]=6375, [58026]=5864, [58027]=5000, [58028]=3418, + [58029]=3251, [58030]=5982, [58031]=2682, [58032]=3181, [58033]=3282, [58034]=4106, + [58035]=8063, [58036]=8289, [58037]=10455, [58038]=3972, [58039]=5049, [58040]=1228, + [58041]=1226, [58042]=823, [58043]=2555, [58044]=10727, [58045]=5062, [58046]=4099, + [58047]=6011, [58048]=8169, [58049]=2100, [58050]=1355, [58051]=1625, [58052]=1550, + [58053]=1800, [58054]=131, [58055]=1825, [58056]=5650, [58057]=5800, [58058]=21802, + [58059]=4050, [58061]=3150, [58062]=1450, [58063]=4830, [58064]=3120, [58065]=2606, + [58066]=2596, [58067]=700, [58068]=1055, [58069]=12815, [58070]=6572, [58071]=2756, + [58072]=3806, [58073]=9575, [58074]=4068, [58075]=3550, [58076]=2140, [58077]=3053, + [58078]=3803, [58079]=924, [58080]=26563, [58081]=24073, [58082]=9280, [58083]=20652, + [58084]=98, [58085]=102, [58086]=56, [58087]=80, [58088]=79853, [58089]=6481, + [58090]=1920, [58091]=1955, [58092]=8802, [58093]=3069, [58094]=33195, [58095]=12813, + [58096]=1130, [58097]=950, [58098]=10700, [58099]=3581, [58100]=1570, [58101]=6303, + [58102]=5150, [58103]=2131, [58104]=1627, [58105]=2062, [58106]=2375, [58107]=2313, + [58108]=1452, [58109]=1973, [58110]=2875, [58111]=4063, [58112]=2215, [58113]=1470, + [58114]=4006, [58115]=2670, [58116]=23043, [58117]=35068, [58118]=9050, [58119]=9056, + [58120]=573, [58121]=677, [58122]=1476, [58123]=2076, [58124]=394, [58125]=288, + [58126]=800, [58127]=3050, [58128]=6380, [58129]=2975, [58130]=12815, [58131]=2055, + [58132]=2820, [58133]=2719, [58134]=1643, [58135]=11827, [58136]=3558, [58137]=6849, + [58138]=4069, [58139]=6550, [58140]=3236, [58141]=4091, [58142]=4341, [58143]=9055, + [58144]=7330, [58145]=6352, [58146]=4401, [58147]=2818, [58148]=5802, [58149]=5427, + [58150]=14425, [58151]=4841, [58152]=3975, [58153]=3045, [58154]=9396, [58155]=12553, + [58156]=4618, [58157]=4105, [58158]=9749, [58159]=4853, [58160]=8152, [58161]=11550, + [58162]=4468, [58163]=14302, [58164]=4335, [58165]=3143, [58166]=4041, [58167]=10068, + [58168]=14678, [58169]=29068, [58170]=20546, [58171]=7199, [58172]=12566, [58173]=3703, + [58174]=2424, [58175]=4237, [58176]=4728, [58177]=6644, [58178]=3168, [58179]=3125, + [58180]=2101, [58181]=3322, [58182]=14327, [58183]=5920, [58184]=4878, [58185]=9605, + [58186]=4682, [58187]=4065, [58188]=27260, [58189]=11950, [58190]=4524, [58191]=5000, + [58192]=8072, [58193]=9706, [58194]=17618, [58195]=10070, [58196]=5368, [58197]=12572, + [58198]=13206, [58199]=31870, [58200]=8821, [58201]=5436, [58202]=3988, [58203]=9320, + [58204]=5130, [58205]=61942, [58206]=23129, [58207]=113631, [58208]=28812, [58209]=91453, + [58210]=18103, [58211]=21612, [58212]=42636, [58213]=63628, [58214]=110365, [58215]=24309, + [58216]=22560, [58217]=27500, [58218]=30864, [58219]=20595, [58220]=32185, [58221]=22500, + [58222]=34129, [58223]=39537, [58224]=24789, [58225]=41103, [58226]=25821, [58227]=28594, + [58228]=33119, [58229]=23903, [58230]=27159, [58231]=36784, [58232]=55420, [58233]=61529, + [58234]=12500, [58235]=12500, [58236]=12500, [58237]=34934, [58238]=21612, [58239]=875, + [58240]=6368, [58241]=26288, [58242]=100628, [58243]=68178, [58244]=35000, [58245]=1, + [58246]=100000, [58248]=210, [58249]=855, [58250]=8167, [58251]=20664, [58252]=27131, + [58253]=23404, [58254]=31878, [58255]=36623, [58256]=26018, [58257]=49028, [58258]=32899, + [58259]=52884, [58260]=500, [58261]=2145, [58262]=11330, [58263]=9096, [58264]=2649, + [58265]=2160, [58266]=2680, [58267]=2275, [58268]=12565, [58269]=13902, [58270]=15636, + [58271]=6872, [58272]=5646, [58273]=7818, [58274]=4750, [58275]=100000, [58276]=15296, + [58277]=10644, [58278]=657, [58279]=10548, [58280]=6830, [58281]=125, [58282]=7615, + [58283]=1649, [58284]=6844, [58285]=500, [58286]=14113, [58287]=2284, [58288]=5175, + [58289]=5567, [58290]=6130, [58291]=6130, [58292]=14485, [58293]=5726, [58294]=3591, + [58295]=6218, [58296]=7545, [58297]=2572, [58298]=2075, [58299]=3882, [58300]=6222, + [58301]=2200, [58302]=150, [58304]=12500, [58305]=12500, [58400]=5000, [58401]=5000, + [59290]=1, [59291]=1, [59292]=1, [59993]=205, [59994]=205, [60001]=50, + [60002]=3750, [60003]=206967, [60004]=63630, [60005]=63478, [60006]=64102, [60007]=39228, + [60008]=53979, [60009]=41488, [60010]=113420, [60112]=2534, [60116]=12746, [60117]=17841, + [60118]=14987, [60124]=11250, [60126]=5184, [60129]=6584, [60131]=18310, [60132]=11454, + [60138]=48761, [60152]=48761, [60153]=26487, [60161]=8416, [60164]=20112, [60165]=30670, + [60169]=14266, [60173]=2461, [60175]=2461, [60179]=4306, [60180]=7104, [60181]=3945, + [60182]=4106, [60183]=5041, [60187]=10433, [60198]=3481, [60199]=809, [60200]=2694, + [60201]=5342, [60209]=11604, [60210]=6902, [60211]=10127, [60213]=7504, [60214]=3704, + [60215]=5206, [60216]=1406, [60220]=17261, [60221]=7861, [60223]=13687, [60224]=7167, + [60228]=14267, [60229]=9503, [60233]=16204, [60234]=26104, [60237]=13107, [60239]=6912, + [60258]=10214, [60268]=18406, [60269]=8207, [60271]=250, [60272]=3407, [60274]=16204, + [60275]=15837, [60277]=497, [60278]=159, [60279]=401, [60283]=7804, [60284]=11907, + [60285]=3071, [60286]=4216, [60287]=11264, [60288]=17835, [60289]=24807, [60290]=24108, + [60291]=16674, [60292]=17081, [60293]=71207, [60294]=27106, [60300]=6078, [60307]=12437, + [60308]=2873, [60309]=8409, [60316]=7981, [60317]=18134, [60318]=4587, [60333]=68714, + [60334]=14867, [60338]=516, [60339]=515, [60346]=17538, [60347]=57897, [60348]=24734, + [60350]=8064, [60351]=7586, [60352]=14521, [60353]=11331, [60354]=7785, [60355]=17221, + [60356]=16623, [60357]=14614, [60358]=8081, [60359]=7608, [60360]=13792, [60361]=11332, + [60362]=8102, [60363]=17224, [60364]=16521, [60365]=14642, [60366]=8056, [60367]=8056, + [60368]=7216, [60369]=197, [60370]=840, [60371]=821, [60379]=701, [60380]=504, + [60383]=76836, [60384]=64167, [60385]=21938, [60386]=12739, [60387]=36107, [60388]=21468, + [60389]=71243, [60390]=47638, [60392]=3259, [60393]=1137, [60394]=12238, [60395]=7638, + [60400]=7267, [60405]=13667, [60406]=9368, [60407]=25685, [60408]=4536, [60409]=4296, + [60410]=15289, [60411]=16682, [60412]=2817, [60413]=18923, [60414]=17472, [60415]=4714, + [60416]=13936, [60417]=8647, [60418]=71924, [60419]=4219, [60420]=36347, [60421]=4641, + [60422]=75842, [60423]=14256, [60424]=2974, [60425]=6712, [60426]=22893, [60427]=1320, + [60429]=11458, [60430]=5221, [60431]=8647, [60432]=4625, [60433]=16987, [60434]=14476, + [60435]=16541, [60436]=20954, [60437]=36108, [60438]=5934, [60439]=10917, [60440]=24837, + [60441]=37064, [60442]=37108, [60446]=201, [60447]=431, [60448]=1207, [60449]=1138, + [60451]=14108, [60452]=13807, [60453]=15681, [60459]=42108, [60460]=50198, [60461]=50198, + [60463]=42108, [60464]=50198, [60465]=43681, [60470]=13745, [60475]=14933, [60480]=2708, + [60481]=6437, [60485]=4000, [60486]=25000, [60487]=21108, [60488]=21108, [60489]=21487, + [60490]=21533, [60491]=50, [60492]=738, [60493]=416, [60495]=305, [60497]=49105, + [60498]=90614, [60499]=45806, [60500]=12405, [60501]=20258, [60502]=16061, [60503]=39107, + [60504]=15988, [60505]=18302, [60506]=45811, [60518]=12001, [60522]=431, [60523]=431, + [60524]=431, [60525]=6483, [60527]=23078, [60528]=6308, [60529]=9580, [60530]=15410, + [60531]=8832, [60536]=38604, [60537]=162, [60538]=237, [60539]=13899, [60540]=10836, + [60541]=11494, [60542]=13105, [60543]=40111, [60544]=40111, [60545]=30842, [60546]=67480, + [60547]=12768, [60548]=8803, [60549]=13955, [60550]=12894, [60551]=25000, [60552]=49264, + [60553]=15184, [60554]=15877, [60555]=21266, [60556]=29284, [60557]=24267, [60558]=12207, + [60559]=10000, [60560]=56680, [60561]=33107, [60562]=16609, [60563]=17134, [60564]=11134, + [60565]=41134, [60566]=8707, [60567]=13457, [60568]=14969, [60569]=14715, [60570]=15000, + [60571]=15305, [60572]=12607, [60573]=19407, [60574]=26288, [60575]=26270, [60576]=10967, + [60577]=4101, [60578]=15745, [60579]=38722, [60580]=35871, [60581]=16822, [60582]=12597, + [60585]=85, [60587]=500, [60590]=3274, [60591]=4688, [60593]=109, [60596]=4608, + [60601]=18263, [60608]=23804, [60609]=19255, [60610]=12988, [60611]=23128, [60612]=23128, + [60613]=35628, [60614]=11181, [60615]=10431, [60616]=45906, [60617]=10395, [60618]=10395, + [60620]=25000, [60622]=20144, [60624]=42207, [60625]=11407, [60626]=11682, [60629]=48164, + [60631]=7955, [60632]=9342, [60636]=15877, [60639]=6054, [60646]=13752, [60647]=13752, + [60648]=13752, [60649]=13752, [60650]=214, [60654]=307, [60656]=10977, [60657]=12416, + [60659]=7321, [60665]=15908, [60666]=16807, [60667]=16855, [60668]=10000, [60672]=14476, + [60673]=7258, [60675]=10694, [60678]=422, [60679]=225, [60684]=291, [60685]=245, + [60686]=2264, [60690]=4255, [60691]=2039, [60692]=867, [60694]=23242, [60695]=16425, + [60696]=47361, [60699]=10863, [60700]=12328, [60701]=51878, [60702]=1483, [60703]=2958, + [60704]=982, [60705]=1053, [60706]=2156, [60708]=2863, [60709]=984, [60710]=1502, + [60715]=12206, [60717]=9342, [60718]=11782, [60719]=44129, [60724]=32230, [60725]=41480, + [60726]=26328, [60727]=28227, [60728]=18227, [60729]=19231, [60730]=19552, [60734]=42773, + [60735]=10699, [60736]=14935, [60739]=15892, [60742]=15305, [60743]=46189, [60745]=103, + [60746]=533, [60747]=473, [60748]=502, [60749]=497, [60750]=456, [60751]=488, + [60752]=3223, [60755]=102, [60757]=708, [60759]=10933, [60762]=6137, [60764]=20717, + [60765]=16308, [60770]=250, [60771]=7641, [60772]=11106, [60773]=38405, [60774]=10765, + [60775]=50000, [60776]=50000, [60777]=50000, [60778]=50000, [60779]=50000, [60780]=1500, + [60781]=1250, [60782]=49103, [60783]=7078, [60784]=34603, [60785]=10363, [60786]=9603, + [60787]=43568, [60788]=6303, [60789]=10363, [60790]=36478, [60791]=11503, [60792]=28628, + [60793]=38828, [60794]=26312, [60795]=16813, [60796]=45652, [60797]=24600, [60798]=41278, + [60799]=18363, [60800]=55377, [60801]=4578, [60802]=14053, [60803]=13578, [60804]=18906, + [60805]=46344, [60806]=63803, [60807]=24352, [60808]=77500, [60809]=25380, [60818]=16705, + [60819]=7605, [60820]=12656, [60821]=9805, [60826]=1560, [60827]=1103, [60828]=2088, + [60835]=7955, [60837]=4826, [60843]=1262, [60844]=1922, [60845]=2208, [60847]=10988, + [60853]=4779, [60854]=4779, [60855]=4779, [60859]=4779, [60860]=4779, [60863]=703, + [60864]=2875, [60865]=1608, [60872]=1367, [60873]=521, [60876]=798, [60879]=5622, + [60880]=8624, [60881]=3119, [60882]=23308, [60883]=10635, [60884]=35629, [60885]=49205, + [60887]=2560, [60888]=7015, [60889]=2182, [60896]=16882, [60899]=2407, [60900]=3678, + [60901]=6087, [60902]=31245, [60903]=13699, [60904]=9208, [60905]=62106, [60907]=13869, + [60908]=18709, [60909]=14309, [60910]=30953, [60915]=2500, [60916]=2500, [60917]=2500, + [60920]=2006, [60921]=2858, [60925]=10000, [60927]=4197, [60928]=4682, [60929]=4691, + [60931]=1823, [60933]=1208, [60934]=1128, [60938]=807, [60939]=2805, [60946]=11608, + [60947]=26815, [60950]=7605, [60951]=16705, [60952]=12866, [60953]=8769, [60954]=65, + [60955]=130, [60960]=7309, [60964]=10000, [60965]=10000, [60966]=10000, [60967]=10000, + [60968]=10000, [60969]=10000, [60970]=12094, [60972]=22311, [60973]=17038, [60974]=11834, + [60975]=19504, [60976]=250, [60977]=250, [60978]=250, [60979]=10000, [60980]=10000, + [60981]=10000, [60982]=1, [60983]=600, [60984]=25, [60985]=250, [60988]=100, + [60996]=13264, [60997]=13264, [61000]=1500, [61001]=60983, [61002]=25245, [61003]=18553, + [61004]=35489, [61005]=21342, [61006]=84864, [61007]=26486, [61009]=13899, [61010]=24789, + [61011]=66457, [61012]=12154, [61013]=20163, [61014]=20164, [61015]=21963, [61016]=71193, + [61017]=27854, [61018]=20133, [61019]=45973, [61020]=61942, [61021]=16599, [61022]=62752, + [61023]=31586, [61024]=28943, [61025]=36144, [61027]=19254, [61028]=37891, [61029]=13363, + [61030]=75765, [61031]=78443, [61032]=20974, [61033]=26178, [61034]=15564, [61035]=22512, + [61036]=18442, [61037]=24355, [61038]=20478, [61039]=23441, [61040]=13869, [61041]=18494, + [61042]=65512, [61043]=33278, [61044]=76123, [61045]=23933, [61046]=62207, [61047]=18973, + [61048]=12513, [61049]=111603, [61050]=19907, [61051]=25983, [61052]=28305, [61053]=30372, + [61054]=38144, [61055]=36268, [61056]=19004, [61057]=16734, [61058]=24327, [61059]=16782, + [61060]=23345, [61061]=25303, [61062]=12506, [61063]=61862, [61064]=7752, [61065]=13557, + [61068]=68207, [61069]=16982, [61070]=13982, [61074]=60202, [61076]=9144, [61077]=25361, + [61079]=17800, [61080]=2500, [61081]=10000, [61082]=8966, [61086]=17248, [61087]=68955, + [61088]=12208, [61091]=56233, [61092]=25000, [61095]=30000, [61100]=850, [61107]=0, + [61108]=0, [61109]=0, [61154]=6345, [61155]=5673, [61156]=3290, [61163]=7348, + [61164]=9840, [61165]=6965, [61166]=9008, [61173]=175, [61174]=800, [61175]=800, + [61176]=800, [61177]=25000, [61178]=35000, [61179]=35000, [61180]=35000, [61181]=1250, + [61182]=1000, [61183]=5000, [61185]=91806, [61186]=16311, [61187]=28964, [61188]=17952, + [61189]=50000, [61190]=50000, [61191]=50000, [61192]=50000, [61193]=63755, [61194]=86933, + [61195]=86119, [61196]=8750, [61197]=5000, [61198]=1000, [61199]=5000, [61200]=500, + [61201]=600, [61202]=700, [61203]=27106, [61204]=26328, [61205]=104060, [61206]=47864, + [61207]=40831, [61208]=196725, [61209]=81613, [61210]=32107, [61211]=46805, [61212]=29834, + [61213]=40964, [61214]=51208, [61216]=2000, [61217]=7500, [61218]=7500, [61219]=7500, + [61220]=7500, [61221]=7500, [61222]=7500, [61223]=7500, [61224]=1250, [61225]=1250, + [61226]=12500, [61227]=12500, [61228]=12500, [61229]=2000, [61230]=2000, [61235]=900, + [61236]=500, [61237]=145336, [61238]=95637, [61239]=68754, [61242]=4, [61243]=66853, + [61244]=27787, [61245]=19053, [61246]=25603, [61247]=100000, [61248]=66280, [61249]=28812, + [61250]=18790, [61251]=63903, [61252]=23788, [61253]=18103, [61254]=17851, [61255]=73599, + [61256]=61590, [61257]=24353, [61259]=2655, [61260]=32279, [61261]=22043, [61262]=53363, + [61263]=21618, [61264]=107903, [61265]=46528, [61266]=25595, [61267]=21565, [61268]=63579, + [61269]=31540, [61270]=44262, [61271]=33762, [61272]=32303, [61273]=27879, [61274]=22879, + [61275]=72979, [61276]=57779, [61277]=147303, [61278]=64729, [61279]=42725, [61280]=21050, + [61281]=27179, [61282]=13679, [61283]=15805, [61284]=45342, [61285]=34654, [61286]=52728, + [61287]=30279, [61288]=15045, [61289]=21854, [61290]=14580, [61291]=27230, [61292]=22829, + [61293]=23129, [61294]=43779, [61295]=70454, [61297]=25918, [61298]=15543, [61299]=46454, + [61300]=5608, [61301]=6272, [61302]=4922, [61303]=9106, [61304]=4982, [61305]=8367, + [61306]=7159, [61307]=18209, [61308]=30266, [61309]=7155, [61310]=4323, [61311]=4087, + [61312]=25000, [61313]=9103, [61314]=15390, [61315]=30629, [61316]=8576, [61317]=8576, + [61318]=34031, [61319]=9429, [61320]=17191, [61321]=7141, [61322]=8654, [61323]=8329, + [61324]=9215, [61325]=18864, [61326]=15213, [61327]=12291, [61328]=33379, [61329]=13379, + [61330]=23153, [61331]=8608, [61332]=6402, [61333]=25138, [61334]=8153, [61335]=17241, + [61336]=4677, [61337]=2500, [61338]=30187, [61339]=8187, [61343]=7601, [61345]=4108, + [61346]=14109, [61348]=6154, [61349]=18766, [61353]=5988, [61354]=4218, [61355]=6782, + [61356]=54839, [61357]=20782, [61358]=40866, [61359]=21896, [61360]=41786, [61361]=30866, + [61362]=16635, [61363]=17694, [61364]=42531, [61365]=34688, [61366]=17608, [61367]=24309, + [61370]=150, [61371]=200, [61372]=200, [61373]=200, [61374]=150, [61375]=200, + [61376]=2981, [61377]=3761, [61378]=5899, [61379]=3042, [61383]=6788, [61384]=2508, + [61385]=4108, [61386]=404, [61389]=218, [61391]=21899, [61393]=7500, [61396]=176, + [61398]=108, [61399]=168, [61404]=203, [61405]=203, [61406]=17304, [61407]=900, + [61410]=5892, [61411]=56739, [61419]=3501, [61420]=6897, [61422]=9758, [61423]=850, + [61424]=25000, [61425]=25000, [61426]=25000, [61427]=25000, [61428]=25000, [61429]=25000, + [61430]=25000, [61431]=25000, [61432]=25000, [61433]=25000, [61434]=25000, [61435]=25000, + [61437]=7500, [61438]=7500, [61439]=15408, [61440]=10861, [61443]=26288, [61447]=28233, + [61448]=153401, [61449]=19641, [61450]=73877, [61451]=73973, [61452]=74690, [61453]=115279, + [61454]=147878, [61455]=42902, [61456]=25633, [61467]=15873, [61468]=7208, [61471]=8627, + [61472]=12809, [61475]=6844, [61476]=5931, [61478]=6851, [61481]=6277, [61483]=13896, + [61486]=3866, [61487]=5118, [61489]=10264, [61490]=6988, [61492]=4182, [61493]=2876, + [61497]=6782, [61498]=4218, [61499]=5988, [61500]=1501, [61501]=450, [61502]=1575, + [61503]=460, [61504]=878, [61505]=1578, [61506]=4623, [61507]=3925, [61508]=4138, + [61509]=25253, [61510]=11421, [61511]=7500, [61512]=5423, [61513]=6453, [61514]=8618, + [61515]=14577, [61516]=20324, [61517]=10000, [61518]=10221, [61519]=15796, [61520]=7500, + [61521]=13653, [61522]=89276, [61523]=150187, [61524]=50179, [61525]=37783, [61526]=98056, + [61527]=12500, [61528]=12322, [61529]=34185, [61530]=9144, [61531]=11000, [61532]=59953, + [61533]=29183, [61534]=51688, [61535]=14790, [61536]=5555, [61537]=34476, [61538]=43143, + [61539]=18029, [61540]=23884, [61541]=62709, [61542]=63538, [61543]=20292, [61544]=12556, + [61545]=7556, [61546]=24425, [61547]=18876, [61548]=18629, [61549]=1250, [61550]=16650, + [61551]=62187, [61552]=11393, [61553]=4450, [61554]=645, [61555]=2038, [61562]=625, + [61563]=14718, [61564]=49733, [61565]=8604, [61566]=72534, [61567]=88041, [61568]=14932, + [61569]=54398, [61570]=16357, [61571]=58340, [61572]=24170, [61573]=6057, [61574]=2499, + [61575]=4492, [61576]=2921, [61577]=23032, [61578]=9893, [61579]=7452, [61580]=7583, + [61581]=8278, [61582]=4451, [61583]=5555, [61584]=4166, [61585]=4001, [61586]=16666, + [61587]=15745, [61588]=33004, [61589]=12607, [61590]=16692, [61591]=28567, [61592]=20286, + [61593]=20871, [61594]=13888, [61595]=92495, [61596]=29323, [61597]=13578, [61598]=4871, + [61601]=16933, [61602]=5097, [61603]=7608, [61604]=7283, [61605]=7406, [61608]=11961, + [61609]=12933, [61610]=15558, [61611]=6386, [61612]=27500, [61613]=18870, [61614]=11514, + [61615]=29274, [61616]=7366, [61617]=17508, [61619]=24692, [61620]=12637, [61621]=31758, + [61622]=8864, [61623]=3208, [61627]=17966, [61628]=3581, [61629]=12209, [61630]=3618, + [61633]=16408, [61634]=5634, [61645]=36108, [61646]=24688, [61647]=14975, [61648]=8860, + [61649]=18710, [61650]=140033, [61651]=110361, [61660]=17495, [61661]=15837, [61662]=6861, + [61667]=29952, [61668]=5960, [61669]=21090, [61670]=21277, [61671]=6523, [61672]=4845, + [61673]=600, [61675]=600, [61676]=500, [61677]=3088, [61678]=2785, [61679]=6477, + [61680]=378, [61681]=298, [61682]=308, [61683]=5235, [61684]=313, [61685]=283, + [61686]=358, [61687]=608, [61688]=6098, [61689]=349, [61690]=10359, [61692]=396, + [61698]=14778, [61699]=14651, [61700]=14452, [61701]=18952, [61703]=12249, [61705]=8905, + [61707]=150, [61708]=23281, [61709]=17705, [61710]=38291, [61717]=64108, [61723]=4488, + [61725]=3815, [61726]=3853, [61727]=4781, [61729]=19271, [61730]=14131, [61732]=50000, + [61733]=50000, [61734]=5601, [61735]=28905, [61736]=6108, [61737]=12778, [61738]=1500, + [61739]=1500, [61740]=91205, [61751]=1, [61752]=1, [61753]=23388, [61754]=51204, + [61755]=71593, [61757]=20188, [61758]=26418, [61762]=4608, [61765]=14758, [61767]=10468, + [61773]=1, [61779]=10, [61780]=10, [61781]=100, [61782]=150, [61783]=200, + [61784]=200, [61785]=300, [61786]=75, [61787]=125, [61788]=300, [61789]=500, + [61790]=1250, [61791]=3750, [61792]=37500, [61799]=25000, [61802]=200, [61803]=12500, + [61805]=12500, [61806]=12500, [61807]=12500, [61808]=12500, [61809]=12500, [61810]=650, + [61816]=86504, [61818]=8000, [61819]=0, [61820]=0, [62000]=5500, [62001]=5500, + [62002]=10000, [62003]=30000, [62004]=30000, [62005]=30000, [62006]=30000, [62007]=30000, + [62008]=1831, [65000]=26973, [65001]=23154, [65002]=22563, [65003]=34934, [65004]=99743, + [65005]=28816, [65006]=52973, [65007]=5326, [65008]=87953, [65009]=4792, [65010]=195, + [65011]=1114, [65012]=2752, [65013]=9306, [65014]=32182, [65015]=19678, [65016]=100, + [65017]=250, [65018]=300, [65019]=17254, [65021]=50109, [65022]=13245, [65023]=8893, + [65024]=43089, [65025]=43096, [65026]=32076, [65027]=31814, [65028]=404, [65029]=11750, + [65030]=3253, [65031]=5000, [65032]=300, [65035]=32178, [65036]=60404, [65037]=60299, + [65038]=25742, [65039]=61151, [65100]=55305, [65101]=28031, [65102]=43440, [65103]=96056, + [65104]=43440, [65105]=28031, [68068]=1, [68069]=1, [68070]=0, [69000]=1500, + [69001]=1500, [69002]=1500, [69003]=1500, [69100]=0, [69101]=0, [69102]=0, + [69103]=0, [69104]=1, [69105]=1, [69106]=1, [69109]=30000, [69110]=30000, + [69111]=30000, [69112]=30000, [69113]=10000, [69114]=10000, [69115]=10000, [69116]=10000, + [69117]=0, [69118]=0, [69119]=0, [69120]=0, [69121]=0, [69122]=0, + [69123]=0, [69124]=0, [69125]=0, [69126]=55, [69127]=0, [69128]=0, + [69129]=0, [69130]=0, [69131]=0, [69132]=0, [69133]=12500, [69134]=12500, + [69135]=12500, [69136]=12500, [69137]=12500, [69138]=12500, [69139]=12500, [69140]=12500, + [69141]=12500, [69142]=12500, [69143]=12500, [69144]=12500, [69145]=12500, [69146]=0, + [69147]=0, [69148]=0, [69149]=0, [69150]=0, [69151]=0, [69152]=0, + [69153]=5000, [69154]=5000, [69155]=5000, [69156]=5000, [69157]=5000, [69158]=5000, + [69159]=5000, [69160]=5000, [69161]=5000, [69162]=5000, [69163]=5000, [69164]=5000, + [69165]=5000, [70000]=25000, [70001]=25000, [70002]=25000, [70003]=1253, [70004]=1331, + [70005]=1846, [70006]=1843, [70008]=1648, [70009]=3409, [70010]=5912, [70011]=5842, + [70012]=3187, [70014]=1781, [70016]=2500, [70032]=935, [70033]=1025, [70034]=1030, + [70036]=1425, [70037]=2045, [70045]=4515, [70046]=915, [70047]=2846, [70048]=909, + [70049]=1, [70050]=29712, [70051]=18033, [70052]=14586, [70053]=34212, [70054]=15684, + [70055]=27511, [70056]=24512, [70057]=24512, [70058]=27511, [70059]=15684, [70060]=34212, + [70062]=18033, [70063]=14586, [70064]=29712, [70070]=2551, [70101]=12500, [70102]=12500, + [70103]=625, [70104]=1400, [70105]=1800, [70106]=2400, [70107]=2200, [70108]=2350, + [70109]=2700, [70110]=450, [70111]=525, [70112]=525, [70113]=600, [70114]=650, + [70115]=600, [70116]=600, [70117]=200, [70118]=600, [70119]=700, [70120]=800, + [70125]=1400, [70126]=125, [70127]=1000, [70128]=1100, [70129]=1800, [70138]=1100, + [70141]=125, [70142]=150, [70143]=150, [70144]=175, [70145]=175, [70146]=225, + [70147]=250, [70148]=500, [70149]=330, [70150]=75, [70151]=400, [70152]=150, + [70153]=300, [70154]=375, [70155]=150, [70159]=650, [70160]=1450, [70161]=700, + [70162]=2200, [70163]=2000, [70164]=750, [70166]=8500, [70167]=1400, [70168]=500, + [70169]=1250, [70170]=7500, [70171]=7500, [70172]=7500, [70173]=7500, [70174]=7500, + [70175]=7500, [70176]=5500, [70177]=5500, [70178]=5500, [70179]=5000, [70180]=2850, + [70181]=2500, [70182]=5000, [70183]=6250, [70184]=3250, [70185]=200, [70186]=625, + [70187]=500, [70188]=215, [70189]=500, [70190]=950, [70191]=1400, [70192]=550, + [70193]=1200, [70194]=1200, [70195]=1050, [70196]=1400, [70197]=1250, [70198]=12500, + [70199]=650, [70200]=1800, [70201]=13500, [70202]=13500, [70203]=2000, [70204]=400, + [70205]=1250, [70206]=1200, [70207]=4800, [70208]=485, [70209]=12500, [70210]=11500, + [70211]=22500, [70212]=7250, [70213]=13500, [70214]=12500, [70215]=15250, [70216]=7500, + [70217]=10000, [70218]=7250, [70219]=17500, [70220]=5000, [70221]=4500, [70222]=8500, + [70223]=8500, [70224]=689, [70225]=138, [70226]=25000, [70239]=598, [70240]=515, + [70241]=50, [70597]=34199, [70598]=31989, [70599]=42817, [70600]=21490, [70601]=21653, + [70602]=21735, [70603]=42488, [70604]=32356, [70613]=52905, [70614]=53503, [70615]=71076, + [70616]=35802, [70617]=35136, [70618]=34868, [70619]=70809, [70620]=52509, [70626]=72712, + [70627]=62368, [70628]=131062, [70629]=96608, [70630]=60567, [70640]=92895, [70641]=84586, + [70642]=165217, [70643]=64848, [70644]=62645, [70645]=64608, [70646]=136392, [70647]=84913, + [70648]=60256, [70732]=66033, [70733]=57478, [70734]=125316, [70735]=89392, [70736]=57257, + [70739]=161108, [70744]=91466, [70783]=91139, [80000]=63250, [80001]=63250, [80003]=63250, + [80006]=1500, [80007]=63250, [80010]=1000, [80060]=0, [80101]=1, [80102]=1, + [80104]=10, [80105]=1, [80106]=1, [80107]=1, [80108]=3, [80109]=3, + [80110]=3, [80111]=3, [80113]=5, [80115]=3, [80116]=3, [80117]=3, + [80118]=3, [80120]=4, [80121]=4, [80122]=5, [80123]=5, [80124]=5, + [80125]=5, [80126]=59, [80127]=53, [80128]=78, [80129]=78, [80131]=51, + [80132]=45, [80133]=51, [80156]=1, [80157]=5, [80158]=6, [80159]=4, + [80160]=6, [80161]=5, [80162]=6, [80163]=5, [80164]=6, [80165]=2, + [80166]=3, [80167]=1, [80168]=1, [80202]=1, [80203]=1, [80204]=3, + [80205]=3, [80206]=1, [80207]=1, [80208]=1, [80211]=5, [80212]=3, + [80213]=3, [80214]=3, [80215]=3, [80217]=3, [80218]=3, [80219]=4, + [80220]=4, [80222]=1768, [80223]=1825, [80234]=2, [80250]=1, [80251]=1, + [80300]=25000, [80301]=20000, [80304]=20000, [80305]=10000, [80308]=15000, [80312]=15000, + [80316]=15000, [80320]=10000, [80400]=1500, [80433]=0, [80438]=0, [80446]=0, + [80457]=0, [80458]=0, [80459]=0, [80460]=20000, [80461]=20000, [80462]=20000, + [80463]=2500, [80464]=2277, [80465]=2277, [80466]=2277, [80500]=125, [80501]=100, + [80502]=150, [80503]=100, [80504]=150, [80505]=2068, [80506]=8761, [80507]=10310, + [80508]=10239, [80509]=10281, [80510]=10214, [80511]=10295, [80512]=10310, [80513]=10236, + [80514]=10217, [80515]=10212, [80516]=10296, [80517]=10299, [80518]=10242, [80519]=10304, + [80520]=10216, [80521]=10273, [80522]=10306, [80523]=10237, [80524]=10284, [80525]=10216, + [80526]=10269, [80527]=5638, [80528]=23714, [80529]=23497, [80530]=23542, [80531]=33912, + [80532]=23424, [80533]=23543, [80534]=33972, [80535]=23581, [80536]=23610, [80537]=33978, + [80538]=33941, [80539]=17916, [80540]=17922, [80541]=33913, [80542]=33897, [80543]=23506, + [80544]=18871, [80545]=18863, [80546]=21783, [80547]=33972, [80600]=125, [80601]=100, + [80602]=150, [80603]=100, [80604]=150, [80605]=2068, [80606]=8761, [80607]=10310, + [80608]=10239, [80609]=10281, [80610]=10214, [80611]=10295, [80612]=10310, [80613]=10236, + [80614]=10217, [80615]=10212, [80616]=10296, [80617]=10299, [80618]=10242, [80619]=10304, + [80620]=10216, [80621]=10273, [80622]=10306, [80623]=10237, [80624]=10284, [80625]=10216, + [80626]=10269, [80627]=5638, [80628]=23714, [80629]=23497, [80630]=23542, [80631]=33912, + [80632]=23424, [80633]=23543, [80634]=33972, [80635]=23581, [80636]=23610, [80637]=33978, + [80638]=33941, [80639]=17916, [80640]=17922, [80641]=33913, [80642]=33897, [80643]=23506, + [80644]=18871, [80645]=18863, [80646]=21783, [80649]=2502, [80650]=0, [80651]=0, + [80652]=0, [80653]=0, [80654]=0, [80655]=0, [80656]=0, [80657]=0, + [80658]=0, [80659]=0, [80660]=0, [80661]=0, [80662]=0, [80663]=0, + [80664]=0, [80665]=0, [80670]=8235, [80671]=29105, [80672]=10382, [80673]=16618, + [80674]=10667, [80700]=1207, [80701]=560, [80702]=359, [80703]=311, [80704]=622, + [80705]=1264, [80706]=611, [80707]=754, [80708]=905, [80709]=2381, [80710]=219, + [80711]=687, [80712]=927, [80713]=1134, [80714]=867, [80715]=782, [80716]=4465, + [80717]=1614, [80718]=1821, [80719]=1672, [80720]=1270, [80721]=751, [80722]=1962, + [80723]=2596, [80724]=1472, [80725]=874, [80726]=1359, [80727]=2347, [80728]=2582, + [80729]=1272, [80730]=1293, [80731]=2954, [80732]=1497, [80733]=7864, [80734]=4787, + [80735]=1243, [80736]=3765, [80737]=3391, [80738]=2581, [80739]=7753, [80740]=6984, + [80741]=2067, [80742]=2475, [80743]=1543, [80744]=14472, [80745]=12270, [80746]=12836, + [80747]=5762, [80748]=5863, [80749]=1866, [80750]=8369, [80751]=8868, [80752]=2430, + [80753]=2382, [80754]=3363, [80755]=1777, [80756]=2820, [80758]=6244, [80759]=4085, + [80760]=7864, [80761]=4536, [80763]=15289, [80765]=2817, [80766]=4714, [80767]=13936, + [80769]=5221, [80770]=4219, [80771]=4489, [80772]=10320, [80773]=4641, [80774]=2865, + [80775]=14691, [80776]=6712, [80777]=2974, [80778]=2144, [80779]=8372, [80780]=3837, + [80781]=18226, [80782]=3037, [80783]=6003, [80784]=2189, [80785]=8632, [80786]=2675, + [80787]=2687, [80789]=1874, [80790]=3512, [80791]=3342, [80792]=3402, [80793]=4470, + [80794]=1939, [80795]=7418, [80796]=401, [80797]=1336, [80798]=2239, [80799]=2724, + [80801]=6224, [80802]=956, [80803]=1179, [80804]=3276, [80805]=6986, [80806]=1163, + [80807]=789, [80809]=1855, [80810]=1352, [80811]=814, [80812]=13440, [80813]=75, + [80814]=25, [80815]=1145, [80816]=74, [80817]=179, [80818]=41, [80819]=104, + [80820]=95, [80821]=80, [80822]=451, [80823]=2693, [80824]=2277, [80825]=4189, + [80826]=2744, [80827]=552, [80828]=685, [80829]=1278, [80830]=869, [80831]=305, + [80832]=604, [80833]=454, [80834]=1528, [80835]=578, [80836]=2326, [80837]=1157, + [80838]=1157, [80839]=465, [80840]=1358, [80841]=3702, [80842]=5237, [80843]=4098, + [80844]=3043, [80845]=1896, [80846]=1974, [80847]=1981, [80848]=1866, [80849]=4743, + [80850]=4121, [80851]=10416, [80852]=4286, [80853]=7844, [80854]=2843, [80860]=891, + [80861]=628, [80866]=0, [80876]=5, [80878]=1500, [81003]=18613, [81004]=26686, + [81005]=484, [81006]=489, [81007]=163, [81008]=550, [81009]=3500, [81010]=8000, + [81011]=12500, [81012]=100, [81014]=1531, [81015]=1707, [81016]=7836, [81017]=3364, + [81018]=13143, [81019]=3785, [81020]=305, [81021]=226, [81024]=2500, [81025]=2500, + [81030]=92, [81031]=108, [81032]=20, [81050]=3014, [81051]=2762, [81052]=6764, + [81053]=2762, [81054]=3183, [81055]=4455, [81056]=5262, [81057]=15262, [81059]=1500, + [81060]=180744, [81061]=7089, [81062]=11841, [81063]=10989, [81064]=14283, [81065]=10187, + [81066]=20195, [81080]=324, [81089]=15000, [81092]=214, [81093]=92, [81094]=100, + [81095]=1, [81101]=0, [81110]=2632, [81111]=0, [81112]=0, [81113]=1632, + [81114]=1632, [81122]=3956, [81123]=5337, [81124]=5024, [81125]=3918, [81131]=5024, + [81160]=10000, [81167]=51201, [81182]=0, [81183]=13750, [81185]=0, [81186]=0, + [81187]=1750, [81190]=0, [81191]=0, [81192]=0, [81193]=0, [81194]=0, + [81195]=0, [81196]=8750, [81198]=0, [81199]=18641, [81211]=284, [81212]=579, + [81213]=811, [81214]=459, [81215]=886, [81216]=441, [81217]=558, [81218]=21353, + [81219]=16228, [81220]=9403, [81221]=12300, [81222]=9403, [81223]=50867, [81224]=0, + [81225]=0, [81226]=0, [81233]=0, [81237]=0, [81241]=0, [81243]=2500, + [81244]=0, [81245]=0, [81246]=0, [81247]=0, [81248]=1500, [81250]=0, + [81251]=0, [81252]=0, [81253]=0, [81254]=1500, [81257]=2500, [81260]=21786, + [81261]=6497, [81262]=6541, [81263]=12341, [81264]=10201, [81265]=5496, [81266]=1484, + [81267]=239, [81268]=1243, [81269]=844, [81270]=702, [81271]=16543, [81272]=19013, + [81276]=1, [81283]=1500, [81288]=13658, [81289]=15000, [81290]=5692, [81294]=112, + [81295]=108, [81296]=37, [81297]=50, [81298]=5000, [81299]=100, [81300]=100, + [81301]=100, [81302]=100, [81303]=100, [81304]=2000, [81305]=87500, [81306]=43894, + [81307]=19513, [81308]=18750, [81309]=43894, [81310]=40000, [81311]=31250, [81316]=2706, + [81317]=1183, [81319]=6332, [81320]=6738, [81321]=5622, [81325]=31255, [81328]=11294, + [81329]=16822, [81330]=12833, [81339]=42113, [81340]=100, [81341]=2606, [81342]=3516, + [81349]=1500, [81350]=19201, [81351]=24133, [81352]=7622, [81353]=7622, [81354]=8123, + [81355]=16422, [81356]=2533, [81357]=12400, [81360]=41255, [81361]=21422, [81362]=12544, + [81363]=61222, [81364]=10611, [81365]=26811, [81366]=24511, [81367]=24566, [81368]=17487, + [81369]=97271, [81370]=13812, [81371]=23954, [81372]=46635, [81373]=12652, [81374]=28173, + [81375]=67231, [81376]=13841, [81377]=15128, [81378]=13527, [81379]=62841, [81380]=13764, + [81381]=12933, [81382]=7424, [81383]=34764, [81384]=10127, [81402]=2114, [81411]=4591, + [81416]=2000, [81417]=2000, [81418]=2000, [81500]=15563, [81501]=15563, [81502]=15563, + [81503]=15563, [82950]=25821, [82951]=25821, [82952]=25821, [82953]=25821, [82954]=891, + [82955]=309, [83000]=12500, [83005]=8048, [83007]=1, [83008]=375, [83009]=1, + [83060]=64531, [83061]=64531, [83062]=64531, [83063]=64531, [83064]=6783, [83065]=11245, + [83066]=11245, [83067]=11245, [83068]=11245, [83069]=11245, [83070]=11245, [83071]=11245, + [83072]=11245, [83073]=11245, [83074]=11245, [83075]=11245, [83076]=11245, [83077]=11245, + [83078]=11245, [83079]=28764, [83080]=28764, [83081]=3462, [83082]=16438, [83093]=68652, + [83094]=40, [83200]=11043, [83201]=1753, [83202]=1747, [83203]=6703, [83204]=2312, + [83205]=7411, [83206]=2385, [83207]=3862, [83208]=3321, [83209]=14485, [83210]=2025, + [83211]=4154, [83212]=5513, [83213]=3089, [83214]=12637, [83215]=9601, [83216]=6443, + [83217]=8741, [83218]=3805, [83219]=13062, [83220]=9278, [83221]=15611, [83222]=3105, + [83223]=3841, [83224]=5000, [83225]=9103, [83226]=3285, [83227]=5864, [83228]=6105, + [83229]=10144, [83230]=5841, [83231]=14211, [83232]=3194, [83233]=31674, [83234]=32142, + [83235]=100000, [83236]=4762, [83237]=63541, [83238]=63371, [83239]=63522, [83240]=63677, + [83241]=13216, [83242]=17144, [83243]=8964, [83244]=13248, [83250]=5609, [83251]=6872, + [83253]=2906, [83254]=2612, [83255]=3287, [83256]=811, [83257]=42688, [83258]=36815, + [83259]=68731, [83260]=40157, [83261]=46612, [83262]=69285, [83263]=18244, [83264]=34624, + [83265]=26488, [83266]=16841, [83267]=18742, [83268]=14289, [83269]=89412, [83273]=9987, + [83274]=21355, [83275]=10864, [83276]=13244, [83277]=9588, [83278]=13486, [83279]=24611, + [83280]=7638, [83281]=9408, [83282]=4731, [83283]=4972, [83284]=3271, [83285]=6034, + [83286]=4107, [83287]=6213, [83288]=3681, [83289]=2271, [83290]=2734, [83291]=5012, + [83292]=9671, [83293]=10402, [83294]=16204, [83295]=6287, [83296]=8898, [83297]=12864, + [83309]=250, [83400]=5609, [83401]=6872, [83402]=6400, [83403]=2906, [83404]=2612, + [83405]=3287, [83406]=421, [83407]=629, [83408]=294, [83409]=764, [83410]=6301, + [83411]=4164, [83412]=9604, [83413]=9416, [83414]=7345, [83415]=9131, [83416]=29461, + [83417]=31340, [83420]=13087, [83421]=7543, [83423]=14559, [83424]=11318, [83425]=8085, + [83426]=17243, [83427]=16656, [83428]=14531, [83429]=13066, [83430]=7563, [83431]=14480, + [83432]=12014, [83433]=6910, [83434]=17243, [83435]=16636, [83436]=14587, [83440]=76809, + [83441]=24897, [83442]=24301, [83443]=27681, [83444]=37891, [83445]=64507, [83446]=59364, + [83447]=15763, [83448]=17438, [83449]=19106, [83450]=17309, [83451]=17781, [83452]=46108, + [83453]=36109, [83454]=28309, [83455]=13692, [83456]=17804, [83457]=13365, [83458]=11283, + [83459]=12934, [83460]=16308, [83461]=75106, [83462]=36809, [83463]=11460, [83464]=25108, + [83465]=17319, [83466]=24367, [83467]=46075, [83468]=19208, [83469]=18694, [83470]=37108, + [83471]=73208, [83472]=18608, [83478]=55, [83479]=55, [83480]=64080, [83481]=64208, + [83482]=64115, [83483]=41115, [83484]=78472, [83485]=23615, [83486]=38679, [83487]=122229, + [83488]=58777, [83490]=12500, [83491]=12500, [83492]=12500, [83493]=12500, [83494]=10875, + [83495]=10625, [83496]=16250, [83500]=25000, [83501]=25000, [83502]=25000, [83503]=25000, + [83504]=25000, [83505]=25000, [83506]=25000, [83507]=2500, [83510]=250, [83511]=250, + [83513]=59100, [83514]=18074, [83515]=13682, [83517]=352, [83518]=3000, [83519]=150, + [83520]=0, [83530]=43258, [83531]=33168, [83532]=34858, [83533]=2500, [83534]=1500, + [83535]=1625, [83536]=1750, [83537]=3000, [83538]=2500, [83540]=2500, [83541]=532, + [83542]=532, [83543]=532, [83544]=10000, [83545]=10000, [83546]=15000, [83547]=10000, + [83548]=10000, [83549]=1000, [83550]=20000, [83551]=20000, [83552]=20000, [83553]=20000, + [83554]=20000, [83555]=20000, [83556]=20000, [83557]=20000, [83558]=50000, [83559]=50000, + [83560]=50000, [83561]=50000, [83562]=123605, [83563]=103754, [83564]=103562, [83565]=44873, + [83570]=50000, [83571]=80000, [83572]=100000, [83573]=100000, [83574]=100000, [83575]=100000, + [83584]=4000, [84000]=195853, [84001]=89578, [84002]=61963, [84003]=60251, [84004]=76304, + [84005]=91152, [84006]=95175, [84010]=3000, [84011]=3000, [84012]=3500, [84013]=3500, + [84014]=3500, [84015]=3500, [84017]=2, [84030]=265375, [84031]=102106, [84032]=103086, + [84033]=155376, [84034]=48802, [84035]=62973, [84036]=115315, [84037]=3305, [84039]=1162, + [84040]=300, [84041]=300, [84500]=139779, [84501]=49658, [84502]=47308, [84503]=184893, + [84504]=45914, [84505]=40572, [84506]=60256, [84507]=55278, [84509]=19958, [84600]=84954, + [84601]=21128, [84602]=52906, [84603]=79312, [84604]=18500, [84605]=6, [91761]=81, + [91763]=1250, [91765]=3145, [91777]=86504, [91790]=37, [91796]=30000, [91797]=30000, + [92000]=250, [92001]=100000, [92002]=100000, [92003]=100000, [92004]=100000, [92016]=2500, + [92025]=5000, [92045]=7500, [92053]=7, [92055]=0, [92060]=25, [92062]=0, + [92075]=0, [92079]=0, [93061]=0, [93088]=0, [93092]=37, [93093]=37, + [93094]=2500, [93095]=2500, [93096]=37 +} diff --git a/SetupWizard.lua b/SetupWizard.lua new file mode 100644 index 0000000..ab3c7b2 --- /dev/null +++ b/SetupWizard.lua @@ -0,0 +1,1257 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Setup Wizard (SetupWizard.lua) +-- First-run guided configuration & re-run from ConfigUI +-------------------------------------------------------------------------------- + +SFrames.SetupWizard = {} +local SW = SFrames.SetupWizard + +-------------------------------------------------------------------------------- +-- Local state +-------------------------------------------------------------------------------- +local overlay, panel, contentScroll, contentChild +local headerTitle, stepLabel +local btnPrev, btnNext, btnSkip +local stepDots = {} +local stepPages = {} +local stepBuilders = {} +local stepList = {} +local currentStep = 1 +local runMode = "firstrun" +local completeCb = nil +local choices = {} +local built = false + +local PANEL_W, PANEL_H = 620, 470 +local CONTENT_W = PANEL_W - 40 +local CONTENT_H = PANEL_H - 110 + +local wid = 0 +local function WN(p) wid = wid + 1; return "NanamiWiz" .. p .. wid end + +local function Clamp(v, lo, hi) + if v < lo then return lo end + if v > hi then return hi end + return v +end + +local function T() return SFrames.ActiveTheme end + +-------------------------------------------------------------------------------- +-- Lightweight widget helpers (self-contained, mirror ConfigUI style) +-------------------------------------------------------------------------------- + +local function HideTex(tex) + if not tex then return end + if tex.SetTexture then tex:SetTexture(nil) end + tex:Hide() +end + +-- Styled button (matches ConfigUI StyleButton) +local function MakeButton(parent, text, w, h, onClick) + local btn = CreateFrame("Button", WN("Btn"), parent, "UIPanelButtonTemplate") + btn:SetWidth(w); btn:SetHeight(h) + btn:SetText(text) + btn:SetScript("OnClick", onClick) + + local t = T() + btn:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + HideTex(btn:GetNormalTexture()) + HideTex(btn:GetPushedTexture()) + HideTex(btn:GetHighlightTexture()) + HideTex(btn:GetDisabledTexture()) + local nm = btn:GetName() or "" + for _, suf in ipairs({"Left","Right","Middle"}) do + local tx = _G[nm..suf]; if tx then tx:SetAlpha(0); tx:Hide() end + end + + local function SetVis(state) + local bg, bd, tx = t.buttonBg, t.buttonBorder, t.buttonText + if btn.sfActive then + bg, bd, tx = t.buttonActiveBg, t.buttonActiveBorder, t.buttonActiveText + elseif state == "hover" then + bg = t.buttonHoverBg; bd = t.btnHoverBd or t.buttonActiveBorder; tx = t.buttonActiveText + elseif state == "down" then bg = t.buttonDownBg + elseif state == "disabled" then bg = t.buttonDisabledBg; tx = t.buttonDisabledText end + if btn.SetBackdropColor then btn:SetBackdropColor(bg[1],bg[2],bg[3],bg[4]) end + if btn.SetBackdropBorderColor then btn:SetBackdropBorderColor(bd[1],bd[2],bd[3],bd[4]) end + local fs = btn:GetFontString(); if fs then fs:SetTextColor(tx[1],tx[2],tx[3]) end + end + btn.RefreshVisual = function() + if btn.sfActive then SetVis("active") + elseif btn.IsEnabled and not btn:IsEnabled() then SetVis("disabled") + else SetVis("normal") end + end + btn:SetScript("OnEnter", function() if this.IsEnabled and this:IsEnabled() and not this.sfActive then SetVis("hover") end end) + btn:SetScript("OnLeave", function() if this.IsEnabled and this:IsEnabled() and not this.sfActive then SetVis("normal") end end) + btn:SetScript("OnMouseDown", function() if this.IsEnabled and this:IsEnabled() and not this.sfActive then SetVis("down") end end) + btn:SetScript("OnMouseUp", function() if this.IsEnabled and this:IsEnabled() and not this.sfActive then SetVis("hover") end end) + btn:RefreshVisual() + return btn +end + +local function MakeCheck(parent, label, x, y, getter, setter, onChange) + local name = WN("Chk") + local cb = CreateFrame("CheckButton", name, parent, "UICheckButtonTemplate") + cb:SetWidth(18); cb:SetHeight(18) + cb:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + + HideTex(cb:GetNormalTexture()); HideTex(cb:GetPushedTexture()) + HideTex(cb:GetHighlightTexture()); HideTex(cb:GetDisabledTexture()) + if cb.SetCheckedTexture then cb:SetCheckedTexture("") end + if cb.SetDisabledCheckedTexture then cb:SetDisabledCheckedTexture("") end + + local t = T() + local box = CreateFrame("Frame", nil, cb) + box:SetPoint("TOPLEFT", cb, "TOPLEFT", 0, 0) + box:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", 0, 0) + box:SetFrameLevel(cb:GetFrameLevel()+1) + box:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + + local function ApplyVis(checked) + if checked then + box:SetBackdropColor(t.checkFill[1], t.checkFill[2], t.checkFill[3], 0.88) + box:SetBackdropBorderColor(t.checkFill[1], t.checkFill[2], t.checkFill[3], 1) + else + box:SetBackdropColor(t.checkBg[1], t.checkBg[2], t.checkBg[3], t.checkBg[4]) + box:SetBackdropBorderColor(t.checkBorder[1], t.checkBorder[2], t.checkBorder[3], t.checkBorder[4]) + end + end + + local txt = _G[name.."Text"] + if txt then + txt:ClearAllPoints() + txt:SetPoint("LEFT", cb, "RIGHT", 4, 0) + txt:SetFont(SFrames:GetFont(), 11, "OUTLINE") + txt:SetText(label) + txt:SetTextColor(t.text[1], t.text[2], t.text[3]) + end + + cb:SetScript("OnEnter", function() + if not this._chk then + box:SetBackdropBorderColor(t.checkHoverBorder[1], t.checkHoverBorder[2], t.checkHoverBorder[3], t.checkHoverBorder[4]) + end + end) + cb:SetScript("OnLeave", function() + if not this._chk then + box:SetBackdropBorderColor(t.checkBorder[1], t.checkBorder[2], t.checkBorder[3], t.checkBorder[4]) + end + end) + cb:SetScript("OnClick", function() + local v = (this:GetChecked() == 1 or this:GetChecked() == true) and true or false + this._chk = v; ApplyVis(v) + setter(v) + if onChange then onChange(v) end + PlaySound(v and "igMainMenuOptionCheckBoxOn" or "igMainMenuOptionCheckBoxOff") + end) + cb.Refresh = function() + local v = getter() and true or false + cb:SetChecked(v and 1 or 0); cb._chk = v; ApplyVis(v) + end + cb:Refresh() + return cb +end + +local function MakeSlider(parent, label, x, y, w, lo, hi, step, getter, setter, fmt) + local sn = WN("Sld") + local s = CreateFrame("Slider", sn, parent, "OptionsSliderTemplate") + s:SetWidth(w); s:SetHeight(20) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + s:SetMinMaxValues(lo, hi); s:SetValueStep(step) + if s.SetObeyStepOnDrag then s:SetObeyStepOnDrag(true) end + + local low = _G[sn.."Low"]; if low then low:SetText(tostring(lo)) end + local high = _G[sn.."High"]; if high then high:SetText(tostring(hi)) end + local text = _G[sn.."Text"] + + local t = T() + -- style track + local regions = { s:GetRegions() } + for i = 1, table.getn(regions) do + local r = regions[i] + if r and r.GetObjectType and r:GetObjectType() == "Texture" then r:SetTexture(nil) end + end + local track = s:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetPoint("LEFT", s, "LEFT", 0, 0); track:SetPoint("RIGHT", s, "RIGHT", 0, 0) + track:SetHeight(4) + track:SetVertexColor(t.sliderTrack[1], t.sliderTrack[2], t.sliderTrack[3], t.sliderTrack[4]) + local fill = s:CreateTexture(nil, "ARTWORK") + fill:SetTexture("Interface\\Buttons\\WHITE8X8") + fill:SetPoint("LEFT", track, "LEFT", 0, 0) + fill:SetPoint("TOP", track, "TOP", 0, 0); fill:SetPoint("BOTTOM", track, "BOTTOM", 0, 0) + fill:SetWidth(1) + fill:SetVertexColor(t.sliderFill[1], t.sliderFill[2], t.sliderFill[3], t.sliderFill[4]) + if s.SetThumbTexture then s:SetThumbTexture("Interface\\Buttons\\WHITE8X8") end + local thumb = s.GetThumbTexture and s:GetThumbTexture() + if thumb then thumb:SetWidth(8); thumb:SetHeight(14) + thumb:SetVertexColor(t.sliderThumb[1], t.sliderThumb[2], t.sliderThumb[3], t.sliderThumb[4]) + end + + local block = false + local function UpdateFill() + local mn, mx = s:GetMinMaxValues(); local v = s:GetValue() or mn + local pct = 0; if mx > mn then pct = Clamp((v-mn)/(mx-mn), 0, 1) end + local pw = math.floor((s:GetWidth() or 1) * pct + 0.5); if pw < 1 then pw = 1 end + fill:SetWidth(pw) + end + local function UpdateLabel(v) + local d = fmt and fmt(v) or v + if text then text:SetText(label..": "..tostring(d)) end + end + s:SetScript("OnValueChanged", function() + if block then return end + local raw = this:GetValue() or lo + local v; if step >= 1 then v = math.floor(raw+0.5) else v = math.floor(raw/step+0.5)*step end + v = Clamp(v, lo, hi); UpdateLabel(v); UpdateFill(); setter(v) + end) + s.Refresh = function() + local v = Clamp(tonumber(getter()) or lo, lo, hi) + block = true; s:SetValue(v); block = false; UpdateLabel(v); UpdateFill() + end + if low then low:SetTextColor(t.dimText[1], t.dimText[2], t.dimText[3]) + low:ClearAllPoints(); low:SetPoint("TOPLEFT", s, "BOTTOMLEFT", 0, 0) end + if high then high:SetTextColor(t.dimText[1], t.dimText[2], t.dimText[3]) + high:ClearAllPoints(); high:SetPoint("TOPRIGHT", s, "BOTTOMRIGHT", 0, 0) end + if text then text:SetTextColor(t.text[1], t.text[2], t.text[3]) + text:ClearAllPoints(); text:SetPoint("BOTTOM", s, "TOP", 0, 2) end + s:Refresh() + return s +end + +local function MakeLabel(parent, text, x, y, size, r, g, b) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(SFrames:GetFont(), size or 11, "OUTLINE") + fs:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + fs:SetText(text); fs:SetTextColor(r or 1, g or 1, b or 1) + return fs +end + +local function MakeDesc(parent, text, x, y, maxW) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(SFrames:GetFont(), 9, "OUTLINE") + fs:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + if maxW then fs:SetWidth(maxW); fs:SetJustifyH("LEFT") end + fs:SetText(text); fs:SetTextColor(0.65, 0.58, 0.62) + return fs +end + +local function MakeSection(parent, title, x, y, w, h, iconKey) + local sec = CreateFrame("Frame", WN("Sec"), parent) + sec:SetWidth(w); sec:SetHeight(h) + sec:SetPoint("TOPLEFT", parent, "TOPLEFT", x, y) + sec:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local t = T() + sec:SetBackdropColor(t.sectionBg[1], t.sectionBg[2], t.sectionBg[3], t.sectionBg[4]) + sec:SetBackdropBorderColor(t.sectionBorder[1], t.sectionBorder[2], t.sectionBorder[3], t.sectionBorder[4]) + + local anchorX = 10 + if iconKey and SFrames and SFrames.CreateIcon then + local ico = SFrames:CreateIcon(sec, iconKey, 12) + ico:SetDrawLayer("OVERLAY") + ico:SetPoint("TOPLEFT", sec, "TOPLEFT", 10, -9) + ico:SetVertexColor(t.title[1], t.title[2], t.title[3]) + anchorX = 26 + end + + local tfs = sec:CreateFontString(nil, "OVERLAY") + tfs:SetFont(SFrames:GetFont(), 11, "OUTLINE") + tfs:SetPoint("TOPLEFT", sec, "TOPLEFT", anchorX, -9) + tfs:SetText(title); tfs:SetTextColor(t.title[1], t.title[2], t.title[3]) + local div = sec:CreateTexture(nil, "ARTWORK") + div:SetTexture("Interface\\Buttons\\WHITE8X8"); div:SetHeight(1) + div:SetPoint("TOPLEFT", sec, "TOPLEFT", 8, -24) + div:SetPoint("TOPRIGHT", sec, "TOPRIGHT", -8, -24) + div:SetVertexColor(t.sectionBorder[1], t.sectionBorder[2], t.sectionBorder[3], 0.6) + return sec +end + +-- Toggle-group: row of small buttons, one active at a time +local function MakeBtnGroup(parent, x, y, opts, getter, setter) + local btns = {} + local bx = x + for _, o in ipairs(opts) do + local b = MakeButton(parent, o.label, o.w or 60, 22, nil) + b:ClearAllPoints(); b:SetPoint("TOPLEFT", parent, "TOPLEFT", bx, y) + b.key = o.key + b:SetScript("OnClick", function() + setter(this.key) + for _, bb in ipairs(btns) do bb.sfActive = (bb.key == this.key); bb:RefreshVisual() end + PlaySound("igMainMenuOptionCheckBoxOn") + end) + table.insert(btns, b); bx = bx + (o.w or 60) + 4 + end + local grp = {} + grp.Refresh = function() + local v = getter() + for _, bb in ipairs(btns) do bb.sfActive = (bb.key == v); bb:RefreshVisual() end + end + grp.Refresh() + return grp +end + +-------------------------------------------------------------------------------- +-- Default / current choices +-------------------------------------------------------------------------------- + +local function GetDefaultChoices() + return { + themePreset = "pink", + useClassTheme = false, + enableMerchant = true, + enableQuestUI = true, + enableQuestLogSkin = true, + enableTrainer = true, + enableSpellBook = true, + enableTradeSkill = true, + charPanelEnable = true, + enableMail = true, + enablePetStable = true, + enableSocial = true, + enableInspect = true, + enableFlightMap = true, + enableChat = true, + translateEnabled = false, + enableUnitFrames = true, + enableActionBars = true, + showPetBar = true, + showStanceBar = true, + showRightBars = true, + buttonRounded = false, + buttonInnerShadow = false, + minimapEnabled = true, + minimapShowClock = true, + minimapShowCoords = true, + minimapMapStyle = "auto", + buffEnabled = true, + buffIconSize = 30, + buffIconsPerRow = 8, + buffGrowDir = "LEFT", + buffShowTimer = true, + afkEnabled = true, + afkDelay = 5, + afkOutsideRest = false, + mapRevealEnabled = true, + mapRevealAlpha = 0.7, + worldMapEnabled = true, + hcGlobalDisable = true, + iconSet = "icon", + } +end + +local function GetCurrentChoices() + local c = GetDefaultChoices() + if not SFramesDB then return c end + local db = SFramesDB + if db.Theme then + if db.Theme.preset ~= nil then c.themePreset = db.Theme.preset end + if db.Theme.useClassTheme ~= nil then c.useClassTheme = db.Theme.useClassTheme end + if db.Theme.iconSet ~= nil then c.iconSet = db.Theme.iconSet end + end + if db.enableMerchant ~= nil then c.enableMerchant = db.enableMerchant end + if db.enableQuestUI ~= nil then c.enableQuestUI = db.enableQuestUI end + if db.enableQuestLogSkin ~= nil then c.enableQuestLogSkin = db.enableQuestLogSkin end + if db.enableTrainer ~= nil then c.enableTrainer = db.enableTrainer end + if db.enableSpellBook ~= nil then c.enableSpellBook = db.enableSpellBook end + if db.enableTradeSkill ~= nil then c.enableTradeSkill = db.enableTradeSkill end + if db.charPanelEnable ~= nil then c.charPanelEnable = db.charPanelEnable end + if db.enableMail ~= nil then c.enableMail = db.enableMail end + if db.enablePetStable ~= nil then c.enablePetStable = db.enablePetStable end + if db.enableSocial ~= nil then c.enableSocial = db.enableSocial end + if db.enableInspect ~= nil then c.enableInspect = db.enableInspect end + if db.enableFlightMap ~= nil then c.enableFlightMap = db.enableFlightMap end + if db.enableChat ~= nil then c.enableChat = db.enableChat end + if db.enableUnitFrames ~= nil then c.enableUnitFrames = db.enableUnitFrames end + if db.afkEnabled ~= nil then c.afkEnabled = db.afkEnabled end + if type(db.afkDelay) == "number" then c.afkDelay = db.afkDelay end + if db.afkOutsideRest ~= nil then c.afkOutsideRest = db.afkOutsideRest end + if db.Chat and db.Chat.translateEnabled ~= nil then c.translateEnabled = db.Chat.translateEnabled end + if db.Chat and db.Chat.hcGlobalDisable ~= nil then c.hcGlobalDisable = db.Chat.hcGlobalDisable end + if db.ActionBars then + if db.ActionBars.enable ~= nil then c.enableActionBars = db.ActionBars.enable end + if db.ActionBars.showPetBar ~= nil then c.showPetBar = db.ActionBars.showPetBar end + if db.ActionBars.showStanceBar ~= nil then c.showStanceBar = db.ActionBars.showStanceBar end + if db.ActionBars.showRightBars ~= nil then c.showRightBars = db.ActionBars.showRightBars end + if db.ActionBars.buttonRounded ~= nil then c.buttonRounded = db.ActionBars.buttonRounded end + if db.ActionBars.buttonInnerShadow ~= nil then c.buttonInnerShadow = db.ActionBars.buttonInnerShadow end + end + if db.Minimap then + if db.Minimap.enabled ~= nil then c.minimapEnabled = db.Minimap.enabled end + if db.Minimap.showClock ~= nil then c.minimapShowClock = db.Minimap.showClock end + if db.Minimap.showCoords ~= nil then c.minimapShowCoords = db.Minimap.showCoords end + if db.Minimap.mapStyle ~= nil then c.minimapMapStyle = db.Minimap.mapStyle end + end + if db.MinimapBuffs then + if db.MinimapBuffs.enabled ~= nil then c.buffEnabled = db.MinimapBuffs.enabled end + if type(db.MinimapBuffs.iconSize) == "number" then c.buffIconSize = db.MinimapBuffs.iconSize end + if type(db.MinimapBuffs.iconsPerRow) == "number" then c.buffIconsPerRow = db.MinimapBuffs.iconsPerRow end + if db.MinimapBuffs.growDirection ~= nil then c.buffGrowDir = db.MinimapBuffs.growDirection end + if db.MinimapBuffs.showTimer ~= nil then c.buffShowTimer = db.MinimapBuffs.showTimer end + end + if db.MapReveal then + if db.MapReveal.enabled ~= nil then c.mapRevealEnabled = db.MapReveal.enabled end + if type(db.MapReveal.unexploredAlpha) == "number" then c.mapRevealAlpha = db.MapReveal.unexploredAlpha end + end + if db.WorldMap then + if db.WorldMap.enabled ~= nil then c.worldMapEnabled = db.WorldMap.enabled end + end + return c +end + +-------------------------------------------------------------------------------- +-- Apply choices → SFramesDB +-------------------------------------------------------------------------------- + +local function ApplyChoices() + if not SFramesDB then SFramesDB = {} end + local c = choices + + if type(SFramesDB.Theme) ~= "table" then SFramesDB.Theme = {} end + SFramesDB.Theme.preset = c.themePreset + SFramesDB.Theme.useClassTheme = c.useClassTheme + SFramesDB.Theme.iconSet = c.iconSet or "icon" + + SFramesDB.enableMerchant = c.enableMerchant + SFramesDB.enableQuestUI = c.enableQuestUI + SFramesDB.enableQuestLogSkin = c.enableQuestLogSkin + SFramesDB.enableTrainer = c.enableTrainer + SFramesDB.enableSpellBook = c.enableSpellBook + SFramesDB.enableTradeSkill = c.enableTradeSkill + SFramesDB.charPanelEnable = c.charPanelEnable + SFramesDB.enableMail = c.enableMail + SFramesDB.enablePetStable = c.enablePetStable + SFramesDB.enableSocial = c.enableSocial + SFramesDB.enableInspect = c.enableInspect + SFramesDB.enableFlightMap = c.enableFlightMap + + SFramesDB.enableChat = c.enableChat + if type(SFramesDB.Chat) ~= "table" then SFramesDB.Chat = {} end + SFramesDB.Chat.translateEnabled = c.translateEnabled + SFramesDB.Chat.hcGlobalDisable = c.hcGlobalDisable + + SFramesDB.enableUnitFrames = c.enableUnitFrames + + if type(SFramesDB.ActionBars) ~= "table" then SFramesDB.ActionBars = {} end + SFramesDB.ActionBars.enable = c.enableActionBars + SFramesDB.ActionBars.showPetBar = c.showPetBar + SFramesDB.ActionBars.showStanceBar = c.showStanceBar + SFramesDB.ActionBars.showRightBars = c.showRightBars + SFramesDB.ActionBars.buttonRounded = c.buttonRounded + SFramesDB.ActionBars.buttonInnerShadow = c.buttonInnerShadow + + if type(SFramesDB.Minimap) ~= "table" then SFramesDB.Minimap = {} end + SFramesDB.Minimap.enabled = c.minimapEnabled + SFramesDB.Minimap.showClock = c.minimapShowClock + SFramesDB.Minimap.showCoords = c.minimapShowCoords + SFramesDB.Minimap.mapStyle = c.minimapMapStyle + + if type(SFramesDB.MinimapBuffs) ~= "table" then SFramesDB.MinimapBuffs = {} end + SFramesDB.MinimapBuffs.enabled = c.buffEnabled + SFramesDB.MinimapBuffs.iconSize = c.buffIconSize + SFramesDB.MinimapBuffs.iconsPerRow = c.buffIconsPerRow + SFramesDB.MinimapBuffs.growDirection = c.buffGrowDir + SFramesDB.MinimapBuffs.showTimer = c.buffShowTimer + + SFramesDB.afkEnabled = c.afkEnabled + SFramesDB.afkDelay = c.afkDelay + SFramesDB.afkOutsideRest = c.afkOutsideRest + + if type(SFramesDB.MapReveal) ~= "table" then SFramesDB.MapReveal = {} end + SFramesDB.MapReveal.enabled = c.mapRevealEnabled + SFramesDB.MapReveal.unexploredAlpha = c.mapRevealAlpha + + if type(SFramesDB.WorldMap) ~= "table" then SFramesDB.WorldMap = {} end + SFramesDB.WorldMap.enabled = c.worldMapEnabled + + SFrames.Theme:Apply(c.useClassTheme and SFrames.Theme:GetCurrentPreset() or c.themePreset) + SFramesDB.setupComplete = true +end + +-------------------------------------------------------------------------------- +-- Step builders (lazy — only called first time user navigates to that step) +-------------------------------------------------------------------------------- + +-- Step 1: Welcome ----------------------------------------------------------- +local function BuildWelcome(page) + local t = T() + local font = SFrames:GetFont() + + local logoIco = SFrames:CreateIcon(page, "logo", 52) + logoIco:SetDrawLayer("OVERLAY") + logoIco:SetPoint("TOP", page, "TOP", 0, -44) + + local logo = page:CreateFontString(nil, "OVERLAY") + logo:SetFont(font, 22, "OUTLINE") + logo:SetPoint("TOP", logoIco, "BOTTOM", 0, -8) + logo:SetText("Nanami-UI") + logo:SetTextColor(t.accentLight[1], t.accentLight[2], t.accentLight[3]) + + local sub = page:CreateFontString(nil, "OVERLAY") + sub:SetFont(font, 11, "OUTLINE") + sub:SetPoint("TOP", logo, "BOTTOM", 0, -4) + sub:SetText("v1.0.0") + sub:SetTextColor(t.dimText[1], t.dimText[2], t.dimText[3]) + + local tagline = page:CreateFontString(nil, "OVERLAY") + tagline:SetFont(font, 10, "OUTLINE") + tagline:SetPoint("TOP", sub, "BOTTOM", 0, -14) + tagline:SetWidth(440); tagline:SetJustifyH("CENTER") + tagline:SetText("一站式现代 UI 重塑方案,为经典怀旧而生") + tagline:SetTextColor(t.accentLight[1], t.accentLight[2], t.accentLight[3]) + + local desc = page:CreateFontString(nil, "OVERLAY") + desc:SetFont(font, 9.5, "OUTLINE") + desc:SetPoint("TOP", tagline, "BOTTOM", 0, -12) + desc:SetWidth(440); desc:SetJustifyH("CENTER") + desc:SetText( + "9 套可选主题配色 + 职业自适应配色\n".. + "全面重设计:商人 / 任务 / 技能书 / 邮箱 / 社交 等 12+ 界面\n".. + "现代化单位框体、动作条、聊天框与 Buff 栏\n".. + "AI 翻译、飞行助手、地图增强、AFK 待机动画\n".. + "轻量高效,所有功能均可自由开关\n\n".. + "接下来将引导你完成基础配置,\n".. + "你也可以随时跳过,直接使用默认设置。" + ) + desc:SetTextColor(0.78, 0.72, 0.76) + + local startBtn = MakeButton(page, "开始配置", 160, 32, function() + SW:GoTo(2) + end) + startBtn:SetPoint("TOP", desc, "BOTTOM", 0, -18) + + local skipBtn = MakeButton(page, "跳过,使用默认配置", 200, 28, function() + SW:DoSkip() + end) + skipBtn:SetPoint("TOP", startBtn, "BOTTOM", 0, -10) + + page:SetHeight(CONTENT_H) +end + +-- Step 2: Theme & Skins ---------------------------------------------------- +local function BuildTheme(page) + local t = T() + local font = SFrames:GetFont() + + local sec1 = MakeSection(page, "主题配色", 0, 0, CONTENT_W, 100, "star") + local presets = SFrames.Theme.PresetOrder + local swatches = {} + for idx = 1, table.getn(presets) do + local key = presets[idx] + local p = SFrames.Theme.Presets[key] + local sw = CreateFrame("Button", WN("Sw"), sec1) + sw:SetWidth(28); sw:SetHeight(28) + sw:SetPoint("TOPLEFT", sec1, "TOPLEFT", 14 + (idx-1)*34, -34) + sw:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = false, edgeSize = 8, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + local hr, hg, hb = SFrames.Theme.HSVtoRGB(p.hue, 0.40 * (p.satMul or 1), 0.80) + sw:SetBackdropColor(hr, hg, hb, 1) + sw.presetKey = key + sw:SetScript("OnClick", function() + choices.themePreset = this.presetKey + choices.useClassTheme = false + SFrames.Theme:Apply(this.presetKey) + SW:RefreshPanelColors() + for _, s in ipairs(swatches) do + if s.presetKey == this.presetKey then + s:SetBackdropBorderColor(1,1,1,1) + else + s:SetBackdropBorderColor(0.25,0.25,0.25,1) + end + end + if page._classCheck then page._classCheck:Refresh() end + PlaySound("igMainMenuOptionCheckBoxOn") + end) + local active = choices.themePreset + if key == active and not choices.useClassTheme then + sw:SetBackdropBorderColor(1,1,1,1) + else + sw:SetBackdropBorderColor(0.25,0.25,0.25,1) + end + sw:SetScript("OnEnter", function() + this:SetBackdropBorderColor(0.8,0.8,0.8,1) + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:SetText(SFrames.Theme.Presets[this.presetKey].name) + GameTooltip:Show() + end) + sw:SetScript("OnLeave", function() + local act = choices.themePreset + if this.presetKey == act and not choices.useClassTheme then + this:SetBackdropBorderColor(1,1,1,1) + else + this:SetBackdropBorderColor(0.25,0.25,0.25,1) + end + GameTooltip:Hide() + end) + table.insert(swatches, sw) + end + page._classCheck = MakeCheck(sec1, "根据当前职业自动选择主题色", 14, -72, + function() return choices.useClassTheme end, + function(v) choices.useClassTheme = v + if v then + SFrames.Theme:Apply(SFrames.Theme:GetCurrentPreset()) + else + SFrames.Theme:Apply(choices.themePreset) + end + SW:RefreshPanelColors() + end) + + -- Icon set picker (right after theme color) + local secIcon = MakeSection(page, "图标风格", 0, -108, CONTENT_W, 90, "star") + MakeDesc(secIcon, "选择图标风格(8 套可选,重载 UI 后生效)", 14, -28, CONTENT_W - 30) + + local ISET_NAMES = { "icon", "icon2", "icon3", "icon4", "icon5", "icon6", "icon7", "icon8" } + local ISET_SIZE = 36 + local ISET_GAP = 8 + local wFaction = UnitFactionGroup and UnitFactionGroup("player") or "Alliance" + local wFKey = (wFaction == "Horde") and "horde" or "alliance" + local wFCoords = SFrames.ICON_TCOORDS and SFrames.ICON_TCOORDS[wFKey] + if not wFCoords then + wFCoords = (wFKey == "horde") and { 0.75, 0.875, 0, 0.125 } or { 0.625, 0.75, 0, 0.125 } + end + + local isetBtns = {} + for idx = 1, table.getn(ISET_NAMES) do + local setKey = ISET_NAMES[idx] + local texPath = "Interface\\AddOns\\Nanami-UI\\img\\" .. setKey + local sx = 14 + (idx - 1) * (ISET_SIZE + ISET_GAP) + + local ib = CreateFrame("Button", WN("IS"), secIcon) + ib:SetWidth(ISET_SIZE); ib:SetHeight(ISET_SIZE) + ib:SetPoint("TOPLEFT", secIcon, "TOPLEFT", sx, -44) + ib:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 10, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + ib:SetBackdropColor(0.08, 0.08, 0.1, 0.85) + ib:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + + local pv = ib:CreateTexture(nil, "ARTWORK") + pv:SetTexture(texPath) + pv:SetTexCoord(wFCoords[1], wFCoords[2], wFCoords[3], wFCoords[4]) + pv:SetPoint("CENTER", ib, "CENTER", 0, 0) + pv:SetWidth(ISET_SIZE - 6); pv:SetHeight(ISET_SIZE - 6) + + ib.setKey = setKey + ib:SetScript("OnClick", function() + choices.iconSet = this.setKey + for _, b in ipairs(isetBtns) do + if b.setKey == this.setKey then + b:SetBackdropBorderColor(1, 0.85, 0.6, 1) + else + b:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + end + end + PlaySound("igMainMenuOptionCheckBoxOn") + end) + ib:SetScript("OnEnter", function() + this:SetBackdropBorderColor(0.7, 0.7, 0.7, 1) + GameTooltip:SetOwner(this, "ANCHOR_NONE") + GameTooltip:ClearAllPoints() + GameTooltip:SetPoint("BOTTOM", this, "TOP", 0, 6) + local num = this.setKey == "icon" and "1" or string.sub(this.setKey, 5) + GameTooltip:SetText("图标风格 " .. num .. (this.setKey == "icon" and " (默认)" or "")) + GameTooltip:Show() + GameTooltip:SetFrameStrata("TOOLTIP") + GameTooltip:Raise() + end) + ib:SetScript("OnLeave", function() + local cur = choices.iconSet or "icon" + if this.setKey == cur then + this:SetBackdropBorderColor(1, 0.85, 0.6, 1) + else + this:SetBackdropBorderColor(0.3, 0.3, 0.35, 1) + end + GameTooltip:Hide() + end) + + local cur = choices.iconSet or "icon" + if setKey == cur then + ib:SetBackdropBorderColor(1, 0.85, 0.6, 1) + end + table.insert(isetBtns, ib) + end + + -- Skin toggles (below icon picker) + local sec2 = MakeSection(page, "界面皮肤替换", 0, -206, CONTENT_W, 150, "settings") + MakeDesc(sec2, "选择启用哪些 Nanami-UI 美化界面(替换原生窗口)", 14, -28, CONTENT_W - 30) + + local skins = { + { key = "enableMerchant", label = "商人界面" }, + { key = "enableQuestUI", label = "任务/NPC 对话" }, + { key = "enableQuestLogSkin",label = "任务日志" }, + { key = "enableSpellBook", label = "技能书" }, + { key = "enableTradeSkill", label = "专业技能" }, + { key = "enableTrainer", label = "训练师" }, + { key = "charPanelEnable", label = "人物面板" }, + { key = "enableMail", label = "邮箱" }, + { key = "enablePetStable", label = "兽栏" }, + { key = "enableSocial", label = "社交" }, + { key = "enableInspect", label = "观察面板" }, + { key = "enableFlightMap", label = "飞行地图" }, + } + local col, row = 0, 0 + for i = 1, table.getn(skins) do + local sk = skins[i] + local cx = 14 + col * 180 + local cy = -44 - row * 22 + MakeCheck(sec2, sk.label, cx, cy, + function() return choices[sk.key] end, + function(v) choices[sk.key] = v end) + col = col + 1 + if col >= 3 then col = 0; row = row + 1 end + end + + page:SetHeight(370) +end + +-- Step 3: Chat & Translation ------------------------------------------------ +local function BuildChat(page) + local t = T() + local sec1 = MakeSection(page, "聊天框", 0, 0, CONTENT_W, 80, "chat") + + local chatCb = MakeCheck(sec1, "启用 Nanami-UI 聊天框加强", 14, -34, + function() return choices.enableChat end, + function(v) choices.enableChat = v end) + MakeDesc(sec1, "标签式多频道、频道过滤、样式美化、功能增强", 36, -52, CONTENT_W - 50) + page._chatCb = chatCb + + local sec2 = MakeSection(page, "AI 翻译", 0, -90, CONTENT_W, 150, "ai") + + local transCb = MakeCheck(sec2, "启用聊天频道 AI 自动翻译", 14, -34, + function() return choices.translateEnabled end, + function(v) + choices.translateEnabled = v + if v then + choices.enableChat = true + if page._chatCb then page._chatCb:Refresh() end + end + end) + + MakeDesc(sec2, + "需要 STranslate 外部程序和 API 支持。\n若不使用翻译功能,STranslate 无需运行。\n\n启用翻译将自动启用聊天框加强。\n翻译频道的详细配置请在聊天设置中调整。", + 14, -56, CONTENT_W - 30) + + page:SetHeight(250) +end + +-- Step 4: Unit Frames + Action Bars (combined) ----------------------------- +local function BuildFramesAndBars(page) + -- Unit Frames section + local sec1 = MakeSection(page, "单位框体", 0, 0, CONTENT_W, 90, "character") + MakeCheck(sec1, "启用 Nanami-UI 单位框体", 14, -34, + function() return choices.enableUnitFrames end, + function(v) choices.enableUnitFrames = v end) + MakeDesc(sec1, + "替换原生玩家、目标、宠物、小队、团队框体为现代极简风格", + 14, -56, CONTENT_W - 30) + + -- Action Bars section + local sec2 = MakeSection(page, "动作条", 0, -100, CONTENT_W, 210, "attack") + local subFrame = CreateFrame("Frame", nil, sec2) + subFrame:SetPoint("TOPLEFT", sec2, "TOPLEFT", 0, -60) + subFrame:SetWidth(CONTENT_W); subFrame:SetHeight(140) + + MakeCheck(sec2, "启用 Nanami-UI 动作条接管", 14, -34, + function() return choices.enableActionBars end, + function(v) + choices.enableActionBars = v + if v then subFrame:Show() else subFrame:Hide() end + end) + MakeDesc(sec2, "需要 /reload 生效", 36, -52, 300) + + MakeCheck(subFrame, "显示宠物动作条", 30, -6, + function() return choices.showPetBar end, + function(v) choices.showPetBar = v end) + MakeCheck(subFrame, "显示姿态栏 / 形态栏", 30, -30, + function() return choices.showStanceBar end, + function(v) choices.showStanceBar = v end) + MakeCheck(subFrame, "显示右侧栏", 30, -54, + function() return choices.showRightBars end, + function(v) choices.showRightBars = v end) + MakeCheck(subFrame, "按钮圆角", 30, -78, + function() return choices.buttonRounded end, + function(v) choices.buttonRounded = v end) + MakeCheck(subFrame, "按钮内阴影", 230, -78, + function() return choices.buttonInnerShadow end, + function(v) choices.buttonInnerShadow = v end) + + if not choices.enableActionBars then subFrame:Hide() end + page:SetHeight(320) +end + +-- Step 6: Extras (with sub-options) ----------------------------------------- +local function BuildExtras(page) + local items = {} + local allControls = {} + + local function AddFeature(label, desc, enableKey, subBuilder, iconKey) + table.insert(items, { label = label, desc = desc, key = enableKey, subBuilder = subBuilder, icon = iconKey }) + end + + AddFeature("小地图美化", "自定义小地图外观", "minimapEnabled", function(p, x, y) + MakeCheck(p, "显示时钟", x, y, + function() return choices.minimapShowClock end, + function(v) choices.minimapShowClock = v end) + MakeCheck(p, "显示坐标", x + 160, y, + function() return choices.minimapShowCoords end, + function(v) choices.minimapShowCoords = v end) + MakeLabel(p, "地图风格:", x, y - 26, 10, 0.78, 0.72, 0.76) + MakeBtnGroup(p, x + 60, y - 24, + { {key="auto", label="自动", w=50}, {key="round", label="圆形", w=50}, {key="square", label="方形", w=50} }, + function() return choices.minimapMapStyle end, + function(v) choices.minimapMapStyle = v end) + return 54 + end, "worldmap") + + AddFeature("Buff 栏", "自定义 Buff/Debuff 显示", "buffEnabled", function(p, x, y) + MakeSlider(p, "图标大小", x, y - 10, 180, 16, 50, 1, + function() return choices.buffIconSize end, + function(v) choices.buffIconSize = v end) + MakeSlider(p, "每行数量", x + 220, y - 10, 180, 4, 16, 1, + function() return choices.buffIconsPerRow end, + function(v) choices.buffIconsPerRow = v end) + MakeLabel(p, "增长方向:", x, y - 52, 10, 0.78, 0.72, 0.76) + MakeBtnGroup(p, x + 60, y - 50, + { {key="LEFT", label="向左", w=52}, {key="RIGHT", label="向右", w=52} }, + function() return choices.buffGrowDir end, + function(v) choices.buffGrowDir = v end) + MakeCheck(p, "显示计时器", x + 220, y - 50, + function() return choices.buffShowTimer end, + function(v) choices.buffShowTimer = v end) + return 78 + end, "buff") + + AddFeature("AFK 待机动画", "进入暂离后显示全屏待机画面", "afkEnabled", function(p, x, y) + MakeSlider(p, "触发延迟(分钟)", x, y - 10, 200, 1, 30, 1, + function() return choices.afkDelay end, + function(v) choices.afkDelay = v end) + MakeCheck(p, "仅在休息区触发", x + 250, y - 4, + function() return choices.afkOutsideRest end, + function(v) choices.afkOutsideRest = v end) + return 48 + end, "camp") + + AddFeature("地图迷雾揭示", "显示未探索区域的轮廓", "mapRevealEnabled", function(p, x, y) + MakeSlider(p, "未探索区域透明度", x, y - 10, 240, 0, 1, 0.05, + function() return choices.mapRevealAlpha end, + function(v) choices.mapRevealAlpha = v end, + function(v) return string.format("%.0f%%", v * 100) end) + return 48 + end, "search") + + AddFeature("世界地图皮肤", "美化世界地图界面", "worldMapEnabled", nil, "worldmap") + AddFeature("飞行助手", "美化飞行界面 + 飞行进度条", "enableFlightMap", nil, "mount") + + -- Build layout + local yOff = -4 + for i = 1, table.getn(items) do + local item = items[i] + local sec = MakeSection(page, item.label, 0, yOff, CONTENT_W, 30, item.icon) + MakeDesc(sec, item.desc, 14, -30, CONTENT_W - 30) + sec:SetHeight(50) + + local subFrame = nil + local subH = 0 + + if item.subBuilder then + subFrame = CreateFrame("Frame", nil, page) + subFrame:SetWidth(CONTENT_W) + end + + local cb = MakeCheck(sec, "启用", CONTENT_W - 80, -8, + function() return choices[item.key] end, + function(v) + choices[item.key] = v + if subFrame then + if v then subFrame:Show() else subFrame:Hide() end + end + end) + + if subFrame then + subH = item.subBuilder(subFrame, 14, -4) or 40 + subFrame:SetHeight(subH) + subFrame:SetPoint("TOPLEFT", page, "TOPLEFT", 0, yOff - 50) + if not choices[item.key] then subFrame:Hide() end + yOff = yOff - 50 - subH - 6 + else + yOff = yOff - 56 + end + end + + page:SetHeight(math.abs(yOff) + 10) +end + +-- Step 7: Hardcore (conditional) -------------------------------------------- +local function BuildHardcore(page) + local sec = MakeSection(page, "硬核模式", 0, 0, CONTENT_W, 120, "skull") + MakeDesc(sec, "检测到你的角色处于硬核模式,建议启用硬核频道接收\n以获取硬核死亡消息通知。", 14, -30, CONTENT_W - 30) + + MakeCheck(sec, "启用硬核频道接收", 14, -68, + function() return not choices.hcGlobalDisable end, + function(v) choices.hcGlobalDisable = not v end) + MakeDesc(sec, "关闭将全局屏蔽硬核频道消息", 36, -86, 300) + + page:SetHeight(140) +end + +-- Complete page -------------------------------------------------------------- +local function BuildComplete(page) + local t = T() + local font = SFrames:GetFont() + + local doneIco = SFrames:CreateIcon(page, "logo", 48) + doneIco:SetDrawLayer("OVERLAY") + doneIco:SetPoint("TOP", page, "TOP", 0, -16) + doneIco:SetVertexColor(t.accentLight[1], t.accentLight[2], t.accentLight[3]) + + local icon = page:CreateFontString(nil, "OVERLAY") + icon:SetFont(font, 28, "OUTLINE") + icon:SetPoint("TOP", doneIco, "BOTTOM", 0, -4) + icon:SetText("=^_^=") + icon:SetTextColor(t.accentLight[1], t.accentLight[2], t.accentLight[3]) + + local title = page:CreateFontString(nil, "OVERLAY") + title:SetFont(font, 16, "OUTLINE") + title:SetPoint("TOP", icon, "BOTTOM", 0, -10) + title:SetText("配置完成!") + title:SetTextColor(t.title[1], t.title[2], t.title[3]) + + local desc = page:CreateFontString(nil, "OVERLAY") + desc:SetFont(font, 10, "OUTLINE") + desc:SetPoint("TOP", title, "BOTTOM", 0, -14) + desc:SetWidth(420); desc:SetJustifyH("CENTER") + desc:SetTextColor(0.78, 0.72, 0.76) + + if runMode == "rerun" then + desc:SetText("设置已更新。部分选项需要 /reload 才能完全生效。\n你可以随时通过 /nui config 或 ESC 菜单调整设置。") + else + desc:SetText("所有设置已保存。\n你可以随时通过 /nui config 或 ESC 菜单调整设置。") + end + + local doneBtn = MakeButton(page, "完成", 140, 32, function() + SW:DoComplete() + end) + doneBtn:SetPoint("TOP", desc, "BOTTOM", 0, -24) + + page:SetHeight(CONTENT_H) +end + +-------------------------------------------------------------------------------- +-- Build main frame (once) +-------------------------------------------------------------------------------- + +local function EnsureWizardFrame() + if built then return end + built = true + + local t = T() + + -- Full-screen overlay + overlay = CreateFrame("Frame", "NanamiWizOverlay", UIParent) + overlay:SetFrameStrata("DIALOG") + overlay:SetAllPoints(UIParent) + overlay:EnableMouse(true) + overlay:SetScript("OnMouseDown", function() end) + local bg = overlay:CreateTexture(nil, "BACKGROUND") + bg:SetAllPoints(overlay) + bg:SetTexture(0, 0, 0, 0.6) + + -- Center panel + panel = CreateFrame("Frame", "NanamiWizPanel", overlay) + panel:SetWidth(PANEL_W); panel:SetHeight(PANEL_H) + panel:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + panel:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + panel:SetBackdropColor(t.panelBg[1], t.panelBg[2], t.panelBg[3], t.panelBg[4]) + panel:SetBackdropBorderColor(t.panelBorder[1], t.panelBorder[2], t.panelBorder[3], t.panelBorder[4]) + + -- Header + headerTitle = panel:CreateFontString(nil, "OVERLAY") + headerTitle:SetFont(SFrames:GetFont(), 13, "OUTLINE") + headerTitle:SetPoint("TOP", panel, "TOP", 0, -14) + headerTitle:SetTextColor(t.title[1], t.title[2], t.title[3]) + + -- Step dots row + local dotHolder = CreateFrame("Frame", nil, panel) + dotHolder:SetWidth(PANEL_W); dotHolder:SetHeight(16) + dotHolder:SetPoint("TOP", panel, "TOP", 0, -34) + + -- Content scroll area + local contentHolder = CreateFrame("Frame", nil, panel) + contentHolder:SetWidth(CONTENT_W); contentHolder:SetHeight(CONTENT_H) + contentHolder:SetPoint("TOPLEFT", panel, "TOPLEFT", 20, -56) + + contentScroll = CreateFrame("ScrollFrame", WN("Scr"), contentHolder) + contentScroll:SetAllPoints(contentHolder) + + contentChild = CreateFrame("Frame", nil, contentScroll) + contentChild:SetWidth(CONTENT_W) + contentChild:SetHeight(CONTENT_H) + contentScroll:SetScrollChild(contentChild) + + contentHolder:EnableMouseWheel(true) + contentHolder:SetScript("OnMouseWheel", function() + local cur = contentScroll:GetVerticalScroll() + local maxS = math.max(0, contentChild:GetHeight() - CONTENT_H) + local nv = cur - arg1 * 30 + if nv < 0 then nv = 0 end + if nv > maxS then nv = maxS end + contentScroll:SetVerticalScroll(nv) + end) + + -- Footer navigation + local footer = CreateFrame("Frame", nil, panel) + footer:SetWidth(PANEL_W - 40); footer:SetHeight(36) + footer:SetPoint("BOTTOM", panel, "BOTTOM", 0, 12) + + btnPrev = MakeButton(footer, "< 上一步", 120, 28, function() SW:GoPrev() end) + btnPrev:SetPoint("LEFT", footer, "LEFT", 0, 0) + + stepLabel = footer:CreateFontString(nil, "OVERLAY") + stepLabel:SetFont(SFrames:GetFont(), 10, "OUTLINE") + stepLabel:SetPoint("CENTER", footer, "CENTER", 0, 0) + stepLabel:SetTextColor(t.dimText[1], t.dimText[2], t.dimText[3]) + + btnNext = MakeButton(footer, "下一步 >", 120, 28, function() SW:GoNext() end) + btnNext:SetPoint("RIGHT", footer, "RIGHT", 0, 0) + + btnSkip = CreateFrame("Button", WN("Skip"), footer) + btnSkip:SetWidth(60); btnSkip:SetHeight(16) + btnSkip:SetPoint("BOTTOMRIGHT", panel, "BOTTOMRIGHT", -14, 4) + local skipFs = btnSkip:CreateFontString(nil, "OVERLAY") + skipFs:SetFont(SFrames:GetFont(), 9, "OUTLINE") + skipFs:SetAllPoints(btnSkip) + skipFs:SetText("跳过全部") + skipFs:SetTextColor(0.55, 0.50, 0.54) + btnSkip:SetScript("OnClick", function() SW:DoSkip() end) + btnSkip:SetScript("OnEnter", function() skipFs:SetTextColor(0.85, 0.75, 0.80) end) + btnSkip:SetScript("OnLeave", function() skipFs:SetTextColor(0.55, 0.50, 0.54) end) + + -- Store dot holder for later + panel._dotHolder = dotHolder +end + +-------------------------------------------------------------------------------- +-- Step list & dot creation +-------------------------------------------------------------------------------- + +local function BuildStepList() + stepList = {} + table.insert(stepList, { id = "welcome", title = "欢迎", builder = BuildWelcome }) + table.insert(stepList, { id = "theme", title = "主题与皮肤", builder = BuildTheme }) + table.insert(stepList, { id = "chat", title = "聊天与翻译", builder = BuildChat }) + table.insert(stepList, { id = "framesbars", title = "框体与动作条", builder = BuildFramesAndBars }) + table.insert(stepList, { id = "extras", title = "辅助功能", builder = BuildExtras }) + + -- Hardcore: only if player is hardcore + local isHC = false + if C_TurtleWoW and C_TurtleWoW.IsHardcore then + local ok, val = pcall(C_TurtleWoW.IsHardcore, "player") + if ok and val then isHC = true end + end + if isHC then + table.insert(stepList, { id = "hardcore", title = "硬核模式", builder = BuildHardcore }) + end + + table.insert(stepList, { id = "complete", title = "完成", builder = BuildComplete }) + + -- Create step pages (empty frames, lazily populated) + for _, pg in ipairs(stepPages) do if pg then pg:Hide() end end + stepPages = {} + for i = 1, table.getn(stepList) do + local pg = CreateFrame("Frame", nil, contentChild) + pg:SetWidth(CONTENT_W) + pg:SetHeight(CONTENT_H) + pg:SetPoint("TOPLEFT", contentChild, "TOPLEFT", 0, 0) + pg:Hide() + pg._built = false + stepPages[i] = pg + end + + -- Create dots + for _, d in ipairs(stepDots) do if d then d:Hide() end end + stepDots = {} + local totalDots = table.getn(stepList) + local dotSpacing = 18 + local startX = (PANEL_W - totalDots * dotSpacing) / 2 + for i = 1, totalDots do + local dot = CreateFrame("Frame", nil, panel._dotHolder) + dot:SetWidth(8); dot:SetHeight(8) + dot:SetPoint("TOPLEFT", panel._dotHolder, "TOPLEFT", startX + (i-1)*dotSpacing, -4) + dot:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 1, + insets = { left = 0, right = 0, top = 0, bottom = 0 }, + }) + stepDots[i] = dot + end +end + +-------------------------------------------------------------------------------- +-- Navigation +-------------------------------------------------------------------------------- + +function SW:RefreshPanelColors() + if not panel then return end + local t = T() + panel:SetBackdropColor(t.panelBg[1], t.panelBg[2], t.panelBg[3], t.panelBg[4]) + panel:SetBackdropBorderColor(t.panelBorder[1], t.panelBorder[2], t.panelBorder[3], t.panelBorder[4]) + if headerTitle then headerTitle:SetTextColor(t.title[1], t.title[2], t.title[3]) end +end + +function SW:GoTo(idx) + if idx < 1 or idx > table.getn(stepList) then return end + currentStep = idx + + -- Lazily build + local pg = stepPages[idx] + if not pg._built then + pg._built = true + local ok, err = pcall(stepList[idx].builder, pg) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444[Nanami-UI] Wizard step error ("..stepList[idx].id.."): "..tostring(err).."|r") + end + end + + -- Show/hide pages + for i = 1, table.getn(stepPages) do + if i == idx then stepPages[i]:Show() else stepPages[i]:Hide() end + end + + -- Set scroll child height and reset scroll + contentChild:SetHeight(math.max(pg:GetHeight(), CONTENT_H)) + contentScroll:SetVerticalScroll(0) + + -- Update header + headerTitle:SetText(stepList[idx].title) + + -- Update dots + local t = T() + for i = 1, table.getn(stepDots) do + local d = stepDots[i] + if i == idx then + d:SetBackdropColor(t.accentLight[1], t.accentLight[2], t.accentLight[3], 1) + d:SetBackdropBorderColor(t.accentLight[1], t.accentLight[2], t.accentLight[3], 1) + elseif i < idx then + d:SetBackdropColor(t.accent[1], t.accent[2], t.accent[3], 0.5) + d:SetBackdropBorderColor(t.accent[1], t.accent[2], t.accent[3], 0.5) + else + d:SetBackdropColor(0.3, 0.3, 0.3, 0.6) + d:SetBackdropBorderColor(0.3, 0.3, 0.3, 0.6) + end + end + + -- Update step label + stepLabel:SetText(idx .. " / " .. table.getn(stepList)) + + -- Navigation buttons + local isFirst = (idx == 1) + local isLast = (idx == table.getn(stepList)) + local isWelcome = (stepList[idx].id == "welcome") + local isDone = (stepList[idx].id == "complete") + + if isWelcome then + btnPrev:Hide(); btnNext:Hide(); btnSkip:Hide(); stepLabel:SetText("") + elseif isDone then + btnPrev:Show(); btnNext:Hide(); btnSkip:Hide() + else + btnPrev:Show(); btnNext:Show(); btnSkip:Show() + if isFirst then btnPrev:Hide() end + end +end + +function SW:GoNext() + if currentStep < table.getn(stepList) then + self:GoTo(currentStep + 1) + end +end + +function SW:GoPrev() + if currentStep > 1 then + self:GoTo(currentStep - 1) + end +end + +function SW:DoSkip() + if runMode == "rerun" then + self:Hide() + return + end + -- First-run: apply defaults + if not SFramesDB then SFramesDB = {} end + SFramesDB.setupComplete = true + self:Hide() + if completeCb then completeCb() end +end + +function SW:DoComplete() + local ok, err = pcall(ApplyChoices) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444[Nanami-UI] Wizard apply error: "..tostring(err).."|r") + if not SFramesDB then SFramesDB = {} end + SFramesDB.setupComplete = true + end + self:Hide() + ReloadUI() +end + +-------------------------------------------------------------------------------- +-- Public API +-------------------------------------------------------------------------------- + +function SW:Show(callback, mode) + local ok, err = pcall(function() + runMode = mode or "firstrun" + completeCb = callback + + if runMode == "rerun" then + choices = GetCurrentChoices() + else + choices = GetDefaultChoices() + end + + EnsureWizardFrame() + BuildStepList() + + overlay:Show() + overlay:Raise() + + self:GoTo(1) + end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444[Nanami-UI] Setup wizard failed: "..tostring(err).."|r") + if not SFramesDB then SFramesDB = {} end + SFramesDB.setupComplete = true + if callback then callback() end + end +end + +function SW:Hide() + if overlay then overlay:Hide() end +end diff --git a/SocialUI.lua b/SocialUI.lua new file mode 100644 index 0000000..dac22c1 --- /dev/null +++ b/SocialUI.lua @@ -0,0 +1,2331 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Social UI (SocialUI.lua) +-- Replaces FriendsFrame with modern rounded UI +-- Tabs: Friends/Ignore, Who, Guild, Raid +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.SocialUI = {} +local SUI = SFrames.SocialUI +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme (Pink Cat-Paw) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + onlineText = { 0.30, 1.0, 0.30 }, + offlineText = { 0.50, 0.45, 0.48 }, +}) + +local CLASS_COLORS = { + ["WARRIOR"] = { 0.78, 0.61, 0.43 }, + ["MAGE"] = { 0.41, 0.80, 0.94 }, + ["ROGUE"] = { 1.00, 0.96, 0.41 }, + ["DRUID"] = { 1.00, 0.49, 0.04 }, + ["HUNTER"] = { 0.67, 0.83, 0.45 }, + ["SHAMAN"] = { 0.14, 0.35, 1.00 }, + ["PRIEST"] = { 1.00, 1.00, 1.00 }, + ["WARLOCK"] = { 0.58, 0.51, 0.79 }, + ["PALADIN"] = { 0.96, 0.55, 0.73 }, +} + +-- Reverse lookup: localized class name -> English key +local CLASS_NAME_TO_EN = {} +local function BuildClassReverseLookup() + -- Try WoW global tables first + if LOCALIZED_CLASS_NAMES_MALE then + for en, loc in pairs(LOCALIZED_CLASS_NAMES_MALE) do + CLASS_NAME_TO_EN[loc] = en + end + end + if LOCALIZED_CLASS_NAMES_FEMALE then + for en, loc in pairs(LOCALIZED_CLASS_NAMES_FEMALE) do + CLASS_NAME_TO_EN[loc] = en + end + end + -- Hardcoded Chinese fallback + local zhMap = { + ["战士"] = "WARRIOR", ["法师"] = "MAGE", ["盗贼"] = "ROGUE", + ["德鲁伊"] = "DRUID", ["猎人"] = "HUNTER", ["萨满祭司"] = "SHAMAN", + ["牧师"] = "PRIEST", ["术士"] = "WARLOCK", ["圣骑士"] = "PALADIN", + } + for loc, en in pairs(zhMap) do + if not CLASS_NAME_TO_EN[loc] then + CLASS_NAME_TO_EN[loc] = en + end + end + -- Also add English names themselves + for en, _ in pairs(CLASS_COLORS) do + CLASS_NAME_TO_EN[en] = en + CLASS_NAME_TO_EN[string.lower(en)] = en + end +end + +local CLASS_ICON_PATH = "Interface\\AddOns\\Nanami-UI\\img\\UI-Classes-Circles" +local CLASS_ICON_TCOORDS = { + ["WARRIOR"] = { 0, 0.25, 0, 0.25 }, + ["MAGE"] = { 0.25, 0.49609375, 0, 0.25 }, + ["ROGUE"] = { 0.49609375, 0.7421875, 0, 0.25 }, + ["DRUID"] = { 0.7421875, 0.98828125, 0, 0.25 }, + ["HUNTER"] = { 0, 0.25, 0.25, 0.5 }, + ["SHAMAN"] = { 0.25, 0.49609375, 0.25, 0.5 }, + ["PRIEST"] = { 0.49609375, 0.7421875, 0.25, 0.5 }, + ["WARLOCK"] = { 0.7421875, 0.98828125, 0.25, 0.5 }, + ["PALADIN"] = { 0, 0.25, 0.5, 0.75 }, +} + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local FRAME_W = 380 +local FRAME_H = 455 +local HEADER_H = 30 +local TAB_BAR_H = 26 +local SIDE_PAD = 10 +local CONTENT_W = FRAME_W - SIDE_PAD * 2 +local ROW_H = 22 +local BOTTOM_H = 30 +local SCROLL_STEP = 22 + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local MainFrame = nil +local mainTabs = {} +local pages = {} +local currentMainTab = 1 +local initialized = false + +local friendRows = {} +local ignoreRows = {} +local whoRows = {} +local guildRows = {} +local raidSlots = {} +local selectedFriend = nil +local selectedWho = nil +local selectedGuild = nil +local friendSubTab = "friends" +local guildViewMode = "player" +local guildHideOffline = false +local guildSortField = "name" +local guildSortAsc = true +local friendSearchText = "" +local guildSearchText = "" +local origShowFriendsAPI = nil + +local widgetId = 0 +local function NextName(p) + widgetId = widgetId + 1 + return "SFramesSocial" .. (p or "") .. tostring(widgetId) +end + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or T.panelBg + local bd = borderColor or T.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function SetPixelBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + local bg = bgColor or T.slotBg + local bd = borderColor or T.slotBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function SetRowNormal(frame) + SetPixelBackdrop(frame, T.rowNormal, T.rowNormalBd) +end + +local function AddSelHighlight(row) + local sb = row:CreateTexture(nil, "ARTWORK") + sb:SetTexture("Interface\\Buttons\\WHITE8X8") + sb:SetAllPoints(row) + sb:SetVertexColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.35) + sb:Hide(); row._selBg = sb + + local sg = row:CreateTexture(nil, "ARTWORK") + sg:SetTexture("Interface\\Buttons\\WHITE8X8") + sg:SetWidth(4) + sg:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0) + sg:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + sg:SetVertexColor(1, 0.65, 0.85, 1) + sg:Hide(); row._selGlow = sg + + local st = row:CreateTexture(nil, "OVERLAY") + st:SetTexture("Interface\\Buttons\\WHITE8X8") + st:SetHeight(1) + st:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0) + st:SetPoint("TOPRIGHT", row, "TOPRIGHT", 0, 0) + st:SetVertexColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.8) + st:Hide(); row._selTop = st + + local sbo = row:CreateTexture(nil, "OVERLAY") + sbo:SetTexture("Interface\\Buttons\\WHITE8X8") + sbo:SetHeight(1) + sbo:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + sbo:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0) + sbo:SetVertexColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.8) + sbo:Hide(); row._selBot = sbo +end + +local function ShowSelHighlight(row) + if row._selBg then row._selBg:Show() end + if row._selGlow then row._selGlow:Show() end + if row._selTop then row._selTop:Show() end + if row._selBot then row._selBot:Show() end +end + +local function HideSelHighlight(row) + if row._selBg then row._selBg:Hide() end + if row._selGlow then row._selGlow:Hide() end + if row._selTop then row._selTop:Hide() end + if row._selBot then row._selBot:Hide() end +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.6) + s:SetBackdropBorderColor(0, 0, 0, 0.45) + return s +end + +local function MakeFS(parent, size, justifyH, color) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), size or 11, "OUTLINE") + fs:SetJustifyH(justifyH or "LEFT") + local c = color or T.nameText + fs:SetTextColor(c[1], c[2], c[3]) + return fs +end + +local function MakeSep(parent, y) + local sep = parent:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", parent, "TOPLEFT", 0, y) + sep:SetPoint("TOPRIGHT", parent, "TOPRIGHT", 0, y) + return sep +end + +local function MakeButton(parent, text, w, h) + local btn = CreateFrame("Button", NextName("Btn"), parent) + btn:SetWidth(w or 80) + btn:SetHeight(h or 22) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + local fs = MakeFS(btn, 11, "CENTER", T.btnText) + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text or "") + btn.text = fs + btn:SetScript("OnEnter", function() + SetRoundBackdrop(this, T.btnHoverBg, T.tabActiveBorder) + this.text:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end) + btn:SetScript("OnLeave", function() + SetRoundBackdrop(this, T.btnBg, T.btnBorder) + this.text:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end) + return btn +end + +local function MakeEditBox(parent, w, h) + local box = CreateFrame("EditBox", NextName("Edit"), parent) + box:SetWidth(w or 200) + box:SetHeight(h or 22) + box:SetFont(GetFont(), 11, "OUTLINE") + box:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + box:SetAutoFocus(false) + box:SetMaxLetters(256) + SetPixelBackdrop(box, T.inputBg, T.inputBorder) + box:SetTextInsets(6, 6, 0, 0) + box:SetScript("OnEscapePressed", function() this:ClearFocus() end) + return box +end + +local customPopup = nil +local function ShowCustomPopup(title, hasInput, onAccept, onCancel) + if not customPopup then + local f = CreateFrame("Frame", "SFramesSocialPopup", UIParent) + f:SetWidth(280) + f:SetHeight(120) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 80) + f:SetFrameStrata("DIALOG") + f:SetFrameLevel(100) + SetRoundBackdrop(f, T.panelBg, T.panelBorder) + CreateShadow(f) + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + local titleFS = MakeFS(f, 12, "CENTER", T.headerText) + titleFS:SetPoint("TOP", f, "TOP", 0, -10) + f.titleFS = titleFS + + local editBox = CreateFrame("EditBox", "SFramesSocialPopupEdit", f) + editBox:SetWidth(230) + editBox:SetHeight(24) + editBox:SetPoint("TOP", titleFS, "BOTTOM", 0, -10) + editBox:SetFont(GetFont(), 11, "OUTLINE") + editBox:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + editBox:SetAutoFocus(false) + editBox:SetMaxLetters(64) + SetRoundBackdrop(editBox, T.inputBg, T.inputBorder) + editBox:SetTextInsets(8, 8, 4, 4) + editBox:SetScript("OnEscapePressed", function() + this:ClearFocus() + f:Hide() + end) + f.editBox = editBox + + local acceptBtn = MakeButton(f, "确定", 100, 24) + acceptBtn:SetPoint("BOTTOMRIGHT", f, "BOTTOM", -4, 10) + f.acceptBtn = acceptBtn + + local cancelBtn = MakeButton(f, "取消", 100, 24) + cancelBtn:SetPoint("BOTTOMLEFT", f, "BOTTOM", 4, 10) + cancelBtn:SetScript("OnClick", function() + f:Hide() + end) + f.cancelBtn = cancelBtn + + f:Hide() + customPopup = f + end + + customPopup.titleFS:SetText(title or "") + customPopup.editBox:SetText("") + + if hasInput then + customPopup.editBox:Show() + customPopup:SetHeight(120) + else + customPopup.editBox:Hide() + customPopup:SetHeight(80) + end + + customPopup.acceptBtn:SetScript("OnClick", function() + local text = customPopup.editBox:GetText() + customPopup:Hide() + if onAccept then onAccept(text) end + end) + + customPopup.editBox:SetScript("OnEnterPressed", function() + local text = customPopup.editBox:GetText() + customPopup:Hide() + if onAccept then onAccept(text) end + end) + + customPopup:Show() + if hasInput then + customPopup.editBox:SetFocus() + end +end + +local function GetClassEN(localizedName) + if not localizedName then return nil end + return CLASS_NAME_TO_EN[localizedName] or CLASS_NAME_TO_EN[string.upper(localizedName)] +end + +local function GetClassColor(classEN) + if not classEN then return T.nameText end + local c = CLASS_COLORS[string.upper(classEN)] + if c then return c end + return T.nameText +end + +local function CreateClassIcon(parent, size) + local sz = size or 16 + local icon = parent:CreateTexture(nil, "OVERLAY") + icon:SetTexture(CLASS_ICON_PATH) + icon:SetWidth(sz) + icon:SetHeight(sz) + return icon +end + +local function SetClassIcon(icon, classEN) + if not classEN then + icon:Hide() + return + end + local upper = string.upper(classEN) + local coords = CLASS_ICON_TCOORDS[upper] + if coords then + icon:SetTexCoord(coords[1], coords[2], coords[3], coords[4]) + icon:SetVertexColor(1, 1, 1) + icon:Show() + else + icon:Hide() + end +end + +-------------------------------------------------------------------------------- +-- Scroll Frame Helper +-------------------------------------------------------------------------------- +local function CreateScrollArea(parent, w, h) + local container = CreateFrame("Frame", nil, parent) + container:SetWidth(w) + container:SetHeight(h) + + local scrollFrame = CreateFrame("ScrollFrame", NextName("Scroll"), container) + scrollFrame:SetWidth(w) + scrollFrame:SetHeight(h) + scrollFrame:SetAllPoints(container) + + local child = CreateFrame("Frame", nil, scrollFrame) + child:SetWidth(w) + child:SetHeight(1) + scrollFrame:SetScrollChild(child) + + local offset = 0 + local maxOffset = 0 + + container.SetContentHeight = function(self, ch) + child:SetHeight(ch) + maxOffset = math.max(0, ch - h) + if offset > maxOffset then + offset = maxOffset + scrollFrame:SetVerticalScroll(offset) + end + end + + container.Reset = function(self) + offset = 0 + scrollFrame:SetVerticalScroll(0) + end + + local function DoScroll(delta) + offset = offset - delta * SCROLL_STEP + if offset < 0 then offset = 0 end + if offset > maxOffset then offset = maxOffset end + scrollFrame:SetVerticalScroll(offset) + end + + scrollFrame:EnableMouseWheel(true) + scrollFrame:SetScript("OnMouseWheel", function() + DoScroll(arg1 or 0) + end) + container:EnableMouseWheel(true) + container:SetScript("OnMouseWheel", function() + DoScroll(arg1 or 0) + end) + + container.child = child + container.scrollFrame = scrollFrame + return container +end + +-------------------------------------------------------------------------------- +-- Hide Blizzard FriendsFrame +-------------------------------------------------------------------------------- +local origFriendsFrameShow +local function HideBlizzardFriends() + if not FriendsFrame then return end + origFriendsFrameShow = FriendsFrame.Show + FriendsFrame:SetAlpha(0) + FriendsFrame:EnableMouse(false) + FriendsFrame:ClearAllPoints() + FriendsFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 2000, 2000) + FriendsFrame.Show = function() end +end + +-------------------------------------------------------------------------------- +-- Tab 1: Friends / Ignore +-------------------------------------------------------------------------------- +local function BuildFriendsPage(page) + local subTabFrame = CreateFrame("Frame", nil, page) + subTabFrame:SetHeight(16) + subTabFrame:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + subTabFrame:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, 0) + + local friendsSubBtn = CreateFrame("Button", NextName("SubTab"), subTabFrame) + friendsSubBtn:SetWidth(50) + friendsSubBtn:SetHeight(16) + friendsSubBtn:SetPoint("LEFT", subTabFrame, "LEFT", 0, 0) + local fsBtnText = MakeFS(friendsSubBtn, 10, "CENTER", T.tabActiveText) + fsBtnText:SetPoint("CENTER", 0, 0) + fsBtnText:SetText("好友") + friendsSubBtn.text = fsBtnText + friendsSubBtn:SetScript("OnEnter", function() + if friendSubTab ~= "friends" then + this.text:SetTextColor(1, 1, 1) + end + end) + friendsSubBtn:SetScript("OnLeave", function() + if friendSubTab ~= "friends" then + this.text:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end + end) + page.friendsSubBtn = friendsSubBtn + + local ignoreSubBtn = CreateFrame("Button", NextName("SubTab"), subTabFrame) + ignoreSubBtn:SetWidth(50) + ignoreSubBtn:SetHeight(16) + ignoreSubBtn:SetPoint("LEFT", friendsSubBtn, "RIGHT", 6, 0) + local igBtnText = MakeFS(ignoreSubBtn, 10, "CENTER", T.tabText) + igBtnText:SetPoint("CENTER", 0, 0) + igBtnText:SetText("屏蔽") + ignoreSubBtn.text = igBtnText + ignoreSubBtn:SetScript("OnEnter", function() + if friendSubTab ~= "ignore" then + this.text:SetTextColor(1, 1, 1) + end + end) + ignoreSubBtn:SetScript("OnLeave", function() + if friendSubTab ~= "ignore" then + this.text:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + end + end) + page.ignoreSubBtn = ignoreSubBtn + + -- Underline indicator for active sub-tab + local subIndicator = friendsSubBtn:CreateTexture(nil, "OVERLAY") + subIndicator:SetHeight(2) + subIndicator:SetPoint("BOTTOMLEFT", friendsSubBtn, "BOTTOMLEFT", 4, 0) + subIndicator:SetPoint("BOTTOMRIGHT", friendsSubBtn, "BOTTOMRIGHT", -4, 0) + subIndicator:SetTexture(1, 1, 1, 1) + subIndicator:SetVertexColor(T.tabActiveBorder[1], T.tabActiveBorder[2], T.tabActiveBorder[3], 0.8) + page.subIndicator = subIndicator + + -- Friend search bar + local friendSearchBar = CreateFrame("Frame", nil, page) + friendSearchBar:SetHeight(20) + friendSearchBar:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -18) + friendSearchBar:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, -18) + page.friendSearchBar = friendSearchBar + + local searchLabel = MakeFS(friendSearchBar, 9, "LEFT", T.dimText) + searchLabel:SetPoint("LEFT", friendSearchBar, "LEFT", 2, 0) + searchLabel:SetText("搜索:") + + local friendSearchBox = MakeEditBox(friendSearchBar, CONTENT_W - 36, 18) + friendSearchBox:SetPoint("LEFT", searchLabel, "RIGHT", 4, 0) + friendSearchBox:SetScript("OnTextChanged", function() + friendSearchText = this:GetText() or "" + SUI:UpdateFriendsList() + end) + friendSearchBox:SetScript("OnEnterPressed", function() this:ClearFocus() end) + friendSearchBox:SetScript("OnEscapePressed", function() + this:SetText("") + this:ClearFocus() + end) + page.friendSearchBox = friendSearchBox + + -- Friends list + local friendsArea = CreateFrame("Frame", nil, page) + friendsArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -40) + friendsArea:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, BOTTOM_H) + page.friendsArea = friendsArea + + local fScroll = CreateScrollArea(friendsArea, CONTENT_W, FRAME_H - HEADER_H - TAB_BAR_H - 40 - BOTTOM_H - 16) + fScroll:SetPoint("TOPLEFT", friendsArea, "TOPLEFT", 0, 0) + page.fScroll = fScroll + + local MAX_FRIEND_ROWS = 50 + for idx = 1, MAX_FRIEND_ROWS do + local rowIdx = idx + local row = CreateFrame("Button", NextName("FR"), fScroll.child) + row:SetWidth(CONTENT_W - 4) + row:SetHeight(ROW_H) + row:SetPoint("TOPLEFT", fScroll.child, "TOPLEFT", 2, -((rowIdx - 1) * ROW_H)) + row.rowIndex = rowIdx + SetRowNormal(row) + + local classIcon = CreateClassIcon(row, 16) + classIcon:SetPoint("LEFT", row, "LEFT", 4, 0) + row.classIcon = classIcon + + local nameFS = MakeFS(row, 11, "LEFT", T.nameText) + nameFS:SetPoint("LEFT", classIcon, "RIGHT", 4, 0) + nameFS:SetWidth(120) + row.nameFS = nameFS + + local infoFS = MakeFS(row, 9, "LEFT", T.dimText) + infoFS:SetPoint("LEFT", nameFS, "RIGHT", 4, 0) + infoFS:SetPoint("RIGHT", row, "RIGHT", -4, 0) + row.infoFS = infoFS + + AddSelHighlight(row) + row:RegisterForClicks("LeftButtonUp", "RightButtonUp") + + row:SetScript("OnEnter", function() + SetPixelBackdrop(this, T.slotHover, T.slotSelected) + end) + row:SetScript("OnLeave", function() + if selectedFriend and selectedFriend == this.friendDataIndex then + SetPixelBackdrop(this, T.tabActiveBg, T.tabActiveBorder) + else + SetRowNormal(this) + end + end) + row:SetScript("OnClick", function() + selectedFriend = this.friendDataIndex + if arg1 == "RightButton" and this.friendDataIndex then + SUI:ShowFriendRowMenu(this) + return + end + SUI:UpdateFriendsList() + end) + row:Hide() + friendRows[idx] = row + end + + -- Ignore list + local ignoreArea = CreateFrame("Frame", nil, page) + ignoreArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -20) + ignoreArea:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, BOTTOM_H) + ignoreArea:Hide() + page.ignoreArea = ignoreArea + + local iScroll = CreateScrollArea(ignoreArea, CONTENT_W, FRAME_H - HEADER_H - TAB_BAR_H - 20 - BOTTOM_H - 16) + iScroll:SetPoint("TOPLEFT", ignoreArea, "TOPLEFT", 0, 0) + page.iScroll = iScroll + + local MAX_IGNORE_ROWS = 50 + for idx = 1, MAX_IGNORE_ROWS do + local rowIdx = idx + local row = CreateFrame("Button", NextName("IR"), iScroll.child) + row:SetWidth(CONTENT_W - 4) + row:SetHeight(20) + row:SetPoint("TOPLEFT", iScroll.child, "TOPLEFT", 2, -((rowIdx - 1) * 20)) + row.rowIndex = rowIdx + SetRowNormal(row) + + local nameFS = MakeFS(row, 11, "LEFT", T.nameText) + nameFS:SetPoint("LEFT", row, "LEFT", 8, 0) + row.nameFS = nameFS + + row:SetScript("OnEnter", function() + SetPixelBackdrop(this, T.slotHover, T.slotSelected) + end) + row:SetScript("OnLeave", function() + SetRowNormal(this) + end) + row:Hide() + ignoreRows[idx] = row + end + + -- Bottom buttons + local btnBar = CreateFrame("Frame", nil, page) + btnBar:SetHeight(BOTTOM_H) + btnBar:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 0, 0) + btnBar:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + page.btnBar = btnBar + + local addBtn = MakeButton(btnBar, "添加好友", 80, 22) + addBtn:SetPoint("BOTTOMLEFT", btnBar, "BOTTOMLEFT", 0, 2) + addBtn:SetScript("OnClick", function() + if friendSubTab == "friends" then + ShowCustomPopup("添加好友", true, function(name) + if name and name ~= "" then AddFriend(name) end + end) + else + ShowCustomPopup("添加屏蔽", true, function(name) + if name and name ~= "" then AddIgnore(name) end + end) + end + end) + + local removeBtn = MakeButton(btnBar, "删除好友", 80, 22) + removeBtn:SetPoint("LEFT", addBtn, "RIGHT", 4, 0) + removeBtn:SetScript("OnClick", function() + if selectedFriend then RemoveFriend(selectedFriend) end + end) + + local msgBtn = MakeButton(btnBar, "发送信息", 80, 22) + msgBtn:SetPoint("LEFT", removeBtn, "RIGHT", 4, 0) + msgBtn:SetScript("OnClick", function() + if selectedFriend then + local name = GetFriendInfo(selectedFriend) + if name then ChatFrame_SendTell(name) end + end + end) + + local inviteBtn = MakeButton(btnBar, "组队邀请", 80, 22) + inviteBtn:SetPoint("LEFT", msgBtn, "RIGHT", 4, 0) + inviteBtn:SetScript("OnClick", function() + if selectedFriend then + local name = GetFriendInfo(selectedFriend) + if name then InviteByName(name) end + end + end) + + page.addBtn = addBtn + page.removeBtn = removeBtn + page.msgBtn = msgBtn + page.inviteBtn = inviteBtn + + friendsSubBtn:SetScript("OnClick", function() + friendSubTab = "friends" + SUI:UpdateFriendsPage() + end) + ignoreSubBtn:SetScript("OnClick", function() + friendSubTab = "ignore" + SUI:UpdateFriendsPage() + end) +end + +function SUI:UpdateFriendsPage() + local page = pages[1] + if not page then return end + + if friendSubTab == "friends" then + page.friendsArea:Show() + page.friendSearchBar:Show() + page.ignoreArea:Hide() + page.friendsSubBtn.text:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + page.ignoreSubBtn.text:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + page.subIndicator:ClearAllPoints() + page.subIndicator:SetPoint("BOTTOMLEFT", page.friendsSubBtn, "BOTTOMLEFT", 4, 0) + page.subIndicator:SetPoint("BOTTOMRIGHT", page.friendsSubBtn, "BOTTOMRIGHT", -4, 0) + page.subIndicator:Show() + page.addBtn.text:SetText("添加好友") + page.removeBtn.text:SetText("删除好友") + self:UpdateFriendsList() + else + page.friendsArea:Hide() + page.friendSearchBar:Hide() + page.ignoreArea:Show() + page.ignoreSubBtn.text:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + page.friendsSubBtn.text:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + page.subIndicator:ClearAllPoints() + page.subIndicator:SetPoint("BOTTOMLEFT", page.ignoreSubBtn, "BOTTOMLEFT", 4, 0) + page.subIndicator:SetPoint("BOTTOMRIGHT", page.ignoreSubBtn, "BOTTOMRIGHT", -4, 0) + page.subIndicator:Show() + page.addBtn.text:SetText("添加屏蔽") + page.removeBtn.text:SetText("取消屏蔽") + self:UpdateIgnoreList() + end +end + +function SUI:UpdateFriendsList() + local numFriends = GetNumFriends() + local totalH = 0 + local rowIdx = 0 + local searchLower = string.lower(friendSearchText or "") + local hasSearch = searchLower ~= "" + + for i = 1, numFriends do + local name, level, class, area, connected, status = GetFriendInfo(i) + if name then + local match = true + if hasSearch then + match = string.find(string.lower(name), searchLower, 1, true) + if not match and class then + match = string.find(string.lower(class), searchLower, 1, true) + end + if not match and area then + match = string.find(string.lower(area), searchLower, 1, true) + end + end + + if match then + rowIdx = rowIdx + 1 + if rowIdx > 50 then break end + local row = friendRows[rowIdx] + if row then + row.nameFS:SetText(name) + row.friendDataIndex = i + local classEN = GetClassEN(class) + + if connected then + local cc = classEN and GetClassColor(classEN) or T.onlineText + row.nameFS:SetTextColor(cc[1], cc[2], cc[3]) + local info = "" + if level and level > 0 then info = "等级" .. level end + if class then info = info .. " " .. class end + if area then info = info .. " - " .. area end + row.infoFS:SetText(info) + row.infoFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + else + row.nameFS:SetTextColor(T.offlineText[1], T.offlineText[2], T.offlineText[3]) + row.infoFS:SetText("离线") + row.infoFS:SetTextColor(T.offlineText[1], T.offlineText[2], T.offlineText[3]) + end + + SetClassIcon(row.classIcon, classEN) + + if selectedFriend == i then + SetPixelBackdrop(row, T.tabActiveBg, T.tabActiveBorder) + ShowSelHighlight(row) + row.nameFS:SetTextColor(1, 1, 1) + else + SetRowNormal(row) + HideSelHighlight(row) + end + + row:Show() + totalH = totalH + ROW_H + end + end + end + end + + for i = rowIdx + 1, 50 do + if friendRows[i] then friendRows[i]:Hide() end + end + + if pages[1] and pages[1].fScroll then + pages[1].fScroll:SetContentHeight(totalH + 4) + end +end + +function SUI:UpdateIgnoreList() + local numIgnores = GetNumIgnores() + local totalH = 0 + for i = 1, 50 do + local row = ignoreRows[i] + if not row then break end + if i <= numIgnores then + local name = GetIgnoreName(i) + if name then + row.nameFS:SetText(name) + row:Show() + totalH = totalH + 20 + else + row:Hide() + end + else + row:Hide() + end + end + if pages[1] and pages[1].iScroll then + pages[1].iScroll:SetContentHeight(totalH + 4) + end +end + +function SUI:ShowFriendRowMenu(row) + local di = row.friendDataIndex + if not di then return end + local name, level, class, area, connected, status = GetFriendInfo(di) + if not name then return end + + if not SUI.friendDropDown then + SUI.friendDropDown = CreateFrame("Frame", "SFramesSocialFriendDD", UIParent, "UIDropDownMenuTemplate") + SUI.friendDropDown.displayMode = "MENU" + SUI.friendDropDown.initialize = function() + local fd = SUI.friendDropDown + local fName = fd.friendName + local fOnline = fd.friendOnline + if not fName then return end + + local info = {} + info.text = fName + info.isTitle = 1 + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + + if fOnline then + info = {} + info.text = "密语" + info.notCheckable = 1 + info.func = function() ChatFrame_SendTell(fName) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "邀请组队" + info.notCheckable = 1 + info.func = function() InviteByName(fName) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "观察" + info.notCheckable = 1 + info.func = function() + if TargetByName then TargetByName(fName) end + if UnitExists("target") and UnitName("target") == fName then + InspectUnit("target") + end + end + UIDropDownMenu_AddButton(info) + end + + info = {} + info.text = "删除好友" + info.notCheckable = 1 + info.func = function() + local idx = fd.friendIdx + if idx then RemoveFriend(idx) end + end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "取消" + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + end + end + + SUI.friendDropDown.friendName = name + SUI.friendDropDown.friendOnline = connected + SUI.friendDropDown.friendIdx = di + ToggleDropDownMenu(1, nil, SUI.friendDropDown, "cursor") +end + +-------------------------------------------------------------------------------- +-- Tab 2: Who +-------------------------------------------------------------------------------- +local function BuildWhoPage(page) + local searchBar = CreateFrame("Frame", nil, page) + searchBar:SetHeight(26) + searchBar:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + searchBar:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, 0) + + local editBox = MakeEditBox(searchBar, CONTENT_W - 70, 22) + editBox:SetPoint("LEFT", searchBar, "LEFT", 0, 0) + editBox:SetScript("OnEnterPressed", function() + local text = this:GetText() + if text and text ~= "" then SendWho(text) end + this:ClearFocus() + end) + page.editBox = editBox + + local searchBtn = MakeButton(searchBar, "搜索", 64, 22) + searchBtn:SetPoint("LEFT", editBox, "RIGHT", 4, 0) + searchBtn:SetScript("OnClick", function() + local text = page.editBox:GetText() + if text and text ~= "" then SendWho(text) end + end) + + -- Column headers + local colFrame = CreateFrame("Frame", nil, page) + colFrame:SetHeight(18) + colFrame:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -28) + colFrame:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, -28) + + local cols = { { "名称", 0.30 }, { "等级", 0.12 }, { "职业", 0.18 }, { "区域", 0.40 } } + local cx = 0 + for _, col in ipairs(cols) do + local fs = MakeFS(colFrame, 10, "LEFT", T.colHeader) + fs:SetPoint("TOPLEFT", colFrame, "TOPLEFT", cx, 0) + fs:SetWidth(CONTENT_W * col[2]) + fs:SetText(col[1]) + cx = cx + CONTENT_W * col[2] + end + MakeSep(page, -46) + + -- Results scroll + local listArea = CreateFrame("Frame", nil, page) + listArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -48) + listArea:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, BOTTOM_H) + + local wScroll = CreateScrollArea(listArea, CONTENT_W, FRAME_H - HEADER_H - TAB_BAR_H - 48 - BOTTOM_H - 16) + wScroll:SetPoint("TOPLEFT", listArea, "TOPLEFT", 0, 0) + page.wScroll = wScroll + + local MAX_WHO_ROWS = 50 + for idx = 1, MAX_WHO_ROWS do + local rowIdx = idx + local row = CreateFrame("Button", NextName("WR"), wScroll.child) + row:SetWidth(CONTENT_W - 4) + row:SetHeight(20) + row:SetPoint("TOPLEFT", wScroll.child, "TOPLEFT", 2, -((rowIdx - 1) * 20)) + row.rowIndex = rowIdx + SetRowNormal(row) + + local nameFS = MakeFS(row, 10, "LEFT", T.nameText) + nameFS:SetPoint("LEFT", row, "LEFT", 4, 0) + nameFS:SetWidth(CONTENT_W * 0.30 - 8) + row.nameFS = nameFS + + local lvlFS = MakeFS(row, 10, "LEFT", T.bodyText) + lvlFS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.30, 0) + lvlFS:SetWidth(CONTENT_W * 0.12) + row.lvlFS = lvlFS + + local classFS = MakeFS(row, 10, "LEFT", T.bodyText) + classFS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.42, 0) + classFS:SetWidth(CONTENT_W * 0.18) + row.classFS = classFS + + local zoneFS = MakeFS(row, 10, "LEFT", T.dimText) + zoneFS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.60, 0) + zoneFS:SetPoint("RIGHT", row, "RIGHT", -4, 0) + row.zoneFS = zoneFS + + AddSelHighlight(row) + row:SetScript("OnEnter", function() + SetPixelBackdrop(this, T.slotHover, T.slotSelected) + end) + row:SetScript("OnLeave", function() + if selectedWho == this.rowIndex then + SetPixelBackdrop(this, T.tabActiveBg, T.tabActiveBorder) + else + SetRowNormal(this) + end + end) + row:SetScript("OnClick", function() + selectedWho = this.rowIndex + SUI:UpdateWhoList() + end) + row:Hide() + whoRows[idx] = row + end + + -- Totals + local totalFS = MakeFS(page, 10, "LEFT", T.dimText) + totalFS:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 0, BOTTOM_H + 2) + page.totalFS = totalFS + + -- Bottom buttons + local btnBar = CreateFrame("Frame", nil, page) + btnBar:SetHeight(BOTTOM_H) + btnBar:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 0, 0) + btnBar:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + + local invBtn = MakeButton(btnBar, "组队邀请", 80, 22) + invBtn:SetPoint("BOTTOMLEFT", btnBar, "BOTTOMLEFT", 0, 2) + invBtn:SetScript("OnClick", function() + if selectedWho then + local name = GetWhoInfo(selectedWho) + if name then InviteByName(name) end + end + end) + + local addFriendBtn = MakeButton(btnBar, "添加好友", 80, 22) + addFriendBtn:SetPoint("LEFT", invBtn, "RIGHT", 4, 0) + addFriendBtn:SetScript("OnClick", function() + if selectedWho then + local name = GetWhoInfo(selectedWho) + if name then AddFriend(name) end + end + end) + + local whisperBtn = MakeButton(btnBar, "密语", 80, 22) + whisperBtn:SetPoint("LEFT", addFriendBtn, "RIGHT", 4, 0) + whisperBtn:SetScript("OnClick", function() + if selectedWho then + local name = GetWhoInfo(selectedWho) + if name then ChatFrame_SendTell(name) end + end + end) +end + +function SUI:UpdateWhoList() + local numWho, totalCount = GetNumWhoResults() + local totalH = 0 + for i = 1, 50 do + local row = whoRows[i] + if not row then break end + if i <= numWho then + local name, guild, level, race, class, zone, classEN = GetWhoInfo(i) + if name then + if not classEN or classEN == "" then + classEN = GetClassEN(class) + end + local cc = GetClassColor(classEN) + row.nameFS:SetText(name) + row.nameFS:SetTextColor(cc[1], cc[2], cc[3]) + row.lvlFS:SetText(level or "") + row.classFS:SetText(class or "") + row.classFS:SetTextColor(cc[1], cc[2], cc[3]) + row.zoneFS:SetText(zone or "") + + if selectedWho == i then + SetPixelBackdrop(row, T.tabActiveBg, T.tabActiveBorder) + ShowSelHighlight(row) + row.nameFS:SetTextColor(1, 1, 1) + else + SetRowNormal(row) + HideSelHighlight(row) + end + row:Show() + totalH = totalH + 20 + else + row:Hide() + end + else + row:Hide() + end + end + if pages[2] and pages[2].wScroll then + pages[2].wScroll:SetContentHeight(totalH + 4) + end + if pages[2] and pages[2].totalFS then + pages[2].totalFS:SetText((numWho or 0) .. " 个结果 (共 " .. (totalCount or 0) .. " 人)") + end +end + +-------------------------------------------------------------------------------- +-- Tab 3: Guild +-------------------------------------------------------------------------------- +local function BuildGuildPage(page) + local motdFrame = CreateFrame("Frame", nil, page) + motdFrame:SetHeight(36) + motdFrame:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + motdFrame:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, 0) + SetPixelBackdrop(motdFrame, { 0.08, 0.04, 0.06, 0.8 }, T.slotBorder) + + local motdLabel = MakeFS(motdFrame, 9, "LEFT", T.dimText) + motdLabel:SetPoint("TOPLEFT", motdFrame, "TOPLEFT", 6, -2) + motdLabel:SetText("公会公告:") + + local motdText = MakeFS(motdFrame, 10, "LEFT", T.bodyText) + motdText:SetPoint("TOPLEFT", motdLabel, "BOTTOMLEFT", 0, -2) + motdText:SetPoint("RIGHT", motdFrame, "RIGHT", -6, 0) + page.motdText = motdText + + -- Toolbar row: search + filter buttons + local toolBar = CreateFrame("Frame", nil, page) + toolBar:SetHeight(18) + toolBar:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -38) + toolBar:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, -38) + + local gSearchLabel = MakeFS(toolBar, 9, "LEFT", T.dimText) + gSearchLabel:SetPoint("LEFT", toolBar, "LEFT", 0, 0) + gSearchLabel:SetText("搜索:") + + local gSearchBox = MakeEditBox(toolBar, 110, 16) + gSearchBox:SetPoint("LEFT", gSearchLabel, "RIGHT", 2, 0) + gSearchBox:SetFont(GetFont(), 9, "OUTLINE") + gSearchBox:SetScript("OnTextChanged", function() + guildSearchText = this:GetText() or "" + SUI:UpdateGuildList() + end) + gSearchBox:SetScript("OnEnterPressed", function() this:ClearFocus() end) + gSearchBox:SetScript("OnEscapePressed", function() + this:SetText("") + this:ClearFocus() + end) + page.gSearchBox = gSearchBox + + local offlineToggle = MakeButton(toolBar, "隐藏离线", 56, 16) + offlineToggle:SetPoint("TOPRIGHT", toolBar, "TOPRIGHT", 0, 0) + offlineToggle.text:SetFont(GetFont(), 9, "OUTLINE") + offlineToggle:SetScript("OnClick", function() + guildHideOffline = not guildHideOffline + if guildHideOffline then + this.text:SetText("显示离线") + else + this.text:SetText("隐藏离线") + end + SUI:UpdateGuildList() + end) + page.offlineToggle = offlineToggle + + local viewToggle = MakeButton(toolBar, "切换视图", 56, 16) + viewToggle:SetPoint("RIGHT", offlineToggle, "LEFT", -4, 0) + viewToggle.text:SetFont(GetFont(), 9, "OUTLINE") + viewToggle:SetScript("OnClick", function() + if guildViewMode == "player" then guildViewMode = "guild" else guildViewMode = "player" end + SUI:UpdateGuildList() + end) + + -- Column headers + local colFrame = CreateFrame("Frame", nil, page) + colFrame:SetHeight(18) + colFrame:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -56) + colFrame:SetPoint("TOPRIGHT", page, "TOPRIGHT", 0, -56) + page.guildColFrame = colFrame + page.guildColBtns = {} + + MakeSep(page, -74) + + local listArea = CreateFrame("Frame", nil, page) + listArea:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -76) + listArea:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, BOTTOM_H + 14) + + local gScroll = CreateScrollArea(listArea, CONTENT_W, FRAME_H - HEADER_H - TAB_BAR_H - 76 - BOTTOM_H - 14 - 16) + gScroll:SetPoint("TOPLEFT", listArea, "TOPLEFT", 0, 0) + page.gScroll = gScroll + + local MAX_GUILD_ROWS = 100 + for idx = 1, MAX_GUILD_ROWS do + local rowIdx = idx + local row = CreateFrame("Button", NextName("GR"), gScroll.child) + row:SetWidth(CONTENT_W - 4) + row:SetHeight(18) + row:SetPoint("TOPLEFT", gScroll.child, "TOPLEFT", 2, -((rowIdx - 1) * 18)) + row.rowIndex = rowIdx + SetRowNormal(row) + + local classIcon = CreateClassIcon(row, 14) + classIcon:SetPoint("LEFT", row, "LEFT", 2, 0) + row.classIcon = classIcon + + local nameFS = MakeFS(row, 10, "LEFT", T.nameText) + nameFS:SetPoint("LEFT", classIcon, "RIGHT", 3, 0) + nameFS:SetWidth(CONTENT_W * 0.24 - 20) + row.nameFS = nameFS + + local lvlFS = MakeFS(row, 10, "CENTER", T.bodyText) + lvlFS:SetWidth(30) + row.lvlFS = lvlFS + + local col3FS = MakeFS(row, 10, "LEFT", T.dimText) + col3FS:SetWidth(100) + row.col3FS = col3FS + + local col4FS = MakeFS(row, 9, "LEFT", T.dimText) + row.col4FS = col4FS + + local col5FS = MakeFS(row, 9, "LEFT", T.dimText) + row.col5FS = col5FS + + AddSelHighlight(row) + row:RegisterForClicks("LeftButtonUp", "RightButtonUp") + + row:SetScript("OnEnter", function() + SetPixelBackdrop(this, T.slotHover, T.slotSelected) + end) + row:SetScript("OnLeave", function() + if selectedGuild and selectedGuild == this.guildDataIndex then + SetPixelBackdrop(this, T.tabActiveBg, T.tabActiveBorder) + else + SetRowNormal(this) + end + end) + row:SetScript("OnClick", function() + selectedGuild = this.guildDataIndex + if arg1 == "RightButton" and this.guildDataIndex then + SUI:ShowGuildRowMenu(this) + else + SUI:UpdateGuildList() + end + end) + row:Hide() + guildRows[idx] = row + end + + local totalFS = MakeFS(page, 9, "LEFT", T.dimText) + totalFS:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 2, BOTTOM_H + 2) + page.guildTotalFS = totalFS + + local btnBar = CreateFrame("Frame", nil, page) + btnBar:SetHeight(BOTTOM_H) + btnBar:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 0, 0) + btnBar:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + + local invBtn = MakeButton(btnBar, "组队邀请", 80, 22) + invBtn:SetPoint("BOTTOMLEFT", btnBar, "BOTTOMLEFT", 0, 2) + invBtn:SetScript("OnClick", function() + if selectedGuild then + local name, rank, rankIndex, level, class, zone, note, officerNote, online = GetGuildRosterInfo(selectedGuild) + if name and online then InviteByName(name) end + end + end) + + local msgBtn = MakeButton(btnBar, "发送信息", 80, 22) + msgBtn:SetPoint("LEFT", invBtn, "RIGHT", 4, 0) + msgBtn:SetScript("OnClick", function() + if selectedGuild then + local name = GetGuildRosterInfo(selectedGuild) + if name then ChatFrame_SendTell(name) end + end + end) + + local gInviteBtn = MakeButton(btnBar, "邀请入会", 80, 22) + gInviteBtn:SetPoint("LEFT", msgBtn, "RIGHT", 4, 0) + gInviteBtn:SetScript("OnClick", function() + ShowCustomPopup("邀请玩家加入公会", true, function(name) + if name and name ~= "" then + if GuildInvite then + GuildInvite(name) + elseif GuildInviteByName then + GuildInviteByName(name) + else + SendChatMessage(".ginvite " .. name, "GUILD") + end + end + end) + end) + page.gInviteBtn = gInviteBtn + + local gLeaveBtn = MakeButton(btnBar, "退出公会", 80, 22) + gLeaveBtn:SetPoint("LEFT", gInviteBtn, "RIGHT", 4, 0) + gLeaveBtn:SetScript("OnClick", function() + StaticPopup_Show("CONFIRM_GUILD_LEAVE", GetGuildInfo("player")) + end) + page.gLeaveBtn = gLeaveBtn +end + +function SUI:ShowGuildRowMenu(row) + local di = row.guildDataIndex + if not di then return end + local name, rank, rankIndex, level, class, zone, note, officerNote, online = GetGuildRosterInfo(di) + if not name then return end + local isSelf = (name == UnitName("player")) + + if not SUI.guildDropDown then + SUI.guildDropDown = CreateFrame("Frame", "SFramesSocialGuildDD", UIParent, "UIDropDownMenuTemplate") + SUI.guildDropDown.displayMode = "MENU" + SUI.guildDropDown.initialize = function() + local gd = SUI.guildDropDown + local gName = gd.memberName + local gOnline = gd.memberOnline + local gSelf = gd.memberIsSelf + if not gName then return end + + local info = {} + info.text = gName + info.isTitle = 1 + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + + if not gSelf then + if gOnline then + info = {} + info.text = "密语" + info.notCheckable = 1 + info.func = function() ChatFrame_SendTell(gName) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "邀请组队" + info.notCheckable = 1 + info.func = function() InviteByName(gName) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "观察" + info.notCheckable = 1 + info.func = function() + if TargetByName then TargetByName(gName) end + if UnitExists("target") and UnitName("target") == gName then + InspectUnit("target") + end + end + UIDropDownMenu_AddButton(info) + end + + if CanGuildRemove and CanGuildRemove() then + info = {} + info.text = "移出公会" + info.notCheckable = 1 + info.func = function() GuildUninvite(gName) end + UIDropDownMenu_AddButton(info) + end + + if CanGuildPromote and CanGuildPromote() then + info = {} + info.text = "晋升" + info.notCheckable = 1 + info.func = function() GuildPromote(gName) end + UIDropDownMenu_AddButton(info) + end + + if CanGuildDemote and CanGuildDemote() then + info = {} + info.text = "降级" + info.notCheckable = 1 + info.func = function() GuildDemote(gName) end + UIDropDownMenu_AddButton(info) + end + else + info = {} + info.text = "退出公会" + info.notCheckable = 1 + info.func = function() + StaticPopup_Show("CONFIRM_GUILD_LEAVE", GetGuildInfo("player")) + end + UIDropDownMenu_AddButton(info) + end + + info = {} + info.text = "取消" + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + end + end + + SUI.guildDropDown.memberName = name + SUI.guildDropDown.memberOnline = online + SUI.guildDropDown.memberIsSelf = isSelf + ToggleDropDownMenu(1, nil, SUI.guildDropDown, "cursor") +end + +local GUILD_COL_SORT_MAP = { + ["名称"] = "name", + ["等级"] = "level", + ["职业"] = "class", + ["职位"] = "rank", + ["区域"] = "zone", + ["备注"] = "note", + ["状态"] = "status", +} + +local function RebuildGuildColHeaders() + local colFrame = pages[3] and pages[3].guildColFrame + if not colFrame then return end + local old = pages[3].guildColBtns + if old then + for _, btn in ipairs(old) do btn:Hide() end + end + pages[3].guildColBtns = {} + local headers + if guildViewMode == "player" then + headers = { { "名称", 0, 0.24 }, { "等级", 0.24, 0.08 }, { "职业", 0.32, 0.14 }, { "职位", 0.46, 0.18 }, { "区域", 0.64, 0.36 } } + else + headers = { { "名称", 0, 0.30 }, { "职位", 0.30, 0.20 }, { "备注", 0.50, 0.30 }, { "状态", 0.80, 0.20 } } + end + for _, h in ipairs(headers) do + local sortKey = GUILD_COL_SORT_MAP[h[1]] + local btn = CreateFrame("Button", nil, colFrame) + btn:SetHeight(18) + btn:SetPoint("TOPLEFT", colFrame, "TOPLEFT", CONTENT_W * h[2], 0) + btn:SetWidth(CONTENT_W * h[3]) + local fs = MakeFS(btn, 10, "LEFT", T.colHeader) + fs:SetPoint("LEFT", btn, "LEFT", 0, 0) + local arrow = "" + if sortKey and guildSortField == sortKey then + arrow = guildSortAsc and " ▲" or " ▼" + end + fs:SetText(h[1] .. arrow) + btn.headerFS = fs + if sortKey then + btn.sortKey = sortKey + btn:SetScript("OnClick", function() + if guildSortField == this.sortKey then + guildSortAsc = not guildSortAsc + else + guildSortField = this.sortKey + guildSortAsc = true + end + SUI:UpdateGuildList() + end) + btn:SetScript("OnEnter", function() + this.headerFS:SetTextColor(1, 1, 1) + end) + btn:SetScript("OnLeave", function() + this.headerFS:SetTextColor(T.colHeader[1], T.colHeader[2], T.colHeader[3]) + end) + end + table.insert(pages[3].guildColBtns, btn) + end +end + +function SUI:UpdateGuildList() + if not IsInGuild() then + for i = 1, 100 do + if guildRows[i] then guildRows[i]:Hide() end + end + if pages[3] and pages[3].motdText then + pages[3].motdText:SetText("你没有加入公会") + end + if pages[3] and pages[3].gInviteBtn then pages[3].gInviteBtn:Hide() end + if pages[3] and pages[3].gLeaveBtn then pages[3].gLeaveBtn:Hide() end + if pages[3] and pages[3].guildTotalFS then pages[3].guildTotalFS:SetText("") end + return + end + + if SetGuildRosterShowOffline then + SetGuildRosterShowOffline(not guildHideOffline) + end + GuildRoster() + local motd = GetGuildRosterMOTD and GetGuildRosterMOTD() or "" + if pages[3] and pages[3].motdText then + pages[3].motdText:SetText(motd ~= "" and motd or "无公告") + end + + RebuildGuildColHeaders() + + local numTotal, numOnlineRet = GetNumGuildMembers() + numTotal = numTotal or 0 + local totalOnline = 0 + local members = {} + + local searchLower = string.lower(guildSearchText or "") + local hasSearch = searchLower ~= "" + + for i = 1, numTotal do + local name, rank, rankIndex, level, class, zone, note, officerNote, online, status, classEN = GetGuildRosterInfo(i) + if name then + if online then totalOnline = totalOnline + 1 end + local match = true + if hasSearch then + match = string.find(string.lower(name), searchLower, 1, true) + if not match and class then + match = string.find(string.lower(class), searchLower, 1, true) + end + if not match and rank then + match = string.find(string.lower(rank), searchLower, 1, true) + end + if not match and zone then + match = string.find(string.lower(zone), searchLower, 1, true) + end + end + if match then + if not classEN or classEN == "" then + classEN = GetClassEN(class) + end + table.insert(members, { + idx = i, name = name, rank = rank, rankIndex = rankIndex or 99, + level = level or 0, class = class or "", classEN = classEN, + zone = zone or "", note = note or "", officerNote = officerNote or "", + online = online, status = status, + }) + end + end + end + + local sf = guildSortField + local asc = guildSortAsc + table.sort(members, function(a, b) + local va, vb + if sf == "name" then + va, vb = (a.name or ""), (b.name or "") + elseif sf == "level" then + va, vb = (a.level or 0), (b.level or 0) + elseif sf == "class" then + va, vb = (a.class or ""), (b.class or "") + elseif sf == "rank" then + va, vb = (a.rankIndex or 99), (b.rankIndex or 99) + elseif sf == "zone" then + va, vb = (a.zone or ""), (b.zone or "") + elseif sf == "note" then + va, vb = (a.note or ""), (b.note or "") + elseif sf == "status" then + local sa = a.online and 0 or 1 + local sb = b.online and 0 or 1 + va, vb = sa, sb + else + va, vb = (a.name or ""), (b.name or "") + end + if va == vb then + return (a.name or "") < (b.name or "") + end + if asc then return va < vb else return va > vb end + end) + + local totalH = 0 + local rowIdx = 0 + + for mi = 1, table.getn(members) do + local m = members[mi] + rowIdx = rowIdx + 1 + if rowIdx > 100 then break end + local row = guildRows[rowIdx] + if row then + local cc = GetClassColor(m.classEN) + SetClassIcon(row.classIcon, m.classEN) + row.nameFS:SetText(m.name) + row.guildDataIndex = m.idx + + if m.online then + row.nameFS:SetTextColor(cc[1], cc[2], cc[3]) + else + row.nameFS:SetTextColor(T.offlineText[1], T.offlineText[2], T.offlineText[3]) + end + + if guildViewMode == "player" then + row.lvlFS:SetText(m.level > 0 and m.level or "") + row.lvlFS:ClearAllPoints() + row.lvlFS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.24, 0) + + row.col3FS:SetText(m.class) + row.col3FS:ClearAllPoints() + row.col3FS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.32, 0) + row.col3FS:SetWidth(CONTENT_W * 0.14) + row.col3FS:SetTextColor(cc[1], cc[2], cc[3]) + + row.col4FS:SetText(m.rank or "") + row.col4FS:ClearAllPoints() + row.col4FS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.46, 0) + row.col4FS:SetWidth(CONTENT_W * 0.18) + row.col4FS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + + row.col5FS:SetText(m.online and m.zone or "离线") + row.col5FS:ClearAllPoints() + row.col5FS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.64, 0) + row.col5FS:SetPoint("RIGHT", row, "RIGHT", -4, 0) + if m.online then + row.col5FS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + else + row.col5FS:SetTextColor(T.offlineText[1], T.offlineText[2], T.offlineText[3]) + end + row.col5FS:Show() + else + row.lvlFS:SetText("") + row.col3FS:SetText(m.rank or "") + row.col3FS:ClearAllPoints() + row.col3FS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.30, 0) + row.col3FS:SetWidth(CONTENT_W * 0.20) + row.col3FS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + + row.col4FS:SetText(m.note) + row.col4FS:ClearAllPoints() + row.col4FS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.50, 0) + row.col4FS:SetWidth(CONTENT_W * 0.30) + row.col4FS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + + row.col5FS:SetText(m.online and "在线" or "离线") + row.col5FS:ClearAllPoints() + row.col5FS:SetPoint("LEFT", row, "LEFT", CONTENT_W * 0.80, 0) + row.col5FS:SetPoint("RIGHT", row, "RIGHT", -4, 0) + if m.online then + row.col5FS:SetTextColor(T.onlineText[1], T.onlineText[2], T.onlineText[3]) + else + row.col5FS:SetTextColor(T.offlineText[1], T.offlineText[2], T.offlineText[3]) + end + row.col5FS:Show() + end + + if selectedGuild == m.idx then + SetPixelBackdrop(row, T.tabActiveBg, T.tabActiveBorder) + ShowSelHighlight(row) + row.nameFS:SetTextColor(1, 1, 1) + else + SetRowNormal(row) + HideSelHighlight(row) + end + row:Show() + totalH = totalH + 18 + end + end + + for i = rowIdx + 1, 100 do + if guildRows[i] then + guildRows[i]:Hide() + end + end + + if pages[3] and pages[3].gScroll then + pages[3].gScroll:SetContentHeight(totalH + 4) + end + if pages[3] and pages[3].guildTotalFS then + local shownCount = table.getn(members) + if guildHideOffline then + pages[3].guildTotalFS:SetText(totalOnline .. " 人在线 (共 " .. numTotal .. " 名成员)") + else + pages[3].guildTotalFS:SetText("共 " .. numTotal .. " 名成员, " .. totalOnline .. " 人在线") + end + end + + -- Show/hide guild invite button based on permission + if pages[3] and pages[3].gInviteBtn then + local canInvite = CanGuildInvite and CanGuildInvite() + if canInvite then + pages[3].gInviteBtn:Show() + else + pages[3].gInviteBtn:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Tab 4: Raid +-------------------------------------------------------------------------------- +local RAID_COLS = 5 +local RAID_GROUPS = 8 +local RAID_SLOT_W = 68 +local RAID_SLOT_H = 24 +local RAID_GROUP_PAD = 3 +local RAID_GROUP_LABEL_H = 14 +local RAID_ICON_SIZE = 14 + +local dragSlot = nil +local dragHighlight = nil + +local function BuildRaidPage(page) + local infoFS = MakeFS(page, 10, "LEFT", T.dimText) + infoFS:SetPoint("TOPLEFT", page, "TOPLEFT", 0, 0) + page.raidInfoFS = infoFS + + local rScroll = CreateScrollArea(page, CONTENT_W, FRAME_H - HEADER_H - TAB_BAR_H - 20 - BOTTOM_H - 16) + rScroll:SetPoint("TOPLEFT", page, "TOPLEFT", 0, -18) + page.rScroll = rScroll + + local groupH = RAID_GROUP_LABEL_H + RAID_SLOT_H + for gIdx = 1, RAID_GROUPS do + local g = gIdx + local groupFrame = CreateFrame("Frame", nil, rScroll.child) + groupFrame:SetWidth(CONTENT_W) + groupFrame:SetHeight(groupH) + local gy = -((g - 1) * (groupH + RAID_GROUP_PAD)) + groupFrame:SetPoint("TOPLEFT", rScroll.child, "TOPLEFT", 0, gy) + SetRoundBackdrop(groupFrame, T.raidGroup, T.raidGroupBorder) + + groupFrame.groupIndex = g + groupFrame:EnableMouse(true) + groupFrame:SetScript("OnMouseUp", function() + if not dragSlot then return end + if dragHighlight then + dragHighlight:Hide() + dragHighlight:SetScript("OnUpdate", nil) + end + local tg = this.groupIndex + if tg and dragSlot.raidIndex and tg ~= dragSlot.group then + SetRaidSubgroup(dragSlot.raidIndex, tg) + end + dragSlot = nil + end) + + local groupLabel = MakeFS(groupFrame, 9, "LEFT", T.gold) + groupLabel:SetPoint("TOPLEFT", groupFrame, "TOPLEFT", 4, -1) + groupLabel:SetText("小组 " .. g) + + for sIdx = 1, RAID_COLS do + local s = sIdx + local slot = CreateFrame("Button", NextName("RS"), groupFrame) + slot:SetWidth(RAID_SLOT_W) + slot:SetHeight(RAID_SLOT_H) + local sx = 2 + (s - 1) * (RAID_SLOT_W + 2) + slot:SetPoint("BOTTOMLEFT", groupFrame, "BOTTOMLEFT", sx, 1) + SetPixelBackdrop(slot, T.raidSlotEmpty, T.slotBorder) + slot.group = g + slot.slotIndex = s + + local classIcon = CreateClassIcon(slot, RAID_ICON_SIZE) + classIcon:SetPoint("LEFT", slot, "LEFT", 2, 0) + slot.classIcon = classIcon + + local nameFS = MakeFS(slot, 8, "LEFT", T.nameText) + nameFS:SetPoint("LEFT", classIcon, "RIGHT", 2, 0) + nameFS:SetPoint("RIGHT", slot, "RIGHT", -2, 0) + slot.nameFS = nameFS + + slot.infoFS = nil + + slot:RegisterForClicks("LeftButtonUp", "RightButtonUp") + slot:RegisterForDrag("LeftButton") + + slot:SetScript("OnClick", function() + if not this.raidIndex then return end + if arg1 == "RightButton" then + SUI:ShowRaidSlotMenu(this) + end + end) + + slot:SetScript("OnDragStart", function() + if not this.raidIndex then return end + if not (IsRaidLeader() or IsRaidOfficer()) then return end + dragSlot = this + if not dragHighlight then + dragHighlight = CreateFrame("Frame", "SFramesRaidDragHL", UIParent) + dragHighlight:SetWidth(RAID_SLOT_W) + dragHighlight:SetHeight(RAID_SLOT_H) + dragHighlight:SetFrameStrata("TOOLTIP") + SetPixelBackdrop(dragHighlight, T.tabActiveBg, T.tabActiveBorder) + local dfs = MakeFS(dragHighlight, 8, "CENTER", T.tabActiveText) + dfs:SetPoint("CENTER", 0, 0) + dragHighlight.text = dfs + end + dragHighlight.text:SetText(this.playerName or "") + local cc = GetClassColor(this.playerClass) + dragHighlight.text:SetTextColor(cc[1], cc[2], cc[3]) + dragHighlight:Show() + dragHighlight:SetScript("OnUpdate", function() + local cx, cy = GetCursorPosition() + local s = UIParent:GetEffectiveScale() + dragHighlight:ClearAllPoints() + dragHighlight:SetPoint("CENTER", UIParent, "BOTTOMLEFT", cx / s, cy / s) + end) + end) + + slot:SetScript("OnDragStop", function() + if not dragSlot then return end + if dragHighlight then + dragHighlight:Hide() + dragHighlight:SetScript("OnUpdate", nil) + end + local cx, cy = GetCursorPosition() + local es = UIParent:GetEffectiveScale() + cx = cx / es + cy = cy / es + local targetSlot = nil + local targetGroup = nil + for tg = 1, RAID_GROUPS do + for ts = 1, RAID_COLS do + local tSlot = raidSlots[tg] and raidSlots[tg][ts] + if tSlot and tSlot:IsVisible() then + local left = tSlot:GetLeft() + local right = tSlot:GetRight() + local top = tSlot:GetTop() + local bottom = tSlot:GetBottom() + if left and cx >= left and cx <= right and cy >= bottom and cy <= top then + targetSlot = tSlot + targetGroup = tg + break + end + end + end + if targetGroup then break end + end + if not targetGroup then + for tg = 1, RAID_GROUPS do + local gf = raidSlots[tg] and raidSlots[tg][1] and raidSlots[tg][1]:GetParent() + if gf and gf:IsVisible() then + local left = gf:GetLeft() + local right = gf:GetRight() + local top = gf:GetTop() + local bottom = gf:GetBottom() + if left and cx >= left and cx <= right and cy >= bottom and cy <= top then + targetGroup = tg + break + end + end + end + end + if targetGroup and dragSlot.raidIndex and targetGroup ~= dragSlot.group then + if targetSlot and targetSlot.raidIndex and SwapRaidMembers then + SwapRaidMembers(dragSlot.raidIndex, targetSlot.raidIndex) + else + SetRaidSubgroup(dragSlot.raidIndex, targetGroup) + end + end + dragSlot = nil + end) + + slot:SetScript("OnEnter", function() + if dragSlot and dragSlot ~= this then + SetPixelBackdrop(this, { 0.30, 0.18, 0.26, 0.9 }, T.tabActiveBorder) + else + SetPixelBackdrop(this, T.slotHover, T.slotSelected) + end + if this.playerName and not dragSlot then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:AddLine(this.playerName, 1, 1, 1) + if this.playerClass then + local cc = GetClassColor(this.playerClass) + GameTooltip:AddLine(this.playerClass, cc[1], cc[2], cc[3]) + end + if this.playerLevel then + GameTooltip:AddLine("等级 " .. this.playerLevel, T.bodyText[1], T.bodyText[2], T.bodyText[3]) + end + if IsRaidLeader() or IsRaidOfficer() then + GameTooltip:AddLine("左键拖拽: 移动到其他小组", T.dimText[1], T.dimText[2], T.dimText[3]) + end + GameTooltip:AddLine("右键: 团队操作菜单", T.dimText[1], T.dimText[2], T.dimText[3]) + GameTooltip:Show() + end + end) + slot:SetScript("OnLeave", function() + if this.raidIndex then + SetPixelBackdrop(this, T.slotBg, T.slotBorder) + else + SetPixelBackdrop(this, T.raidSlotEmpty, T.slotBorder) + end + GameTooltip:Hide() + end) + + if not raidSlots[g] then raidSlots[g] = {} end + raidSlots[g][s] = slot + end + end + + rScroll:SetContentHeight(RAID_GROUPS * (groupH + RAID_GROUP_PAD)) + + local btnBar = CreateFrame("Frame", nil, page) + btnBar:SetHeight(BOTTOM_H) + btnBar:SetPoint("BOTTOMLEFT", page, "BOTTOMLEFT", 0, 0) + btnBar:SetPoint("BOTTOMRIGHT", page, "BOTTOMRIGHT", 0, 0) + + local convertBtn = MakeButton(btnBar, "转换团队", 80, 22) + convertBtn:SetPoint("BOTTOMLEFT", btnBar, "BOTTOMLEFT", 0, 2) + convertBtn:SetScript("OnClick", function() + if GetNumRaidMembers() == 0 and GetNumPartyMembers() > 0 then + ConvertToRaid() + end + end) + + local leaveBtn = MakeButton(btnBar, "离开团队", 80, 22) + leaveBtn:SetPoint("LEFT", convertBtn, "RIGHT", 4, 0) + leaveBtn:SetScript("OnClick", function() + if GetNumRaidMembers() > 0 then LeaveParty() end + end) + + local readyBtn = MakeButton(btnBar, "就位确认", 80, 22) + readyBtn:SetPoint("LEFT", leaveBtn, "RIGHT", 4, 0) + readyBtn:SetScript("OnClick", function() + if DoReadyCheck then DoReadyCheck() end + end) +end + +function SUI:GetRaidUnitByName(targetName) + for i = 1, 40 do + local u = "raid" .. i + if UnitExists(u) and UnitName(u) == targetName then + return u + end + end + return nil +end + +function SUI:ShowRaidSlotMenu(slot) + if not slot.raidIndex then return end + local pName = slot.playerName + if not pName then return end + + if not SUI.raidDropDown then + SUI.raidDropDown = CreateFrame("Frame", "SFramesSocialRaidDD", UIParent, "UIDropDownMenuTemplate") + SUI.raidDropDown.displayMode = "MENU" + SUI.raidDropDown.initialize = function() + local rd = SUI.raidDropDown + local name = rd.slotName + local rIdx = rd.slotRaidIndex + local grp = rd.slotGroup + local rnk = rd.slotRank + local isSelf = rd.slotIsSelf + if not name or not rIdx then return end + + local isLeader = IsRaidLeader() + local isOfficer = IsRaidOfficer() + local info + + info = {} + info.text = name + info.isTitle = 1 + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + + if not isSelf then + info = {} + info.text = "密语" + info.notCheckable = 1 + info.func = function() ChatFrame_SendTell(name) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "观察" + info.notCheckable = 1 + info.func = function() + local u = SUI:GetRaidUnitByName(name) + if u then InspectUnit(u) end + end + UIDropDownMenu_AddButton(info) + end + + if isLeader or isOfficer then + for gIdx = 1, RAID_GROUPS do + if gIdx ~= grp then + info = {} + info.text = "移至小组 " .. gIdx + info.notCheckable = 1 + local tg = gIdx + info.func = function() SetRaidSubgroup(rIdx, tg) end + UIDropDownMenu_AddButton(info) + end + end + end + + if isLeader and not isSelf then + if rnk and rnk < 1 then + info = {} + info.text = "提升为助理" + info.notCheckable = 1 + info.func = function() PromoteToAssistant(name) end + UIDropDownMenu_AddButton(info) + elseif rnk and rnk == 1 then + info = {} + info.text = "取消助理" + info.notCheckable = 1 + info.func = function() DemoteAssistant(name) end + UIDropDownMenu_AddButton(info) + end + + info = {} + info.text = "转让队长" + info.notCheckable = 1 + info.func = function() + StaticPopupDialogs["SFRAMES_PROMOTE_LEADER"] = { + text = "确定要将队长转让给 " .. name .. " 吗?", + button1 = "确定", + button2 = "取消", + OnAccept = function() PromoteToLeader(name) end, + timeout = 0, + whileDead = true, + hideOnEscape = true, + } + StaticPopup_Show("SFRAMES_PROMOTE_LEADER") + end + UIDropDownMenu_AddButton(info) + end + + if (isLeader or isOfficer) and not isSelf then + info = {} + info.text = "移出团队" + info.notCheckable = 1 + info.func = function() UninviteByName(name) end + UIDropDownMenu_AddButton(info) + end + + info = {} + info.text = "取消" + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + end + end + + SUI.raidDropDown.slotName = pName + SUI.raidDropDown.slotRaidIndex = slot.raidIndex + SUI.raidDropDown.slotGroup = slot.group + SUI.raidDropDown.slotRank = slot.playerRank + SUI.raidDropDown.slotIsSelf = (pName == UnitName("player")) + ToggleDropDownMenu(1, nil, SUI.raidDropDown, "cursor") +end + +local function CancelRaidDrag() + if dragSlot then + dragSlot = nil + if dragHighlight then + dragHighlight:Hide() + dragHighlight:SetScript("OnUpdate", nil) + end + end +end + +function SUI:UpdateRaidPage() + local page = pages[4] + if not page then return end + + local numRaid = GetNumRaidMembers() + + -- Clear all slots + for g = 1, RAID_GROUPS do + for s = 1, RAID_COLS do + local slot = raidSlots[g] and raidSlots[g][s] + if slot then + slot.raidIndex = nil + slot.playerName = nil + slot.playerClass = nil + slot.playerRank = nil + slot.playerLevel = nil + slot.nameFS:SetText("") + slot.classIcon:Hide() + SetPixelBackdrop(slot, T.raidSlotEmpty, T.slotBorder) + end + end + end + + if numRaid == 0 then + page.raidInfoFS:SetText("你不在团队中") + return + end + + page.raidInfoFS:SetText("团队成员: " .. numRaid .. "/40") + + local groupCount = {} + for g = 1, RAID_GROUPS do groupCount[g] = 0 end + + for i = 1, numRaid do + local name, rank, subgroup, level, class, fileName, zone, online, isDead, role, isML = GetRaidRosterInfo(i) + if name and subgroup then + local g = subgroup + groupCount[g] = (groupCount[g] or 0) + 1 + local s = groupCount[g] + if s <= RAID_COLS then + local slot = raidSlots[g] and raidSlots[g][s] + if slot then + slot.raidIndex = i + slot.playerName = name + slot.playerClass = fileName + slot.playerRank = rank + slot.playerLevel = level + + local shortName = name + if string.len(name) > 7 then + shortName = string.sub(name, 1, 6) .. ".." + end + local prefix = "" + if rank and rank == 2 then prefix = "*" + elseif rank and rank == 1 then prefix = "+" end + slot.nameFS:SetText(prefix .. shortName) + + local cc = GetClassColor(fileName) + slot.nameFS:SetTextColor(cc[1], cc[2], cc[3]) + SetClassIcon(slot.classIcon, fileName) + + if online then + SetPixelBackdrop(slot, T.slotBg, T.slotBorder) + if isDead then + slot.nameFS:SetTextColor(0.5, 0.2, 0.2) + end + else + SetPixelBackdrop(slot, { 0.06, 0.03, 0.05, 0.7 }, { 0.20, 0.15, 0.18, 0.6 }) + slot.nameFS:SetTextColor(T.offlineText[1], T.offlineText[2], T.offlineText[3]) + end + end + end + end + end +end + +-------------------------------------------------------------------------------- +-- Main Tab Switching +-------------------------------------------------------------------------------- +local TAB_NAMES = { "好友", "查询", "工会", "团队" } + +local function ShowPage(tabIdx) + currentMainTab = tabIdx + for i = 1, 4 do + local p = pages[i] + if p then + if i == tabIdx then p:Show() else p:Hide() end + end + local btn = mainTabs[i] + if btn then + if i == tabIdx then + SetRoundBackdrop(btn, T.tabActiveBg, T.tabActiveBorder) + btn.text:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + SetRoundBackdrop(btn, T.tabBg, T.tabBorder) + btn.text:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end + end + + if tabIdx == 1 then + if origShowFriendsAPI then origShowFriendsAPI() end + SUI:UpdateFriendsPage() + elseif tabIdx == 2 then + SUI:UpdateWhoList() + elseif tabIdx == 3 then + SUI:UpdateGuildList() + elseif tabIdx == 4 then + SUI:UpdateRaidPage() + end + + if MainFrame and MainFrame.titleFS then + local titles = { "好友名单", "查询玩家", "公会", "团队" } + MainFrame.titleFS:SetText(titles[tabIdx] or "社交") + end +end + +-------------------------------------------------------------------------------- +-- Build Main Frame +-------------------------------------------------------------------------------- +local function BuildMainFrame() + if MainFrame then return end + + local f = CreateFrame("Frame", "SFramesSocialUI", UIParent) + f:SetWidth(FRAME_W) + f:SetHeight(FRAME_H) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + f:SetFrameStrata("HIGH") + f:SetFrameLevel(10) + SetRoundBackdrop(f) + CreateShadow(f) + + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetScript("OnHide", function() CancelRaidDrag() end) + + -- Header + local header = CreateFrame("Frame", nil, f) + header:SetHeight(HEADER_H) + header:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", f, "TOPRIGHT", 0, 0) + + local titleIco = SFrames:CreateIcon(header, "friends", 14) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("CENTER", header, "CENTER", -40, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local title = MakeFS(header, 13, "CENTER", T.gold) + title:SetPoint("LEFT", titleIco, "RIGHT", 4, 0) + title:SetText("好友名单") + f.titleFS = title + + local closeBtn = CreateFrame("Button", NextName("Close"), header) + closeBtn:SetWidth(20) + closeBtn:SetHeight(20) + closeBtn:SetPoint("RIGHT", header, "RIGHT", -6, 0) + closeBtn:SetScript("OnClick", function() f:Hide() end) + local closeIco = SFrames:CreateIcon(closeBtn, "close", 12) + closeIco:SetDrawLayer("OVERLAY") + closeIco:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeIco:SetVertexColor(1, 0.7, 0.7) + closeBtn:SetScript("OnEnter", function() + closeIco:SetVertexColor(1, 0.4, 0.5) + end) + closeBtn:SetScript("OnLeave", function() + closeIco:SetVertexColor(1, 0.7, 0.7) + end) + + -- Main tabs (use this.tabIndex to avoid closure issues) + local tabContainer = CreateFrame("Frame", nil, f) + tabContainer:SetHeight(TAB_BAR_H) + tabContainer:SetPoint("TOPLEFT", f, "TOPLEFT", SIDE_PAD, -(HEADER_H + 2)) + tabContainer:SetPoint("TOPRIGHT", f, "TOPRIGHT", -SIDE_PAD, -(HEADER_H + 2)) + + local tabW = math.floor((CONTENT_W - 6) / 4) + for idx = 1, 4 do + local tabIdx = idx + local btn = CreateFrame("Button", NextName("MTab"), tabContainer) + btn:SetWidth(tabW) + btn:SetHeight(TAB_BAR_H - 2) + btn.tabIndex = tabIdx + if tabIdx == 1 then + btn:SetPoint("LEFT", tabContainer, "LEFT", 0, 0) + else + btn:SetPoint("LEFT", mainTabs[tabIdx - 1], "RIGHT", 2, 0) + end + SetRoundBackdrop(btn, T.tabBg, T.tabBorder) + local text = MakeFS(btn, 10, "CENTER", T.tabText) + text:SetPoint("CENTER", 0, 0) + text:SetText(TAB_NAMES[tabIdx]) + btn.text = text + btn:SetScript("OnClick", function() + ShowPage(this.tabIndex) + end) + mainTabs[tabIdx] = btn + end + + -- Content pages + local contentTop = -(HEADER_H + TAB_BAR_H + 6) + for i = 1, 4 do + local page = CreateFrame("Frame", nil, f) + page:SetPoint("TOPLEFT", f, "TOPLEFT", SIDE_PAD, contentTop) + page:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -SIDE_PAD, SIDE_PAD) + page:Hide() + pages[i] = page + end + + BuildFriendsPage(pages[1]) + BuildWhoPage(pages[2]) + BuildGuildPage(pages[3]) + BuildRaidPage(pages[4]) + + table.insert(UISpecialFrames, "SFramesSocialUI") + + local scale = SFramesDB.socialScale or 1 + if scale ~= 1 then f:SetScale(scale) end + + MainFrame = f + f:Hide() +end + +-------------------------------------------------------------------------------- +-- Public API +-------------------------------------------------------------------------------- +function SUI:Toggle(tabIdx) + if not initialized then return end + if not MainFrame then BuildMainFrame() end + + if MainFrame:IsShown() then + if tabIdx and tabIdx ~= currentMainTab then + ShowPage(tabIdx) + else + MainFrame:Hide() + end + else + MainFrame:Show() + ShowPage(tabIdx or 1) + end +end + +function SUI:Show(tabIdx) + if not initialized then return end + if not MainFrame then BuildMainFrame() end + MainFrame:Show() + ShowPage(tabIdx or 1) +end + +function SUI:Hide() + if MainFrame then MainFrame:Hide() end +end + +function SUI:IsShown() + return MainFrame and MainFrame:IsShown() +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function SUI:Initialize() + if initialized then return end + initialized = true + + BuildClassReverseLookup() + HideBlizzardFriends() + BuildMainFrame() + + local ef = CreateFrame("Frame", nil, UIParent) + ef:RegisterEvent("FRIENDLIST_UPDATE") + ef:RegisterEvent("IGNORELIST_UPDATE") + ef:RegisterEvent("WHO_LIST_UPDATE") + ef:RegisterEvent("GUILD_ROSTER_UPDATE") + ef:RegisterEvent("RAID_ROSTER_UPDATE") + ef:RegisterEvent("PARTY_MEMBERS_CHANGED") + ef:SetScript("OnEvent", function() + if not MainFrame or not MainFrame:IsShown() then return end + if event == "FRIENDLIST_UPDATE" or event == "IGNORELIST_UPDATE" then + if currentMainTab == 1 then SUI:UpdateFriendsPage() end + elseif event == "WHO_LIST_UPDATE" then + if currentMainTab == 2 then SUI:UpdateWhoList() end + elseif event == "GUILD_ROSTER_UPDATE" then + if currentMainTab == 3 then SUI:UpdateGuildList() end + elseif event == "RAID_ROSTER_UPDATE" or event == "PARTY_MEMBERS_CHANGED" then + if currentMainTab == 4 then SUI:UpdateRaidPage() end + end + end) +end + +-------------------------------------------------------------------------------- +-- Hook ToggleFriendsFrame +-------------------------------------------------------------------------------- +local origToggleFriendsFrame = ToggleFriendsFrame +ToggleFriendsFrame = function(tab) + if SFramesDB and SFramesDB.enableSocial == false then + if origToggleFriendsFrame then + if origFriendsFrameShow and FriendsFrame then + FriendsFrame.Show = origFriendsFrameShow + end + origToggleFriendsFrame(tab) + end + return + end + SUI:Toggle(tab or 1) +end + +if ShowFriends then + origShowFriendsAPI = ShowFriends + local origShowFriends = ShowFriends + ShowFriends = function() + if SFramesDB and SFramesDB.enableSocial == false then + if origShowFriends then origShowFriends() end + return + end + SUI:Show(1) + end +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame", nil, UIParent) +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableSocial == nil then + SFramesDB.enableSocial = true + end + if SFramesDB.enableSocial ~= false then + SUI:Initialize() + end + end +end) diff --git a/SpellBookUI.lua b/SpellBookUI.lua new file mode 100644 index 0000000..cce98fe --- /dev/null +++ b/SpellBookUI.lua @@ -0,0 +1,983 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: SpellBook UI (SpellBookUI.lua) +-- Replaces the default SpellBookFrame with a modern rounded UI +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.SpellBookUI = {} +local SB = SFrames.SpellBookUI +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme (aligned with CharacterPanel / SocialUI standard palette) +-------------------------------------------------------------------------------- +local T = SFrames.ActiveTheme + +-------------------------------------------------------------------------------- +-- Layout (single table to stay under upvalue limit) +-------------------------------------------------------------------------------- +local L = { + RIGHT_TAB_W = 56, + SIDE_PAD = 10, + CONTENT_W = 316, + HEADER_H = 30, + SPELL_COLS = 2, + SPELL_ROWS = 8, + SPELL_H = 38, + ICON_SIZE = 30, + PAGE_H = 26, + OPTIONS_H = 26, + TAB_H = 40, + TAB_GAP = 2, + TAB_ICON = 26, + BOOK_TAB_W = 52, + BOOK_TAB_H = 22, +} +L.SPELLS_PER_PAGE = L.SPELL_COLS * L.SPELL_ROWS +L.SPELL_W = (L.CONTENT_W - 4) / L.SPELL_COLS +L.MAIN_W = L.CONTENT_W + L.SIDE_PAD * 2 +L.FRAME_W = L.MAIN_W + L.RIGHT_TAB_W + 4 +L.FRAME_H = L.HEADER_H + 6 + L.SPELL_ROWS * L.SPELL_H + 6 + L.PAGE_H + 4 + L.OPTIONS_H + 10 + +-------------------------------------------------------------------------------- +-- State (single table to stay under upvalue limit) +-------------------------------------------------------------------------------- +local S = { + frame = nil, + spellButtons = {}, + tabButtons = {}, + bookTabs = {}, + currentTab = 1, + currentPage = 1, + currentBook = "spell", + initialized = false, + filteredCache = nil, + scanTip = nil, +} + +local widgetId = 0 +local function NextName(p) + widgetId = widgetId + 1 + return "SFramesSB" .. (p or "") .. tostring(widgetId) +end + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or T.panelBg + local bd = borderColor or T.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function SetPixelBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + if bgColor then + frame:SetBackdropColor(bgColor[1], bgColor[2], bgColor[3], bgColor[4] or 1) + end + if borderColor then + frame:SetBackdropBorderColor(borderColor[1], borderColor[2], borderColor[3], borderColor[4] or 1) + end +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.6) + s:SetBackdropBorderColor(0, 0, 0, 0.45) + return s +end + +local function MakeFS(parent, size, justifyH, color) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), size or 11, "OUTLINE") + fs:SetJustifyH(justifyH or "LEFT") + local c = color or T.nameText + fs:SetTextColor(c[1], c[2], c[3]) + return fs +end + +local function MakeButton(parent, text, w, h) + local btn = CreateFrame("Button", NextName("Btn"), parent) + btn:SetWidth(w or 80) + btn:SetHeight(h or 22) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + local fs = MakeFS(btn, 10, "CENTER", T.btnText) + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text or "") + btn.text = fs + btn:SetScript("OnEnter", function() + SetRoundBackdrop(this, T.btnHoverBg, T.tabActiveBorder) + this.text:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + end) + btn:SetScript("OnLeave", function() + SetRoundBackdrop(this, T.btnBg, T.btnBorder) + this.text:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end) + return btn +end + +local function MakeSep(parent, y) + local sep = parent:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", parent, "TOPLEFT", 4, y) + sep:SetPoint("TOPRIGHT", parent, "TOPRIGHT", -4, y) + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + return sep +end + +-------------------------------------------------------------------------------- +-- Hide Blizzard SpellBook +-------------------------------------------------------------------------------- +local function HideBlizzardSpellBook() + if not SpellBookFrame then return end + SpellBookFrame:SetAlpha(0) + SpellBookFrame:EnableMouse(false) + SpellBookFrame:ClearAllPoints() + SpellBookFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 2000, 2000) + if SpellBookFrame.SetScript then + SpellBookFrame:SetScript("OnShow", function() this:Hide() end) + end +end + +-------------------------------------------------------------------------------- +-- Spell Data Helpers +-------------------------------------------------------------------------------- +local function GetBookType() + if S.currentBook == "pet" then return BOOKTYPE_PET or "pet" end + return BOOKTYPE_SPELL or "spell" +end + +local function GetTabInfo() + local numTabs = GetNumSpellTabs() + local tabs = {} + for i = 1, numTabs do + local name, texture, offset, numSpells = GetSpellTabInfo(i) + if name then + table.insert(tabs, { + name = name, texture = texture, + offset = offset, numSpells = numSpells, index = i, + }) + end + end + return tabs +end + +local function GetCurrentTabSpells() + local tabs = GetTabInfo() + local tab = tabs[S.currentTab] + if not tab then return 0, 0 end + return tab.offset, tab.numSpells +end + +local function GetFilteredSpellList() + local offset, numSpells = GetCurrentTabSpells() + local bookType = GetBookType() + + if not SFramesDB.spellBookHighestOnly then + local list = {} + for i = 1, numSpells do + table.insert(list, offset + i) + end + S.filteredCache = list + return list + end + + local seen = {} + local order = {} + for i = 1, numSpells do + local idx = offset + i + local name, rank = GetSpellName(idx, bookType) + if name then + if seen[name] then + for k = 1, table.getn(order) do + if order[k].name == name then + order[k].idx = idx + break + end + end + else + seen[name] = true + table.insert(order, { name = name, idx = idx }) + end + end + end + + local list = {} + for _, v in ipairs(order) do + table.insert(list, v.idx) + end + S.filteredCache = list + return list +end + +local function GetMaxPages() + local list = S.filteredCache or GetFilteredSpellList() + return math.max(1, math.ceil(table.getn(list) / L.SPELLS_PER_PAGE)) +end + +-------------------------------------------------------------------------------- +-- Auto-Replace Action Bar (lower rank -> highest rank) +-------------------------------------------------------------------------------- +local function EnsureScanTooltip() + if S.scanTip then return end + S.scanTip = CreateFrame("GameTooltip", "SFramesSBScanTip", UIParent, "GameTooltipTemplate") + S.scanTip:SetOwner(UIParent, "ANCHOR_NONE") + S.scanTip:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 1000, 1000) +end + +local function AutoReplaceActionBarSpells() + if not SFramesDB.spellBookAutoReplace then return end + if UnitAffectingCombat and UnitAffectingCombat("player") then return end + + EnsureScanTooltip() + + local highestByName = {} + local highestRankText = {} + local numTabs = GetNumSpellTabs() + for tab = 1, numTabs do + local _, _, offset, numSpells = GetSpellTabInfo(tab) + for i = 1, numSpells do + local idx = offset + i + local name, rank = GetSpellName(idx, "spell") + if name and not IsSpellPassive(idx, "spell") then + highestByName[name] = idx + highestRankText[name] = rank or "" + end + end + end + + local tipLeft = getglobal("SFramesSBScanTipTextLeft1") + local tipRight = getglobal("SFramesSBScanTipTextRight1") + + for slot = 1, 120 do + if HasAction(slot) then + S.scanTip:ClearLines() + S.scanTip:SetAction(slot) + local actionName = tipLeft and tipLeft:GetText() + local actionRank = tipRight and tipRight:GetText() + if actionName and highestByName[actionName] then + local bestRank = highestRankText[actionName] + if bestRank and bestRank ~= "" and actionRank and actionRank ~= bestRank then + PickupSpell(highestByName[actionName], "spell") + PlaceAction(slot) + ClearCursor() + end + end + end + end +end + +-------------------------------------------------------------------------------- +-- Slot backdrop helper: backdrop on a SEPARATE child at lower frameLevel +-- so icon / text render cleanly above it (same fix as ActionBars) +-------------------------------------------------------------------------------- +local function SetSlotBg(btn, bgColor, borderColor) + if not btn.sfBg then return end + SetPixelBackdrop(btn.sfBg, bgColor or T.slotBg, borderColor or T.slotBorder) +end + +local function CreateSlotBackdrop(btn) + if btn:GetBackdrop() then btn:SetBackdrop(nil) end + local level = btn:GetFrameLevel() + local bd = CreateFrame("Frame", nil, btn) + bd:SetFrameLevel(level > 0 and (level - 1) or 0) + bd:SetAllPoints(btn) + SetPixelBackdrop(bd, T.slotBg, T.slotBorder) + btn.sfBg = bd + return bd +end + +-------------------------------------------------------------------------------- +-- Update Spell Buttons +-------------------------------------------------------------------------------- +local function UpdateSpellButtons() + if not S.frame or not S.frame:IsShown() then return end + + local list = GetFilteredSpellList() + local bookType = GetBookType() + local startIdx = (S.currentPage - 1) * L.SPELLS_PER_PAGE + local totalSpells = table.getn(list) + + for i = 1, L.SPELLS_PER_PAGE do + local btn = S.spellButtons[i] + if not btn then break end + + local listIdx = startIdx + i + local spellIdx = list[listIdx] + + if spellIdx and listIdx <= totalSpells then + local spellName, spellRank = GetSpellName(spellIdx, bookType) + local texture = GetSpellTexture(spellIdx, bookType) + + btn.icon:SetTexture(texture) + btn.icon:SetAlpha(1) + btn.nameFS:SetText(spellName or "") + btn.subFS:SetText(spellRank or "") + btn.spellId = spellIdx + btn.bookType = bookType + + local isPassive = IsSpellPassive(spellIdx, bookType) + if isPassive then + btn.nameFS:SetTextColor(T.passive[1], T.passive[2], T.passive[3]) + btn.subFS:SetTextColor(T.passive[1], T.passive[2], T.passive[3]) + btn.icon:SetVertexColor(T.passive[1], T.passive[2], T.passive[3]) + btn.passiveBadge:Show() + else + btn.nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + btn.subFS:SetTextColor(T.subText[1], T.subText[2], T.subText[3]) + btn.icon:SetVertexColor(1, 1, 1) + btn.passiveBadge:Hide() + end + + SetSlotBg(btn, T.slotBg, T.slotBorder) + btn:Show() + btn:Enable() + else + btn.icon:SetTexture(nil) + btn.icon:SetAlpha(0) + btn.nameFS:SetText("") + btn.subFS:SetText("") + btn.spellId = nil + btn.bookType = nil + btn.passiveBadge:Hide() + SetSlotBg(btn, T.emptySlotBg, T.emptySlotBd) + btn:Show() + btn:Disable() + end + end + + local maxPages = GetMaxPages() + local f = S.frame + if f.pageText then + if maxPages <= 1 then + f.pageText:SetText("") + else + f.pageText:SetText(S.currentPage .. " / " .. maxPages) + end + end + if f.prevBtn then + if S.currentPage > 1 then + f.prevBtn:Enable(); f.prevBtn:SetAlpha(1) + else + f.prevBtn:Disable(); f.prevBtn:SetAlpha(0.4) + end + end + if f.nextBtn then + if S.currentPage < maxPages then + f.nextBtn:Enable(); f.nextBtn:SetAlpha(1) + else + f.nextBtn:Disable(); f.nextBtn:SetAlpha(0.4) + end + end +end + +-------------------------------------------------------------------------------- +-- Update Skill Line Tabs (right side) +-------------------------------------------------------------------------------- +local function UpdateSkillLineTabs() + local tabs = GetTabInfo() + for i = 1, 8 do + local btn = S.tabButtons[i] + if not btn then break end + local tab = tabs[i] + if tab then + if tab.texture then + btn.tabIcon:SetTexture(tab.texture) + btn.tabIcon:Show() + else + btn.tabIcon:Hide() + end + btn.tabLabel:SetText(tab.name or "") + btn:Show() + + if i == S.currentTab then + SetRoundBackdrop(btn, T.tabActiveBg, T.tabActiveBorder) + btn.tabIcon:SetVertexColor(1, 1, 1) + btn.tabLabel:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + btn.indicator:Show() + else + SetRoundBackdrop(btn, T.tabBg, T.tabBorder) + btn.tabIcon:SetVertexColor(T.tabText[1], T.tabText[2], T.tabText[3]) + btn.tabLabel:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + btn.indicator:Hide() + end + else + btn:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Update Book Tabs (Spell / Pet) +-------------------------------------------------------------------------------- +local function UpdateBookTabs() + for i = 1, 2 do + local bt = S.bookTabs[i] + if not bt then break end + local isActive = (i == 1 and S.currentBook == "spell") or (i == 2 and S.currentBook == "pet") + if isActive then + SetRoundBackdrop(bt, T.tabActiveBg, T.tabActiveBorder) + bt.text:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + SetRoundBackdrop(bt, T.tabBg, T.tabBorder) + bt.text:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end + local petTab = S.bookTabs[2] + if petTab then + local hasPet = HasPetSpells and HasPetSpells() + if hasPet then petTab:Show() else petTab:Hide() end + end +end + +local function FullRefresh() + S.filteredCache = nil + UpdateSkillLineTabs() + UpdateBookTabs() + UpdateSpellButtons() + if S.frame and S.frame.optHighest then + S.frame.optHighest:UpdateVisual() + end + if S.frame and S.frame.optReplace then + S.frame.optReplace:UpdateVisual() + end +end + +-------------------------------------------------------------------------------- +-- Build: Header +-------------------------------------------------------------------------------- +local function BuildHeader(f) + local header = CreateFrame("Frame", nil, f) + header:SetHeight(L.HEADER_H) + header:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", f, "TOPRIGHT", 0, 0) + + local function MakeBookTab(parent, label, idx, xOff) + local bt = CreateFrame("Button", NextName("BookTab"), parent) + bt:SetWidth(L.BOOK_TAB_W) + bt:SetHeight(L.BOOK_TAB_H) + bt:SetPoint("LEFT", parent, "LEFT", xOff, 0) + SetRoundBackdrop(bt, T.tabBg, T.tabBorder) + + local txt = MakeFS(bt, 10, "CENTER", T.tabText) + txt:SetPoint("CENTER", 0, 0) + txt:SetText(label) + bt.text = txt + bt.bookIdx = idx + + bt:SetScript("OnClick", function() + if this.bookIdx == 1 then S.currentBook = "spell" else S.currentBook = "pet" end + S.currentTab = 1 + S.currentPage = 1 + FullRefresh() + end) + bt:SetScript("OnEnter", function() + this.text:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end) + bt:SetScript("OnLeave", function() + local active = (this.bookIdx == 1 and S.currentBook == "spell") or (this.bookIdx == 2 and S.currentBook == "pet") + if active then + this.text:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + this.text:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end) + return bt + end + + S.bookTabs[1] = MakeBookTab(header, "法术", 1, 8) + S.bookTabs[2] = MakeBookTab(header, "宠物", 2, 8 + L.BOOK_TAB_W + 4) + + local titleIco = SFrames:CreateIcon(header, "spellbook", 14) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("CENTER", header, "CENTER", -28, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local title = MakeFS(header, 13, "CENTER", T.gold) + title:SetPoint("LEFT", titleIco, "RIGHT", 4, 0) + title:SetText("法术书") + f.titleFS = title + + local closeBtn = CreateFrame("Button", NextName("Close"), header) + closeBtn:SetWidth(20) + closeBtn:SetHeight(20) + closeBtn:SetPoint("RIGHT", header, "RIGHT", -8, 0) + SetRoundBackdrop(closeBtn, T.buttonDownBg, T.btnBorder) + closeBtn:SetScript("OnClick", function() this:GetParent():GetParent():Hide() end) + local closeIco = SFrames:CreateIcon(closeBtn, "close", 12) + closeIco:SetDrawLayer("OVERLAY") + closeIco:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeIco:SetVertexColor(1, 0.7, 0.7) + closeBtn.nanamiIcon = closeIco + closeBtn:SetScript("OnEnter", function() + SetRoundBackdrop(this, T.btnHoverBg, T.btnHoverBd) + if this.nanamiIcon then this.nanamiIcon:SetVertexColor(1, 1, 1) end + end) + closeBtn:SetScript("OnLeave", function() + SetRoundBackdrop(this, T.buttonDownBg, T.btnBorder) + if this.nanamiIcon then this.nanamiIcon:SetVertexColor(1, 0.7, 0.7) end + end) + + MakeSep(f, -L.HEADER_H) +end + +-------------------------------------------------------------------------------- +-- Build: Right Skill Line Tabs +-------------------------------------------------------------------------------- +local function BuildSkillTabs(f) + for idx = 1, 8 do + local btn = CreateFrame("Button", NextName("Tab"), f) + btn:SetWidth(L.RIGHT_TAB_W) + btn:SetHeight(L.TAB_H) + btn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -3, + -(L.HEADER_H + 4 + (idx - 1) * (L.TAB_H + L.TAB_GAP))) + SetRoundBackdrop(btn, T.tabBg, T.tabBorder) + btn.tabIndex = idx + + local indicator = btn:CreateTexture(nil, "OVERLAY") + indicator:SetTexture("Interface\\Buttons\\WHITE8X8") + indicator:SetWidth(3) + indicator:SetPoint("TOPLEFT", btn, "TOPLEFT", 1, -4) + indicator:SetPoint("BOTTOMLEFT", btn, "BOTTOMLEFT", 1, 4) + indicator:SetVertexColor(T.accent[1], T.accent[2], T.accent[3], T.accent[4]) + indicator:Hide() + btn.indicator = indicator + + local icon = btn:CreateTexture(nil, "ARTWORK") + icon:SetWidth(L.TAB_ICON) + icon:SetHeight(L.TAB_ICON) + icon:SetPoint("TOP", btn, "TOP", 0, -4) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + btn.tabIcon = icon + + local label = MakeFS(btn, 7, "CENTER", T.tabText) + label:SetPoint("BOTTOM", btn, "BOTTOM", 0, 3) + label:SetWidth(L.RIGHT_TAB_W - 6) + btn.tabLabel = label + + btn:SetScript("OnClick", function() + S.currentTab = this.tabIndex + S.currentPage = 1 + FullRefresh() + end) + + btn:SetScript("OnEnter", function() + if this.tabIndex ~= S.currentTab then + SetRoundBackdrop(this, T.slotHover, T.tabActiveBorder) + this.tabIcon:SetVertexColor(1, 1, 1) + this.tabLabel:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + end + local tabs = GetTabInfo() + local tab = tabs[this.tabIndex] + if tab then + GameTooltip:SetOwner(this, "ANCHOR_LEFT") + GameTooltip:AddLine(tab.name, T.gold[1], T.gold[2], T.gold[3]) + GameTooltip:AddLine(tab.numSpells .. " 个法术", T.subText[1], T.subText[2], T.subText[3]) + GameTooltip:Show() + end + end) + btn:SetScript("OnLeave", function() + GameTooltip:Hide() + if this.tabIndex ~= S.currentTab then + SetRoundBackdrop(this, T.tabBg, T.tabBorder) + this.tabIcon:SetVertexColor(T.tabText[1], T.tabText[2], T.tabText[3]) + this.tabLabel:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end) + + btn:Hide() + S.tabButtons[idx] = btn + end + + local tabSep = f:CreateTexture(nil, "ARTWORK") + tabSep:SetTexture("Interface\\Buttons\\WHITE8X8") + tabSep:SetWidth(1) + tabSep:SetPoint("TOPLEFT", f, "TOPRIGHT", -(L.RIGHT_TAB_W + 5), -(L.HEADER_H + 2)) + tabSep:SetPoint("BOTTOMLEFT", f, "BOTTOMRIGHT", -(L.RIGHT_TAB_W + 5), 4) + tabSep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) +end + +-------------------------------------------------------------------------------- +-- Build: Spell Buttons Grid +-- Backdrop on a SEPARATE child frame at lower frameLevel (ActionBars fix) +-------------------------------------------------------------------------------- +local function BuildSpellGrid(f) + local contentTop = -(L.HEADER_H + 6) + local contentFrame = CreateFrame("Frame", nil, f) + contentFrame:SetPoint("TOPLEFT", f, "TOPLEFT", L.SIDE_PAD, contentTop) + contentFrame:SetWidth(L.CONTENT_W) + contentFrame:SetHeight(L.SPELL_ROWS * L.SPELL_H + 4) + + for row = 1, L.SPELL_ROWS do + for col = 1, L.SPELL_COLS do + local idx = (row - 1) * L.SPELL_COLS + col + local btn = CreateFrame("Button", NextName("Spell"), contentFrame) + btn:SetWidth(L.SPELL_W - 2) + btn:SetHeight(L.SPELL_H - 2) + local x = (col - 1) * L.SPELL_W + 1 + local y = -((row - 1) * L.SPELL_H) + btn:SetPoint("TOPLEFT", contentFrame, "TOPLEFT", x, y) + + CreateSlotBackdrop(btn) + + local icon = btn:CreateTexture(nil, "ARTWORK") + icon:SetWidth(L.ICON_SIZE) + icon:SetHeight(L.ICON_SIZE) + icon:SetPoint("LEFT", btn, "LEFT", 5, 0) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + btn.icon = icon + + local nameFS = MakeFS(btn, 11, "LEFT", T.nameText) + nameFS:SetPoint("TOPLEFT", icon, "TOPRIGHT", 6, -2) + nameFS:SetPoint("RIGHT", btn, "RIGHT", -4, 0) + btn.nameFS = nameFS + + local subFS = MakeFS(btn, 9, "LEFT", T.subText) + subFS:SetPoint("BOTTOMLEFT", icon, "BOTTOMRIGHT", 6, 2) + subFS:SetPoint("RIGHT", btn, "RIGHT", -4, 0) + btn.subFS = subFS + + local passiveBadge = MakeFS(btn, 7, "RIGHT", T.passive) + passiveBadge:SetPoint("TOPRIGHT", btn, "TOPRIGHT", -4, -3) + passiveBadge:SetText("被动") + passiveBadge:Hide() + btn.passiveBadge = passiveBadge + + btn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + btn:RegisterForDrag("LeftButton") + + btn:SetScript("OnClick", function() + if not this.spellId then return end + if arg1 == "LeftButton" then + CastSpell(this.spellId, this.bookType) + elseif arg1 == "RightButton" then + PickupSpell(this.spellId, this.bookType) + end + end) + + btn:SetScript("OnDragStart", function() + if this.spellId then + PickupSpell(this.spellId, this.bookType) + end + end) + + btn:SetScript("OnEnter", function() + if this.spellId then + SetSlotBg(this, T.slotHover, T.slotSelected) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetSpell(this.spellId, this.bookType) + GameTooltip:Show() + end + end) + + btn:SetScript("OnLeave", function() + if this.spellId then + SetSlotBg(this, T.slotBg, T.slotBorder) + else + SetSlotBg(this, T.emptySlotBg, T.emptySlotBd) + end + GameTooltip:Hide() + end) + + S.spellButtons[idx] = btn + end + end + + contentFrame:EnableMouseWheel(true) + contentFrame:SetScript("OnMouseWheel", function() + if arg1 > 0 then + if S.currentPage > 1 then + S.currentPage = S.currentPage - 1 + UpdateSpellButtons() + end + else + if S.currentPage < GetMaxPages() then + S.currentPage = S.currentPage + 1 + UpdateSpellButtons() + end + end + end) + + return contentTop +end + +-------------------------------------------------------------------------------- +-- Build: Pagination +-------------------------------------------------------------------------------- +local function BuildPagination(f, contentTop) + local pageY = contentTop - L.SPELL_ROWS * L.SPELL_H - 6 + + local prevBtn = MakeButton(f, "< 上一页", 66, L.PAGE_H) + prevBtn:SetPoint("TOPLEFT", f, "TOPLEFT", L.SIDE_PAD, pageY) + prevBtn:SetScript("OnClick", function() + if S.currentPage > 1 then + S.currentPage = S.currentPage - 1 + UpdateSpellButtons() + end + end) + f.prevBtn = prevBtn + + local nextBtn = MakeButton(f, "下一页 >", 66, L.PAGE_H) + nextBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -(L.RIGHT_TAB_W + L.SIDE_PAD + 4), pageY) + nextBtn:SetScript("OnClick", function() + if S.currentPage < GetMaxPages() then + S.currentPage = S.currentPage + 1 + UpdateSpellButtons() + end + end) + f.nextBtn = nextBtn + + local pageText = MakeFS(f, 11, "CENTER", T.pageText) + pageText:SetPoint("LEFT", prevBtn, "RIGHT", 4, 0) + pageText:SetPoint("RIGHT", nextBtn, "LEFT", -4, 0) + f.pageText = pageText + + return pageY +end + +-------------------------------------------------------------------------------- +-- Build: Options bar +-------------------------------------------------------------------------------- +local function BuildOptions(f, pageY) + local optY = pageY - L.PAGE_H - 4 + MakeSep(f, optY + 2) + + local function MakeCheckOption(parent, label, xOff, yOff, getFunc, setFunc) + local btn = CreateFrame("Button", NextName("Opt"), parent) + btn:SetHeight(L.OPTIONS_H - 4) + btn:SetPoint("TOPLEFT", parent, "TOPLEFT", xOff, yOff) + + local box = CreateFrame("Frame", nil, btn) + box:SetWidth(12) + box:SetHeight(12) + box:SetPoint("LEFT", btn, "LEFT", 0, 0) + SetPixelBackdrop(box, T.checkOff, T.tabBorder) + btn.box = box + + local checkMark = MakeFS(box, 10, "CENTER", T.checkOn) + checkMark:SetPoint("CENTER", 0, 1) + checkMark:SetText("") + btn.checkMark = checkMark + + local txt = MakeFS(btn, 9, "LEFT", T.optionText) + txt:SetPoint("LEFT", box, "RIGHT", 4, 0) + txt:SetText(label) + btn.label = txt + + btn:SetWidth(txt:GetStringWidth() + 20) + btn.getFunc = getFunc + btn.setFunc = setFunc + + function btn:UpdateVisual() + if self.getFunc() then + self.checkMark:SetText("√") + SetPixelBackdrop(self.box, { T.checkOn[1]*0.3, T.checkOn[2]*0.3, T.checkOn[3]*0.3, 0.8 }, T.checkOn) + self.label:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + self.checkMark:SetText("") + SetPixelBackdrop(self.box, T.checkOff, T.tabBorder) + self.label:SetTextColor(T.optionText[1], T.optionText[2], T.optionText[3]) + end + end + + btn:SetScript("OnClick", function() + this.setFunc(not this.getFunc()) + this:UpdateVisual() + FullRefresh() + end) + btn:SetScript("OnEnter", function() + this.label:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + end) + btn:SetScript("OnLeave", function() + this:UpdateVisual() + end) + + btn:UpdateVisual() + return btn + end + + f.optHighest = MakeCheckOption(f, "只显示最高等级", L.SIDE_PAD, optY, + function() return SFramesDB.spellBookHighestOnly == true end, + function(v) SFramesDB.spellBookHighestOnly = v; S.currentPage = 1 end + ) + + f.optReplace = MakeCheckOption(f, "学习新等级自动替换动作条", L.SIDE_PAD + 120, optY, + function() return SFramesDB.spellBookAutoReplace == true end, + function(v) SFramesDB.spellBookAutoReplace = v end + ) +end + +-------------------------------------------------------------------------------- +-- Build Main Frame +-------------------------------------------------------------------------------- +local function BuildMainFrame() + if S.frame then return end + + local f = CreateFrame("Frame", "SFramesSpellBookUI", UIParent) + f:SetWidth(L.FRAME_W) + f:SetHeight(L.FRAME_H) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + f:SetFrameStrata("HIGH") + f:SetFrameLevel(10) + SetRoundBackdrop(f) + CreateShadow(f) + + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetScript("OnShow", function() + if SpellBookFrame and SpellBookFrame:IsShown() then + SpellBookFrame:Hide() + end + FullRefresh() + end) + + BuildHeader(f) + BuildSkillTabs(f) + local contentTop = BuildSpellGrid(f) + local pageY = BuildPagination(f, contentTop) + BuildOptions(f, pageY) + + table.insert(UISpecialFrames, "SFramesSpellBookUI") + + local scale = SFramesDB.spellBookScale or 1 + if scale ~= 1 then f:SetScale(scale) end + + S.frame = f + f:Hide() +end + +-------------------------------------------------------------------------------- +-- Public API +-------------------------------------------------------------------------------- +function SB:Toggle(bookType) + if not S.initialized then return end + if not S.frame then BuildMainFrame() end + + if bookType then + if bookType == (BOOKTYPE_PET or "pet") then + S.currentBook = "pet" + else + S.currentBook = "spell" + end + end + + if S.frame:IsShown() then + S.frame:Hide() + else + S.currentTab = 1 + S.currentPage = 1 + S.frame:Show() + end +end + +function SB:Show(bookType) + if not S.initialized then return end + if not S.frame then BuildMainFrame() end + if bookType then + if bookType == (BOOKTYPE_PET or "pet") then + S.currentBook = "pet" + else + S.currentBook = "spell" + end + end + S.currentTab = 1 + S.currentPage = 1 + S.frame:Show() +end + +function SB:Hide() + if S.frame and S.frame:IsShown() then + S.frame:Hide() + end +end + +function SB:IsShown() + return S.frame and S.frame:IsShown() +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function SB:Initialize() + if S.initialized then return end + S.initialized = true + + if SFramesDB.spellBookHighestOnly == nil then SFramesDB.spellBookHighestOnly = false end + if SFramesDB.spellBookAutoReplace == nil then SFramesDB.spellBookAutoReplace = false end + + HideBlizzardSpellBook() + BuildMainFrame() + + local ef = CreateFrame("Frame", nil, UIParent) + ef:RegisterEvent("SPELLS_CHANGED") + ef:RegisterEvent("LEARNED_SPELL_IN_TAB") + ef:RegisterEvent("SPELL_UPDATE_COOLDOWN") + ef:SetScript("OnEvent", function() + if event == "LEARNED_SPELL_IN_TAB" then + AutoReplaceActionBarSpells() + end + if S.frame and S.frame:IsShown() then + FullRefresh() + end + end) +end + +-------------------------------------------------------------------------------- +-- Hook ToggleSpellBook +-------------------------------------------------------------------------------- +local origToggleSpellBook = ToggleSpellBook +ToggleSpellBook = function(bookType) + if SFramesDB and SFramesDB.enableSpellBook == false then + if origToggleSpellBook then + origToggleSpellBook(bookType) + end + return + end + SB:Toggle(bookType) +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame", nil, UIParent) +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableSpellBook == nil then + SFramesDB.enableSpellBook = true + end + if SFramesDB.enableSpellBook ~= false then + SB:Initialize() + end + end +end) diff --git a/StatSummary.lua b/StatSummary.lua new file mode 100644 index 0000000..122fe59 --- /dev/null +++ b/StatSummary.lua @@ -0,0 +1,868 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Stat Summary & Equipment List (StatSummary.lua) +-------------------------------------------------------------------------------- + +SFrames.StatSummary = {} +local SS = SFrames.StatSummary +local summaryFrame + +-------------------------------------------------------------------------------- +-- Theme (reuse CharacterPanel colors) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + enchanted = { 0.30, 1, 0.30 }, + noEnchant = { 1, 0.35, 0.35 }, + setColor = { 1, 0.85, 0.0 }, + defColor = { 0.35, 0.90, 0.25 }, + physColor = { 0.90, 0.75, 0.55 }, + spellColor = { 0.60, 0.80, 1.00 }, + regenColor = { 0.40, 0.90, 0.70 }, + statColors = { + str = { 0.78, 0.61, 0.43 }, + agi = { 0.52, 1, 0.52 }, + sta = { 0.75, 0.55, 0.25 }, + int = { 0.41, 0.80, 0.94 }, + spi = { 1, 1, 1 }, + }, + resistColors = { + arcane = { 0.95, 0.90, 0.40 }, + fire = { 1, 0.50, 0.15 }, + nature = { 0.35, 0.90, 0.25 }, + frost = { 0.45, 0.70, 1.00 }, + shadow = { 0.60, 0.35, 0.90 }, + }, +}) + +local PANEL_W = 220 +local PANEL_H = 490 +local HEADER_H = 24 +local ROW_H = 14 +local SECTION_GAP = 4 +local SIDE_PAD = 6 + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, + [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, + [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, + [5] = { 1, 0.5, 0 }, +} + +local ENCHANTABLE_SLOTS = { + { id = 1, name = "HeadSlot", label = "头部" }, + { id = 3, name = "ShoulderSlot", label = "肩部" }, + { id = 15, name = "BackSlot", label = "背部" }, + { id = 5, name = "ChestSlot", label = "胸部" }, + { id = 9, name = "WristSlot", label = "手腕" }, + { id = 10, name = "HandsSlot", label = "手套" }, + { id = 7, name = "LegsSlot", label = "腿部" }, + { id = 8, name = "FeetSlot", label = "脚部" }, + { id = 11, name = "Finger0Slot", label = "戒指1" }, + { id = 12, name = "Finger1Slot", label = "戒指2" }, + { id = 16, name = "MainHandSlot", label = "主手" }, + { id = 17, name = "SecondaryHandSlot",label = "副手" }, + { id = 18, name = "RangedSlot", label = "远程" }, +} + +local widgetId = 0 + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function NN(p) + widgetId = widgetId + 1 + return "SFramesSS" .. (p or "") .. widgetId +end + +local function SetBD(f, bg, bd) + f:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 } + }) + local b = bg or T.bg + local d = bd or T.border + f:SetBackdropColor(b[1], b[2], b[3], b[4] or 1) + f:SetBackdropBorderColor(d[1], d[2], d[3], d[4] or 1) +end + +local function SetPBD(f, bg, bd) + f:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + if bg then f:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) end + if bd then f:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) end +end + +local function FS(parent, size, jh, color) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), size or 10, "OUTLINE") + fs:SetJustifyH(jh or "LEFT") + local c = color or T.valueText + fs:SetTextColor(c[1], c[2], c[3]) + return fs +end + +-------------------------------------------------------------------------------- +-- Stat helpers +-------------------------------------------------------------------------------- +local function GetIBL() + if AceLibrary and AceLibrary.HasInstance and AceLibrary:HasInstance("ItemBonusLib-1.0") then + local ok, lib = pcall(function() return AceLibrary("ItemBonusLib-1.0") end) + if ok and lib then return lib end + end + return nil +end + +local function GearB(key) + local lib = GetIBL() + if lib and lib.GetBonus then return lib:GetBonus(key) or 0 end + return 0 +end + +local function TryAPI(names) + for i = 1, table.getn(names) do + local fn = _G[names[i]] + if fn then + local ok, val = pcall(fn) + if ok and type(val) == "number" and val > 0 then return val end + end + end + return 0 +end + +local function TryAPIa(names, a1) + for i = 1, table.getn(names) do + local fn = _G[names[i]] + if fn then + local ok, val = pcall(fn, a1) + if ok and type(val) == "number" and val > 0 then return val end + end + end + return 0 +end + +local function GetCS() + if SFrames and SFrames.CharacterPanel and SFrames.CharacterPanel.CS then + return SFrames.CharacterPanel.CS + end + return nil +end + +-------------------------------------------------------------------------------- +-- Scroll frame +-------------------------------------------------------------------------------- +local function MakeScroll(parent, w, h) + local holder = CreateFrame("Frame", NN("H"), parent) + holder:SetWidth(w) + holder:SetHeight(h) + + local sf = CreateFrame("ScrollFrame", NN("S"), holder) + sf:SetPoint("TOPLEFT", holder, "TOPLEFT", 0, 0) + sf:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -8, 0) + + local child = CreateFrame("Frame", NN("C"), sf) + child:SetWidth(w - 12) + child:SetHeight(1) + sf:SetScrollChild(child) + + local sb = CreateFrame("Slider", NN("B"), holder) + sb:SetWidth(5) + sb:SetPoint("TOPRIGHT", holder, "TOPRIGHT", -1, -2) + sb:SetPoint("BOTTOMRIGHT", holder, "BOTTOMRIGHT", -1, 2) + sb:SetOrientation("VERTICAL") + sb:SetMinMaxValues(0, 1) + sb:SetValue(0) + SetPBD(sb, { 0.1, 0.1, 0.12, 0.4 }, { 0.15, 0.15, 0.18, 0.3 }) + + local thumb = sb:CreateTexture(nil, "OVERLAY") + thumb:SetTexture("Interface\\Buttons\\WHITE8X8") + thumb:SetVertexColor(0.4, 0.4, 0.48, 0.7) + thumb:SetWidth(5) + thumb:SetHeight(24) + sb:SetThumbTexture(thumb) + + sb:SetScript("OnValueChanged", function() + sf:SetVerticalScroll(this:GetValue()) + end) + holder:EnableMouseWheel(1) + holder:SetScript("OnMouseWheel", function() + local cur = sb:GetValue() + local step = 24 + local lo, mx = sb:GetMinMaxValues() + if arg1 > 0 then + sb:SetValue(math.max(cur - step, 0)) + else + sb:SetValue(math.min(cur + step, mx)) + end + end) + + holder.sf = sf + holder.child = child + holder.sb = sb + holder.UpdateH = function(_, ch) + child:SetHeight(ch) + local visH = sf:GetHeight() + local maxS = math.max(ch - visH, 0) + sb:SetMinMaxValues(0, maxS) + if maxS == 0 then sb:Hide() else sb:Show() end + sb:SetValue(math.min(sb:GetValue(), maxS)) + end + return holder +end + +-------------------------------------------------------------------------------- +-- Enchant detection (comprehensive for vanilla 1.12 / Turtle WoW) +-- +-- Vanilla WoW tooltip green text types: +-- 1. Enchant effects (what we detect) +-- 2. "装备:" / "Equip:" item innate effects +-- 3. "使用:" / "Use:" item use effects +-- 4. "击中时可能:" / "Chance on hit:" proc effects +-- 5. "(X) 套装:" active set bonuses +-- Strategy: exclude #2-5, then positive-match enchant patterns. +-- +-- Covers: standard enchanting, libram/arcanum (head/legs), ZG class enchants, +-- ZG/Naxx shoulder augments, armor kits, weapon chains, scopes, spurs, +-- counterweights, and Turtle WoW custom enchants. +-------------------------------------------------------------------------------- +local scanTip + +local function EnsureTip() + if not scanTip then + scanTip = CreateFrame("GameTooltip", "SFramesSScanTip", nil, "GameTooltipTemplate") + end + scanTip:SetOwner(UIParent, "ANCHOR_NONE") + return scanTip +end + +local PROC_ENCHANTS = { + "十字军", "Crusader", + "吸取生命", "Lifestealing", + "灼热武器", "Fiery Weapon", "火焰武器", + "寒冰", "Icy Chill", + "邪恶武器", "Unholy Weapon", + "恶魔杀手", "Demonslaying", + "无法被缴械", "Cannot be Disarmed", +} + +local function IsEnchantLine(txt) + if string.find(txt, "%+%d") then return true end + if string.find(txt, "%d+%%") then return true end + for i = 1, table.getn(PROC_ENCHANTS) do + if string.find(txt, PROC_ENCHANTS[i]) then return true end + end + return false +end + +local function GetEnchant(slotId) + local tip = EnsureTip() + tip:ClearLines() + tip:SetInventoryItem("player", slotId) + local n = tip:NumLines() + if not n or n < 2 then return false, nil end + + for i = 2, n do + local obj = _G["SFramesSScanTipTextLeft" .. i] + if obj then + local txt = obj:GetText() + if txt and txt ~= "" then + local r, g, b = obj:GetTextColor() + if g > 0.8 and r < 0.5 and b < 0.5 then + local skip = false + if string.find(txt, "装备:") or string.find(txt, "装备:") or string.find(txt, "Equip:") then + skip = true + elseif string.find(txt, "使用:") or string.find(txt, "使用:") or string.find(txt, "Use:") then + skip = true + elseif string.find(txt, "击中时可能") or string.find(txt, "Chance on hit") then + skip = true + elseif string.find(txt, "^%(") then + skip = true + elseif string.find(txt, "套装:") or string.find(txt, "套装:") or string.find(txt, "Set:") then + skip = true + end + if not skip and IsEnchantLine(txt) then + return true, txt + end + end + end + end + end + return false, nil +end + +-------------------------------------------------------------------------------- +-- Set bonus detection +-------------------------------------------------------------------------------- +local function GetSets() + local tip = EnsureTip() + local sets = {} + local seen = {} + local slots = { 1,2,3,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 } + + for si = 1, table.getn(slots) do + local sid = slots[si] + local link = GetInventoryItemLink("player", sid) + if link then + tip:ClearLines() + tip:SetOwner(UIParent, "ANCHOR_NONE") + tip:SetInventoryItem("player", sid) + local nl = tip:NumLines() + if nl then + for li = 1, nl do + local obj = _G["SFramesSScanTipTextLeft" .. li] + if obj then + local txt = obj:GetText() + if txt then + local a, b, sn, sc, sm + a, b, sn, sc, sm = string.find(txt, "^(.-)%s*%((%d+)/(%d+)%)$") + if sn and sc and sm then + sn = string.gsub(sn, "^%s+", "") + sn = string.gsub(sn, "%s+$", "") + if sn ~= "" and not seen[sn] then + seen[sn] = true + table.insert(sets, { + name = sn, + current = tonumber(sc) or 0, + max = tonumber(sm) or 0, + }) + end + end + end + end + end + end + end + end + return sets +end + +-------------------------------------------------------------------------------- +-- Build the panel +-------------------------------------------------------------------------------- +local function BuildPanel() + if summaryFrame then return summaryFrame end + + local f = CreateFrame("Frame", "SFramesStatSummary", UIParent) + f:SetWidth(PANEL_W) + f:SetHeight(PANEL_H) + f:SetPoint("CENTER", UIParent, "CENTER", 200, 0) + f:SetFrameStrata("DIALOG") + f:SetFrameLevel(100) + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetClampedToScreen(true) + SetBD(f, T.bg, T.border) + f:Hide() + + -- Header + local hdr = FS(f, 11, "LEFT", T.gold) + hdr:SetPoint("TOPLEFT", f, "TOPLEFT", SIDE_PAD + 2, -6) + hdr:SetText("属性总览") + + -- Tab buttons + local tabW = 60 + f.tabs = {} + f.curTab = 1 + local tNames = { "属性", "装备" } + for i = 1, 2 do + local btn = CreateFrame("Button", NN("T"), f) + btn:SetWidth(tabW) + btn:SetHeight(16) + btn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -(SIDE_PAD + (2 - i) * (tabW + 2) + 20), -5) + btn:SetFrameLevel(f:GetFrameLevel() + 2) + SetPBD(btn, T.tabBg, T.tabBorder) + local lbl = FS(btn, 9, "CENTER", T.tabText) + lbl:SetPoint("CENTER", btn, "CENTER", 0, 0) + lbl:SetText(tNames[i]) + btn.lbl = lbl + btn.idx = i + btn:SetScript("OnClick", function() SS:SetTab(this.idx) end) + f.tabs[i] = btn + end + + -- Close + local cb = CreateFrame("Button", nil, f) + cb:SetWidth(14) + cb:SetHeight(14) + cb:SetPoint("TOPRIGHT", f, "TOPRIGHT", -5, -5) + cb:SetFrameLevel(f:GetFrameLevel() + 3) + SetBD(cb, T.buttonDownBg or { 0.35, 0.06, 0.06, 0.85 }, T.btnBorder or { 0.45, 0.1, 0.1, 0.6 }) + local cx = FS(cb, 8, "CENTER", { 1, 0.7, 0.7 }) + cx:SetPoint("CENTER", cb, "CENTER", 0, 0) + cx:SetText("x") + cb:SetScript("OnClick", function() f:Hide() end) + + -- Sep + local sep = f:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + sep:SetHeight(1) + sep:SetPoint("TOPLEFT", f, "TOPLEFT", 4, -HEADER_H) + sep:SetPoint("TOPRIGHT", f, "TOPRIGHT", -4, -HEADER_H) + + -- Content + local cH = PANEL_H - HEADER_H - 8 + local cW = PANEL_W - 8 + + f.statsScroll = MakeScroll(f, cW, cH) + f.statsScroll:SetPoint("TOPLEFT", f, "TOPLEFT", 4, -(HEADER_H + 2)) + + f.equipScroll = MakeScroll(f, cW, cH) + f.equipScroll:SetPoint("TOPLEFT", f, "TOPLEFT", 4, -(HEADER_H + 2)) + f.equipScroll:Hide() + + summaryFrame = f + return f +end + +-------------------------------------------------------------------------------- +-- Tab switching +-------------------------------------------------------------------------------- +function SS:SetTab(idx) + if not summaryFrame then return end + summaryFrame.curTab = idx + for i = 1, 2 do + local btn = summaryFrame.tabs[i] + if i == idx then + SetPBD(btn, T.tabActiveBg, T.tabActiveBorder) + btn.lbl:SetTextColor(T.tabActiveText[1], T.tabActiveText[2], T.tabActiveText[3]) + else + SetPBD(btn, T.tabBg, T.tabBorder) + btn.lbl:SetTextColor(T.tabText[1], T.tabText[2], T.tabText[3]) + end + end + if idx == 1 then + summaryFrame.statsScroll:Show() + summaryFrame.equipScroll:Hide() + local ok, err = pcall(function() SS:BuildStats() end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444SS BuildStats err: " .. tostring(err) .. "|r") + end + else + summaryFrame.statsScroll:Hide() + summaryFrame.equipScroll:Show() + local ok, err = pcall(function() SS:BuildEquip() end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444SS BuildEquip err: " .. tostring(err) .. "|r") + end + end +end + +-------------------------------------------------------------------------------- +-- Helpers for building rows +-------------------------------------------------------------------------------- +local function HideRows(parent) + if parent._r then + for i = 1, table.getn(parent._r) do + local r = parent._r[i] + if r and r.Hide then r:Hide() end + end + end + parent._r = {} +end + +local function AddHeader(p, txt, y, clr) + local f1 = FS(p, 10, "LEFT", clr or T.sectionTitle) + f1:SetPoint("TOPLEFT", p, "TOPLEFT", 4, y) + f1:SetText(txt) + tinsert(p._r, f1) + + local s = p:CreateTexture(nil, "ARTWORK") + s:SetTexture("Interface\\Buttons\\WHITE8X8") + s:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + s:SetHeight(1) + s:SetPoint("TOPLEFT", p, "TOPLEFT", 4, y - 13) + s:SetPoint("TOPRIGHT", p, "TOPRIGHT", -4, y - 13) + tinsert(p._r, s) + return y - 16 +end + +local function AddRow(p, lbl, val, y, lc, vc) + local f1 = FS(p, 9, "LEFT", lc or T.labelText) + f1:SetPoint("TOPLEFT", p, "TOPLEFT", 8, y) + f1:SetText(lbl) + tinsert(p._r, f1) + + local f2 = FS(p, 9, "RIGHT", vc or T.valueText) + f2:SetPoint("TOPRIGHT", p, "TOPRIGHT", -12, y) + f2:SetWidth(100) + f2:SetJustifyH("RIGHT") + f2:SetText(val) + tinsert(p._r, f2) + return y - ROW_H +end + +-------------------------------------------------------------------------------- +-- Stats page +-------------------------------------------------------------------------------- +function SS:BuildStats() + local child = summaryFrame.statsScroll.child + HideRows(child) + local y = -4 + + -- Primary Stats + y = AddHeader(child, "主属性:", y) + local sn = { "力量", "敏捷", "耐力", "智力", "精神" } + local sc = { T.statColors.str, T.statColors.agi, T.statColors.sta, T.statColors.int, T.statColors.spi } + for i = 1, 5 do + local _, eff = UnitStat("player", i) + y = AddRow(child, sn[i], tostring(math.floor(eff or 0)), y, sc[i], sc[i]) + end + + y = y - SECTION_GAP + + -- Defense + y = AddHeader(child, "防御属性:", y, T.defColor) + local hp = UnitHealthMax("player") or 0 + y = AddRow(child, "生命值", tostring(hp), y, nil, T.defColor) + + local dodge = 0 + if GetDodgeChance then dodge = GetDodgeChance() or 0 end + if dodge == 0 then dodge = GearB("DODGE") end + y = AddRow(child, "躲闪", string.format("%.2f%%", dodge), y) + + local baseA, effA = UnitArmor("player") + effA = math.floor(effA or baseA or 0) + y = AddRow(child, "护甲", tostring(effA), y) + + local lvl = UnitLevel("player") or 60 + local k1 = 400 + 85 * lvl + local p1 = effA / (effA + k1) * 100 + if p1 > 75 then p1 = 75 end + y = AddRow(child, "物理免伤同级", string.format("%.2f%%", p1), y) + + local k2 = 400 + 85 * (lvl + 3) + local p2 = effA / (effA + k2) * 100 + if p2 > 75 then p2 = 75 end + y = AddRow(child, "物理免伤骷髅级", string.format("%.2f%%", p2), y) + + y = y - SECTION_GAP + + -- Resistances + y = AddHeader(child, "抗性:", y, T.resistColors.arcane) + local rInfo = { + { 6, "奥术抗性", T.resistColors.arcane }, + { 2, "火焰抗性", T.resistColors.fire }, + { 3, "自然抗性", T.resistColors.nature }, + { 4, "冰霜抗性", T.resistColors.frost }, + { 5, "暗影抗性", T.resistColors.shadow }, + } + for i = 1, table.getn(rInfo) do + local ri = rInfo[i] + local _, tot = UnitResistance("player", ri[1]) + y = AddRow(child, ri[2], tostring(math.floor(tot or 0)), y, ri[3], ri[3]) + end + + y = y - SECTION_GAP + + -- Physical + y = AddHeader(child, "物理:", y, T.physColor) + local mb, mp, mn = UnitAttackPower("player") + local mAP = math.floor((mb or 0) + (mp or 0) + (mn or 0)) + local rb, rp, rn = UnitRangedAttackPower("player") + local rAP = math.floor((rb or 0) + (rp or 0) + (rn or 0)) + y = AddRow(child, "近战/远程攻强", mAP .. "/" .. rAP, y, nil, T.physColor) + + local cs = GetCS() + local mHit = cs and cs.SafeGetMeleeHit and cs.SafeGetMeleeHit() or 0 + if mHit == 0 then + mHit = TryAPI({ "GetHitModifier", "GetMeleeHitModifier" }) + if mHit == 0 then mHit = GearB("TOHIT") end + end + y = AddRow(child, "近战/远程命中", string.format("+%d%%/+%d%%", mHit, mHit), y) + + local mCrit = cs and cs.SafeGetMeleeCrit and cs.SafeGetMeleeCrit() or 0 + if mCrit == 0 then + mCrit = TryAPI({ "GetCritChance", "GetMeleeCritChance" }) + if mCrit == 0 then mCrit = GearB("CRIT") end + end + local rCrit = cs and cs.SafeGetRangedCrit and cs.SafeGetRangedCrit() or 0 + if rCrit == 0 then + rCrit = TryAPI({ "GetRangedCritChance" }) + if rCrit == 0 then rCrit = mCrit end + end + y = AddRow(child, "近战/远程暴击", string.format("%.2f%%/%.2f%%", mCrit, rCrit), y) + + y = y - SECTION_GAP + + -- Spell + y = AddHeader(child, "法术:", y, T.spellColor) + local mana = UnitManaMax("player") or 0 + y = AddRow(child, "法力值", tostring(mana), y, nil, T.spellColor) + + local sDmg = 0 + if GetSpellBonusDamage then + for s = 2, 7 do + local d = GetSpellBonusDamage(s) or 0 + if d > sDmg then sDmg = d end + end + end + if sDmg == 0 then + local lib = GetIBL() + if lib and lib.GetBonus then + local baseDmg = lib:GetBonus("DMG") or 0 + sDmg = baseDmg + local schools = { "FIREDMG","FROSTDMG","SHADOWDMG","ARCANEDMG","NATUREDMG","HOLYDMG" } + for _, sk in ipairs(schools) do + local sv = baseDmg + (lib:GetBonus(sk) or 0) + if sv > sDmg then sDmg = sv end + end + end + end + y = AddRow(child, "法术伤害", tostring(math.floor(sDmg)), y) + + local sHeal = 0 + if GetSpellBonusHealing then sHeal = GetSpellBonusHealing() or 0 end + if sHeal == 0 then sHeal = GearB("HEAL") end + y = AddRow(child, "法术治疗", tostring(math.floor(sHeal)), y) + + local sCrit = cs and cs.SafeGetSpellCrit and cs.SafeGetSpellCrit() or 0 + if sCrit == 0 then + sCrit = TryAPIa({ "GetSpellCritChance" }, 2) + if sCrit == 0 then sCrit = GearB("SPELLCRIT") end + end + y = AddRow(child, "法术暴击", string.format("%.2f%%", sCrit), y) + + local sHit = cs and cs.SafeGetSpellHit and cs.SafeGetSpellHit() or 0 + if sHit == 0 then + sHit = TryAPI({ "GetSpellHitModifier" }) + if sHit == 0 then sHit = GearB("SPELLTOHIT") end + end + y = AddRow(child, "法术命中", string.format("+%d%%", sHit), y) + + local sHaste = GearB("SPELLHASTE") + if sHaste > 0 then + y = AddRow(child, "急速", string.format("+%.2f%%", sHaste), y) + end + + local sPen = GearB("SPELLPEN") + if sPen > 0 then + y = AddRow(child, "法术穿透", "+" .. tostring(math.floor(sPen)), y) + end + + y = y - SECTION_GAP + + -- Regen + y = AddHeader(child, "回复:", y, T.regenColor) + + local mp5 = GearB("MANAREG") + y = AddRow(child, "装备回蓝", tostring(math.floor(mp5)) .. " MP/5s", y, nil, T.regenColor) + + local _, spi = UnitStat("player", 5) + spi = math.floor(spi or 0) + local spReg = math.floor(15 + spi / 5) + y = AddRow(child, "精神回蓝", spReg .. " MP/2s", y) + + y = y - SECTION_GAP + + -- Set bonuses + local ok2, sets = pcall(GetSets) + if ok2 and sets and table.getn(sets) > 0 then + y = AddHeader(child, "套装:", y, T.setColor) + for i = 1, table.getn(sets) do + local s = sets[i] + y = AddRow(child, s.name, "(" .. s.current .. "/" .. s.max .. ")", y, T.setColor, T.setColor) + end + end + + summaryFrame.statsScroll:UpdateH(math.abs(y) + 12) +end + +-------------------------------------------------------------------------------- +-- Equipment page +-------------------------------------------------------------------------------- +function SS:BuildEquip() + local child = summaryFrame.equipScroll.child + HideRows(child) + local y = -4 + + y = AddHeader(child, "装备列表 & 附魔检查:", y, T.gold) + + local totalSlots = 0 + local enchCount = 0 + + for si = 1, table.getn(ENCHANTABLE_SLOTS) do + local slot = ENCHANTABLE_SLOTS[si] + local link = GetInventoryItemLink("player", slot.id) + + if link then + totalSlots = totalSlots + 1 + local _, _, rawName = string.find(link, "%[(.-)%]") + local itemName = rawName or slot.label + + local quality = nil + local _, _, qH = string.find(link, "|c(%x+)|H") + local qMap = {} + qMap["ff9d9d9d"] = 0 + qMap["ffffffff"] = 1 + qMap["ff1eff00"] = 2 + qMap["ff0070dd"] = 3 + qMap["ffa335ee"] = 4 + qMap["ffff8000"] = 5 + if qH then quality = qMap[qH] end + local nc = (quality and QUALITY_COLORS[quality]) or T.valueText + + -- Slot label + local sf = FS(child, 8, "LEFT", T.dimText) + sf:SetPoint("TOPLEFT", child, "TOPLEFT", 4, y) + sf:SetText(slot.label) + sf:SetWidth(32) + tinsert(child._r, sf) + + -- Item name + local nf = FS(child, 9, "LEFT", nc) + nf:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + nf:SetWidth(130) + if string.len(itemName) > 18 then + itemName = string.sub(itemName, 1, 16) .. ".." + end + nf:SetText(itemName) + tinsert(child._r, nf) + + -- Enchant check + local hasE, eTxt = false, nil + local eOk, eR1, eR2 = pcall(GetEnchant, slot.id) + if eOk then hasE = eR1; eTxt = eR2 end + + local ico = FS(child, 9, "RIGHT") + ico:SetPoint("TOPRIGHT", child, "TOPRIGHT", -8, y) + if hasE then + ico:SetTextColor(T.enchanted[1], T.enchanted[2], T.enchanted[3]) + ico:SetText("*") + enchCount = enchCount + 1 + else + ico:SetTextColor(T.noEnchant[1], T.noEnchant[2], T.noEnchant[3]) + ico:SetText("-") + end + tinsert(child._r, ico) + + y = y - ROW_H + + if hasE and eTxt then + local ef = FS(child, 8, "LEFT", T.enchanted) + ef:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + ef:SetWidth(155) + ef:SetText(" " .. eTxt) + tinsert(child._r, ef) + y = y - 12 + elseif not hasE then + local ef = FS(child, 8, "LEFT", T.noEnchant) + ef:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + ef:SetText(" 未附魔") + tinsert(child._r, ef) + y = y - 12 + end + y = y - 2 + else + local sf = FS(child, 8, "LEFT", T.dimText) + sf:SetPoint("TOPLEFT", child, "TOPLEFT", 4, y) + sf:SetText(slot.label) + tinsert(child._r, sf) + + local ef = FS(child, 9, "LEFT", T.dimText) + ef:SetPoint("TOPLEFT", child, "TOPLEFT", 38, y) + ef:SetText("-- 未装备 --") + tinsert(child._r, ef) + y = y - ROW_H - 2 + end + end + + y = y - SECTION_GAP + y = AddHeader(child, "附魔统计:", y, T.gold) + local sc2 = (enchCount == totalSlots) and T.enchanted or T.noEnchant + y = AddRow(child, "已附魔/总装备", enchCount .. "/" .. totalSlots, y, nil, sc2) + if enchCount < totalSlots then + y = AddRow(child, "缺少附魔", tostring(totalSlots - enchCount) .. " 件", y, T.noEnchant, T.noEnchant) + end + + summaryFrame.equipScroll:UpdateH(math.abs(y) + 12) +end + +-------------------------------------------------------------------------------- +-- Public API +-------------------------------------------------------------------------------- +function SS:Toggle() + local ok, err = pcall(function() + BuildPanel() + if summaryFrame:IsShown() then + summaryFrame:Hide() + return + end + local cpf = _G["SFramesCharacterPanel"] + if cpf and cpf:IsShown() then + summaryFrame:ClearAllPoints() + summaryFrame:SetPoint("TOPLEFT", cpf, "TOPRIGHT", 2, 0) + else + summaryFrame:ClearAllPoints() + summaryFrame:SetPoint("CENTER", UIParent, "CENTER", 200, 0) + end + local scale = SFramesDB and SFramesDB.charPanelScale or 1.0 + summaryFrame:SetScale(scale) + summaryFrame:Show() + SS:SetTab(summaryFrame.curTab or 1) + end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444[Nanami-UI] SS:Toggle error: " .. tostring(err) .. "|r") + end +end + +function SS:Show() + local ok, err = pcall(function() + BuildPanel() + local cpf = _G["SFramesCharacterPanel"] + if cpf and cpf:IsShown() then + summaryFrame:ClearAllPoints() + summaryFrame:SetPoint("TOPLEFT", cpf, "TOPRIGHT", 2, 0) + end + local scale = SFramesDB and SFramesDB.charPanelScale or 1.0 + summaryFrame:SetScale(scale) + summaryFrame:Show() + SS:SetTab(summaryFrame.curTab or 1) + end) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444[Nanami-UI] SS:Show error: " .. tostring(err) .. "|r") + end +end + +function SS:Hide() + if summaryFrame then summaryFrame:Hide() end +end + +function SS:IsShown() + return summaryFrame and summaryFrame:IsShown() +end + +function SS:Refresh() + if not summaryFrame or not summaryFrame:IsShown() then return end + SS:SetTab(summaryFrame.curTab or 1) +end + +-------------------------------------------------------------------------------- +-- Events +-------------------------------------------------------------------------------- +local evf = CreateFrame("Frame", "SFramesSSEv", UIParent) +evf:RegisterEvent("UNIT_INVENTORY_CHANGED") +evf:RegisterEvent("PLAYER_AURAS_CHANGED") +evf:RegisterEvent("UNIT_ATTACK_POWER") +evf:RegisterEvent("UNIT_RESISTANCES") +evf:SetScript("OnEvent", function() + if summaryFrame and summaryFrame:IsShown() then + SS:Refresh() + end +end) + +DEFAULT_CHAT_FRAME:AddMessage("SF: Loading StatSummary.lua...") diff --git a/Theme.lua b/Theme.lua new file mode 100644 index 0000000..0b760df --- /dev/null +++ b/Theme.lua @@ -0,0 +1,269 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Central Theme Engine (Theme.lua) +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.Theme = {} +SFrames.ActiveTheme = {} + +local function HSVtoRGB(h, s, v) + if s <= 0 then return v, v, v end + h = h - math.floor(h / 360) * 360 + local hh = h / 60 + local i = math.floor(hh) + local f = hh - i + local p = v * (1 - s) + local q = v * (1 - s * f) + local t = v * (1 - s * (1 - f)) + if i == 0 then return v, t, p + elseif i == 1 then return q, v, p + elseif i == 2 then return p, v, t + elseif i == 3 then return p, q, v + elseif i == 4 then return t, p, v + else return v, p, q end +end + +local function toHexChar(n) + if n < 10 then return string.char(48 + n) end + return string.char(97 + n - 10) +end + +local function RGBtoHex(r, g, b) + local rr = math.floor(r * 255 + 0.5) + local gg = math.floor(g * 255 + 0.5) + local bb = math.floor(b * 255 + 0.5) + return "ff" + .. toHexChar(math.floor(rr / 16)) .. toHexChar(rr - math.floor(rr / 16) * 16) + .. toHexChar(math.floor(gg / 16)) .. toHexChar(gg - math.floor(gg / 16) * 16) + .. toHexChar(math.floor(bb / 16)) .. toHexChar(bb - math.floor(bb / 16) * 16) +end + +SFrames.Theme.Presets = {} +SFrames.Theme.Presets["pink"] = { name = "Pink", hue = 330, satMul = 1.00 } +SFrames.Theme.Presets["frost"] = { name = "Frost", hue = 210, satMul = 1.00 } +SFrames.Theme.Presets["emerald"] = { name = "Emerald", hue = 140, satMul = 0.85 } +SFrames.Theme.Presets["flame"] = { name = "Flame", hue = 25, satMul = 0.90 } +SFrames.Theme.Presets["shadow"] = { name = "Shadow", hue = 270, satMul = 0.90 } +SFrames.Theme.Presets["golden"] = { name = "Golden", hue = 45, satMul = 0.80 } +SFrames.Theme.Presets["teal"] = { name = "Teal", hue = 175, satMul = 0.85 } +SFrames.Theme.Presets["crimson"] = { name = "Crimson", hue = 355, satMul = 0.90 } +SFrames.Theme.Presets["holy"] = { name = "Holy", hue = 220, satMul = 0.15 } + +SFrames.Theme.PresetOrder = { "pink", "frost", "emerald", "flame", "shadow", "golden", "teal", "crimson", "holy" } + +SFrames.Theme.ClassMap = {} +SFrames.Theme.ClassMap["WARRIOR"] = "crimson" +SFrames.Theme.ClassMap["MAGE"] = "frost" +SFrames.Theme.ClassMap["ROGUE"] = "teal" +SFrames.Theme.ClassMap["DRUID"] = "flame" +SFrames.Theme.ClassMap["HUNTER"] = "emerald" +SFrames.Theme.ClassMap["SHAMAN"] = "frost" +SFrames.Theme.ClassMap["PRIEST"] = "holy" +SFrames.Theme.ClassMap["WARLOCK"] = "shadow" +SFrames.Theme.ClassMap["PALADIN"] = "golden" + +local function GenerateTheme(H, satMul) + satMul = satMul or 1.0 + local function S(s) + local v = s * satMul + if v > 1 then v = 1 end + return v + end + local function C3(s, v) + local r, g, b = HSVtoRGB(H, S(s), v) + return { r, g, b } + end + local function C4(s, v, a) + local r, g, b = HSVtoRGB(H, S(s), v) + return { r, g, b, a } + end + local t = {} + t.accent = C4(0.40, 0.80, 0.98) + t.accentDark = C3(0.45, 0.55) + t.accentLight = C3(0.30, 1.00) + t.accentHex = RGBtoHex(t.accentLight[1], t.accentLight[2], t.accentLight[3]) + t.panelBg = C4(0.50, 0.12, 0.95) + t.panelBorder = C4(0.45, 0.55, 0.90) + t.headerBg = C4(0.60, 0.10, 0.98) + t.sectionBg = C4(0.43, 0.14, 0.82) + t.sectionBorder = C4(0.38, 0.45, 0.86) + t.bg = t.panelBg + t.border = t.panelBorder + t.slotBg = C4(0.20, 0.07, 0.90) + t.slotBorder = C4(0.10, 0.28, 0.80) + t.slotHover = C4(0.38, 0.40, 0.90) + t.slotSelected = C4(0.43, 0.70, 1.00) + t.buttonBg = C4(0.44, 0.18, 0.94) + t.buttonBorder = C4(0.40, 0.50, 0.90) + t.buttonHoverBg = C4(0.47, 0.30, 0.96) + t.buttonDownBg = C4(0.50, 0.14, 0.96) + t.buttonDisabledBg = C4(0.43, 0.14, 0.65) + t.buttonActiveBg = C4(0.52, 0.42, 0.98) + t.buttonActiveBorder = C4(0.42, 0.90, 1.00) + t.buttonText = C3(0.16, 0.90) + t.buttonActiveText = C3(0.08, 1.00) + t.buttonDisabledText = C4(0.14, 0.55, 0.68) + t.btnBg = t.buttonBg + t.btnBorder = t.buttonBorder + t.btnHoverBg = t.buttonHoverBg + t.btnHoverBd = C4(0.40, 0.80, 0.98) + t.btnDownBg = t.buttonDownBg + t.btnText = t.buttonText + t.btnActiveText = t.buttonActiveText + t.btnDisabledText = C3(0.14, 0.40) + t.btnHover = C4(0.47, 0.30, 0.95) + t.btnHoverBorder = t.btnHoverBd + t.tabBg = t.buttonBg + t.tabBorder = t.buttonBorder + t.tabActiveBg = C4(0.50, 0.32, 0.96) + t.tabActiveBorder = C4(0.40, 0.80, 0.98) + t.tabText = C3(0.21, 0.70) + t.tabActiveText = t.buttonActiveText + t.checkBg = t.buttonBg + t.checkBorder = t.buttonBorder + t.checkHoverBorder = C4(0.40, 0.80, 0.95) + t.checkFill = C4(0.43, 0.88, 0.98) + t.checkOn = C3(0.40, 0.80) + t.checkOff = C4(0.40, 0.25, 0.60) + t.sliderTrack = C4(0.45, 0.22, 0.90) + t.sliderFill = C4(0.35, 0.85, 0.92) + t.sliderThumb = C4(0.25, 1.00, 0.95) + t.text = C3(0.11, 0.92) + t.title = C3(0.30, 1.00) + t.gold = t.title + t.nameText = C3(0.06, 0.92) + t.dimText = C3(0.25, 0.60) + t.bodyText = C3(0.05, 0.82) + t.sectionTitle = C3(0.24, 0.90) + t.catHeader = C3(0.31, 0.80) + t.colHeader = C3(0.25, 0.80) + t.labelText = C3(0.23, 0.65) + t.valueText = t.text + t.subText = t.labelText + t.pageText = C3(0.19, 0.80) + t.objectiveText = C3(0.10, 0.90) + t.optionText = t.tabText + t.countText = t.tabText + t.trackText = C3(0.25, 0.80) + t.divider = C4(0.45, 0.55, 0.40) + t.sepColor = C4(0.44, 0.45, 0.50) + t.scrollThumb = C4(0.45, 0.55, 0.70) + t.scrollTrack = C4(0.50, 0.08, 0.50) + t.inputBg = C4(0.50, 0.08, 0.95) + t.inputBorder = C4(0.38, 0.40, 0.80) + t.searchBg = C4(0.50, 0.08, 0.80) + t.searchBorder = C4(0.38, 0.40, 0.60) + t.progressBg = C4(0.50, 0.08, 0.90) + t.progressFill = C4(0.50, 0.70, 1.00) + t.modelBg = C4(0.60, 0.08, 0.85) + t.modelBorder = C4(0.43, 0.35, 0.70) + t.emptySlot = C4(0.40, 0.25, 0.40) + t.emptySlotBg = C4(0.50, 0.08, 0.40) + t.emptySlotBd = C4(0.40, 0.25, 0.30) + t.barBg = C4(0.60, 0.10, 1.00) + t.rowNormal = C4(0.50, 0.06, 0.30) + t.rowNormalBd = C4(0.22, 0.20, 0.30) + t.raidGroup = t.sectionBg + t.raidGroupBorder = C4(0.38, 0.40, 0.70) + t.raidSlotEmpty = C4(0.50, 0.08, 0.60) + t.questSelected = C4(0.70, 0.60, 0.85) + t.questSelBorder = C4(0.47, 0.95, 1.00) + t.questSelBar = C4(0.45, 1.00, 1.00) + t.questHover = C4(0.52, 0.25, 0.50) + t.zoneHeader = t.catHeader + t.zoneBg = C4(0.50, 0.14, 0.50) + t.collapseIcon = C3(0.31, 0.70) + t.trackBar = C4(0.53, 0.95, 1.00) + t.trackGlow = C4(0.53, 0.95, 0.22) + t.rewardBg = C4(0.50, 0.10, 0.85) + t.rewardBorder = C4(0.45, 0.40, 0.70) + t.listBg = C4(0.50, 0.08, 0.80) + t.listBorder = C4(0.43, 0.35, 0.60) + t.detailBg = C4(0.50, 0.09, 0.92) + t.detailBorder = t.listBorder + t.selectedRowBg = C4(0.65, 0.35, 0.60) + t.selectedRowBorder = C4(0.50, 0.90, 0.70) + t.selectedNameText = { 1, 0.95, 1 } + t.overlayBg = C4(0.75, 0.04, 0.55) + t.accentLine = C4(0.50, 1.00, 0.90) + t.titleColor = t.title + t.nameColor = { 1, 1, 1 } + t.valueColor = t.text + t.labelColor = C3(0.28, 0.58) + t.dimColor = C3(0.29, 0.48) + t.clockColor = C3(0.18, 1.00) + t.timerColor = C3(0.27, 0.75) + t.brandColor = C4(0.37, 0.60, 0.70) + t.particleColor = C3(0.40, 1.00) + t.wbGold = { 1, 0.88, 0.55 } + t.wbBorder = { 0.95, 0.75, 0.25 } + t.passive = { 0.60, 0.60, 0.65 } + return t +end + +function SFrames.Theme.Extend(self, extras) + local t = {} + local src = SFrames.ActiveTheme + if src then + for k, v in pairs(src) do + t[k] = v + end + end + if extras then + for k, v in pairs(extras) do + t[k] = v + end + end + return t +end + +function SFrames.Theme.Apply(self, presetKey) + local preset = self.Presets[presetKey or "pink"] + if not preset then preset = self.Presets["pink"] end + local newTheme = GenerateTheme(preset.hue, preset.satMul) + local oldKeys = {} + for k, v in pairs(SFrames.ActiveTheme) do + table.insert(oldKeys, k) + end + for i = 1, table.getn(oldKeys) do + SFrames.ActiveTheme[oldKeys[i]] = nil + end + for k, v in pairs(newTheme) do + SFrames.ActiveTheme[k] = v + end + if SFrames.Config and SFrames.Config.colors then + local a = SFrames.ActiveTheme + SFrames.Config.colors.border = { r = a.accent[1], g = a.accent[2], b = a.accent[3], a = 1 } + SFrames.Config.colors.backdrop = { r = a.panelBg[1], g = a.panelBg[2], b = a.panelBg[3], a = a.panelBg[4] or 0.8 } + end +end + +function SFrames.Theme.GetCurrentPreset(self) + if SFramesDB and SFramesDB.Theme then + if SFramesDB.Theme.useClassTheme then + local _, class = UnitClass("player") + if class and self.ClassMap[class] then + return self.ClassMap[class] + end + end + if SFramesDB.Theme.preset and self.Presets[SFramesDB.Theme.preset] then + return SFramesDB.Theme.preset + end + end + return "pink" +end + +function SFrames.Theme.GetAccentHex(self) + return SFrames.ActiveTheme.accentHex or "ffffb3d9" +end + +SFrames.Theme.HSVtoRGB = HSVtoRGB +SFrames.Theme.RGBtoHex = RGBtoHex + +SFrames.Theme:Apply(SFrames.Theme:GetCurrentPreset()) + +local themeInitFrame = CreateFrame("Frame") +themeInitFrame:RegisterEvent("PLAYER_LOGIN") +themeInitFrame:SetScript("OnEvent", function() + SFrames.Theme:Apply(SFrames.Theme:GetCurrentPreset()) +end) diff --git a/Tooltip.lua b/Tooltip.lua new file mode 100644 index 0000000..23eab43 --- /dev/null +++ b/Tooltip.lua @@ -0,0 +1,1181 @@ +SFrames.FloatingTooltip = {} + +-------------------------------------------------------------------------------- +-- Class colors for tooltip unit-name coloring +-------------------------------------------------------------------------------- +local TT_CLASS_COLORS = { + ["WARRIOR"] = { 0.78, 0.61, 0.43 }, + ["MAGE"] = { 0.41, 0.80, 0.94 }, + ["ROGUE"] = { 1.00, 0.96, 0.41 }, + ["DRUID"] = { 1.00, 0.49, 0.04 }, + ["HUNTER"] = { 0.67, 0.83, 0.45 }, + ["SHAMAN"] = { 0.14, 0.35, 1.00 }, + ["PRIEST"] = { 1.00, 1.00, 1.00 }, + ["WARLOCK"] = { 0.58, 0.51, 0.79 }, + ["PALADIN"] = { 0.96, 0.55, 0.73 }, +} + +local TT_CLASS_REVERSE = {} +local ttClassReverseDone = false + +local function TT_BuildClassReverse() + if ttClassReverseDone then return end + ttClassReverseDone = true + if LOCALIZED_CLASS_NAMES_MALE then + for en, loc in pairs(LOCALIZED_CLASS_NAMES_MALE) do + TT_CLASS_REVERSE[loc] = en + end + end + if LOCALIZED_CLASS_NAMES_FEMALE then + for en, loc in pairs(LOCALIZED_CLASS_NAMES_FEMALE) do + TT_CLASS_REVERSE[loc] = en + end + end + local zh = { + ["战士"]="WARRIOR", ["法师"]="MAGE", ["盗贼"]="ROGUE", + ["德鲁伊"]="DRUID", ["猎人"]="HUNTER", ["萨满祭司"]="SHAMAN", + ["牧师"]="PRIEST", ["术士"]="WARLOCK", ["圣骑士"]="PALADIN", + } + for loc, en in pairs(zh) do + if not TT_CLASS_REVERSE[loc] then TT_CLASS_REVERSE[loc] = en end + end + for en, _ in pairs(TT_CLASS_COLORS) do + TT_CLASS_REVERSE[en] = en + TT_CLASS_REVERSE[string.lower(en)] = en + end +end + +local function TT_GetClassToken(unit) + if not UnitExists(unit) then return nil end + local className, classEN = UnitClass(unit) + if classEN and classEN ~= "" then return string.upper(classEN) end + if className then + TT_BuildClassReverse() + return TT_CLASS_REVERSE[className] + end + return nil +end + +local function TT_GetClassColor(classToken) + if not classToken then return nil, nil, nil end + if CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[classToken] then + local c = CUSTOM_CLASS_COLORS[classToken] + return c.r, c.g, c.b + end + if RAID_CLASS_COLORS and RAID_CLASS_COLORS[classToken] then + local c = RAID_CLASS_COLORS[classToken] + return c.r, c.g, c.b + end + local c = TT_CLASS_COLORS[classToken] + if c then return c[1], c[2], c[3] end + return nil, nil, nil +end + +local function TT_ClassHex(classToken) + local r, g, b = TT_GetClassColor(classToken) + if not r then return "|cffffffff" end + return string.format("|cff%02x%02x%02x", r * 255, g * 255, b * 255) +end + +-------------------------------------------------------------------------------- +-- Backdrop helper (applied once, not every frame) +-------------------------------------------------------------------------------- +local TT_BACKDROP = { + bgFile = "Interface\\Buttons\\WHITE8X8", + insets = { left = 0, right = 0, top = 0, bottom = 0 }, +} + +local function TT_ApplyBackdrop(frame) + frame:SetBackdrop(TT_BACKDROP) + local _A = SFrames.ActiveTheme + if _A and _A.panelBg then + frame:SetBackdropColor(_A.panelBg[1], _A.panelBg[2], _A.panelBg[3], 0.95) + else + frame:SetBackdropColor(0.08, 0.08, 0.08, 0.95) + end +end + +-------------------------------------------------------------------------------- +-- Level difficulty color (fallback if GetDifficultyColor is unavailable) +-------------------------------------------------------------------------------- +local function TT_DifficultyColor(unitLevel) + local playerLevel = UnitLevel("player") or 1 + if unitLevel < 0 then return 1, 0, 0 end + local diff = unitLevel - playerLevel + if diff >= 5 then + return 1, 0.1, 0.1 + elseif diff >= 3 then + return 1, 0.5, 0.25 + elseif diff >= -2 then + return 1, 1, 0 + elseif diff >= -8 then + return 0.25, 0.75, 0.25 + else + return 0.5, 0.5, 0.5 + end +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function SFrames.FloatingTooltip:Initialize() + TT_ApplyBackdrop(GameTooltip) + + -------------------------------------------------------------------------- + -- Standalone backdrop frame: a SIBLING of GameTooltip (parented to + -- UIParent, not GameTooltip) at the same TOOLTIP strata but one frame- + -- level below. This guarantees it renders directly behind the tooltip + -- text and is completely immune to C++ SetBackdrop resets. + -------------------------------------------------------------------------- + if not GameTooltip._nanamiBG then + GameTooltip._nanamiBG = true + + local bgFrame = CreateFrame("Frame", "NanamiTooltipBG", UIParent) + bgFrame:SetFrameStrata("TOOLTIP") + bgFrame:SetFrameLevel(math.max(1, GameTooltip:GetFrameLevel()) - 1) + bgFrame:Hide() + GameTooltip._nanamiBGFrame = bgFrame + + local bg = bgFrame:CreateTexture(nil, "ARTWORK") + bg:SetTexture("Interface\\Buttons\\WHITE8X8") + local _Abg = SFrames.ActiveTheme + if _Abg and _Abg.panelBg then + bg:SetVertexColor(_Abg.panelBg[1], _Abg.panelBg[2], _Abg.panelBg[3], 0.95) + else + bg:SetVertexColor(0.08, 0.08, 0.08, 0.95) + end + bg:SetAllPoints(bgFrame) + GameTooltip._nanamiBGTex = bg + + end + + -------------------------------------------------------------------------- + -- Health bar: position, backdrop, texture, health text + -------------------------------------------------------------------------- + local barFont = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + GameTooltipStatusBar:SetHeight(10) + GameTooltipStatusBar:ClearAllPoints() + GameTooltipStatusBar:SetPoint("BOTTOMLEFT", GameTooltip, "TOPLEFT", 4, 2) + GameTooltipStatusBar:SetPoint("BOTTOMRIGHT", GameTooltip, "TOPRIGHT", -4, 2) + GameTooltipStatusBar:SetStatusBarTexture(SFrames:GetTexture()) + + GameTooltipStatusBar.bg = GameTooltipStatusBar.bg or GameTooltipStatusBar:CreateTexture(nil, "BACKGROUND") + GameTooltipStatusBar.bg:SetTexture("Interface\\TARGETINGFRAME\\UI-StatusBar") + GameTooltipStatusBar.bg:SetVertexColor(.1, .1, 0, .8) + GameTooltipStatusBar.bg:SetAllPoints(true) + + if not GameTooltipStatusBar.backdrop then + local bd = CreateFrame("Frame", "SFramesTooltipStatusBarBD", GameTooltipStatusBar) + bd:SetPoint("TOPLEFT", GameTooltipStatusBar, "TOPLEFT", -3, 3) + bd:SetPoint("BOTTOMRIGHT", GameTooltipStatusBar, "BOTTOMRIGHT", 3, -3) + bd:SetBackdrop({ + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 8, edgeSize = 12, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + bd:SetBackdropBorderColor(.8, .8, .8, 1) + GameTooltipStatusBar.backdrop = bd + end + + if not GameTooltipStatusBar.healthText then + local ht = GameTooltipStatusBar.backdrop:CreateFontString(nil, "DIALOG", "GameFontWhite") + ht:SetFont(barFont, 12, "OUTLINE") + ht:SetPoint("TOP", 0, 4) + ht:SetNonSpaceWrap(false) + GameTooltipStatusBar.healthText = ht + end + + if not GameTooltipStatusBar._origSetColor then + GameTooltipStatusBar._origSetColor = GameTooltipStatusBar.SetStatusBarColor + GameTooltipStatusBar.SetStatusBarColor = function() return end + end + + -------------------------------------------------------------------------- + -- Track mouseover name/level for health estimation + -------------------------------------------------------------------------- + local ttMouseName, ttMouseLevel + + local barEvents = CreateFrame("Frame", nil, GameTooltipStatusBar) + barEvents:RegisterEvent("UPDATE_MOUSEOVER_UNIT") + barEvents:SetScript("OnEvent", function() + ttMouseName = UnitName("mouseover") + ttMouseLevel = UnitLevel("mouseover") + end) + + local function TT_Abbreviate(val) + if val >= 1000000 then + return string.format("%.1fM", val / 1000000) + elseif val >= 10000 then + return string.format("%.1fK", val / 1000) + end + return tostring(math.floor(val)) + end + + local barThrottle = 0 + barEvents:SetScript("OnUpdate", function() + barThrottle = barThrottle + arg1 + if barThrottle < 0.1 then return end + barThrottle = 0 + + local hp = GameTooltipStatusBar:GetValue() + local _, hpmax = GameTooltipStatusBar:GetMinMaxValues() + if hpmax and hpmax > 0 then + if hpmax > 100 then + GameTooltipStatusBar.healthText:SetText( + TT_Abbreviate(hp) .. " / " .. TT_Abbreviate(hpmax)) + else + GameTooltipStatusBar.healthText:SetText( + string.format("%d%%", math.ceil(hp / hpmax * 100))) + end + else + GameTooltipStatusBar.healthText:SetText("") + end + end) + + local linesFormatted = false + + -------------------------------------------------------------------------- + -- Track tooltip owner to skip styling for world-map / pfQuest markers + -------------------------------------------------------------------------- + local ttOwner = nil + local orig_SetOwner = GameTooltip.SetOwner + GameTooltip.SetOwner = function(self, owner, anchor, xOff, yOff) + ttOwner = owner + return orig_SetOwner(self, owner, anchor, xOff, yOff) + end + + local function TT_IsMapMarkerTooltip() + if not ttOwner then return false end + if WorldMapFrame and WorldMapFrame:IsShown() then + local name = ttOwner.GetName and ttOwner:GetName() + if name and (string.find(name, "^pf") or string.find(name, "^WorldMap")) then + return true + end + local parent = ttOwner.GetParent and ttOwner:GetParent() + while parent do + if parent == WorldMapFrame or parent == WorldMapButton then + return true + end + parent = parent.GetParent and parent:GetParent() + end + end + return false + end + + local function TT_ShowBar(show) + if not GameTooltipStatusBar then return end + GameTooltipStatusBar:SetStatusBarTexture(SFrames:GetTexture()) + if show then + GameTooltipStatusBar:SetAlpha(1) + GameTooltipStatusBar:Show() + if GameTooltipStatusBar.backdrop then + GameTooltipStatusBar.backdrop:SetAlpha(1) + GameTooltipStatusBar.backdrop:Show() + end + else + GameTooltipStatusBar:SetAlpha(0) + if GameTooltipStatusBar.backdrop then + GameTooltipStatusBar.backdrop:SetAlpha(0) + end + if GameTooltipStatusBar.healthText then GameTooltipStatusBar.healthText:SetText("") end + end + end + + -- Sync the standalone bg frame to match GameTooltip's position/size + local function TT_SyncBGFrame() + local bf = GameTooltip._nanamiBGFrame + if not bf then return end + local w = GameTooltip:GetWidth() + local h = GameTooltip:GetHeight() + if w and h and w > 0 and h > 0 then + bf:SetWidth(w) + bf:SetHeight(h) + bf:ClearAllPoints() + bf:SetPoint("TOPLEFT", GameTooltip, "TOPLEFT", 0, 0) + bf:SetFrameLevel(math.max(1, GameTooltip:GetFrameLevel()) - 1) + bf:Show() + end + end + + -- OnShow: apply backdrop, sync bg frame, reset formatting flag + local orig_OnShow = GameTooltip:GetScript("OnShow") + local ttIsMapMarker = false + GameTooltip:SetScript("OnShow", function() + if orig_OnShow then orig_OnShow() end + linesFormatted = false + ttIsMapMarker = TT_IsMapMarkerTooltip() + TT_ApplyBackdrop(this) + TT_SyncBGFrame() + if not ttIsMapMarker then + TT_ShowBar(UnitExists("mouseover")) + end + end) + + -- OnUpdate: throttled backdrop/bar refresh and cursor tracking + local orig_OnUpdate = GameTooltip:GetScript("OnUpdate") + local ttThrottle = 0 + GameTooltip:SetScript("OnUpdate", function() + if orig_OnUpdate then orig_OnUpdate() end + + ttThrottle = ttThrottle + arg1 + if ttThrottle < 0.05 then return end + ttThrottle = 0 + + TT_ApplyBackdrop(this) + TT_SyncBGFrame() + if not ttIsMapMarker then + TT_ShowBar(UnitExists("mouseover")) + end + if not linesFormatted then + linesFormatted = true + if not ttIsMapMarker and UnitExists("mouseover") then + SFrames.FloatingTooltip:FormatLines(this) + end + end + + if SFramesDB and SFramesDB.tooltipMode == "CURSOR" and not ttIsMapMarker then + local x, y = GetCursorPosition() + local scale = UIParent:GetEffectiveScale() + if scale and scale > 0 then + this:ClearAllPoints() + this:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", (x / scale) + 16, (y / scale) - 16) + end + end + end) + + -- OnHide: hide bg frame, reset flag and owner tracking + local orig_OnHide = GameTooltip:GetScript("OnHide") + GameTooltip:SetScript("OnHide", function() + linesFormatted = false + ttOwner = nil + if GameTooltip._nanamiBGFrame then + GameTooltip._nanamiBGFrame:Hide() + end + if orig_OnHide then orig_OnHide() end + end) + + -- Tooltip Positioning logic + if not SFrames.FloatingTooltip.anchor then + local anchor = CreateFrame("Button", "SFramesTooltipAnchor", UIParent) + anchor:SetWidth(180) + anchor:SetHeight(60) + anchor:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", -20, 100) + anchor:SetFrameStrata("HIGH") + anchor:EnableMouse(true) + anchor:SetMovable(true) + anchor:RegisterForDrag("LeftButton") + anchor:SetScript("OnDragStart", function() this:StartMoving() end) + anchor:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + if SFramesDB then + local _, _, _, x, y = this:GetPoint() + SFramesDB.tooltipX = x + SFramesDB.tooltipY = y + end + end) + + anchor:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8x8", + edgeFile = "Interface\\Buttons\\WHITE8x8", + edgeSize = 1, + insets = {left=1, right=1, top=1, bottom=1} + }) + anchor:SetBackdropColor(0.08, 0.08, 0.08, 0.95) + anchor:SetBackdropBorderColor(0.4, 0.8, 0.4, 1) + + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + anchor.title = anchor:CreateFontString(nil, "OVERLAY") + anchor.title:SetFont(font, 13, "OUTLINE") + anchor.title:SetPoint("TOPLEFT", anchor, "TOPLEFT", 8, -8) + anchor.title:SetText("Tooltip 模拟位置") + anchor.title:SetTextColor(1, 1, 1) + + anchor.desc = anchor:CreateFontString(nil, "OVERLAY") + anchor.desc:SetFont(font, 11, "OUTLINE") + anchor.desc:SetPoint("TOPLEFT", anchor.title, "BOTTOMLEFT", 0, -4) + anchor.desc:SetText("拖拽我以调整[自定义]锚点。") + anchor.desc:SetTextColor(1, 0.82, 0) + anchor.desc:SetJustifyH("LEFT") + + anchor:Hide() + SFrames.FloatingTooltip.anchor = anchor + end + + if not SFrames.FloatingTooltip.hookedAnchor then + SFrames.FloatingTooltip.hookedAnchor = true + local orig_GameTooltip_SetDefaultAnchor = GameTooltip_SetDefaultAnchor + function GameTooltip_SetDefaultAnchor(tooltip, parent) + if SFramesDB and SFramesDB.tooltipMode == "CURSOR" then + tooltip:SetOwner(parent, "ANCHOR_NONE") + elseif SFramesDB and SFramesDB.tooltipMode == "CUSTOM" then + tooltip:SetOwner(parent, "ANCHOR_NONE") + tooltip:ClearAllPoints() + tooltip:SetPoint("BOTTOMRIGHT", "SFramesTooltipAnchor", "BOTTOMRIGHT", 0, 0) + else + orig_GameTooltip_SetDefaultAnchor(tooltip, parent) + end + end + end + SFrames.FloatingTooltip:ApplyConfig() + + -- WorldMapTooltip: raw textures on a child frame (SetBackdrop is unreliable) + if WorldMapTooltip and not WorldMapTooltip._nanamiBG then + WorldMapTooltip._nanamiBG = true + + local wmtBgFrame = CreateFrame("Frame", nil, WorldMapTooltip) + wmtBgFrame:SetAllPoints(WorldMapTooltip) + wmtBgFrame:SetFrameLevel(math.max(0, WorldMapTooltip:GetFrameLevel())) + + local bg = wmtBgFrame:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\Buttons\\WHITE8X8") + bg:SetVertexColor(0.05, 0.05, 0.05, 1) + bg:SetAllPoints(wmtBgFrame) + + local function WMTEdge(p1, r1, p2, r2, w, h) + local t = wmtBgFrame:CreateTexture(nil, "BORDER") + t:SetTexture("Interface\\Buttons\\WHITE8X8") + t:SetVertexColor(0.20, 0.20, 0.20, 1) + t:SetPoint(p1, WorldMapTooltip, r1) + t:SetPoint(p2, WorldMapTooltip, r2) + if w then t:SetWidth(w) end + if h then t:SetHeight(h) end + end + WMTEdge("TOPLEFT","TOPLEFT","TOPRIGHT","TOPRIGHT", nil, 1) + WMTEdge("BOTTOMLEFT","BOTTOMLEFT","BOTTOMRIGHT","BOTTOMRIGHT", nil, 1) + WMTEdge("TOPLEFT","TOPLEFT","BOTTOMLEFT","BOTTOMLEFT", 1, nil) + WMTEdge("TOPRIGHT","TOPRIGHT","BOTTOMRIGHT","BOTTOMRIGHT", 1, nil) + end + + if SFrames.ItemCompare and SFrames.ItemCompare.HookTooltips then + SFrames.ItemCompare:HookTooltips() + end +end + +function SFrames.FloatingTooltip:ApplyConfig() + if SFramesDB and SFramesDB.tooltipX and SFramesDB.tooltipY and self.anchor then + self.anchor:ClearAllPoints() + self.anchor:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMRIGHT", SFramesDB.tooltipX, SFramesDB.tooltipY) + end +end + +function SFrames.FloatingTooltip:ToggleAnchor(show) + if not self.anchor then return end + if show then + self.anchor:Show() + else + self.anchor:Hide() + end +end + +function SFrames.FloatingTooltip:FormatLines(tooltip) + local unit = "mouseover" + if not UnitExists(unit) then return end + + local nameLine = GameTooltipTextLeft1 + if not nameLine then return end + + local nameText = nameLine:GetText() + if nameText and string.find(nameText, "\n") then + nameText = string.gsub(nameText, "\n", " ") + nameLine:SetText(nameText) + end + + -------------------------------------------------------------------------- + -- Player units + -------------------------------------------------------------------------- + if UnitIsPlayer(unit) then + local classToken = TT_GetClassToken(unit) + + -- Class-color the name + if classToken then + local r, g, b = TT_GetClassColor(classToken) + if r then + nameLine:SetTextColor(r, g, b) + if GameTooltipStatusBar and GameTooltipStatusBar._origSetColor then + GameTooltipStatusBar._origSetColor(GameTooltipStatusBar, r, g, b) + end + end + end + + -- Fetch guild info for this player + local ttGuild, ttRankStr, ttRankIdx + if GetGuildInfo then + ttGuild, ttRankStr, ttRankIdx = GetGuildInfo(unit) + end + + -- Iterate existing lines: enhance guild line + color level + local numLines = tooltip:NumLines() + for i = 2, numLines do + local left = getglobal("GameTooltipTextLeft" .. i) + if left then + local txt = left:GetText() + if txt then + -- Guild line — append rank + if string.find(txt, "^<.*>$") then + if ttRankStr and ttRankStr ~= "" then + left:SetText(txt .. " - " .. ttRankStr) + end + left:SetTextColor(0.30, 0.90, 0.30) + end + + -- Level line + local _, _, lvlStr = string.find(txt, "^Level (%d+)") + if not lvlStr then + _, _, lvlStr = string.find(txt, "^等级 (%d+)") + end + local lvlNum = tonumber(lvlStr) + if lvlNum then + local lr, lg, lb = TT_DifficultyColor(lvlNum) + left:SetTextColor(lr, lg, lb) + end + end + end + end + + ----------------------------------------------------------------------- + -- Extra info lines (appended below existing content) + ----------------------------------------------------------------------- + + -- Guild info (if player is in a guild but Blizzard didn't show it) + if ttGuild and ttRankStr then + local foundGuild = false + for i = 2, numLines do + local left = getglobal("GameTooltipTextLeft" .. i) + if left then + local txt = left:GetText() or "" + if string.find(txt, "^<.*>") then + foundGuild = true + break + end + end + end + if not foundGuild then + tooltip:AddLine("<" .. ttGuild .. "> - " .. ttRankStr, 0.30, 0.90, 0.30) + end + end + + -- PvP Rank (text only; |T...|t inline textures not supported in 1.12) + if UnitPVPRank and GetPVPRankInfo then + local rank = UnitPVPRank(unit) + if rank and rank > 0 then + local rankName = GetPVPRankInfo(rank) + if rankName and rankName ~= "" then + tooltip:AddLine("军衔: " .. rankName, 1, 0.85, 0.35) + end + end + end + + -- PvP flag + faction + if UnitIsPVP and UnitIsPVP(unit) then + local fTag = UnitFactionGroup and UnitFactionGroup(unit) + if fTag then + local pvpHex = (fTag == "Horde") and "|cffff4444" or "|cff44bbff" + tooltip:AddLine(pvpHex .. "PvP " .. fTag .. "|r") + end + end + + -- Turtle WoW challenge modes (defensive checks) + if IsHardcore and IsHardcore(unit) then + tooltip:AddLine("|cffff3333[Hardcore]|r") + end + if C_TurtleWoW then + if C_TurtleWoW.IsHardcore and C_TurtleWoW.IsHardcore(unit) then + tooltip:AddLine("|cffff3333[Hardcore]|r") + end + if C_TurtleWoW.IsSurvivalist and C_TurtleWoW.IsSurvivalist(unit) then + tooltip:AddLine("|cff33ff33[Survivalist]|r") + end + if C_TurtleWoW.IsIronMan and C_TurtleWoW.IsIronMan(unit) then + tooltip:AddLine("|cffaaaaaa[Iron Man]|r") + end + end + if UnitIsTrivial and UnitIsTrivial(unit) then + tooltip:AddLine("|cff888888[休闲模式]|r") + end + + -------------------------------------------------------------------------- + -- NPC / Creature units: color health bar by reaction + -------------------------------------------------------------------------- + else + local reaction = UnitReaction(unit, "player") + if reaction then + local color = UnitReactionColor and UnitReactionColor[reaction] + if color and GameTooltipStatusBar and GameTooltipStatusBar._origSetColor then + GameTooltipStatusBar._origSetColor(GameTooltipStatusBar, color.r, color.g, color.b) + end + end + end + + -------------------------------------------------------------------------- + -- Target of mouseover (all units) + -------------------------------------------------------------------------- + local tgtUnit = unit .. "target" + if UnitExists(tgtUnit) then + local tgtName = UnitName(tgtUnit) + if tgtName then + local line + if UnitIsUnit(tgtUnit, "player") then + local _At = SFrames.ActiveTheme + local _accentHex = "ff6699" + if _At and _At.accentHex then _accentHex = _At.accentHex end + line = "|cffffd700目标: |r|cff" .. _accentHex .. ">> 你 <<|r" + elseif UnitIsPlayer(tgtUnit) then + local hex = TT_ClassHex(TT_GetClassToken(tgtUnit)) + line = "|cffffd700目标: |r" .. hex .. tgtName .. "|r" + else + line = "|cffffd700目标: |r|cffffffff" .. tgtName .. "|r" + end + tooltip:AddLine(line) + end + end + + tooltip:Show() +end + +-------------------------------------------------------------------------------- +-- Item Compare: show stat differences vs currently equipped item +-------------------------------------------------------------------------------- +SFrames.ItemCompare = {} + +local IC = SFrames.ItemCompare +local IC_STAT_ORDER = { + "STR","AGI","STA","INT","SPI", + "CRIT","TOHIT","RANGEDCRIT", + "SPELLCRIT","SPELLTOHIT", + "ATTACKPOWER","RANGEDATTACKPOWER", + "DMG","HEAL", + "DEFENSE","DODGE","PARRY","BLOCK","BLOCKVALUE", + "ARMOR", + "HEALTHREG","MANAREG", + "HEALTH","MANA", +} +local IC_STAT_NAMES = { + STR="力量", AGI="敏捷", STA="耐力", INT="智力", SPI="精神", + CRIT="暴击%", TOHIT="命中%", RANGEDCRIT="远程暴击%", + SPELLCRIT="法术暴击%", SPELLTOHIT="法术命中%", + ATTACKPOWER="攻强", RANGEDATTACKPOWER="远程攻强", + DMG="法伤", HEAL="治疗", + DEFENSE="防御", DODGE="闪避%", PARRY="招架%", BLOCK="格挡%", BLOCKVALUE="格挡值", + ARMOR="护甲", + HEALTHREG="生命/5秒", MANAREG="法力/5秒", + HEALTH="生命值", MANA="法力值", +} + +local IC_EQUIP_LOC_TO_SLOT = { + INVTYPE_HEAD = 1, INVTYPE_NECK = 2, INVTYPE_SHOULDER = 3, + INVTYPE_BODY = 4, INVTYPE_CHEST = 5, INVTYPE_ROBE = 5, + INVTYPE_WAIST = 6, INVTYPE_LEGS = 7, INVTYPE_FEET = 8, + INVTYPE_WRIST = 9, INVTYPE_HAND = 10, + INVTYPE_FINGER = 11, INVTYPE_TRINKET = 13, + INVTYPE_CLOAK = 15, + INVTYPE_WEAPON = 16, INVTYPE_2HWEAPON = 16, INVTYPE_WEAPONMAINHAND = 16, + INVTYPE_SHIELD = 17, INVTYPE_WEAPONOFFHAND = 17, INVTYPE_HOLDABLE = 17, + INVTYPE_RANGED = 18, INVTYPE_RANGEDRIGHT = 18, INVTYPE_THROWN = 18, + INVTYPE_RELIC = 18, INVTYPE_TABARD = 19, +} + +local function IC_GetLib() + if AceLibrary and AceLibrary.HasInstance and AceLibrary:HasInstance("ItemBonusLib-1.0") then + return AceLibrary("ItemBonusLib-1.0") + end + return nil +end + +local function IC_GetEquipSlot(link) + if not link then return nil end + local _, _, _, _, _, _, _, equipLoc = GetItemInfo(link) + if not equipLoc or equipLoc == "" then return nil end + return IC_EQUIP_LOC_TO_SLOT[equipLoc] +end + +local function IC_ScanBonuses(lib, link) + if not lib or not link then return nil end + local ok, result = pcall(function() return lib:ScanItem(link, true) end) + if ok and result then return result end + return nil +end + +local function IC_AppendCompare(tooltip, newBonuses, oldBonuses) + if not newBonuses then return end + local hasAny = false + local lines = {} + for _, key in ipairs(IC_STAT_ORDER) do + local nv = newBonuses[key] or 0 + local ov = (oldBonuses and oldBonuses[key]) or 0 + local diff = nv - ov + if diff ~= 0 then + local name = IC_STAT_NAMES[key] or key + local text + if diff > 0 then + text = "|cff00ff00+" .. diff .. " " .. name .. "|r" + else + text = "|cffff4444" .. diff .. " " .. name .. "|r" + end + table.insert(lines, text) + hasAny = true + end + end + if hasAny then + tooltip:AddLine(" ") + tooltip:AddLine("与当前装备对比:", 0.6, 0.8, 1) + for _, l in ipairs(lines) do + tooltip:AddLine(l) + end + tooltip:Show() + end +end + +local function IC_GetItemLevel(link) + if not link or not LibItem_Level then return nil end + local _, _, itemId = string.find(link, "item:(%d+)") + if itemId then return LibItem_Level[tonumber(itemId)] end + return nil +end + +local function IC_AppendItemLevel(tooltip, link) + if SFramesDB and SFramesDB.showItemLevel == false then return end + local ilvl = IC_GetItemLevel(link) + if ilvl and ilvl > 0 then + tooltip:AddLine("物品等级: " .. ilvl, 1, 0.82, 0) + end +end + +-------------------------------------------------------------------------------- +-- Sell Price Infrastructure +-------------------------------------------------------------------------------- +local function IC_GetItemIdFromLink(link) + if not link then return nil end + local _, _, id = string.find(link, "item:(%d+)") + if id then return tonumber(id) end + return nil +end + +local function IC_CacheSellPrice(itemId, copper) + if not itemId or not copper or copper <= 0 then return end + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.sellPriceCache then SFramesGlobalDB.sellPriceCache = {} end + SFramesGlobalDB.sellPriceCache[itemId] = copper +end + +local function IC_GetSellPrice(itemId) + if not itemId then return nil end + if NanamiSellPriceDB then + local price = NanamiSellPriceDB[itemId] + if price and price > 0 then return price end + end + if ShaguTweaks and ShaguTweaks.SellValueDB then + local price = ShaguTweaks.SellValueDB[itemId] + if price and price > 0 then return price end + end + if SFramesGlobalDB and SFramesGlobalDB.sellPriceCache then + local price = SFramesGlobalDB.sellPriceCache[itemId] + if price and price > 0 then return price end + end + return nil +end + +local function IC_TryGetItemInfoSellPrice(link) + if not link then return nil end + local r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11 = GetItemInfo(link) + if r11 and type(r11) == "number" and r11 > 0 then + return r11 + end + return nil +end + +local function IC_ExtractLinkFromTooltipName(tooltip) + if not tooltip then return nil end + local left1 = _G[tooltip:GetName() .. "TextLeft1"] + if not left1 then return nil end + local name = left1:GetText() + if not name or name == "" then return nil end + if GetItemLinkByName then + local link = GetItemLinkByName(name) + if link then return link end + end + if ShaguTweaks and ShaguTweaks.GetItemLinkByName then + local link = ShaguTweaks.GetItemLinkByName(name) + if link then return link end + end + return nil +end + +local function IC_AddSellPrice(tooltip, link, count) + if not link then return end + if tooltip._nanamiSellPriceAdded then return end + if MerchantFrame and MerchantFrame:IsShown() then return end + local itemId = IC_GetItemIdFromLink(link) + local price = IC_GetSellPrice(itemId) + if not price then + price = IC_TryGetItemInfoSellPrice(link) + if price and itemId then IC_CacheSellPrice(itemId, price) end + end + if price and price > 0 then + count = count or 1 + if count < 1 then count = 1 end + tooltip._nanamiSellPriceAdded = true + SetTooltipMoney(tooltip, price * count) + tooltip:Show() + end +end + +-------------------------------------------------------------------------------- +local function IC_EnhanceTooltip(tooltip, link, count, skipSellPrice) + if not link then return end + IC_AppendItemLevel(tooltip, link) + if not SFramesDB or SFramesDB.itemCompare ~= false then + local lib = IC_GetLib() + if lib then + local eslot = IC_GetEquipSlot(link) + if eslot then + local newB = IC_ScanBonuses(lib, link) + local eqLink = GetInventoryItemLink("player", eslot) + local oldB = IC_ScanBonuses(lib, eqLink) + IC_AppendCompare(tooltip, newB, oldB) + end + end + end + if SFrames.GearScore and SFrames.GearScore.AddScoreToTooltip then + pcall(function() SFrames.GearScore:AddScoreToTooltip(tooltip, link) end) + end + if not skipSellPrice then + IC_AddSellPrice(tooltip, link, count) + end + tooltip:Show() +end + +function IC:HookTooltips() + if self.hooked then return end + self.hooked = true + + --------------------------------------------------------------------------- + -- OnHide cleanup: reset sell-price tracking flag + --------------------------------------------------------------------------- + local orig_OnHide_IC = GameTooltip:GetScript("OnHide") + GameTooltip:SetScript("OnHide", function() + this._nanamiSellPriceAdded = nil + if orig_OnHide_IC then orig_OnHide_IC() end + end) + + --------------------------------------------------------------------------- + -- Passive sell-price caching: intercept SetTooltipMoney calls while + -- processing a bag item at a merchant so we learn the unit price. + --------------------------------------------------------------------------- + local IC_PendingBagLink = nil + local IC_PendingBagCount = nil + local orig_SetTooltipMoney = SetTooltipMoney + SetTooltipMoney = function(frame, money, a1, a2, a3) + if orig_SetTooltipMoney then + orig_SetTooltipMoney(frame, money, a1, a2, a3) + end + if IC_PendingBagLink and money and money > 0 then + if frame == GameTooltip or frame == SFramesScanTooltip then + local itemId = IC_GetItemIdFromLink(IC_PendingBagLink) + local count = IC_PendingBagCount or 1 + if count < 1 then count = 1 end + if itemId then + IC_CacheSellPrice(itemId, math.floor(money / count)) + end + end + end + end + + --------------------------------------------------------------------------- + -- MERCHANT_SHOW: proactively scan all bag items to cache sell prices. + --------------------------------------------------------------------------- + local scanFrame = CreateFrame("Frame") + scanFrame:RegisterEvent("MERCHANT_SHOW") + scanFrame:SetScript("OnEvent", function() + for bag = 0, 4 do + local numSlots = GetContainerNumSlots(bag) or 0 + for slot = 1, numSlots do + local link = GetContainerItemLink(bag, slot) + if link then + local itemId = IC_GetItemIdFromLink(link) + if itemId and not IC_GetSellPrice(itemId) then + local infoPrice = IC_TryGetItemInfoSellPrice(link) + if infoPrice then + IC_CacheSellPrice(itemId, infoPrice) + elseif SFramesScanTooltip then + local _, cnt = GetContainerItemInfo(bag, slot) + cnt = cnt or 1 + IC_PendingBagLink = link + IC_PendingBagCount = cnt + pcall(function() + SFramesScanTooltip:SetOwner(UIParent, "ANCHOR_NONE") + SFramesScanTooltip:ClearLines() + SFramesScanTooltip:SetBagItem(bag, slot) + SFramesScanTooltip:Hide() + end) + IC_PendingBagLink = nil + IC_PendingBagCount = nil + end + end + end + end + end + end) + + --------------------------------------------------------------------------- + -- GameTooltip.SetBagItem + --------------------------------------------------------------------------- + local orig_SetBagItem = GameTooltip.SetBagItem + GameTooltip.SetBagItem = function(self, bag, slot) + self._nanamiSellPriceAdded = nil + local link = GetContainerItemLink(bag, slot) + local _, cnt = GetContainerItemInfo(bag, slot) + IC_PendingBagLink = link + IC_PendingBagCount = cnt or 1 + + local hasItem, hasCooldown, repairCost = orig_SetBagItem(self, bag, slot) + + IC_PendingBagLink = nil + IC_PendingBagCount = nil + + local moneyAlreadyShown = self.hasMoney + + pcall(function() + if link then + IC_EnhanceTooltip(GameTooltip, link, cnt, moneyAlreadyShown) + end + end) + return hasItem, hasCooldown, repairCost + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetInventoryItem + --------------------------------------------------------------------------- + local orig_SetInvItem = GameTooltip.SetInventoryItem + GameTooltip.SetInventoryItem = function(self, unit, slotId) + self._nanamiSellPriceAdded = nil + local hasItem, hasCooldown, repairCost = orig_SetInvItem(self, unit, slotId) + local moneyAlreadyShown = self.hasMoney + pcall(function() + if unit == "player" and slotId then + local link = GetInventoryItemLink("player", slotId) + if link then + IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) + end + end + end) + return hasItem, hasCooldown, repairCost + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetMerchantItem + --------------------------------------------------------------------------- + local orig_SetMerchantItem = GameTooltip.SetMerchantItem + if orig_SetMerchantItem then + GameTooltip.SetMerchantItem = function(self, idx) + self._nanamiSellPriceAdded = nil + orig_SetMerchantItem(self, idx) + pcall(function() + local link = GetMerchantItemLink and GetMerchantItemLink(idx) + if link then IC_EnhanceTooltip(GameTooltip, link) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetQuestItem — with fallback link extraction + --------------------------------------------------------------------------- + local orig_SetQuestItem = GameTooltip.SetQuestItem + if orig_SetQuestItem then + GameTooltip.SetQuestItem = function(self, qtype, idx) + self._nanamiSellPriceAdded = nil + orig_SetQuestItem(self, qtype, idx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link + if GetQuestItemLink then link = GetQuestItemLink(qtype, idx) end + if not link then link = IC_ExtractLinkFromTooltipName(GameTooltip) end + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetQuestLogItem — with fallback link extraction + --------------------------------------------------------------------------- + local orig_SetQuestLogItem = GameTooltip.SetQuestLogItem + if orig_SetQuestLogItem then + GameTooltip.SetQuestLogItem = function(self, itype, idx) + self._nanamiSellPriceAdded = nil + orig_SetQuestLogItem(self, itype, idx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link + if GetQuestLogItemLink then link = GetQuestLogItemLink(itype, idx) end + if not link then link = IC_ExtractLinkFromTooltipName(GameTooltip) end + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetLootItem + --------------------------------------------------------------------------- + local orig_SetLootItem = GameTooltip.SetLootItem + if orig_SetLootItem then + GameTooltip.SetLootItem = function(self, idx) + self._nanamiSellPriceAdded = nil + orig_SetLootItem(self, idx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link = GetLootSlotLink and GetLootSlotLink(idx) + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetLootRollItem + --------------------------------------------------------------------------- + local orig_SetLootRollItem = GameTooltip.SetLootRollItem + if orig_SetLootRollItem then + GameTooltip.SetLootRollItem = function(self, rollId) + self._nanamiSellPriceAdded = nil + orig_SetLootRollItem(self, rollId) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link = GetLootRollItemLink and GetLootRollItemLink(rollId) + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetCraftItem + --------------------------------------------------------------------------- + local orig_SetCraftItem = GameTooltip.SetCraftItem + if orig_SetCraftItem then + GameTooltip.SetCraftItem = function(self, skill, slot) + self._nanamiSellPriceAdded = nil + orig_SetCraftItem(self, skill, slot) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link = GetCraftReagentItemLink and GetCraftReagentItemLink(skill, slot) + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetTradeSkillItem + --------------------------------------------------------------------------- + local orig_SetTradeSkillItem = GameTooltip.SetTradeSkillItem + if orig_SetTradeSkillItem then + GameTooltip.SetTradeSkillItem = function(self, skillIndex, reagentIndex) + self._nanamiSellPriceAdded = nil + orig_SetTradeSkillItem(self, skillIndex, reagentIndex) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link + if reagentIndex then + if GetTradeSkillReagentItemLink then + link = GetTradeSkillReagentItemLink(skillIndex, reagentIndex) + end + else + if GetTradeSkillItemLink then + link = GetTradeSkillItemLink(skillIndex) + end + end + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetAuctionItem + --------------------------------------------------------------------------- + local orig_SetAuctionItem = GameTooltip.SetAuctionItem + if orig_SetAuctionItem then + GameTooltip.SetAuctionItem = function(self, atype, idx) + self._nanamiSellPriceAdded = nil + orig_SetAuctionItem(self, atype, idx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local _, _, cnt = GetAuctionItemInfo and GetAuctionItemInfo(atype, idx) + local link = GetAuctionItemLink and GetAuctionItemLink(atype, idx) + if link then IC_EnhanceTooltip(GameTooltip, link, cnt, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetTradePlayerItem + --------------------------------------------------------------------------- + local orig_SetTradePlayerItem = GameTooltip.SetTradePlayerItem + if orig_SetTradePlayerItem then + GameTooltip.SetTradePlayerItem = function(self, idx) + self._nanamiSellPriceAdded = nil + orig_SetTradePlayerItem(self, idx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link = GetTradePlayerItemLink and GetTradePlayerItemLink(idx) + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetTradeTargetItem + --------------------------------------------------------------------------- + local orig_SetTradeTargetItem = GameTooltip.SetTradeTargetItem + if orig_SetTradeTargetItem then + GameTooltip.SetTradeTargetItem = function(self, idx) + self._nanamiSellPriceAdded = nil + orig_SetTradeTargetItem(self, idx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link = GetTradeTargetItemLink and GetTradeTargetItemLink(idx) + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- GameTooltip.SetInboxItem + --------------------------------------------------------------------------- + local orig_SetInboxItem = GameTooltip.SetInboxItem + if orig_SetInboxItem then + GameTooltip.SetInboxItem = function(self, mailID, attachIdx) + self._nanamiSellPriceAdded = nil + orig_SetInboxItem(self, mailID, attachIdx) + local moneyAlreadyShown = self.hasMoney + pcall(function() + local link = IC_ExtractLinkFromTooltipName(GameTooltip) + if link then IC_EnhanceTooltip(GameTooltip, link, nil, moneyAlreadyShown) end + end) + end + end + + --------------------------------------------------------------------------- + -- SetItemRef (chat item links) + --------------------------------------------------------------------------- + local orig_SetItemRef = SetItemRef + if orig_SetItemRef then + SetItemRef = function(link, text, button) + orig_SetItemRef(link, text, button) + if IsAltKeyDown() or IsShiftKeyDown() or IsControlKeyDown() then return end + pcall(function() + local _, _, itemStr = string.find(link or "", "(item:[%-?%d:]+)") + if itemStr then + ItemRefTooltip._nanamiSellPriceAdded = nil + local itemId = IC_GetItemIdFromLink(itemStr) + local price = IC_GetSellPrice(itemId) + if not price then + price = IC_TryGetItemInfoSellPrice(itemStr) + if price and itemId then IC_CacheSellPrice(itemId, price) end + end + if price and price > 0 and not ItemRefTooltip.hasMoney then + SetTooltipMoney(ItemRefTooltip, price) + ItemRefTooltip:Show() + end + end + end) + end + end +end diff --git a/Trade.lua b/Trade.lua new file mode 100644 index 0000000..6e2bdd2 --- /dev/null +++ b/Trade.lua @@ -0,0 +1,1268 @@ +local AddOnName = "Nanami-UI" +SFrames = SFrames or {} + +local TradeUI = CreateFrame("Frame", "SFramesTradeUI", UIParent) +TradeUI:RegisterEvent("TRADE_SHOW") +TradeUI:RegisterEvent("TRADE_CLOSED") +TradeUI:RegisterEvent("TRADE_UPDATE") +TradeUI:RegisterEvent("TRADE_PLAYER_ITEM_CHANGED") +TradeUI:RegisterEvent("TRADE_TARGET_ITEM_CHANGED") +TradeUI:RegisterEvent("TRADE_ACCEPT_UPDATE") +TradeUI:RegisterEvent("TRADE_MONEY_CHANGED") +TradeUI:RegisterEvent("PLAYER_TRADE_MONEY") +TradeUI:RegisterEvent("UI_INFO_MESSAGE") +TradeUI:RegisterEvent("CHAT_MSG_SYSTEM") + +local L = { + NOT_TRADED = "不会被交易", + WHISPER_CHECK = "发送清单", + CONFIRMED = "已确认", + WAITING = "等待中...", +} + +local TRADE_DATA = { + active = false, + playerItems = {}, + targetItems = {}, + playerMoney = 0, + targetMoney = 0, + targetName = "", + playerAccepted = false, + targetAccepted = false, +} + +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme: Pink Cat-Paw (matching GameMenu / Nanami-UI) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + labelDim = { 0.7, 0.5, 0.6 }, + tradeBg = { 0.10, 0.22, 0.12, 0.95 }, + tradeBorder = { 0.30, 0.70, 0.35, 0.90 }, + tradeText = { 0.7, 1, 0.75 }, + moneyBg = { 0.08, 0.04, 0.06, 0.85 }, + moneyBorder = { 0.40, 0.25, 0.35, 0.6 }, + confirmOverlay = { 0.15, 0.85, 0.25, 0.55 }, + confirmBorder = { 0.30, 1.0, 0.40, 0.95 }, + confirmText = { 0.3, 1, 0.4 }, + statusConfirmBg = { 0.08, 0.35, 0.12, 0.92 }, + statusConfirmBd = { 0.25, 0.95, 0.35, 0.95 }, + statusWaitBg = { 0.15, 0.08, 0.12, 0.8 }, + statusWaitBd = { 0.45, 0.28, 0.38, 0.6 }, + statusWaitText = { 0.6, 0.45, 0.55 }, +}) + +local FRAME_W = 440 +local SLOT_W = 188 +local SLOT_H = 42 +local SLOT_GAP = 2 +local SIDE_PAD = 16 +local HEADER_H = 46 +local BOTTOM_H = 54 +local NOT_TRADED_GAP = 38 +local STATUS_BAR_H = 22 +-- FRAME_H computed: HEADER_H+8 + 6*SLOT_H+5*GAP + NOT_TRADED_GAP + SLOT_H + 6 + STATUS_BAR_H + 6 + BOTTOM_H +local FRAME_H = HEADER_H + 8 + 6 * SLOT_H + 5 * SLOT_GAP + NOT_TRADED_GAP + SLOT_H + 6 + STATUS_BAR_H + 6 + BOTTOM_H + +local DEFAULT_SLOT_BORDER = { 0.25, 0.25, 0.3, 0.8 } + +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +-------------------------------------------------------------------------------- +-- Data logic +-------------------------------------------------------------------------------- +local function SaveTradeState() + if not TradeFrame or not TradeFrame:IsVisible() then return end + + local pItems = {} + for i = 1, 6 do + local link = nil + if GetTradePlayerItemLink then + link = GetTradePlayerItemLink(i) + end + if not link and GetTradePlayerItemInfo then + local name, texture, numItems = GetTradePlayerItemInfo(i) + if name and name ~= "" then + link = name + end + end + if link then + local _, _, numItems = GetTradePlayerItemInfo(i) + table.insert(pItems, { link = link, count = numItems or 1 }) + end + end + if table.getn(pItems) > 0 then + TRADE_DATA.playerItems = pItems + end + + local tItems = {} + for i = 1, 6 do + local link = nil + if GetTradeTargetItemLink then + link = GetTradeTargetItemLink(i) + end + if not link and GetTradeTargetItemInfo then + local name, texture, numItems = GetTradeTargetItemInfo(i) + if name and name ~= "" then + link = name + end + end + if link then + local _, _, numItems = GetTradeTargetItemInfo(i) + table.insert(tItems, { link = link, count = numItems or 1 }) + end + end + if table.getn(tItems) > 0 then + TRADE_DATA.targetItems = tItems + end + + local pm = GetPlayerTradeMoney and GetPlayerTradeMoney() or 0 + local tm = GetTargetTradeMoney and GetTargetTradeMoney() or 0 + if pm >= 0 and pm > TRADE_DATA.playerMoney then + TRADE_DATA.playerMoney = pm + end + if tm >= 0 and tm > TRADE_DATA.targetMoney then + TRADE_DATA.targetMoney = tm + end + + local name = UnitName("NPC") + if name and name ~= "" then TRADE_DATA.targetName = name end +end + +local function FormatMoneyZH(copper) + if not copper or copper == 0 then return nil end + local g = math.floor(copper / 10000) + local s = math.floor((copper - (g * 10000)) / 100) + local c = math.mod(copper, 100) + local text = "" + if g > 0 then text = text .. g .. "g " end + if s > 0 then text = text .. s .. "s " end + if c > 0 then text = text .. c .. "c " end + return text +end + +local function SendLine(msg, channel, target) + if channel == "WHISPER" then + if target and target ~= "" and target ~= "Unknown" then + SendChatMessage(msg, "WHISPER", nil, target) + end + else + SendChatMessage(msg, channel) + end +end + +local function SendTradeWhisper() + if not SFramesDB.TradeWhisperEnable then return end + local target = TRADE_DATA.targetName + local channel = SFramesDB.TradeWhisperChannel or "WHISPER" + local outLines = {} + + local playerMoneyStr = FormatMoneyZH(TRADE_DATA.playerMoney) + local targetMoneyStr = FormatMoneyZH(TRADE_DATA.targetMoney) + + local giveItems = "" + for _, item in ipairs(TRADE_DATA.playerItems) do + giveItems = giveItems .. item.link .. (item.count > 1 and ("x" .. item.count) or "") .. " " + end + local getItems = "" + for _, item in ipairs(TRADE_DATA.targetItems) do + getItems = getItems .. item.link .. (item.count > 1 and ("x" .. item.count) or "") .. " " + end + + if not playerMoneyStr and giveItems == "" and not targetMoneyStr and getItems == "" then + return + end + + table.insert(outLines, "=== 濞存嚎鍊栧Σ妤冩媼閺夎法绉?===") + if playerMoneyStr then table.insert(outLines, "濞寸姵锚閸ゎ參鏌岄幋婵堫伈: " .. playerMoneyStr) end + if giveItems ~= "" then table.insert(outLines, "濞寸姵锚閸ゎ參鎮ч埡浣规儌: " .. giveItems) end + if targetMoneyStr then table.insert(outLines, "闁衡偓閹澘绠梺鍙夊灥缁? " .. targetMoneyStr) end + if getItems ~= "" then table.insert(outLines, "闁衡偓閹澘绠柣妞绘櫅閹? " .. getItems) end + + for _, line in ipairs(outLines) do + SendLine(line, channel, target) + end +end + +local function ClearTradeData() + TRADE_DATA.playerItems = {} + TRADE_DATA.targetItems = {} + TRADE_DATA.playerMoney = 0 + TRADE_DATA.targetMoney = 0 +end + +local function IsTradeCompleteMsg(msg) + if not msg then return false end + if string.find(msg, "Trade successful") then return true end + if string.find(msg, "Trade complete") then return true end + if string.find(msg, "Trade complete") then return true end + return false +end + +local sfTradeRefreshing = false +local function ForceRefreshTradeVisuals() + if not TradeFrame or not TradeFrame:IsVisible() then return end + if sfTradeRefreshing then return end + if TradeFrame_Update then + sfTradeRefreshing = true + pcall(function() TradeFrame_Update() end) + sfTradeRefreshing = false + end +end + +TradeUI:SetScript("OnEvent", function() + if event == "TRADE_SHOW" then + TRADE_DATA.active = true + TRADE_DATA.targetName = UnitName("NPC") or "" + TRADE_DATA.playerItems = {} + TRADE_DATA.targetItems = {} + TRADE_DATA.playerMoney = 0 + TRADE_DATA.targetMoney = 0 + TRADE_DATA.playerAccepted = false + TRADE_DATA.targetAccepted = false + SaveTradeState() + ForceRefreshTradeVisuals() + elseif event == "TRADE_PLAYER_ITEM_CHANGED" or event == "TRADE_TARGET_ITEM_CHANGED" then + TRADE_DATA.playerAccepted = false + TRADE_DATA.targetAccepted = false + SaveTradeState() + ForceRefreshTradeVisuals() + elseif event == "TRADE_UPDATE" then + SaveTradeState() + ForceRefreshTradeVisuals() + elseif event == "TRADE_ACCEPT_UPDATE" then + TRADE_DATA.playerAccepted = (arg1 and arg1 == 1) + TRADE_DATA.targetAccepted = (arg2 and arg2 == 1) + SaveTradeState() + ForceRefreshTradeVisuals() + elseif event == "TRADE_MONEY_CHANGED" or event == "PLAYER_TRADE_MONEY" then + SaveTradeState() + ForceRefreshTradeVisuals() + elseif event == "TRADE_CLOSED" then + TRADE_DATA.active = false + TRADE_DATA.playerAccepted = false + TRADE_DATA.targetAccepted = false + elseif event == "UI_INFO_MESSAGE" then + if IsTradeCompleteMsg(arg1) then + SendTradeWhisper() + ClearTradeData() + end + elseif event == "CHAT_MSG_SYSTEM" then + if IsTradeCompleteMsg(arg1) then + SendTradeWhisper() + ClearTradeData() + end + end +end) + +-------------------------------------------------------------------------------- +-- UI Helpers (matching GameMenu / Nanami-UI style) +-------------------------------------------------------------------------------- +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or T.panelBg + local bd = borderColor or T.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function CreateShadow(parent, size) + local s = CreateFrame("Frame", nil, parent) + local sz = size or 4 + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -sz, sz) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", sz, -sz) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.55) + s:SetBackdropBorderColor(0, 0, 0, 0.4) + return s +end + +-------------------------------------------------------------------------------- +-- Tooltip scanner for item level +-------------------------------------------------------------------------------- +local tooltipScanner = CreateFrame("GameTooltip", "SFramesTradeTooltipScan", nil, "GameTooltipTemplate") +tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + +local function ScanItemLevelFromTooltip() + for i = 2, tooltipScanner:NumLines() do + local line = _G["SFramesTradeTooltipScanTextLeft" .. i] + if line then + local text = line:GetText() + if text then + local _, _, ilvl = string.find(text, "(%d+)") + if string.find(text, "Item Level") or string.find(text, "iLvl") or string.find(text, "ilvl") or string.find(text, "鐗╁搧绛夌骇") then + if ilvl then return tonumber(ilvl) end + end + end + end + end + return nil +end + +local function GetTradePlayerItemLevel(slot) + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:ClearLines() + local ok = pcall(function() tooltipScanner:SetTradePlayerItem(slot) end) + if ok then return ScanItemLevelFromTooltip() end + local link = GetTradePlayerItemLink and GetTradePlayerItemLink(slot) + if link then + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:ClearLines() + ok = pcall(function() tooltipScanner:SetHyperlink(link) end) + if ok then return ScanItemLevelFromTooltip() end + end + return nil +end + +local function GetTradeTargetItemLevel(slot) + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:ClearLines() + local ok = pcall(function() tooltipScanner:SetTradeTargetItem(slot) end) + if ok then return ScanItemLevelFromTooltip() end + local link = GetTradeTargetItemLink and GetTradeTargetItemLink(slot) + if link then + tooltipScanner:SetOwner(UIParent, "ANCHOR_NONE") + tooltipScanner:ClearLines() + ok = pcall(function() tooltipScanner:SetHyperlink(link) end) + if ok then return ScanItemLevelFromTooltip() end + end + return nil +end + +-------------------------------------------------------------------------------- +-- Quality color from item link +-------------------------------------------------------------------------------- +local function GetQualityColorFromLink(link) + if not link then return nil, nil, nil end + local _, _, hex = string.find(link, "|c(%x+)|H") + if hex and string.len(hex) == 8 then + local r = tonumber(string.sub(hex, 3, 4), 16) / 255 + local g = tonumber(string.sub(hex, 5, 6), 16) / 255 + local b = tonumber(string.sub(hex, 7, 8), 16) / 255 + return r, g, b + end + return nil, nil, nil +end + +local function GetQualityColorFromRarity(rarity) + if type(rarity) ~= "number" then return nil, nil, nil end + if not GetItemQualityColor then return nil, nil, nil end + local ok, r, g, b = pcall(function() return GetItemQualityColor(rarity) end) + if ok and r and g and b then + return r, g, b + end + return nil, nil, nil +end +local function ResolveTradeItemQuality(link, quality, name) + if type(quality) == "number" then + return quality + end + if GetItemInfo then + if link then + local _, _, q = GetItemInfo(link) + if type(q) == "number" then return q end + end + if name then + local _, _, q = GetItemInfo(name) + if type(q) == "number" then return q end + end + end + return nil +end + +local function IsCommonOrPoor(link) + if not link then return true end + local _, _, hex = string.find(link, "|c(%x+)|H") + if hex then + local hexLower = string.lower(hex) + return hexLower == "ffffffff" or hexLower == "ff9d9d9d" + end + return true +end + +-------------------------------------------------------------------------------- +-- Right-click to remove player trade items +-------------------------------------------------------------------------------- +local function HookSingleTradeSlot(slotIndex) + local itemBtn = _G["TradePlayerItem" .. slotIndex .. "ItemButton"] + if not itemBtn or itemBtn.sfRightClickHooked then return end + itemBtn.sfRightClickHooked = true + + itemBtn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + + local origScript = itemBtn:GetScript("OnClick") + itemBtn:SetScript("OnClick", function() + if arg1 == "RightButton" then + local hasItem = false + if GetTradePlayerItemLink then + local link = GetTradePlayerItemLink(slotIndex) + if link then hasItem = true end + end + if not hasItem then + local name = GetTradePlayerItemInfo(slotIndex) + if name and name ~= "" then hasItem = true end + end + if hasItem then + ClearCursor() + ClickTradeButton(slotIndex) + return + end + end + if origScript then origScript() end + end) +end + +local function HookTradeItemRightClick() + for i = 1, 6 do + HookSingleTradeSlot(i) + end +end + +-------------------------------------------------------------------------------- +-- Re-hide Blizzard visuals (called every TradeFrame_Update) +-------------------------------------------------------------------------------- +local function ReHideBlizzardSlot(itemPrefix, index) + local btnName = itemPrefix .. index .. "ItemButton" + local icon = _G[btnName .. "IconTexture"] + if icon then icon:SetAlpha(0); icon:Hide() end + local nt = _G[btnName .. "NormalTexture"] + if nt then nt:SetAlpha(0); nt:Hide() end + local slot = _G[btnName .. "SlotTexture"] + if slot then slot:SetAlpha(0); slot:Hide() end + local cnt = _G[btnName .. "Count"] + if cnt then cnt:SetAlpha(0) end + local bgSlot = _G[itemPrefix .. index .. "ItemButtonSlotTexture"] + if bgSlot then bgSlot:SetAlpha(0); bgSlot:Hide() end + local bgSlot2 = _G[itemPrefix .. index .. "SlotTexture"] + if bgSlot2 then bgSlot2:SetAlpha(0); bgSlot2:Hide() end + local bgSlot3 = _G[itemPrefix .. index .. "ItemButtonBackground"] + if bgSlot3 then bgSlot3:SetAlpha(0); bgSlot3:Hide() end + local nf = _G[itemPrefix .. index .. "NameFrame"] + if nf then nf:SetAlpha(0); nf:Hide() end +end + +-------------------------------------------------------------------------------- +-- Skin Trade Frame +-------------------------------------------------------------------------------- +local function SkinTradeFrame() + if TradeFrame.sfSkinned then return end + TradeFrame.sfSkinned = true + + TradeFrame:SetMovable(true) + TradeFrame:EnableMouse(true) + TradeFrame:RegisterForDrag("LeftButton") + TradeFrame:SetScript("OnDragStart", function() this:StartMoving() end) + TradeFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + -- Hide ALL default textures + local regions = { TradeFrame:GetRegions() } + local bottomTexts = {} + for _, r in ipairs(regions) do + if r:IsObjectType("Texture") then + r:SetTexture(nil) + r:SetAlpha(0) + elseif r:IsObjectType("FontString") then + local text = r:GetText() + if text and (string.find(text, "不会被交易") or string.find(text, "Will not be traded") or text == L.NOT_TRADED) then + table.insert(bottomTexts, r) + end + end + end + TradeFrame.sfBottomTexts = bottomTexts + + TradeFrame:SetWidth(FRAME_W) + TradeFrame:SetHeight(FRAME_H) + + -- Main backdrop - Nanami-UI rounded style (matching GameMenu) + SetRoundBackdrop(TradeFrame, T.panelBg, T.panelBorder) + CreateShadow(TradeFrame, 5) + + -- Header separator + local headerSep = TradeFrame:CreateTexture(nil, "ARTWORK") + headerSep:SetTexture("Interface\\Buttons\\WHITE8X8") + headerSep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + headerSep:SetHeight(1) + headerSep:SetPoint("TOPLEFT", TradeFrame, "TOPLEFT", 4, -HEADER_H) + headerSep:SetPoint("TOPRIGHT", TradeFrame, "TOPRIGHT", -4, -HEADER_H) + + -- Center vertical divider (pink tinted) + local divLine = TradeFrame:CreateTexture(nil, "ARTWORK") + divLine:SetTexture("Interface\\Buttons\\WHITE8X8") + divLine:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + divLine:SetWidth(1) + divLine:SetPoint("TOP", TradeFrame, "TOP", 0, -(HEADER_H + 2)) + divLine:SetPoint("BOTTOM", TradeFrame, "BOTTOM", 0, BOTTOM_H + 2) + + -- Bottom separator + local bottomSep = TradeFrame:CreateTexture(nil, "ARTWORK") + bottomSep:SetTexture("Interface\\Buttons\\WHITE8X8") + bottomSep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + bottomSep:SetHeight(1) + bottomSep:SetPoint("BOTTOMLEFT", TradeFrame, "BOTTOMLEFT", 4, BOTTOM_H) + bottomSep:SetPoint("BOTTOMRIGHT", TradeFrame, "BOTTOMRIGHT", -4, BOTTOM_H) + + -- Player name (pink/gold tint) + TradeFramePlayerNameText:ClearAllPoints() + TradeFramePlayerNameText:SetPoint("TOPLEFT", TradeFrame, "TOPLEFT", SIDE_PAD, -8) + TradeFramePlayerNameText:SetFont(GetFont(), 12, "OUTLINE") + TradeFramePlayerNameText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + + -- Target name + TradeFrameRecipientNameText:ClearAllPoints() + TradeFrameRecipientNameText:SetPoint("TOPRIGHT", TradeFrame, "TOPRIGHT", -SIDE_PAD, -8) + TradeFrameRecipientNameText:SetFont(GetFont(), 12, "OUTLINE") + TradeFrameRecipientNameText:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + + if TradeFrameRecipientPortrait then TradeFrameRecipientPortrait:Hide() end + if TradeFramePlayerPortrait then TradeFramePlayerPortrait:Hide() end + + -- Confirmation status bars (created here, positioned after item layout) + local function CreateStatusBar(parent, anchorSide) + local bar = CreateFrame("Frame", nil, parent) + bar:SetWidth(SLOT_W) + bar:SetHeight(STATUS_BAR_H) + bar:SetFrameLevel(parent:GetFrameLevel() + 5) + SetRoundBackdrop(bar, T.statusWaitBg, T.statusWaitBd) + + local icon = bar:CreateFontString(nil, "OVERLAY") + icon:SetFont(GetFont(), 13, "OUTLINE") + icon:SetPoint("LEFT", bar, "LEFT", 8, 0) + bar.sfIcon = icon + + local label = bar:CreateFontString(nil, "OVERLAY") + label:SetFont(GetFont(), 12, "OUTLINE") + label:SetPoint("LEFT", icon, "RIGHT", 4, 0) + label:SetPoint("RIGHT", bar, "RIGHT", -6, 0) + label:SetJustifyH(anchorSide) + bar.sfLabel = label + + local glow = bar:CreateTexture(nil, "BACKGROUND") + glow:SetTexture("Interface\\Buttons\\WHITE8X8") + glow:SetAllPoints(bar) + glow:SetAlpha(0) + bar.sfGlow = glow + + bar.sfElapsed = 0 + bar:SetScript("OnUpdate", function() + if not this.sfConfirmed then return end + this.sfElapsed = (this.sfElapsed or 0) + arg1 + local a = 0.35 + 0.2 * math.sin(this.sfElapsed * 3.5) + if this.sfGlow then this.sfGlow:SetAlpha(a) end + end) + + bar:Hide() + return bar + end + + local playerStatusBar = CreateStatusBar(TradeFrame, "LEFT") + TradeFrame.sfPlayerStatusBar = playerStatusBar + + local targetStatusBar = CreateStatusBar(TradeFrame, "LEFT") + TradeFrame.sfTargetStatusBar = targetStatusBar + + -- Money frames + TradePlayerInputMoneyFrame:ClearAllPoints() + TradePlayerInputMoneyFrame:SetPoint("TOPLEFT", TradeFrame, "TOPLEFT", SIDE_PAD, -24) + + local pMoneyBg = CreateFrame("Frame", nil, TradeFrame) + pMoneyBg:SetPoint("TOPLEFT", TradePlayerInputMoneyFrame, "TOPLEFT", -3, 3) + pMoneyBg:SetPoint("BOTTOMRIGHT", TradePlayerInputMoneyFrame, "BOTTOMRIGHT", 3, -3) + pMoneyBg:SetFrameLevel(math.max(TradePlayerInputMoneyFrame:GetFrameLevel() - 1, 0)) + SetRoundBackdrop(pMoneyBg, T.moneyBg, T.moneyBorder) + + TradeRecipientMoneyFrame:ClearAllPoints() + TradeRecipientMoneyFrame:SetPoint("TOPRIGHT", TradeFrame, "TOPRIGHT", -SIDE_PAD, -24) + + local rMoneyBg = CreateFrame("Frame", nil, TradeFrame) + rMoneyBg:SetPoint("TOPLEFT", TradeRecipientMoneyFrame, "TOPLEFT", -3, 3) + rMoneyBg:SetPoint("BOTTOMRIGHT", TradeRecipientMoneyFrame, "BOTTOMRIGHT", 3, -3) + rMoneyBg:SetFrameLevel(math.max(TradeRecipientMoneyFrame:GetFrameLevel() - 1, 0)) + SetRoundBackdrop(rMoneyBg, T.moneyBg, T.moneyBorder) + + -- Style money input text + local moneyEditNames = { "Gold", "Silver", "Copper" } + for _, suffix in ipairs(moneyEditNames) do + local eb = _G["TradePlayerInputMoneyFrame" .. suffix] + if eb and eb.SetFont then + eb:SetFont(GetFont(), 12, "OUTLINE") + eb:SetTextColor(1, 1, 1, 1) + end + local btn = _G["TradePlayerInputMoneyFrame" .. suffix .. "Button"] + if btn then + local icon = btn:GetNormalTexture() + if icon then icon:SetVertexColor(1, 1, 1, 1) end + end + local rBtn = _G["TradeRecipientMoneyFrame" .. suffix .. "Button"] + if rBtn then + local rText = _G["TradeRecipientMoneyFrame" .. suffix .. "ButtonText"] + if rText and rText.SetFont then + rText:SetFont(GetFont(), 11, "OUTLINE") + rText:SetTextColor(1, 1, 1, 1) + end + end + end + + ---------------------------------------------------------------------------- + -- Item slots - fully custom, Blizzard button is invisible click receiver + ---------------------------------------------------------------------------- + local function HideBlizzardButton(itemBtn) + local btnName = itemBtn:GetName() + + -- Kill every known named child texture by explicit name + local suffixes = { "IconTexture", "NormalTexture", "SlotTexture", "Count" } + for _, suf in ipairs(suffixes) do + local obj = _G[btnName .. suf] + if obj then + if obj.SetTexture then obj:SetTexture(nil) end + if obj.SetAlpha then obj:SetAlpha(0) end + if obj.SetTextColor then obj:SetTextColor(0,0,0,0) end + if obj.Hide then obj:Hide() end + end + end + + -- Kill template textures via API + if itemBtn.GetNormalTexture then + local nt = itemBtn:GetNormalTexture() + if nt then nt:SetTexture(nil); nt:SetAlpha(0) end + end + if itemBtn.GetPushedTexture then + local pt = itemBtn:GetPushedTexture() + if pt then pt:SetTexture(nil); pt:SetAlpha(0) end + end + if itemBtn.GetHighlightTexture then + local ht = itemBtn:GetHighlightTexture() + if ht then ht:SetTexture(nil); ht:SetAlpha(0) end + end + + -- Kill all remaining child regions + local regions = { itemBtn:GetRegions() } + for _, r in ipairs(regions) do + if r then + if r.SetTexture then r:SetTexture(nil) end + if r.SetAlpha then r:SetAlpha(0) end + if r.SetTextColor then r:SetTextColor(0,0,0,0) end + if r.Hide then r:Hide() end + end + end + + itemBtn:SetBackdrop(nil) + end + + local function CreateSfSlot(parent) + local slot = CreateFrame("Frame", nil, parent) + slot:SetWidth(SLOT_H) + slot:SetHeight(SLOT_H) + slot:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } + }) + slot:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + slot:SetBackdropBorderColor(DEFAULT_SLOT_BORDER[1], DEFAULT_SLOT_BORDER[2], DEFAULT_SLOT_BORDER[3], DEFAULT_SLOT_BORDER[4]) + + local icon = slot:CreateTexture(nil, "ARTWORK") + icon:SetWidth(SLOT_H - 4) + icon:SetHeight(SLOT_H - 4) + icon:SetPoint("CENTER", slot, "CENTER", 0, 0) + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:Hide() + slot.icon = icon + + local highlight = slot:CreateTexture(nil, "OVERLAY") + highlight:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + highlight:SetBlendMode("ADD") + highlight:SetWidth(SLOT_H - 4) + highlight:SetHeight(SLOT_H - 4) + highlight:SetPoint("CENTER", slot, "CENTER", 0, 0) + highlight:SetAlpha(0) + slot.highlight = highlight + + local ilvl = slot:CreateFontString(nil, "OVERLAY") + ilvl:SetFont(GetFont(), 9, "OUTLINE") + ilvl:SetPoint("BOTTOMRIGHT", slot, "BOTTOMRIGHT", -2, 2) + ilvl:SetTextColor(1, 0.82, 0) + ilvl:SetJustifyH("RIGHT") + ilvl:Hide() + slot.ilvl = ilvl + + local count = slot:CreateFontString(nil, "OVERLAY") + count:SetFont(GetFont(), 11, "OUTLINE") + count:SetPoint("BOTTOMRIGHT", slot, "BOTTOMRIGHT", -2, 2) + count:SetTextColor(1, 1, 1) + count:SetJustifyH("RIGHT") + count:Hide() + slot.count = count + + local qualGlow = slot:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.8) + qualGlow:SetWidth(SLOT_H * 1.8) + qualGlow:SetHeight(SLOT_H * 1.8) + qualGlow:SetPoint("CENTER", slot, "CENTER", 0, 0) + qualGlow:Hide() + slot.qualGlow = qualGlow + + return slot + end + + local function StyleTradeItem(itemPrefix, index) + local itemFrame = _G[itemPrefix .. index] + local itemBtn = _G[itemPrefix .. index .. "ItemButton"] + local itemName = _G[itemPrefix .. index .. "Name"] + local bgSlot = _G[itemPrefix .. index .. "ItemButtonSlotTexture"] + local bgSlot2 = _G[itemPrefix .. index .. "SlotTexture"] + local bgSlot3 = _G[itemPrefix .. index .. "ItemButtonBackground"] + local nameFrame = _G[itemPrefix .. index .. "NameFrame"] + + if bgSlot then + bgSlot:SetTexture(nil); bgSlot:Hide() + bgSlot.Show = function() end + end + if bgSlot2 then + bgSlot2:SetTexture(nil); bgSlot2:Hide() + bgSlot2.Show = function() end + end + if bgSlot3 then + bgSlot3:SetTexture(nil); bgSlot3:Hide() + bgSlot3.Show = function() end + end + if nameFrame then + nameFrame:SetTexture(nil); nameFrame:Hide() + nameFrame.Show = function() end + end + + itemFrame:SetWidth(SLOT_W) + itemFrame:SetHeight(SLOT_H) + + -- Row background (create once) + if not itemFrame.sfRowBg then + local slotBg = itemFrame:CreateTexture(nil, "BACKGROUND") + slotBg:SetTexture("Interface\\Tooltips\\UI-Tooltip-Background") + slotBg:SetVertexColor(0.08, 0.04, 0.06, 0.4) + slotBg:SetAllPoints(itemFrame) + itemFrame.sfRowBg = slotBg + end + + -- Create our pure custom slot (once) + if not itemFrame.sfSlot then + itemFrame.sfSlot = CreateSfSlot(itemFrame) + end + local sfSlot = itemFrame.sfSlot + sfSlot:ClearAllPoints() + sfSlot:SetPoint("LEFT", itemFrame, "LEFT", 1, 0) + sfSlot:SetFrameLevel(itemFrame:GetFrameLevel() + 1) + sfSlot:Show() + + -- Make Blizzard button completely invisible + HideBlizzardButton(itemBtn) + + -- Position invisible Blizzard button exactly over sfSlot for click/drag + itemBtn:ClearAllPoints() + itemBtn:SetWidth(SLOT_H) + itemBtn:SetHeight(SLOT_H) + itemBtn:SetPoint("CENTER", sfSlot, "CENTER", 0, 0) + itemBtn:SetFrameLevel(sfSlot:GetFrameLevel() + 2) + + -- Hover glow: show/hide highlight on sfSlot when mouse enters Blizzard button + if not itemBtn.sfHoverHooked then + itemBtn.sfHoverHooked = true + local origEnter = itemBtn:GetScript("OnEnter") + local origLeave = itemBtn:GetScript("OnLeave") + itemBtn:SetScript("OnEnter", function() + if origEnter then origEnter() end + local sf = this:GetParent() and this:GetParent().sfSlot + if sf and sf.highlight then sf.highlight:SetAlpha(0.35) end + end) + itemBtn:SetScript("OnLeave", function() + if origLeave then origLeave() end + local sf = this:GetParent() and this:GetParent().sfSlot + if sf and sf.highlight then sf.highlight:SetAlpha(0) end + end) + end + + -- Name text anchored to sfSlot + itemName:ClearAllPoints() + itemName:SetPoint("LEFT", sfSlot, "RIGHT", 6, 0) + itemName:SetPoint("RIGHT", itemFrame, "RIGHT", -4, 0) + itemName:SetJustifyH("LEFT") + itemName:SetFont(GetFont(), 11, "OUTLINE") + end + + -- Layout items in two columns + for i = 1, 7 do + StyleTradeItem("TradePlayerItem", i) + StyleTradeItem("TradeRecipientItem", i) + + local pf = _G["TradePlayerItem" .. i] + local rf = _G["TradeRecipientItem" .. i] + pf:ClearAllPoints() + rf:ClearAllPoints() + + if i == 1 then + pf:SetPoint("TOPLEFT", TradeFrame, "TOPLEFT", SIDE_PAD, -(HEADER_H + 8)) + rf:SetPoint("TOPRIGHT", TradeFrame, "TOPRIGHT", -SIDE_PAD, -(HEADER_H + 8)) + elseif i == 7 then + pf:SetPoint("TOPLEFT", _G["TradePlayerItem6"], "BOTTOMLEFT", 0, -NOT_TRADED_GAP) + rf:SetPoint("TOPLEFT", _G["TradeRecipientItem6"], "BOTTOMLEFT", 0, -NOT_TRADED_GAP) + + if TradeFrame.sfBottomTexts then + for idx, lbl in ipairs(TradeFrame.sfBottomTexts) do + lbl:ClearAllPoints() + lbl:SetFont(GetFont(), 10, "OUTLINE") + lbl:SetTextColor(T.labelDim[1], T.labelDim[2], T.labelDim[3]) + if idx == 1 then + lbl:SetPoint("BOTTOMLEFT", pf, "TOPLEFT", 0, 5) + else + lbl:SetPoint("BOTTOMLEFT", rf, "TOPLEFT", 0, 5) + end + end + end + else + pf:SetPoint("TOPLEFT", _G["TradePlayerItem" .. (i - 1)], "BOTTOMLEFT", 0, -SLOT_GAP) + rf:SetPoint("TOPLEFT", _G["TradeRecipientItem" .. (i - 1)], "BOTTOMLEFT", 0, -SLOT_GAP) + end + end + + -- Position status bars below item 7 + if TradeFrame.sfPlayerStatusBar then + TradeFrame.sfPlayerStatusBar:ClearAllPoints() + TradeFrame.sfPlayerStatusBar:SetPoint("TOPLEFT", _G["TradePlayerItem7"], "BOTTOMLEFT", 0, -4) + end + if TradeFrame.sfTargetStatusBar then + TradeFrame.sfTargetStatusBar:ClearAllPoints() + TradeFrame.sfTargetStatusBar:SetPoint("TOPLEFT", _G["TradeRecipientItem7"], "BOTTOMLEFT", 0, -4) + end + + -- Thin separator in the gap between slot 6 and not-traded label + local function MakeThinSep(anchor, w) + local sep = TradeFrame:CreateTexture(nil, "ARTWORK") + sep:SetTexture("Interface\\Buttons\\WHITE8X8") + sep:SetVertexColor(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + sep:SetHeight(1) + sep:SetWidth(w) + sep:SetPoint("BOTTOMLEFT", anchor, "BOTTOMLEFT", 0, -(NOT_TRADED_GAP / 2.5)) + end + MakeThinSep(_G["TradePlayerItem6"], SLOT_W) + MakeThinSep(_G["TradeRecipientItem6"], SLOT_W) + + ---------------------------------------------------------------------------- + -- Hide Blizzard confirm highlights (we handle this ourselves) + ---------------------------------------------------------------------------- + local function KillBlizzardHighlight(name) + local obj = _G[name] + if not obj then return end + if obj:IsObjectType("Texture") then + obj:SetTexture(nil); obj:SetAlpha(0); obj:Hide() + obj.Show = function() end + elseif obj:IsObjectType("Frame") then + local regs = { obj:GetRegions() } + for _, r in ipairs(regs) do + if r:IsObjectType("Texture") then r:SetTexture(nil); r:Hide() end + end + obj:SetAlpha(0); obj:Hide() + obj.Show = function() end + end + end + KillBlizzardHighlight("TradeHighlightPlayer") + KillBlizzardHighlight("TradeHighlightRecipient") + KillBlizzardHighlight("TradeHighlightPlayerEnchant") + KillBlizzardHighlight("TradeHighlightRecipientEnchant") + + ---------------------------------------------------------------------------- + -- Custom confirm overlay (our own, with proper FrameLevel + pulse) + ---------------------------------------------------------------------------- + local function CreateConfirmOverlay(parent, item1, item2) + local overlay = CreateFrame("Frame", nil, parent) + overlay:SetFrameLevel(parent:GetFrameLevel() + 8) + overlay:SetPoint("TOPLEFT", item1, "TOPLEFT", -4, 4) + overlay:SetPoint("BOTTOMRIGHT", item2, "BOTTOMRIGHT", 4, -4) + + SetRoundBackdrop(overlay, { 0, 0, 0, 0 }, T.confirmBorder) + + overlay.sfElapsed = 0 + overlay:SetScript("OnUpdate", function() + this.sfElapsed = (this.sfElapsed or 0) + arg1 + local pulse = 0.6 + 0.4 * math.sin(this.sfElapsed * 3) + this:SetBackdropBorderColor( + T.confirmBorder[1], T.confirmBorder[2], T.confirmBorder[3], pulse) + end) + + overlay:EnableMouse(false) + overlay:Hide() + return overlay + end + + TradeFrame.sfPlayerOverlay = CreateConfirmOverlay(TradeFrame, + _G["TradePlayerItem1"], _G["TradePlayerItem6"]) + TradeFrame.sfPlayerOverlayEnchant = CreateConfirmOverlay(TradeFrame, + _G["TradePlayerItem7"], _G["TradePlayerItem7"]) + TradeFrame.sfTargetOverlay = CreateConfirmOverlay(TradeFrame, + _G["TradeRecipientItem1"], _G["TradeRecipientItem6"]) + TradeFrame.sfTargetOverlayEnchant = CreateConfirmOverlay(TradeFrame, + _G["TradeRecipientItem7"], _G["TradeRecipientItem7"]) + + ---------------------------------------------------------------------------- + -- Buttons - Nanami-UI GameMenu style + ---------------------------------------------------------------------------- + local function SkinBtn(btn, bgCol, borderCol, textCol, label) + if not btn then return end + btn:SetWidth(72) + btn:SetHeight(26) + + local nt = btn:GetNormalTexture() + if nt then nt:SetTexture(nil) end + local pt = btn:GetPushedTexture() + if pt then pt:SetTexture(nil) end + local ht = btn:GetHighlightTexture() + if ht then ht:SetTexture(nil) end + local dt = btn:GetDisabledTexture() + if dt then dt:SetTexture(nil) end + + SetRoundBackdrop(btn, bgCol, borderCol) + + local origEnter = btn:GetScript("OnEnter") + local origLeave = btn:GetScript("OnLeave") + + if not btn.sfHoverHooked then + btn.sfHoverHooked = true + btn.sfBgCol = bgCol + btn.sfBorderCol = borderCol + + btn:SetScript("OnEnter", function() + if origEnter then origEnter() end + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBorder[1], T.btnHoverBorder[2], T.btnHoverBorder[3], T.btnHoverBorder[4]) + local fs = this:GetFontString() + if fs then fs:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end + end) + + btn:SetScript("OnLeave", function() + if origLeave then origLeave() end + local bg = this.sfBgCol or T.btnBg + local bd = this.sfBorderCol or T.btnBorder + this:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + this:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) + local fs = this:GetFontString() + if fs and this.sfTextCol then fs:SetTextColor(unpack(this.sfTextCol)) end + end) + end + + local fs = btn:GetFontString() + if fs then + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetTextColor(unpack(textCol or T.btnText)) + if label then fs:SetText(label) end + end + btn.sfTextCol = textCol or T.btnText + end + + SkinBtn(TradeFrameTradeButton, T.tradeBg, T.tradeBorder, T.tradeText, "交易") + SkinBtn(TradeFrameCancelButton, T.btnBg, T.btnBorder, T.btnText, "取消") + + TradeFrameTradeButton:ClearAllPoints() + TradeFrameCancelButton:ClearAllPoints() + TradeFrameCancelButton:SetPoint("BOTTOMRIGHT", TradeFrame, "BOTTOMRIGHT", -SIDE_PAD, 14) + TradeFrameTradeButton:SetPoint("RIGHT", TradeFrameCancelButton, "LEFT", -6, 0) + + ---------------------------------------------------------------------------- + -- Whisper checkbox + channel dropdown + ---------------------------------------------------------------------------- + local cbObj = _G["SFramesTradeWhisperObj"] + if not cbObj then + cbObj = CreateFrame("CheckButton", "SFramesTradeWhisperObj", TradeFrame, "UICheckButtonTemplate") + cbObj:SetWidth(20) + cbObj:SetHeight(20) + cbObj:SetPoint("BOTTOMLEFT", TradeFrame, "BOTTOMLEFT", SIDE_PAD, 14) + + local cbText = _G[cbObj:GetName() .. "Text"] + if cbText then + cbText:SetFont(GetFont(), 11, "OUTLINE") + cbText:SetText(L.WHISPER_CHECK) + cbText:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + + if SFramesDB.TradeWhisperEnable == nil then SFramesDB.TradeWhisperEnable = false end + cbObj:SetChecked(SFramesDB.TradeWhisperEnable and 1 or 0) + cbObj:SetScript("OnClick", function() + SFramesDB = SFramesDB or {} + SFramesDB.TradeWhisperEnable = (this:GetChecked() == 1) + end) + + local drop = CreateFrame("Frame", "SFramesTradeChannelObj", TradeFrame, "UIDropDownMenuTemplate") + drop:SetPoint("LEFT", cbText or cbObj, "RIGHT", -8, -1) + UIDropDownMenu_SetWidth(60, drop) + + local dropText = _G[drop:GetName() .. "Text"] + if dropText then + dropText:SetFont(GetFont(), 10, "OUTLINE") + dropText:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + end + + local channels = { + { text = "密语", value = "WHISPER" }, + { text = "小队", value = "PARTY" }, + { text = "当前", value = "SAY" }, + } + + local function TradeDropDownInit() + SFramesDB = SFramesDB or {} + local selected = SFramesDB.TradeWhisperChannel or "WHISPER" + for _, info in ipairs(channels) do + local d = {} + d.text = info.text + d.value = info.value + d.func = function() + SFramesDB = SFramesDB or {} + SFramesDB.TradeWhisperChannel = this.value + UIDropDownMenu_SetSelectedValue(drop, this.value) + local txt = _G[drop:GetName() .. "Text"] + if txt then txt:SetText(info.text) end + end + d.checked = (info.value == selected) + UIDropDownMenu_AddButton(d) + end + end + + UIDropDownMenu_Initialize(drop, TradeDropDownInit) + SFramesDB = SFramesDB or {} + UIDropDownMenu_SetSelectedValue(drop, SFramesDB.TradeWhisperChannel or "WHISPER") + if dropText then + for _, info in ipairs(channels) do + if info.value == (SFramesDB.TradeWhisperChannel or "WHISPER") then + dropText:SetText(info.text) + break + end + end + end + end + + -- Close button + local closeBtn = _G["TradeFrameCloseButton"] + if closeBtn then + closeBtn:ClearAllPoints() + closeBtn:SetPoint("TOPRIGHT", TradeFrame, "TOPRIGHT", -2, -2) + end + + HookTradeItemRightClick() +end + +-------------------------------------------------------------------------------- +-- Hooks +-------------------------------------------------------------------------------- +local Hook_TradeFrame_OnShow = TradeFrame_OnShow +function TradeFrame_OnShow() + if Hook_TradeFrame_OnShow then Hook_TradeFrame_OnShow() end + SkinTradeFrame() + ForceRefreshTradeVisuals() +end + +local function UpdateSfSlot(sfSlot, texture, numItems, link, ilvl, quality) + if not sfSlot then return end + + -- Icon texture + if texture then + sfSlot.icon:SetTexture(texture) + sfSlot.icon:Show() + else + sfSlot.icon:SetTexture(nil) + sfSlot.icon:Hide() + end + + -- Stack count + if numItems and numItems > 1 then + sfSlot.count:SetText(numItems) + sfSlot.count:Show() + sfSlot.ilvl:Hide() + else + sfSlot.count:Hide() + -- Item level (only show if no stack count) + if ilvl and ilvl > 0 and texture then + sfSlot.ilvl:SetText(ilvl) + sfSlot.ilvl:Show() + else + sfSlot.ilvl:Hide() + end + end + + -- Quality border + local r, g, b = nil, nil, nil + if link and not IsCommonOrPoor(link) then + r, g, b = GetQualityColorFromLink(link) + end + if (not r) and type(quality) == "number" and quality ~= 1 then + r, g, b = GetQualityColorFromRarity(quality) + end + if r then + if sfSlot.qualGlow then + sfSlot.qualGlow:SetVertexColor(r, g, b) + sfSlot.qualGlow:Show() + end + else + if sfSlot.qualGlow then + sfSlot.qualGlow:Hide() + end + end +end + +local function UpdateSlotNameColor(nameObj, link, quality) + if not nameObj then return end + local r, g, b = nil, nil, nil + if link then + r, g, b = GetQualityColorFromLink(link) + end + if (not r) and type(quality) == "number" and quality ~= 1 then + r, g, b = GetQualityColorFromRarity(quality) + end + if r then + nameObj:SetTextColor(r, g, b) + return + end + nameObj:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) +end + +local function SetStatusBarState(bar, confirmed) + if not bar then return end + if confirmed then + bar.sfConfirmed = true + bar.sfElapsed = 0 + SetRoundBackdrop(bar, T.statusConfirmBg, T.statusConfirmBd) + if bar.sfGlow then + bar.sfGlow:SetVertexColor(T.confirmOverlay[1], T.confirmOverlay[2], T.confirmOverlay[3], 1) + bar.sfGlow:SetAlpha(0.35) + end + if bar.sfIcon then + bar.sfIcon:SetText("|cff33ff55>>|r") + bar.sfIcon:SetTextColor(0.3, 1, 0.4) + end + if bar.sfLabel then + bar.sfLabel:SetText(L.CONFIRMED) + bar.sfLabel:SetTextColor(T.confirmText[1], T.confirmText[2], T.confirmText[3]) + end + else + bar.sfConfirmed = false + SetRoundBackdrop(bar, T.statusWaitBg, T.statusWaitBd) + if bar.sfGlow then bar.sfGlow:SetAlpha(0) end + if bar.sfIcon then + bar.sfIcon:SetText("...") + bar.sfIcon:SetTextColor(T.statusWaitText[1], T.statusWaitText[2], T.statusWaitText[3]) + end + if bar.sfLabel then + bar.sfLabel:SetText(L.WAITING) + bar.sfLabel:SetTextColor(T.statusWaitText[1], T.statusWaitText[2], T.statusWaitText[3]) + end + end + bar:Show() +end + +local function UpdateConfirmStatus() + if not TradeFrame then return end + + local playerConfirmed = TRADE_DATA.playerAccepted + local targetConfirmed = TRADE_DATA.targetAccepted + + -- Status bars + SetStatusBarState(TradeFrame.sfPlayerStatusBar, playerConfirmed) + SetStatusBarState(TradeFrame.sfTargetStatusBar, targetConfirmed) + + -- Green overlays on item columns + if TradeFrame.sfPlayerOverlay then + if playerConfirmed then TradeFrame.sfPlayerOverlay:Show() + else TradeFrame.sfPlayerOverlay:Hide() end + end + if TradeFrame.sfPlayerOverlayEnchant then + if playerConfirmed then TradeFrame.sfPlayerOverlayEnchant:Show() + else TradeFrame.sfPlayerOverlayEnchant:Hide() end + end + if TradeFrame.sfTargetOverlay then + if targetConfirmed then TradeFrame.sfTargetOverlay:Show() + else TradeFrame.sfTargetOverlay:Hide() end + end + if TradeFrame.sfTargetOverlayEnchant then + if targetConfirmed then TradeFrame.sfTargetOverlayEnchant:Show() + else TradeFrame.sfTargetOverlayEnchant:Hide() end + end +end + +local Hook_TradeFrame_Update = TradeFrame_Update +function TradeFrame_Update() + if Hook_TradeFrame_Update then Hook_TradeFrame_Update() end + + for i = 1, 7 do + -- Re-hide Blizzard visuals (Blizzard code re-shows them every update) + ReHideBlizzardSlot("TradePlayerItem", i) + ReHideBlizzardSlot("TradeRecipientItem", i) + + -- Read from Blizzard API + local pName, pTex, pNum, pQuality = GetTradePlayerItemInfo(i) + local rName, rTex, rNum, rQuality = GetTradeTargetItemInfo(i) + local pLink = GetTradePlayerItemLink(i) + local rLink = GetTradeTargetItemLink and GetTradeTargetItemLink(i) + + if (not pTex or pTex == "") then + local pIconObj = _G["TradePlayerItem" .. i .. "ItemButtonIconTexture"] + if pIconObj and pIconObj.GetTexture then + pTex = pIconObj:GetTexture() + end + end + if (not rTex or rTex == "") then + local rIconObj = _G["TradeRecipientItem" .. i .. "ItemButtonIconTexture"] + if rIconObj and rIconObj.GetTexture then + rTex = rIconObj:GetTexture() + end + end + if (not pTex or pTex == "") and pLink and GetItemIcon then + pTex = GetItemIcon(pLink) + end + if (not rTex or rTex == "") and rLink and GetItemIcon then + rTex = GetItemIcon(rLink) + end + if (not pTex or pTex == "") and pName and GetItemInfo then + local _, _, _, _, _, _, _, _, pInfoTex = GetItemInfo(pName) + pTex = pInfoTex or pTex + end + if (not rTex or rTex == "") and rName and GetItemInfo then + local _, _, _, _, _, _, _, _, rInfoTex = GetItemInfo(rName) + rTex = rInfoTex or rTex + end + + pQuality = ResolveTradeItemQuality(pLink, pQuality, pName) + rQuality = ResolveTradeItemQuality(rLink, rQuality, rName) + + local pIlvl = (pTex or pName or pLink) and GetTradePlayerItemLevel(i) or nil + local rIlvl = (rTex or rName or rLink) and GetTradeTargetItemLevel(i) or nil + + -- Write to custom sfSlot + local pFrame = _G["TradePlayerItem" .. i] + local rFrame = _G["TradeRecipientItem" .. i] + if pFrame then UpdateSfSlot(pFrame.sfSlot, pTex, pNum, pLink, pIlvl, pQuality) end + if rFrame then UpdateSfSlot(rFrame.sfSlot, rTex, rNum, rLink, rIlvl, rQuality) end + + UpdateSlotNameColor(_G["TradePlayerItem" .. i .. "Name"], pLink, pQuality) + UpdateSlotNameColor(_G["TradeRecipientItem" .. i .. "Name"], rLink, rQuality) + end + + UpdateConfirmStatus() +end + +local Hook_MoneyFrame_Update = MoneyFrame_Update +function MoneyFrame_Update(frameName, money) + if Hook_MoneyFrame_Update then Hook_MoneyFrame_Update(frameName, money) end +end + diff --git a/TradeSkillDB.lua b/TradeSkillDB.lua new file mode 100644 index 0000000..2ee417a --- /dev/null +++ b/TradeSkillDB.lua @@ -0,0 +1,9852 @@ +-- Auto-generated from LibCrafts-1.0 + AtlasLoot thresholds +-- Keys: itemID (number), Chinese name (string), English name (string) +-- Lazy-loaded: call NanamiTradeSkillDB_Init() before first use +function NanamiTradeSkillDB_Init() + if NanamiTradeSkillDB then return end +NanamiTradeSkillDB = { +[65]={175,175,182,190}, +[66]={175,175,180,185}, +[67]={235,235,240,245}, +[82]={275,275,280,285}, +[87]={285,285,297,310}, +[103]={300,300,310,320}, +[118]={1,55,75,95}, +[131]={200,195,200,205}, +[151]={225,225,230,235}, +[156]={185,185,200,215}, +[724]={50,90,110,130}, +[733]={75,115,135,155}, +[787]={1,45,65,85}, +[858]={55,85,105,125}, +[929]={110,135,155,175}, +[1017]={100,140,160,180}, +[1082]={100,135,155,175}, +[1251]={1,30,45,60}, +[1710]={155,175,195,215}, +[2300]={40,70,85,100}, +[2302]={1,40,55,70}, +[2303]={15,45,60,75}, +[2304]={1,30,45,60}, +[2307]={90,120,135,150}, +[2308]={85,105,120,135}, +[2309]={55,85,100,115}, +[2310]={60,90,105,120}, +[2311]={60,90,105,120}, +[2312]={75,105,120,135}, +[2313]={100,115,122,130}, +[2314]={120,145,157,170}, +[2315]={100,125,137,150}, +[2316]={110,135,147,160}, +[2317]={100,125,137,150}, +[2318]={1,20,30,40}, +[2319]={100,100,105,110}, +[2454]={1,55,75,95}, +[2455]={25,65,85,105}, +[2456]={40,70,90,110}, +[2457]={50,80,100,120}, +[2458]={50,80,100,120}, +[2459]={60,90,110,130}, +[2568]={10,45,57,70}, +[2569]={65,90,107,125}, +[2570]={1,35,47,60}, +[2572]={40,65,82,100}, +[2575]={40,65,82,100}, +[2576]={1,35,47,60}, +[2577]={40,65,82,100}, +[2578]={70,95,112,130}, +[2579]={70,95,112,130}, +[2580]={60,85,102,120}, +[2581]={40,50,75,100}, +[2582]={85,110,127,145}, +[2583]={95,120,137,155}, +[2584]={75,100,117,135}, +[2585]={105,130,147,165}, +[2587]={100,110,120,130}, +[2679]={1,45,65,85}, +[2680]={10,50,70,90}, +[2681]={1,45,65,85}, +[2682]={85,125,145,165}, +[2683]={75,115,135,155}, +[2684]={50,90,110,130}, +[2685]={110,130,150,170}, +[2687]={80,120,140,160}, +[2840]={1,25,45,70}, +[2841]={65,65,90,115}, +[2842]={75,100,112,125}, +[2844]={15,55,75,95}, +[2845]={20,60,80,100}, +[2847]={25,65,85,105}, +[2848]={110,140,155,170}, +[2849]={115,145,160,175}, +[2850]={120,150,165,180}, +[2851]={35,75,95,115}, +[2852]={1,50,70,90}, +[2853]={1,20,40,60}, +[2854]={90,115,127,140}, +[2857]={70,110,130,150}, +[2862]={1,15,35,55}, +[2863]={65,65,72,80}, +[2864]={80,120,140,160}, +[2865]={105,145,160,175}, +[2866]={105,145,160,175}, +[2867]={100,140,160,180}, +[2868]={120,150,165,180}, +[2869]={130,160,175,190}, +[2870]={145,175,190,205}, +[2871]={125,125,132,140}, +[2888]={25,60,80,100}, +[2892]={130,175,200,225}, +[2893]={170,215,240,265}, +[2996]={1,25,37,50}, +[2997]={75,90,97,105}, +[3220]={60,100,120,140}, +[3239]={1,15,35,55}, +[3240]={65,65,72,80}, +[3241]={125,125,132,140}, +[3382]={15,60,80,100}, +[3383]={90,120,140,160}, +[3384]={110,135,155,175}, +[3385]={120,145,165,185}, +[3386]={120,145,165,185}, +[3387]={250,275,295,315}, +[3388]={125,150,170,190}, +[3389]={130,155,175,195}, +[3390]={140,165,185,205}, +[3391]={150,175,195,215}, +[3469]={20,60,80,100}, +[3470]={25,45,65,85}, +[3471]={35,75,95,115}, +[3472]={40,80,100,120}, +[3473]={45,85,105,125}, +[3474]={60,100,120,140}, +[3478]={75,75,87,100}, +[3480]={110,140,155,170}, +[3481]={125,155,170,185}, +[3482]={130,160,175,190}, +[3483]={135,165,180,195}, +[3484]={145,175,190,205}, +[3485]={150,180,195,210}, +[3486]={125,125,137,150}, +[3487]={95,135,155,175}, +[3488]={35,75,95,115}, +[3489]={70,110,130,150}, +[3490]={125,155,170,185}, +[3491]={130,160,175,190}, +[3492]={145,175,190,205}, +[3530]={80,80,115,150}, +[3531]={115,115,150,185}, +[3575]={125,125,130,140}, +[3576]={65,65,70,75}, +[3577]={225,240,260,280}, +[3662]={80,120,140,160}, +[3663]={90,130,150,170}, +[3664]={120,160,180,200}, +[3665]={130,170,190,210}, +[3666]={110,150,170,190}, +[3719]={150,170,180,190}, +[3726]={110,150,170,190}, +[3727]={125,175,195,215}, +[3728]={150,190,210,230}, +[3729]={175,215,235,255}, +[3775]={1,125,150,175}, +[3776]={230,275,300,325}, +[3823]={165,185,205,225}, +[3824]={165,190,210,230}, +[3825]={175,195,215,235}, +[3826]={180,200,220,240}, +[3827]={160,180,200,220}, +[3828]={195,215,235,255}, +[3829]={200,220,240,260}, +[3835]={165,190,202,215}, +[3836]={170,195,207,220}, +[3837]={190,215,227,240}, +[3840]={160,185,197,210}, +[3841]={175,200,212,225}, +[3842]={155,180,192,205}, +[3843]={170,195,207,220}, +[3844]={180,205,217,230}, +[3845]={195,220,232,245}, +[3846]={185,210,222,235}, +[3847]={200,225,237,250}, +[3848]={105,135,150,165}, +[3849]={160,185,197,210}, +[3850]={175,200,212,225}, +[3851]={155,180,192,205}, +[3852]={170,195,207,220}, +[3853]={180,205,217,230}, +[3854]={200,225,237,250}, +[3855]={185,210,222,235}, +[3856]={200,225,237,250}, +[3859]={165,165,165,165}, +[3860]={175,175,175,175}, +[3928]={215,230,250,270}, +[4231]={35,55,65,75}, +[4233]={100,115,122,130}, +[4234]={150,150,155,160}, +[4236]={150,160,165,170}, +[4237]={25,55,70,85}, +[4238]={45,70,87,105}, +[4239]={55,85,100,115}, +[4240]={80,105,122,140}, +[4241]={95,120,137,155}, +[4242]={75,105,120,135}, +[4243]={85,115,130,145}, +[4244]={100,125,137,150}, +[4245]={150,170,185,200}, +[4246]={80,110,125,140}, +[4247]={145,170,182,195}, +[4248]={120,155,167,180}, +[4249]={125,150,162,175}, +[4250]={120,145,157,170}, +[4251]={130,155,167,180}, +[4252]={140,165,177,190}, +[4253]={135,160,172,185}, +[4254]={150,170,180,190}, +[4255]={155,175,185,195}, +[4256]={175,195,205,215}, +[4257]={160,180,190,200}, +[4258]={170,190,200,210}, +[4259]={180,200,210,220}, +[4260]={195,215,225,235}, +[4262]={185,205,215,225}, +[4264]={200,220,230,240}, +[4265]={150,170,180,190}, +[4304]={200,200,202,205}, +[4305]={125,135,140,145}, +[4307]={35,60,77,95}, +[4308]={60,85,102,120}, +[4309]={70,95,112,130}, +[4310]={85,110,127,145}, +[4311]={100,125,142,160}, +[4312]={80,105,122,140}, +[4313]={95,120,137,155}, +[4314]={110,135,152,170}, +[4315]={120,145,162,180}, +[4316]={110,135,152,170}, +[4317]={125,150,167,185}, +[4318]={130,150,165,180}, +[4319]={145,165,180,195}, +[4320]={125,150,167,185}, +[4321]={140,160,175,190}, +[4322]={165,185,200,215}, +[4323]={170,190,205,220}, +[4324]={150,170,185,200}, +[4325]={175,195,210,225}, +[4326]={185,205,220,235}, +[4327]={200,220,235,250}, +[4328]={180,200,215,230}, +[4329]={200,220,235,250}, +[4330]={110,135,152,170}, +[4331]={125,150,167,185}, +[4332]={135,145,150,155}, +[4333]={155,165,170,175}, +[4334]={170,180,185,190}, +[4335]={185,195,200,205}, +[4336]={200,210,215,220}, +[4339]={175,180,182,185}, +[4343]={30,55,72,90}, +[4344]={1,35,47,60}, +[4357]={1,20,30,40}, +[4358]={1,30,45,60}, +[4359]={30,45,52,60}, +[4360]={30,60,75,90}, +[4361]={50,80,95,110}, +[4362]={50,80,95,110}, +[4363]={65,95,110,125}, +[4364]={75,85,90,95}, +[4365]={75,90,97,105}, +[4366]={85,115,130,145}, +[4367]={100,130,145,160}, +[4368]={100,130,145,160}, +[4369]={105,130,142,155}, +[4370]={105,105,130,155}, +[4371]={105,105,130,155}, +[4372]={120,145,157,170}, +[4373]={120,145,157,170}, +[4374]={120,120,145,170}, +[4375]={125,125,150,175}, +[4376]={125,125,150,175}, +[4377]={125,125,135,145}, +[4378]={125,125,135,145}, +[4379]={130,155,167,180}, +[4380]={140,140,165,190}, +[4381]={140,165,177,190}, +[4382]={145,145,170,195}, +[4383]={145,170,182,195}, +[4384]={150,175,187,200}, +[4385]={150,175,187,200}, +[4386]={155,175,185,195}, +[4387]={160,160,170,180}, +[4388]={160,180,190,200}, +[4389]={170,170,190,210}, +[4390]={175,175,195,215}, +[4391]={175,175,195,215}, +[4392]={185,185,205,225}, +[4393]={185,205,215,225}, +[4394]={190,190,210,230}, +[4395]={195,215,225,235}, +[4396]={200,220,230,240}, +[4397]={200,220,230,240}, +[4398]={200,200,220,240}, +[4401]={75,105,120,135}, +[4403]={165,185,195,205}, +[4404]={90,110,125,140}, +[4405]={60,90,105,120}, +[4406]={110,135,147,160}, +[4407]={180,200,210,220}, +[4455]={165,185,195,205}, +[4456]={165,185,195,205}, +[4457]={175,215,235,255}, +[4592]={50,90,110,130}, +[4593]={100,140,160,180}, +[4594]={175,190,210,230}, +[4596]={50,80,100,120}, +[4623]={215,230,250,270}, +[4852]={185,185,205,225}, +[5081]={40,70,85,100}, +[5095]={50,90,110,130}, +[5237]={1,150,175,200}, +[5472]={10,50,70,90}, +[5473]={20,60,80,100}, +[5474]={35,75,95,115}, +[5476]={50,90,110,130}, +[5477]={50,90,110,130}, +[5478]={90,130,150,170}, +[5479]={100,140,160,180}, +[5480]={110,150,170,190}, +[5507]={135,160,172,185}, +[5525]={50,90,110,130}, +[5526]={90,130,150,170}, +[5527]={125,165,185,205}, +[5530]={1,170,195,220}, +[5540]={110,140,155,170}, +[5541]={140,170,185,200}, +[5542]={90,115,132,150}, +[5631]={60,90,110,130}, +[5633]={175,195,215,235}, +[5634]={150,175,195,215}, +[5739]={190,210,220,230}, +[5762]={70,95,112,130}, +[5763]={115,140,157,175}, +[5764]={175,195,210,225}, +[5765]={185,205,220,235}, +[5766]={135,155,170,185}, +[5770]={150,170,185,200}, +[5780]={90,120,135,150}, +[5781]={95,125,140,155}, +[5782]={170,190,200,210}, +[5783]={190,210,220,230}, +[5957]={1,40,55,70}, +[5958]={105,130,142,155}, +[5961]={115,140,152,165}, +[5962]={160,180,190,200}, +[5963]={170,190,200,210}, +[5964]={175,195,205,215}, +[5965]={185,205,215,225}, +[5966]={190,210,220,230}, +[5996]={90,120,140,160}, +[5997]={1,55,75,95}, +[6037]={225,240,260,280}, +[6038]={175,215,235,255}, +[6040]={185,210,222,235}, +[6041]={190,215,227,240}, +[6042]={150,180,195,210}, +[6043]={165,190,202,215}, +[6048]={135,160,180,200}, +[6049]={165,210,230,250}, +[6050]={190,205,225,245}, +[6051]={100,130,150,170}, +[6052]={190,210,230,250}, +[6149]={205,220,240,260}, +[6214]={65,105,125,145}, +[6218]={1,5,7,10}, +[6219]={50,70,80,90}, +[6238]={30,55,72,90}, +[6239]={55,80,97,115}, +[6240]={55,80,97,115}, +[6241]={30,55,72,90}, +[6242]={70,95,112,130}, +[6243]={90,0,0,0}, +[6263]={100,125,142,160}, +[6264]={115,140,157,175}, +[6290]={1,45,65,85}, +[6316]={50,90,110,130}, +[6338]={100,105,107,110}, +[6339]={100,130,150,170}, +[6350]={95,125,140,155}, +[6370]={80,80,90,100}, +[6371]={130,150,160,170}, +[6372]={100,130,150,170}, +[6373]={140,165,185,205}, +[6384]={120,145,162,180}, +[6385]={120,145,162,180}, +[6450]={150,150,180,210}, +[6451]={180,180,210,240}, +[6452]={80,80,115,150}, +[6453]={130,130,165,200}, +[6466]={90,120,135,150}, +[6467]={105,130,142,155}, +[6468]={115,140,152,165}, +[6533]={150,150,160,170}, +[6657]={85,125,145,165}, +[6662]={90,120,140,160}, +[6709]={90,115,130,145}, +[6712]={100,115,122,130}, +[6714]={100,115,122,130}, +[6730]={70,110,130,150}, +[6731]={100,140,160,180}, +[6733]={140,0,0,0}, +[6786]={40,65,82,100}, +[6787]={110,135,152,170}, +[6795]={160,170,175,180}, +[6796]={175,185,190,195}, +[6887]={225,265,285,305}, +[6888]={1,45,65,85}, +[6890]={40,80,100,120}, +[6947]={1,125,150,175}, +[6949]={120,165,190,215}, +[6950]={160,205,230,255}, +[6951]={1,215,240,265}, +[7026]={15,50,67,85}, +[7027]={140,160,175,190}, +[7046]={140,160,175,190}, +[7047]={145,165,180,195}, +[7048]={145,155,160,165}, +[7049]={150,170,185,200}, +[7050]={160,170,175,180}, +[7051]={170,190,205,220}, +[7052]={175,195,210,225}, +[7053]={175,195,210,225}, +[7054]={190,210,225,240}, +[7055]={175,195,210,225}, +[7056]={180,200,215,230}, +[7057]={180,200,215,230}, +[7058]={185,205,215,225}, +[7059]={190,210,225,240}, +[7060]={190,210,225,240}, +[7061]={195,215,230,245}, +[7062]={195,215,225,235}, +[7063]={205,220,235,250}, +[7064]={210,225,240,255}, +[7065]={165,185,200,215}, +[7067]={300,315,322,330}, +[7068]={300,301,305,310}, +[7070]={300,315,322,330}, +[7071]={150,150,152,155}, +[7076]={275,275,282,290}, +[7078]={275,275,282,290}, +[7080]={275,275,282,290}, +[7082]={275,275,282,290}, +[7148]={165,165,180,200}, +[7166]={30,70,90,110}, +[7189]={225,245,255,265}, +[7276]={1,40,55,70}, +[7277]={1,40,55,70}, +[7278]={30,60,75,90}, +[7279]={30,60,75,90}, +[7280]={35,65,80,95}, +[7281]={70,100,115,130}, +[7282]={95,125,140,155}, +[7283]={100,125,137,150}, +[7284]={120,145,157,170}, +[7285]={120,145,157,170}, +[7348]={125,150,162,175}, +[7349]={135,160,172,185}, +[7352]={135,160,172,185}, +[7358]={140,165,177,190}, +[7359]={145,170,182,195}, +[7371]={150,170,180,190}, +[7372]={150,170,180,190}, +[7373]={165,185,195,205}, +[7374]={175,195,205,215}, +[7375]={175,195,205,215}, +[7377]={180,200,210,220}, +[7378]={185,205,215,225}, +[7386]={190,210,220,230}, +[7387]={195,215,225,235}, +[7390]={200,220,230,240}, +[7391]={200,220,230,240}, +[7506]={125,150,162,175}, +[7676]={60,100,120,140}, +[7913]={160,185,197,210}, +[7914]={160,185,197,210}, +[7915]={175,200,212,225}, +[7916]={180,205,217,230}, +[7917]={185,210,222,235}, +[7918]={205,225,235,245}, +[7919]={205,225,235,245}, +[7920]={210,230,240,250}, +[7921]={210,230,240,250}, +[7922]={215,235,245,255}, +[7924]={215,235,245,255}, +[7925]={220,240,250,260}, +[7926]={220,240,250,260}, +[7927]={220,240,250,260}, +[7928]={225,245,255,265}, +[7929]={210,250,260,270}, +[7930]={230,250,260,270}, +[7931]={230,250,260,270}, +[7932]={235,255,265,275}, +[7933]={235,255,265,275}, +[7934]={245,255,265,275}, +[7935]={210,260,270,280}, +[7936]={210,265,275,285}, +[7937]={210,265,275,285}, +[7938]={225,245,255,265}, +[7939]={245,265,275,285}, +[7941]={210,235,247,260}, +[7942]={220,245,257,270}, +[7943]={225,250,262,275}, +[7944]={240,265,277,290}, +[7945]={230,255,267,280}, +[7946]={245,270,282,295}, +[7947]={255,280,292,305}, +[7954]={235,260,272,285}, +[7955]={30,70,90,110}, +[7956]={125,155,170,185}, +[7957]={130,160,175,190}, +[7958]={135,165,180,195}, +[7959]={250,275,287,300}, +[7960]={260,285,297,310}, +[7961]={245,270,282,295}, +[7963]={200,225,237,250}, +[7964]={200,200,205,210}, +[7965]={200,200,205,210}, +[7966]={200,200,205,210}, +[7967]={215,235,245,255}, +[7969]={235,255,265,275}, +[8067]={1,30,45,60}, +[8068]={75,85,90,95}, +[8069]={125,125,135,145}, +[8170]={250,250,250,250}, +[8172]={200,200,200,200}, +[8173]={200,220,230,240}, +[8174]={200,220,230,240}, +[8175]={205,225,235,245}, +[8176]={205,225,235,245}, +[8185]={235,255,265,275}, +[8187]={205,225,235,245}, +[8189]={210,230,240,250}, +[8191]={230,250,260,270}, +[8192]={210,230,240,250}, +[8193]={230,250,260,270}, +[8195]={230,250,260,270}, +[8197]={235,255,265,275}, +[8198]={210,230,240,250}, +[8200]={215,235,245,255}, +[8201]={220,240,250,260}, +[8202]={240,260,270,280}, +[8203]={220,240,250,260}, +[8204]={225,245,255,265}, +[8205]={220,240,250,260}, +[8206]={245,265,275,285}, +[8207]={240,260,270,280}, +[8208]={250,270,280,290}, +[8209]={235,255,265,275}, +[8210]={220,240,250,260}, +[8211]={225,245,255,265}, +[8212]={250,270,280,290}, +[8213]={245,265,275,285}, +[8214]={225,245,255,265}, +[8215]={250,270,280,290}, +[8216]={240,260,270,280}, +[8217]={225,245,255,265}, +[8218]={225,245,255,265}, +[8345]={225,245,255,265}, +[8346]={230,250,260,270}, +[8347]={225,245,255,265}, +[8348]={250,270,280,290}, +[8349]={250,270,280,290}, +[8364]={175,215,235,255}, +[8367]={255,275,285,295}, +[8544]={210,210,240,270}, +[8545]={240,240,270,300}, +[8546]={300,300,330,360}, +[8926]={200,245,270,295}, +[8927]={240,285,340,335}, +[8928]={280,325,350,375}, +[8949]={185,205,225,245}, +[8951]={195,215,235,255}, +[8956]={205,220,240,260}, +[8984]={210,255,280,305}, +[8985]={250,295,320,345}, +[9030]={210,225,245,265}, +[9036]={210,225,245,265}, +[9060]={200,225,237,250}, +[9061]={210,225,245,265}, +[9088]={240,255,275,295}, +[9144]={225,240,260,280}, +[9149]={200,240,260,280}, +[9154]={230,245,265,285}, +[9155]={235,250,270,290}, +[9172]={235,250,270,290}, +[9179]={235,250,270,290}, +[9186]={1,285,310,335}, +[9187]={240,255,275,295}, +[9197]={240,255,275,295}, +[9206]={245,260,280,300}, +[9210]={245,260,280,300}, +[9224]={250,265,285,305}, +[9233]={250,265,285,305}, +[9264]={250,265,285,305}, +[9312]={150,150,162,175}, +[9313]={150,150,162,175}, +[9318]={150,150,162,175}, +[9366]={205,225,235,245}, +[9998]={205,220,235,250}, +[9999]={205,220,235,250}, +[10001]={210,225,240,255}, +[10002]={210,225,240,255}, +[10003]={215,230,245,260}, +[10004]={215,230,245,260}, +[10007]={215,230,245,260}, +[10008]={215,220,225,230}, +[10009]={215,230,245,260}, +[10010]={220,235,250,265}, +[10011]={220,235,250,265}, +[10018]={225,240,255,270}, +[10019]={225,240,255,270}, +[10020]={225,240,255,270}, +[10021]={225,240,255,270}, +[10023]={225,240,255,270}, +[10024]={230,245,260,275}, +[10025]={245,260,275,290}, +[10026]={230,245,260,275}, +[10027]={230,245,260,275}, +[10028]={235,250,265,280}, +[10029]={235,250,265,280}, +[10030]={240,255,270,285}, +[10031]={240,255,270,285}, +[10032]={240,255,270,285}, +[10033]={240,255,270,285}, +[10034]={240,245,250,255}, +[10035]={245,250,255,260}, +[10036]={250,265,280,295}, +[10038]={245,260,275,290}, +[10039]={250,265,280,295}, +[10040]={250,255,260,265}, +[10041]={250,265,280,295}, +[10042]={225,240,255,270}, +[10044]={245,260,275,290}, +[10045]={1,35,47,60}, +[10046]={20,50,67,85}, +[10047]={75,100,117,135}, +[10048]={120,145,162,180}, +[10050]={225,240,255,270}, +[10051]={235,250,265,280}, +[10052]={220,225,230,235}, +[10053]={235,240,245,250}, +[10054]={230,235,240,245}, +[10055]={235,240,245,250}, +[10056]={215,220,225,230}, +[10421]={1,15,35,55}, +[10423]={155,180,192,205}, +[10498]={175,175,195,215}, +[10499]={175,195,205,215}, +[10500]={205,225,235,245}, +[10501]={220,240,250,260}, +[10502]={225,245,255,265}, +[10503]={230,250,260,270}, +[10504]={245,265,275,285}, +[10505]={175,175,185,195}, +[10506]={230,250,260,270}, +[10507]={175,175,185,195}, +[10508]={205,225,235,245}, +[10510]={220,240,250,260}, +[10512]={210,210,230,250}, +[10513]={245,245,265,285}, +[10514]={215,215,235,255}, +[10518]={225,245,255,265}, +[10542]={205,225,235,245}, +[10543]={205,225,235,245}, +[10545]={210,230,240,250}, +[10546]={210,230,240,250}, +[10548]={240,260,270,280}, +[10558]={150,150,170,190}, +[10559]={195,195,215,235}, +[10560]={200,200,220,240}, +[10561]={215,215,235,255}, +[10562]={235,235,255,275}, +[10576]={250,270,280,290}, +[10577]={205,205,205,205}, +[10585]={225,240,250,260}, +[10586]={235,235,255,275}, +[10587]={230,230,250,270}, +[10588]={245,265,275,285}, +[10592]={200,220,240,260}, +[10644]={205,205,205,205}, +[10645]={240,260,270,280}, +[10646]={205,205,225,245}, +[10713]={205,205,205,205}, +[10716]={205,225,235,245}, +[10720]={210,230,240,250}, +[10721]={215,235,245,255}, +[10724]={225,245,255,265}, +[10725]={230,250,260,270}, +[10726]={235,255,265,275}, +[10727]={240,260,270,280}, +[10841]={175,175,190,205}, +[10918]={1,185,210,235}, +[10920]={180,0,0,0}, +[10921]={220,0,0,0}, +[10922]={260,0,0,0}, +[11128]={150,155,157,160}, +[11130]={150,175,195,215}, +[11144]={200,205,207,210}, +[11145]={200,220,240,260}, +[11287]={10,75,95,115}, +[11288]={70,110,130,150}, +[11289]={155,175,195,215}, +[11290]={175,195,215,235}, +[11371]={230,230,230,230}, +[11590]={200,200,220,240}, +[11604]={285,305,315,325}, +[11605]={280,300,310,320}, +[11606]={270,290,300,310}, +[11607]={275,295,305,315}, +[11608]={265,285,295,305}, +[11811]={265,285,305,325}, +[11825]={205,205,205,205}, +[11826]={205,205,205,205}, +[12190]={230,245,265,285}, +[12209]={125,165,185,205}, +[12210]={175,215,235,255}, +[12212]={175,215,235,255}, +[12213]={175,215,235,255}, +[12214]={175,215,235,255}, +[12215]={200,240,260,280}, +[12216]={225,265,285,305}, +[12217]={200,240,260,280}, +[12218]={225,265,285,305}, +[12224]={1,45,65,85}, +[12259]={180,205,217,230}, +[12260]={190,215,227,240}, +[12359]={250,250,250,250}, +[12360]={275,275,282,290}, +[12404]={250,255,257,260}, +[12405]={250,270,280,290}, +[12406]={250,270,280,290}, +[12408]={255,275,285,295}, +[12409]={280,300,310,320}, +[12410]={280,300,310,320}, +[12414]={300,320,330,340}, +[12415]={270,290,300,310}, +[12416]={260,280,290,300}, +[12417]={295,315,325,335}, +[12418]={285,305,315,325}, +[12419]={290,310,320,330}, +[12420]={300,320,330,340}, +[12422]={300,320,330,340}, +[12424]={265,285,295,305}, +[12425]={270,290,300,310}, +[12426]={295,315,325,335}, +[12427]={295,315,325,335}, +[12428]={265,285,295,305}, +[12429]={300,320,330,340}, +[12610]={300,320,330,340}, +[12611]={300,320,330,340}, +[12612]={300,320,330,340}, +[12613]={300,320,330,340}, +[12614]={300,320,330,340}, +[12618]={300,320,330,340}, +[12619]={300,320,330,340}, +[12620]={300,320,330,340}, +[12624]={270,290,300,310}, +[12625]={290,310,320,330}, +[12628]={285,305,315,325}, +[12631]={290,310,320,330}, +[12632]={295,315,325,335}, +[12633]={300,320,330,340}, +[12636]={300,320,330,340}, +[12639]={300,320,330,340}, +[12640]={300,320,330,340}, +[12641]={300,320,330,340}, +[12643]={250,255,257,260}, +[12644]={250,255,257,260}, +[12645]={275,295,305,315}, +[12655]={250,250,255,260}, +[12764]={260,285,297,310}, +[12769]={270,290,300,310}, +[12772]={270,295,307,320}, +[12773]={275,300,312,325}, +[12774]={275,300,312,325}, +[12775]={280,305,317,330}, +[12776]={280,305,317,330}, +[12777]={280,305,317,330}, +[12779]={285,310,322,335}, +[12781]={285,310,322,335}, +[12782]={290,315,327,340}, +[12783]={300,320,330,340}, +[12784]={300,320,330,340}, +[12790]={300,320,330,340}, +[12792]={290,315,327,340}, +[12794]={300,320,330,340}, +[12795]={300,320,330,340}, +[12796]={300,320,330,340}, +[12797]={300,320,330,340}, +[12798]={300,320,330,340}, +[12802]={300,320,330,340}, +[12803]={275,275,282,290}, +[12808]={275,275,282,290}, +[12810]={250,250,255,260}, +[13423]={250,250,255,260}, +[13442]={255,270,290,310}, +[13443]={260,275,295,315}, +[13444]={295,310,330,350}, +[13445]={265,280,300,320}, +[13446]={275,290,310,330}, +[13447]={265,280,300,320}, +[13452]={280,295,315,335}, +[13453]={275,290,310,330}, +[13454]={285,300,320,340}, +[13455]={280,295,315,335}, +[13456]={290,305,325,345}, +[13457]={290,305,325,345}, +[13458]={290,305,325,345}, +[13459]={290,305,325,345}, +[13460]={290,305,325,345}, +[13461]={290,305,325,345}, +[13462]={285,300,320,340}, +[13503]={300,315,322,330}, +[13506]={300,315,322,330}, +[13510]={300,315,322,330}, +[13511]={300,315,322,330}, +[13512]={300,315,322,330}, +[13513]={300,315,322,330}, +[13851]={175,215,235,255}, +[13856]={255,270,285,300}, +[13857]={260,275,290,305}, +[13858]={260,275,290,305}, +[13860]={265,280,295,310}, +[13863]={275,290,305,320}, +[13864]={280,295,310,325}, +[13865]={285,300,315,330}, +[13866]={295,310,325,340}, +[13867]={300,315,330,345}, +[13868]={255,270,285,300}, +[13869]={255,270,285,300}, +[13870]={265,280,295,310}, +[13871]={280,295,310,325}, +[13927]={225,265,285,305}, +[13928]={240,280,300,320}, +[13929]={240,280,300,320}, +[13930]={225,265,285,305}, +[13931]={250,290,310,330}, +[13932]={250,290,310,330}, +[13933]={275,315,335,355}, +[13934]={275,315,335,355}, +[13935]={275,315,335,355}, +[14042]={260,275,290,305}, +[14043]={270,285,300,315}, +[14044]={275,290,305,320}, +[14045]={280,295,310,325}, +[14046]={260,275,290,305}, +[14048]={250,255,257,260}, +[14100]={270,285,300,315}, +[14101]={270,285,300,315}, +[14103]={275,290,305,320}, +[14104]={290,305,320,335}, +[14106]={300,315,330,345}, +[14107]={275,290,305,320}, +[14108]={285,300,315,330}, +[14111]={290,305,320,335}, +[14112]={300,315,330,345}, +[14128]={300,315,330,345}, +[14130]={300,315,330,345}, +[14132]={275,290,305,320}, +[14134]={275,290,305,320}, +[14136]={285,300,315,330}, +[14137]={290,305,320,335}, +[14138]={300,315,330,345}, +[14139]={300,315,330,345}, +[14140]={300,315,330,345}, +[14141]={275,290,305,320}, +[14142]={270,285,300,315}, +[14143]={265,280,295,310}, +[14144]={290,305,320,335}, +[14146]={300,315,330,345}, +[14152]={300,315,330,345}, +[14153]={300,315,330,345}, +[14154]={300,315,330,345}, +[14155]={300,315,330,345}, +[14156]={300,315,330,345}, +[14342]={250,290,305,320}, +[14529]={260,260,290,320}, +[14530]={290,290,320,350}, +[15045]={260,280,290,300}, +[15046]={270,290,300,310}, +[15047]={300,320,330,340}, +[15048]={285,305,315,325}, +[15049]={295,315,325,335}, +[15050]={290,310,320,330}, +[15051]={300,320,330,340}, +[15052]={300,320,330,340}, +[15053]={285,305,315,325}, +[15054]={270,290,300,310}, +[15055]={300,320,330,340}, +[15056]={285,305,315,325}, +[15057]={275,295,305,315}, +[15058]={295,315,325,335}, +[15059]={300,320,330,340}, +[15060]={285,305,315,325}, +[15061]={270,290,300,310}, +[15062]={300,320,330,340}, +[15063]={290,310,320,330}, +[15064]={275,295,305,315}, +[15065]={285,305,315,325}, +[15066]={290,310,320,330}, +[15067]={270,290,300,310}, +[15068]={300,320,330,340}, +[15069]={285,305,315,325}, +[15070]={295,315,325,335}, +[15071]={275,295,305,315}, +[15072]={280,300,310,320}, +[15073]={275,295,305,315}, +[15074]={265,270,280,290}, +[15075]={290,310,320,330}, +[15076]={265,285,295,305}, +[15077]={255,275,285,295}, +[15078]={275,295,305,315}, +[15079]={285,305,315,325}, +[15080]={295,315,325,335}, +[15081]={300,320,330,340}, +[15082]={280,300,310,320}, +[15083]={260,280,290,300}, +[15084]={265,285,295,305}, +[15085]={300,320,330,340}, +[15086]={280,300,310,320}, +[15087]={290,310,320,330}, +[15088]={300,320,330,340}, +[15090]={300,320,330,340}, +[15091]={270,290,300,310}, +[15092]={275,295,305,315}, +[15093]={280,300,310,320}, +[15094]={290,310,320,330}, +[15095]={300,320,330,340}, +[15096]={300,320,330,340}, +[15138]={300,320,330,340}, +[15141]={300,0,0,0}, +[15407]={250,250,255,260}, +[15564]={250,255,265,275}, +[15802]={290,295,310,325}, +[15846]={250,270,280,290}, +[15869]={100,100,110,120}, +[15870]={150,150,160,170}, +[15871]={200,200,210,220}, +[15872]={275,275,280,285}, +[15992]={250,250,255,260}, +[15993]={260,280,290,300}, +[15994]={260,280,290,300}, +[15995]={260,280,290,300}, +[15996]={265,285,295,305}, +[15997]={285,305,315,325}, +[15999]={270,290,300,310}, +[16000]={275,295,305,315}, +[16004]={275,295,305,315}, +[16005]={285,305,315,325}, +[16006]={285,305,315,325}, +[16007]={300,320,330,340}, +[16008]={290,310,320,330}, +[16009]={290,310,320,330}, +[16022]={300,320,330,340}, +[16023]={275,295,305,315}, +[16040]={300,320,330,340}, +[16206]={275,275,280,285}, +[16207]={290,310,330,350}, +[16766]={225,265,285,305}, +[16979]={300,315,330,345}, +[16980]={300,315,330,345}, +[16982]={295,315,325,335}, +[16983]={300,320,330,340}, +[16984]={300,320,330,340}, +[16988]={300,320,330,340}, +[16989]={295,315,325,335}, +[17013]={300,320,330,340}, +[17014]={295,315,325,335}, +[17015]={300,320,330,340}, +[17016]={300,320,330,340}, +[17193]={300,325,337,350}, +[17197]={1,45,65,85}, +[17198]={35,75,95,115}, +[17222]={200,240,260,280}, +[17704]={190,215,227,240}, +[17708]={190,210,230,250}, +[17716]={190,190,210,230}, +[17721]={190,210,220,230}, +[17723]={190,200,205,210}, +[17771]={300,350,362,375}, +[17967]={300,0,0,0}, +[17968]={300,0,0,0}, +[18045]={225,265,285,305}, +[18168]={300,320,330,340}, +[18232]={300,320,330,340}, +[18238]={200,210,220,230}, +[18251]={300,320,330,340}, +[18253]={300,310,320,330}, +[18254]={275,315,335,355}, +[18258]={275,285,290,295}, +[18262]={300,300,310,320}, +[18263]={300,315,330,345}, +[18282]={300,320,330,340}, +[18283]={300,320,330,340}, +[18294]={215,230,250,270}, +[18405]={300,315,330,345}, +[18407]={300,315,330,345}, +[18408]={300,315,330,345}, +[18409]={300,315,330,345}, +[18413]={300,315,330,345}, +[18486]={300,315,330,345}, +[18504]={300,320,330,340}, +[18506]={300,320,330,340}, +[18508]={300,320,330,340}, +[18509]={300,320,330,340}, +[18510]={300,320,330,340}, +[18511]={300,320,330,340}, +[18587]={265,285,295,305}, +[18588]={200,200,210,220}, +[18594]={275,275,285,295}, +[18631]={260,270,275,280}, +[18634]={260,280,290,300}, +[18637]={275,285,290,295}, +[18638]={290,310,320,330}, +[18639]={300,320,330,340}, +[18641]={250,250,260,270}, +[18645]={265,275,280,285}, +[18660]={260,260,265,270}, +[18662]={150,150,155,160}, +[18948]={155,175,185,195}, +[18984]={260,285,295,305}, +[18986]={260,285,295,305}, +[19026]={250,250,260,270}, +[19043]={290,310,320,330}, +[19044]={290,310,320,330}, +[19047]={290,305,320,335}, +[19048]={300,320,330,340}, +[19049]={300,320,330,340}, +[19050]={300,315,330,345}, +[19051]={290,310,320,330}, +[19052]={290,310,320,330}, +[19056]={290,305,320,335}, +[19057]={300,320,330,340}, +[19058]={300,320,330,340}, +[19059]={300,315,330,345}, +[19148]={300,320,330,340}, +[19149]={300,320,330,340}, +[19156]={300,315,330,345}, +[19157]={300,320,330,340}, +[19162]={300,320,330,340}, +[19163]={300,320,330,340}, +[19164]={300,320,330,340}, +[19165]={300,315,330,345}, +[19166]={300,320,330,340}, +[19167]={300,320,330,340}, +[19168]={300,320,330,340}, +[19169]={300,320,330,340}, +[19170]={300,320,330,340}, +[19440]={300,300,330,360}, +[19682]={300,315,330,345}, +[19683]={300,315,330,345}, +[19684]={300,315,330,345}, +[19685]={300,320,330,340}, +[19686]={300,320,330,340}, +[19687]={300,320,330,340}, +[19688]={300,320,330,340}, +[19689]={300,320,330,340}, +[19690]={300,320,330,340}, +[19691]={300,320,330,340}, +[19692]={300,320,330,340}, +[19693]={300,320,330,340}, +[19694]={300,320,330,340}, +[19695]={300,320,330,340}, +[19931]={300,315,322,330}, +[19998]={300,320,330,340}, +[19999]={300,320,330,340}, +[20002]={275,290,310,330}, +[20004]={290,305,325,345}, +[20007]={275,290,310,330}, +[20008]={285,300,320,340}, +[20039]={300,320,330,340}, +[20074]={150,160,180,200}, +[20295]={300,320,330,340}, +[20296]={280,300,310,320}, +[20380]={300,320,330,340}, +[20452]={285,325,345,365}, +[20476]={300,320,330,340}, +[20477]={300,320,330,340}, +[20478]={300,320,330,340}, +[20479]={300,320,330,340}, +[20480]={300,320,330,340}, +[20481]={300,320,330,340}, +[20537]={300,315,330,345}, +[20538]={300,315,330,345}, +[20539]={300,315,330,345}, +[20549]={300,320,330,340}, +[20550]={300,320,330,340}, +[20551]={300,320,330,340}, +[20575]={100,125,137,150}, +[20744]={45,55,65,75}, +[20745]={150,160,170,180}, +[20746]={200,210,220,230}, +[20747]={250,260,270,280}, +[20748]={300,310,320,330}, +[20749]={300,310,320,330}, +[20750]={275,285,295,305}, +[20844]={1,300,325,350}, +[21023]={300,325,345,365}, +[21072]={80,120,140,160}, +[21154]={250,265,280,295}, +[21217]={175,215,235,255}, +[21277]={250,320,330,340}, +[21278]={300,320,330,340}, +[21340]={260,275,290,305}, +[21341]={280,300,315,330}, +[21342]={300,315,330,345}, +[21542]={250,265,280,295}, +[21546]={250,265,285,305}, +[21557]={125,125,137,150}, +[21558]={125,125,137,150}, +[21559]={125,125,137,150}, +[21569]={225,245,255,265}, +[21570]={275,295,305,315}, +[21571]={225,225,237,250}, +[21574]={225,225,237,250}, +[21576]={225,225,237,250}, +[21589]={175,175,187,200}, +[21590]={175,175,187,200}, +[21592]={175,175,187,200}, +[21714]={275,275,280,285}, +[21716]={275,275,280,285}, +[21718]={275,275,280,285}, +[22191]={300,320,330,340}, +[22194]={300,320,330,340}, +[22195]={300,320,330,340}, +[22196]={300,320,330,340}, +[22197]={300,320,330,340}, +[22198]={300,320,330,340}, +[22246]={225,240,255,270}, +[22248]={275,290,305,320}, +[22249]={300,315,330,345}, +[22251]={275,290,305,320}, +[22252]={300,315,330,345}, +[22383]={300,320,330,340}, +[22384]={300,320,330,340}, +[22385]={300,320,330,340}, +[22652]={300,315,330,345}, +[22654]={300,315,330,345}, +[22655]={300,315,330,345}, +[22658]={300,315,330,345}, +[22660]={300,315,330,345}, +[22661]={300,320,330,340}, +[22662]={300,320,330,340}, +[22663]={300,320,330,340}, +[22664]={300,320,330,340}, +[22665]={300,320,330,340}, +[22666]={300,320,330,340}, +[22669]={300,320,330,340}, +[22670]={300,320,330,340}, +[22671]={300,320,330,340}, +[22756]={300,315,330,345}, +[22757]={300,315,330,345}, +[22758]={300,315,330,345}, +[22759]={300,320,330,340}, +[22760]={300,320,330,340}, +[22761]={300,320,330,340}, +[22762]={300,320,330,340}, +[22763]={300,320,330,340}, +[22764]={300,320,330,340}, +[30818]={35,75,95,115}, +[41308]={90,105,112,120}, +[41309]={95,110,120,130}, +[41310]={105,120,132,145}, +[41311]={105,125,135,145}, +[41312]={120,145,155,165}, +[41313]={110,130,140,150}, +[41314]={125,145,155,165}, +[41315]={125,150,160,170}, +[41316]={125,145,155,165}, +[41318]={125,145,155,165}, +[41319]={125,135,145,155}, +[41320]={125,140,142,145}, +[41321]={235,245,250,255}, +[41322]={175,175,177,180}, +[41323]={225,240,247,255}, +[41324]={245,265,275,285}, +[41325]={135,150,160,170}, +[41326]={125,140,147,155}, +[41327]={225,140,147,155}, +[41328]={175,185,190,195}, +[41329]={135,155,165,175}, +[41330]={280,300,305,310}, +[41331]={150,165,170,175}, +[41332]={150,165,170,175}, +[41340]={190,205,215,225}, +[41341]={200,200,205,210}, +[41342]={190,205,215,225}, +[41343]={200,220,230,240}, +[41344]={150,150,152,155}, +[41345]={215,235,245,255}, +[41346]={210,230,240,250}, +[41347]={220,240,250,260}, +[41349]={220,240,250,260}, +[41673]={175,0,0,0}, +[41674]={175,215,235,255}, +[46600]={100,275,295,310}, +[47408]={1,280,305,330}, +[47409]={1,300,325,350}, +[47410]={300,310,330,350}, +[47412]={300,310,330,350}, +[47414]={300,310,330,350}, +[50237]={300,315,322,330}, +[51256]={75,150,167,185}, +[51262]={75,0,0,0}, +[51264]={75,100,120,140}, +[51268]={75,90,97,105}, +[51284]={75,0,0,0}, +[51312]={120,145,157,170}, +[51313]={120,145,157,170}, +[53015]={300,300,300,300}, +[54009]={1,285,310,335}, +[54010]={1,325,350,375}, +[55043]={300,320,330,340}, +[55046]={300,300,315,330}, +[55048]={300,300,315,330}, +[55050]={300,300,305,310}, +[55052]={300,315,322,330}, +[55054]={300,300,305,310}, +[55056]={300,0,0,0}, +[55058]={300,320,330,340}, +[55060]={300,330,350,370}, +[55141]={185,200,210,220}, +[55142]={155,175,185,195}, +[55143]={170,190,197,205}, +[55144]={155,155,160,165}, +[55145]={175,195,202,210}, +[55146]={175,195,202,210}, +[55147]={175,195,202,210}, +[55148]={165,185,195,205}, +[55150]={1,21,25,30}, +[55151]={70,90,95,100}, +[55152]={150,150,155,160}, +[55153]={200,200,205,210}, +[55154]={250,260,265,270}, +[55156]={1,21,30,40}, +[55157]={1,21,33,45}, +[55158]={15,35,45,55}, +[55159]={25,45,52,60}, +[55160]={35,55,62,70}, +[55161]={50,70,75,80}, +[55162]={50,70,77,85}, +[55163]={50,70,77,85}, +[55164]={50,70,80,90}, +[55165]={55,75,82,90}, +[55166]={60,80,87,95}, +[55167]={60,80,87,95}, +[55168]={65,85,92,100}, +[55169]={65,85,92,100}, +[55170]={70,90,95,100}, +[55171]={80,100,110,120}, +[55172]={80,105,115,125}, +[55173]={85,105,115,125}, +[55174]={90,100,107,115}, +[55175]={100,120,130,140}, +[55176]={100,120,130,140}, +[55178]={270,0,0,0}, +[55180]={255,275,285,295}, +[55195]={175,0,0,0}, +[55196]={215,215,225,235}, +[55197]={220,220,240,260}, +[55198]={275,0,0,0}, +[55199]={265,265,285,305}, +[55200]={280,280,300,320}, +[55202]={160,160,180,200}, +[55204]={230,230,252,275}, +[55210]={185,200,207,215}, +[55211]={175,190,197,205}, +[55212]={200,220,230,240}, +[55213]={205,220,227,235}, +[55228]={260,280,290,300}, +[55241]={290,0,0,0}, +[55242]={210,235,245,255}, +[55243]={235,0,0,0}, +[55244]={275,275,297,320}, +[55248]={275,275,280,300}, +[55255]={210,280,290,300}, +[55256]={255,270,277,285}, +[55258]={265,265,285,305}, +[55259]={300,320,330,340}, +[55260]={260,260,275,290}, +[55261]={300,0,0,0}, +[55263]={300,0,0,0}, +[55264]={300,0,0,0}, +[55265]={300,320,330,340}, +[55266]={250,250,270,290}, +[55267]={280,285,297,310}, +[55268]={265,285,292,300}, +[55269]={260,280,287,295}, +[55271]={265,285,292,300}, +[55272]={300,320,330,340}, +[55273]={280,285,297,310}, +[55316]={75,95,105,115}, +[55317]={85,105,115,125}, +[55318]={100,120,130,140}, +[55319]={115,120,130,140}, +[55320]={130,150,160,170}, +[55321]={145,165,175,185}, +[55322]={160,180,190,200}, +[55323]={170,200,210,220}, +[55324]={180,200,210,220}, +[55325]={190,210,220,230}, +[55326]={100,120,130,140}, +[55327]={140,160,170,180}, +[55328]={170,190,200,210}, +[55329]={80,160,170,180}, +[55330]={105,125,135,145}, +[55331]={140,160,170,180}, +[55332]={170,185,195,205}, +[55333]={85,105,115,125}, +[55334]={120,140,150,160}, +[55335]={160,180,190,200}, +[55336]={200,215,225,235}, +[55337]={105,135,145,155}, +[55338]={145,165,175,185}, +[55339]={200,220,230,240}, +[55340]={85,105,115,125}, +[55341]={135,155,165,175}, +[55359]={300,320,330,340}, +[55360]={290,320,330,340}, +[55361]={300,330,340,350}, +[55362]={285,320,330,340}, +[55363]={300,330,340,350}, +[55364]={300,320,325,330}, +[55365]={300,330,340,350}, +[55366]={300,325,335,345}, +[55367]={300,320,330,340}, +[55368]={300,320,330,340}, +[55518]={300,300,300,300}, +[55519]={300,300,300,300}, +[55520]={300,300,300,300}, +[55521]={300,300,300,300}, +[55522]={300,300,300,300}, +[55523]={300,300,300,300}, +[55524]={300,300,300,300}, +[55525]={300,300,300,300}, +[55526]={300,320,330,340}, +[55527]={300,320,330,340}, +[55528]={300,320,330,340}, +[55529]={300,320,330,340}, +[55530]={300,320,330,340}, +[55531]={300,320,330,340}, +[55532]={300,320,330,340}, +[55533]={300,320,330,340}, +[55534]={300,300,300,300}, +[56000]={150,155,157,160}, +[56001]={175,180,182,185}, +[56002]={200,205,207,210}, +[56003]={150,155,157,160}, +[56004]={200,205,207,210}, +[56005]={200,205,205,205}, +[56006]={200,205,207,210}, +[56007]={250,0,0,0}, +[56008]={235,235,237,240}, +[56009]={250,0,0,0}, +[56010]={270,275,277,280}, +[56011]={275,0,0,0}, +[56012]={260,265,267,270}, +[56013]={285,290,292,295}, +[56014]={300,310,315,320}, +[56015]={275,280,282,285}, +[56016]={295,300,302,305}, +[56017]={275,280,282,285}, +[56018]={250,255,257,260}, +[56019]={235,240,240,240}, +[56020]={200,200,205,210}, +[56023]={190,190,210,230}, +[56031]={300,330,350,370}, +[56032]={300,330,350,370}, +[56033]={295,0,0,0}, +[56034]={195,195,217,240}, +[56035]={290,310,325,340}, +[56036]={260,0,0,0}, +[56037]={80,100,110,120}, +[56038]={100,125,135,145}, +[56039]={110,130,140,150}, +[56040]={135,155,165,175}, +[56041]={160,185,195,205}, +[56042]={160,180,190,200}, +[56043]={170,180,190,200}, +[56044]={80,100,110,120}, +[56045]={115,135,142,150}, +[56046]={135,155,165,175}, +[56047]={185,205,215,225}, +[56048]={190,210,220,230}, +[56049]={200,220,230,240}, +[56050]={200,220,230,240}, +[56051]={200,220,230,240}, +[56052]={200,225,235,245}, +[56053]={210,235,245,255}, +[56054]={180,200,210,220}, +[56055]={200,225,235,245}, +[56056]={225,225,227,230}, +[56057]={290,0,0,0}, +[56058]={175,180,182,185}, +[56059]={300,320,330,340}, +[56060]={300,320,330,340}, +[56061]={300,320,330,340}, +[56062]={300,320,330,340}, +[56063]={300,320,330,340}, +[56064]={300,320,330,340}, +[56065]={290,320,330,340}, +[56066]={290,320,330,340}, +[56067]={290,320,330,340}, +[56068]={250,280,290,300}, +[56069]={230,260,270,280}, +[56070]={200,225,237,250}, +[56071]={240,260,275,290}, +[56072]={300,300,307,315}, +[56073]={245,245,265,285}, +[56074]={135,135,137,140}, +[56075]={270,270,272,275}, +[56076]={300,320,330,340}, +[56077]={300,320,330,340}, +[56089]={210,230,240,250}, +[56090]={265,275,285,295}, +[56091]={125,145,155,165}, +[56092]={300,0,0,0}, +[56093]={290,310,320,330}, +[56094]={285,310,320,330}, +[56095]={230,260,275,290}, +[56096]={300,325,332,340}, +[56112]={185,185,195,205}, +[56113]={200,200,212,225}, +[58112]={170,170,182,195}, +[58134]={185,0,0,0}, +[58304]={290,310,320,330}, +[58305]={290,310,320,330}, +[60007]={300,325,337,350}, +[60008]={300,325,337,350}, +[60009]={300,325,337,350}, +[60010]={300,325,337,350}, +[60098]={250,250,260,270}, +[60099]={250,270,280,290}, +[60287]={300,320,330,340}, +[60288]={300,320,330,340}, +[60289]={300,320,330,340}, +[60290]={300,320,330,340}, +[60291]={300,320,330,340}, +[60292]={300,320,330,340}, +[60293]={300,320,330,340}, +[60294]={225,260,267,275}, +[60573]={290,300,310,320}, +[60574]={290,300,310,320}, +[60575]={290,300,310,320}, +[60576]={275,300,312,325}, +[60577]={285,300,310,320}, +[60578]={275,300,310,320}, +[60907]={300,315,330,345}, +[60908]={300,320,330,340}, +[60909]={300,315,330,345}, +[60910]={300,320,330,340}, +[60976]={300,300,300,300}, +[60977]={300,300,300,300}, +[60978]={300,300,300,300}, +[61181]={300,315,322,330}, +[61182]={275,300,310,320}, +[61183]={300,320,330,340}, +[61185]={300,325,337,350}, +[61186]={300,300,300,300}, +[61187]={300,320,330,340}, +[61188]={300,320,330,340}, +[61216]={300,350,362,375}, +[61224]={300,315,322,330}, +[61225]={300,315,322,330}, +[61229]={300,320,330,340}, +[61230]={300,300,300,300}, +[61356]={300,320,330,340}, +[61357]={300,320,330,340}, +[61358]={300,320,330,340}, +[61359]={300,320,330,340}, +[61360]={300,300,300,300}, +[61361]={300,300,300,300}, +[61362]={300,300,300,300}, +[61363]={300,300,300,300}, +[61364]={300,0,0,0}, +[61365]={300,325,337,350}, +[61366]={300,325,337,350}, +[61367]={300,325,337,350}, +[61648]={290,310,320,330}, +[61649]={300,325,337,350}, +[61732]={300,300,300,300}, +[61779]={25,65,85,105}, +[61780]={90,115,127,140}, +[61781]={140,170,185,200}, +[61782]={185,210,222,235}, +[61783]={240,265,277,290}, +[61784]={300,325,337,350}, +[61785]={300,325,337,350}, +[61810]={300,325,337,350}, +[61818]={300,330,345,360}, +[65000]={295,300,300,300}, +[65001]={300,300,300,300}, +[65002]={295,300,300,300}, +[65003]={300,300,300,300}, +[65004]={300,320,330,340}, +[65005]={250,0,0,0}, +[65006]={300,300,300,300}, +[65007]={270,280,285,290}, +[65008]={300,320,330,340}, +[65009]={205,225,230,235}, +[65010]={30,60,62,65}, +[65011]={75,90,95,100}, +[65012]={120,140,145,150}, +[65013]={180,190,195,200}, +[65014]={300,315,322,330}, +[65015]={290,310,320,330}, +[65019]={245,245,245,245}, +[65021]={300,300,300,300}, +[65022]={265,0,0,0}, +[65023]={255,255,255,255}, +[65024]={300,300,300,300}, +[65025]={300,300,300,300}, +[65026]={300,300,300,300}, +[65027]={300,300,300,300}, +[65032]={1,290,300,310}, +[65035]={300,300,300,300}, +[65036]={300,300,300,300}, +[65037]={300,300,300,300}, +[65038]={300,300,300,300}, +[65039]={300,325,337,350}, +[81030]={20,40,47,55}, +[81031]={65,85,92,100}, +[81032]={35,45,50,55}, +[81061]={270,285,290,295}, +[81062]={280,285,290,295}, +[81063]={270,290,291,295}, +[81064]={280,290,291,295}, +[81065]={275,290,291,295}, +[81066]={285,290,291,295}, +[81092]={45,60,67,75}, +[81093]={25,25,45,65}, +[83280]={230,230,230,230}, +[83281]={235,235,235,235}, +[83282]={230,230,230,230}, +[83283]={225,225,225,225}, +[83284]={225,225,225,225}, +[83285]={230,230,230,230}, +[83286]={205,205,205,205}, +[83287]={210,210,210,210}, +[83288]={200,200,200,200}, +[83289]={200,200,200,200}, +[83290]={205,205,205,205}, +[83291]={205,205,205,205}, +[83292]={265,265,265,265}, +[83293]={265,265,265,265}, +[83294]={270,270,270,270}, +[83295]={260,260,260,260}, +[83296]={260,260,260,260}, +[83297]={265,265,265,265}, +[83309]={300,325,345,365}, +[83400]={210,225,230,235}, +[83401]={210,235,240,245}, +[83402]={205,225,230,235}, +[83403]={200,215,220,225}, +[83404]={200,215,220,225}, +[83405]={200,215,220,225}, +[83410]={220,220,220,220}, +[83411]={220,220,220,220}, +[83412]={225,225,225,225}, +[83413]={225,225,225,225}, +[83414]={230,230,230,230}, +[83415]={230,230,230,230}, +[84040]={300,300,300,300}, +[84041]={200,240,260,280}, +["Accurate Scope"]={180,200,210,220}, +["Admiral's Hat"]={240,255,270,285}, +["Advanced Target Dummy"]={185,185,205,225}, +["Agatestone Crown"]={125,145,155,165}, +["Agitating Poison"]={300,0,0,0}, +["Alarm-O-Bot"]={265,275,280,285}, +["Alchemist's Stone"]={300,315,322,330}, +["Alluring Citrine Choker"]={200,220,230,240}, +["Amber Orb"]={95,110,120,130}, +["Amber Ring"]={60,80,87,95}, +["Ambersap Glazed Boar Ribs"]={175,215,235,255}, +["Amberstone Pendant"]={80,105,115,125}, +["Ancient Dwarven Gemstone"]={185,185,195,205}, +["Annihilator"]={300,320,330,340}, +["Anti-Venom"]={80,80,115,150}, +["Aquadynamic Fish Attractor"]={150,150,160,170}, +["Aquamarine Pendant"]={215,215,225,235}, +["Arcane Bomb"]={300,320,330,340}, +["Arcane Elixir"]={235,250,270,290}, +["Arcane Emerald Gemstone"]={295,300,302,305}, +["Arcanite Belt Buckle"]={300,325,337,350}, +["Arcanite Champion"]={300,320,330,340}, +["Arcanite Dragonling"]={300,320,330,340}, +["Arcanite Reaper"]={300,320,330,340}, +["Arcanite Rod"]={275,275,280,285}, +["Arcanite Skeleton Key"]={275,275,280,285}, +["Arcanum Baton"]={300,320,330,340}, +["Arclight Spanner"]={50,70,80,90}, +["Argent Boots"]={290,305,320,335}, +["Argent Shoulders"]={300,315,330,345}, +["Astral Amulet"]={175,0,0,0}, +["Astronomer Raiments"]={300,315,322,330}, +["Augerer's Boots"]={200,200,200,200}, +["Augerer's Gloves"]={200,200,200,200}, +["Augerer's Hat"]={205,205,205,205}, +["Augerer's Mantle"]={205,205,205,205}, +["Augerer's Robe"]={210,210,210,210}, +["Augerer's Trousers"]={205,205,205,205}, +["Azerothian Ruby Gemstone"]={275,280,282,285}, +["Azure Ring"]={60,80,87,95}, +["Azure Shoulders"]={190,210,225,240}, +["Azure Silk Belt"]={175,195,210,225}, +["Azure Silk Cloak"]={175,195,210,225}, +["Azure Silk Gloves"]={145,165,180,195}, +["Azure Silk Hood"]={145,155,160,165}, +["Azure Silk Pants"]={140,160,175,190}, +["Azure Silk Vest"]={150,170,185,200}, +["Baked Salmon"]={275,315,335,355}, +["Barbaric Belt"]={200,220,230,240}, +["Barbaric Bracers"]={155,175,185,195}, +["Barbaric Gloves"]={150,170,180,190}, +["Barbaric Harness"]={190,210,220,230}, +["Barbaric Iron Boots"]={180,205,217,230}, +["Barbaric Iron Breastplate"]={160,185,197,210}, +["Barbaric Iron Gloves"]={185,210,222,235}, +["Barbaric Iron Helm"]={175,200,212,225}, +["Barbaric Iron Shoulders"]={160,185,197,210}, +["Barbaric Leggings"]={170,190,200,210}, +["Barbaric Linen Vest"]={70,95,112,130}, +["Barbaric Shoulders"]={175,195,205,215}, +["Barbecued Buzzard Wing"]={175,215,235,255}, +["Battery-Powered Crowd Pummeler"]={250,270,280,290}, +["Beautiful Diamond Gemstone"]={270,275,277,280}, +["Beer Basted Boar Ribs"]={25,60,80,100}, +["Belt of the Archmage"]={300,315,330,345}, +["Big Bag of Enchantment"]={300,315,330,345}, +["Big Bear Steak"]={110,150,170,190}, +["Big Black Mace"]={230,255,267,280}, +["Big Bronze Bomb"]={140,140,165,190}, +["Big Bronze Knife"]={105,135,150,165}, +["Big Iron Bomb"]={190,190,210,230}, +["Big Voodoo Cloak"]={240,260,270,280}, +["Big Voodoo Mask"]={220,240,250,260}, +["Big Voodoo Pants"]={240,260,270,280}, +["Big Voodoo Robe"]={215,235,245,255}, +["Binding Signet"]={125,145,155,165}, +["Bindings of Luminance"]={300,320,330,340}, +["Biznicks 247x128 Accurascope"]={300,320,330,340}, +["Black Amnesty"]={300,320,330,340}, +["Black Dragonscale Boots"]={300,320,330,340}, +["Black Dragonscale Breastplate"]={290,310,320,330}, +["Black Dragonscale Leggings"]={300,320,330,340}, +["Black Dragonscale Shoulders"]={300,320,330,340}, +["Black Grasp of the Destroyer"]={300,320,330,340}, +["Black Mageweave Boots"]={230,245,260,275}, +["Black Mageweave Gloves"]={215,230,245,260}, +["Black Mageweave Headband"]={230,245,260,275}, +["Black Mageweave Leggings"]={205,220,235,250}, +["Black Mageweave Robe"]={210,225,240,255}, +["Black Mageweave Shoulders"]={230,245,260,275}, +["Black Mageweave Vest"]={205,220,235,250}, +["Black Silk Pack"]={185,205,220,235}, +["Black Swashbuckler's Shirt"]={200,210,215,220}, +["Black Whelp Cloak"]={100,125,137,150}, +["Black Whelp Tunic"]={100,125,137,150}, +["Blackfury"]={300,320,330,340}, +["Blackguard"]={300,320,330,340}, +["Blackmouth Oil"]={80,80,90,100}, +["Blackrock Ironclamps"]={140,160,170,180}, +["Blackwing Signet of Command"]={300,320,330,340}, +["Blast Shield"]={75,100,120,140}, +["Blazefury Circlet"]={300,320,330,340}, +["Blazing Rapier"]={280,305,317,330}, +["Bleakwood Hew"]={270,290,300,310}, +["Blight"]={250,275,287,300}, +["Blinding Powder"]={1,170,195,220}, +["Blood Sausage"]={60,100,120,140}, +["Blood Talon"]={300,320,330,340}, +["Blood Tiger Breastplate"]={300,320,330,340}, +["Blood Tiger Shoulders"]={300,320,330,340}, +["Bloodfire Circlet"]={200,220,230,240}, +["Bloodletter Razor"]={250,0,0,0}, +["Bloodsoul Breastplate"]={300,320,330,340}, +["Bloodsoul Gauntlets"]={300,320,330,340}, +["Bloodsoul Shoulders"]={300,320,330,340}, +["Bloodstone Warblade"]={225,260,267,275}, +["Bloodvine Boots"]={300,315,330,345}, +["Bloodvine Goggles"]={300,320,330,340}, +["Bloodvine Leggings"]={300,315,330,345}, +["Bloodvine Lens"]={300,320,330,340}, +["Bloodvine Vest"]={300,315,330,345}, +["Bloody Belt Buckle"]={300,325,337,350}, +["Blue Dragonscale Boots"]={290,310,320,330}, +["Blue Dragonscale Breastplate"]={285,305,315,325}, +["Blue Dragonscale Leggings"]={300,320,330,340}, +["Blue Dragonscale Shoulders"]={295,315,325,335}, +["Blue Firework"]={150,150,162,175}, +["Blue Glittering Axe"]={220,245,257,270}, +["Blue Linen Robe"]={70,95,112,130}, +["Blue Linen Shirt"]={40,65,82,100}, +["Blue Linen Vest"]={55,80,97,115}, +["Blue Overalls"]={100,125,142,160}, +["Blue Rocket Cluster"]={225,225,237,250}, +["Blue Starfire"]={265,265,285,305}, +["Boiled Clams"]={50,90,110,130}, +["Bolt of Linen Cloth"]={1,25,37,50}, +["Bolt of Mageweave"]={175,180,182,185}, +["Bolt of Runecloth"]={250,255,257,260}, +["Bolt of Silk Cloth"]={125,135,140,145}, +["Bolt of Woolen Cloth"]={75,90,97,105}, +["Boots of Darkness"]={140,160,175,190}, +["Boots of the Enchanter"]={175,195,210,225}, +["Boots of the Wind"]={255,255,255,255}, +["Bottomless Bag"]={300,315,330,345}, +["Bramblewood Belt"]={300,320,330,340}, +["Bramblewood Boots"]={300,320,330,340}, +["Bramblewood Helm"]={300,320,330,340}, +["Breastplate of the Earth"]={265,0,0,0}, +["Bright Copper Necklace"]={65,85,92,100}, +["Bright Copper Ring"]={15,35,45,55}, +["Bright Yellow Shirt"]={135,145,150,155}, +["Bright-Eye Goggles"]={175,195,205,215}, +["Brightcloth Cloak"]={275,290,305,320}, +["Brightcloth Gloves"]={270,285,300,315}, +["Brightcloth Pants"]={290,305,320,335}, +["Brightcloth Robe"]={270,285,300,315}, +["Brilliant Mana Oil"]={300,310,320,330}, +["Brilliant Opal Gemstone"]={235,235,237,240}, +["Brilliant Smallfish"]={1,45,65,85}, +["Brilliant Wizard Oil"]={300,310,320,330}, +["Bristle Whisker Catfish"]={100,140,160,180}, +["Bronze Axe"]={115,145,160,175}, +["Bronze Battle Axe"]={135,165,180,195}, +["Bronze Belt Buckle"]={90,115,127,140}, +["Bronze Bruiser"]={120,140,145,150}, +["Bronze Cuffed Bangles"]={105,120,132,145}, +["Bronze Framework"]={145,145,170,195}, +["Bronze Greatsword"]={130,160,175,190}, +["Bronze Mace"]={110,140,155,170}, +["Bronze Scepter"]={110,130,140,150}, +["Bronze Shortsword"]={120,150,165,180}, +["Bronze Tube"]={105,105,130,155}, +["Bronze Warhammer"]={125,155,170,185}, +["Brown Linen Pants"]={30,55,72,90}, +["Brown Linen Robe"]={30,55,72,90}, +["Brown Linen Shirt"]={1,35,47,60}, +["Brown Linen Vest"]={10,45,57,70}, +["Bulky Copper Ring"]={25,25,45,65}, +["Burning Star Gemstone"]={225,225,227,230}, +["Carrion Surprise"]={175,215,235,255}, +["Catseye Elixir"]={200,220,240,260}, +["Catseye Ultra Goggles"]={220,240,250,260}, +["Cenarion Herb Bag"]={275,290,305,320}, +["Centaur Battle Harness"]={300,320,330,340}, +["Centaur Hoof Circlet"]={160,180,190,200}, +["Charged Scale of Onyxia"]={300,0,0,0}, +["Charred Wolf Meat"]={1,45,65,85}, +["Chimeric Boots"]={275,295,305,315}, +["Chimeric Gloves"]={265,270,280,290}, +["Chimeric Leggings"]={280,300,310,320}, +["Chimeric Vest"]={290,310,320,330}, +["Chromatic Cloak"]={300,320,330,340}, +["Chromatic Gauntlets"]={300,320,330,340}, +["Chromatic Leggings"]={300,300,300,300}, +["Cindercloth Boots"]={245,260,275,290}, +["Cindercloth Cloak"]={275,290,305,320}, +["Cindercloth Gloves"]={270,285,300,315}, +["Cindercloth Pants"]={280,295,310,325}, +["Cindercloth Robe"]={225,240,255,270}, +["Cindercloth Vest"]={260,275,290,305}, +["Cinderfall Band"]={260,280,290,300}, +["Circlet of Dampening"]={135,155,165,175}, +["Clam Chowder"]={90,130,150,170}, +["Cloak of Fire"]={275,290,305,320}, +["Cloak of Warding"]={300,315,330,345}, +["Coarse Blasting Powder"]={75,85,90,95}, +["Coarse Dynamite"]={75,90,97,105}, +["Coarse Gemstone Cluster"]={125,140,142,145}, +["Coarse Grinding Stone"]={75,75,87,100}, +["Coarse Gritted Paper"]={70,90,95,100}, +["Coarse Sharpening Stone"]={65,65,72,80}, +["Coarse Weightstone"]={65,65,72,80}, +["Colorful Kilt"]={120,145,162,180}, +["Comfortable Leather Hat"]={200,220,230,240}, +["Compact Harvest Reaper Kit"]={175,175,195,215}, +["Concoction of the Arcane Giant"]={300,310,330,350}, +["Concoction of the Dreamwater"]={300,310,330,350}, +["Concoction of the Emerald Mongoose"]={300,310,330,350}, +["Cooked Crab Claw"]={85,125,145,165}, +["Cooked Glossy Mightfish"]={225,265,285,305}, +["Copper Axe"]={20,60,80,100}, +["Copper Bangle"]={1,21,33,45}, +["Copper Battle Axe"]={35,75,95,115}, +["Copper Belt Buckle"]={25,65,85,105}, +["Copper Bracers"]={1,20,40,60}, +["Copper Chain Belt"]={35,75,95,115}, +["Copper Chain Boots"]={20,60,80,100}, +["Copper Chain Pants"]={1,50,70,90}, +["Copper Chain Vest"]={35,75,95,115}, +["Copper Claymore"]={30,70,90,110}, +["Copper Dagger"]={30,70,90,110}, +["Copper Knuckles"]={30,60,62,65}, +["Copper Mace"]={15,55,75,95}, +["Copper Modulator"]={65,95,110,125}, +["Copper Shortsword"]={25,65,85,105}, +["Copper Staff"]={45,60,67,75}, +["Copper Tube"]={50,80,95,110}, +["Core Armor Kit"]={300,320,330,340}, +["Core Felcloth Bag"]={300,315,330,345}, +["Core Marksman Rifle"]={300,320,330,340}, +["Corehound Belt"]={300,320,330,340}, +["Corehound Boots"]={295,315,325,335}, +["Corehound Gloves"]={300,300,300,300}, +["Corrosive Poison"]={1,280,305,330}, +["Corrosive Poison II"]={1,300,325,350}, +["Corruption"]={290,315,327,340}, +["Cosmic Headdress"]={300,300,300,300}, +["Cosmic Leggings"]={300,300,300,300}, +["Cosmic Mantle"]={300,300,300,300}, +["Cosmic Vest"]={300,300,300,300}, +["Coyote Steak"]={50,90,110,130}, +["Crab Cake"]={75,115,135,155}, +["Crafted Heavy Shot"]={75,85,90,95}, +["Crafted Light Shot"]={1,30,45,60}, +["Crafted Solid Shot"]={125,125,135,145}, +["Craftsman's Monocle"]={185,205,215,225}, +["Crawford Apple Tarte"]={175,0,0,0}, +["Crimson Silk Belt"]={175,195,210,225}, +["Crimson Silk Cloak"]={180,200,215,230}, +["Crimson Silk Gloves"]={210,225,240,255}, +["Crimson Silk Pantaloons"]={195,215,225,235}, +["Crimson Silk Robe"]={205,220,235,250}, +["Crimson Silk Shoulders"]={190,210,225,240}, +["Crimson Silk Vest"]={185,205,215,225}, +["Crippling Poison"]={1,125,150,175}, +["Crippling Poison II"]={230,275,300,325}, +["Crispy Bat Wing"]={1,45,65,85}, +["Crispy Lizard Tail"]={100,140,160,180}, +["Crocolisk Gumbo"]={120,160,180,200}, +["Crocolisk Steak"]={80,120,140,160}, +["Crown of Elegance"]={230,260,270,280}, +["Crown of Molten Ascension"]={300,320,330,340}, +["Crown of the Illustrious Queen"]={300,320,330,340}, +["Crude Scope"]={60,90,105,120}, +["Crystal Earring"]={185,205,215,225}, +["Crystalfire Armlets"]={255,275,285,295}, +["Crystalweft Bracers"]={280,285,297,310}, +["Cured Heavy Hide"]={150,160,165,170}, +["Cured Light Hide"]={35,55,65,75}, +["Cured Medium Hide"]={100,115,122,130}, +["Cured Rugged Hide"]={250,250,255,260}, +["Cured Thick Hide"]={200,200,200,200}, +["Curiously Tasty Omelet"]={130,170,190,210}, +["Dalaran Wizard Disguise"]={1,0,0,0}, +["Danonzo's Tel'Abim Delight"]={300,300,300,300}, +["Danonzo's Tel'Abim Medley"]={300,300,300,300}, +["Danonzo's Tel'Abim Surprise"]={300,300,300,300}, +["Dark Iron Belt Buckle"]={275,275,280,285}, +["Dark Iron Bomb"]={285,305,315,325}, +["Dark Iron Boots"]={300,320,330,340}, +["Dark Iron Bracers"]={295,315,325,335}, +["Dark Iron Destroyer"]={300,320,330,340}, +["Dark Iron Dwarf Disguise"]={1,0,0,0}, +["Dark Iron Gauntlets"]={300,320,330,340}, +["Dark Iron Helm"]={300,320,330,340}, +["Dark Iron Leggings"]={300,320,330,340}, +["Dark Iron Mail"]={270,290,300,310}, +["Dark Iron Plate"]={285,305,315,325}, +["Dark Iron Pulverizer"]={265,285,295,305}, +["Dark Iron Reaver"]={300,320,330,340}, +["Dark Iron Rifle"]={275,295,305,315}, +["Dark Iron Shoulders"]={280,300,310,320}, +["Dark Iron Signet Ring"]={290,320,330,340}, +["Dark Iron Sunderer"]={275,295,305,315}, +["Dark Leather Belt"]={125,150,162,175}, +["Dark Leather Boots"]={100,125,137,150}, +["Dark Leather Cloak"]={110,135,147,160}, +["Dark Leather Gloves"]={120,155,167,180}, +["Dark Leather Pants"]={115,140,152,165}, +["Dark Leather Shoulders"]={140,165,177,190}, +["Dark Leather Tunic"]={100,125,137,150}, +["Dark Silk Shirt"]={155,165,170,175}, +["Darkrune Breastplate"]={300,320,330,340}, +["Darkrune Gauntlets"]={300,320,330,340}, +["Darkrune Helm"]={300,320,330,340}, +["Darksoul Breastplate"]={300,320,330,340}, +["Darksoul Leggings"]={300,320,330,340}, +["Darksoul Shoulders"]={300,320,330,340}, +["Darkspear"]={300,320,330,340}, +["Dawn Treaders"]={290,310,320,330}, +["Dawn's Edge"]={275,300,312,325}, +["Dawnbright Cuffs"]={115,135,142,150}, +["Dawnbringer Shoulders"]={290,310,320,330}, +["Dawnstone Hammer"]={300,325,337,350}, +["Dazzling Aquamarine Loop"]={190,210,220,230}, +["Dazzling Mithril Rapier"]={240,265,277,290}, +["Dazzling Moonstone Band"]={130,150,160,170}, +["Deadly Blunderbuss"]={105,130,142,155}, +["Deadly Bronze Poniard"]={125,155,170,185}, +["Deadly Poison"]={130,175,200,225}, +["Deadly Poison II"]={170,215,240,265}, +["Deadly Poison III"]={210,255,280,305}, +["Deadly Poison IV"]={250,295,320,345}, +["Deadly Poison V"]={1,300,325,350}, +["Deadly Scope"]={210,230,240,250}, +["Deep Sapphire Circlet"]={290,320,330,340}, +["Deepdive Helmet"]={230,250,260,270}, +["Deepmist Choker"]={85,105,115,125}, +["Defias Disguise"]={1,0,0,0}, +["Delicate Arcanite Converter"]={285,305,315,325}, +["Delicate Mithril Amulet"]={180,200,210,220}, +["Demon Forged Breastplate"]={285,305,315,325}, +["Dense Blasting Powder"]={250,250,255,260}, +["Dense Dynamite"]={250,250,260,270}, +["Dense Gemstone Cluster"]={235,240,240,240}, +["Dense Grinding Stone"]={250,255,257,260}, +["Dense Gritted Paper"]={250,260,265,270}, +["Dense Sharpening Stone"]={250,255,257,260}, +["Dense Weightstone"]={250,255,257,260}, +["Depthstalker Helmet"]={300,0,0,0}, +["Deviate Scale Belt"]={115,140,152,165}, +["Deviate Scale Cloak"]={90,120,135,150}, +["Deviate Scale Gloves"]={105,130,142,155}, +["Devilsaur Gauntlets"]={290,310,320,330}, +["Devilsaur Leggings"]={300,320,330,340}, +["Dig Rat Stew"]={90,130,150,170}, +["Dimensional Ripper - Everlook"]={260,0,0,0}, +["Dirge's Kickin' Chimaerok Chops"]={300,325,345,365}, +["Discolored Healing Potion"]={50,80,100,120}, +["Discombobulator Ray"]={160,180,190,200}, +["Dissolvent Poison"]={1,285,310,335}, +["Dissolvent Poison II"]={1,325,350,375}, +["Diviner's Boots"]={225,225,225,225}, +["Diviner's Cowl"]={230,230,230,230}, +["Diviner's Epaulets"]={230,230,230,230}, +["Diviner's Mitts"]={225,225,225,225}, +["Diviner's Pantaloons"]={230,230,230,230}, +["Diviner's Robes"]={235,235,235,235}, +["Double-stitched Woolen Shoulders"]={110,135,152,170}, +["Draenethyst Baton"]={200,225,235,245}, +["Dragonbreath Chili"]={200,240,260,280}, +["Dragonmaw Armor Kit"]={175,175,182,190}, +["Dragonmaw Gloves"]={170,170,182,195}, +["Dragonscale Belt Buckle"]={235,235,240,245}, +["Dragonscale Breastplate"]={255,275,285,295}, +["Dragonscale Gauntlets"]={225,245,255,265}, +["Dragonscale Leggings"]={245,245,245,245}, +["Dream's Herald"]={300,320,330,340}, +["Dreamhide"]={300,320,330,340}, +["Dreamhide Belt"]={300,320,330,340}, +["Dreamhide Bracers"]={300,320,330,340}, +["Dreamhide Leggings"]={300,320,330,340}, +["Dreamhide Mantle"]={300,320,330,340}, +["Dreamless Sleep Potion"]={230,245,265,285}, +["Dreamscale Breastplate"]={300,320,330,340}, +["Dreamshard Elixir"]={300,315,322,330}, +["Dreamsteel Belt Buckle"]={300,325,337,350}, +["Dreamsteel Boots"]={300,325,337,350}, +["Dreamsteel Bracers"]={300,325,337,350}, +["Dreamsteel Leggings"]={300,325,337,350}, +["Dreamsteel Mantle"]={300,0,0,0}, +["Dreamthread"]={300,300,300,300}, +["Dreamthread Bracers"]={300,300,300,300}, +["Dreamthread Gloves"]={300,300,300,300}, +["Dreamthread Kilt"]={300,300,300,300}, +["Dreamthread Mantle"]={300,300,300,300}, +["Dreamweave Circlet"]={250,265,280,295}, +["Dreamweave Gloves"]={225,240,255,270}, +["Dreamweave Vest"]={225,240,255,270}, +["Dreary Opal Gemstone"]={270,270,272,275}, +["Dry Pork Ribs"]={80,120,140,160}, +["Dusky Belt"]={195,215,225,235}, +["Dusky Boots"]={200,220,230,240}, +["Dusky Bracers"]={185,205,215,225}, +["Dusky Leather Armor"]={175,195,205,215}, +["Dusky Leather Leggings"]={165,185,195,205}, +["Dustguider Sash"]={300,315,330,345}, +["EZ-Thro Dynamite"]={100,115,122,130}, +["EZ-Thro Dynamite II"]={200,200,210,220}, +["Earthen Leather Shoulders"]={135,160,172,185}, +["Earthen Silk Belt"]={195,215,230,245}, +["Earthen Vest"]={170,190,205,220}, +["Earthguard Tunic"]={300,300,300,300}, +["Earthrock Loop"]={100,120,130,140}, +["Ebon Hand"]={300,320,330,340}, +["Ebon Ring"]={75,95,105,115}, +["Ebon Shiv"]={255,280,292,305}, +["Edge of Winter"]={190,215,227,240}, +["Egg Nog"]={35,75,95,115}, +["Elaborate Golden Bracelets"]={200,220,230,240}, +["Elegant Emerald Gemstone"]={250,0,0,0}, +["Elemental Sharpening Stone"]={300,300,310,320}, +["Elixir of Agility"]={185,205,225,245}, +["Elixir of Brute Force"]={275,290,310,330}, +["Elixir of Defense"]={130,155,175,195}, +["Elixir of Demonslaying"]={250,265,285,305}, +["Elixir of Detect Demon"]={250,265,285,305}, +["Elixir of Detect Lesser Invisibility"]={195,215,235,255}, +["Elixir of Detect Undead"]={230,245,265,285}, +["Elixir of Dream Vision"]={240,255,275,295}, +["Elixir of Firepower"]={140,165,185,205}, +["Elixir of Fortitude"]={175,195,215,235}, +["Elixir of Frost Power"]={190,210,230,250}, +["Elixir of Giant Growth"]={90,120,140,160}, +["Elixir of Giants"]={245,260,280,300}, +["Elixir of Greater Agility"]={240,255,275,295}, +["Elixir of Greater Arcane Power"]={300,300,315,330}, +["Elixir of Greater Defense"]={195,215,235,255}, +["Elixir of Greater Firepower"]={250,265,285,305}, +["Elixir of Greater Frost Power"]={300,300,315,330}, +["Elixir of Greater Intellect"]={235,250,270,290}, +["Elixir of Greater Nature Power"]={300,315,322,330}, +["Elixir of Greater Water Breathing"]={215,230,250,270}, +["Elixir of Lesser Agility"]={140,165,185,205}, +["Elixir of Lion's Strength"]={1,55,75,95}, +["Elixir of Minor Agility"]={50,80,100,120}, +["Elixir of Minor Defense"]={1,55,75,95}, +["Elixir of Minor Fortitude"]={50,80,100,120}, +["Elixir of Ogre's Strength"]={150,175,195,215}, +["Elixir of Poison Resistance"]={120,145,165,185}, +["Elixir of Rapid Growth"]={200,200,212,225}, +["Elixir of Shadow Power"]={250,265,285,305}, +["Elixir of Superior Defense"]={265,280,300,320}, +["Elixir of Water Breathing"]={90,120,140,160}, +["Elixir of Wisdom"]={90,120,140,160}, +["Elixir of the Mongoose"]={280,295,315,335}, +["Elixir of the Sages"]={265,280,300,320}, +["Embergem Cuffs"]={300,320,330,340}, +["Emberstone Idol"]={220,240,250,260}, +["Emberstone Studded Ring"]={225,240,247,255}, +["Embossed Leather Boots"]={55,85,100,115}, +["Embossed Leather Cloak"]={60,90,105,120}, +["Embossed Leather Gloves"]={55,85,100,115}, +["Embossed Leather Pants"]={75,105,120,135}, +["Embossed Leather Vest"]={40,70,85,100}, +["Emerald Monarch's Glow"]={300,320,330,340}, +["Empowered Domination Rod"]={300,330,340,350}, +["Empowering Herbal Salad"]={300,325,345,365}, +["Enchant 2H Weapon - Agility"]={290,310,330,350}, +["Enchant 2H Weapon - Greater Impact"]={240,260,280,300}, +["Enchant 2H Weapon - Impact"]={200,220,240,260}, +["Enchant 2H Weapon - Lesser Impact"]={145,170,190,210}, +["Enchant 2H Weapon - Lesser Intellect"]={100,130,150,170}, +["Enchant 2H Weapon - Lesser Spirit"]={110,135,155,175}, +["Enchant 2H Weapon - Major Intellect"]={300,320,340,360}, +["Enchant 2H Weapon - Major Spirit"]={300,320,340,360}, +["Enchant 2H Weapon - Minor Impact"]={100,130,150,170}, +["Enchant 2H Weapon - Minor Intellect"]={75,130,150,170}, +["Enchant 2H Weapon - Superior Impact"]={295,315,335,355}, +["Enchant Boots - Agility"]={235,255,275,295}, +["Enchant Boots - Greater Agility"]={295,315,335,355}, +["Enchant Boots - Greater Spirit"]={300,300,300,300}, +["Enchant Boots - Greater Stamina"]={260,280,300,320}, +["Enchant Boots - Lesser Agility"]={160,180,200,220}, +["Enchant Boots - Lesser Intellect"]={170,170,182,195}, +["Enchant Boots - Lesser Spirit"]={190,210,230,250}, +["Enchant Boots - Lesser Stamina"]={170,190,210,230}, +["Enchant Boots - Major Intellect"]={300,300,300,300}, +["Enchant Boots - Minor Agility"]={125,150,170,190}, +["Enchant Boots - Minor Speed"]={225,245,265,285}, +["Enchant Boots - Minor Stamina"]={125,150,170,190}, +["Enchant Boots - Spirit"]={275,295,315,335}, +["Enchant Boots - Stamina"]={215,235,255,275}, +["Enchant Boots - Superior Stamina"]={300,300,300,300}, +["Enchant Boots - Vampirism"]={300,300,300,300}, +["Enchant Bracer - Agility"]={185,205,225,245}, +["Enchant Bracer - Deflection"]={235,255,275,295}, +["Enchant Bracer - Greater Agility"]={300,300,300,300}, +["Enchant Bracer - Greater Deflection"]={300,300,300,300}, +["Enchant Bracer - Greater Intellect"]={255,275,295,315}, +["Enchant Bracer - Greater Spirit"]={220,240,260,280}, +["Enchant Bracer - Greater Stamina"]={245,265,285,305}, +["Enchant Bracer - Greater Strength"]={240,260,280,300}, +["Enchant Bracer - Healing Power"]={300,320,340,360}, +["Enchant Bracer - Intellect"]={210,230,250,270}, +["Enchant Bracer - Lesser Deflection"]={170,190,210,230}, +["Enchant Bracer - Lesser Intellect"]={150,175,195,215}, +["Enchant Bracer - Lesser Spirit"]={120,145,165,185}, +["Enchant Bracer - Lesser Stamina"]={130,155,175,195}, +["Enchant Bracer - Lesser Strength"]={140,165,185,205}, +["Enchant Bracer - Mana Regeneration"]={290,310,330,350}, +["Enchant Bracer - Minor Agility"]={80,115,135,155}, +["Enchant Bracer - Minor Deflect"]={1,80,100,120}, +["Enchant Bracer - Minor Health"]={1,70,90,110}, +["Enchant Bracer - Minor Spirit"]={60,105,125,145}, +["Enchant Bracer - Minor Stamina"]={50,100,120,140}, +["Enchant Bracer - Minor Strength"]={80,115,135,155}, +["Enchant Bracer - Spell Power"]={300,300,300,300}, +["Enchant Bracer - Spirit"]={165,185,205,225}, +["Enchant Bracer - Stamina"]={170,190,210,230}, +["Enchant Bracer - Strength"]={180,200,220,240}, +["Enchant Bracer - Superior Spirit"]={270,290,310,330}, +["Enchant Bracer - Superior Stamina"]={300,320,340,360}, +["Enchant Bracer - Superior Strength"]={295,315,335,355}, +["Enchant Bracer - Vampirism"]={185,205,225,245}, +["Enchant Chest - Greater Health"]={160,180,200,220}, +["Enchant Chest - Greater Mana"]={185,205,225,245}, +["Enchant Chest - Greater Stats"]={300,320,340,360}, +["Enchant Chest - Health"]={120,145,165,185}, +["Enchant Chest - Lesser Absorption"]={140,165,185,205}, +["Enchant Chest - Lesser Health"]={60,105,125,145}, +["Enchant Chest - Lesser Mana"]={80,115,135,155}, +["Enchant Chest - Lesser Stats"]={200,220,240,260}, +["Enchant Chest - Major Health"]={275,295,315,335}, +["Enchant Chest - Major Mana"]={290,310,330,350}, +["Enchant Chest - Mana"]={145,170,190,210}, +["Enchant Chest - Mighty Mana"]={300,300,300,300}, +["Enchant Chest - Minor Absorption"]={40,90,110,130}, +["Enchant Chest - Minor Health"]={15,70,90,110}, +["Enchant Chest - Minor Mana"]={20,80,100,120}, +["Enchant Chest - Minor Stats"]={150,175,195,215}, +["Enchant Chest - Stats"]={245,265,285,305}, +["Enchant Chest - Superior Health"]={220,240,260,280}, +["Enchant Chest - Superior Mana"]={230,250,270,290}, +["Enchant Cloak - Defense"]={155,175,195,215}, +["Enchant Cloak - Dodge"]={300,320,340,360}, +["Enchant Cloak - Fire Resistance"]={175,195,215,235}, +["Enchant Cloak - Greater Arcane Resistance"]={300,300,300,300}, +["Enchant Cloak - Greater Defense"]={205,225,245,265}, +["Enchant Cloak - Greater Fire Resistance"]={300,320,340,360}, +["Enchant Cloak - Greater Nature Resistance"]={300,320,340,360}, +["Enchant Cloak - Greater Resistance"]={265,285,305,325}, +["Enchant Cloak - Lesser Agility"]={225,245,265,285}, +["Enchant Cloak - Lesser Fire Resistance"]={125,150,170,190}, +["Enchant Cloak - Lesser Protection"]={115,140,160,180}, +["Enchant Cloak - Lesser Shadow Resistance"]={135,160,180,200}, +["Enchant Cloak - Minor Agility"]={110,135,155,175}, +["Enchant Cloak - Minor Protection"]={70,110,130,150}, +["Enchant Cloak - Minor Resistance"]={45,95,115,135}, +["Enchant Cloak - Resistance"]={205,225,245,265}, +["Enchant Cloak - Stealth"]={300,320,340,360}, +["Enchant Cloak - Subtlety"]={300,320,340,360}, +["Enchant Cloak - Superior Defense"]={285,305,325,345}, +["Enchant Gloves - Advanced Herbalism"]={225,245,265,285}, +["Enchant Gloves - Advanced Mining"]={215,235,255,275}, +["Enchant Gloves - Agility"]={210,230,250,270}, +["Enchant Gloves - Arcane Power"]={300,300,300,300}, +["Enchant Gloves - Fire Power"]={300,320,340,360}, +["Enchant Gloves - Fishing"]={145,170,190,210}, +["Enchant Gloves - Frost Power"]={300,320,340,360}, +["Enchant Gloves - Greater Agility"]={270,290,310,330}, +["Enchant Gloves - Greater Strength"]={295,315,335,355}, +["Enchant Gloves - Healing Power"]={300,320,340,360}, +["Enchant Gloves - Herbalism"]={145,170,190,210}, +["Enchant Gloves - Major Strength"]={300,300,300,300}, +["Enchant Gloves - Mining"]={145,170,190,210}, +["Enchant Gloves - Minor Haste"]={250,270,290,310}, +["Enchant Gloves - Nature Power"]={300,300,300,300}, +["Enchant Gloves - Riding Skill"]={250,270,290,310}, +["Enchant Gloves - Shadow Power"]={300,320,340,360}, +["Enchant Gloves - Skinning"]={200,220,240,260}, +["Enchant Gloves - Strength"]={225,245,265,285}, +["Enchant Gloves - Superior Agility"]={300,320,340,360}, +["Enchant Gloves - Threat"]={300,320,340,360}, +["Enchant Shield - Frost Resistance"]={235,255,275,295}, +["Enchant Shield - Greater Spirit"]={230,250,270,290}, +["Enchant Shield - Greater Stamina"]={265,285,305,325}, +["Enchant Shield - Lesser Block"]={195,215,235,255}, +["Enchant Shield - Lesser Protection"]={115,140,160,180}, +["Enchant Shield - Lesser Spirit"]={130,155,175,195}, +["Enchant Shield - Lesser Stamina"]={155,175,195,215}, +["Enchant Shield - Minor Stamina"]={105,130,150,170}, +["Enchant Shield - Spirit"]={180,200,220,240}, +["Enchant Shield - Stamina"]={210,230,250,270}, +["Enchant Shield - Superior Spirit"]={280,300,320,340}, +["Enchant Weapon - Agility"]={290,310,330,350}, +["Enchant Weapon - Crusader"]={300,320,340,360}, +["Enchant Weapon - Demonslaying"]={230,250,270,290}, +["Enchant Weapon - Fiery Weapon"]={265,285,305,325}, +["Enchant Weapon - Greater Striking"]={245,265,285,305}, +["Enchant Weapon - Healing Power"]={300,320,340,360}, +["Enchant Weapon - Icy Chill"]={285,305,325,345}, +["Enchant Weapon - Lesser Beastslayer"]={175,195,215,235}, +["Enchant Weapon - Lesser Elemental Slayer"]={175,195,215,235}, +["Enchant Weapon - Lesser Striking"]={140,165,185,205}, +["Enchant Weapon - Lifestealing"]={300,320,340,360}, +["Enchant Weapon - Mighty Intellect"]={300,320,340,360}, +["Enchant Weapon - Mighty Spirit"]={300,320,340,360}, +["Enchant Weapon - Minor Beastslayer"]={90,120,140,160}, +["Enchant Weapon - Minor Striking"]={90,120,140,160}, +["Enchant Weapon - Spell Power"]={300,320,340,360}, +["Enchant Weapon - Strength"]={290,310,330,350}, +["Enchant Weapon - Striking"]={195,215,235,255}, +["Enchant Weapon - Superior Striking"]={300,320,340,360}, +["Enchant Weapon - Unholy Weapon"]={295,315,335,355}, +["Enchant Weapon - Winter's Might"]={190,210,230,250}, +["Enchanted Armor Kit"]={300,320,330,340}, +["Enchanted Battlehammer"]={280,305,317,330}, +["Enchanted Bracelets"]={125,145,155,165}, +["Enchanted Emerald Gemstone"]={250,255,257,260}, +["Enchanted Gemstone Oil"]={275,275,280,300}, +["Enchanted Leather"]={250,250,255,260}, +["Enchanted Mageweave Pouch"]={225,240,255,270}, +["Enchanted Runecloth Bag"]={275,290,305,320}, +["Enchanted Thorium"]={250,250,255,260}, +["Enchanted Thorium Belt Buckle"]={285,285,297,310}, +["Enchanted Thorium Breastplate"]={300,320,330,340}, +["Enchanted Thorium Helm"]={300,320,330,340}, +["Enchanted Thorium Leggings"]={300,320,330,340}, +["Enchanter's Cowl"]={165,185,200,215}, +["Encrusted Bronze Staff"]={100,120,130,140}, +["Encrusted Copper Bangle"]={50,70,75,80}, +["Encrusted Gemstone Ring"]={300,330,350,370}, +["Essence Infused Leather Gloves"]={300,300,305,310}, +["Eternal Dreamstone Shard"]={300,300,300,300}, +["Ethereal Frostspark Crown"]={280,285,297,310}, +["Ethereal Helmet"]={300,300,300,300}, +["Ethereal Leggings"]={300,300,300,300}, +["Ethereal Shoulder Pads"]={300,300,300,300}, +["Ethereal Tunic"]={300,300,300,300}, +["Explosive Sheep"]={150,175,187,200}, +["Facetted Moonstone Brooch"]={185,200,207,215}, +["Fangclaw Relic"]={120,140,150,160}, +["Farraki Ceremony Totem"]={140,160,170,180}, +["Feathered Breastplate"]={250,270,280,290}, +["Felcloth Bag"]={280,300,315,330}, +["Felcloth Boots"]={285,300,315,330}, +["Felcloth Gloves"]={300,315,330,345}, +["Felcloth Hood"]={290,305,320,335}, +["Felcloth Pants"]={275,290,305,320}, +["Felcloth Robe"]={300,315,330,345}, +["Felcloth Shoulders"]={300,315,330,345}, +["Festive Red Dress"]={250,0,0,0}, +["Festive Red Pant Suit"]={250,265,280,295}, +["Field Repair Bot 74A"]={300,320,330,340}, +["Fiery Chain Breastplate"]={300,325,337,350}, +["Fiery Chain Girdle"]={295,315,325,335}, +["Fiery Chain Shoulders"]={300,320,330,340}, +["Fiery Plate Gauntlets"]={290,310,320,330}, +["Filet of Redgill"]={225,265,285,305}, +["Fillet of Frenzy"]={50,90,110,130}, +["Fine Leather Belt"]={80,110,125,140}, +["Fine Leather Boots"]={90,120,135,150}, +["Fine Leather Cloak"]={85,105,120,135}, +["Fine Leather Gloves"]={75,105,120,135}, +["Fine Leather Pants"]={105,130,142,155}, +["Fine Leather Tunic"]={85,115,130,145}, +["Fire Goggles"]={205,225,235,245}, +["Fire Oil"]={130,150,160,170}, +["Fire Protection Potion"]={165,210,230,250}, +["Firework Cluster Launcher"]={275,295,305,315}, +["Firework Launcher"]={225,245,255,265}, +["Flame Deflector"]={125,125,150,175}, +["Flamewrath Leggings"]={300,300,300,300}, +["Flarecore Boots"]={300,300,300,300}, +["Flarecore Gloves"]={300,315,330,345}, +["Flarecore Leggings"]={300,315,330,345}, +["Flarecore Mantle"]={300,315,330,345}, +["Flarecore Robe"]={300,315,330,345}, +["Flarecore Wraps"]={300,315,330,345}, +["Flash Bomb"]={185,185,205,225}, +["Flask of Chromatic Resistance"]={300,315,322,330}, +["Flask of Distilled Wisdom"]={300,315,322,330}, +["Flask of Petrification"]={300,315,322,330}, +["Flask of Supreme Power"]={300,315,322,330}, +["Flask of the Titans"]={300,315,322,330}, +["Flawless Arcanite Rifle"]={300,320,330,340}, +["Flawless Black Gemstone"]={285,290,292,295}, +["Fletcher's Gloves"]={125,150,162,175}, +["Flying Tiger Goggles"]={100,130,145,160}, +["Force Reactive Disk"]={300,320,330,340}, +["Formal White Shirt"]={170,180,185,190}, +["Free Action Potion"]={150,175,195,215}, +["Frost Leather Cloak"]={180,200,210,220}, +["Frost Oil"]={200,220,240,260}, +["Frost Protection Potion"]={190,205,225,245}, +["Frost Tiger Blade"]={200,225,237,250}, +["Frostbound Slasher"]={180,190,195,200}, +["Frostguard"]={300,320,330,340}, +["Frostsaber Boots"]={275,295,305,315}, +["Frostsaber Gloves"]={295,315,325,335}, +["Frostsaber Leggings"]={285,305,315,325}, +["Frostsaber Tunic"]={300,320,330,340}, +["Frostweave Gloves"]={265,280,295,310}, +["Frostweave Pants"]={280,295,310,325}, +["Frostweave Robe"]={255,270,285,300}, +["Frostweave Tunic"]={255,270,285,300}, +["Fury of the Timbermaw"]={290,310,320,330}, +["Gaea's Embrace"]={300,315,330,345}, +["Garnet Guardian Staff"]={290,0,0,0}, +["Gauntlets of the Sea"]={230,250,260,270}, +["Gem Encrusted Choker"]={160,180,190,200}, +["Gem-studded Leather Belt"]={185,205,215,225}, +["Gemkeeper's Folio"]={235,0,0,0}, +["Gemmed Citrine Pendant"]={160,160,180,200}, +["Gemmed Copper Gauntlets"]={60,100,120,140}, +["Gemstone Compendium"]={275,275,297,320}, +["Ghost Dye"]={245,260,280,300}, +["Ghostweave Belt"]={265,280,295,310}, +["Ghostweave Gloves"]={270,285,300,315}, +["Ghostweave Pants"]={290,305,320,335}, +["Ghostweave Vest"]={275,290,305,320}, +["Giant Clam Scorcho"]={175,215,235,255}, +["Gift of Arthas"]={240,255,275,295}, +["Giga-Charged Arcane Reflector"]={290,310,320,330}, +["Gilneas Hot Stew"]={200,240,260,280}, +["Gingerbread Cookie"]={1,45,65,85}, +["Girdle of Insight"]={300,320,330,340}, +["Girdle of the Dawn"]={290,310,320,330}, +["Glacial Cloak"]={300,315,330,345}, +["Glacial Gloves"]={300,315,330,345}, +["Glacial Vest"]={300,315,330,345}, +["Glacial Wrists"]={300,315,330,345}, +["Gleaming Chain"]={80,100,110,120}, +["Gleaming Jade Gemstone"]={175,180,182,185}, +["Gleaming Silver Necklace"]={135,155,165,175}, +["Glinting Steel Dagger"]={180,205,217,230}, +["Glittering Sapphire Gemstone"]={290,0,0,0}, +["Gloomweed Bindings"]={80,160,170,180}, +["Gloomy Diamond Gemstone"]={260,265,267,270}, +["Gloves of Manathirst"]={75,150,167,185}, +["Gloves of Meditation"]={130,150,165,180}, +["Gloves of Spell Mastery"]={300,315,330,345}, +["Gloves of Unwinding Mystery"]={300,300,300,300}, +["Gloves of the Dawn"]={300,320,330,340}, +["Gloves of the Greatfather"]={190,210,220,230}, +["Glowing Ruby Gemstone"]={200,205,207,210}, +["Glyph Codex"]={260,280,287,295}, +["Gnomish Battle Chicken"]={230,250,260,270}, +["Gnomish Cloaking Device"]={200,220,230,240}, +["Gnomish Death Ray"]={240,260,270,280}, +["Gnomish Goggles"]={210,230,240,250}, +["Gnomish Harm Prevention Belt"]={215,235,245,255}, +["Gnomish Mind Control Cap"]={235,255,265,275}, +["Gnomish Net-o-Matic Projector"]={210,230,240,250}, +["Gnomish Rocket Boots"]={225,245,255,265}, +["Gnomish Shrink Ray"]={205,225,235,245}, +["Gnomish Universal Remote"]={125,150,162,175}, +["Goblin Bomb Dispenser"]={230,230,250,270}, +["Goblin Construction Helmet"]={205,225,235,245}, +["Goblin Deviled Clams"]={125,165,185,205}, +["Goblin Dragon Gun"]={240,260,270,280}, +["Goblin Jumper Cables"]={165,165,180,200}, +["Goblin Jumper Cables XL"]={265,285,295,305}, +["Goblin Land Mine"]={195,215,225,235}, +["Goblin Mining Helmet"]={205,225,235,245}, +["Goblin Mortar"]={205,225,235,245}, +["Goblin Radio"]={225,240,250,260}, +["Goblin Rocket Boots"]={225,245,255,265}, +["Goblin Rocket Fuel"]={210,225,245,265}, +["Goblin Rocket Fuel Recipe"]={205,205,205,205}, +["Goblin Rocket Helmet"]={245,265,275,285}, +["Goblin Sapper Charge"]={205,205,225,245}, +["Gold Belt Buckle"]={175,175,180,185}, +["Gold Power Core"]={150,150,170,190}, +["Goldcrest Amulet"]={170,180,190,200}, +["Golden Iron Destroyer"]={170,195,207,220}, +["Golden Jade Ring"]={210,235,245,255}, +["Golden Mantle of the Dawn"]={300,320,330,340}, +["Golden Rod"]={150,155,157,160}, +["Golden Runed Ring"]={285,310,320,330}, +["Golden Scale Boots"]={200,225,237,250}, +["Golden Scale Bracers"]={185,210,222,235}, +["Golden Scale Coif"]={190,215,227,240}, +["Golden Scale Cuirass"]={195,220,232,245}, +["Golden Scale Gauntlets"]={205,225,235,245}, +["Golden Scale Leggings"]={170,195,207,220}, +["Golden Scale Shoulders"]={175,200,212,225}, +["Golden Scepter of Authority"]={260,0,0,0}, +["Golden Skeleton Key"]={150,150,160,170}, +["Goldenshade Quartz Crown"]={175,195,202,210}, +["Goldfire Crystal Bracelet"]={155,155,160,165}, +["Goldthorn Tea"]={175,175,190,205}, +["Gooey Spider Cake"]={110,150,170,190}, +["Gordok Ogre Suit"]={275,285,290,295}, +["Goretusk Liver Pie"]={50,90,110,130}, +["Gorgeous Mountain Gemstone"]={300,330,345,360}, +["Graceful Agate Gemstone"]={135,135,137,140}, +["Grail of Forgotten Memories"]={300,330,340,350}, +["Grandstaff of the Shen'dralar Elder"]={300,330,350,370}, +["Gray Woolen Robe"]={105,130,147,165}, +["Gray Woolen Shirt"]={100,110,120,130}, +["Great Rage Potion"]={175,195,215,235}, +["Greater Adept's Robe"]={115,140,157,175}, +["Greater Arcane Elixir"]={285,300,320,340}, +["Greater Arcane Protection Potion"]={290,305,325,345}, +["Greater Binding Signet"]={210,230,240,250}, +["Greater Dreamless Sleep Potion"]={275,290,310,330}, +["Greater Fire Protection Potion"]={290,305,325,345}, +["Greater Frost Protection Potion"]={290,305,325,345}, +["Greater Healing Potion"]={155,175,195,215}, +["Greater Holy Protection Potion"]={290,305,325,345}, +["Greater Magic Wand"]={70,110,130,150}, +["Greater Mana Potion"]={205,220,240,260}, +["Greater Mystic Wand"]={175,195,215,235}, +["Greater Nature Protection Potion"]={290,305,325,345}, +["Greater Shadow Protection Potion"]={290,305,325,345}, +["Greater Stoneshield Potion"]={280,295,315,335}, +["Green Dragonscale Breastplate"]={260,280,290,300}, +["Green Dragonscale Gauntlets"]={280,300,310,320}, +["Green Dragonscale Leggings"]={270,290,300,310}, +["Green Firework"]={150,150,162,175}, +["Green Holiday Shirt"]={190,200,205,210}, +["Green Iron Boots"]={145,175,190,205}, +["Green Iron Bracers"]={165,190,202,215}, +["Green Iron Gauntlets"]={150,180,195,210}, +["Green Iron Hauberk"]={180,205,217,230}, +["Green Iron Helm"]={170,195,207,220}, +["Green Iron Leggings"]={155,180,192,205}, +["Green Iron Shoulders"]={160,185,197,210}, +["Green Leather Armor"]={155,175,185,195}, +["Green Leather Belt"]={160,180,190,200}, +["Green Leather Bracers"]={180,200,210,220}, +["Green Lens"]={245,265,275,285}, +["Green Linen Bracers"]={60,85,102,120}, +["Green Linen Shirt"]={70,95,112,130}, +["Green Rocket Cluster"]={225,225,237,250}, +["Green Silk Armor"]={165,185,200,215}, +["Green Silk Pack"]={175,195,210,225}, +["Green Silken Shoulders"]={180,200,215,230}, +["Green Tinted Goggles"]={150,175,187,200}, +["Green Whelp Armor"]={175,195,205,215}, +["Green Whelp Bracers"]={190,210,220,230}, +["Green Woolen Bag"]={95,120,137,155}, +["Green Woolen Robe"]={90,0,0,0}, +["Green Woolen Vest"]={85,110,127,145}, +["Grifter's Belt"]={200,215,220,225}, +["Grifter's Boots"]={200,215,220,225}, +["Grifter's Cover"]={210,225,230,235}, +["Grifter's Gauntlets"]={200,215,220,225}, +["Grifter's Leggings"]={205,225,230,235}, +["Grifter's Tunic"]={210,235,240,245}, +["Grilled Squid"]={240,280,300,320}, +["Guardbreaker Charm"]={300,320,325,330}, +["Guardian Armor"]={175,195,205,215}, +["Guardian Belt"]={170,190,200,210}, +["Guardian Cloak"]={185,205,215,225}, +["Guardian Gloves"]={190,210,220,230}, +["Guardian Leather Bracers"]={195,215,225,235}, +["Guardian Pants"]={160,180,190,200}, +["Gurubashi Gumbo"]={300,300,300,300}, +["Gurubashi Mojo Madness"]={300,315,322,330}, +["Gyrochronatom"]={170,170,190,210}, +["Gyrofreeze Ice Reflector"]={260,280,290,300}, +["Gyromatic Micro-Adjustor"]={175,175,195,215}, +["Hammer of the Titans"]={300,320,330,340}, +["Handful of Copper Bolts"]={30,45,52,60}, +["Hands of Darkness"]={145,165,180,195}, +["Handstitched Leather Belt"]={25,55,70,85}, +["Handstitched Leather Boots"]={1,40,55,70}, +["Handstitched Leather Bracers"]={1,40,55,70}, +["Handstitched Leather Cloak"]={1,40,55,70}, +["Handstitched Leather Pants"]={15,45,60,75}, +["Handstitched Leather Vest"]={1,40,55,70}, +["Handstitched Linen Britches"]={70,95,112,130}, +["Hardened Iron Shortsword"]={160,185,197,210}, +["Harness of the High Thane"]={300,320,330,340}, +["Harpy Talon Ring"]={145,165,175,185}, +["Hateforge Belt"]={275,300,312,325}, +["Hateforge Boots"]={275,300,310,320}, +["Hateforge Cuirass"]={290,300,310,320}, +["Hateforge Grips"]={285,300,310,320}, +["Hateforge Helmet"]={290,300,310,320}, +["Hateforge Leggings"]={290,300,310,320}, +["Healing Potion"]={110,135,155,175}, +["Heart of the Sea"]={200,220,230,240}, +["Heartseeker"]={300,320,330,340}, +["Heavy Armor Kit"]={150,170,180,190}, +["Heavy Blasting Powder"]={125,125,135,145}, +["Heavy Bronze Mace"]={130,160,175,190}, +["Heavy Copper Broadsword"]={95,135,155,175}, +["Heavy Copper Maul"]={65,105,125,145}, +["Heavy Crocolisk Stew"]={150,160,180,200}, +["Heavy Dynamite"]={125,125,135,145}, +["Heavy Earthen Gloves"]={145,170,182,195}, +["Heavy Gemstone Cluster"]={150,150,152,155}, +["Heavy Grinding Stone"]={125,125,137,150}, +["Heavy Gritted Paper"]={150,150,155,160}, +["Heavy Kodo Stew"]={200,240,260,280}, +["Heavy Leather"]={150,150,155,160}, +["Heavy Leather Ammo Pouch"]={150,170,180,190}, +["Heavy Leather Ball"]={150,150,155,160}, +["Heavy Linen Bandage"]={40,50,75,100}, +["Heavy Linen Gloves"]={35,60,77,95}, +["Heavy Mageweave Bandage"]={240,240,270,300}, +["Heavy Mithril Axe"]={210,235,247,260}, +["Heavy Mithril Boots"]={235,255,265,275}, +["Heavy Mithril Breastplate"]={230,250,260,270}, +["Heavy Mithril Gauntlet"]={205,225,235,245}, +["Heavy Mithril Helm"]={245,255,265,275}, +["Heavy Mithril Pants"]={210,230,240,250}, +["Heavy Mithril Shoulder"]={205,225,235,245}, +["Heavy Obsidian Belt"]={300,320,330,340}, +["Heavy Quiver"]={150,170,180,190}, +["Heavy Runecloth Bandage"]={290,290,320,350}, +["Heavy Scorpid Belt"]={280,300,310,320}, +["Heavy Scorpid Bracers"]={255,275,285,295}, +["Heavy Scorpid Gauntlets"]={275,295,305,315}, +["Heavy Scorpid Helm"]={295,315,325,335}, +["Heavy Scorpid Leggings"]={285,305,315,325}, +["Heavy Scorpid Shoulders"]={300,320,330,340}, +["Heavy Scorpid Vest"]={265,285,295,305}, +["Heavy Sharpening Stone"]={125,125,132,140}, +["Heavy Silk Bandage"]={180,180,210,240}, +["Heavy Timbermaw Belt"]={290,310,320,330}, +["Heavy Timbermaw Boots"]={300,320,330,340}, +["Heavy Weightstone"]={125,125,132,140}, +["Heavy Wool Bandage"]={115,115,150,185}, +["Heavy Woolen Cloak"]={100,125,142,160}, +["Heavy Woolen Gloves"]={85,110,127,145}, +["Heavy Woolen Pants"]={110,135,152,170}, +["Helm of Fire"]={250,270,280,290}, +["Helm of the Great Chief"]={300,320,330,340}, +["Herb Baked Egg"]={1,45,65,85}, +["Herbalist's Gloves"]={135,160,172,185}, +["Hi-Explosive Bomb"]={235,235,255,275}, +["Hi-Impact Mithril Slugs"]={210,210,230,250}, +["Hide of the Wild"]={300,320,330,340}, +["Hillman's Belt"]={120,145,157,170}, +["Hillman's Cloak"]={150,170,180,190}, +["Hillman's Leather Gloves"]={145,170,182,195}, +["Hillman's Leather Vest"]={100,125,137,150}, +["Hillman's Shoulders"]={130,155,167,180}, +["Holy Protection Potion"]={100,130,150,170}, +["Hot Lion Chops"]={125,175,195,215}, +["Hot Smoked Bass"]={240,280,300,320}, +["Hot Wolf Ribs"]={175,215,235,255}, +["Huge Thorium Battleaxe"]={280,305,317,330}, +["Hydrathorn Bracers"]={105,125,135,145}, +["Hyper-Radiant Flame Reflector"]={290,310,320,330}, +["Hypertech Battery Pack"]={250,250,260,270}, +["Ice Deflector"]={155,175,185,195}, +["Icebane Bracers"]={300,320,330,340}, +["Icebane Breastplate"]={300,320,330,340}, +["Icebane Gauntlets"]={300,320,330,340}, +["Icy Cloak"]={200,220,235,250}, +["Icy Scale Bracers"]={300,320,330,340}, +["Icy Scale Breastplate"]={300,320,330,340}, +["Icy Scale Gauntlets"]={300,320,330,340}, +["Illuminated Gemstone"]={200,205,205,205}, +["Imperial Plate Belt"]={265,285,295,305}, +["Imperial Plate Boots"]={295,315,325,335}, +["Imperial Plate Bracers"]={270,290,300,310}, +["Imperial Plate Chest"]={300,320,330,340}, +["Imperial Plate Gauntlets"]={270,280,285,290}, +["Imperial Plate Helm"]={295,315,325,335}, +["Imperial Plate Leggings"]={300,320,330,340}, +["Imperial Plate Shoulders"]={265,285,295,305}, +["Inferno Gloves"]={300,315,330,345}, +["Inlaid Copper Ring"]={35,55,62,70}, +["Inlaid Mithril Cylinder"]={200,225,237,250}, +["Inlaid Mithril Cylinder Plans"]={205,205,205,205}, +["Inlaid Thorium Hammer"]={270,295,307,320}, +["Inscribed Runic Bracers"]={300,320,330,340}, +["Instant Poison"]={1,125,150,175}, +["Instant Poison II"]={120,165,190,215}, +["Instant Poison III"]={160,205,230,255}, +["Instant Poison IV"]={200,245,270,295}, +["Instant Poison V"]={240,285,340,335}, +["Instant Poison VI"]={280,325,350,375}, +["Intricate Gyroscope Goggles"]={300,320,330,340}, +["Invisibility Potion"]={235,250,270,290}, +["Invulnerable Mail"]={300,320,330,340}, +["Iridescent Hammer"]={140,170,185,200}, +["Iron Belt Buckle"]={140,170,185,200}, +["Iron Buckle"]={150,150,152,155}, +["Iron Counterweight"]={165,190,202,215}, +["Iron Grenade"]={175,175,195,215}, +["Iron Shield Spike"]={150,180,195,210}, +["Iron Strut"]={160,160,170,180}, +["Ironbloom Ring"]={190,205,215,225}, +["Ironfeather Breastplate"]={290,310,320,330}, +["Ironfeather Shoulders"]={270,290,300,310}, +["Ironforge Breastplate"]={100,140,160,180}, +["Ironforge Chain"]={70,110,130,150}, +["Ironforge Gauntlets"]={140,0,0,0}, +["Ironsun Citrine Ring"]={185,200,210,220}, +["Ironvine Belt"]={300,320,330,340}, +["Ironvine Breastplate"]={300,320,330,340}, +["Ironvine Gloves"]={300,320,330,340}, +["Jade Harmony Circlet"]={170,190,197,205}, +["Jade Serpentblade"]={175,200,212,225}, +["Jagged Obsidian Shield"]={300,320,330,340}, +["Jewelry Lens"]={125,140,147,155}, +["Jewelry Scope"]={225,140,147,155}, +["Jungle Stew"]={175,215,235,255}, +["Kaldorei Spider Kabob"]={10,50,70,90}, +["Kodo Hide Bag"]={40,70,85,100}, +["Large Blue Rocket"]={175,175,187,200}, +["Large Blue Rocket Cluster"]={275,275,280,285}, +["Large Copper Bomb"]={105,105,130,155}, +["Large Green Rocket"]={175,175,187,200}, +["Large Green Rocket Cluster"]={275,275,280,285}, +["Large Red Rocket"]={175,175,187,200}, +["Large Red Rocket Cluster"]={275,275,280,285}, +["Large Seaforium Charge"]={200,200,220,240}, +["Lava Belt"]={300,320,330,340}, +["Lavender Mageweave Shirt"]={230,235,240,245}, +["Lavish Gemmed Necklace"]={80,100,110,120}, +["Le Fishe Au Chocolat"]={300,300,300,300}, +["Lean Venison"]={110,150,170,190}, +["Lean Wolf Steak"]={125,165,185,205}, +["Lesser Fortification Ring"]={50,70,77,85}, +["Lesser Healing Potion"]={55,85,105,125}, +["Lesser Invisibility Potion"]={165,185,205,225}, +["Lesser Magic Wand"]={10,75,95,115}, +["Lesser Mana Oil"]={250,260,270,280}, +["Lesser Mana Potion"]={120,145,165,185}, +["Lesser Mystic Wand"]={155,175,195,215}, +["Lesser Stoneshield Potion"]={215,230,250,270}, +["Lesser Wizard Oil"]={200,210,220,230}, +["Lesser Wizard's Robe"]={135,155,170,185}, +["Ley-Kissed Drape"]={300,300,300,300}, +["Lifelike Mechanical Toad"]={265,285,295,305}, +["Light Armor Kit"]={1,30,45,60}, +["Light Leather"]={1,20,30,40}, +["Light Leather Bracers"]={70,100,115,130}, +["Light Leather Pants"]={95,125,140,155}, +["Light Leather Quiver"]={30,60,75,90}, +["Light Obsidian Belt"]={300,320,330,340}, +["Lil' Smoky"]={205,205,205,205}, +["Limited Invulnerability Potion"]={250,275,295,315}, +["Linen Bag"]={45,70,87,105}, +["Linen Bandage"]={1,30,45,60}, +["Linen Belt"]={15,50,67,85}, +["Linen Boots"]={65,90,107,125}, +["Linen Cloak"]={1,35,47,60}, +["Lionheart Helm"]={300,320,330,340}, +["Living Action Potion"]={285,300,320,340}, +["Living Breastplate"]={300,320,330,340}, +["Living Leggings"]={285,305,315,325}, +["Living Shoulders"]={270,290,300,310}, +["Lobster Stew"]={275,315,335,355}, +["Loch Frenzy Delight"]={50,90,110,130}, +["Long Silken Cloak"]={185,205,220,235}, +["Longjaw Mud Snapper"]={50,90,110,130}, +["Lordaeron Breastplate"]={100,275,295,310}, +["Lovingly Crafted Boomstick"]={120,145,157,170}, +["Lucidity Potion"]={300,315,322,330}, +["Lynxstep Boots"]={75,0,0,0}, +["Mageblood Potion"]={275,290,310,330}, +["Mageweave Bag"]={225,240,255,270}, +["Mageweave Bandage"]={210,210,240,270}, +["Magic Resistance Potion"]={210,225,245,265}, +["Major Healing Potion"]={275,290,310,330}, +["Major Mana Potion"]={295,310,330,350}, +["Major Recombobulator"]={275,285,290,295}, +["Major Rejuvenation Potion"]={300,310,320,330}, +["Major Troll's Blood Potion"]={290,305,325,345}, +["Malachite Ring"]={20,40,47,55}, +["Mana Binding Signet"]={230,260,275,290}, +["Mana Potion"]={160,180,200,220}, +["Mantle of Centaur Authority"]={300,320,330,340}, +["Mantle of the Timbermaw"]={300,315,330,345}, +["Marine Root"]={200,215,225,235}, +["Marine's Demise"]={190,210,220,230}, +["Maritime Gumbo"]={35,75,95,115}, +["Massive Iron Axe"]={185,210,222,235}, +["Massive Jewel Circlet"]={300,0,0,0}, +["Master Engineer's Goggles"]={290,310,320,330}, +["Mastercrafted Diamond Bangles"]={300,325,332,340}, +["Mastercrafted Diamond Crown"]={300,320,330,340}, +["Masterwork Stormhammer"]={300,320,330,340}, +["Masterwork Target Dummy"]={275,295,305,315}, +["Mechanical Dragonling"]={200,220,230,240}, +["Mechanical Repair Kit"]={200,200,220,240}, +["Mechanical Squirrel"]={75,105,120,135}, +["Medallion of Flame"]={110,130,140,150}, +["Medium Armor Kit"]={100,115,122,130}, +["Medium Leather"]={100,100,105,110}, +["Might of the Timbermaw"]={290,310,320,330}, +["Mightfish Steak"]={275,315,335,355}, +["Mighty Iron Hammer"]={145,175,190,205}, +["Mighty Rage Potion"]={255,270,290,310}, +["Mighty Troll's Blood Potion"]={180,200,220,240}, +["Mind-numbing Poison"]={1,150,175,200}, +["Mind-numbing Poison II"]={1,215,240,265}, +["Mind-numbing Poison III"]={1,285,310,335}, +["Minor Healing Potion"]={1,55,75,95}, +["Minor Magic Resistance Potion"]={110,135,155,175}, +["Minor Mana Oil"]={150,160,170,180}, +["Minor Mana Potion"]={25,65,85,105}, +["Minor Recombobulator"]={140,165,177,190}, +["Minor Rejuvenation Potion"]={40,70,90,110}, +["Minor Trollblood Ring"]={50,70,80,90}, +["Minor Wizard Oil"]={45,55,65,75}, +["Mistwood Tiara"]={105,135,145,155}, +["Mithril Belt Buckle"]={185,210,222,235}, +["Mithril Blackstone Necklace"]={245,265,275,285}, +["Mithril Blunderbuss"]={205,225,235,245}, +["Mithril Casing"]={215,215,235,255}, +["Mithril Coif"]={230,250,260,270}, +["Mithril Frag Bomb"]={215,215,235,255}, +["Mithril Gyro-Shot"]={245,245,265,285}, +["Mithril Headed Trout"]={175,215,235,255}, +["Mithril Heavy-bore Rifle"]={220,240,250,260}, +["Mithril Mechanical Dragonling"]={250,270,280,290}, +["Mithril Scale Bracers"]={215,235,245,255}, +["Mithril Scale Gloves"]={220,240,250,260}, +["Mithril Scale Pants"]={210,230,240,250}, +["Mithril Scale Shoulders"]={235,255,265,275}, +["Mithril Shield Spike"]={215,235,245,255}, +["Mithril Spurs"]={235,255,265,275}, +["Mithril Tube"]={195,195,215,235}, +["Molten Belt"]={300,320,330,340}, +["Molten Helm"]={300,320,330,340}, +["Molten Leggings"]={300,300,300,300}, +["Monastery Emberbrace"]={170,185,195,205}, +["Mongoose Boots"]={300,320,330,340}, +["Monster Omelet"]={225,265,285,305}, +["Mooncloth"]={250,290,305,320}, +["Mooncloth Bag"]={300,315,330,345}, +["Mooncloth Boots"]={290,295,310,325}, +["Mooncloth Circlet"]={300,315,330,345}, +["Mooncloth Gloves"]={300,315,330,345}, +["Mooncloth Leggings"]={290,305,320,335}, +["Mooncloth Robe"]={300,315,330,345}, +["Mooncloth Shoulders"]={300,315,330,345}, +["Mooncloth Vest"]={300,315,330,345}, +["Moonglow Vest"]={90,115,130,145}, +["Moonlight Staff"]={125,150,160,170}, +["Moonlit Charm"]={275,0,0,0}, +["Moonsight Rifle"]={145,170,182,195}, +["Moonsteel Broadsword"]={180,205,217,230}, +["Murloc Fin Soup"]={90,130,150,170}, +["Murloc Scale Belt"]={90,120,135,150}, +["Murloc Scale Bracers"]={190,210,220,230}, +["Murloc Scale Breastplate"]={95,125,140,155}, +["Mystery Stew"]={175,215,235,255}, +["Nature Protection Potion"]={190,210,230,250}, +["Netherbane Rod"]={160,180,190,200}, +["Nightfall"]={300,320,330,340}, +["Nightfin Soup"]={250,290,310,330}, +["Nightscape Boots"]={235,255,265,275}, +["Nightscape Cloak"]={230,250,260,270}, +["Nightscape Headband"]={205,225,235,245}, +["Nightscape Pants"]={230,250,260,270}, +["Nightscape Shoulders"]={210,230,240,250}, +["Nightscape Tunic"]={205,225,235,245}, +["Nimble Leather Gloves"]={120,145,157,170}, +["Obsidian Belt Buckle"]={300,300,310,320}, +["Obsidian Brooch"]={175,190,197,205}, +["Obsidian Mail Tunic"]={300,320,330,340}, +["Ocean's Gaze"]={190,190,210,230}, +["Ocean's Wrath"]={115,120,130,140}, +["Ogre Bone Band"]={170,200,210,220}, +["Oil of Immolation"]={205,220,240,260}, +["Onyxia Scale Breastplate"]={300,0,0,0}, +["Onyxia Scale Cloak"]={300,320,330,340}, +["Opal Guided Bangles"]={250,280,290,300}, +["Opaline Illuminator"]={210,235,245,255}, +["Opalstone Circle"]={290,320,330,340}, +["Orange Mageweave Shirt"]={215,220,225,230}, +["Orange Martial Shirt"]={220,225,230,235}, +["Orb of Clairvoyance"]={285,320,330,340}, +["Orcish War Leggings"]={210,250,260,270}, +["Ornament of Restraint"]={245,245,265,285}, +["Ornate Bloodstone Dagger"]={300,320,330,340}, +["Ornate Mithril Boots"]={210,265,275,285}, +["Ornate Mithril Bracelets"]={200,225,237,250}, +["Ornate Mithril Breastplate"]={210,260,270,280}, +["Ornate Mithril Crown"]={210,230,240,250}, +["Ornate Mithril Gloves"]={220,240,250,260}, +["Ornate Mithril Helm"]={210,265,275,285}, +["Ornate Mithril Pants"]={220,240,250,260}, +["Ornate Mithril Scepter"]={200,220,230,240}, +["Ornate Mithril Shoulders"]={225,245,255,265}, +["Ornate Spyglass"]={135,160,172,185}, +["Ornate Thorium Handaxe"]={275,300,312,325}, +["Otherworldly Breastplate"]={300,320,330,340}, +["Otherworldly Coif"]={300,320,330,340}, +["Otherworldly Leggings"]={300,320,330,340}, +["Otherworldly Spaulders"]={300,320,330,340}, +["Parachute Cloak"]={225,245,255,265}, +["Patterned Bronze Bracers"]={120,150,165,180}, +["Pauldron of Deflection"]={300,315,322,330}, +["Pauldrons of the Timbermaw"]={300,325,337,350}, +["Pearl-clasped Cloak"]={90,115,132,150}, +["Pearl-handled Dagger"]={110,140,155,170}, +["Peasant Disguise"]={1,0,0,0}, +["Pendant of Arcane Radiance"]={280,300,305,310}, +["Pendant of Instability"]={300,300,307,315}, +["Pendant of Midnight"]={120,145,155,165}, +["Peon Disguise"]={1,0,0,0}, +["Persuader"]={300,320,330,340}, +["Pet Bombling"]={205,205,205,205}, +["Phantom Blade"]={245,270,282,295}, +["Philosophers' Stone"]={225,0,0,0}, +["Phoenix Gloves"]={125,150,167,185}, +["Phoenix Pants"]={125,150,167,185}, +["Pilferer's Gloves"]={140,165,177,190}, +["Pillager's Amice"]={265,265,265,265}, +["Pillager's Grips"]={260,260,260,260}, +["Pillager's Hood"]={265,265,265,265}, +["Pillager's Pantaloons"]={265,265,265,265}, +["Pillager's Robe"]={270,270,270,270}, +["Pillager's Shoes"]={260,260,260,260}, +["Pink Mageweave Shirt"]={235,240,245,250}, +["Poached Sunscale Salmon"]={250,290,310,330}, +["Polar Bracers"]={300,320,330,340}, +["Polar Gloves"]={300,320,330,340}, +["Polar Tunic"]={300,320,330,340}, +["Polished Steel Boots"]={185,210,222,235}, +["Portable Bronze Mortar"]={165,185,195,205}, +["Portable Wormhole Generator - Orgrimmar"]={125,0,0,0}, +["Portable Wormhole Generator - Stormwind"]={125,0,0,0}, +["Potion of Quickness"]={300,315,322,330}, +["Powerful Anti-Venom"]={300,300,330,360}, +["Powerful Citrine Pendant"]={175,195,202,210}, +["Powerful Seaforium Charge"]={275,275,285,295}, +["Powerful Smelling Salts"]={300,300,330,360}, +["Practice Lock"]={100,115,122,130}, +["Precision Jewelry Kit"]={175,185,190,195}, +["Primal Batskin Bracers"]={300,320,330,340}, +["Primal Batskin Gloves"]={300,320,330,340}, +["Primal Batskin Jerkin"]={300,320,330,340}, +["Primalist's Boots"]={275,290,291,295}, +["Primalist's Gloves"]={270,285,290,295}, +["Primalist's Headdress"]={270,290,291,295}, +["Primalist's Pants"]={280,290,291,295}, +["Primalist's Shoulders"]={280,285,290,295}, +["Primalist's Vest"]={285,290,291,295}, +["Prism Amulet"]={265,265,285,305}, +["Prismatic Scale Barbute"]={300,300,305,310}, +["Pristine Crystal Gemstone"]={150,155,157,160}, +["Pure Gold Ring"]={295,0,0,0}, +["Pure Shining Moonstone"]={175,180,182,185}, +["Purification Potion"]={285,300,320,340}, +["Quartz Halo"]={155,175,185,195}, +["Quickdraw Quiver"]={225,245,255,265}, +["Quicksilver Whirl"]={265,285,292,300}, +["Radiant Belt"]={260,280,290,300}, +["Radiant Boots"]={290,310,320,330}, +["Radiant Breastplate"]={270,290,300,310}, +["Radiant Circlet"]={295,315,325,335}, +["Radiant Ember Gemstone"]={200,205,207,210}, +["Radiant Gloves"]={285,305,315,325}, +["Radiant Leggings"]={300,320,330,340}, +["Radiant Thorium Twilight"]={255,270,277,285}, +["Rage Potion"]={60,90,110,130}, +["Rainbow Fin Albacore"]={50,90,110,130}, +["Raptor Hide Belt"]={165,185,195,205}, +["Raptor Hide Harness"]={165,185,195,205}, +["Red Dragonscale Boots"]={295,300,300,300}, +["Red Dragonscale Breastplate"]={300,320,330,340}, +["Red Dragonscale Leggings"]={295,300,300,300}, +["Red Dragonscale Shoulders"]={300,300,300,300}, +["Red Firework"]={150,150,162,175}, +["Red Linen Bag"]={70,95,112,130}, +["Red Linen Robe"]={40,65,82,100}, +["Red Linen Shirt"]={40,65,82,100}, +["Red Linen Vest"]={55,80,97,115}, +["Red Mageweave Bag"]={235,250,265,280}, +["Red Mageweave Gloves"]={225,240,255,270}, +["Red Mageweave Headband"]={240,255,270,285}, +["Red Mageweave Pants"]={215,230,245,260}, +["Red Mageweave Shoulders"]={235,250,265,280}, +["Red Mageweave Vest"]={215,230,245,260}, +["Red Rocket Cluster"]={225,225,237,250}, +["Red Swashbuckler's Shirt"]={175,185,190,195}, +["Red Whelp Gloves"]={120,145,157,170}, +["Red Woolen Bag"]={115,140,157,175}, +["Red Woolen Boots"]={95,120,137,155}, +["Redridge Goulash"]={100,135,155,175}, +["Refined Dwarven Necklace"]={185,185,200,215}, +["Refined Scale of Onyxia"]={300,0,0,0}, +["Reflective Breastplate"]={300,320,330,340}, +["Reflective Helmet"]={300,320,330,340}, +["Reflective Leggings"]={300,320,330,340}, +["Reflective Pauldrons"]={300,320,330,340}, +["Regal Twilight Staff"]={240,260,275,290}, +["Reinforced Linen Cape"]={60,85,102,120}, +["Reinforced Woolen Shoulders"]={120,145,162,180}, +["Resilient Arcane Gemstone"]={300,320,330,340}, +["Restorative Potion"]={210,225,245,265}, +["Resurged Topaz Gemstone"]={300,320,330,340}, +["Rich Purple Silk Shirt"]={185,195,200,205}, +["Ring of Midnight"]={125,145,155,165}, +["Ring of Purified Silver"]={135,155,165,175}, +["Ring of The Turtle"]={160,185,195,205}, +["Ring of Unleashed Potential"]={290,320,330,340}, +["Roast Raptor"]={175,215,235,255}, +["Roasted Boar Meat"]={1,45,65,85}, +["Roasted Kodo Meat"]={35,75,95,115}, +["Robe of Power"]={190,210,225,240}, +["Robe of Sacrifice"]={300,300,300,300}, +["Robe of Winter Night"]={285,300,315,330}, +["Robe of the Archmage"]={300,315,330,345}, +["Robe of the Void"]={300,315,330,345}, +["Robes of Arcana"]={150,170,185,200}, +["Rockscale Cod"]={175,190,210,230}, +["Rose Colored Goggles"]={230,250,260,270}, +["Rough Blasting Powder"]={1,20,30,40}, +["Rough Boomstick"]={50,80,95,110}, +["Rough Bronze Boots"]={95,125,140,155}, +["Rough Bronze Bracers"]={100,140,160,180}, +["Rough Bronze Cuirass"]={105,145,160,175}, +["Rough Bronze Leggings"]={105,145,160,175}, +["Rough Bronze Ring"]={90,100,107,115}, +["Rough Bronze Shoulders"]={110,140,155,170}, +["Rough Copper Bomb"]={30,60,75,90}, +["Rough Copper Ring"]={1,21,30,40}, +["Rough Copper Vest"]={1,15,35,55}, +["Rough Dynamite"]={1,30,45,60}, +["Rough Gemstone Cluster"]={35,45,50,55}, +["Rough Gold Ring"]={150,165,170,175}, +["Rough Grinding Stone"]={25,45,65,85}, +["Rough Gritted Paper"]={1,21,25,30}, +["Rough Iron Ring"]={150,165,170,175}, +["Rough Mithril Ring"]={175,175,177,180}, +["Rough Sharpening Stone"]={1,15,35,55}, +["Rough Silver Ring"]={125,135,145,155}, +["Rough Thorium Ring"]={235,245,250,255}, +["Rough Truesilver Ring"]={200,200,205,210}, +["Rough Weightstone"]={1,15,35,55}, +["Royal Gemstone Staff"]={215,235,245,255}, +["Ruby Ring of Ruin"]={300,330,350,370}, +["Rudeus' Focusing Cane"]={300,330,340,350}, +["Rugged Armor Kit"]={250,255,265,275}, +["Rugged Leather"]={250,250,250,250}, +["Rugged Leather Pants"]={35,65,80,95}, +["Rune Edge"]={285,310,322,335}, +["Rune-Etched Breastplate"]={300,320,330,340}, +["Rune-Etched Crown"]={300,320,330,340}, +["Rune-Etched Greaves"]={300,320,330,340}, +["Rune-Etched Grips"]={300,320,330,340}, +["Rune-Etched Legplates"]={300,320,330,340}, +["Rune-Etched Mantle"]={300,320,330,340}, +["Rune-Inscribed Plate Leggings"]={300,320,330,340}, +["Runebound Amulet"]={230,230,252,275}, +["Runecloth Bag"]={260,275,290,305}, +["Runecloth Bandage"]={260,260,290,320}, +["Runecloth Belt"]={255,270,285,300}, +["Runecloth Boots"]={280,295,310,325}, +["Runecloth Cloak"]={265,280,295,310}, +["Runecloth Gloves"]={275,290,305,320}, +["Runecloth Headband"]={295,310,325,340}, +["Runecloth Pants"]={285,300,315,330}, +["Runecloth Robe"]={260,275,290,305}, +["Runecloth Shoulders"]={300,315,330,345}, +["Runecloth Tunic"]={260,275,290,305}, +["Runed Arcanite Rod"]={290,310,330,350}, +["Runed Copper Belt"]={70,110,130,150}, +["Runed Copper Bracers"]={90,115,127,140}, +["Runed Copper Breastplate"]={80,120,140,160}, +["Runed Copper Gauntlets"]={40,80,100,120}, +["Runed Copper Pants"]={45,85,105,125}, +["Runed Copper Rod"]={1,5,7,10}, +["Runed Golden Rod"]={150,175,195,215}, +["Runed Mithril Hammer"]={245,270,282,295}, +["Runed Silver Rod"]={100,130,150,170}, +["Runed Stygian Belt"]={300,315,330,345}, +["Runed Stygian Boots"]={300,315,330,345}, +["Runed Stygian Leggings"]={300,315,330,345}, +["Runed Truesilver Ring"]={220,240,250,260}, +["Runed Truesilver Rod"]={200,220,240,260}, +["Runic Breastplate"]={300,320,330,340}, +["Runic Leather Armor"]={300,320,330,340}, +["Runic Leather Belt"]={280,300,310,320}, +["Runic Leather Bracers"]={275,295,305,315}, +["Runic Leather Gauntlets"]={270,290,300,310}, +["Runic Leather Headband"]={290,310,320,330}, +["Runic Leather Pants"]={300,320,330,340}, +["Runic Leather Shoulders"]={300,320,330,340}, +["Runic Plate Boots"]={300,320,330,340}, +["Runic Plate Helm"]={300,320,330,340}, +["Runic Plate Leggings"]={300,320,330,340}, +["Runic Plate Shoulders"]={300,320,330,340}, +["Runn Tum Tuber Surprise"]={275,315,335,355}, +["Sageblade"]={300,320,330,340}, +["Sagefish Delight"]={175,215,235,255}, +["Salt Shaker"]={250,270,280,290}, +["Sandstalker Bracers"]={300,320,330,340}, +["Sandstalker Breastplate"]={300,320,330,340}, +["Sandstalker Gauntlets"]={300,320,330,340}, +["Sapphire Luminescence"]={300,320,330,340}, +["Satchel of Cenarius"]={300,315,330,345}, +["Savory Deviate Delight"]={85,125,145,165}, +["Scorpid Surprise"]={20,60,80,100}, +["Searing Golden Blade"]={190,215,227,240}, +["Seasoned Wolf Kabob"]={100,140,160,180}, +["Serenity"]={285,310,322,335}, +["Serpent's Coil Staff"]={100,120,130,140}, +["Shadow Crescent Axe"]={200,225,237,250}, +["Shadow Goggles"]={120,145,157,170}, +["Shadow Hood"]={170,190,205,220}, +["Shadow Oil"]={165,190,210,230}, +["Shadow Protection Potion"]={135,160,180,200}, +["Shadoweave Boots"]={240,255,270,285}, +["Shadoweave Gloves"]={225,240,255,270}, +["Shadoweave Mask"]={245,260,275,290}, +["Shadoweave Pants"]={210,225,240,255}, +["Shadoweave Robe"]={215,230,245,260}, +["Shadoweave Shoulders"]={235,250,265,280}, +["Shadowfall Jewel"]={100,120,130,140}, +["Shadowforged Eye"]={85,105,115,125}, +["Shadowgem Band"]={105,125,135,145}, +["Shadowmoon Orb"]={85,105,115,125}, +["Shadowskin Boots"]={205,225,230,235}, +["Shadowskin Gloves"]={200,210,220,230}, +["Sharpened Citrine Gemstone"]={200,205,207,210}, +["Sharpened Claw"]={75,90,95,100}, +["Shifting Cloak"]={300,320,330,340}, +["Shimmering Aqua Gemstone"]={150,155,157,160}, +["Shimmering Bronze Ring"]={90,105,112,120}, +["Shimmering Diamond Band"]={300,320,330,340}, +["Shimmering Gold Necklace"]={190,205,215,225}, +["Shimmering Moonstone Tablet"]={195,195,217,240}, +["Shining Copper Cuffs"]={80,100,110,120}, +["Shining Sapphire Gemstone"]={250,0,0,0}, +["Shining Silver Breastplate"]={145,175,190,205}, +["Silk Bandage"]={150,150,180,210}, +["Silk Headband"]={160,170,175,180}, +["Silver Contact"]={90,110,125,140}, +["Silver Medallion"]={135,150,160,170}, +["Silver Rod"]={100,105,107,110}, +["Silver Skeleton Key"]={100,100,110,120}, +["Silver-plated Shotgun"]={130,155,167,180}, +["Silvered Bronze Boots"]={130,160,175,190}, +["Silvered Bronze Breastplate"]={130,160,175,190}, +["Silvered Bronze Gauntlets"]={135,165,180,195}, +["Silvered Bronze Leggings"]={155,180,192,205}, +["Silvered Bronze Shoulders"]={125,155,170,185}, +["Simple Black Dress"]={235,240,245,250}, +["Simple Dress"]={40,65,82,100}, +["Simple Kilt"]={75,100,117,135}, +["Simple Linen Boots"]={20,50,67,85}, +["Simple Linen Pants"]={1,35,47,60}, +["Skyfire Jewel"]={210,280,290,300}, +["Slitherskin Mackerel"]={1,45,65,85}, +["Small Blue Rocket"]={125,125,137,150}, +["Small Bronze Bomb"]={120,120,145,170}, +["Small Green Rocket"]={125,125,137,150}, +["Small Leather Ammo Pouch"]={30,60,75,90}, +["Small Pearl Ring"]={65,85,92,100}, +["Small Pearlstone Staff"]={55,75,82,90}, +["Small Red Rocket"]={125,125,137,150}, +["Small Seaforium Charge"]={100,130,145,160}, +["Small Silk Pack"]={150,170,185,200}, +["Smelt Bronze"]={65,65,90,115}, +["Smelt Copper"]={1,25,45,70}, +["Smelt Dark Iron"]={230,230,230,230}, +["Smelt Dreamsteel"]={300,350,362,375}, +["Smelt Elementium"]={300,350,362,375}, +["Smelt Gold"]={155,170,177,185}, +["Smelt Iron"]={125,125,130,140}, +["Smelt Mithril"]={175,175,175,175}, +["Smelt Silver"]={75,100,112,125}, +["Smelt Steel"]={165,165,165,165}, +["Smelt Thorium"]={250,250,250,250}, +["Smelt Tin"]={65,65,70,75}, +["Smelt Truesilver"]={230,230,230,230}, +["Smoked Bear Meat"]={40,80,100,120}, +["Smoked Desert Dumplings"]={285,325,345,365}, +["Smoked Sagefish"]={80,120,140,160}, +["Smoking Heart of the Mountain"]={265,285,305,325}, +["Smoldering Brooch"]={200,220,230,240}, +["Snake Burst Firework"]={250,250,260,270}, +["Sniper Scope"]={240,260,270,280}, +["SnowMaster 9000"]={190,0,0,0}, +["Soft-soled Linen Boots"]={80,105,122,140}, +["Softglow Ring"]={65,85,92,100}, +["Solid Blasting Powder"]={175,175,185,195}, +["Solid Dynamite"]={175,175,185,195}, +["Solid Gemstone Cluster"]={200,200,205,210}, +["Solid Grinding Stone"]={200,200,205,210}, +["Solid Gritted Paper"]={200,200,205,210}, +["Solid Iron Maul"]={155,180,192,205}, +["Solid Sharpening Stone"]={200,200,205,210}, +["Solid Weightstone"]={200,200,205,210}, +["Soothing Turtle Bisque"]={175,215,235,255}, +["Soul Pouch"]={260,275,290,305}, +["South Seas Pirate Disguise"]={1,0,0,0}, +["Specter's Shade Ring"]={180,0,0,0}, +["Spellpower Goggles Xtreme"]={225,245,255,265}, +["Spellpower Goggles Xtreme Plus"]={270,290,300,310}, +["Spellweaver Pendant"]={265,275,285,295}, +["Spellweaver Rod"]={265,285,292,300}, +["Spellwoven Nobility Drape"]={300,0,0,0}, +["Sphinx's Wisdom Staff"]={170,190,200,210}, +["Spiced Chili Crab"]={225,265,285,305}, +["Spiced Wolf Meat"]={10,50,70,90}, +["Spider Belt"]={180,200,215,230}, +["Spider Sausage"]={200,240,260,280}, +["Spider Silk Slippers"]={140,160,175,190}, +["Spidersilk Boots"]={125,150,167,185}, +["Spire of Channeled Power"]={300,325,335,345}, +["Spitfire Bracers"]={300,320,330,340}, +["Spitfire Breastplate"]={300,320,330,340}, +["Spitfire Gauntlets"]={300,320,330,340}, +["Spotted Yellowtail"]={225,265,285,305}, +["Staff of Blossomed Jade"]={165,185,195,205}, +["Staff of Gallitrea"]={200,225,235,245}, +["Standard Scope"]={110,135,147,160}, +["Star Belt"]={200,220,235,250}, +["Starforge Amulet"]={220,220,240,260}, +["Starry Thorium Band"]={260,260,275,290}, +["Steel Belt Buckle"]={200,195,200,205}, +["Steel Breastplate"]={200,225,237,250}, +["Steel Plate Armor"]={225,225,225,225}, +["Steel Plate Barbute"]={230,230,230,230}, +["Steel Plate Boots"]={220,220,220,220}, +["Steel Plate Gauntlets"]={220,220,220,220}, +["Steel Plate Helm"]={215,235,245,255}, +["Steel Plate Legguards"]={225,225,225,225}, +["Steel Plate Pauldrons"]={230,230,230,230}, +["Steel Weapon Chain"]={190,215,227,240}, +["Stellar Gemguards"]={270,0,0,0}, +["Stellar Ruby Ring"]={300,0,0,0}, +["Stonescale Oil"]={250,250,255,260}, +["Stonesplinter Trogg Disguise"]={1,0,0,0}, +["Storm Gauntlets"]={295,315,325,335}, +["Stormcloth Boots"]={250,265,280,295}, +["Stormcloth Gloves"]={220,235,250,265}, +["Stormcloth Headband"]={240,255,270,285}, +["Stormcloth Pants"]={220,235,250,265}, +["Stormcloth Shoulders"]={245,260,275,290}, +["Stormcloth Vest"]={225,240,255,270}, +["Stormcloud Shackles"]={300,0,0,0}, +["Stormcloud Sigil"]={290,310,325,340}, +["Stormcloud Signet"]={290,310,320,330}, +["Stormreaver Gloves"]={185,0,0,0}, +["Stormscale Leggings"]={300,300,300,300}, +["Stormshroud Armor"]={285,305,315,325}, +["Stormshroud Gloves"]={300,320,330,340}, +["Stormshroud Pants"]={275,295,305,315}, +["Stormshroud Shoulders"]={295,315,325,335}, +["Strider Stew"]={50,90,110,130}, +["Strong Anti-Venom"]={130,130,165,200}, +["Strong Troll's Blood Potion"]={125,150,170,190}, +["Stronghold Gauntlets"]={300,320,330,340}, +["Stunning Imperial Gemstone"]={300,310,315,320}, +["Sturdy Copper Ring"]={25,45,52,60}, +["Stylish Blue Shirt"]={120,145,162,180}, +["Stylish Green Shirt"]={120,145,162,180}, +["Stylish Red Shirt"]={110,135,152,170}, +["Succulent Pork Ribs"]={110,130,150,170}, +["Sulfuron Hammer"]={300,325,337,350}, +["Sunburst Tiara"]={250,250,270,290}, +["Superior Healing Potion"]={215,230,250,270}, +["Superior Mana Potion"]={260,275,295,315}, +["Swift Boots"]={200,220,230,240}, +["Swift Flight Bracers"]={300,320,330,340}, +["Swiftness Potion"]={60,90,110,130}, +["Swim Speed Potion"]={100,130,150,170}, +["Sylvan Crown"]={300,315,330,345}, +["Sylvan Shoulders"]={300,315,330,345}, +["Sylvan Vest"]={300,315,330,345}, +["Syndicate Disguise"]={1,0,0,0}, +["Talisman of Hinderance"]={300,320,330,340}, +["Talisman of Stone"]={100,125,135,145}, +["Target Dummy"]={85,115,130,145}, +["Tasty Lion Steak"]={150,190,210,230}, +["Tempered Azerothian Gemstone"]={275,280,282,285}, +["Tender Wolf Steak"]={225,265,285,305}, +["The Big One"]={235,235,255,275}, +["The Golden Goblet"]={175,195,202,210}, +["The King's Conviction"]={85,105,115,125}, +["The Mortar: Reloaded"]={205,205,205,205}, +["The Shatterer"]={235,260,272,285}, +["Thick Armor Kit"]={200,220,230,240}, +["Thick Leather"]={200,200,202,205}, +["Thick Leather Ammo Pouch"]={225,245,255,265}, +["Thick Murloc Armor"]={170,190,200,210}, +["Thick Obsidian Breastplate"]={300,320,330,340}, +["Thick War Axe"]={70,110,130,150}, +["Thistle Tea"]={60,100,120,140}, +["Thorium Armor"]={250,270,280,290}, +["Thorium Belt"]={250,270,280,290}, +["Thorium Belt Buckle"]={240,265,277,290}, +["Thorium Boots"]={280,300,310,320}, +["Thorium Bracers"]={255,275,285,295}, +["Thorium Greatsword"]={260,285,297,310}, +["Thorium Grenade"]={260,280,290,300}, +["Thorium Helm"]={280,300,310,320}, +["Thorium Leggings"]={300,320,330,340}, +["Thorium Rifle"]={260,280,290,300}, +["Thorium Shells"]={285,305,315,325}, +["Thorium Shield Spike"]={275,295,305,315}, +["Thorium Spurs"]={275,300,310,320}, +["Thorium Tube"]={275,295,305,315}, +["Thorium Widget"]={260,280,290,300}, +["Tigercrest Ring"]={50,70,77,85}, +["Timbermaw Brawlers"]={300,320,330,340}, +["Titanic Leggings"]={300,320,330,340}, +["Topaz Studded Ring"]={70,90,95,100}, +["Totem of Self Preservation"]={135,155,165,175}, +["Tough Scorpid Boots"]={235,255,265,275}, +["Tough Scorpid Bracers"]={220,240,250,260}, +["Tough Scorpid Breastplate"]={220,240,250,260}, +["Tough Scorpid Gloves"]={225,245,255,265}, +["Tough Scorpid Helm"]={250,270,280,290}, +["Tough Scorpid Leggings"]={245,265,275,285}, +["Tough Scorpid Shoulders"]={240,260,270,280}, +["Toughened Leather Armor"]={120,145,157,170}, +["Toughened Leather Gloves"]={135,160,172,185}, +["Towerforge Breastplate"]={300,325,337,350}, +["Towerforge Crown"]={300,325,337,350}, +["Towerforge Demolisher"]={300,325,337,350}, +["Towerforge Pauldrons"]={300,325,337,350}, +["Tranquil Mechanical Yeti"]={250,320,330,340}, +["Transmute: Air to Fire"]={275,275,282,290}, +["Transmute: Arcanite"]={275,275,282,290}, +["Transmute: Earth to Life"]={275,275,282,290}, +["Transmute: Earth to Water"]={275,275,282,290}, +["Transmute: Elemental Earth"]={300,315,322,330}, +["Transmute: Elemental Fire"]={300,301,305,310}, +["Transmute: Elemental Water"]={300,315,322,330}, +["Transmute: Fire to Earth"]={275,275,282,290}, +["Transmute: Iron to Gold"]={225,240,260,280}, +["Transmute: Life to Earth"]={275,275,282,290}, +["Transmute: Mithril to Truesilver"]={225,240,260,280}, +["Transmute: Undeath to Water"]={275,275,282,290}, +["Transmute: Water to Air"]={275,275,282,290}, +["Transmute: Water to Undeath"]={275,275,282,290}, +["Truefaith Gloves"]={150,170,185,200}, +["Truefaith Vestments"]={300,315,330,345}, +["Truesilver Belt Buckle"]={225,225,230,235}, +["Truesilver Breastplate"]={245,265,275,285}, +["Truesilver Champion"]={260,285,297,310}, +["Truesilver Gauntlets"]={225,245,255,265}, +["Truesilver Rod"]={200,205,207,210}, +["Truesilver Skeleton Key"]={200,200,210,220}, +["Truesilver Transformer"]={260,270,275,280}, +["Turtle Scale Bracers"]={210,230,240,250}, +["Turtle Scale Breastplate"]={210,230,240,250}, +["Turtle Scale Gloves"]={205,225,235,245}, +["Turtle Scale Helm"]={230,250,260,270}, +["Turtle Scale Leggings"]={235,255,265,275}, +["Tuxedo Jacket"]={250,265,280,295}, +["Tuxedo Pants"]={245,250,255,260}, +["Tuxedo Shirt"]={240,245,250,255}, +["Twilight Opal Cascade"]={300,0,0,0}, +["Ultra-Flash Shadow Reflector"]={300,320,330,340}, +["Ultrasafe Transporter - Gadgetzan"]={260,0,0,0}, +["Undermine Clam Chowder"]={225,265,285,305}, +["Unstable Arcane Gemstone"]={275,0,0,0}, +["Unstable Mining Dynamite"]={75,90,97,105}, +["Unstable Trigger"]={200,200,220,240}, +["Untempered Runeblade"]={300,320,330,340}, +["Venomspire Diadem"]={145,165,175,185}, +["Verdant Dreamer's Breastplate"]={300,300,300,300}, +["Vitriol Brooch"]={205,220,227,235}, +["Voice Amplification Modulator"]={290,310,320,330}, +["Voidheart Charm"]={280,280,300,320}, +["Volatile Concoction"]={75,0,0,0}, +["Volcanic Breastplate"]={285,305,315,325}, +["Volcanic Hammer"]={290,315,327,340}, +["Volcanic Leggings"]={270,290,300,310}, +["Volcanic Shoulders"]={300,320,330,340}, +["Voltage-Neutralizing Nature Reflector"]={290,310,320,330}, +["Warbear Harness"]={275,295,305,315}, +["Warbear Woolies"]={285,305,315,325}, +["Weak Troll's Blood Potion"]={15,60,80,100}, +["Westfall Stew"]={75,115,135,155}, +["Whirring Bronze Gizmo"]={125,125,150,175}, +["White Bandit Mask"]={215,220,225,230}, +["White Leather Jerkin"]={60,90,105,120}, +["White Linen Robe"]={30,55,72,90}, +["White Linen Shirt"]={1,35,47,60}, +["White Swashbuckler's Shirt"]={160,170,175,180}, +["White Wedding Dress"]={250,255,260,265}, +["White Woolen Dress"]={110,135,152,170}, +["Whitesoul Helm"]={300,320,330,340}, +["Wicked Leather Armor"]={300,320,330,340}, +["Wicked Leather Belt"]={300,320,330,340}, +["Wicked Leather Bracers"]={265,285,295,305}, +["Wicked Leather Gauntlets"]={260,280,290,300}, +["Wicked Leather Headband"]={280,300,310,320}, +["Wicked Leather Pants"]={290,310,320,330}, +["Wicked Mithril Blade"]={225,250,262,275}, +["Wild Leather Boots"]={245,265,275,285}, +["Wild Leather Cloak"]={250,270,280,290}, +["Wild Leather Helmet"]={225,245,255,265}, +["Wild Leather Leggings"]={250,270,280,290}, +["Wild Leather Shoulders"]={220,240,250,260}, +["Wild Leather Vest"]={225,245,255,265}, +["Wildthorn Mail"]={270,290,300,310}, +["Wildvine Potion"]={225,240,260,280}, +["Windbinder Gloves"]={300,315,330,345}, +["Windwalker Boots"]={300,300,300,300}, +["Wisdom of the Timbermaw"]={290,305,320,335}, +["Wizard Oil"]={275,285,295,305}, +["Wizardweave Leggings"]={275,290,305,320}, +["Wizardweave Robe"]={300,315,330,345}, +["Wizardweave Turban"]={300,315,330,345}, +["Wolfshead Helm"]={225,245,255,265}, +["Wool Bandage"]={80,80,115,150}, +["Woolen Bag"]={80,105,122,140}, +["Woolen Boots"]={95,120,137,155}, +["Woolen Cape"]={75,100,117,135}, +["World Enlarger"]={260,260,265,270}, +["Wound Poison"]={1,185,210,235}, +["Wound Poison II"]={180,0,0,0}, +["Wound Poison III"]={220,0,0,0}, +["Wound Poison IV"]={260,0,0,0}, +["一把螺栓"]={30,45,52,60}, +["不牢固的扳机"]={200,200,220,240}, +["不稳定的奥术宝石"]={275,0,0,0}, +["不稳定的混合物"]={75,0,0,0}, +["不稳定的采矿炸药"]={75,90,97,105}, +["世界放大器"]={260,260,265,270}, +["丛林大杂烩"]={175,215,235,255}, +["丝绸卷"]={125,135,140,145}, +["丝绸小包"]={150,170,185,200}, +["丝质头带"]={160,170,175,180}, +["丝质绷带"]={150,150,180,210}, +["丝质长披风"]={185,205,220,235}, +["中型护甲片"]={100,115,122,130}, +["中皮"]={100,100,105,110}, +["乌木刀"]={255,280,292,305}, +["乌木戒指"]={75,95,105,115}, +["乌龟戒指"]={160,185,195,205}, +["亚麻包"]={45,70,87,105}, +["亚麻布卷"]={1,25,37,50}, +["亚麻披风"]={1,35,47,60}, +["亚麻绷带"]={1,30,45,60}, +["亚麻腰带"]={15,50,67,85}, +["亚麻靴"]={65,90,107,125}, +["亮布手套"]={270,285,300,315}, +["亮布披风"]={275,290,305,320}, +["亮布短裤"]={290,305,320,335}, +["亮布长袍"]={270,285,300,315}, +["亮铜项链"]={65,85,92,100}, +["亮闪闪的钢匕首"]={180,205,217,230}, +["仇恨熔炉头盔"]={290,300,310,320}, +["仇恨熔炉护手"]={285,300,310,320}, +["仇恨熔炉护腿"]={290,300,310,320}, +["仇恨熔炉胸甲"]={290,300,310,320}, +["仇恨熔炉腰带"]={275,300,312,325}, +["仇恨熔炉靴子"]={275,300,310,320}, +["仿真机械蛙"]={265,285,295,305}, +["优质治疗药水"]={215,230,250,270}, +["优质法力药水"]={260,275,295,315}, +["优质皮外套"]={85,115,130,145}, +["优质皮带"]={80,110,125,140}, +["优质皮手套"]={75,105,120,135}, +["优质皮披风"]={85,105,120,135}, +["优质皮裤"]={105,130,142,155}, +["优质皮靴"]={90,120,135,150}, +["优雅翡翠"]={250,0,0,0}, +["体面的白衬衣"]={170,180,185,190}, +["侏儒作战小鸡"]={230,250,260,270}, +["侏儒微调器"]={175,175,195,215}, +["侏儒护目镜"]={210,230,240,250}, +["侏儒撒网器"]={210,230,240,250}, +["侏儒死亡射线"]={240,260,270,280}, +["侏儒洗脑帽"]={235,255,265,275}, +["侏儒火箭靴"]={225,245,255,265}, +["侏儒缩小射线"]={205,225,235,245}, +["侏儒通用遥控器"]={125,150,162,175}, +["侏儒防护腰带"]={215,235,245,255}, +["侏儒隐形装置"]={200,220,230,240}, +["侦测亡灵药剂"]={230,245,265,285}, +["侦测恶魔药剂"]={250,265,285,305}, +["侦测次级隐形药剂"]={195,215,235,255}, +["便携式虫洞发生器 - 奥格瑞玛"]={125,0,0,0}, +["便携式虫洞发生器 - 暴风城"]={125,0,0,0}, +["便携式青铜迫击炮"]={165,185,195,205}, +["信念外衣"]={300,315,330,345}, +["信念手套"]={150,170,185,200}, +["修理机器人74A型"]={300,320,330,340}, +["修道院灰烬护腕"]={170,185,195,205}, +["偏斜护肩"]={300,315,322,330}, +["元素磨刀石"]={300,300,310,320}, +["充能奥妮克希亚鳞片"]={300,0,0,0}, +["先知之刃"]={300,320,330,340}, +["先知药剂"]={265,280,300,320}, +["光亮护腕"]={300,320,330,340}, +["光芒之怒指环"]={300,320,330,340}, +["光芒手套"]={300,315,330,345}, +["光芒护腕"]={300,315,330,345}, +["光芒护腿"]={300,315,330,345}, +["光芒衬肩"]={300,315,330,345}, +["光芒长袍"]={300,315,330,345}, +["光辉蓝宝石戒指"]={300,320,330,340}, +["克劳福德苹果挞"]={175,0,0,0}, +["免伤锁甲"]={300,320,330,340}, +["公式:附魔护腕 - 敏捷"]={185,0,0,0}, +["兽人护腿"]={210,250,260,270}, +["农夫伪装"]={1,0,0,0}, +["冥想手套"]={130,150,165,180}, +["冬夜法袍"]={285,300,315,330}, +["冬天爷爷的手套"]={190,210,220,230}, +["冰川外衣"]={300,315,330,345}, +["冰川手套"]={300,315,330,345}, +["冰川护腕"]={300,315,330,345}, +["冰川披风"]={300,315,330,345}, +["冰覆披风"]={200,220,235,250}, +["冰霜之力药剂"]={190,210,230,250}, +["冰霜之油"]={200,220,240,260}, +["冰霜皮质披风"]={180,200,210,220}, +["冰霜缚斩者"]={180,190,195,200}, +["冰霜防护药水"]={190,205,225,245}, +["冷木斧"]={270,290,300,310}, +["净化药水"]={285,300,320,340}, +["凤凰手套"]={125,150,167,185}, +["凤凰短裤"]={125,150,167,185}, +["初级坚韧药剂"]={50,80,100,120}, +["初级巫师之油"]={45,0,0,0}, +["初级抗魔药水"]={110,135,155,175}, +["初级敏捷药剂"]={50,80,100,120}, +["初级治疗药水"]={1,55,75,95}, +["初级法力之油"]={150,0,0,0}, +["初级法力药水"]={25,65,85,105}, +["初级活力药水"]={40,70,90,110}, +["初级防御药剂"]={1,55,75,95}, +["刺花护腕"]={105,125,135,145}, +["刺须鲶鱼"]={100,140,160,180}, +["力反馈盾牌"]={300,320,330,340}, +["力量法袍"]={190,210,225,240}, +["加列拉之杖"]={200,225,235,245}, +["加速药水"]={300,315,322,330}, +["劣质平衡石"]={1,15,35,55}, +["劣质火枪"]={50,80,95,110}, +["劣质火药"]={1,20,30,40}, +["劣质炸药"]={1,30,45,60}, +["劣质瑟银戒指"]={125,135,145,155}, +["劣质的宝石串"]={35,45,50,55}, +["劣质的铜戒指"]={1,21,30,40}, +["劣质真银戒指"]={200,200,205,210}, +["劣质砂纸"]={1,21,25,30}, +["劣质砂轮"]={25,45,65,85}, +["劣质磨刀石"]={1,15,35,55}, +["劣质秘银戒指"]={175,175,177,180}, +["劣质铜壳炸弹"]={30,60,75,90}, +["劣质铜外衣"]={1,15,35,55}, +["劣质青铜战靴"]={95,125,140,155}, +["劣质青铜护肩"]={110,140,155,170}, +["劣质青铜护腕"]={100,140,160,180}, +["劣质青铜护腿"]={105,145,160,175}, +["劣质青铜胸甲"]={105,145,160,175}, +["化石合剂"]={300,315,322,330}, +["北极外套"]={300,320,330,340}, +["北极手套"]={300,320,330,340}, +["北极护腕"]={300,320,330,340}, +["午夜之戒"]={125,145,155,165}, +["午夜吊坠"]={120,145,155,165}, +["半人马战甲"]={300,320,330,340}, +["半人马指环"]={160,180,190,200}, +["半人马权威护肩"]={300,320,330,340}, +["华丽山地宝石"]={300,330,345,360}, +["华丽瑟银手斧"]={275,300,312,325}, +["华丽的秘银权杖"]={200,220,230,240}, +["华丽秘银手镯"]={200,225,237,250}, +["华丽血石匕首"]={300,320,330,340}, +["卓越巫师之油"]={300,0,0,0}, +["卓越法力之油"]={300,0,0,0}, +["南海海盗伪装"]={1,0,0,0}, +["占卜者兜帽"]={230,230,230,230}, +["占卜者手套"]={225,225,225,225}, +["占卜者护肩"]={230,230,230,230}, +["占卜者裤子"]={230,230,230,230}, +["占卜者长袍"]={235,235,235,235}, +["占卜者鞋子"]={225,225,225,225}, +["卡多雷蜘蛛烤肉"]={10,50,70,90}, +["厚丝质绷带"]={180,180,210,240}, +["厚亚麻绷带"]={40,50,75,100}, +["厚皮"]={200,200,202,205}, +["厚皮弹药包"]={225,245,255,265}, +["厚符文布绷带"]={290,290,320,350}, +["厚绒线绷带"]={115,115,150,185}, +["厚重战斧"]={70,110,130,150}, +["厚重护甲片"]={200,220,230,240}, +["厚重的宝石串"]={150,150,152,155}, +["厚重砂纸"]={150,150,155,160}, +["厚重黑曜石胸甲"]={300,320,330,340}, +["厚魔纹绷带"]={240,240,270,300}, +["厚鱼人皮甲"]={170,190,200,210}, +["原始水晶石"]={150,155,157,160}, +["原始蝙蝠皮外套"]={300,320,330,340}, +["原始蝙蝠皮手套"]={300,320,330,340}, +["原始蝙蝠皮护腕"]={300,320,330,340}, +["双线毛纺护肩"]={110,135,152,170}, +["发条娃娃"]={205,205,205,205}, +["发条式同步协调陀螺仪"]={170,170,190,210}, +["古代法老智慧之杖"]={170,190,200,210}, +["古代矮人宝石"]={185,185,195,205}, +["古拉巴什浓汤"]={300,300,300,300}, +["古拉巴什魔精"]={300,315,322,330}, +["吉尔尼斯热炖菜"]={200,240,260,280}, +["君王板甲头盔"]={295,315,325,335}, +["君王板甲战靴"]={295,315,325,335}, +["君王板甲护肩"]={265,285,295,305}, +["君王板甲护胸"]={300,320,330,340}, +["君王板甲护腕"]={270,290,300,310}, +["君王板甲护腿"]={300,320,330,340}, +["君王板甲腰带"]={265,285,295,305}, +["啤酒烤猪排"]={25,60,80,100}, +["图样:暴掠手套"]={185,0,0,0}, +["圆润翡翠"]={175,180,182,185}, +["土灵丝质腰带"]={195,215,230,245}, +["土灵外衣"]={170,190,205,220}, +["土灵皮护肩"]={135,160,172,185}, +["地狱火手套"]={300,315,330,345}, +["地狱灾祸手杖"]={160,180,190,200}, +["地精工兵炸药"]={205,205,225,245}, +["地精施工头盔"]={205,225,235,245}, +["地精无线电"]={225,240,250,260}, +["地精暗雷"]={195,215,225,235}, +["地精火箭头盔"]={245,265,275,285}, +["地精火箭燃油"]={210,225,245,265}, +["地精火箭燃油配方"]={205,205,205,205}, +["地精火箭靴"]={225,245,255,265}, +["地精炸弹箱"]={230,230,250,270}, +["地精芥末蘸蚌肉"]={125,165,185,205}, +["地精起搏器"]={165,165,180,200}, +["地精起搏器XL型"]={265,285,295,305}, +["地精迫击炮"]={205,225,235,245}, +["地精采矿头盔"]={205,225,235,245}, +["地精龙枪"]={240,260,270,280}, +["坚固的平衡石"]={200,200,205,210}, +["坚固的砂轮"]={200,200,205,210}, +["坚固的磨刀石"]={200,200,205,210}, +["坚固砂纸"]={200,200,205,210}, +["坚硬的铜戒指"]={25,45,52,60}, +["坚韧药剂"]={175,195,215,235}, +["塔铸皇冠"]={300,325,337,350}, +["塔铸破坏者"]={300,325,337,350}, +["塔铸肩铠"]={300,325,337,350}, +["塔铸胸甲"]={300,325,337,350}, +["塞纳留斯之袋"]={300,315,330,345}, +["塞纳里奥草药包"]={275,290,305,320}, +["增亮护目镜"]={175,195,205,215}, +["增长药剂"]={90,120,140,160}, +["多彩护手"]={300,320,330,340}, +["多彩护腿"]={300,300,300,300}, +["多彩披风"]={300,320,330,340}, +["多彩褶裙"]={120,145,162,180}, +["多汁猪排"]={110,130,150,170}, +["多重抗性合剂"]={300,315,322,330}, +["夜幕"]={300,320,330,340}, +["夜色外套"]={205,225,235,245}, +["夜色头带"]={205,225,235,245}, +["夜色护肩"]={210,230,240,250}, +["夜色披风"]={230,250,260,270}, +["夜色短裤"]={230,250,260,270}, +["夜色长靴"]={235,255,265,275}, +["夜视步枪"]={145,170,182,195}, +["夜鳞鱼汤"]={250,290,310,330}, +["大口径秘银步枪"]={220,240,250,260}, +["大地卫士外套"]={300,300,300,300}, +["大地胸甲"]={265,0,0,0}, +["大块的熊排"]={110,150,170,190}, +["大型爆盐炸弹"]={200,200,220,240}, +["大型红色烟花"]={175,175,187,200}, +["大型红色烟花束"]={275,275,280,285}, +["大型绿色烟花"]={175,175,187,200}, +["大型绿色烟花束"]={275,275,280,285}, +["大型蓝色烟花"]={175,175,187,200}, +["大型蓝色烟花束"]={275,275,280,285}, +["大型铜壳炸弹"]={105,105,130,155}, +["大师长袍"]={115,140,157,175}, +["大法师之袍"]={300,315,330,345}, +["大法师腰带"]={300,315,330,345}, +["大炸弹"]={235,235,255,275}, +["大酋长头盔"]={300,320,330,340}, +["大附魔袋"]={300,315,330,345}, +["大鱼片"]={275,315,335,355}, +["天火宝石戒指"]={210,280,290,300}, +["天蓝星火"]={265,265,285,305}, +["天青石胸针"]={205,220,227,235}, +["奇美拉外衣"]={290,310,320,330}, +["奇美拉手套"]={265,270,280,290}, +["奇美拉护腿"]={280,300,310,320}, +["奇美拉长靴"]={275,295,305,315}, +["奢华宝石项链"]={80,100,110,120}, +["奥妮克希亚鳞片披风"]={300,320,330,340}, +["奥妮克希亚鳞片胸甲"]={300,0,0,0}, +["奥术光辉吊坠"]={280,300,305,310}, +["奥术炸弹"]={300,320,330,340}, +["奥术翡翠"]={295,300,302,305}, +["奥法之袍"]={150,170,185,200}, +["奥法巨人药剂"]={300,310,330,350}, +["奥法药剂"]={235,250,270,290}, +["奥秘之杖"]={300,320,330,340}, +["奥金万能钥匙"]={275,275,280,285}, +["奥金圣剑"]={300,320,330,340}, +["奥金带扣"]={300,325,337,350}, +["奥金幼龙"]={300,320,330,340}, +["奥金斧"]={300,320,330,340}, +["奥金棒"]={275,275,280,285}, +["姜饼"]={1,45,65,85}, +["嫩狼肉排"]={225,265,285,305}, +["孔雀石戒指"]={20,40,47,55}, +["宇宙外衣"]={300,300,300,300}, +["宇宙头饰"]={300,300,300,300}, +["宇宙护腿"]={300,300,300,300}, +["宇宙衬肩"]={300,300,300,300}, +["守御护符"]={300,320,330,340}, +["守护之甲"]={175,195,205,215}, +["守护图腾"]={135,155,165,175}, +["守护手套"]={190,210,220,230}, +["守护披风"]={185,205,215,225}, +["守护短裤"]={160,180,190,200}, +["守护腕甲"]={195,215,225,235}, +["守护腰带"]={170,190,200,210}, +["安全传送器 - 加基森"]={260,0,0,0}, +["安德麦蚌肉杂烩"]={225,265,285,305}, +["安静的机械雪人"]={250,320,330,340}, +["完美的奥金步枪"]={300,320,330,340}, +["宝石商的魔棒"]={235,0,0,0}, +["宝石皮带"]={185,205,215,225}, +["宝石瞄准镜"]={225,140,147,155}, +["宝石纲要"]={275,275,297,320}, +["宝石透镜"]={125,140,147,155}, +["宝石项圈"]={160,180,190,200}, +["实心炸弹"]={175,175,185,195}, +["实心炸药"]={175,175,185,195}, +["寒冬之刃"]={190,215,227,240}, +["寒冰偏斜器"]={155,175,185,195}, +["寒冰护卫者"]={300,320,330,340}, +["寒鳞护手"]={300,320,330,340}, +["寒鳞护腕"]={300,320,330,340}, +["寒鳞胸甲"]={300,320,330,340}, +["寻心者"]={300,320,330,340}, +["导尘者腰带"]={300,315,330,345}, +["封印雕饰"]={245,245,265,285}, +["将军之帽"]={240,255,270,285}, +["小型巨魔血戒"]={50,70,80,90}, +["小型强固戒指"]={50,70,77,85}, +["小型爆盐炸弹"]={100,130,145,160}, +["小型珍珠戒指"]={65,85,92,100}, +["小型红色烟花"]={125,125,137,150}, +["小型绿色烟花"]={125,125,137,150}, +["小型蓝色烟花"]={125,125,137,150}, +["小型青铜炸弹"]={120,120,145,170}, +["小珍珠法杖"]={55,75,82,90}, +["尖锐黄水晶"]={200,205,207,210}, +["屠魔药剂"]={250,265,285,305}, +["山地护肩"]={130,155,167,180}, +["山地披风"]={150,170,180,190}, +["山地皮外衣"]={100,125,137,150}, +["山地皮手套"]={145,170,182,195}, +["山地腰带"]={120,145,157,170}, +["山狗肉排"]={50,90,110,130}, +["山猫步靴"]={75,0,0,0}, +["岩石戒指"]={100,120,130,140}, +["崇高领主甲胄"]={300,320,330,340}, +["工匠眼镜"]={185,205,215,225}, +["巧克力鱼"]={300,300,300,300}, +["巨人药剂"]={245,260,280,300}, +["巨型宝石指环"]={300,0,0,0}, +["巨型瑟银战斧"]={280,305,317,330}, +["巨型铁斧"]={185,210,222,235}, +["巨型铁锤"]={145,175,190,205}, +["巨型黑色锤"]={230,255,267,280}, +["巫师之油"]={275,0,0,0}, +["巫术师兜帽"]={165,185,200,215}, +["巫毒披风"]={240,260,270,280}, +["巫毒短裤"]={240,260,270,280}, +["巫毒长袍"]={215,235,245,255}, +["巫毒面具"]={220,240,250,260}, +["巫纹头巾"]={300,315,330,345}, +["巫纹护腿"]={275,290,305,320}, +["巫纹长袍"]={300,315,330,345}, +["帝国板甲护手"]={270,280,285,290}, +["干烤狼肉串"]={100,140,160,180}, +["平静"]={285,310,322,335}, +["幻光宝玉"]={200,205,205,205}, +["幻彩吊坠"]={300,300,307,315}, +["幻影之刃"]={245,270,282,295}, +["幻象染料"]={245,260,280,300}, +["幽影墨玉"]={260,265,267,270}, +["幽灵戒指"]={180,0,0,0}, +["弱效巨魔之血药水"]={15,60,80,100}, +["强力净化器"]={275,285,290,295}, +["强力嗅盐"]={300,300,330,360}, +["强力巨魔之血药水"]={125,150,170,190}, +["强力抗毒药剂"]={130,130,165,200}, +["强力爆盐炸弹"]={275,275,285,295}, +["强化亚麻斗篷"]={60,85,102,120}, +["强化毛纺护肩"]={120,145,162,180}, +["强效冰霜之力药剂"]={300,300,315,330}, +["强效冰霜防护药水"]={290,305,325,345}, +["强效奥术之力药剂"]={300,300,315,330}, +["强效奥术防护药水"]={290,305,325,345}, +["强效奥法药剂"]={285,300,320,340}, +["强效怒气药水"]={255,270,290,310}, +["强效敏捷药剂"]={240,255,275,295}, +["强效昏睡药水"]={275,290,310,330}, +["强效暗影防护药水"]={290,305,325,345}, +["强效水下呼吸药剂"]={215,230,250,270}, +["强效治疗药水"]={155,175,195,215}, +["强效法力药水"]={205,220,240,260}, +["强效火力药剂"]={250,265,285,305}, +["强效火焰防护药水"]={290,305,325,345}, +["强效石盾药水"]={280,295,315,335}, +["强效神圣防护药水"]={290,305,325,345}, +["强效禁锢徽记"]={210,230,240,250}, +["强效秘法杖"]={175,0,0,0}, +["强效聪颖药剂"]={235,250,270,290}, +["强效自然力量药剂"]={300,315,322,330}, +["强效自然防护药水"]={290,305,325,345}, +["强效防御药剂"]={195,215,235,255}, +["强效魔法杖"]={70,0,0,0}, +["强能草药沙拉"]={300,325,345,365}, +["强能黄水晶吊坠"]={175,195,202,210}, +["彩虹之锤"]={140,170,185,200}, +["彩鳍鱼"]={50,90,110,130}, +["影月宝珠"]={85,105,115,125}, +["影皮手套"]={200,210,220,230}, +["影铸之眼"]={85,105,115,125}, +["微光白玉坠戒"]={300,0,0,0}, +["德莱尼水晶魔棒"]={200,225,235,245}, +["忘却的圣杯"]={300,330,340,350}, +["快捷箭袋"]={225,245,255,265}, +["快速暗影反射器"]={300,320,330,340}, +["怒气药水"]={60,90,110,130}, +["急速生长药剂"]={200,200,212,225}, +["恶魔布包"]={280,300,315,330}, +["恶魔布帽"]={290,305,320,335}, +["恶魔布手套"]={300,315,330,345}, +["恶魔布护肩"]={300,315,330,345}, +["恶魔布短裤"]={275,290,305,320}, +["恶魔布袍"]={300,315,330,345}, +["恶魔布靴"]={285,300,315,330}, +["惊艳帝王石"]={300,310,315,320}, +["戈多克食人魔装"]={275,285,290,295}, +["战熊热裤"]={285,305,315,325}, +["战熊背心"]={275,295,305,315}, +["手工亚麻裤"]={70,95,112,130}, +["手工皮外衣"]={1,40,55,70}, +["手工皮带"]={25,55,70,85}, +["手工皮护腕"]={1,40,55,70}, +["手工皮披风"]={1,40,55,70}, +["手工皮短裤"]={15,45,60,75}, +["手工皮靴"]={1,40,55,70}, +["扳手"]={50,70,80,90}, +["抑制头环"]={135,155,165,175}, +["抗毒药剂"]={80,80,115,150}, +["抗毒药水"]={120,145,165,185}, +["抗魔药水"]={210,225,245,265}, +["护卫披风"]={300,315,330,345}, +["报警机器人"]={265,275,280,285}, +["掘地鼠炖肉"]={90,130,150,170}, +["掠夺者兜帽"]={265,265,265,265}, +["掠夺者手套"]={260,260,260,260}, +["掠夺者披肩"]={265,265,265,265}, +["掠夺者裤子"]={265,265,265,265}, +["掠夺者长袍"]={270,270,270,270}, +["掠夺者鞋子"]={260,260,260,260}, +["支配之权杖"]={300,330,340,350}, +["支配之龙印"]={300,320,330,340}, +["放血剃刀"]={250,0,0,0}, +["敏捷药剂"]={185,205,225,245}, +["斑点黄尾鱼"]={225,265,285,305}, +["无底包"]={300,315,330,345}, +["无暇月亮石"]={175,180,182,185}, +["旭日皇冠"]={250,250,270,290}, +["明亮灰烬石"]={200,205,207,210}, +["明亮瑟银微光"]={255,270,277,285}, +["明亮的铜戒指"]={15,35,45,55}, +["昏睡药水"]={230,245,265,285}, +["星型宝石护腕"]={270,0,0,0}, +["星形护符"]={220,220,240,260}, +["星形瑟银指环"]={260,260,275,290}, +["星形红玉戒指"]={300,0,0,0}, +["星界护符"]={175,0,0,0}, +["星辰腰带"]={200,220,235,250}, +["普通瞄准镜"]={110,135,147,160}, +["智慧药剂"]={90,120,140,160}, +["暗影之力药剂"]={250,265,285,305}, +["暗影之油"]={165,190,210,230}, +["暗影头巾"]={170,190,205,220}, +["暗影宝珠"]={100,120,130,140}, +["暗影护目镜"]={120,145,157,170}, +["暗影皮靴"]={205,225,230,235}, +["暗影石戒指"]={105,125,135,145}, +["暗影防护药水"]={135,160,180,200}, +["暗纹之靴"]={240,255,270,285}, +["暗纹手套"]={225,240,255,270}, +["暗纹护肩"]={235,250,265,280}, +["暗纹短裤"]={210,225,240,255}, +["暗纹长袍"]={215,230,245,260}, +["暗纹面罩"]={245,260,275,290}, +["暗色护腕"]={185,205,215,225}, +["暗色皮带"]={195,215,225,235}, +["暗色皮护腿"]={165,185,195,205}, +["暗色皮甲"]={175,195,205,215}, +["暗色长靴"]={200,220,230,240}, +["暗草护腕"]={80,160,170,180}, +["暴怒药水"]={175,195,215,235}, +["曙光护腕"]={115,135,142,150}, +["月光咒符"]={275,0,0,0}, +["月光外衣"]={90,115,130,145}, +["月光法杖"]={125,150,160,170}, +["月布"]={250,290,305,320}, +["月布包"]={300,315,330,345}, +["月布外衣"]={300,315,330,345}, +["月布头饰"]={300,315,330,345}, +["月布手套"]={300,315,330,345}, +["月布护肩"]={300,315,330,345}, +["月布护腿"]={290,305,320,335}, +["月布长袍"]={300,315,330,345}, +["月布长靴"]={290,295,310,325}, +["月牙斧"]={200,225,237,250}, +["月钢宽剑"]={180,205,217,230}, +["有限无敌药水"]={250,275,295,315}, +["木喉之力"]={290,310,320,330}, +["木喉之怒"]={290,310,320,330}, +["木喉之智"]={290,305,320,335}, +["木喉作战手套"]={300,320,330,340}, +["木喉肩铠"]={300,325,337,350}, +["木喉衬肩"]={300,315,330,345}, +["未淬火的符文剑"]={300,320,330,340}, +["机械修理包"]={200,200,220,240}, +["机械幼龙"]={200,220,230,240}, +["机械松鼠"]={75,105,120,135}, +["杂味炖肉"]={75,115,135,155}, +["杂烩蚌肉"]={90,130,150,170}, +["林栖者外衣"]={300,315,330,345}, +["林栖者头冠"]={300,315,330,345}, +["林栖者护肩"]={300,315,330,345}, +["柔光戒指"]={65,85,92,100}, +["柔光照明法杖"]={210,235,245,255}, +["柔韧奥术石"]={300,320,330,340}, +["梦境丝线"]={300,300,300,300}, +["梦境丝线手套"]={300,300,300,300}, +["梦境丝线护腕"]={300,300,300,300}, +["梦境丝线披肩"]={300,300,300,300}, +["梦境丝线裙裤"]={300,300,300,300}, +["梦境使者"]={300,320,330,340}, +["梦境火酒药剂"]={300,0,0,0}, +["梦境皮革"]={300,320,330,340}, +["梦境皮革护腕"]={300,320,330,340}, +["梦境皮革护腿"]={300,320,330,340}, +["梦境皮革披肩"]={300,320,330,340}, +["梦境皮革腰带"]={300,320,330,340}, +["梦境精华药剂"]={300,315,322,330}, +["梦境药剂"]={240,255,275,295}, +["梦境钢铁护肩"]={300,0,0,0}, +["梦境钢铁护腕"]={300,325,337,350}, +["梦境钢铁护腿"]={300,325,337,350}, +["梦境钢铁长靴"]={300,325,337,350}, +["梦幻龙鳞胸甲"]={300,320,330,340}, +["梦纹外衣"]={225,240,255,270}, +["梦纹头饰"]={250,265,280,295}, +["梦纹手套"]={225,240,255,270}, +["梦钢带扣"]={300,325,337,350}, +["棕色亚麻外衣"]={10,45,57,70}, +["棕色亚麻短裤"]={30,55,72,90}, +["棕色亚麻衬衣"]={1,35,47,60}, +["棕色亚麻长袍"]={30,55,72,90}, +["棱光护符"]={265,265,285,305}, +["棱光鳞甲头盔"]={300,300,305,310}, +["橙色军用衬衣"]={220,225,230,235}, +["橙色魔纹衬衣"]={215,220,225,230}, +["次级巫师之油"]={200,0,0,0}, +["次级巫师袍"]={135,155,170,185}, +["次级敏捷药剂"]={140,165,185,205}, +["次级治疗药水"]={55,85,105,125}, +["次级法力之油"]={250,0,0,0}, +["次级法力药水"]={120,145,165,185}, +["次级石盾药水"]={215,230,250,270}, +["次级秘法魔杖"]={155,0,0,0}, +["次级隐形药水"]={165,185,205,225}, +["次级魔法杖"]={10,0,0,0}, +["歼灭者"]={300,320,330,340}, +["毁灭红玉指环"]={300,330,350,370}, +["毁灭者的黑暗之握"]={300,320,330,340}, +["比兹尼克247x128精确瞄准镜"]={300,320,330,340}, +["毛布卷"]={75,90,97,105}, +["毛皮护甲片"]={250,255,265,275}, +["毛纺包"]={80,105,122,140}, +["毛纺斗篷"]={75,100,117,135}, +["毛纺靴"]={95,120,137,155}, +["水下呼吸药剂"]={90,120,140,160}, +["水下诱鱼器"]={150,150,160,170}, +["水手的陨落"]={190,210,220,230}, +["水晶护腕"]={280,285,297,310}, +["水晶火焰护腕"]={255,275,285,295}, +["水晶耳环"]={185,205,215,225}, +["水煮蚌肉"]={50,90,110,130}, +["水煮阳鳞鲑鱼"]={250,290,310,330}, +["水银环"]={265,285,292,300}, +["永恒梦境碎片"]={300,0,0,0}, +["沙漠肉丸子"]={285,325,345,365}, +["沙行者护手"]={300,320,330,340}, +["沙行者护腕"]={300,320,330,340}, +["沙行者胸甲"]={300,320,330,340}, +["油炸红腮鱼"]={225,265,285,305}, +["治疗药水"]={110,135,155,175}, +["法力药水"]={160,180,200,220}, +["法拉基祭祀图腾"]={140,160,170,180}, +["法术掌握手套"]={300,315,330,345}, +["法术能量护目镜超级改良版"]={270,290,300,310}, +["法术能量护目镜超级版"]={225,245,255,265}, +["泛光月亮石胸针"]={185,200,207,215}, +["泰坦之锤"]={300,320,330,340}, +["泰坦合剂"]={300,315,322,330}, +["泰坦护腿"]={300,320,330,340}, +["洛丹伦胸甲"]={100,275,295,310}, +["洛克湖狂鱼"]={50,90,110,130}, +["洛恩塔姆薯块"]={275,315,335,355}, +["洞察束带"]={300,320,330,340}, +["活力行动药水"]={285,300,320,340}, +["活动假人"]={85,115,130,145}, +["浓烟山脉之心"]={265,0,0,0}, +["海员香辣炖菜"]={35,75,95,115}, +["海洋之心"]={200,220,230,240}, +["海洋之怒"]={115,120,130,140}, +["海洋之根"]={200,215,225,235}, +["海龟汤"]={175,215,235,255}, +["淡黄色衬衣"]={135,145,150,155}, +["深沉白玉"]={270,270,272,275}, +["深海护手"]={230,250,260,270}, +["深海的凝视"]={190,190,210,230}, +["深海项链"]={85,105,115,125}, +["深渊猎手头盔"]={300,0,0,0}, +["深红丝质外衣"]={185,205,215,225}, +["深红丝质手套"]={210,225,240,255}, +["深红丝质护肩"]={190,210,225,240}, +["深红丝质披风"]={180,200,215,230}, +["深红丝质腰带"]={175,195,210,225}, +["深红丝质长袍"]={205,220,235,250}, +["深红丝质马裤"]={195,215,225,235}, +["深红护卫法杖"]={290,0,0,0}, +["清醒药水"]={300,315,322,330}, +["渴魔手套"]={75,150,167,185}, +["溶解毒药"]={1,285,310,335}, +["溶解毒药 II"]={1,325,350,375}, +["滋补药剂"]={210,225,245,265}, +["滑皮鲭鱼"]={1,45,65,85}, +["漂亮的红衬衣"]={110,135,152,170}, +["漂亮的绿衬衣"]={120,145,162,180}, +["漂亮的蓝衬衣"]={120,145,162,180}, +["漆黑曜石"]={285,290,292,295}, +["潜水头盔"]={230,250,260,270}, +["激发潜能之戒"]={290,320,330,340}, +["灌注精华手套"]={300,300,305,310}, +["火力药剂"]={140,165,185,205}, +["火山战锤"]={290,315,327,340}, +["火山护肩"]={300,320,330,340}, +["火山护腿"]={270,290,300,310}, +["火山胸甲"]={285,305,315,325}, +["火怒护腿"]={300,300,300,300}, +["火核狙击步枪"]={300,320,330,340}, +["火焰之油"]={130,150,160,170}, +["火焰偏斜器"]={125,125,150,175}, +["火焰勋章"]={110,130,140,150}, +["火焰头盔"]={250,270,280,290}, +["火焰护目镜"]={205,225,235,245}, +["火焰披风"]={275,290,305,320}, +["火焰防护药水"]={165,210,230,250}, +["火链胸甲"]={300,325,337,350}, +["灰布外衣"]={260,275,290,305}, +["灰布手套"]={270,285,300,315}, +["灰布披风"]={275,290,305,320}, +["灰布短裤"]={280,295,310,325}, +["灰布长袍"]={225,240,255,270}, +["灰布长靴"]={245,260,275,290}, +["灰烬堕落戒指"]={260,280,290,300}, +["灰烬宝石护腕"]={300,320,330,340}, +["灰烬石神像"]={220,240,250,260}, +["灰烬石镶嵌指环"]={225,240,247,255}, +["灰色毛纺衬衣"]={100,110,120,130}, +["灰色毛纺长袍"]={105,130,147,165}, +["灵魂袋"]={260,275,290,305}, +["灼热金剑"]={190,215,227,240}, +["炖陆行鸟"]={50,90,110,130}, +["炖龙虾"]={275,315,335,355}, +["炫光头盔"]={300,320,330,340}, +["炫光护腿"]={300,320,330,340}, +["炫光肩铠"]={300,320,330,340}, +["炫光胸甲"]={300,320,330,340}, +["炸弹宠物"]={205,205,205,205}, +["点金石"]={225,0,0,0}, +["点铁成金"]={225,240,260,280}, +["炼金石"]={300,315,322,330}, +["炽热板甲护手"]={290,310,320,330}, +["炽热红宝石"]={200,205,207,210}, +["炽热链甲护肩"]={300,320,330,340}, +["炽热链甲束带"]={295,315,325,335}, +["烈性火药"]={125,125,135,145}, +["烈性炸药"]={125,125,135,145}, +["烈日黄玉戒指"]={185,200,210,220}, +["烈焰核心靴子"]={300,300,300,300}, +["烟熏胸针"]={200,220,230,240}, +["烟熏鲈鱼"]={240,280,300,320}, +["烟花发射器"]={225,245,255,265}, +["烟花束发射器"]={275,295,305,315}, +["烤狮排"]={125,175,195,215}, +["烤科多肉"]={35,75,95,115}, +["烤迅猛龙肉"]={175,215,235,255}, +["烤野猪肉"]={1,45,65,85}, +["烤鱿鱼"]={240,280,300,320}, +["烤鲑鱼"]={275,315,335,355}, +["烤鼠尾鱼"]={80,120,140,160}, +["烧烤巨蚌"]={175,215,235,255}, +["烧烤狼肉"]={1,45,65,85}, +["烧烤秃鹰翅膀"]={175,215,235,255}, +["热狼排"]={175,215,235,255}, +["煮熟的光滑大鱼"]={225,265,285,305}, +["煮蟹爪"]={85,125,145,165}, +["煽动毒药I"]={300,0,0,0}, +["熏熊肉"]={40,80,100,120}, +["熔岩护腿"]={300,300,300,300}, +["熔岩犬皮靴"]={295,315,325,335}, +["熔岩腰带"]={300,320,330,340}, +["熔火升华之冠"]={300,320,330,340}, +["熔火恶魔布包"]={300,315,330,345}, +["熔火护甲片"]={300,320,330,340}, +["熔火犬皮腰带"]={300,320,330,340}, +["熔火猎犬手套"]={300,300,300,300}, +["熔火腰带"]={300,320,330,340}, +["熔炼梦境钢锭"]={300,350,362,375}, +["熔炼源质"]={300,350,362,375}, +["熔炼瑟银"]={250,250,250,250}, +["熔炼真银"]={230,230,230,230}, +["熔炼秘银"]={175,175,175,175}, +["熔炼金锭"]={155,170,177,185}, +["熔炼钢锭"]={165,165,165,165}, +["熔炼铁锭"]={125,125,130,140}, +["熔炼铜锭"]={1,25,45,70}, +["熔炼银锭"]={75,100,112,125}, +["熔炼锡锭"]={65,65,70,75}, +["熔炼青铜"]={65,65,90,115}, +["熔炼黑铁"]={230,230,230,230}, +["熔铸头盔"]={300,320,330,340}, +["熟化中毛皮"]={100,115,122,130}, +["熟化厚毛皮"]={200,200,200,200}, +["熟化毛皮"]={250,250,255,260}, +["熟化轻毛皮"]={35,55,65,75}, +["熟化重毛皮"]={150,160,165,170}, +["燃星宝石"]={225,225,227,230}, +["爆炸护盾"]={75,100,120,140}, +["牙爪圣物"]={120,140,150,160}, +["特效巨魔之血药水"]={290,305,325,345}, +["特效抗毒药剂"]={300,300,330,360}, +["特效治疗药水"]={275,290,310,330}, +["特效法力药水"]={295,310,330,350}, +["特效活力药水"]={300,310,320,330}, +["牺牲长袍"]={300,300,300,300}, +["狂鱼肉片"]={50,90,110,130}, +["狙击瞄准镜"]={240,260,270,280}, +["狮心头盔"]={300,320,330,340}, +["狮王之力药剂"]={1,55,75,95}, +["狼头之盔"]={225,245,255,265}, +["猛毒尖冠"]={145,165,175,185}, +["猝火艾泽拉斯钻石"]={275,280,282,285}, +["猪肉干"]={80,120,140,160}, +["猪肝馅饼"]={50,90,110,130}, +["猫眼药剂"]={200,220,240,260}, +["猫眼超级护目镜"]={220,240,250,260}, +["猫鼬药剂"]={280,295,315,335}, +["猫鼬长靴"]={300,320,330,340}, +["献祭之油"]={205,220,240,260}, +["玉蛇刀"]={175,200,212,225}, +["王之决断"]={85,105,115,125}, +["玛瑙头冠"]={125,145,155,165}, +["玫瑰色护目镜"]={230,250,260,270}, +["珍珠匕首"]={110,140,155,170}, +["珍珠披风"]={90,115,132,150}, +["琥珀宝珠"]={95,110,120,130}, +["琥珀指环"]={60,80,87,95}, +["琥珀石吊坠"]={80,105,115,125}, +["瑟银头盔"]={280,300,310,320}, +["瑟银巨剑"]={260,285,297,310}, +["瑟银带扣"]={240,265,277,290}, +["瑟银弹"]={285,305,315,325}, +["瑟银手榴弹"]={260,280,290,300}, +["瑟银护甲"]={250,270,280,290}, +["瑟银护腕"]={255,275,285,295}, +["瑟银护腿"]={300,320,330,340}, +["瑟银火枪"]={260,280,290,300}, +["瑟银盾刺"]={275,295,305,315}, +["瑟银管"]={275,295,305,315}, +["瑟银腰带"]={250,270,280,290}, +["瑟银长靴"]={280,300,310,320}, +["瑟银零件"]={260,280,290,300}, +["瑟银马刺"]={275,300,310,320}, +["璀璨玛瑙"]={135,135,137,140}, +["生命护肩"]={270,290,300,310}, +["生命护腿"]={285,305,315,325}, +["生命胸甲"]={300,320,330,340}, +["电动惩戒器"]={250,270,280,290}, +["电压中和自然反射器"]={290,310,320,330}, +["瘦狼排"]={125,165,185,205}, +["瘦鹿肉"]={110,150,170,190}, +["白玉手镯"]={250,280,290,300}, +["白玉指环"]={290,320,330,340}, +["白色亚麻衬衣"]={1,35,47,60}, +["白色亚麻长袍"]={30,55,72,90}, +["白色冒险者衬衣"]={160,170,175,180}, +["白色婚纱"]={250,255,260,265}, +["白色强盗面罩"]={215,220,225,230}, +["白色毛绒裙"]={110,135,152,170}, +["白色皮夹克"]={60,90,105,120}, +["白银万能钥匙"]={100,100,110,120}, +["白魂头盔"]={300,320,330,340}, +["皇家宝石法杖"]={215,235,245,255}, +["皇家曙光权杖"]={240,260,275,290}, +["皮质小弹药包"]={30,60,75,90}, +["皱褶皮短裤"]={35,65,80,95}, +["盖亚的拥抱"]={300,315,330,345}, +["真银万能钥匙"]={200,200,210,220}, +["真银变压器"]={260,270,275,280}, +["真银圣剑"]={260,285,297,310}, +["真银带扣"]={225,225,230,235}, +["真银护手"]={225,245,255,265}, +["真银棒"]={200,205,207,210}, +["真银胸甲"]={245,265,275,285}, +["石之护符"]={100,125,135,145}, +["石英指环"]={155,175,185,195}, +["石鳞鱼油"]={250,250,255,260}, +["石鳞鳕鱼"]={175,190,210,230}, +["破冰护手"]={300,320,330,340}, +["破冰护腕"]={300,320,330,340}, +["破冰胸甲"]={300,320,330,340}, +["破碎守护者的护符"]={300,320,325,330}, +["硬化蝎壳头盔"]={250,270,280,290}, +["硬化蝎壳战靴"]={235,255,265,275}, +["硬化蝎壳手套"]={225,245,255,265}, +["硬化蝎壳护肩"]={240,260,270,280}, +["硬化蝎壳护腕"]={220,240,250,260}, +["硬化蝎壳护腿"]={245,265,275,285}, +["硬化蝎壳胸甲"]={220,240,250,260}, +["硬化铜手镯"]={50,70,75,80}, +["硬化青铜法杖"]={100,120,130,140}, +["硬甲皮"]={250,250,250,250}, +["硬铁短剑"]={160,185,197,210}, +["碎石穴居怪伪装"]={1,0,0,0}, +["碎裂黑曜石盾牌"]={300,320,330,340}, +["碎铁金锤"]={170,195,207,220}, +["碧蓝丝质外衣"]={150,170,185,200}, +["碧蓝丝质头巾"]={145,155,160,165}, +["碧蓝丝质手套"]={145,165,180,195}, +["碧蓝丝质披风"]={175,195,210,225}, +["碧蓝丝质短裤"]={140,160,175,190}, +["碧蓝丝质腰带"]={175,195,210,225}, +["碧蓝戒指"]={60,80,87,95}, +["碧蓝护肩"]={190,210,225,240}, +["礼服夹克"]={250,265,280,295}, +["礼服短裤"]={245,250,255,260}, +["礼服衬衣"]={240,245,250,255}, +["神圣防护药水"]={100,130,150,170}, +["神秘杂烩"]={175,215,235,255}, +["禁锢徽记"]={125,145,155,165}, +["科多兽皮包"]={40,70,85,100}, +["科多肉杂烩"]={200,240,260,280}, +["秘银外壳"]={215,215,235,255}, +["秘银带扣"]={185,210,222,235}, +["秘银机械幼龙"]={250,270,280,290}, +["秘银杆"]={200,225,237,250}, +["秘银杆设计图"]={205,205,205,205}, +["秘银火枪"]={205,225,235,245}, +["秘银盾刺"]={215,235,245,255}, +["秘银短裤"]={210,230,240,250}, +["秘银破片炸弹"]={215,215,235,255}, +["秘银符文战锤"]={245,270,282,295}, +["秘银管"]={195,195,215,235}, +["秘银细剑"]={240,265,277,290}, +["秘银罩帽"]={230,250,260,270}, +["秘银螺旋弹"]={245,245,265,285}, +["秘银重斧"]={210,235,247,260}, +["秘银重靴"]={235,255,265,275}, +["秘银马刺"]={235,255,265,275}, +["秘银魔剑"]={225,250,262,275}, +["秘银鳞片手套"]={220,240,250,260}, +["秘银鳞片护肩"]={235,255,265,275}, +["秘银鳞片护腕"]={215,235,245,255}, +["秘银鳞片短裤"]={210,230,240,250}, +["秘银黑石项链"]={245,265,275,285}, +["移形披风"]={300,320,330,340}, +["究极充能奥术反射器"]={290,310,320,330}, +["空间撕裂器 - 永望镇"]={260,0,0,0}, +["窃贼手套"]={140,165,177,190}, +["符文之刃"]={285,310,322,335}, +["符文冥河护腿"]={300,315,330,345}, +["符文冥河腰带"]={300,315,330,345}, +["符文冥河长靴"]={300,315,330,345}, +["符文奥金棒"]={290,0,0,0}, +["符文布卷"]={250,255,257,260}, +["符文布外套"]={260,275,290,305}, +["符文布头带"]={295,310,325,340}, +["符文布手套"]={275,290,305,320}, +["符文布护肩"]={300,315,330,345}, +["符文布披风"]={265,280,295,310}, +["符文布短裤"]={285,300,315,330}, +["符文布绷带"]={260,260,290,320}, +["符文布背包"]={260,275,290,305}, +["符文布腰带"]={255,270,285,300}, +["符文布袍"]={260,275,290,305}, +["符文布靴"]={280,295,310,325}, +["符文护符"]={230,230,252,275}, +["符文板甲"]={300,320,330,340}, +["符文板甲头盔"]={300,320,330,340}, +["符文板甲战靴"]={300,320,330,340}, +["符文板甲护肩"]={300,320,330,340}, +["符文板甲护腿"]={300,320,330,340}, +["符文皮甲"]={300,320,330,340}, +["符文皮甲头环"]={290,310,320,330}, +["符文皮甲护手"]={270,290,300,310}, +["符文皮甲护肩"]={300,320,330,340}, +["符文皮甲护腕"]={275,295,305,315}, +["符文皮甲短裤"]={300,320,330,340}, +["符文皮甲腰带"]={280,300,310,320}, +["符文真银戒指"]={220,240,250,260}, +["符文真银棒"]={200,0,0,0}, +["符文蚀刻之握"]={300,320,330,340}, +["符文蚀刻护肩"]={300,320,330,340}, +["符文蚀刻王冠"]={300,320,330,340}, +["符文蚀刻胫甲"]={300,320,330,340}, +["符文蚀刻胸甲"]={300,320,330,340}, +["符文蚀刻腿甲"]={300,320,330,340}, +["符文金棒"]={150,0,0,0}, +["符文铜棒"]={1,0,0,0}, +["符文银棒"]={100,0,0,0}, +["笨重的铜戒指"]={25,25,45,65}, +["筛盐器"]={250,270,280,290}, +["简易亚麻短裤"]={1,35,47,60}, +["简易投掷炸弹"]={100,115,122,130}, +["简易投掷炸弹II"]={200,200,210,220}, +["简易的亚麻靴"]={20,50,67,85}, +["简易的裙子"]={40,65,82,100}, +["简易的褶裙"]={75,100,117,135}, +["简易的黑裙子"]={235,240,245,250}, +["粉碎者"]={235,260,272,285}, +["粉色魔纹衬衣"]={235,240,245,250}, +["粗制平衡石"]={65,65,72,80}, +["粗制火药粉"]={75,85,90,95}, +["粗制炸药"]={75,90,97,105}, +["粗制瞄准镜"]={60,90,105,120}, +["粗制砂轮"]={75,75,87,100}, +["粗制磨刀石"]={65,65,72,80}, +["粗糙的宝石串"]={125,140,142,145}, +["粗糙的金戒指"]={150,165,170,175}, +["粗糙的铁戒指"]={150,165,170,175}, +["粗糙砂纸"]={70,90,95,100}, +["粗糙青铜戒指"]={90,100,107,115}, +["粗野的聚焦手杖"]={300,330,340,350}, +["精制奥妮克希亚鳞片"]={300,0,0,0}, +["精制实心弹丸"]={125,125,135,145}, +["精制望远镜"]={135,160,172,185}, +["精制秘银头盔"]={210,265,275,285}, +["精制秘银战靴"]={210,265,275,285}, +["精制秘银手套"]={220,240,250,260}, +["精制秘银护肩"]={225,245,255,265}, +["精制秘银短裤"]={220,240,250,260}, +["精制秘银胸甲"]={210,260,270,280}, +["精制轻弹丸"]={1,30,45,60}, +["精制重弹丸"]={75,85,90,95}, +["精制钻石手镯"]={300,325,332,340}, +["精密奥金转换器"]={285,305,315,325}, +["精密珠宝工具包"]={175,185,190,195}, +["精密陀螺仪护目镜"]={300,320,330,340}, +["精工风暴战锤"]={300,320,330,340}, +["精炼智慧合剂"]={300,315,322,330}, +["精确瞄准镜"]={180,200,210,220}, +["精致手工火枪"]={120,145,157,170}, +["精致的宝石串"]={200,200,205,210}, +["精致的矮人项链"]={185,185,200,215}, +["精致的金手镯"]={200,220,230,240}, +["精致秘银头冠"]={210,230,240,250}, +["精致秘银护符"]={180,200,210,220}, +["精致钻石宝冠"]={300,320,330,340}, +["精钢战靴"]={185,210,222,235}, +["紫色丝质衬衣"]={185,195,200,205}, +["紫色魔纹衬衣"]={230,235,240,245}, +["红色亚麻包"]={70,95,112,130}, +["红色亚麻外衣"]={55,80,97,115}, +["红色亚麻衬衣"]={40,65,82,100}, +["红色亚麻长袍"]={40,65,82,100}, +["红色冒险者衬衣"]={175,185,190,195}, +["红色毛纺包"]={115,140,157,175}, +["红色毛纺靴"]={95,120,137,155}, +["红色烟花束"]={225,225,237,250}, +["红色焰火"]={150,150,162,175}, +["红色节庆裤装"]={250,265,280,295}, +["红色节庆长裙"]={250,0,0,0}, +["红色雏龙手套"]={120,145,157,170}, +["红色魔纹包"]={235,250,265,280}, +["红色魔纹外衣"]={215,230,245,260}, +["红色魔纹头带"]={240,255,270,285}, +["红色魔纹手套"]={225,240,255,270}, +["红色魔纹护肩"]={235,250,265,280}, +["红色魔纹短裤"]={215,230,245,260}, +["红龙鳞片护肩"]={300,300,300,300}, +["红龙鳞片护腿"]={295,300,300,300}, +["红龙鳞片胸甲"]={300,320,330,340}, +["红龙鳞片长靴"]={295,300,300,300}, +["纯金戒指"]={295,0,0,0}, +["纯银戒指"]={135,155,165,175}, +["练习锁"]={100,115,122,130}, +["织法者之杖"]={265,285,292,300}, +["织法者坠饰"]={265,275,285,295}, +["绒线绷带"]={80,80,115,150}, +["结实的铁锤"]={155,180,192,205}, +["绚丽宝钻"]={270,275,277,280}, +["绽放翡翠之杖"]={165,185,195,205}, +["绿色丝甲"]={165,185,200,215}, +["绿色丝质包"]={175,195,210,225}, +["绿色丝质护肩"]={180,200,215,230}, +["绿色亚麻护腕"]={60,85,102,120}, +["绿色亚麻衬衣"]={70,95,112,130}, +["绿色幼龙护甲"]={175,195,205,215}, +["绿色幼龙护腕"]={190,210,220,230}, +["绿色护目镜"]={150,175,187,200}, +["绿色毛纺包"]={95,120,137,155}, +["绿色毛纺外衣"]={85,110,127,145}, +["绿色毛纺长袍"]={90,0,0,0}, +["绿色烟花束"]={225,225,237,250}, +["绿色焰火"]={150,150,162,175}, +["绿色皮带"]={160,180,190,200}, +["绿色皮护腕"]={180,200,210,220}, +["绿色皮甲"]={155,175,185,195}, +["绿色节日衬衣"]={190,200,205,210}, +["绿色透镜"]={245,265,275,285}, +["绿色龙鳞护手"]={280,300,310,320}, +["绿铁头盔"]={170,195,207,220}, +["绿铁战靴"]={145,175,190,205}, +["绿铁护手"]={150,180,195,210}, +["绿铁护肩"]={160,185,197,210}, +["绿铁护腕"]={165,190,202,215}, +["绿铁护腿"]={155,180,192,205}, +["绿铁锁甲"]={180,205,217,230}, +["绿龙鳞片护腿"]={270,290,300,310}, +["绿龙鳞片胸甲"]={260,280,290,300}, +["缀玉戒指"]={70,90,95,100}, +["缚风者手套"]={300,315,330,345}, +["缥缈的霜花皇冠"]={280,285,297,310}, +["美味小鱼"]={1,45,65,85}, +["美味煎蛋卷"]={130,170,190,210}, +["美味风蛇"]={85,125,145,165}, +["美味鼠尾鱼"]={175,215,235,255}, +["羽饰胸甲"]={250,270,280,290}, +["翡翠和谐指环"]={170,190,197,205}, +["翡翠帝王石"]={300,320,330,340}, +["翡翠梦境者护胸"]={300,300,300,300}, +["翡翠猫鼬药剂"]={300,0,0,0}, +["翼爪戒指"]={145,165,175,185}, +["联合收割机组件"]={175,175,195,215}, +["脆炸蜥蜴尾"]={100,140,160,180}, +["腐肉大餐"]={175,215,235,255}, +["腐蚀术"]={290,315,327,340}, +["腐蚀毒药"]={1,280,305,330}, +["腐蚀毒药 II"]={1,300,325,350}, +["自动净化装置"]={140,165,177,190}, +["自然防护药水"]={190,210,230,250}, +["自爆绵羊"]={150,175,187,200}, +["自由行动药剂"]={150,175,195,215}, +["致伤毒药"]={1,185,210,235}, +["致伤毒药 II"]={180,0,0,0}, +["致伤毒药 III"]={220,0,0,0}, +["致伤毒药 IV"]={260,0,0,0}, +["致命毒药"]={130,175,200,225}, +["致命毒药 II"]={170,215,240,265}, +["致命毒药 III"]={210,255,280,305}, +["致命毒药 IV"]={250,295,320,345}, +["致命毒药 V"]={1,300,325,350}, +["致命的短枪"]={105,130,142,155}, +["致命的青铜短剑"]={125,155,170,185}, +["致命瞄准镜"]={210,230,240,250}, +["致密平衡石"]={250,255,257,260}, +["致密炸药"]={250,250,260,270}, +["致密炸药粉"]={250,250,255,260}, +["致密的宝石串"]={235,240,240,240}, +["致密砂纸"]={250,260,265,270}, +["致密砂轮"]={250,255,257,260}, +["致密磨刀石"]={250,255,257,260}, +["致残毒药"]={1,125,150,175}, +["致残毒药 II"]={230,275,300,325}, +["致盲粉"]={1,170,195,220}, +["舒适的皮帽"]={200,220,230,240}, +["艾泽拉斯红玉"]={275,280,282,285}, +["苏生黄玉"]={300,320,330,340}, +["苦工伪装"]={1,0,0,0}, +["荆木头盔"]={300,320,330,340}, +["荆木腰带"]={300,320,330,340}, +["荆木长靴"]={300,320,330,340}, +["草药烘蛋"]={1,45,65,85}, +["荒芜"]={250,275,287,300}, +["菊花茶"]={60,100,120,140}, +["萨弗隆战锤"]={300,325,337,350}, +["蓝光斧"]={220,245,257,270}, +["蓝玉指环"]={290,320,330,340}, +["蓝色亚麻外衣"]={55,80,97,115}, +["蓝色亚麻衬衣"]={40,65,82,100}, +["蓝色亚麻长袍"]={70,95,112,130}, +["蓝色烟花束"]={225,225,237,250}, +["蓝色焰火"]={150,150,162,175}, +["蓝色罩衫"]={100,125,142,160}, +["蓝色龙鳞长靴"]={290,310,320,330}, +["蓝龙鳞片护肩"]={295,315,325,335}, +["蓝龙鳞片护腿"]={300,320,330,340}, +["蓝龙鳞片胸甲"]={285,305,315,325}, +["虎纹戒指"]={50,70,77,85}, +["虚灵外套"]={300,300,300,300}, +["虚灵头饰"]={300,300,300,300}, +["虚灵护肩"]={300,300,300,300}, +["虚灵护腿"]={300,300,300,300}, +["虚空之心咒符"]={280,280,300,320}, +["虚空法袍"]={300,315,330,345}, +["蛇盘之杖"]={100,120,130,140}, +["蛇鳞手套"]={105,130,142,155}, +["蛇鳞披风"]={90,120,135,150}, +["蛇鳞腰带"]={115,140,152,165}, +["蛋奶酒"]={35,75,95,115}, +["蛛丝之靴"]={125,150,167,185}, +["蛛丝便鞋"]={140,160,175,190}, +["蛮力药剂"]={275,290,310,330}, +["蛮皮外衣"]={225,245,255,265}, +["蛮皮头盔"]={225,245,255,265}, +["蛮皮战靴"]={245,265,275,285}, +["蛮皮护肩"]={220,240,250,260}, +["蛮皮护腿"]={250,270,280,290}, +["蛮皮披风"]={250,270,280,290}, +["蜘蛛肉肠"]={200,240,260,280}, +["蜘蛛腰带"]={180,200,215,230}, +["蜘蛛蛋糕"]={110,150,170,190}, +["蜜汁烤猪排"]={175,215,235,255}, +["蝎肉大餐"]={20,60,80,100}, +["蟹肉蛋糕"]={75,115,135,155}, +["血火头饰"]={200,220,230,240}, +["血爪"]={300,320,330,340}, +["血石战刃"]={225,260,267,275}, +["血肠"]={60,100,120,140}, +["血腥带扣"]={300,325,337,350}, +["血藤外套"]={300,315,330,345}, +["血藤护目镜"]={300,320,330,340}, +["血藤护腿"]={300,315,330,345}, +["血藤透镜"]={300,320,330,340}, +["血藤长靴"]={300,315,330,345}, +["血虎护肩"]={300,320,330,340}, +["血虎胸甲"]={300,320,330,340}, +["血魂护手"]={300,320,330,340}, +["血魂护肩"]={300,320,330,340}, +["血魂胸甲"]={300,320,330,340}, +["要塞护手"]={300,320,330,340}, +["观星者法袍"]={300,0,0,0}, +["解谜手套"]={300,300,300,300}, +["设计图:金带扣"]={175,175,180,185}, +["语音增强模组"]={290,310,320,330}, +["说服者"]={300,320,330,340}, +["贵族编织斗篷"]={300,0,0,0}, +["赤脊山炖肉"]={100,135,155,175}, +["超凡护腿"]={300,320,330,340}, +["超凡罩帽"]={300,320,330,340}, +["超凡肩甲"]={300,320,330,340}, +["超凡胸甲"]={300,320,330,340}, +["超强巨魔之血药水"]={180,200,220,240}, +["超强防御药剂"]={265,280,300,320}, +["超级煎蛋卷"]={225,265,285,305}, +["超级能量合剂"]={300,315,322,330}, +["超能电池组"]={250,250,260,270}, +["转化秘银"]={225,240,260,280}, +["转化:元素之土"]={300,315,322,330}, +["转化:元素之水"]={300,315,322,330}, +["转化:元素火焰"]={300,301,305,310}, +["转化:土转生命"]={275,275,282,290}, +["转化:奥金"]={275,275,282,290}, +["转化:死灵化水"]={275,275,282,290}, +["转化:水转死灵"]={275,275,282,290}, +["转化:点气成火"]={275,275,282,290}, +["转化:点水成气"]={275,275,282,290}, +["转化:点火成土"]={275,275,282,290}, +["转化:生命归土"]={275,275,282,290}, +["转化:转土成水"]={275,275,282,290}, +["软底亚麻靴"]={80,105,122,140}, +["轻型护甲片"]={1,30,45,60}, +["轻型黑曜石腰带"]={300,320,330,340}, +["轻巧的皮手套"]={120,145,157,170}, +["轻皮"]={1,20,30,40}, +["轻皮护腕"]={70,100,115,130}, +["轻皮短裤"]={95,125,140,155}, +["轻皮箭袋"]={30,60,75,90}, +["辉光蓝宝石"]={290,0,0,0}, +["辉煌女王的皇冠"]={300,320,330,340}, +["辉煌蓝宝石"]={250,0,0,0}, +["辐光头饰"]={295,315,325,335}, +["辐光手套"]={285,305,315,325}, +["辐光护腿"]={300,320,330,340}, +["辐光胸甲"]={270,290,300,310}, +["辐光腰带"]={260,280,290,300}, +["辐光长靴"]={290,310,320,330}, +["辛德拉长老的高贵法杖"]={300,330,350,370}, +["辛迪加伪装"]={1,0,0,0}, +["辣椒蟹肉"]={225,265,285,305}, +["达农佐的泰拉比姆情调"]={300,300,300,300}, +["达农佐的泰拉比姆惊喜"]={300,300,300,300}, +["达农佐的泰拉比姆趣味"]={300,300,300,300}, +["达拉然巫师伪装"]={1,0,0,0}, +["迅捷之靴"]={200,220,230,240}, +["迅捷药水"]={60,90,110,130}, +["迅猛龙皮背心"]={165,185,195,205}, +["迅猛龙皮腰带"]={165,185,195,205}, +["迅行护腕"]={300,320,330,340}, +["迪尔格的超美味奇美拉肉片"]={300,325,345,365}, +["迪菲亚盗贼伪装"]={1,0,0,0}, +["迫击炮:重载"]={205,205,205,205}, +["迷人的黄玉项链"]={200,220,230,240}, +["退化射线"]={160,180,190,200}, +["透明治疗药水"]={50,80,100,120}, +["速效毒药"]={1,125,150,175}, +["速效毒药 II"]={120,165,190,215}, +["速效毒药 III"]={160,205,230,255}, +["速效毒药 IV"]={200,245,270,295}, +["速效毒药 V"]={240,285,340,335}, +["速效毒药 VI"]={280,325,350,375}, +["速游药水"]={100,130,150,170}, +["造弓师手套"]={125,150,162,175}, +["邪恶皮甲"]={300,320,330,340}, +["邪恶皮甲头环"]={280,300,310,320}, +["邪恶皮甲护手"]={260,280,290,300}, +["邪恶皮甲护腕"]={265,285,295,305}, +["邪恶皮甲短裤"]={290,310,320,330}, +["邪恶皮甲腰带"]={300,320,330,340}, +["采药人手套"]={135,160,172,185}, +["重型土灵手套"]={145,170,182,195}, +["重型护甲片"]={150,170,180,190}, +["重型木喉腰带"]={290,310,320,330}, +["重型木喉长靴"]={300,320,330,340}, +["重型秘银头盔"]={245,255,265,275}, +["重型秘银手套"]={205,225,235,245}, +["重型秘银护肩"]={205,225,235,245}, +["重型秘银胸甲"]={230,250,260,270}, +["重型箭袋"]={150,170,180,190}, +["重型蝎壳外衣"]={265,285,295,305}, +["重型蝎壳头盔"]={295,315,325,335}, +["重型蝎壳护手"]={275,295,305,315}, +["重型蝎壳护肩"]={300,320,330,340}, +["重型蝎壳护腕"]={255,275,285,295}, +["重型蝎壳护腿"]={285,305,315,325}, +["重型蝎壳腰带"]={280,300,310,320}, +["重型黑曜石腰带"]={300,320,330,340}, +["重平衡石"]={125,125,132,140}, +["重皮"]={150,150,155,160}, +["重皮弹药包"]={150,170,180,190}, +["重皮球"]={150,150,155,160}, +["重砂轮"]={125,125,137,150}, +["重磅铁制炸弹"]={190,190,210,230}, +["重磅青铜炸弹"]={140,140,165,190}, +["重磨刀石"]={125,125,132,140}, +["野人亚麻外衣"]={70,95,112,130}, +["野人手套"]={150,170,180,190}, +["野人护肩"]={175,195,205,215}, +["野人护腕"]={155,175,185,195}, +["野人护腿"]={170,190,200,210}, +["野人背心"]={190,210,220,230}, +["野人腰带"]={200,220,230,240}, +["野人铁手套"]={185,210,222,235}, +["野人铁护肩"]={160,185,197,210}, +["野人铁盔"]={175,200,212,225}, +["野人铁质胸甲"]={160,185,197,210}, +["野人铁靴"]={180,205,217,230}, +["野刺锁甲"]={270,290,300,310}, +["野性之皮"]={300,320,330,340}, +["野葡萄药水"]={225,240,260,280}, +["野蛮狂怒"]={300,320,330,340}, +["金棒"]={150,155,157,160}, +["金棘茶"]={175,175,190,205}, +["金焰水晶手镯"]={155,155,160,165}, +["金玉戒指"]={210,235,245,255}, +["金色徽记护符"]={170,180,190,200}, +["金色黎明衬肩"]={300,320,330,340}, +["金鳞战靴"]={200,225,237,250}, +["金鳞护手"]={205,225,235,245}, +["金鳞护肩"]={175,200,212,225}, +["金鳞护腕"]={185,210,222,235}, +["金鳞护腿"]={170,195,207,220}, +["金鳞罩盔"]={190,215,227,240}, +["金鳞胸甲"]={195,220,232,245}, +["钢带扣"]={200,195,200,205}, +["钢质头盔"]={215,235,245,255}, +["钢质武器链"]={190,215,227,240}, +["钢质胸甲"]={200,225,237,250}, +["钢铁板甲头盔"]={230,230,230,230}, +["钢铁板甲护手"]={220,220,220,220}, +["钢铁板甲护肩"]={230,230,230,230}, +["钢铁板甲护腿"]={225,225,225,225}, +["钢铁板甲胸甲"]={225,225,225,225}, +["钢铁板甲长靴"]={220,220,220,220}, +["铁扣环"]={150,0,0,0}, +["铁棒"]={160,160,170,180}, +["铁炉堡护手"]={140,0,0,0}, +["铁炉堡胸甲"]={100,140,160,180}, +["铁炉堡链甲"]={70,110,130,150}, +["铁皮手雷"]={175,175,195,215}, +["铁羽护肩"]={270,290,300,310}, +["铁羽胸甲"]={290,310,320,330}, +["铁花戒指"]={190,205,215,225}, +["铁藤手套"]={300,320,330,340}, +["铁藤胸甲"]={300,320,330,340}, +["铁藤腰带"]={300,320,330,340}, +["铁质平衡锤"]={165,190,202,215}, +["铁质盾刺"]={150,180,195,210}, +["铜带扣"]={25,65,85,105}, +["铜手镯"]={1,21,33,45}, +["铜指虎"]={30,60,62,65}, +["铜斧"]={20,60,80,100}, +["铜杖"]={45,60,67,75}, +["铜管"]={50,80,95,110}, +["铜质匕首"]={30,70,90,110}, +["铜质双刃刀"]={30,70,90,110}, +["铜质大锤"]={65,105,125,145}, +["铜质宝石手套"]={60,100,120,140}, +["铜质战斧"]={35,75,95,115}, +["铜质护腕"]={1,20,40,60}, +["铜质短剑"]={25,65,85,105}, +["铜质符文护手"]={40,80,100,120}, +["铜质符文护腕"]={90,115,127,140}, +["铜质符文短裤"]={45,85,105,125}, +["铜质符文胸甲"]={80,120,140,160}, +["铜质符文腰带"]={70,110,130,150}, +["铜质调节器"]={65,95,110,125}, +["铜质重剑"]={95,135,155,175}, +["铜质钉锤"]={15,55,75,95}, +["铜质链甲外衣"]={35,75,95,115}, +["铜质链甲战靴"]={20,60,80,100}, +["铜质链甲短裤"]={1,50,70,90}, +["铜质链甲腰带"]={35,75,95,115}, +["铭文圣典"]={260,280,287,295}, +["铭文板甲护腿"]={300,320,330,340}, +["银头鲑鱼"]={175,215,235,255}, +["银棒"]={100,105,107,110}, +["银色护肩"]={300,315,330,345}, +["银色长靴"]={290,305,320,335}, +["银触媒"]={90,110,125,140}, +["银质勋章"]={135,150,160,170}, +["银鳞胸甲"]={145,175,190,205}, +["锋利之爪"]={75,90,95,100}, +["镀银猎枪"]={130,155,167,180}, +["镀银青铜战靴"]={130,160,175,190}, +["镀银青铜护手"]={135,165,180,195}, +["镀银青铜护肩"]={125,155,170,185}, +["镀银青铜护腿"]={155,180,192,205}, +["镀银青铜胸甲"]={130,160,175,190}, +["镶嵌宝石之戒"]={300,330,350,370}, +["镶饰瑟银战锤"]={270,295,307,320}, +["镶饰的铜戒指"]={35,55,62,70}, +["长嘴泥鳅"]={50,90,110,130}, +["长蛇焰火"]={250,250,260,270}, +["闪亮护腕"]={80,100,110,120}, +["闪亮月亮石板"]={195,195,217,240}, +["闪亮水玉"]={150,155,157,160}, +["闪亮青绿石戒指"]={190,210,220,230}, +["闪亮青铜戒指"]={90,105,112,120}, +["闪光的金项链"]={190,205,215,225}, +["闪光的银项链"]={135,155,165,175}, +["闪光雷"]={185,185,205,225}, +["闪光项链"]={80,100,110,120}, +["闪烁的钻戒"]={300,320,330,340}, +["闪耀月亮石指环"]={130,150,160,170}, +["闪耀白玉"]={235,235,237,240}, +["闪耀轻剑"]={280,305,317,330}, +["防御药剂"]={130,155,175,195}, +["阿尔萨斯的礼物"]={240,255,275,295}, +["附魔双手武器 - 冲击"]={200,0,0,0}, +["附魔双手武器 - 初级冲击"]={100,0,0,0}, +["附魔双手武器 - 初级智力"]={75,0,0,0}, +["附魔双手武器 - 强效冲击"]={240,0,0,0}, +["附魔双手武器 - 敏捷"]={290,0,0,0}, +["附魔双手武器 - 极效智力"]={300,0,0,0}, +["附魔双手武器 - 极效精神"]={300,0,0,0}, +["附魔双手武器 - 次级冲击"]={145,0,0,0}, +["附魔双手武器 - 次级智力"]={100,0,0,0}, +["附魔双手武器 - 次级精神"]={110,0,0,0}, +["附魔双手武器 - 超强冲击"]={295,0,0,0}, +["附魔师长靴"]={175,195,210,225}, +["附魔手套 - 冰霜能量"]={300,0,0,0}, +["附魔手套 - 初级加速"]={250,0,0,0}, +["附魔手套 - 剥皮"]={200,0,0,0}, +["附魔手套 - 力量"]={225,0,0,0}, +["附魔手套 - 奥术能量"]={300,0,0,0}, +["附魔手套 - 威胁"]={300,0,0,0}, +["附魔手套 - 强效力量"]={295,0,0,0}, +["附魔手套 - 强效敏捷"]={270,0,0,0}, +["附魔手套 - 敏捷"]={210,0,0,0}, +["附魔手套 - 暗影能量"]={300,0,0,0}, +["附魔手套 - 治疗能量"]={300,0,0,0}, +["附魔手套 - 火焰能量"]={300,0,0,0}, +["附魔手套 - 特效力量"]={300,0,0,0}, +["附魔手套 - 自然之力"]={300,0,0,0}, +["附魔手套 - 草药学"]={145,0,0,0}, +["附魔手套 - 超强敏捷"]={300,0,0,0}, +["附魔手套 - 采矿"]={145,0,0,0}, +["附魔手套 - 钓鱼"]={145,0,0,0}, +["附魔手套 - 骑乘"]={250,0,0,0}, +["附魔手套 - 高级草药学"]={225,0,0,0}, +["附魔手套 - 高级采矿"]={215,0,0,0}, +["附魔护腕 - 偏斜"]={235,0,0,0}, +["附魔护腕 - 初级偏斜"]={1,0,0,0}, +["附魔护腕 - 初级力量"]={80,0,0,0}, +["附魔护腕 - 初级敏捷"]={80,0,0,0}, +["附魔护腕 - 初级生命"]={1,0,0,0}, +["附魔护腕 - 初级精神"]={60,0,0,0}, +["附魔护腕 - 初级耐力"]={50,0,0,0}, +["附魔护腕 - 力量"]={180,0,0,0}, +["附魔护腕 - 吸血鬼"]={185,0,0,0}, +["附魔护腕 - 强效偏斜"]={300,0,0,0}, +["附魔护腕 - 强效力量"]={240,0,0,0}, +["附魔护腕 - 强效敏捷"]={300,0,0,0}, +["附魔护腕 - 强效智力"]={255,0,0,0}, +["附魔护腕 - 强效精神"]={220,0,0,0}, +["附魔护腕 - 强效耐力"]={245,0,0,0}, +["附魔护腕 - 智力"]={210,0,0,0}, +["附魔护腕 - 次级偏斜"]={170,0,0,0}, +["附魔护腕 - 次级力量"]={140,0,0,0}, +["附魔护腕 - 次级智力"]={150,0,0,0}, +["附魔护腕 - 次级精神"]={120,0,0,0}, +["附魔护腕 - 次级耐力"]={130,0,0,0}, +["附魔护腕 - 治疗能量"]={300,0,0,0}, +["附魔护腕 - 法力回复"]={290,0,0,0}, +["附魔护腕 - 法术强度"]={300,0,0,0}, +["附魔护腕 - 精神"]={165,0,0,0}, +["附魔护腕 - 耐力"]={170,0,0,0}, +["附魔护腕 - 超强力量"]={295,0,0,0}, +["附魔护腕 - 超强精神"]={270,0,0,0}, +["附魔护腕 - 超强耐力"]={300,0,0,0}, +["附魔披风 - 初级抗性"]={45,0,0,0}, +["附魔披风 - 初级敏捷"]={110,0,0,0}, +["附魔披风 - 初级防护"]={70,0,0,0}, +["附魔披风 - 强效奥术抗性"]={300,0,0,0}, +["附魔披风 - 强效抗性"]={265,0,0,0}, +["附魔披风 - 强效火焰抗性"]={300,0,0,0}, +["附魔披风 - 强效自然抗性"]={300,0,0,0}, +["附魔披风 - 强效防御"]={205,0,0,0}, +["附魔披风 - 抗性"]={205,0,0,0}, +["附魔披风 - 次级敏捷"]={225,0,0,0}, +["附魔披风 - 次级暗影抵抗"]={135,0,0,0}, +["附魔披风 - 次级火焰抗性"]={125,0,0,0}, +["附魔披风 - 次级防护"]={115,0,0,0}, +["附魔披风 - 潜行"]={300,0,0,0}, +["附魔披风 - 火焰抗性"]={175,0,0,0}, +["附魔披风 - 狡诈"]={300,0,0,0}, +["附魔披风 - 超级防御"]={285,0,0,0}, +["附魔披风 - 躲闪"]={300,0,0,0}, +["附魔披风 - 防御"]={155,0,0,0}, +["附魔武器 - 冰寒"]={285,0,0,0}, +["附魔武器 - 初级屠兽"]={90,0,0,0}, +["附魔武器 - 初级攻击"]={90,0,0,0}, +["附魔武器 - 力量"]={290,0,0,0}, +["附魔武器 - 十字军"]={300,0,0,0}, +["附魔武器 - 寒冬之力"]={190,0,0,0}, +["附魔武器 - 屠魔"]={230,0,0,0}, +["附魔武器 - 强效攻击"]={245,0,0,0}, +["附魔武器 - 强效智力"]={300,0,0,0}, +["附魔武器 - 强效精神"]={300,0,0,0}, +["附魔武器 - 攻击"]={195,0,0,0}, +["附魔武器 - 敏捷"]={290,0,0,0}, +["附魔武器 - 次级元素杀手"]={175,0,0,0}, +["附魔武器 - 次级屠兽"]={175,0,0,0}, +["附魔武器 - 次级攻击"]={140,0,0,0}, +["附魔武器 - 治疗能量"]={300,0,0,0}, +["附魔武器 - 法术能量"]={300,0,0,0}, +["附魔武器 - 烈焰"]={265,0,0,0}, +["附魔武器 - 生命偷取"]={300,0,0,0}, +["附魔武器 - 超强打击"]={300,0,0,0}, +["附魔武器 - 邪恶武器"]={295,0,0,0}, +["附魔盾牌 - 冰霜抗性"]={235,0,0,0}, +["附魔盾牌 - 初级耐力"]={105,0,0,0}, +["附魔盾牌 - 强效精神"]={230,0,0,0}, +["附魔盾牌 - 强效耐力"]={265,0,0,0}, +["附魔盾牌 - 次级格挡"]={195,0,0,0}, +["附魔盾牌 - 次级精神"]={130,0,0,0}, +["附魔盾牌 - 次级耐力"]={155,0,0,0}, +["附魔盾牌 - 次级防护"]={115,0,0,0}, +["附魔盾牌 - 精神"]={180,0,0,0}, +["附魔盾牌 - 耐力"]={210,0,0,0}, +["附魔盾牌 - 超强精神"]={280,0,0,0}, +["附魔胸甲 - 优异法力"]={300,0,0,0}, +["附魔胸甲 - 初级吸收"]={40,0,0,0}, +["附魔胸甲 - 初级属性"]={150,0,0,0}, +["附魔胸甲 - 初级法力"]={20,0,0,0}, +["附魔胸甲 - 初级生命"]={15,0,0,0}, +["附魔胸甲 - 强效属性"]={300,0,0,0}, +["附魔胸甲 - 强效法力"]={185,0,0,0}, +["附魔胸甲 - 强效生命"]={160,0,0,0}, +["附魔胸甲 - 极效法力"]={290,0,0,0}, +["附魔胸甲 - 极效生命"]={275,0,0,0}, +["附魔胸甲 - 次级吸收"]={140,0,0,0}, +["附魔胸甲 - 次级法力"]={80,0,0,0}, +["附魔胸甲 - 次级状态"]={200,0,0,0}, +["附魔胸甲 - 次级生命"]={60,0,0,0}, +["附魔胸甲 - 法力"]={145,0,0,0}, +["附魔胸甲 - 状态"]={245,0,0,0}, +["附魔胸甲 - 生命"]={120,0,0,0}, +["附魔胸甲 - 超强法力"]={230,0,0,0}, +["附魔胸甲 - 超强生命"]={220,0,0,0}, +["附魔靴子 - 初级敏捷"]={125,0,0,0}, +["附魔靴子 - 初级耐力"]={125,0,0,0}, +["附魔靴子 - 初级速度"]={225,0,0,0}, +["附魔靴子 - 吸血鬼"]={300,0,0,0}, +["附魔靴子 - 强效敏捷"]={295,0,0,0}, +["附魔靴子 - 强效精神"]={300,0,0,0}, +["附魔靴子 - 强效耐力"]={260,0,0,0}, +["附魔靴子 - 敏捷"]={235,0,0,0}, +["附魔靴子 - 次级敏捷"]={160,0,0,0}, +["附魔靴子 - 次级智力"]={170,0,0,0}, +["附魔靴子 - 次级精神"]={190,0,0,0}, +["附魔靴子 - 次级耐力"]={170,0,0,0}, +["附魔靴子 - 精神"]={275,0,0,0}, +["附魔靴子 - 耐力"]={215,0,0,0}, +["附魔靴子 - 超强耐力"]={300,0,0,0}, +["附魔靴子-特效智力"]={300,0,0,0}, +["降落伞披风"]={225,245,255,265}, +["隐形药水"]={235,250,270,290}, +["雕花皮外衣"]={40,70,85,100}, +["雕花皮手套"]={55,85,100,115}, +["雕花皮短裤"]={75,105,120,135}, +["雕花皮质披风"]={60,90,105,120}, +["雕花皮靴"]={55,85,100,115}, +["雪王9000型"]={190,0,0,0}, +["雷云徽记"]={290,310,320,330}, +["雷云护腕"]={300,0,0,0}, +["雷云魔印"]={290,310,325,340}, +["雷暴"]={285,305,315,325}, +["雷暴手套"]={300,320,330,340}, +["雷暴护肩"]={295,315,325,335}, +["雷暴短裤"]={275,295,305,315}, +["雷织外衣"]={225,240,255,270}, +["雷织头带"]={240,255,270,285}, +["雷织手套"]={220,235,250,265}, +["雷织护肩"]={245,260,275,290}, +["雷织短裤"]={220,235,250,265}, +["雷织长靴"]={250,265,280,295}, +["雾林头冠"]={105,135,145,155}, +["霜刃外套"]={300,320,330,340}, +["霜刃手套"]={295,315,325,335}, +["霜刃护腿"]={285,305,315,325}, +["霜刃长靴"]={275,295,305,315}, +["霜纹外套"]={255,270,285,300}, +["霜纹手套"]={265,280,295,310}, +["霜纹短裤"]={280,295,310,325}, +["霜纹长袍"]={255,270,285,300}, +["霜虎之刃"]={200,225,237,250}, +["青绿石坠饰"]={215,215,225,235}, +["青铜匕首"]={105,135,150,165}, +["青铜巨剑"]={130,160,175,190}, +["青铜带扣"]={90,115,127,140}, +["青铜战斧"]={135,165,180,195}, +["青铜战锤"]={125,155,170,185}, +["青铜手镯"]={105,120,132,145}, +["青铜斧"]={115,145,160,175}, +["青铜权杖"]={110,130,140,150}, +["青铜框架"]={145,145,170,195}, +["青铜短剑"]={120,150,165,180}, +["青铜管"]={105,105,130,155}, +["青铜花纹护腕"]={120,150,165,180}, +["青铜荣耀者"]={120,140,145,150}, +["青铜重锤"]={130,160,175,190}, +["青铜钉锤"]={110,140,155,170}, +["韧化皮手套"]={135,160,172,185}, +["韧化皮甲"]={120,145,157,170}, +["预视之眼"]={285,320,330,340}, +["预言家帽子"]={205,205,205,205}, +["预言家手套"]={200,200,200,200}, +["预言家护肩"]={205,205,205,205}, +["预言家裤子"]={205,205,205,205}, +["预言家长袍"]={210,210,210,210}, +["预言家靴子"]={200,200,200,200}, +["风之靴"]={255,255,255,255}, +["风暴护手"]={295,315,325,335}, +["风暴鳞片护腿"]={300,300,300,300}, +["风行者之靴"]={300,300,300,300}, +["飞火护手"]={300,320,330,340}, +["飞火护腕"]={300,320,330,340}, +["飞火胸甲"]={300,320,330,340}, +["飞虎护目镜"]={100,130,145,160}, +["食人魔力量药剂"]={150,175,195,215}, +["食人魔白骨指环"]={170,200,210,220}, +["首领头饰"]={270,290,291,295}, +["首领手套"]={270,285,290,295}, +["首领护肩"]={280,285,290,295}, +["首领短裤"]={280,290,291,295}, +["首领长靴"]={275,290,291,295}, +["首领马甲"]={285,290,291,295}, +["香烤狮肉"]={150,190,210,230}, +["香脆蝙蝠翅"]={1,45,65,85}, +["香辣狼肉"]={10,50,70,90}, +["骗子兜帽"]={210,225,230,235}, +["骗子外衣"]={210,235,240,245}, +["骗子手套"]={200,215,220,225}, +["骗子护腿"]={205,225,230,235}, +["骗子腰带"]={200,215,220,225}, +["骗子靴子"]={200,215,220,225}, +["高爆炸弹"]={235,235,255,275}, +["高级亚麻手套"]={35,60,77,95}, +["高级假人"]={185,185,205,225}, +["高级技师护目镜"]={290,310,320,330}, +["高级毛纺手套"]={85,110,127,145}, +["高级毛纺披风"]={100,125,142,160}, +["高级毛纺短裤"]={110,135,152,170}, +["高级活动假人"]={275,295,305,315}, +["高辐射烈焰反射器"]={290,310,320,330}, +["高速秘银弹头"]={210,210,230,250}, +["高速青铜齿轮"]={125,125,150,175}, +["高雅之冠"]={230,260,270,280}, +["鬼纹外衣"]={275,290,305,320}, +["鬼纹手套"]={270,285,300,315}, +["鬼纹短裤"]={290,305,320,335}, +["鬼纹腰带"]={265,280,295,310}, +["魔化战锤"]={280,305,317,330}, +["魔化手镯"]={125,145,155,165}, +["魔化护甲片"]={300,320,330,340}, +["魔化瑟银头盔"]={300,320,330,340}, +["魔化瑟银带扣"]={285,285,297,310}, +["魔化瑟银护腿"]={300,320,330,340}, +["魔化瑟银胸甲"]={300,320,330,340}, +["魔化瑟银锭"]={250,0,0,0}, +["魔化皮"]={250,0,0,0}, +["魔化符文布包"]={275,290,305,320}, +["魔化翡翠"]={250,255,257,260}, +["魔化魔纹布包"]={225,240,255,270}, +["魔导力量之杖"]={300,325,335,345}, +["魔暴龙皮手套"]={290,310,320,330}, +["魔暴龙皮护腿"]={300,320,330,340}, +["魔法宝石油"]={275,0,0,0}, +["魔法禁锢徽记"]={230,260,275,290}, +["魔符雕刻护腕"]={300,320,330,340}, +["魔纹包"]={225,240,255,270}, +["魔纹布卷"]={175,180,182,185}, +["魔纹绷带"]={210,210,240,270}, +["魔网亲和披风"]={300,300,300,300}, +["魔血药水"]={275,290,310,330}, +["魔铸胸甲"]={285,305,315,325}, +["鱼人鳍汤"]={90,130,150,170}, +["鱼人鳞片护腕"]={190,210,220,230}, +["鱼人鳞片胸甲"]={95,125,140,155}, +["鱼人鳞片腰带"]={90,120,135,150}, +["鳄鱼浓汤"]={120,160,180,200}, +["鳄鱼炖肉"]={150,160,180,200}, +["鳄鱼肉排"]={80,120,140,160}, +["麻痹毒药"]={1,150,175,200}, +["麻痹毒药 II"]={1,215,240,265}, +["麻痹毒药 III"]={1,285,310,335}, +["黄玉坠饰"]={160,160,180,200}, +["黄金万能钥匙"]={150,150,160,170}, +["黄金权杖"]={260,0,0,0}, +["黄金石英头冠"]={175,195,202,210}, +["黄金符文戒指"]={285,310,320,330}, +["黄金能量核心"]={150,150,170,190}, +["黄金酒杯"]={175,195,202,210}, +["黎明之刃"]={275,300,312,325}, +["黎明使者护肩"]={290,310,320,330}, +["黎明手套"]={300,320,330,340}, +["黎明束腰"]={290,310,320,330}, +["黎明皮靴"]={290,310,320,330}, +["黎明石锤"]={300,325,337,350}, +["黑丝衬衣"]={155,165,170,175}, +["黑口鱼油"]={80,80,90,100}, +["黑手"]={300,320,330,340}, +["黑暗之手"]={145,165,180,195}, +["黑暗之矛"]={300,320,330,340}, +["黑暗之靴"]={140,160,175,190}, +["黑暗之魂护肩"]={300,320,330,340}, +["黑暗之魂护腿"]={300,320,330,340}, +["黑暗之魂胸甲"]={300,320,330,340}, +["黑暗符文头盔"]={300,320,330,340}, +["黑暗符文护手"]={300,320,330,340}, +["黑暗符文胸甲"]={300,320,330,340}, +["黑曜石带扣"]={300,300,310,320}, +["黑曜石胸针"]={175,190,197,205}, +["黑曜石锁甲"]={300,320,330,340}, +["黑皮外套"]={100,125,137,150}, +["黑皮战靴"]={100,125,137,150}, +["黑皮手套"]={120,155,167,180}, +["黑皮护肩"]={140,165,177,190}, +["黑皮披风"]={110,135,147,160}, +["黑皮短裤"]={115,140,152,165}, +["黑皮腰带"]={125,150,162,175}, +["黑石铁夹"]={140,160,170,180}, +["黑色丝质背包"]={185,205,220,235}, +["黑色冒险者衬衣"]={200,210,215,220}, +["黑色卫士"]={300,320,330,340}, +["黑色怒火"]={300,320,330,340}, +["黑色雏龙外衣"]={100,125,137,150}, +["黑色雏龙披风"]={100,125,137,150}, +["黑色魔纹之靴"]={230,245,260,275}, +["黑色魔纹外衣"]={205,220,235,250}, +["黑色魔纹头带"]={230,245,260,275}, +["黑色魔纹手套"]={215,230,245,260}, +["黑色魔纹护肩"]={230,245,260,275}, +["黑色魔纹短裤"]={205,220,235,250}, +["黑色魔纹长袍"]={210,225,240,255}, +["黑色龙鳞战靴"]={300,320,330,340}, +["黑色龙鳞护肩"]={300,320,330,340}, +["黑色龙鳞护腿"]={300,320,330,340}, +["黑色龙鳞胸甲"]={290,310,320,330}, +["黑铁利剑"]={300,320,330,340}, +["黑铁头盔"]={300,320,330,340}, +["黑铁带扣"]={275,275,280,285}, +["黑铁徽记之戒"]={290,320,330,340}, +["黑铁战斧"]={300,320,330,340}, +["黑铁护手"]={300,320,330,340}, +["黑铁护肩"]={280,300,310,320}, +["黑铁护腕"]={295,315,325,335}, +["黑铁护腿"]={300,320,330,340}, +["黑铁斩碎者"]={275,295,305,315}, +["黑铁板甲"]={285,305,315,325}, +["黑铁步枪"]={275,295,305,315}, +["黑铁炸弹"]={285,305,315,325}, +["黑铁矮人伪装"]={1,0,0,0}, +["黑铁粉碎者"]={265,285,295,305}, +["黑铁锁甲"]={270,290,300,310}, +["黑铁长靴"]={300,320,330,340}, +["龙喉手套"]={170,170,182,195}, +["龙喉护甲片"]={175,175,182,190}, +["龙息红椒"]={200,240,260,280}, +["龙鳞带扣"]={235,235,240,245}, +["龙鳞护手"]={225,245,255,265}, +["龙鳞护腿"]={245,245,245,245}, +["龙鳞胸甲"]={255,275,285,295}, +["龟壳头盔"]={230,250,260,270}, +["龟壳手套"]={205,225,235,245}, +["龟壳护腕"]={210,230,240,250}, +["龟壳护腿"]={235,255,265,275}, +["龟壳胸甲"]={210,230,240,250}, +} + +-- T=Trainer, A=AutoLearned, Q=Quest, D=Drop, V=Vendor, F=Fishing, O=WorldObject, ?=Unknown +NanamiTradeSkillSources = { +[65]="D", +[66]="D", +[67]="D", +[82]="V", +[87]="D", +[103]="D", +[118]="A", +[131]="D", +[151]="D", +[156]="D", +[724]="V", +[733]="V", +[787]="V", +[858]="T", +[929]="T", +[1017]="V", +[1082]="V", +[1251]="A", +[1710]="T", +[2300]="T", +[2302]="A", +[2303]="T", +[2304]="A", +[2307]="D", +[2308]="T", +[2309]="T", +[2310]="T", +[2311]="D", +[2312]="D", +[2313]="T", +[2314]="T", +[2315]="T", +[2316]="T", +[2317]="D", +[2318]="A", +[2319]="T", +[2454]="A", +[2455]="T", +[2456]="T", +[2457]="D", +[2458]="T", +[2459]="D", +[2568]="T", +[2569]="T", +[2570]="A", +[2572]="D", +[2575]="T", +[2576]="T", +[2577]="T", +[2578]="T", +[2579]="T", +[2580]="T", +[2581]="T", +[2582]="T", +[2583]="T", +[2584]="T", +[2585]="D", +[2587]="T", +[2679]="A", +[2680]="T", +[2681]="A", +[2682]="D", +[2683]="T", +[2684]="T", +[2685]="D", +[2687]="T", +[2840]="A", +[2841]="T", +[2842]="T", +[2844]="T", +[2845]="T", +[2847]="T", +[2848]="T", +[2849]="T", +[2850]="T", +[2851]="T", +[2852]="T", +[2853]="A", +[2854]="T", +[2857]="T", +[2862]="A", +[2863]="T", +[2864]="D", +[2865]="T", +[2866]="T", +[2867]="V", +[2868]="T", +[2869]="D", +[2870]="T", +[2871]="T", +[2888]="V", +[2892]="T", +[2893]="T", +[2996]="A", +[2997]="T", +[3220]="V", +[3239]="A", +[3240]="T", +[3241]="T", +[3382]="T", +[3383]="T", +[3384]="D", +[3385]="T", +[3386]="D", +[3387]="D", +[3388]="T", +[3389]="T", +[3390]="D", +[3391]="D", +[3469]="T", +[3470]="T", +[3471]="D", +[3472]="T", +[3473]="T", +[3474]="D", +[3478]="T", +[3480]="T", +[3481]="D", +[3482]="T", +[3483]="T", +[3484]="D", +[3485]="D", +[3486]="T", +[3487]="T", +[3488]="T", +[3489]="T", +[3490]="D", +[3491]="T", +[3492]="D", +[3530]="T", +[3531]="T", +[3575]="T", +[3576]="T", +[3577]="V", +[3662]="V", +[3663]="V", +[3664]="V", +[3665]="V", +[3666]="V", +[3719]="T", +[3726]="V", +[3727]="V", +[3728]="Q", +[3729]="Q", +[3775]="T", +[3776]="T", +[3823]="T", +[3824]="V", +[3825]="D", +[3826]="D", +[3827]="T", +[3828]="D", +[3829]="V", +[3835]="T", +[3836]="T", +[3837]="V", +[3840]="D", +[3841]="D", +[3842]="T", +[3843]="D", +[3844]="T", +[3845]="D", +[3846]="D", +[3847]="D", +[3848]="T", +[3849]="V", +[3850]="D", +[3851]="V", +[3852]="D", +[3853]="V", +[3854]="D", +[3855]="V", +[3856]="D", +[3859]="T", +[3860]="T", +[3928]="T", +[4231]="T", +[4233]="T", +[4234]="T", +[4236]="T", +[4237]="T", +[4238]="T", +[4239]="T", +[4240]="T", +[4241]="D", +[4242]="T", +[4243]="T", +[4244]="D", +[4245]="T", +[4246]="T", +[4247]="T", +[4248]="D", +[4249]="T", +[4250]="D", +[4251]="T", +[4252]="D", +[4253]="T", +[4254]="D", +[4255]="V", +[4256]="D", +[4257]="T", +[4258]="D", +[4259]="T", +[4260]="D", +[4262]="V", +[4264]="D", +[4265]="T", +[4304]="T", +[4305]="T", +[4307]="T", +[4308]="T", +[4309]="T", +[4310]="T", +[4311]="D", +[4312]="T", +[4313]="D", +[4314]="T", +[4315]="D", +[4316]="T", +[4317]="D", +[4318]="T", +[4319]="V", +[4320]="T", +[4321]="D", +[4322]="V", +[4323]="D", +[4324]="T", +[4325]="D", +[4326]="T", +[4327]="V", +[4328]="D", +[4329]="D", +[4330]="T", +[4331]="D", +[4332]="V", +[4333]="V", +[4334]="T", +[4335]="D", +[4336]="V", +[4339]="T", +[4343]="T", +[4344]="A", +[4357]="A", +[4358]="A", +[4359]="T", +[4360]="T", +[4361]="T", +[4362]="T", +[4363]="T", +[4364]="T", +[4365]="T", +[4366]="T", +[4367]="D", +[4368]="T", +[4369]="T", +[4370]="T", +[4371]="T", +[4372]="V", +[4373]="D", +[4374]="T", +[4375]="T", +[4376]="D", +[4377]="T", +[4378]="T", +[4379]="T", +[4380]="T", +[4381]="V", +[4382]="T", +[4383]="D", +[4384]="T", +[4385]="T", +[4386]="V", +[4387]="T", +[4388]="D", +[4389]="T", +[4390]="T", +[4391]="T", +[4392]="T", +[4393]="D", +[4394]="T", +[4395]="D", +[4396]="V", +[4397]="D", +[4398]="D", +[4401]="D", +[4403]="D", +[4404]="T", +[4405]="T", +[4406]="T", +[4407]="V", +[4455]="V", +[4456]="V", +[4457]="V", +[4592]="V", +[4593]="V", +[4594]="V", +[4596]="Q", +[4623]="Q", +[4852]="Q", +[5081]="Q", +[5095]="V", +[5237]="T", +[5472]="Q", +[5473]="V", +[5474]="V", +[5476]="V", +[5477]="V", +[5478]="Q", +[5479]="V", +[5480]="V", +[5507]="T", +[5525]="T", +[5526]="V", +[5527]="T", +[5530]="T", +[5540]="T", +[5541]="D", +[5542]="T", +[5631]="V", +[5633]="V", +[5634]="V", +[5739]="T", +[5762]="D", +[5763]="D", +[5764]="D", +[5765]="D", +[5766]="T", +[5770]="D", +[5780]="D", +[5781]="D", +[5782]="D", +[5783]="D", +[5957]="A", +[5958]="D", +[5961]="T", +[5962]="T", +[5963]="V", +[5964]="T", +[5965]="D", +[5966]="T", +[5996]="T", +[5997]="A", +[6037]="V", +[6038]="V", +[6040]="T", +[6041]="D", +[6042]="D", +[6043]="D", +[6048]="V", +[6049]="V", +[6050]="V", +[6051]="V", +[6052]="V", +[6149]="T", +[6214]="T", +[6218]="A", +[6219]="T", +[6238]="T", +[6239]="D", +[6240]="V", +[6241]="T", +[6242]="V", +[6243]="V", +[6263]="V", +[6264]="V", +[6290]="V", +[6316]="V", +[6338]="T", +[6339]="T", +[6350]="T", +[6370]="T", +[6371]="T", +[6372]="T", +[6373]="T", +[6384]="D", +[6385]="D", +[6450]="T", +[6451]="V", +[6452]="T", +[6453]="D", +[6466]="V", +[6467]="V", +[6468]="Q", +[6533]="T", +[6657]="D", +[6662]="D", +[6709]="Q", +[6712]="T", +[6714]="D", +[6730]="V", +[6731]="Q", +[6733]="V", +[6786]="T", +[6787]="T", +[6795]="T", +[6796]="T", +[6887]="V", +[6888]="A", +[6890]="V", +[6947]="A", +[6949]="T", +[6950]="T", +[6951]="T", +[7026]="T", +[7027]="V", +[7046]="T", +[7047]="D", +[7048]="T", +[7049]="D", +[7050]="T", +[7051]="T", +[7052]="T", +[7053]="V", +[7054]="T", +[7055]="T", +[7056]="V", +[7057]="T", +[7058]="T", +[7059]="D", +[7060]="D", +[7061]="D", +[7062]="T", +[7063]="V", +[7064]="T", +[7065]="D", +[7067]="V", +[7068]="V", +[7070]="V", +[7071]="T", +[7076]="V", +[7078]="V", +[7080]="V", +[7082]="V", +[7148]="V", +[7166]="T", +[7189]="T", +[7276]="A", +[7277]="A", +[7278]="T", +[7279]="T", +[7280]="D", +[7281]="T", +[7282]="T", +[7283]="V", +[7284]="V", +[7285]="T", +[7348]="T", +[7349]="V", +[7352]="V", +[7358]="D", +[7359]="D", +[7371]="T", +[7372]="T", +[7373]="D", +[7374]="T", +[7375]="D", +[7377]="T", +[7378]="T", +[7386]="V", +[7387]="T", +[7390]="D", +[7391]="D", +[7506]="V", +[7676]="V", +[7913]="Q", +[7914]="Q", +[7915]="Q", +[7916]="Q", +[7917]="Q", +[7918]="T", +[7919]="T", +[7920]="T", +[7921]="D", +[7922]="T", +[7924]="V", +[7925]="V", +[7926]="Q", +[7927]="Q", +[7928]="Q", +[7929]="Q", +[7930]="T", +[7931]="T", +[7932]="D", +[7933]="T", +[7934]="D", +[7935]="Q", +[7936]="Q", +[7937]="Q", +[7938]="T", +[7939]="T", +[7941]="T", +[7942]="D", +[7943]="D", +[7944]="D", +[7945]="T", +[7946]="D", +[7947]="V", +[7954]="T", +[7955]="T", +[7956]="T", +[7957]="T", +[7958]="T", +[7959]="T", +[7960]="T", +[7961]="T", +[7963]="T", +[7964]="T", +[7965]="T", +[7966]="T", +[7967]="D", +[7969]="D", +[8067]="A", +[8068]="T", +[8069]="T", +[8170]="T", +[8172]="T", +[8173]="T", +[8174]="D", +[8175]="T", +[8176]="T", +[8185]="T", +[8187]="D", +[8189]="T", +[8191]="T", +[8192]="V", +[8193]="T", +[8195]="V", +[8197]="T", +[8198]="T", +[8200]="D", +[8201]="D", +[8202]="D", +[8203]="D", +[8204]="D", +[8205]="D", +[8206]="D", +[8207]="D", +[8208]="D", +[8209]="D", +[8210]="Q", +[8211]="Q", +[8212]="Q", +[8213]="Q", +[8214]="Q", +[8215]="Q", +[8216]="D", +[8217]="T", +[8218]="T", +[8345]="T", +[8346]="T", +[8347]="T", +[8348]="T", +[8349]="T", +[8364]="V", +[8367]="T", +[8544]="V", +[8545]="T", +[8546]="D", +[8926]="T", +[8927]="T", +[8928]="T", +[8949]="T", +[8951]="T", +[8956]="T", +[8984]="T", +[8985]="T", +[9030]="Q", +[9036]="D", +[9060]="E", +[9061]="E", +[9088]="D", +[9144]="D", +[9149]="V", +[9154]="T", +[9155]="T", +[9172]="D", +[9179]="T", +[9186]="T", +[9187]="T", +[9197]="D", +[9206]="D", +[9210]="V", +[9224]="V", +[9233]="T", +[9264]="V", +[9312]="V", +[9313]="V", +[9318]="V", +[9366]="Q", +[9998]="T", +[9999]="T", +[10001]="T", +[10002]="T", +[10003]="T", +[10004]="T", +[10007]="D", +[10008]="D", +[10009]="D", +[10010]="D", +[10011]="D", +[10018]="D", +[10019]="T", +[10020]="D", +[10021]="T", +[10023]="T", +[10024]="T", +[10025]="Q", +[10026]="T", +[10027]="T", +[10028]="T", +[10029]="D", +[10030]="V", +[10031]="T", +[10032]="D", +[10033]="D", +[10034]="V", +[10035]="V", +[10036]="V", +[10038]="D", +[10039]="D", +[10040]="V", +[10041]="T", +[10042]="T", +[10044]="T", +[10045]="A", +[10046]="T", +[10047]="T", +[10048]="D", +[10050]="T", +[10051]="T", +[10052]="V", +[10053]="T", +[10054]="V", +[10055]="V", +[10056]="T", +[10421]="A", +[10423]="D", +[10498]="T", +[10499]="D", +[10500]="T", +[10501]="D", +[10502]="D", +[10503]="T", +[10504]="T", +[10505]="T", +[10506]="V", +[10507]="T", +[10508]="T", +[10510]="D", +[10512]="T", +[10513]="T", +[10514]="T", +[10518]="D", +[10542]="T", +[10543]="T", +[10545]="T", +[10546]="V", +[10548]="D", +[10558]="T", +[10559]="T", +[10560]="T", +[10561]="T", +[10562]="T", +[10576]="V", +[10577]="T", +[10585]="V", +[10586]="T", +[10587]="T", +[10588]="T", +[10592]="T", +[10644]="T", +[10645]="T", +[10646]="T", +[10713]="T", +[10716]="T", +[10720]="T", +[10721]="T", +[10724]="T", +[10725]="T", +[10726]="T", +[10727]="T", +[10841]="T", +[10918]="T", +[10920]="T", +[10921]="T", +[10922]="T", +[11128]="T", +[11130]="T", +[11144]="T", +[11145]="T", +[11287]="T", +[11288]="T", +[11289]="T", +[11290]="T", +[11371]="Q", +[11590]="T", +[11604]="D", +[11605]="D", +[11606]="D", +[11607]="D", +[11608]="D", +[11811]="D", +[11825]="G", +[11826]="G", +[12190]="T", +[12209]="V", +[12210]="V", +[12212]="V", +[12213]="V", +[12214]="V", +[12215]="V", +[12216]="V", +[12217]="V", +[12218]="V", +[12224]="V", +[12259]="T", +[12260]="D", +[12359]="T", +[12360]="V", +[12404]="T", +[12405]="D", +[12406]="D", +[12408]="D", +[12409]="D", +[12410]="D", +[12414]="D", +[12415]="D", +[12416]="D", +[12417]="D", +[12418]="D", +[12419]="D", +[12420]="D", +[12422]="Q", +[12424]="Q", +[12425]="Q", +[12426]="Q", +[12427]="Q", +[12428]="Q", +[12429]="Q", +[12610]="D", +[12611]="D", +[12612]="D", +[12613]="D", +[12614]="D", +[12618]="Q", +[12619]="Q", +[12620]="Q", +[12624]="D", +[12625]="D", +[12628]="Q", +[12631]="Q", +[12632]="D", +[12633]="D", +[12636]="D", +[12639]="D", +[12640]="D", +[12641]="D", +[12643]="T", +[12644]="T", +[12645]="D", +[12655]="T", +[12764]="V", +[12769]="V", +[12772]="V", +[12773]="V", +[12774]="Q", +[12775]="V", +[12776]="Q", +[12777]="Q", +[12779]="V", +[12781]="D", +[12782]="D", +[12783]="D", +[12784]="D", +[12790]="D", +[12792]="D", +[12794]="D", +[12795]="V", +[12796]="D", +[12797]="D", +[12798]="D", +[12802]="V", +[12803]="D", +[12808]="D", +[12810]="T", +[13423]="T", +[13442]="D", +[13443]="V", +[13444]="D", +[13445]="V", +[13446]="V", +[13447]="D", +[13452]="D", +[13453]="Q", +[13454]="D", +[13455]="D", +[13456]="D", +[13457]="D", +[13458]="D", +[13459]="D", +[13460]="V", +[13461]="D", +[13462]="D", +[13503]="D", +[13506]="D", +[13510]="D", +[13511]="D", +[13512]="D", +[13513]="D", +[13851]="V", +[13856]="T", +[13857]="D", +[13858]="V", +[13860]="V", +[13863]="V", +[13864]="V", +[13865]="D", +[13866]="D", +[13867]="D", +[13868]="D", +[13869]="D", +[13870]="D", +[13871]="D", +[13927]="V", +[13928]="V", +[13929]="V", +[13930]="V", +[13931]="V", +[13932]="V", +[13933]="V", +[13934]="V", +[13935]="V", +[14042]="D", +[14043]="D", +[14044]="D", +[14045]="D", +[14046]="V", +[14048]="T", +[14100]="D", +[14101]="D", +[14103]="D", +[14104]="D", +[14106]="D", +[14107]="V", +[14108]="D", +[14111]="D", +[14112]="D", +[14128]="D", +[14130]="D", +[14132]="D", +[14134]="D", +[14136]="D", +[14137]="D", +[14138]="D", +[14139]="D", +[14140]="D", +[14141]="D", +[14142]="D", +[14143]="D", +[14144]="D", +[14146]="D", +[14152]="D", +[14153]="D", +[14154]="D", +[14155]="D", +[14156]="D", +[14342]="V", +[14529]="T", +[14530]="T", +[15045]="V", +[15046]="D", +[15047]="D", +[15048]="V", +[15049]="D", +[15050]="V", +[15051]="D", +[15052]="D", +[15053]="D", +[15054]="D", +[15055]="D", +[15056]="D", +[15057]="V", +[15058]="D", +[15059]="D", +[15060]="D", +[15061]="V", +[15062]="D", +[15063]="V", +[15064]="D", +[15065]="D", +[15066]="D", +[15067]="V", +[15068]="D", +[15069]="D", +[15070]="D", +[15071]="V", +[15072]="D", +[15073]="D", +[15074]="V", +[15075]="D", +[15076]="D", +[15077]="V", +[15078]="D", +[15079]="D", +[15080]="V", +[15081]="D", +[15082]="D", +[15083]="V", +[15084]="D", +[15085]="D", +[15086]="D", +[15087]="D", +[15088]="D", +[15090]="D", +[15091]="D", +[15092]="D", +[15093]="D", +[15094]="V", +[15095]="D", +[15096]="D", +[15138]="Q", +[15141]="?", +[15407]="T", +[15564]="T", +[15802]="Q", +[15846]="T", +[15869]="T", +[15870]="T", +[15871]="T", +[15872]="T", +[15992]="T", +[15993]="V", +[15994]="V", +[15995]="D", +[15996]="D", +[15997]="D", +[15999]="D", +[16000]="V", +[16004]="D", +[16005]="D", +[16006]="V", +[16007]="D", +[16008]="D", +[16009]="D", +[16022]="D", +[16023]="V", +[16040]="D", +[16206]="T", +[16207]="V", +[16766]="V", +[16979]="V", +[16980]="V", +[16982]="V", +[16983]="V", +[16984]="V", +[16988]="V", +[16989]="V", +[17013]="V", +[17014]="V", +[17015]="V", +[17016]="V", +[17193]="Q", +[17197]="V", +[17198]="V", +[17222]="T", +[17704]="D", +[17708]="Q", +[17716]="Q", +[17721]="D", +[17723]="Q", +[17771]="T", +[17967]="Q", +[17968]="Q", +[18045]="V", +[18168]="D", +[18232]="O", +[18238]="V", +[18251]="D", +[18253]="D", +[18254]="D", +[18258]="Q", +[18262]="D", +[18263]="D", +[18282]="D", +[18283]="D", +[18294]="T", +[18405]="D", +[18407]="D", +[18408]="D", +[18409]="D", +[18413]="D", +[18486]="V", +[18504]="D", +[18506]="D", +[18508]="D", +[18509]="D", +[18510]="D", +[18511]="D", +[18587]="D", +[18588]="V", +[18594]="V", +[18631]="V", +[18634]="V", +[18637]="D", +[18638]="D", +[18639]="D", +[18641]="T", +[18645]="D", +[18660]="D", +[18662]="V", +[18948]="V", +[18984]="T", +[18986]="T", +[19026]="V", +[19043]="V", +[19044]="V", +[19047]="V", +[19048]="V", +[19049]="V", +[19050]="V", +[19051]="V", +[19052]="V", +[19056]="V", +[19057]="V", +[19058]="V", +[19059]="V", +[19148]="V", +[19149]="V", +[19156]="V", +[19157]="V", +[19162]="V", +[19163]="V", +[19164]="V", +[19165]="V", +[19166]="V", +[19167]="V", +[19168]="V", +[19169]="V", +[19170]="V", +[19440]="V", +[19682]="V", +[19683]="V", +[19684]="V", +[19685]="V", +[19686]="V", +[19687]="V", +[19688]="V", +[19689]="V", +[19690]="V", +[19691]="V", +[19692]="V", +[19693]="V", +[19694]="V", +[19695]="V", +[19931]="O", +[19998]="V", +[19999]="V", +[20002]="V", +[20004]="V", +[20007]="V", +[20008]="V", +[20039]="V", +[20074]="V", +[20295]="T", +[20296]="T", +[20380]="V", +[20452]="Q", +[20476]="V", +[20477]="V", +[20478]="V", +[20479]="V", +[20480]="V", +[20481]="V", +[20537]="Q", +[20538]="D", +[20539]="Q", +[20549]="Q", +[20550]="Q", +[20551]="Q", +[20575]="V", +[20744]="V", +[20745]="V", +[20746]="V", +[20747]="V", +[20748]="V", +[20749]="V", +[20750]="V", +[20844]="D", +[21023]="Q", +[21072]="V", +[21154]="Q", +[21217]="V", +[21277]="Q", +[21278]="D", +[21340]="V", +[21341]="O", +[21342]="D", +[21542]="Q", +[21546]="D", +[21557]="Q", +[21558]="Q", +[21559]="Q", +[21569]="Q", +[21570]="Q", +[21571]="Q", +[21574]="Q", +[21576]="Q", +[21589]="Q", +[21590]="Q", +[21592]="Q", +[21714]="Q", +[21716]="Q", +[21718]="Q", +[22191]="V", +[22194]="D", +[22195]="V", +[22196]="D", +[22197]="V", +[22198]="V", +[22246]="V", +[22248]="V", +[22249]="D", +[22251]="V", +[22252]="V", +[22383]="D", +[22384]="D", +[22385]="D", +[22652]="T", +[22654]="T", +[22655]="T", +[22658]="T", +[22660]="V", +[22661]="T", +[22662]="T", +[22663]="T", +[22664]="T", +[22665]="T", +[22666]="T", +[22669]="T", +[22670]="T", +[22671]="T", +[22756]="V", +[22757]="V", +[22758]="V", +[22759]="V", +[22760]="V", +[22761]="V", +[22762]="V", +[22763]="V", +[22764]="V", +[30818]="Q", +[41308]="T", +[41309]="T", +[41310]="T", +[41311]="T", +[41312]="T", +[41313]="T", +[41314]="T", +[41315]="T", +[41316]="T", +[41318]="T", +[41319]="T", +[41320]="T", +[41321]="T", +[41322]="T", +[41323]="T", +[41324]="?", +[41325]="T", +[41326]="V", +[41327]="D", +[41328]="D", +[41329]="T", +[41330]="?", +[41331]="T", +[41332]="T", +[41340]="T", +[41341]="T", +[41342]="T", +[41343]="T", +[41344]="T", +[41345]="T", +[41346]="T", +[41347]="T", +[41349]="T", +[41673]="?", +[41674]="V", +[46600]="Q", +[47408]="T", +[47409]="D", +[47410]="Q", +[47412]="D", +[47414]="D", +[50237]="D", +[51256]="D", +[51262]="?", +[51264]="D", +[51268]="D", +[51284]="D", +[51312]="V", +[51313]="V", +[53015]="Q", +[54009]="T", +[54010]="T", +[55043]="V", +[55046]="V", +[55048]="V", +[55050]="V", +[55052]="V", +[55054]="V", +[55056]="V", +[55058]="V", +[55060]="V", +[55141]="T", +[55142]="T", +[55143]="T", +[55144]="T", +[55145]="T", +[55146]="T", +[55147]="T", +[55148]="T", +[55150]="A", +[55151]="T", +[55152]="T", +[55153]="T", +[55154]="T", +[55156]="A", +[55157]="A", +[55158]="T", +[55159]="T", +[55160]="T", +[55161]="T", +[55162]="T", +[55163]="T", +[55164]="D", +[55165]="T", +[55166]="T", +[55167]="T", +[55168]="T", +[55169]="D", +[55170]="T", +[55171]="T", +[55172]="T", +[55173]="T", +[55174]="T", +[55175]="T", +[55176]="T", +[55178]="?", +[55180]="D", +[55195]="?", +[55196]="T", +[55197]="D", +[55198]="?", +[55199]="D", +[55200]="D", +[55202]="D", +[55204]="D", +[55210]="D", +[55211]="D", +[55212]="D", +[55213]="D", +[55228]="D", +[55241]="?", +[55242]="D", +[55243]="?", +[55244]="D", +[55248]="V", +[55255]="V", +[55256]="?", +[55258]="V", +[55259]="D", +[55260]="?", +[55261]="?", +[55263]="?", +[55264]="?", +[55265]="D", +[55266]="D", +[55267]="?", +[55268]="?", +[55269]="?", +[55271]="?", +[55272]="D", +[55273]="?", +[55316]="D", +[55317]="D", +[55318]="D", +[55319]="V", +[55320]="D", +[55321]="D", +[55322]="D", +[55323]="D", +[55324]="D", +[55325]="D", +[55326]="D", +[55327]="D", +[55328]="D", +[55329]="D", +[55330]="D", +[55331]="D", +[55332]="D", +[55333]="D", +[55334]="D", +[55335]="D", +[55336]="D", +[55337]="D", +[55338]="?", +[55339]="?", +[55340]="D", +[55341]="?", +[55359]="D", +[55360]="D", +[55361]="D", +[55362]="V", +[55363]="D", +[55364]="D", +[55365]="D", +[55366]="D", +[55367]="D", +[55368]="D", +[55518]="Q", +[55519]="Q", +[55520]="Q", +[55521]="Q", +[55522]="Q", +[55523]="Q", +[55524]="Q", +[55525]="Q", +[55526]="Q", +[55527]="Q", +[55528]="Q", +[55529]="Q", +[55530]="Q", +[55531]="Q", +[55532]="Q", +[55533]="Q", +[55534]="Q", +[56000]="T", +[56001]="T", +[56002]="Q", +[56003]="D", +[56004]="Q", +[56005]="T", +[56006]="Q", +[56007]="?", +[56008]="T", +[56009]="?", +[56010]="D", +[56011]="?", +[56012]="D", +[56013]="D", +[56014]="D", +[56015]="D", +[56016]="D", +[56017]="D", +[56018]="D", +[56019]="T", +[56020]="T", +[56023]="D", +[56031]="D", +[56032]="D", +[56033]="?", +[56034]="D", +[56035]="D", +[56036]="?", +[56037]="D", +[56038]="D", +[56039]="D", +[56040]="D", +[56041]="D", +[56042]="D", +[56043]="V", +[56044]="D", +[56045]="D", +[56046]="D", +[56047]="Q", +[56048]="Q", +[56049]="Q", +[56050]="Q", +[56051]="Q", +[56052]="Q", +[56053]="D", +[56054]="Q", +[56055]="Q", +[56056]="T", +[56057]="?", +[56058]="V", +[56059]="D", +[56060]="D", +[56061]="D", +[56062]="D", +[56063]="D", +[56064]="Q", +[56065]="?", +[56066]="D", +[56067]="V", +[56068]="D", +[56069]="D", +[56070]="Q", +[56071]="Q", +[56072]="D", +[56073]="D", +[56074]="D", +[56075]="D", +[56076]="D", +[56077]="D", +[56089]="D", +[56090]="D", +[56091]="D", +[56092]="T", +[56093]="D", +[56094]="D", +[56095]="D", +[56096]="Q", +[56112]="D", +[56113]="D", +[58112]="D", +[58134]="D", +[58304]="D", +[58305]="D", +[60007]="D", +[60008]="D", +[60009]="D", +[60010]="D", +[60098]="D", +[60099]="D", +[60287]="D", +[60288]="D", +[60289]="D", +[60290]="D", +[60291]="D", +[60292]="D", +[60293]="D", +[60294]="V", +[60573]="D", +[60574]="D", +[60575]="D", +[60576]="D", +[60577]="D", +[60578]="D", +[60907]="V", +[60908]="V", +[60909]="V", +[60910]="V", +[60976]="Q", +[60977]="Q", +[60978]="Q", +[61181]="D", +[61182]="D", +[61183]="Q", +[61185]="D", +[61186]="D", +[61187]="D", +[61188]="D", +[61216]="Q", +[61224]="Q", +[61225]="Q", +[61229]="Q", +[61230]="Q", +[61356]="D", +[61357]="Q", +[61358]="Q", +[61359]="Q", +[61360]="D", +[61361]="Q", +[61362]="Q", +[61363]="Q", +[61364]="D", +[61365]="Q", +[61366]="Q", +[61367]="Q", +[61648]="V", +[61649]="V", +[61732]="D", +[61779]="V", +[61780]="V", +[61781]="V", +[61782]="V", +[61783]="D", +[61784]="D", +[61785]="Q", +[61810]="Q", +[61818]="D", +[65000]="V", +[65001]="D", +[65002]="T", +[65003]="D", +[65004]="Q", +[65005]="?", +[65006]="D", +[65007]="Q", +[65008]="V", +[65009]="D", +[65010]="T", +[65011]="T", +[65012]="T", +[65013]="D", +[65014]="D", +[65015]="D", +[65019]="D", +[65021]="V", +[65022]="D", +[65023]="D", +[65024]="D", +[65025]="D", +[65026]="D", +[65027]="D", +[65032]="T", +[65035]="V", +[65036]="V", +[65037]="V", +[65038]="V", +[65039]="V", +[81030]="T", +[81031]="T", +[81032]="T", +[81061]="T", +[81062]="T", +[81063]="T", +[81064]="T", +[81065]="T", +[81066]="T", +[81092]="T", +[81093]="D", +[83280]="T", +[83281]="T", +[83282]="T", +[83283]="T", +[83284]="T", +[83285]="T", +[83286]="T", +[83287]="T", +[83288]="T", +[83289]="T", +[83290]="T", +[83291]="T", +[83292]="T", +[83293]="T", +[83294]="T", +[83295]="T", +[83296]="T", +[83297]="T", +[83309]="Q", +[83400]="T", +[83401]="T", +[83402]="T", +[83403]="T", +[83404]="T", +[83405]="T", +[83410]="T", +[83411]="T", +[83412]="T", +[83413]="T", +[83414]="T", +[83415]="T", +[84040]="Q", +[84041]="V", +["Dalaran Wizard Disguise"]="V", +["Dark Iron Dwarf Disguise"]="V", +["Defias Disguise"]="V", +["Enchant 2H Weapon - Agility"]="V", +["Enchant 2H Weapon - Greater Impact"]="T", +["Enchant 2H Weapon - Impact"]="T", +["Enchant 2H Weapon - Lesser Impact"]="T", +["Enchant 2H Weapon - Lesser Intellect"]="V", +["Enchant 2H Weapon - Lesser Spirit"]="D", +["Enchant 2H Weapon - Major Intellect"]="D", +["Enchant 2H Weapon - Major Spirit"]="D", +["Enchant 2H Weapon - Minor Impact"]="T", +["Enchant 2H Weapon - Minor Intellect"]="D", +["Enchant 2H Weapon - Superior Impact"]="D", +["Enchant Boots - Agility"]="T", +["Enchant Boots - Greater Agility"]="D", +["Enchant Boots - Greater Spirit"]="Q", +["Enchant Boots - Greater Stamina"]="D", +["Enchant Boots - Lesser Agility"]="T", +["Enchant Boots - Lesser Intellect"]="D", +["Enchant Boots - Lesser Spirit"]="D", +["Enchant Boots - Lesser Stamina"]="T", +["Enchant Boots - Major Intellect"]="V", +["Enchant Boots - Minor Agility"]="V", +["Enchant Boots - Minor Speed"]="T", +["Enchant Boots - Minor Stamina"]="T", +["Enchant Boots - Spirit"]="D", +["Enchant Boots - Stamina"]="T", +["Enchant Boots - Superior Stamina"]="D", +["Enchant Boots - Vampirism"]="D", +["Enchant Bracer - Agility"]="D", +["Enchant Bracer - Deflection"]="V", +["Enchant Bracer - Greater Agility"]="V", +["Enchant Bracer - Greater Deflection"]="Q", +["Enchant Bracer - Greater Intellect"]="D", +["Enchant Bracer - Greater Spirit"]="D", +["Enchant Bracer - Greater Stamina"]="D", +["Enchant Bracer - Greater Strength"]="T", +["Enchant Bracer - Healing Power"]="V", +["Enchant Bracer - Intellect"]="T", +["Enchant Bracer - Lesser Deflection"]="V", +["Enchant Bracer - Lesser Intellect"]="T", +["Enchant Bracer - Lesser Spirit"]="D", +["Enchant Bracer - Lesser Stamina"]="T", +["Enchant Bracer - Lesser Strength"]="V", +["Enchant Bracer - Mana Regeneration"]="V", +["Enchant Bracer - Minor Agility"]="T", +["Enchant Bracer - Minor Deflect"]="A", +["Enchant Bracer - Minor Health"]="A", +["Enchant Bracer - Minor Spirit"]="D", +["Enchant Bracer - Minor Stamina"]="T", +["Enchant Bracer - Minor Strength"]="D", +["Enchant Bracer - Spell Power"]="V", +["Enchant Bracer - Spirit"]="T", +["Enchant Bracer - Stamina"]="T", +["Enchant Bracer - Strength"]="T", +["Enchant Bracer - Superior Spirit"]="D", +["Enchant Bracer - Superior Stamina"]="D", +["Enchant Bracer - Superior Strength"]="D", +["Enchant Bracer - Vampirism"]="D", +["Enchant Chest - Greater Health"]="T", +["Enchant Chest - Greater Mana"]="T", +["Enchant Chest - Greater Stats"]="D", +["Enchant Chest - Health"]="T", +["Enchant Chest - Lesser Absorption"]="T", +["Enchant Chest - Lesser Health"]="T", +["Enchant Chest - Lesser Mana"]="V", +["Enchant Chest - Lesser Stats"]="T", +["Enchant Chest - Major Health"]="V", +["Enchant Chest - Major Mana"]="D", +["Enchant Chest - Mana"]="T", +["Enchant Chest - Mighty Mana"]="D", +["Enchant Chest - Minor Absorption"]="T", +["Enchant Chest - Minor Health"]="T", +["Enchant Chest - Minor Mana"]="D", +["Enchant Chest - Minor Stats"]="T", +["Enchant Chest - Stats"]="T", +["Enchant Chest - Superior Health"]="T", +["Enchant Chest - Superior Mana"]="T", +["Enchant Cloak - Defense"]="T", +["Enchant Cloak - Dodge"]="D", +["Enchant Cloak - Fire Resistance"]="T", +["Enchant Cloak - Greater Arcane Resistance"]="D", +["Enchant Cloak - Greater Defense"]="T", +["Enchant Cloak - Greater Fire Resistance"]="V", +["Enchant Cloak - Greater Nature Resistance"]="V", +["Enchant Cloak - Greater Resistance"]="D", +["Enchant Cloak - Lesser Agility"]="D", +["Enchant Cloak - Lesser Fire Resistance"]="T", +["Enchant Cloak - Lesser Protection"]="T", +["Enchant Cloak - Lesser Shadow Resistance"]="D", +["Enchant Cloak - Minor Agility"]="D", +["Enchant Cloak - Minor Protection"]="T", +["Enchant Cloak - Minor Resistance"]="T", +["Enchant Cloak - Resistance"]="T", +["Enchant Cloak - Stealth"]="D", +["Enchant Cloak - Subtlety"]="D", +["Enchant Cloak - Superior Defense"]="V", +["Enchant Gloves - Advanced Herbalism"]="D", +["Enchant Gloves - Advanced Mining"]="D", +["Enchant Gloves - Agility"]="T", +["Enchant Gloves - Arcane Power"]="D", +["Enchant Gloves - Fire Power"]="D", +["Enchant Gloves - Fishing"]="D", +["Enchant Gloves - Frost Power"]="D", +["Enchant Gloves - Greater Agility"]="D", +["Enchant Gloves - Greater Strength"]="D", +["Enchant Gloves - Healing Power"]="D", +["Enchant Gloves - Herbalism"]="D", +["Enchant Gloves - Major Strength"]="Q", +["Enchant Gloves - Mining"]="D", +["Enchant Gloves - Minor Haste"]="T", +["Enchant Gloves - Nature Power"]="D", +["Enchant Gloves - Riding Skill"]="D", +["Enchant Gloves - Shadow Power"]="D", +["Enchant Gloves - Skinning"]="D", +["Enchant Gloves - Strength"]="T", +["Enchant Gloves - Superior Agility"]="D", +["Enchant Gloves - Threat"]="D", +["Enchant Shield - Frost Resistance"]="D", +["Enchant Shield - Greater Spirit"]="T", +["Enchant Shield - Greater Stamina"]="V", +["Enchant Shield - Lesser Block"]="D", +["Enchant Shield - Lesser Protection"]="D", +["Enchant Shield - Lesser Spirit"]="T", +["Enchant Shield - Lesser Stamina"]="T", +["Enchant Shield - Minor Stamina"]="T", +["Enchant Shield - Spirit"]="T", +["Enchant Shield - Stamina"]="D", +["Enchant Shield - Superior Spirit"]="D", +["Enchant Weapon - Agility"]="V", +["Enchant Weapon - Crusader"]="D", +["Enchant Weapon - Demonslaying"]="D", +["Enchant Weapon - Fiery Weapon"]="D", +["Enchant Weapon - Greater Striking"]="T", +["Enchant Weapon - Healing Power"]="D", +["Enchant Weapon - Icy Chill"]="D", +["Enchant Weapon - Lesser Beastslayer"]="D", +["Enchant Weapon - Lesser Elemental Slayer"]="D", +["Enchant Weapon - Lesser Striking"]="T", +["Enchant Weapon - Lifestealing"]="D", +["Enchant Weapon - Mighty Intellect"]="V", +["Enchant Weapon - Mighty Spirit"]="V", +["Enchant Weapon - Minor Beastslayer"]="D", +["Enchant Weapon - Minor Striking"]="T", +["Enchant Weapon - Spell Power"]="D", +["Enchant Weapon - Strength"]="V", +["Enchant Weapon - Striking"]="T", +["Enchant Weapon - Superior Striking"]="D", +["Enchant Weapon - Unholy Weapon"]="D", +["Enchant Weapon - Winter's Might"]="Q", +["Peasant Disguise"]="A", +["Peon Disguise"]="A", +["South Seas Pirate Disguise"]="V", +["Stonesplinter Trogg Disguise"]="V", +["Syndicate Disguise"]="V", +} + +-- Reagents: craftItemID -> { {itemID, count}, ... } +NanamiTradeSkillReagents = { +[65]={{2321,2},{6371,1},{7287,5}}, +[66]={{3486,2},{3577,8},{7071,1}}, +[67]={{7071,1},{7966,1},{8165,14},{12359,4}}, +[82]={{7071,1},{7078,1},{11371,2},{12644,2}}, +[87]={{7071,1},{12644,1},{12655,2},{61673,2}}, +[103]={{7071,1},{7076,1},{7082,1},{12644,2},{22203,2}}, +[118]={{765,1},{2447,1},{3371,1}}, +[131]={{3859,8},{7071,1},{7966,1}}, +[151]={{6037,8},{7071,1},{7966,2}}, +[156]={{3860,12},{55249,3},{6371,3},{3466,2},{55152,2}}, +[724]={{723,1},{2678,1}}, +[733]={{729,1},{730,1},{731,1}}, +[787]={{6303,1}}, +[858]={{118,1},{2450,1}}, +[929]={{2450,1},{2453,1},{3372,1}}, +[1017]={{1015,2},{2665,1}}, +[1082]={{1080,1},{1081,1}}, +[1251]={{2589,1}}, +[1710]={{3356,1},{3357,1},{3372,1}}, +[2300]={{2318,8},{2320,4}}, +[2302]={{2318,2},{2320,1}}, +[2303]={{2318,4},{2320,1}}, +[2304]={{2318,1}}, +[2307]={{2318,7},{2320,2}}, +[2308]={{2318,10},{2321,2}}, +[2309]={{2318,8},{2320,5}}, +[2310]={{2318,5},{2320,2}}, +[2311]={{2318,8},{2320,2},{2324,1}}, +[2312]={{2318,4},{2320,2},{4231,1}}, +[2313]={{2319,4},{2320,1}}, +[2314]={{2319,10},{2321,2},{4231,2}}, +[2315]={{2319,4},{2321,2},{4340,1}}, +[2316]={{2319,8},{2321,1},{4340,1}}, +[2317]={{2319,6},{2321,1},{4340,1}}, +[2318]={{2934,3}}, +[2319]={{2318,4}}, +[2454]={{765,1},{2449,1},{3371,1}}, +[2455]={{765,1},{785,1},{3371,1}}, +[2456]={{785,2},{2447,1},{3371,1}}, +[2457]={{765,1},{2452,1},{3371,1}}, +[2458]={{2447,1},{2449,2},{3371,1}}, +[2459]={{2450,1},{2452,1},{3371,1}}, +[2568]={{2320,1},{2996,1}}, +[2569]={{2318,1},{2320,1},{2996,3}}, +[2570]={{2320,1},{2996,1}}, +[2572]={{2320,2},{2604,2},{2996,3}}, +[2575]={{2320,1},{2604,1},{2996,2}}, +[2576]={{2320,1},{2324,1},{2996,1}}, +[2577]={{2320,1},{2996,2},{6260,1}}, +[2578]={{2318,1},{2321,1},{2996,4}}, +[2579]={{2321,1},{2605,1},{2996,3}}, +[2580]={{2320,3},{2996,2}}, +[2581]={{2589,2}}, +[2582]={{2321,2},{2605,1},{2997,2}}, +[2583]={{2318,2},{2321,2},{2997,4}}, +[2584]={{2321,1},{2997,1}}, +[2585]={{2321,3},{2997,4},{4340,1}}, +[2587]={{2321,1},{2997,2},{4340,1}}, +[2679]={{2672,1}}, +[2680]={{2672,1},{2678,1}}, +[2681]={{769,1}}, +[2682]={{2675,1},{2678,1}}, +[2683]={{2674,1},{2678,1}}, +[2684]={{2673,1}}, +[2685]={{2677,2},{2692,1}}, +[2687]={{2677,1},{2678,1}}, +[2840]={{2770,1}}, +[2841]={{2840,1},{3576,1}}, +[2842]={{2775,1}}, +[2844]={{2589,2},{2840,6},{2880,1}}, +[2845]={{2589,2},{2840,6},{2880,1}}, +[2847]={{2589,2},{2840,6},{2880,1}}, +[2848]={{2319,1},{2841,6},{2880,4}}, +[2849]={{2319,1},{2841,7},{2880,4}}, +[2850]={{2319,2},{2841,5},{2880,4}}, +[2851]={{2840,6}}, +[2852]={{2840,4}}, +[2853]={{2840,2}}, +[2854]={{2840,10},{3470,3}}, +[2857]={{2840,10}}, +[2862]={{2835,1}}, +[2863]={{2836,1}}, +[2864]={{1210,1},{2840,12},{3470,2}}, +[2865]={{2841,6}}, +[2866]={{2841,7}}, +[2867]={{2841,4}}, +[2868]={{2841,5},{3478,2}}, +[2869]={{1705,1},{2841,10},{2842,2},{3478,2}}, +[2870]={{1206,2},{1705,2},{2841,20},{2842,4},{5500,2}}, +[2871]={{2838,1}}, +[2888]={{2886,1},{2894,1}}, +[2892]={{3372,1},{5173,1}}, +[2893]={{3372,1},{5173,2}}, +[2996]={{2589,2}}, +[2997]={{2592,3}}, +[3220]={{3172,1},{3173,1},{3174,1}}, +[3239]={{2589,1},{2835,1}}, +[3240]={{2592,1},{2836,1}}, +[3241]={{2592,1},{2838,1}}, +[3382]={{2447,1},{2449,2},{3371,1}}, +[3383]={{785,1},{2450,2},{3371,1}}, +[3384]={{785,3},{3355,1},{3371,1}}, +[3385]={{785,1},{3371,1},{3820,1}}, +[3386]={{1288,1},{2453,1},{3372,1}}, +[3387]={{8839,2},{8845,1},{8925,1}}, +[3388]={{2450,2},{2453,2},{3372,1}}, +[3389]={{3355,1},{3372,1},{3820,1}}, +[3390]={{2452,1},{3355,1},{3372,1}}, +[3391]={{2449,1},{3356,1},{3372,1}}, +[3469]={{2840,8}}, +[3470]={{2835,2}}, +[3471]={{774,1},{2840,8},{3470,2}}, +[3472]={{2840,8},{3470,2}}, +[3473]={{2321,2},{2840,8},{3470,3}}, +[3474]={{774,1},{818,1},{2840,8}}, +[3478]={{2836,2}}, +[3480]={{1210,1},{2841,5},{3478,1}}, +[3481]={{2841,8},{2842,2},{3478,2}}, +[3482]={{2841,6},{2842,1},{3478,2}}, +[3483]={{2841,8},{2842,1},{3478,2}}, +[3484]={{1705,2},{2605,1},{3478,2},{3575,4}}, +[3485]={{2605,1},{3478,2},{3575,4},{5498,2}}, +[3486]={{2838,3}}, +[3487]={{818,2},{2319,2},{2840,14},{2880,2}}, +[3488]={{774,2},{2318,2},{2840,12},{2880,2},{3470,2}}, +[3489]={{2318,2},{2840,10},{2842,2},{2880,2},{3470,2}}, +[3490]={{1210,2},{2319,2},{2459,1},{2841,4},{3466,1},{3478,2}}, +[3491]={{1206,1},{1210,1},{2319,2},{2841,8},{3466,1},{3478,2}}, +[3492]={{1705,2},{2319,2},{3391,1},{3466,2},{3478,2},{3575,6}}, +[3530]={{2592,1}}, +[3531]={{2592,2}}, +[3575]={{2772,1}}, +[3576]={{2771,1}}, +[3577]={{3575,1}}, +[3662]={{2678,1},{2924,1}}, +[3663]={{1468,2},{2692,1}}, +[3664]={{2692,1},{3667,1}}, +[3665]={{2692,1},{3685,1}}, +[3666]={{2251,2},{2692,1}}, +[3719]={{2321,2},{4234,5}}, +[3726]={{2692,1},{3730,1}}, +[3727]={{2692,1},{3731,1}}, +[3728]={{3713,1},{3731,2}}, +[3729]={{3712,1},{3713,1}}, +[3775]={{2930,1},{3371,1}}, +[3776]={{8923,3},{8925,1}}, +[3823]={{3355,1},{3372,1},{3818,1}}, +[3824]={{3369,4},{3372,1},{3818,4}}, +[3825]={{3355,1},{3372,1},{3821,1}}, +[3826]={{2453,1},{3357,1},{3372,1}}, +[3827]={{3356,1},{3372,1},{3820,1}}, +[3828]={{3358,1},{3372,1},{3818,1}}, +[3829]={{3358,4},{3372,1},{3819,2}}, +[3835]={{2605,1},{3575,6}}, +[3836]={{2605,1},{3575,12},{3864,1}}, +[3837]={{3486,2},{3577,2},{3859,8}}, +[3840]={{2605,1},{3486,1},{3575,7}}, +[3841]={{3486,1},{3577,2},{3859,6}}, +[3842]={{2605,1},{3486,1},{3575,8}}, +[3843]={{3486,1},{3575,10},{3577,2}}, +[3844]={{1206,2},{1529,2},{3486,4},{3575,20},{4255,1}}, +[3845]={{1529,2},{3486,4},{3577,2},{3859,12}}, +[3846]={{1705,1},{3486,2},{3859,8},{3864,1}}, +[3847]={{3486,4},{3577,4},{3859,10},{3864,1}}, +[3848]={{818,1},{2319,1},{2841,6},{2880,4},{3470,2}}, +[3849]={{1705,2},{3466,2},{3486,1},{3575,6},{4234,3}}, +[3850]={{1529,2},{3466,2},{3486,2},{3575,8},{4234,3}}, +[3851]={{2842,4},{3466,2},{3486,1},{3575,8},{4234,2}}, +[3852]={{1705,2},{3466,2},{3486,2},{3575,10},{3577,4},{4234,2}}, +[3853]={{1705,3},{3466,2},{3486,2},{3859,8},{4234,3}}, +[3854]={{1529,2},{3466,2},{3486,2},{3829,1},{3859,8},{4234,4}}, +[3855]={{3466,2},{3486,2},{3575,14},{3577,4},{4234,2}}, +[3856]={{3466,2},{3486,3},{3824,1},{3859,10},{3864,2},{4234,3}}, +[3859]={{3575,1},{3857,1}}, +[3860]={{3858,1}}, +[3928]={{3358,1},{8838,1},{8925,1}}, +[4231]={{783,1},{4289,1}}, +[4233]={{4232,1},{4289,1}}, +[4234]={{2319,5}}, +[4236]={{4235,1},{4289,3}}, +[4237]={{2318,6},{2320,1}}, +[4238]={{2320,3},{2996,3}}, +[4239]={{2318,3},{2320,2}}, +[4240]={{2321,1},{2997,3}}, +[4241]={{2321,1},{2605,1},{2997,4}}, +[4242]={{2318,6},{2320,2},{4231,1}}, +[4243]={{2318,6},{2320,4},{4231,3}}, +[4244]={{2320,2},{4231,2},{4243,1}}, +[4245]={{2321,3},{4234,2},{4305,3}}, +[4246]={{2318,6},{2320,2}}, +[4247]={{2319,14},{2321,4}}, +[4248]={{2312,1},{2321,1},{4233,1},{4340,1}}, +[4249]={{2321,2},{4233,1},{4246,1},{4340,1}}, +[4250]={{2319,8},{2321,2},{3383,1}}, +[4251]={{2319,4},{2321,1},{4233,1}}, +[4252]={{2319,12},{2321,2},{3390,1},{4340,1}}, +[4253]={{2319,4},{2321,2},{3182,2},{3389,2},{4233,2}}, +[4254]={{2321,1},{4234,6},{5637,2}}, +[4255]={{2321,4},{2605,2},{4234,9}}, +[4256]={{2321,2},{3824,1},{4234,12},{4236,2}}, +[4257]={{2321,1},{2605,1},{4234,5},{4236,1},{7071,1}}, +[4258]={{2321,1},{4234,4},{4236,2},{7071,1}}, +[4259]={{2321,1},{2605,1},{4234,6},{4236,2}}, +[4260]={{4234,6},{4236,2},{4291,1}}, +[4262]={{1529,2},{2321,1},{3864,1},{4236,4},{5500,2}}, +[4264]={{4096,2},{4234,6},{4236,2},{4291,1},{5633,1},{7071,1}}, +[4265]={{2321,1},{4234,5}}, +[4304]={{4234,6}}, +[4305]={{4306,4}}, +[4307]={{2320,1},{2996,2}}, +[4308]={{2320,2},{2605,1},{2996,3}}, +[4309]={{2321,2},{2996,4}}, +[4310]={{2321,1},{2997,3}}, +[4311]={{2321,2},{2997,3},{5498,2}}, +[4312]={{2318,2},{2321,1},{2996,5}}, +[4313]={{2318,2},{2321,1},{2604,2},{2997,4}}, +[4314]={{2321,2},{2997,3}}, +[4315]={{2319,2},{2321,2},{2997,6}}, +[4316]={{2321,4},{2997,5}}, +[4317]={{2321,3},{2997,6},{5500,1}}, +[4318]={{2321,3},{2997,4},{3383,1}}, +[4319]={{2321,2},{4234,2},{4305,3},{6260,2}}, +[4320]={{2319,4},{3182,4},{4305,2},{5500,2}}, +[4321]={{2321,2},{3182,1},{4305,3}}, +[4322]={{2321,2},{4305,3},{4337,2}}, +[4323]={{3824,1},{4291,1},{4305,4}}, +[4324]={{4305,5},{6260,4}}, +[4325]={{4291,1},{4305,4},{4337,2}}, +[4326]={{3827,1},{4291,1},{4305,4}}, +[4327]={{3829,1},{4291,2},{4337,2},{4339,3}}, +[4328]={{4305,4},{4337,2},{7071,1}}, +[4329]={{3864,1},{4234,4},{4291,1},{4339,4},{7071,1}}, +[4330]={{2321,1},{2604,2},{2997,3}}, +[4331]={{2321,4},{2324,2},{2997,4},{5500,1}}, +[4332]={{2321,1},{4305,1},{4341,1}}, +[4333]={{2321,1},{4305,2},{4340,2}}, +[4334]={{2321,1},{2324,2},{4305,3}}, +[4335]={{4291,1},{4305,4},{4342,1}}, +[4336]={{2325,1},{4291,1},{4305,5}}, +[4339]={{4338,5}}, +[4343]={{2320,1},{2996,2}}, +[4344]={{2320,1},{2996,1}}, +[4357]={{2835,1}}, +[4358]={{2589,1},{4357,2}}, +[4359]={{2840,1}}, +[4360]={{2589,1},{2840,1},{4357,2},{4359,1}}, +[4361]={{2840,2},{2880,1}}, +[4362]={{4359,1},{4361,1},{4399,1}}, +[4363]={{2589,2},{2840,1},{4359,2}}, +[4364]={{2836,1}}, +[4365]={{2589,1},{4364,3}}, +[4366]={{2592,1},{2841,1},{4359,2},{4363,1}}, +[4367]={{159,1},{2318,1},{4363,1},{4364,2}}, +[4368]={{818,2},{2318,6}}, +[4369]={{2319,2},{4359,4},{4361,2},{4399,1}}, +[4370]={{2840,3},{4364,4},{4404,1}}, +[4371]={{2841,2},{2880,1}}, +[4372]={{1206,3},{4359,2},{4371,2},{4400,1}}, +[4373]={{1210,2},{2319,4}}, +[4374]={{2592,1},{2841,2},{4364,4},{4404,1}}, +[4375]={{2592,1},{2841,2}}, +[4376]={{4375,1},{4402,1}}, +[4377]={{2838,1}}, +[4378]={{2592,1},{4377,2}}, +[4379]={{2842,3},{4371,2},{4375,2},{4400,1}}, +[4380]={{2841,3},{4377,2},{4404,1}}, +[4381]={{1206,1},{2319,2},{4371,1},{4375,2}}, +[4382]={{2319,1},{2592,1},{2841,2}}, +[4383]={{1705,2},{4371,3},{4375,3},{4400,1}}, +[4384]={{2592,2},{4375,1},{4377,2},{4382,1}}, +[4385]={{1206,2},{2319,4},{4368,1}}, +[4386]={{3829,1},{4375,1}}, +[4387]={{3575,2}}, +[4388]={{1529,1},{4306,2},{4371,1},{4375,3}}, +[4389]={{3575,1},{10558,1}}, +[4390]={{3575,1},{4306,1},{4377,1}}, +[4391]={{4234,4},{4382,1},{4387,2},{4389,2}}, +[4392]={{4234,4},{4382,1},{4387,1},{4389,1}}, +[4393]={{3864,2},{4234,6}}, +[4394]={{3575,3},{4377,3},{4404,1}}, +[4395]={{3575,2},{4377,3},{4389,1}}, +[4396]={{3864,2},{4382,1},{4387,4},{4389,4},{7191,1}}, +[4397]={{1529,2},{1705,2},{3864,2},{4389,4},{7191,1}}, +[4398]={{159,1},{4234,2},{10505,2}}, +[4401]={{774,2},{2840,1},{4359,1},{4363,1}}, +[4403]={{2319,4},{4371,4},{4377,4},{4387,1}}, +[4404]={{2842,1}}, +[4405]={{774,1},{4359,1},{4361,1}}, +[4406]={{1206,1},{4371,1}}, +[4407]={{1529,1},{3864,1},{4371,1}}, +[4455]={{2321,2},{4234,4},{4461,6}}, +[4456]={{2321,2},{4234,4},{4461,4}}, +[4457]={{2692,1},{3404,1}}, +[4592]={{6289,1}}, +[4593]={{6308,1}}, +[4594]={{6362,1}}, +[4596]={{2447,1},{3164,1},{3371,1}}, +[4623]={{3372,1},{3821,1},{3858,1}}, +[4852]={{4306,1},{4377,1},{4611,1}}, +[5081]={{2318,4},{2320,1},{5082,3}}, +[5095]={{6361,1}}, +[5237]={{2928,1},{2930,1},{3371,1}}, +[5472]={{5465,1}}, +[5473]={{5466,1}}, +[5474]={{2678,1},{5467,1}}, +[5476]={{2678,1},{5468,1}}, +[5477]={{4536,1},{5469,1}}, +[5478]={{5051,1}}, +[5479]={{2692,1},{5470,1}}, +[5480]={{2678,4},{5471,1}}, +[5507]={{1206,1},{4363,1},{4371,2},{4375,2}}, +[5525]={{159,1},{5503,1}}, +[5526]={{1179,1},{2678,1},{5503,1}}, +[5527]={{2692,1},{5504,1}}, +[5530]={{3818,1}}, +[5540]={{2841,6},{3466,1},{3478,2},{5498,2}}, +[5541]={{2319,2},{2841,10},{3466,1},{3478,2},{5500,1}}, +[5542]={{2321,2},{2997,3},{5498,1}}, +[5631]={{2450,1},{3371,1},{5635,1}}, +[5633]={{3356,1},{3372,1},{5637,1}}, +[5634]={{3372,1},{3820,1},{6370,2}}, +[5739]={{2321,2},{4234,14},{7071,1}}, +[5762]={{2321,1},{2604,1},{2996,4}}, +[5763]={{2321,1},{2604,1},{2997,4}}, +[5764]={{2321,3},{2605,1},{4234,3},{4305,4}}, +[5765]={{2321,4},{2325,1},{4305,5}}, +[5766]={{2321,2},{3182,2},{4305,2}}, +[5770]={{2321,2},{3182,2},{4305,4}}, +[5780]={{2318,6},{2321,1},{5784,8}}, +[5781]={{2318,8},{2321,1},{4231,1},{5784,12}}, +[5782]={{2321,3},{4234,10},{4236,1},{5785,12}}, +[5783]={{4234,14},{4236,1},{4291,1},{5785,16}}, +[5957]={{2318,3},{2320,1}}, +[5958]={{2319,8},{2321,1},{2997,1}}, +[5961]={{2319,12},{2321,1},{4340,1}}, +[5962]={{2321,2},{4234,12},{4305,2}}, +[5963]={{1206,1},{2321,2},{4234,10}}, +[5964]={{2321,2},{4234,8},{4236,1}}, +[5965]={{4234,14},{4291,2},{4305,2}}, +[5966]={{4234,4},{4236,1},{4291,1}}, +[5996]={{3371,1},{3820,1},{6370,2}}, +[5997]={{765,2},{3371,1}}, +[6037]={{3860,1}}, +[6038]={{2692,1},{4655,1}}, +[6040]={{3486,2},{3859,5}}, +[6041]={{3486,2},{3859,8},{4234,4}}, +[6042]={{3478,4},{3575,6}}, +[6043]={{1705,1},{3478,2},{3575,4}}, +[6048]={{3356,1},{3369,1},{3372,1}}, +[6049]={{3372,1},{4402,1},{6371,1}}, +[6050]={{3372,1},{3819,1},{3821,1}}, +[6051]={{2452,1},{2453,1},{3371,1}}, +[6052]={{3357,1},{3372,1},{3820,1}}, +[6149]={{3358,1},{3372,1},{3821,1}}, +[6214]={{2318,2},{2840,12},{2880,2}}, +[6218]={{6217,1},{10938,1},{10940,1}}, +[6219]={{2840,6}}, +[6238]={{2320,1},{2996,3}}, +[6239]={{2320,1},{2604,1},{2996,3}}, +[6240]={{2320,1},{2996,3},{6260,1}}, +[6241]={{2320,1},{2324,1},{2996,3}}, +[6242]={{2320,2},{2996,4},{6260,2}}, +[6243]={{2321,2},{2605,1},{2997,3}}, +[6263]={{2321,2},{2997,4},{6260,2}}, +[6264]={{2321,3},{2604,3},{2997,5}}, +[6290]={{6291,1}}, +[6316]={{2678,1},{6317,1}}, +[6338]={{2842,1},{3470,2}}, +[6339]={{1210,1},{6338,1},{10939,3},{10940,6}}, +[6350]={{2841,6},{3470,6}}, +[6370]={{3371,1},{6358,2}}, +[6371]={{3371,1},{6359,2}}, +[6372]={{2452,1},{3371,1},{6370,1}}, +[6373]={{3356,1},{3372,1},{6371,2}}, +[6384]={{2321,1},{2997,4},{4340,1},{6260,2}}, +[6385]={{2321,1},{2605,2},{2997,4},{4340,1}}, +[6450]={{4306,1}}, +[6451]={{4306,2}}, +[6452]={{1475,1}}, +[6453]={{1288,1}}, +[6466]={{2321,1},{4231,1},{6470,8}}, +[6467]={{2321,2},{6470,6},{6471,2}}, +[6468]={{2321,2},{6470,10},{6471,10}}, +[6533]={{2841,2},{4364,1},{6530,1}}, +[6657]={{2678,1},{6522,1}}, +[6662]={{2449,1},{3371,1},{6522,1}}, +[6709]={{2318,6},{2320,4},{4231,1},{5498,1}}, +[6712]={{2841,1},{2880,1},{4359,2}}, +[6714]={{2592,1},{4364,4}}, +[6730]={{774,2},{2840,12},{3470,2}}, +[6731]={{818,2},{2840,16},{3470,3}}, +[6733]={{1210,3},{2841,8},{3478,4}}, +[6786]={{2320,1},{2324,1},{2996,2},{6260,1}}, +[6787]={{2321,1},{2324,4},{2997,3}}, +[6795]={{2324,2},{4291,1},{4305,3}}, +[6796]={{2604,2},{4291,1},{4305,3}}, +[6887]={{4603,1}}, +[6888]={{2678,1},{6889,1}}, +[6890]={{3173,1}}, +[6947]={{2928,1},{3371,1}}, +[6949]={{2928,3},{3372,1}}, +[6950]={{3372,1},{8924,1}}, +[6951]={{2928,4},{2930,4},{3372,1}}, +[7026]={{2320,1},{2996,1}}, +[7027]={{2319,2},{2321,2},{4305,3},{6048,1}}, +[7046]={{2321,3},{4305,4},{6260,2}}, +[7047]={{2321,2},{4234,2},{4305,3},{6048,2}}, +[7048]={{2321,1},{4305,2},{6260,2}}, +[7049]={{929,4},{2321,1},{4234,2},{4305,3}}, +[7050]={{2321,2},{4305,3}}, +[7051]={{2321,2},{4305,3},{7067,1}}, +[7052]={{2321,2},{4305,4},{6260,2},{7070,1},{7071,1}}, +[7053]={{2321,2},{4305,3},{6260,2}}, +[7054]={{4291,2},{4339,2},{7067,2},{7068,2},{7069,2},{7070,2}}, +[7055]={{2604,2},{4291,1},{4305,4},{7071,1}}, +[7056]={{2604,2},{4291,1},{4305,5},{6371,2}}, +[7057]={{4291,2},{4305,5}}, +[7058]={{2321,2},{2604,2},{4305,4}}, +[7059]={{2604,2},{4291,2},{4305,5},{6371,2}}, +[7060]={{4291,2},{4305,6},{6260,2},{7072,2}}, +[7061]={{4234,4},{4291,2},{4305,5},{7067,4},{7071,1}}, +[7062]={{2604,2},{4291,2},{4305,4}}, +[7063]={{2604,4},{3827,2},{4291,1},{4305,8},{7068,4}}, +[7064]={{2604,4},{4291,2},{4304,2},{4305,6},{6371,2},{7068,2}}, +[7065]={{2605,2},{4291,1},{4305,5}}, +[7067]={{7075,1}}, +[7068]={{7077,1}}, +[7070]={{7079,1}}, +[7071]={{3575,1}}, +[7076]={{7078,1}}, +[7078]={{7082,1}}, +[7080]={{7076,1}}, +[7082]={{7080,1}}, +[7148]={{814,2},{1210,2},{3575,6},{4306,2},{4375,2},{7191,1}}, +[7166]={{2318,1},{2840,6},{2880,1},{3470,1}}, +[7189]={{4234,4},{9061,2},{10026,1},{10559,2},{10560,1}}, +[7276]={{2318,2},{2320,1}}, +[7277]={{2318,2},{2320,3}}, +[7278]={{2318,4},{2320,2}}, +[7279]={{2318,3},{2320,4}}, +[7280]={{2318,5},{2320,5}}, +[7281]={{2318,6},{2320,4}}, +[7282]={{2318,10},{2321,1},{4231,1}}, +[7283]={{2319,4},{2321,1},{7286,12}}, +[7284]={{2319,4},{2321,1},{7287,6}}, +[7285]={{2319,6},{2321,1},{2457,1}}, +[7348]={{2319,8},{2321,2},{5116,4}}, +[7349]={{2319,8},{2321,2},{3356,4}}, +[7352]={{2319,6},{2321,2},{7067,1}}, +[7358]={{2319,10},{2321,2},{5373,2}}, +[7359]={{2319,12},{2321,2},{2997,2},{7067,2}}, +[7371]={{2321,2},{4234,8}}, +[7372]={{2321,2},{4234,8}}, +[7373]={{2321,2},{2325,1},{4234,10}}, +[7374]={{2321,2},{3824,1},{4234,10}}, +[7375]={{2321,2},{4234,10},{7392,4}}, +[7377]={{2321,2},{4234,6},{7067,2},{7070,2}}, +[7378]={{2325,1},{4234,16},{4291,2}}, +[7386]={{4234,8},{4291,2},{7392,6}}, +[7387]={{2325,2},{4234,10},{4305,2},{7071,1}}, +[7390]={{3824,1},{4234,8},{4291,2},{7428,2}}, +[7391]={{2459,2},{4234,10},{4291,1},{4337,2}}, +[7506]={{774,1},{814,2},{818,1},{2841,6},{4375,1}}, +[7676]={{159,1},{2452,1}}, +[7913]={{1210,2},{3486,2},{3575,8},{5635,4}}, +[7914]={{3486,4},{3575,20}}, +[7915]={{3575,10},{5635,2},{5637,2}}, +[7916]={{818,4},{3486,2},{3575,12},{5637,4}}, +[7917]={{3486,3},{3575,14},{5637,2}}, +[7918]={{3860,8},{4234,6}}, +[7919]={{3860,6},{4338,4}}, +[7920]={{3860,12}}, +[7921]={{1705,2},{3860,10}}, +[7922]={{3859,14},{7966,1}}, +[7924]={{3860,8},{3864,2}}, +[7925]={{3860,8},{4234,6},{4338,4}}, +[7926]={{3860,12},{6037,1},{7909,1},{7966,1}}, +[7927]={{3860,10},{4338,6},{6037,1},{7966,1}}, +[7928]={{3860,12},{4304,6},{6037,1}}, +[7929]={{3860,12},{7067,1}}, +[7930]={{3860,16}}, +[7931]={{3860,10},{4338,6}}, +[7932]={{3860,14},{3864,4},{4304,4}}, +[7933]={{3860,14},{4304,4}}, +[7934]={{3860,14},{7909,1}}, +[7935]={{3860,16},{6037,6},{7077,1},{7966,1}}, +[7936]={{3860,14},{4304,4},{6037,2},{7909,1},{7966,1}}, +[7937]={{3860,16},{6037,2},{7966,1},{7971,1}}, +[7938]={{3860,10},{3864,3},{5966,1},{6037,8},{7909,3},{7966,2}}, +[7939]={{3860,12},{6037,24},{7910,4},{7966,2},{7971,4}}, +[7941]={{3860,12},{3864,2},{4234,4},{7966,1}}, +[7942]={{3860,16},{4304,4},{7909,2},{7966,1}}, +[7943]={{3860,14},{4304,2},{6037,4},{7966,1}}, +[7944]={{1206,2},{1705,2},{3860,14},{4338,2},{7909,1},{7966,1}}, +[7945]={{1210,4},{3860,16},{4304,2},{7966,1},{7971,1}}, +[7946]={{3860,18},{4304,4},{7075,2},{7966,1}}, +[7947]={{3860,12},{4304,2},{6037,6},{7910,2},{7966,1}}, +[7954]={{1529,5},{3860,24},{3864,5},{4304,4},{6037,6},{7075,4},{7966,4}}, +[7955]={{2318,1},{2840,10},{2880,2},{3470,1}}, +[7956]={{2319,1},{2841,8},{3466,1}}, +[7957]={{2319,2},{2841,12},{3466,2}}, +[7958]={{2319,2},{2841,14},{3466,1}}, +[7959]={{3860,28},{4304,6},{6037,10},{7966,6},{7972,10}}, +[7960]={{3860,30},{4304,6},{6037,16},{7081,4},{7910,6},{7966,8}}, +[7961]={{3823,2},{3860,28},{4304,2},{6037,8},{7081,6},{7909,6},{7966,4}}, +[7963]={{3486,3},{3859,16}}, +[7964]={{7912,1}}, +[7965]={{4306,1},{7912,1}}, +[7966]={{7912,4}}, +[7967]={{3860,4},{6037,2},{7966,4}}, +[7969]={{3860,4},{7966,3}}, +[8067]={{2840,1},{4357,1}}, +[8068]={{2840,1},{4364,1}}, +[8069]={{2841,1},{4377,1}}, +[8170]={{4304,6}}, +[8172]={{8150,1},{8169,1}}, +[8173]={{4291,1},{4304,5}}, +[8174]={{4234,12},{4236,2},{4291,2}}, +[8175]={{4291,2},{4304,7}}, +[8176]={{4291,2},{4304,5}}, +[8185]={{4304,14},{8167,28},{8343,1}}, +[8187]={{4304,6},{8167,8},{8343,1}}, +[8189]={{4304,6},{8167,12},{8343,1}}, +[8191]={{4304,14},{8167,24},{8343,1}}, +[8192]={{4291,3},{4304,8},{4338,6}}, +[8193]={{4291,4},{4304,14}}, +[8195]={{4291,4},{4304,12}}, +[8197]={{4304,16},{8343,2}}, +[8198]={{4304,8},{8167,12},{8343,1}}, +[8200]={{4304,10},{8151,4},{8343,1}}, +[8201]={{4304,8},{8151,6},{8343,1}}, +[8202]={{4304,10},{8152,6},{8343,2}}, +[8203]={{4291,4},{4304,12},{8154,12}}, +[8204]={{4291,2},{4304,6},{8154,8}}, +[8205]={{4291,2},{4304,10},{8154,4}}, +[8206]={{4304,14},{8154,8},{8343,2}}, +[8207]={{4304,12},{8154,16},{8343,2}}, +[8208]={{4304,10},{8154,20},{8343,2}}, +[8209]={{4291,6},{4304,12},{8154,12}}, +[8210]={{4304,10},{8153,1},{8172,1}}, +[8211]={{4304,12},{8153,2},{8172,1}}, +[8212]={{4304,16},{8153,6},{8172,2}}, +[8213]={{4304,14},{8153,4},{8172,2}}, +[8214]={{4304,10},{8153,2},{8172,1}}, +[8215]={{4304,16},{8153,6},{8172,2}}, +[8216]={{4304,14},{8152,4},{8343,2}}, +[8217]={{4291,4},{4304,12},{8172,1},{8949,1}}, +[8218]={{4291,6},{4304,10},{8172,1},{8951,1}}, +[8345]={{4304,18},{8146,8},{8172,2},{8343,4},{8368,2}}, +[8346]={{4304,20},{7075,2},{7079,8},{8172,1},{8343,4}}, +[8347]={{4304,24},{8165,12},{8172,2},{8343,4}}, +[8348]={{4304,40},{7075,4},{7077,8},{8172,2},{8343,4}}, +[8349]={{4304,40},{7971,2},{8168,40},{8172,4},{8343,4}}, +[8364]={{8365,1}}, +[8367]={{4304,40},{8165,30},{8172,4},{8343,4}}, +[8544]={{4338,1}}, +[8545]={{4338,2}}, +[8546]={{7078,2},{8150,4},{18512,1}}, +[8926]={{8924,2},{8925,1}}, +[8927]={{8924,3},{8925,1}}, +[8928]={{8924,4},{8925,1}}, +[8949]={{3372,1},{3820,1},{3821,1}}, +[8951]={{3355,1},{3372,1},{3821,1}}, +[8956]={{3821,1},{4625,1},{8925,1}}, +[8984]={{5173,3},{8925,1}}, +[8985]={{5173,5},{8925,1}}, +[9030]={{3821,1},{7067,1},{8925,1}}, +[9036]={{3358,1},{8831,1},{8925,1}}, +[9060]={{3577,1},{3860,5},{6037,1}}, +[9061]={{3372,1},{4625,1},{9260,1}}, +[9088]={{8836,1},{8839,1},{8925,1}}, +[9144]={{8153,1},{8831,1},{8925,1}}, +[9149]={{3575,4},{4625,4},{8831,4},{9262,1}}, +[9154]={{8836,1},{8925,1}}, +[9155]={{3821,1},{8839,1},{8925,1}}, +[9172]={{8838,1},{8845,1},{8925,1}}, +[9179]={{3358,1},{8839,1},{8925,1}}, +[9186]={{8923,2},{8924,2},{8925,1}}, +[9187]={{3821,1},{8838,1},{8925,1}}, +[9197]={{8831,3},{8925,1}}, +[9206]={{8838,1},{8846,1},{8925,1}}, +[9210]={{4342,1},{8845,2},{8925,1}}, +[9224]={{8845,1},{8846,1},{8925,1}}, +[9233]={{8846,2},{8925,1}}, +[9264]={{8845,3},{8925,1}}, +[9312]={{4234,1},{4377,1}}, +[9313]={{4234,1},{4377,1}}, +[9318]={{4234,1},{4377,1}}, +[9366]={{3486,4},{3577,4},{3859,10},{3864,1}}, +[9998]={{4291,3},{4339,2}}, +[9999]={{4291,3},{4339,2}}, +[10001]={{4339,3},{8343,1}}, +[10002]={{4339,3},{8343,1},{10285,2}}, +[10003]={{4339,2},{8343,2}}, +[10004]={{4339,3},{8343,1},{10285,2}}, +[10007]={{2604,2},{4339,3},{8343,1}}, +[10008]={{2324,1},{4339,1},{8343,1}}, +[10009]={{2604,2},{4339,3},{8343,1}}, +[10010]={{4339,4},{7079,2},{8343,2}}, +[10011]={{4339,3},{7079,2},{8343,2}}, +[10018]={{2604,2},{4339,3},{8343,2}}, +[10019]={{4339,4},{8153,4},{8343,2},{10286,2}}, +[10020]={{4339,5},{7079,3},{8343,2}}, +[10021]={{4339,6},{8153,6},{8343,2},{10286,2}}, +[10023]={{4339,5},{8343,2},{10285,5}}, +[10024]={{4339,3},{8343,2}}, +[10025]={{4339,2},{8343,2},{10285,8}}, +[10026]={{4304,2},{4339,3},{8343,2}}, +[10027]={{4339,3},{8343,2}}, +[10028]={{4339,5},{8343,2},{10285,4}}, +[10029]={{2604,2},{4339,4},{8343,3}}, +[10030]={{4339,3},{4589,6},{8343,2}}, +[10031]={{4304,2},{4339,6},{8343,3},{10285,6}}, +[10032]={{4339,4},{7079,4},{8343,2}}, +[10033]={{2604,2},{4339,4},{8343,2}}, +[10034]={{4339,4},{8343,2}}, +[10035]={{4339,4},{8343,3}}, +[10036]={{4339,5},{8343,3}}, +[10038]={{4339,5},{7079,6},{8343,3}}, +[10039]={{4304,2},{4339,6},{7079,6},{8343,3}}, +[10040]={{2324,1},{4339,5},{8343,3}}, +[10041]={{1529,1},{4339,8},{6037,1},{8153,4},{8343,3},{10286,2}}, +[10042]={{4339,5},{7077,2},{8343,2}}, +[10044]={{4304,2},{4339,5},{7077,1},{8343,3}}, +[10045]={{2320,1},{2996,1}}, +[10046]={{2318,1},{2320,1},{2996,2}}, +[10047]={{2321,1},{2996,4}}, +[10048]={{2321,1},{2604,3},{2997,5}}, +[10050]={{4291,2},{4339,4}}, +[10051]={{2604,2},{4339,4},{8343,2}}, +[10052]={{4339,2},{6261,2},{8343,1}}, +[10053]={{2324,1},{2325,1},{4339,3},{8343,1}}, +[10054]={{4339,2},{4342,2},{8343,2}}, +[10055]={{4339,3},{8343,1},{10290,1}}, +[10056]={{4339,1},{6261,1},{8343,1}}, +[10421]={{2840,4}}, +[10423]={{2841,12},{2842,4},{3478,2}}, +[10498]={{3859,4}}, +[10499]={{3864,2},{4234,6}}, +[10500]={{3864,2},{4234,4},{4385,1},{7068,2}}, +[10501]={{4304,4},{7909,2},{10592,1}}, +[10502]={{4304,4},{7910,2}}, +[10503]={{4304,6},{7910,2}}, +[10504]={{1529,3},{4304,8},{7909,3},{8153,2},{10286,2}}, +[10505]={{7912,2}}, +[10506]={{774,4},{818,4},{3860,8},{6037,1},{10561,1}}, +[10507]={{4306,1},{10505,1}}, +[10508]={{3860,4},{4400,1},{7068,2},{10559,1},{10560,1}}, +[10510]={{3860,6},{3864,2},{4400,1},{10559,2},{10560,1}}, +[10512]={{3860,1},{10505,1}}, +[10513]={{3860,2},{10505,2}}, +[10514]={{10505,1},{10560,1},{10561,1}}, +[10518]={{4339,4},{10285,2},{10505,4},{10560,1}}, +[10542]={{3860,8},{3864,1},{7067,4}}, +[10543]={{3860,8},{3864,1},{7068,4}}, +[10545]={{4234,2},{8151,2},{10500,1},{10558,2},{10559,1}}, +[10546]={{4304,2},{7909,2},{10559,1}}, +[10548]={{6037,2},{7910,1},{10559,1}}, +[10558]={{3577,1}}, +[10559]={{3860,3}}, +[10560]={{3860,1},{4338,1},{10505,1}}, +[10561]={{3860,3}}, +[10562]={{10505,2},{10560,1},{10561,2}}, +[10576]={{3860,14},{6037,4},{7077,4},{7910,2},{9060,2},{9061,2}}, +[10577]={{3860,4},{7068,1},{10505,5},{10558,1},{10559,2}}, +[10585]={{3860,2},{4389,1},{10560,1},{10561,1}}, +[10586]={{9061,1},{10507,6},{10560,1},{10561,1}}, +[10587]={{4407,2},{6037,6},{10505,4},{10560,1},{10561,2}}, +[10588]={{3860,4},{9061,4},{10543,1},{10560,1}}, +[10592]={{3372,1},{3818,1},{3821,1}}, +[10644]={{10647,1},{10648,1}}, +[10645]={{7972,4},{9060,1},{10559,2},{10560,1},{12808,1}}, +[10646]={{4338,1},{10505,3},{10560,1}}, +[10713]={{10647,1},{10648,1}}, +[10716]={{1529,2},{3860,4},{8151,4},{10559,1},{10560,1}}, +[10720]={{3860,4},{4337,4},{10285,2},{10505,2},{10559,1}}, +[10721]={{3860,4},{6037,2},{7387,1},{7909,2},{10560,1}}, +[10724]={{4234,4},{4389,4},{10026,1},{10505,8},{10559,2}}, +[10725]={{1529,2},{3860,6},{6037,6},{9060,2},{10558,1},{10561,1}}, +[10726]={{3860,10},{4338,4},{6037,4},{7910,2},{10558,1}}, +[10727]={{3860,6},{6037,6},{9061,4},{10559,2},{10560,1}}, +[10841]={{159,1},{3821,1}}, +[10918]={{2930,1},{3372,1},{5173,1}}, +[10920]={{2930,1},{3372,1},{5173,2}}, +[10921]={{5173,2},{8923,1},{8925,1}}, +[10922]={{5173,2},{8923,2},{8925,1}}, +[11128]={{3478,2},{3577,1}}, +[11130]={{5500,1},{11082,2},{11083,2},{11128,1}}, +[11144]={{3486,1},{6037,1}}, +[11145]={{7971,1},{11135,2},{11137,2},{11144,1}}, +[11287]={{4470,1},{10938,1}}, +[11288]={{4470,1},{10939,1}}, +[11289]={{11083,1},{11134,1},{11291,1}}, +[11290]={{11135,1},{11137,1},{11291,1}}, +[11371]={{11370,8}}, +[11590]={{3860,1},{4338,1},{10505,1}}, +[11604]={{7077,8},{11371,20}}, +[11605]={{7077,1},{11371,6}}, +[11606]={{7077,2},{11371,10}}, +[11607]={{7077,4},{11371,26}}, +[11608]={{7077,4},{11371,18}}, +[11811]={{7078,1},{11382,1},{14343,3}}, +[11825]={{3860,6},{4394,1},{7077,1},{7191,1}}, +[11826]={{3860,2},{4389,2},{6037,1},{7075,1},{7191,1}}, +[12190]={{8831,3},{8925,1}}, +[12209]={{1015,1},{2678,1}}, +[12210]={{2692,1},{12184,1}}, +[12212]={{159,1},{4536,2},{12202,1}}, +[12213]={{2692,1},{12037,1}}, +[12214]={{2596,1},{12037,1}}, +[12215]={{159,1},{3713,1},{12204,2}}, +[12216]={{2692,2},{12206,1}}, +[12217]={{2692,1},{4402,1},{12037,1}}, +[12218]={{3713,2},{12207,1}}, +[12224]={{2678,1},{12223,1}}, +[12259]={{1206,1},{3466,2},{3859,10},{4234,1},{7067,1}}, +[12260]={{3577,4},{3859,10},{4234,2},{7068,2}}, +[12359]={{10620,1}}, +[12360]={{12359,1},{12363,1}}, +[12404]={{12365,1}}, +[12405]={{11188,4},{12359,16},{12361,1}}, +[12406]={{11186,4},{12359,12}}, +[12408]={{11184,4},{12359,12}}, +[12409]={{8170,8},{11185,4},{12359,20}}, +[12410]={{7910,1},{11188,4},{12359,24}}, +[12414]={{11186,4},{12359,26}}, +[12415]={{7077,2},{7910,1},{12359,18}}, +[12416]={{7077,2},{12359,10}}, +[12417]={{7077,4},{12359,18}}, +[12418]={{7077,4},{12359,18}}, +[12419]={{7077,4},{12359,14}}, +[12420]={{7077,4},{12359,20}}, +[12422]={{7910,2},{12359,40}}, +[12424]={{7909,1},{8170,6},{12359,22}}, +[12425]={{7910,1},{12359,20}}, +[12426]={{7909,1},{7910,1},{12359,34}}, +[12427]={{7910,2},{12359,34}}, +[12428]={{3864,2},{8170,6},{12359,24}}, +[12429]={{7910,2},{12359,44}}, +[12610]={{3577,6},{12359,20},{12360,2}}, +[12611]={{2842,10},{12359,20},{12360,2}}, +[12612]={{6037,2},{12359,30},{12360,2},{12364,1}}, +[12613]={{7910,1},{12359,40},{12360,2}}, +[12614]={{7910,1},{12359,40},{12360,2}}, +[12618]={{7076,4},{7080,4},{12360,8},{12364,2},{12655,24},{12800,2}}, +[12619]={{7080,6},{12360,10},{12361,2},{12364,1},{12655,20}}, +[12620]={{7076,6},{12360,6},{12655,16},{12799,2},{12800,1}}, +[12624]={{8153,4},{12359,40},{12364,1},{12655,2},{12803,4}}, +[12625]={{7080,2},{12359,20},{12360,4},{12364,2}}, +[12628]={{7910,4},{12359,40},{12361,4},{12662,10}}, +[12631]={{7078,2},{7910,4},{12359,20},{12655,6}}, +[12632]={{7080,4},{12359,20},{12361,4},{12655,4}}, +[12633]={{3577,6},{6037,6},{12359,20},{12655,4},{12800,2}}, +[12636]={{8168,60},{12359,40},{12364,2},{12655,4},{12799,6}}, +[12639]={{7076,10},{12360,15},{12361,4},{12655,20},{12799,4}}, +[12640]={{8146,40},{12359,80},{12360,12},{12361,10},{12800,4}}, +[12641]={{12360,30},{12364,6},{12655,30},{12800,6}}, +[12643]={{12365,1},{14047,1}}, +[12644]={{12365,4}}, +[12645]={{7076,2},{12359,4},{12644,4}}, +[12655]={{11176,3},{12359,1}}, +[12764]={{8170,4},{12359,16},{12644,2}}, +[12769]={{8153,6},{8170,8},{12359,30},{12644,2},{12799,6},{12803,6}}, +[12772]={{3577,4},{6037,2},{8170,4},{12359,30},{12361,2}}, +[12773]={{8170,4},{12359,20},{12644,2},{12799,2}}, +[12774]={{7910,4},{8170,4},{12359,30},{12361,4},{12644,2},{12655,4}}, +[12775]={{8170,6},{12359,40},{12644,6}}, +[12776]={{8170,4},{12359,20},{12364,2},{12655,6},{12804,4}}, +[12777]={{7077,4},{7078,4},{12644,2},{12655,10},{12800,2}}, +[12779]={{8170,4},{12359,30},{12644,2},{12799,2}}, +[12781]={{12360,2},{12361,2},{12364,1},{12655,6},{12799,2},{12804,4}}, +[12782]={{8170,4},{12359,40},{12360,2},{12361,2},{12644,2},{12662,16},{12808,8}}, +[12783]={{7910,6},{12360,10},{12644,4},{12655,10},{12799,6},{12800,6},{12810,2}}, +[12784]={{12360,20},{12644,2},{12810,6}}, +[12790]={{12360,15},{12644,2},{12799,4},{12800,8},{12810,8},{12811,1}}, +[12792]={{7077,4},{7910,4},{8170,4},{12359,30}}, +[12794]={{7076,6},{12364,8},{12655,20},{12799,8},{12810,4}}, +[12795]={{7910,10},{12360,10},{12644,2},{12655,10},{12662,8}}, +[12796]={{7076,10},{12359,50},{12360,15},{12809,4},{12810,6}}, +[12797]={{7080,4},{12360,18},{12361,8},{12644,2},{12800,8},{12810,4}}, +[12798]={{12359,40},{12360,12},{12364,8},{12644,2},{12808,10},{12810,4}}, +[12802]={{12364,2},{12644,2},{12655,20},{12800,2},{12804,20}}, +[12803]={{7076,1}}, +[12808]={{7080,1}}, +[12810]={{8170,1},{16202,1}}, +[13423]={{3372,1},{13422,1}}, +[13442]={{8846,3},{8925,1}}, +[13443]={{8838,2},{8839,2},{8925,1}}, +[13444]={{8925,1},{13463,3},{13467,2}}, +[13445]={{8838,1},{8925,1},{13423,2}}, +[13446]={{8925,1},{13464,2},{13465,1}}, +[13447]={{8925,1},{13463,1},{13466,2}}, +[13452]={{8925,1},{13465,2},{13466,2}}, +[13453]={{8846,2},{8925,1},{13466,2}}, +[13454]={{8925,1},{13463,3},{13465,1}}, +[13455]={{8925,1},{10620,1},{13423,3}}, +[13456]={{7070,1},{8925,1},{13463,1}}, +[13457]={{7068,1},{8925,1},{13463,1}}, +[13458]={{7067,1},{8925,1},{13463,1}}, +[13459]={{3824,1},{8925,1},{13463,1}}, +[13460]={{7069,1},{8925,1},{13464,1}}, +[13461]={{8925,1},{11176,1},{13463,1}}, +[13462]={{8925,1},{13466,2},{13467,2}}, +[13503]={{7076,8},{7078,8},{7080,8},{7082,8},{9262,2},{12803,8},{13468,4}}, +[13506]={{8925,1},{13423,30},{13465,10},{13468,1}}, +[13510]={{8846,30},{8925,1},{13423,10},{13468,1}}, +[13511]={{8925,1},{13463,30},{13467,10},{13468,1}}, +[13512]={{8925,1},{13463,30},{13465,10},{13468,1}}, +[13513]={{8925,1},{13465,10},{13467,30},{13468,1}}, +[13851]={{2692,1},{12203,1}}, +[13856]={{14048,3},{14341,1}}, +[13857]={{14048,5},{14227,1},{14341,1}}, +[13858]={{14048,5},{14227,1},{14341,1}}, +[13860]={{14048,4},{14227,1},{14341,1}}, +[13863]={{8170,4},{14048,4},{14341,1}}, +[13864]={{8170,4},{14048,4},{14227,2},{14341,1}}, +[13865]={{14048,6},{14227,2},{14341,1}}, +[13866]={{14048,4},{14227,2},{14341,1}}, +[13867]={{8170,4},{14048,7},{14227,2},{14341,1}}, +[13868]={{7079,2},{14048,5},{14341,1}}, +[13869]={{7079,2},{14048,5},{14341,1}}, +[13870]={{7080,1},{14048,3},{14341,1}}, +[13871]={{7080,1},{14048,6},{14341,1}}, +[13927]={{3713,1},{13754,1}}, +[13928]={{3713,1},{13755,1}}, +[13929]={{2692,2},{13756,1}}, +[13930]={{13758,1}}, +[13931]={{159,1},{13759,1}}, +[13932]={{13760,1}}, +[13933]={{159,1},{13888,1}}, +[13934]={{2692,1},{3713,1},{13893,1}}, +[13935]={{3713,1},{13889,1}}, +[14042]={{7077,3},{14048,5},{14341,1}}, +[14043]={{7077,3},{14048,4},{14341,1}}, +[14044]={{7078,1},{14048,5},{14341,1}}, +[14045]={{7078,1},{14048,6},{14341,1}}, +[14046]={{8170,2},{14048,5},{14341,1}}, +[14048]={{14047,5}}, +[14100]={{3577,2},{14048,5},{14341,1}}, +[14101]={{3577,2},{14048,4},{14341,1}}, +[14103]={{3577,2},{14048,4},{14341,1}}, +[14104]={{3577,4},{14048,6},{14227,1},{14341,1}}, +[14106]={{12662,4},{14048,8},{14256,8},{14341,2}}, +[14107]={{14048,5},{14256,4},{14341,1}}, +[14108]={{8170,4},{14048,6},{14256,4},{14341,1}}, +[14111]={{14048,5},{14256,4},{14341,1}}, +[14112]={{8170,4},{12662,4},{14048,7},{14256,6},{14341,2}}, +[14128]={{11176,2},{14048,8},{14341,1}}, +[14130]={{7910,1},{11176,4},{14048,6},{14341,1}}, +[14132]={{11176,1},{14048,6},{14341,1}}, +[14134]={{7068,4},{7077,4},{7078,4},{14048,6},{14341,1}}, +[14136]={{7080,4},{12808,4},{14048,10},{14256,12},{14341,1}}, +[14137]={{14048,6},{14341,1},{14342,4}}, +[14138]={{14048,6},{14341,1},{14342,4}}, +[14139]={{14048,5},{14341,1},{14342,5}}, +[14140]={{12800,1},{12810,2},{14048,4},{14341,2},{14342,6}}, +[14141]={{9210,4},{14048,6},{14227,1},{14341,1}}, +[14142]={{9210,2},{14048,4},{14227,1},{14341,1}}, +[14143]={{9210,2},{14048,3},{14227,1},{14341,1}}, +[14144]={{9210,4},{14048,6},{14341,1}}, +[14146]={{9210,10},{12364,6},{12810,8},{13926,6},{14048,10},{14341,2},{14342,10}}, +[14152]={{7076,10},{7078,10},{7080,10},{7082,10},{14048,12},{14341,2}}, +[14153]={{7078,12},{12662,20},{12808,12},{14048,12},{14256,40},{14341,2}}, +[14154]={{9210,10},{12811,4},{13926,4},{14048,12},{14341,2},{14342,10}}, +[14155]={{14048,4},{14341,1},{14342,1}}, +[14156]={{14048,8},{14341,2},{14342,12},{14344,2},{17012,2}}, +[14342]={{14256,2}}, +[14529]={{14047,1}}, +[14530]={{14047,2}}, +[15045]={{8170,20},{14341,2},{15412,25}}, +[15046]={{8170,20},{14341,1},{15412,25}}, +[15047]={{8170,40},{14341,1},{15414,30}}, +[15048]={{8170,28},{14341,1},{15407,1},{15415,30}}, +[15049]={{8170,28},{12810,2},{14341,1},{15407,1},{15415,30}}, +[15050]={{8170,40},{14341,2},{15407,1},{15416,60}}, +[15051]={{8170,44},{12810,2},{14341,1},{15407,1},{15416,45}}, +[15052]={{8170,40},{12810,4},{14341,2},{15407,1},{15416,60}}, +[15053]={{7076,1},{7078,1},{8170,8},{14341,1}}, +[15054]={{7075,1},{7078,1},{8170,6},{14341,1}}, +[15055]={{7076,1},{7078,1},{8170,10},{14341,2}}, +[15056]={{7080,3},{7082,3},{8170,16},{14341,1},{15407,1}}, +[15057]={{7080,2},{7082,2},{8170,16},{14341,1}}, +[15058]={{7080,3},{7082,3},{8170,12},{12810,2},{14341,1}}, +[15059]={{8170,16},{12803,8},{14341,2},{14342,2},{15407,1}}, +[15060]={{8170,16},{12803,6},{14341,1},{15407,1}}, +[15061]={{8170,12},{12803,4},{14341,1}}, +[15062]={{8170,30},{14341,1},{15407,1},{15417,14}}, +[15063]={{8170,30},{14341,1},{15417,8}}, +[15064]={{8170,28},{14341,1},{15419,12}}, +[15065]={{8170,24},{14341,1},{15419,14}}, +[15066]={{1529,1},{8170,40},{14341,1},{15407,1},{15420,120}}, +[15067]={{1529,2},{8170,24},{14341,1},{15420,80}}, +[15068]={{8170,12},{14341,2},{15407,1},{15422,12}}, +[15069]={{8170,6},{14341,1},{15422,8}}, +[15070]={{8170,6},{14341,1},{15422,10}}, +[15071]={{8170,4},{14341,1},{15422,6}}, +[15072]={{8170,8},{14341,1},{15423,8}}, +[15073]={{8170,4},{14341,1},{15423,8}}, +[15074]={{8170,6},{14341,1},{15423,6}}, +[15075]={{8170,10},{14341,1},{15423,10}}, +[15076]={{8170,6},{14341,1},{15408,6}}, +[15077]={{8170,4},{14341,1},{15408,4}}, +[15078]={{8170,6},{14341,1},{15408,8}}, +[15079]={{8170,8},{14341,1},{15408,12}}, +[15080]={{8170,8},{14341,1},{15407,1},{15408,12}}, +[15081]={{8170,14},{14341,2},{15407,1},{15408,14}}, +[15082]={{8170,6},{14341,1},{15408,8}}, +[15083]={{2325,1},{8170,8},{14341,1}}, +[15084]={{2325,1},{8170,8},{14341,1}}, +[15085]={{2325,4},{8170,20},{14256,6},{14341,2},{15407,2}}, +[15086]={{2325,1},{8170,12},{14341,1}}, +[15087]={{2325,3},{8170,16},{14341,1},{15407,1}}, +[15088]={{2325,2},{8170,14},{14341,2}}, +[15090]={{8170,22},{12810,4},{14047,16},{14341,2},{15407,1}}, +[15091]={{8170,10},{14047,6},{14341,1}}, +[15092]={{7971,1},{8170,6},{14047,6},{14341,1}}, +[15093]={{8170,12},{14047,10},{14341,1}}, +[15094]={{8170,14},{14047,10},{14341,1}}, +[15095]={{8170,18},{12810,2},{14047,12},{14341,1}}, +[15096]={{8170,16},{12810,4},{14047,18},{14341,2},{15407,1}}, +[15138]={{14044,1},{14341,1},{15410,1}}, +[15141]={{8170,40},{14341,2},{15410,12},{15416,60}}, +[15407]={{8171,1},{15409,1}}, +[15564]={{8170,5}}, +[15802]={{7971,2},{14048,6},{14341,1},{14342,4}}, +[15846]={{10558,1},{10560,4},{10561,1},{12359,6}}, +[15869]={{2842,1},{3470,1}}, +[15870]={{3486,1},{3577,1}}, +[15871]={{6037,1},{7966,1}}, +[15872]={{12360,1},{12644,1}}, +[15992]={{12365,2}}, +[15993]={{12359,3},{14047,3},{15992,3},{15994,1}}, +[15994]={{12359,3},{14047,1}}, +[15995]={{10546,1},{10559,2},{10561,2},{12359,4},{15994,2}}, +[15996]={{8170,1},{10558,1},{12803,1},{15994,4}}, +[15997]={{12359,2},{15992,1}}, +[15999]={{7910,4},{10502,1},{12810,2},{14047,8}}, +[16000]={{12359,6}}, +[16004]={{8170,4},{10546,2},{11371,6},{12361,2},{12799,2},{16000,2}}, +[16005]={{11371,1},{14047,3},{15992,3},{15994,2}}, +[16006]={{12360,1},{14227,1}}, +[16007]={{7076,2},{7078,2},{12360,10},{12800,2},{12810,2},{16000,2}}, +[16008]={{10500,1},{12364,2},{12810,4}}, +[16009]={{10558,1},{12799,1},{15994,1},{16006,2}}, +[16022]={{10558,4},{10576,1},{12655,10},{12810,6},{15994,6},{16006,8}}, +[16023]={{6037,1},{8170,2},{10561,1},{14047,4},{15994,2},{16000,1}}, +[16040]={{12359,3},{14047,1},{16006,1}}, +[16206]={{12360,3},{12644,1}}, +[16207]={{13926,1},{14343,4},{14344,2},{16203,4},{16204,10},{16206,1}}, +[16766]={{1179,1},{2692,1},{7974,2}}, +[16979]={{7078,4},{12810,2},{14048,8},{14341,2},{17010,6}}, +[16980]={{12810,6},{14048,12},{14341,2},{17010,4},{17011,4}}, +[16982]={{14341,2},{17010,6},{17011,2},{17012,20}}, +[16983]={{14341,2},{17010,3},{17011,6},{17012,15}}, +[16984]={{12810,6},{14341,2},{15416,30},{17010,4},{17011,3}}, +[16988]={{11371,16},{17010,4},{17011,5}}, +[16989]={{11371,6},{17010,3},{17011,3}}, +[17013]={{11371,16},{17010,4},{17011,6}}, +[17014]={{11371,4},{17010,2},{17011,2}}, +[17015]={{11371,16},{11382,2},{12810,2},{17010,12}}, +[17016]={{11371,18},{11382,2},{12810,2},{17011,12}}, +[17193]={{7078,25},{11371,20},{11382,10},{12360,50},{17010,10},{17011,10},{17203,8}}, +[17197]={{6889,1},{17194,1}}, +[17198]={{1179,1},{6889,1},{17194,1},{17196,1}}, +[17222]={{12205,2}}, +[17704]={{3829,1},{3859,10},{4234,2},{7069,2},{7070,2}}, +[17708]={{3358,1},{3372,1},{3819,2}}, +[17716]={{3829,1},{3860,8},{4389,4},{17202,4}}, +[17721]={{4234,8},{4291,1},{7067,4}}, +[17723]={{2605,4},{4291,1},{4305,5}}, +[17771]={{12360,10},{17010,1},{18562,1},{18567,3}}, +[17967]={{15410,1}}, +[17968]={{16203,2},{16204,2},{17967,1}}, +[18045]={{3713,1},{12208,1}}, +[18168]={{7076,8},{7082,8},{12360,6},{12803,12},{16006,2}}, +[18232]={{7067,2},{7068,1},{7191,1},{8170,4},{12359,12}}, +[18238]={{1210,4},{4236,2},{4304,6},{7428,8},{7971,2},{8343,1}}, +[18251]={{14341,2},{17012,3}}, +[18253]={{10286,1},{13463,4},{13464,4},{18256,1}}, +[18254]={{3713,1},{18255,1}}, +[18258]={{8170,4},{14048,2},{14341,1},{18240,1}}, +[18262]={{7067,2},{12365,3}}, +[18263]={{7078,2},{12810,6},{14341,4},{14342,6},{17010,8}}, +[18282]={{12360,6},{16000,2},{16006,2},{17010,4},{17011,2}}, +[18283]={{7076,2},{11371,6},{16000,1},{16006,4},{17011,2}}, +[18294]={{7972,1},{8831,2},{8925,1}}, +[18405]={{7078,12},{7080,12},{9210,10},{14048,16},{14341,6},{14342,10},{14344,6}}, +[18407]={{12662,6},{12808,8},{14048,12},{14256,20},{14341,2}}, +[18408]={{7078,10},{7910,2},{14048,12},{14341,2}}, +[18409]={{13926,2},{14048,12},{14341,2},{14342,6}}, +[18413]={{12360,1},{12809,4},{14048,12},{14341,2}}, +[18486]={{13926,2},{14048,6},{14341,2},{14342,4}}, +[18504]={{8170,12},{12804,12},{14341,4},{15407,2}}, +[18506]={{7082,6},{8170,12},{11754,4},{14341,4},{15407,2}}, +[18508]={{8170,12},{14341,4},{15407,4},{15420,60},{18512,8}}, +[18509]={{8170,30},{12607,12},{14341,8},{15407,5},{15414,30},{15416,30}}, +[18510]={{7080,10},{8170,30},{12803,12},{14341,8},{15407,3},{18512,8}}, +[18511]={{7082,12},{8170,30},{12753,4},{12809,8},{14341,8},{15407,4}}, +[18587]={{7191,2},{7910,2},{14227,2},{15994,2},{18631,2}}, +[18588]={{4338,2},{10505,1}}, +[18594]={{159,1},{8170,2},{15992,3},{15994,2}}, +[18631]={{6037,2},{7067,2},{7069,1}}, +[18634]={{3829,2},{7078,4},{12361,2},{13467,4},{15994,6},{18631,2}}, +[18637]={{14047,2},{16000,2},{18631,1}}, +[18638]={{7080,6},{7910,4},{11371,4},{12800,2},{18631,3}}, +[18639]={{11371,8},{12799,2},{12800,2},{12803,6},{12808,4},{18631,4}}, +[18641]={{14047,3},{15992,2}}, +[18645]={{7191,1},{7910,1},{8170,4},{12359,4},{15994,2}}, +[18660]={{3864,1},{10558,1},{10560,1},{10561,1},{15994,2}}, +[18662]={{2321,1},{4234,2}}, +[18948]={{4234,8},{4236,2},{4461,1},{5498,4},{5637,4}}, +[18984]={{3860,10},{7077,4},{7910,2},{10586,1},{18631,1}}, +[18986]={{3860,12},{7075,4},{7079,2},{7909,4},{9060,1},{18631,2}}, +[19026]={{8150,1},{14047,2},{15992,2}}, +[19043]={{7076,3},{12359,12},{12803,3}}, +[19044]={{8170,30},{12803,4},{12804,2},{14341,2},{15407,2}}, +[19047]={{7076,3},{12803,3},{14048,8},{14227,2}}, +[19048]={{7076,6},{12360,4},{12803,6}}, +[19049]={{12803,6},{12804,6},{12810,8},{14227,2},{15407,2}}, +[19050]={{7076,5},{12803,5},{14227,2},{14342,5}}, +[19051]={{6037,6},{12359,8},{12811,1}}, +[19052]={{7080,4},{8170,30},{12809,2},{14341,2},{15407,2}}, +[19056]={{12809,2},{12810,4},{13926,2},{14048,6},{14227,2}}, +[19057]={{6037,10},{12360,2},{12811,1}}, +[19058]={{12803,4},{12809,4},{12810,8},{14341,2},{15407,2}}, +[19059]={{12809,2},{14227,2},{14342,5}}, +[19148]={{11371,4},{17010,2},{17011,4}}, +[19149]={{14227,4},{15407,4},{17011,5}}, +[19156]={{7078,6},{14227,4},{14342,10},{17010,2},{17011,3}}, +[19157]={{12607,4},{14227,4},{15407,4},{17010,5},{17011,2},{17012,4}}, +[19162]={{12810,10},{14227,4},{15407,4},{17010,8},{17012,12}}, +[19163]={{7076,6},{14227,4},{15407,4},{17010,2},{17011,7}}, +[19164]={{11371,4},{11382,2},{17010,5},{17011,3},{17012,4}}, +[19165]={{7078,10},{14227,4},{14342,8},{17010,5},{17011,3}}, +[19166]={{11371,4},{11382,1},{12360,12},{17010,6},{17011,3}}, +[19167]={{11371,6},{12360,16},{17010,2},{17011,5}}, +[19168]={{11371,6},{12360,10},{12809,12},{17010,6},{17011,6}}, +[19169]={{11371,12},{12360,10},{12364,4},{17010,5},{17011,8}}, +[19170]={{11371,8},{12360,12},{12800,4},{17010,7},{17011,4}}, +[19440]={{19441,1}}, +[19682]={{12804,4},{14048,4},{14227,2},{14342,3},{19726,5}}, +[19683]={{12804,4},{14048,4},{14227,2},{14342,4},{19726,4}}, +[19684]={{12810,4},{14048,4},{14227,4},{14342,3},{19726,3}}, +[19685]={{12803,4},{14341,4},{15407,5},{19767,14}}, +[19686]={{12803,4},{14341,3},{15407,4},{19767,10}}, +[19687]={{12803,4},{14341,3},{15407,3},{19767,8}}, +[19688]={{14341,3},{15407,3},{19726,2},{19768,35}}, +[19689]={{14341,3},{15407,3},{19726,2},{19768,25}}, +[19690]={{7910,2},{12359,20},{19726,2},{19774,10}}, +[19691]={{7910,1},{12359,16},{19726,2},{19774,8}}, +[19692]={{12359,12},{12810,4},{19726,2},{19774,6}}, +[19693]={{12359,20},{12799,2},{19774,14}}, +[19694]={{12359,18},{12799,2},{19774,12}}, +[19695]={{12359,16},{12799,1},{19774,10}}, +[19931]={{12804,6},{12938,1},{13468,1},{19943,1}}, +[19998]={{12804,8},{12810,4},{16006,1},{19726,5},{19774,5}}, +[19999]={{12804,8},{12810,4},{16006,2},{19726,4},{19774,5}}, +[20002]={{8925,1},{13463,2},{13464,1}}, +[20004]={{8846,1},{8925,1},{13466,2}}, +[20007]={{8925,1},{13463,1},{13466,2}}, +[20008]={{8925,1},{10286,2},{13465,2},{13467,2}}, +[20039]={{11371,6},{17010,3},{17011,3},{17012,4}}, +[20074]={{3667,2},{3713,1}}, +[20295]={{8170,28},{14341,2},{15407,2},{15415,36}}, +[20296]={{8170,20},{14341,2},{15407,1},{15412,30}}, +[20380]={{12803,4},{12810,12},{14227,6},{15407,4},{20381,6}}, +[20452]={{3713,1},{20424,1}}, +[20476]={{18512,2},{20498,20},{20501,1}}, +[20477]={{15407,1},{18512,2},{20498,30},{20501,2}}, +[20478]={{15407,2},{18512,2},{20498,40},{20501,3}}, +[20479]={{7078,2},{15407,2},{20498,40},{20500,3}}, +[20480]={{7078,2},{15407,1},{20498,30},{20500,2}}, +[20481]={{7078,2},{20498,20},{20500,1}}, +[20537]={{12810,2},{14048,4},{14227,2},{14256,4},{20520,6}}, +[20538]={{14048,6},{14227,2},{14256,6},{20520,8}}, +[20539]={{12810,2},{14048,2},{14227,2},{14256,2},{20520,6}}, +[20549]={{6037,6},{12359,12},{12810,2},{20520,6}}, +[20550]={{6037,10},{12359,20},{20520,10}}, +[20551]={{6037,8},{11754,1},{12359,16},{20520,8}}, +[20575]={{2319,8},{2321,2},{4231,1},{7286,8}}, +[20744]={{3371,1},{10940,2},{17034,1}}, +[20745]={{3372,1},{11083,3},{17034,2}}, +[20746]={{3372,1},{11137,3},{17035,2}}, +[20747]={{8831,2},{8925,1},{11176,3}}, +[20748]={{8831,3},{14344,2},{18256,1}}, +[20749]={{4625,3},{14344,2},{18256,1}}, +[20750]={{4625,2},{8925,1},{16204,3}}, +[20844]={{5173,7},{8925,1}}, +[21023]={{2692,1},{8150,1},{9061,1},{21024,1}}, +[21072]={{2678,1},{21071,1}}, +[21154]={{2604,2},{4625,2},{14048,4},{14341,1}}, +[21217]={{2692,1},{21153,1}}, +[21277]={{7079,2},{10558,1},{15407,1},{15994,4},{18631,2}}, +[21278]={{7080,4},{7082,4},{12810,6},{14227,2},{15407,2}}, +[21340]={{7972,2},{8170,4},{14048,6},{14341,1}}, +[21341]={{12810,6},{14227,4},{14256,12},{20520,2}}, +[21342]={{7078,4},{14227,4},{14256,20},{17012,16},{19726,8}}, +[21542]={{2604,2},{4625,2},{14048,4},{14341,1}}, +[21546]={{4625,3},{6371,3},{8925,1}}, +[21557]={{2319,1},{4364,1}}, +[21558]={{2319,1},{4364,1}}, +[21559]={{2319,1},{4364,1}}, +[21569]={{9060,1},{9061,1},{10560,1},{10561,1}}, +[21570]={{9060,4},{9061,4},{10561,1},{18631,2}}, +[21571]={{4304,1},{10505,1}}, +[21574]={{4304,1},{10505,1}}, +[21576]={{4304,1},{10505,1}}, +[21589]={{4234,1},{4377,1}}, +[21590]={{4234,1},{4377,1}}, +[21592]={{4234,1},{4377,1}}, +[21714]={{8170,1},{15992,1}}, +[21716]={{8170,1},{15992,1}}, +[21718]={{8170,1},{15992,1}}, +[22191]={{12800,4},{12809,10},{12810,12},{22202,36},{22203,15}}, +[22194]={{12810,8},{13512,1},{22202,24},{22203,8}}, +[22195]={{12810,4},{22202,14}}, +[22196]={{7076,10},{12364,4},{12655,12},{22202,40},{22203,18}}, +[22197]={{7076,2},{12655,4},{22202,14}}, +[22198]={{7076,4},{12655,8},{22202,24},{22203,8}}, +[22246]={{4339,4},{8343,2},{11137,4}}, +[22248]={{14048,5},{14341,2},{16203,2}}, +[22249]={{12810,4},{14048,6},{14227,4},{14344,4}}, +[22251]={{8831,10},{11040,8},{14048,5},{14341,2}}, +[22252]={{13468,1},{14048,6},{14227,4},{14342,2}}, +[22383]={{12360,12},{12810,4},{13512,2},{20725,2}}, +[22384]={{11371,10},{12360,15},{12753,2},{12808,20},{15417,10},{20520,20}}, +[22385]={{7076,10},{12360,12},{12655,20},{13510,2}}, +[22652]={{7080,6},{14048,8},{14227,8},{22682,7}}, +[22654]={{7080,4},{14048,4},{14227,4},{22682,5}}, +[22655]={{7080,2},{14048,2},{14227,4},{22682,4}}, +[22658]={{7080,2},{14048,4},{14227,4},{22682,5}}, +[22660]={{12803,4},{14227,4},{14342,2},{19726,1}}, +[22661]={{7080,2},{12810,16},{14227,4},{15407,4},{22682,7}}, +[22662]={{7080,2},{12810,12},{14227,4},{15407,3},{22682,5}}, +[22663]={{7080,2},{12810,12},{14227,4},{15407,2},{22682,4}}, +[22664]={{7080,2},{14227,4},{15407,4},{15408,24},{22682,7}}, +[22665]={{7080,2},{14227,4},{15407,2},{15408,16},{22682,4}}, +[22666]={{7080,2},{14227,4},{15407,3},{15408,16},{22682,5}}, +[22669]={{7080,4},{12359,16},{12360,2},{22682,7}}, +[22670]={{7080,2},{12359,12},{12360,2},{22682,5}}, +[22671]={{7080,2},{12359,12},{12360,2},{22682,4}}, +[22756]={{12803,2},{14048,4},{14227,2},{19726,2}}, +[22757]={{12803,2},{14048,4},{14227,2},{14342,2}}, +[22758]={{12803,4},{14048,2},{14227,2}}, +[22759]={{12803,2},{12810,12},{15407,2},{19726,2}}, +[22760]={{12803,2},{12810,6},{15407,2},{18512,2}}, +[22761]={{12803,2},{12810,4},{15407,1}}, +[22762]={{12360,2},{12655,12},{12803,2},{19726,2}}, +[22763]={{12655,8},{12803,2},{19726,1}}, +[22764]={{12655,6},{12803,2}}, +[30818]={{159,1},{2674,1}}, +[41308]={{55174,1},{55246,1},{2880,2},{55151,2}}, +[41309]={{2841,2},{81094,3},{55150,4},{55245,1}}, +[41310]={{2841,6},{2880,2},{55245,2}}, +[41311]={{55174,1},{1210,2},{55246,1}}, +[41312]={{2841,6},{1210,3},{785,1},{55246,1}}, +[41313]={{2841,6},{55246,1},{55151,4}}, +[41314]={{2841,6},{1206,1},{3466,2},{55151,2}}, +[41315]={{2841,8},{1705,3},{3466,1},{55246,1}}, +[41316]={{55174,1},{1705,2},{3385,1}}, +[41318]={{2842,3},{10998,1},{1210,1}}, +[41319]={{2842,2}}, +[41320]={{2771,2},{55151,2}}, +[41321]={{12359,2}}, +[41322]={{3860,2}}, +[41323]={{41322,1},{7077,1},{55250,4},{55247,2}}, +[41324]={{3860,10},{7971,3},{7909,1},{55247,1}}, +[41325]={{2842,5},{3466,1},{55246,2},{55151,2}}, +[41326]={{1705,1},{2319,1},{2841,2},{4371,2},{4404,1}}, +[41327]={{3864,1},{4389,1},{7191,1},{10559,2},{10561,4}}, +[41328]={{4375,3},{4382,3},{4387,1},{4389,1},{55155,1}}, +[41329]={{41319,1},{3466,2},{55246,4},{55151,8},{55249,3},{1206,3}}, +[41330]={{12359,6},{13454,1},{12363,1}}, +[41331]={{3577,2}}, +[41332]={{3575,2}}, +[41340]={{3577,8},{55246,3},{55152,3}}, +[41341]={{7911,2},{6037,2}}, +[41342]={{41332,1},{3575,2},{2838,6},{3355,1},{55152,2}}, +[41343]={{3860,8},{4234,2},{55152,2}}, +[41344]={{2772,3},{55152,3}}, +[41345]={{3860,14},{3577,4},{55251,2},{7909,2},{55153,4}}, +[41346]={{41322,1},{55251,1},{7909,1},{6149,2},{55247,1}}, +[41347]={{41341,1},{7067,1},{7075,1},{55153,2}}, +[41349]={{55250,5},{6371,3},{7077,1},{7068,1}}, +[41673]={{1179,1},{4539,1},{41677,1}}, +[41674]={{2677,1},{2692,1},{41675,1}}, +[46600]={{818,2},{2840,16},{3470,3}}, +[47408]={{5173,3},{8924,3},{8925,1}}, +[47409]={{5173,3},{8924,3},{8925,1}}, +[47410]={{13452,1},{18256,1},{61224,1}}, +[47412]={{9206,1},{13454,1},{18256,1}}, +[47414]={{12820,1},{18256,1},{61423,1}}, +[50237]={{8838,1},{8925,1},{10286,3},{13464,1}}, +[51256]={{2321,2},{2996,3},{6260,3}}, +[51262]={{730,1},{814,1},{3371,1}}, +[51264]={{818,2},{2840,12},{3470,2}}, +[51268]={{2589,2},{4357,2},{4359,4}}, +[51284]={{818,1},{2318,8},{2321,2},{4231,1}}, +[51312]={{1206,1},{2841,2},{4375,2},{10998,1}}, +[51313]={{1206,1},{2841,2},{4375,2},{10998,1}}, +[53015]={{159,1},{2692,1},{3667,1},{3713,1},{12037,2},{12202,1}}, +[54009]={{2931,3},{8924,2},{8925,1}}, +[54010]={{2931,4},{8924,3},{8925,1}}, +[55043]={{4480,10},{5117,15},{7081,20},{7082,8},{12810,12},{14341,4},{15407,6}}, +[55046]={{8925,1},{13467,3}}, +[55048]={{8831,3},{8925,1}}, +[55050]={{12810,10},{14341,6},{16203,4},{61673,4}}, +[55052]={{9210,5},{12361,2},{14048,12},{55048,5}}, +[55054]={{8165,20},{8170,30},{15412,5},{15414,5},{15415,5},{15416,5}}, +[55056]={{9210,10},{14048,8},{14341,1},{14342,3},{16204,40},{20725,1}}, +[55058]={{7080,6},{12360,3},{12655,12},{12799,4},{13926,4},{14341,8}}, +[55060]={{55252,1},{12360,2},{12655,16},{20725,4},{11291,20},{12800,6},{55248,4}}, +[55141]={{41332,1},{3577,2},{3864,4},{55246,1}}, +[55142]={{41332,1},{55249,2},{55151,2},{55246,1}}, +[55143]={{41331,1},{1529,1},{55246,2},{55152,2}}, +[55144]={{2841,6},{3577,1},{55249,1},{2880,1}}, +[55145]={{3575,8},{3577,2},{55249,2}}, +[55146]={{3577,5},{4234,2},{3466,2},{3825,1}}, +[55147]={{3575,12},{3577,4},{3864,4},{1206,2},{55247,1},{11135,1}}, +[55148]={{3575,12},{1529,2},{1705,2},{3357,2},{55247,1}}, +[55150]={{2589,1},{2835,1}}, +[55151]={{2592,2},{2836,2}}, +[55152]={{4306,3},{2838,3}}, +[55153]={{4338,3},{7912,3}}, +[55154]={{14047,3},{12365,3}}, +[55156]={{2840,2}}, +[55157]={{2840,4}}, +[55158]={{55156,1},{55245,1}}, +[55159]={{55156,1},{2840,1},{55150,2}}, +[55160]={{55156,1},{55245,1},{55150,4},{818,1}}, +[55161]={{2840,4},{55245,2},{774,1}}, +[55162]={{55156,1},{5997,1},{774,1}}, +[55163]={{55156,1},{55150,1},{55245,1},{818,1}}, +[55164]={{55156,1},{3382,1},{55245,1}}, +[55165]={{2840,10},{55150,4},{5498,2}}, +[55166]={{55156,1},{55150,1},{81094,1}}, +[55167]={{55156,1},{55245,1},{1210,1},{159,5}}, +[55168]={{55156,1},{774,1},{2880,1},{818,1}}, +[55169]={{55156,1},{5498,1},{55150,2},{55245,1}}, +[55170]={{55156,1},{81094,2},{2880,1},{55150,1}}, +[55171]={{2840,8},{81094,1},{818,1},{2880,1},{1210,1}}, +[55172]={{2840,6},{81094,3},{55245,1},{55150,4}}, +[55173]={{2840,8},{5498,1},{818,1},{2880,1},{55150,2}}, +[55174]={{2841,2}}, +[55175]={{2841,8},{1210,1},{81094,1},{55151,4},{55245,2}}, +[55176]={{55174,1},{2449,3},{2836,6},{2880,4}}, +[55178]={{3860,8},{55249,1},{55251,1},{55250,1}}, +[55180]={{12359,8},{55249,4},{8956,2},{55153,2}}, +[55195]={{3575,6},{3864,2},{55249,2},{55152,3}}, +[55196]={{3860,8},{7909,2},{55152,2}}, +[55197]={{3860,6},{7910,2},{55249,2},{55153,4}}, +[55198]={{3860,12},{55251,4},{55247,1}}, +[55199]={{12359,8},{12799,2},{55154,2},{55247,1}}, +[55200]={{12359,5},{12655,1},{55249,4},{12808,2},{55154,2}}, +[55202]={{3575,6},{3577,1},{55249,2},{3864,2}}, +[55204]={{6037,12},{7075,4},{7067,4},{7068,4},{55153,8}}, +[55210]={{3859,3},{1705,2},{55152,2}}, +[55211]={{3859,4},{1529,2},{55152,2}}, +[55212]={{3860,3},{55250,2},{55153,2}}, +[55213]={{3860,3},{9262,2},{55153,2}}, +[55228]={{41321,1},{55250,1},{7910,1},{7077,1},{55247,1}}, +[55241]={{12359,24},{12800,2},{12799,2},{7075,2},{55154,4}}, +[55242]={{3860,24},{3864,6},{55249,6},{7075,2},{55246,4}}, +[55243]={{3860,18},{55249,3},{55251,3},{3864,3},{55152,6}}, +[55244]={{8170,12},{10648,20},{16203,2},{12655,2},{7076,3}}, +[55248]={{11175,1},{16203,1},{55247,1}}, +[55255]={{41321,1},{55251,3},{7069,3}}, +[55256]={{41321,1},{3466,2},{55251,3},{55153,3}}, +[55258]={{41321,1},{12361,1},{55251,1},{55247,1}}, +[55259]={{41341,1},{12655,5},{12361,5},{7076,1},{55154,8},{55247,3}}, +[55260]={{41321,1},{7910,2},{55246,4},{55247,1}}, +[55261]={{41321,1},{7910,5},{55154,3},{55247,1}}, +[55263]={{56033,1},{12799,3},{20520,3},{55248,2}}, +[55264]={{41321,1},{12364,1},{55154,3},{55247,1}}, +[55265]={{41321,1},{12655,4},{12364,2},{55154,2},{55247,1}}, +[55266]={{12359,20},{7910,2},{55250,2},{3466,2},{55246,4}}, +[55267]={{12359,12},{55154,6},{12361,1},{3829,1}}, +[55268]={{6037,4},{12361,2},{55247,2},{7069,4}}, +[55269]={{12359,8},{55251,5},{55247,1}}, +[55271]={{12359,12},{6037,6},{7910,3},{7909,3},{3466,1}}, +[55272]={{12359,28},{3577,4},{7082,2},{61673,2},{55154,8}}, +[55273]={{12359,14},{55154,4},{3864,3},{55246,1}}, +[55316]={{55156,1},{2880,3},{55150,2}}, +[55317]={{55156,1},{2880,1},{2447,4}}, +[55318]={{55174,1},{1210,1},{81094,1},{55150,1}}, +[55319]={{55174,1},{5498,1},{2880,1}}, +[55320]={{55174,1},{1705,3},{55245,1}}, +[55321]={{55174,1},{5635,4},{55151,2}}, +[55322]={{41332,1},{7067,1},{3466,1},{55151,2}}, +[55323]={{41332,1},{55249,4},{3864,4},{3391,1},{3466,2}}, +[55324]={{41332,1},{11135,1},{55152,1},{3577,2}}, +[55325]={{41322,1},{7909,2},{1210,2},{55246,1}}, +[55326]={{2841,10},{1210,2},{2453,2}}, +[55327]={{2841,12},{3575,6},{7069,2},{7068,2},{3388,2},{55151,4}}, +[55328]={{3575,18},{2838,2},{3864,2}}, +[55329]={{2840,6},{2447,2},{55245,1}}, +[55330]={{3576,8},{2450,2},{55151,2}}, +[55331]={{3575,10},{1210,2},{5500,1},{5635,8},{3466,2}}, +[55332]={{3859,6},{4306,2},{3864,2}}, +[55333]={{2840,5},{81094,2},{55150,2}}, +[55334]={{2842,4},{1206,4},{55246,2},{55151,2},{3390,1},{5635,8}}, +[55335]={{3575,6},{3864,4},{55246,2}}, +[55336]={{3860,2},{3357,2},{7909,2}}, +[55337]={{2841,10},{1206,2},{55245,1}}, +[55338]={{3575,10},{1529,2},{55245,2},{1288,6},{3466,2}}, +[55339]={{3859,7},{55250,2},{55245,2}}, +[55340]={{2840,2},{774,1},{818,1},{81094,1},{1210,1}}, +[55341]={{2842,2},{5498,2},{55249,4},{55246,2},{55151,2}}, +[55359]={{56033,1},{55252,2},{12364,8},{12799,10},{55248,4},{7078,6}}, +[55360]={{56033,1},{55252,1},{12803,16},{18335,4},{12799,6},{55248,4}}, +[55361]={{12360,6},{12359,12},{55252,1},{13926,4},{12800,8},{55248,2}}, +[55362]={{12359,16},{5116,12},{12361,6},{12799,6},{55247,2}}, +[55363]={{3577,24},{55252,1},{7080,8},{7076,8},{12800,6},{55248,4}}, +[55364]={{3577,32},{7082,8},{12800,8},{8152,8},{55247,6}}, +[55365]={{12359,28},{55252,2},{12364,12},{7077,8},{61673,8},{18567,1},{55248,6}}, +[55366]={{12359,18},{12360,2},{12799,10},{61673,6},{55154,6},{55247,2}}, +[55367]={{3577,26},{55252,1},{17011,2},{12799,8},{55248,2}}, +[55368]={{3577,32},{55252,1},{12364,6},{12800,8},{3466,6},{55248,4}}, +[55518]={{14048,6},{14227,3},{14342,2},{61673,5}}, +[55519]={{14048,3},{14227,4},{14342,2},{61673,4}}, +[55520]={{14048,8},{14227,2},{14342,3},{61673,7}}, +[55521]={{14048,6},{14227,2},{14342,3},{61673,7}}, +[55522]={{12810,8},{14227,1},{15407,2},{61673,5}}, +[55523]={{12810,7},{14227,2},{15407,2},{61673,4}}, +[55524]={{12810,12},{14227,1},{15407,4},{61673,8}}, +[55525]={{12810,13},{14227,2},{15407,3},{61673,6}}, +[55526]={{12360,1},{12607,1},{15407,1},{61673,6}}, +[55527]={{12360,1},{12607,3},{15407,1},{61673,5}}, +[55528]={{12360,1},{12607,2},{15407,2},{61673,6}}, +[55529]={{12360,1},{12607,2},{15407,2},{61673,7}}, +[55530]={{12360,2},{12655,7},{61673,6}}, +[55531]={{12360,2},{12655,9},{61673,7}}, +[55532]={{12360,2},{12655,10},{61673,5}}, +[55533]={{12360,2},{12655,12},{61673,7}}, +[55534]={{13926,1},{14048,6},{14227,4},{14342,2},{61673,4}}, +[56000]={{55249,1},{55151,1},{55247,1}}, +[56001]={{1529,1},{11135,1},{55247,1}}, +[56002]={{3864,1},{55152,4},{55247,1}}, +[56003]={{7909,1},{55152,1},{55246,2},{55247,1}}, +[56004]={{55250,1},{55152,4},{55247,1}}, +[56005]={{55251,1},{11082,1},{55247,1},{55152,1}}, +[56006]={{7910,1},{55152,1},{11134,1},{55247,1}}, +[56007]={{12361,1},{16203,1},{55247,1}}, +[56008]={{12799,2},{55153,1},{55247,1}}, +[56009]={{12364,1},{55153,2},{55247,2}}, +[56010]={{12800,2},{55152,2},{55247,1}}, +[56011]={{12363,1},{61673,1},{55247,1}}, +[56012]={{11754,1},{55153,5},{55247,1}}, +[56013]={{18335,1},{16202,1},{55154,2},{55248,1}}, +[56014]={{55252,1},{14344,1},{8831,4},{7075,1},{55248,1}}, +[56015]={{12800,1},{7910,1},{16203,1},{55154,2},{55247,1}}, +[56016]={{12363,1},{12364,1},{14344,1},{55154,2},{55248,1}}, +[56017]={{12800,2},{55154,1},{55247,1}}, +[56018]={{12364,1},{7081,3},{55152,1},{55247,1}}, +[56019]={{10620,3},{55154,3}}, +[56020]={{3858,3},{55153,3}}, +[56023]={{41322,1},{7909,3},{6372,3},{55152,3}}, +[56031]={{56033,1},{55252,1},{12364,5},{7910,5},{12361,5},{55248,5}}, +[56032]={{56033,1},{7910,12},{55250,12},{7078,8},{7077,12},{55248,8}}, +[56033]={{3577,8},{12360,2},{3466,2}}, +[56034]={{55251,2},{1705,8},{55246,2},{55152,4}}, +[56035]={{12655,3},{7082,3},{7069,5},{7081,5}}, +[56036]={{3577,8},{3860,2},{4304,2},{55246,6}}, +[56037]={{2840,5},{55245,2},{55150,2}}, +[56038]={{2841,8},{2836,4},{55151,2}}, +[56039]={{2841,6},{2880,1},{10940,1}}, +[56040]={{2842,4},{55249,1},{55246,2},{55245,2}}, +[56041]={{41331,1},{1206,2},{3389,1}}, +[56042]={{3575,5},{1206,1},{55249,1},{1705,1}}, +[56043]={{3577,8},{3466,1},{55152,2}}, +[56044]={{2840,6},{818,1},{55246,1}}, +[56045]={{2841,5},{81094,2},{55245,1}}, +[56046]={{2841,4},{2842,2},{3384,1},{55151,3}}, +[56047]={{3575,4},{55249,5},{3466,2},{55152,2}}, +[56048]={{41322,1},{7909,4},{55246,2},{55152,2}}, +[56049]={{3860,12},{3864,2}}, +[56050]={{3577,10},{4234,4},{55251,2}}, +[56051]={{3860,4},{7070,4},{7909,1},{55246,1}}, +[56052]={{3860,18},{55249,3},{7070,2},{55153,6}}, +[56053]={{41331,1},{3577,2},{1529,6},{3821,6},{55247,2}}, +[56054]={{3860,10},{3466,2},{55152,4}}, +[56055]={{3860,4},{10593,1},{55246,1}}, +[56056]={{7910,1},{7068,2},{55247,1}}, +[56057]={{12361,1},{3819,4},{7070,1},{55247,1}}, +[56058]={{55251,1},{55152,5},{55247,1}}, +[56059]={{56033,1},{6037,8},{12800,10},{3466,6},{55154,6},{55247,6}}, +[56060]={{12360,8},{55250,12},{7078,6},{7077,6},{7068,6},{55248,2}}, +[56061]={{12360,4},{12655,12},{7910,8},{7078,4},{7068,12},{55247,6}}, +[56062]={{12360,6},{3577,28},{15416,32},{17010,4},{55154,8},{7078,6}}, +[56063]={{12655,20},{7082,8},{7080,8},{7076,8},{7078,8},{12803,8}}, +[56064]={{12360,8},{6037,8},{12800,12},{61673,4},{55154,12},{55248,4}}, +[56065]={{41321,1},{12799,6},{7076,6},{3356,6},{55154,8},{55247,3}}, +[56066]={{56033,1},{12361,5},{7080,2},{55247,1}}, +[56067]={{11371,4},{7077,8},{11382,2}}, +[56068]={{12359,8},{12799,4},{7081,6},{9187,1},{55153,4}}, +[56069]={{3860,20},{7971,2},{55249,4},{55251,4},{3466,8}}, +[56070]={{3860,8},{3466,6},{3864,4},{55152,4},{55246,4}}, +[56071]={{3860,12},{6037,8},{7971,4},{8839,2},{55251,4},{55153,8}}, +[56072]={{12655,12},{12363,4},{61673,8},{16203,2},{55248,2}}, +[56073]={{12359,8},{7971,2},{11175,2},{7067,4},{55153,4}}, +[56074]={{1206,1},{55151,2},{55246,2}}, +[56075]={{12799,1},{13466,1},{55247,2}}, +[56076]={{55252,1},{12363,1},{7076,2},{55248,1}}, +[56077]={{55252,1},{61673,3},{55248,3}}, +[56089]={{3860,16},{55152,4},{3466,1},{55246,4}}, +[56090]={{12359,6},{6037,3},{7910,1},{7909,1}}, +[56091]={{55174,1},{1210,2},{785,1},{55246,1}}, +[56092]={{12655,2},{7082,1},{7081,3},{55154,3}}, +[56093]={{41321,1},{12655,6},{7082,3},{7081,6},{55154,4},{55247,4}}, +[56094]={{56033,1},{12360,2},{12655,6},{20520,12},{7075,20},{55248,3}}, +[56095]={{41341,1},{55251,8},{7079,8},{7070,12},{3358,12},{55247,4}}, +[56096]={{12360,6},{6037,6},{12800,8},{61673,4},{55154,6},{55248,4}}, +[56112]={{3860,1},{55249,1},{55247,1}}, +[56113]={{3372,1},{4625,1},{7068,1}}, +[58112]={{4234,14},{4236,2},{4402,2},{5637,2},{7287,4},{55249,2}}, +[58134]={{3824,3},{3864,3},{4291,2},{4305,8},{4342,1},{7068,3}}, +[58304]={{11371,8},{12364,4},{12800,2},{18631,4},{61673,3}}, +[58305]={{7076,4},{7910,4},{11371,8},{12363,2},{12803,6},{18631,4}}, +[60007]={{3824,8},{11371,10},{12360,14},{12655,12},{61673,6}}, +[60008]={{11371,12},{12360,12},{12655,12},{22202,6},{61673,6}}, +[60009]={{11371,8},{12360,10},{12655,10},{12800,4},{61673,4}}, +[60010]={{11371,14},{12360,14},{12655,12},{18335,1},{22203,2},{61673,8}}, +[60098]={{4404,1},{10558,1},{10561,1}}, +[60099]={{814,2},{3829,1},{4375,6},{7191,1},{9449,1},{18631,1},{60098,1}}, +[60287]={{12359,12},{12655,2},{12810,2},{20520,2}}, +[60288]={{12359,20},{12361,1},{12655,2},{12810,1},{20520,2}}, +[60289]={{12359,24},{12655,6},{12800,1},{12810,2},{20520,4}}, +[60290]={{12359,24},{12644,1},{12655,4},{12810,2},{20520,4}}, +[60291]={{7080,1},{12359,16},{12655,2},{20520,2}}, +[60292]={{7076,1},{12359,14},{12655,2},{12810,1},{20520,3}}, +[60293]={{12364,1},{12644,6},{12655,25},{12808,10},{12810,2},{20520,8}}, +[60294]={{3860,14},{3864,2},{4278,10},{7966,4}}, +[60573]={{7078,1},{11371,1},{11754,6},{12359,16}}, +[60574]={{7078,2},{8170,6},{11371,1},{11754,12},{12359,24},{20520,2}}, +[60575]={{7078,2},{8170,4},{11371,1},{11754,8},{12359,20}}, +[60576]={{7078,2},{11754,5},{12359,12},{12810,1}}, +[60577]={{7078,8},{11371,8},{11754,18},{12359,40},{12810,8}}, +[60578]={{7077,7},{7078,2},{11754,5},{12359,12},{12810,3}}, +[60907]={{7069,16},{7082,6},{14048,10},{14344,2}}, +[60908]={{3577,2},{7076,6},{7082,6},{12359,40},{12810,6}}, +[60909]={{7076,6},{12810,6},{14048,10},{14344,1}}, +[60910]={{7076,1},{7082,2},{8170,20},{12810,8}}, +[60976]={{3713,1},{10286,1},{60955,1}}, +[60977]={{3713,1},{13467,1},{60955,1}}, +[60978]={{3713,1},{13464,2},{60955,1}}, +[61181]={{2459,1},{8846,1},{8925,1},{13465,2}}, +[61182]={{7081,1},{12359,8},{12644,2},{61673,1}}, +[61183]={{12810,3},{14341,2},{61673,3}}, +[61185]={{12360,16},{12644,10},{12800,6},{12810,6},{12811,6},{13926,6}}, +[61186]={{8846,24},{9210,10},{12810,1},{14048,14},{14344,1}}, +[61187]={{10548,2},{12655,8},{12800,1},{12810,10},{15994,6},{16006,8}}, +[61188]={{7076,8},{12803,4},{12810,12},{14341,8},{15407,4}}, +[61216]={{3859,1},{20381,1},{61198,1}}, +[61224]={{8925,1},{11176,1},{61198,1}}, +[61225]={{730,1},{8831,1},{8925,1},{13463,1}}, +[61229]={{8170,1},{20381,1},{61198,1}}, +[61230]={{14341,1},{20381,1},{61198,1}}, +[61356]={{12803,6},{12810,20},{15407,6},{61229,22}}, +[61357]={{12803,2},{12810,6},{15407,1},{61229,8}}, +[61358]={{7082,6},{12803,6},{12810,12},{15407,4},{61229,12}}, +[61359]={{7082,8},{12810,12},{14341,8},{15407,2},{61229,8}}, +[61360]={{7082,6},{12803,6},{12810,4},{14048,40},{14342,6},{61230,20}}, +[61361]={{7080,4},{7082,4},{12803,4},{14048,24},{14342,4},{61230,14}}, +[61362]={{7080,2},{7082,2},{14342,2},{61230,8}}, +[61363]={{7082,4},{12803,4},{14048,12},{14342,4},{61230,8}}, +[61364]={{12360,8},{12644,8},{12799,8},{12800,2},{12810,12},{61216,20}}, +[61365]={{12364,8},{12655,8},{12810,8},{61216,14}}, +[61366]={{12644,4},{12655,4},{12810,4},{61216,8}}, +[61367]={{12644,2},{12655,8},{12800,2},{12810,8},{61216,8}}, +[61648]={{7076,3},{7078,3},{12359,16}}, +[61649]={{7076,6},{7078,6},{12360,2},{12655,12}}, +[61732]={{12803,80},{13468,5},{20725,10},{61197,5},{61199,25},{61673,25}}, +[61779]={{2840,8},{2880,1},{3470,2}}, +[61780]={{2841,8},{2880,1},{3478,2}}, +[61781]={{3486,2},{3575,8},{7071,1}}, +[61782]={{3860,8},{6037,1},{7071,1},{7966,2}}, +[61783]={{6037,1},{7071,1},{12359,8},{12644,2}}, +[61784]={{7071,1},{11754,1},{12360,2},{12361,1},{12644,2}}, +[61785]={{7076,1},{12644,2},{12803,1},{61216,2}}, +[61810]={{8846,6},{12359,10},{19933,6}}, +[61818]={{11382,1},{7077,6},{55248,1},{55154,2}}, +[65000]={{8170,35},{12803,6},{12810,4},{14341,2},{15414,40}}, +[65001]={{8170,30},{12803,4},{12810,3},{14341,1},{15414,30}}, +[65002]={{8170,30},{12803,4},{12810,2},{14341,2},{15414,25}}, +[65003]={{7971,4},{10285,8},{12662,20},{14048,12},{14256,20},{14341,1},{20520,10}}, +[65004]={{3577,6},{8846,10},{11382,2},{11752,1},{12360,14},{12644,4},{12938,1}}, +[65005]={{3860,24},{4304,4},{6037,10},{7910,8},{7966,6}}, +[65006]={{7082,12},{8170,30},{12810,16},{15407,4},{15415,40},{20295,1}}, +[65007]={{7910,1},{8170,4},{12359,24}}, +[65008]={{9197,20},{12360,14},{12364,10},{12644,4},{12803,10},{20002,10}}, +[65009]={{1210,6},{4236,4},{4304,8},{7428,8},{7971,2},{8343,2}}, +[65010]={{2840,8},{3470,2}}, +[65011]={{2840,8},{2880,4},{3470,4}}, +[65012]={{1705,2},{2841,6},{3391,2},{3466,2},{3478,4}}, +[65013]={{3466,4},{3486,4},{3829,2},{3859,10},{7070,4}}, +[65014]={{7076,6},{11371,10},{12360,10},{12809,8},{22203,4}}, +[65015]={{8170,24},{14341,1},{15407,1},{15415,25}}, +[65019]={{4304,30},{8165,25},{8172,3},{8343,4}}, +[65021]={{8211,1},{12803,20},{12810,16},{14227,4},{15407,4},{20002,10}}, +[65022]={{4304,40},{7075,12},{8172,3},{8343,4}}, +[65023]={{4304,20},{7081,10},{8172,1},{8343,4}}, +[65024]={{7076,20},{8170,20},{8343,2},{12809,10},{13455,5},{15407,6},{15419,20}}, +[65025]={{7078,25},{8170,20},{8343,2},{11751,2},{15407,5},{15417,15},{21546,5}}, +[65026]={{7080,20},{8170,15},{8343,2},{12457,10},{15407,5},{15422,20},{18294,10}}, +[65027]={{2459,10},{7082,20},{8170,10},{8343,2},{12753,6},{15407,6},{15423,20}}, +[65032]={{2931,2},{3372,1}}, +[65035]={{7078,10},{14227,4},{14342,6},{17010,5},{17011,4}}, +[65036]={{12607,6},{14227,4},{15407,5},{17010,5},{17011,3},{17012,6}}, +[65037]={{7076,6},{12607,6},{14227,4},{15407,4},{17010,3},{17011,6}}, +[65038]={{12607,6},{12810,12},{14227,4},{15407,5},{17010,9},{17012,12}}, +[65039]={{11371,14},{17010,6},{17011,5}}, +[81030]={{55156,1},{774,1},{55150,1}}, +[81031]={{2840,6},{774,2},{55245,1}}, +[81032]={{55150,1},{2770,1}}, +[81061]={{8170,6},{14047,4},{14341,1}}, +[81062]={{8170,12},{12803,1},{14341,1}}, +[81063]={{7080,1},{8170,10},{12803,1},{14341,1}}, +[81064]={{8170,12},{8343,2},{14341,1}}, +[81065]={{8170,8},{14047,4},{14341,1}}, +[81066]={{8170,24},{12803,4},{14341,1},{15407,1}}, +[81092]={{2840,4},{55245,1}}, +[81093]={{55156,1},{2880,1},{55245,1}}, +[83280]={{2324,1},{2842,1},{4339,4},{8343,2}}, +[83281]={{2324,1},{2842,2},{4339,10},{5500,1},{8343,4},{17028,1}}, +[83282]={{2324,1},{2842,1},{4339,4},{8343,1}}, +[83283]={{2324,1},{4304,2},{4339,3},{8343,3}}, +[83284]={{2324,1},{4339,3},{6048,1},{8343,2}}, +[83285]={{2324,1},{2842,1},{4339,6},{8343,2},{17028,1}}, +[83286]={{3827,2},{4339,3},{6260,1},{7070,1},{8343,1}}, +[83287]={{1705,2},{4339,6},{6260,2},{7070,2},{8343,1},{20746,1}}, +[83288]={{4234,3},{4339,2},{6260,1},{7070,1},{8343,1}}, +[83289]={{4339,3},{6260,1},{6373,1},{8343,2},{9036,1}}, +[83290]={{4339,3},{6149,2},{6260,1},{7070,1},{8343,1}}, +[83291]={{3827,2},{4339,4},{6260,1},{7070,1},{8343,1}}, +[83292]={{7068,2},{14048,5},{14341,1}}, +[83293]={{4625,1},{7068,1},{14048,4},{14341,3}}, +[83294]={{4625,4},{6037,2},{7068,3},{7078,2},{14048,8},{14341,4}}, +[83295]={{7077,4},{14048,2},{14341,1}}, +[83296]={{6371,1},{8170,2},{14048,2},{14341,1}}, +[83297]={{4625,1},{7077,4},{14048,4},{14341,2}}, +[83309]={{8838,1},{22529,1},{51714,2}}, +[83400]={{2605,1},{4291,2},{4304,8},{4338,4}}, +[83401]={{2605,2},{3575,2},{4291,4},{4304,12}}, +[83402]={{2605,1},{4234,2},{4291,3},{4304,10}}, +[83403]={{4234,10},{4236,1},{4291,1}}, +[83404]={{4291,2},{4304,6}}, +[83405]={{4291,3},{4304,7}}, +[83410]={{3859,14},{7966,2}}, +[83411]={{3859,16},{7966,4}}, +[83412]={{3859,18},{3864,1},{7966,2}}, +[83413]={{1705,1},{3859,20},{3864,1},{7966,4}}, +[83414]={{3859,20},{3864,1},{6037,1},{7966,3}}, +[83415]={{3859,10},{3864,4},{6037,8},{7909,2},{7922,1},{7966,3}}, +[84040]={{3713,1},{13464,1},{13889,1},{61173,1}}, +[84041]={{159,1},{12203,1},{12205,1}}, +} + +-- Per profession: { craftItemID, "cnName", "source" } +NanamiTradeSkillByProf = { +["Alchemy"]={ +{2454,"狮王之力药剂","A"}, +{118,"初级治疗药水","A"}, +{2455,"初级法力药水","T"}, +{2456,"初级活力药水","T"}, +{3390,"次级敏捷药剂","D"}, +{2458,"初级坚韧药剂","T"}, +{2459,"迅捷药水","D"}, +{858,"次级治疗药水","T"}, +{3382,"弱效巨魔之血药水","T"}, +{3383,"智慧药剂","T"}, +{3384,"初级抗魔药水","D"}, +{3385,"次级法力药水","T"}, +{3386,"抗毒药水","D"}, +{3387,"有限无敌药水","D"}, +{3388,"强力巨魔之血药水","T"}, +{3389,"防御药剂","T"}, +{3391,"食人魔力量药剂","D"}, +{2457,"初级敏捷药剂","D"}, +{929,"治疗药水","T"}, +{3823,"次级隐形药水","T"}, +{3824,"暗影之油","V"}, +{3825,"坚韧药剂","D"}, +{3826,"超强巨魔之血药水","D"}, +{3827,"法力药水","T"}, +{3828,"侦测次级隐形药剂","D"}, +{3829,"冰霜之油","V"}, +{4596,"透明治疗药水","Q"}, +{4623,"次级石盾药水","Q"}, +{5631,"怒气药水","V"}, +{5633,"暴怒药水","V"}, +{5634,"自由行动药剂","V"}, +{5996,"水下呼吸药剂","T"}, +{1710,"强效治疗药水","T"}, +{5997,"初级防御药剂","A"}, +{6051,"神圣防护药水","V"}, +{6048,"暗影防护药水","V"}, +{6049,"火焰防护药水","V"}, +{6050,"冰霜防护药水","V"}, +{6052,"自然防护药水","V"}, +{6370,"黑口鱼油","T"}, +{6371,"火焰之油","T"}, +{6372,"速游药水","T"}, +{6373,"火力药剂","T"}, +{6662,"增长药剂","D"}, +{6149,"强效法力药水","T"}, +{8949,"敏捷药剂","T"}, +{8951,"强效防御药剂","T"}, +{8956,"献祭之油","T"}, +{9030,"滋补药剂","Q"}, +{9036,"抗魔药水","D"}, +{9061,"地精火箭燃油","E"}, +{3928,"优质治疗药水","T"}, +{9144,"野葡萄药水","D"}, +{9149,"点金石","V"}, +{9154,"侦测亡灵药剂","T"}, +{9155,"奥法药剂","T"}, +{9172,"隐形药水","D"}, +{9179,"强效聪颖药剂","T"}, +{9088,"阿尔萨斯的礼物","D"}, +{9187,"强效敏捷药剂","T"}, +{9197,"梦境药剂","D"}, +{9206,"巨人药剂","D"}, +{9210,"幻象染料","V"}, +{9264,"暗影之力药剂","V"}, +{9224,"屠魔药剂","V"}, +{9233,"侦测恶魔药剂","T"}, +{3577,"点铁成金","V"}, +{6037,"转化秘银","V"}, +{10592,"猫眼药剂","T"}, +{12190,"昏睡药水","T"}, +{12360,"转化:奥金","V"}, +{13423,"石鳞鱼油","T"}, +{13442,"强效怒气药水","D"}, +{13443,"优质法力药水","V"}, +{13445,"超强防御药剂","V"}, +{13447,"先知药剂","D"}, +{13446,"特效治疗药水","V"}, +{13453,"蛮力药剂","Q"}, +{7078,"转化:点气成火","V"}, +{7076,"转化:点火成土","V"}, +{7080,"转化:转土成水","V"}, +{7082,"转化:点水成气","V"}, +{12808,"转化:水转死灵","D"}, +{12803,"转化:土转生命","D"}, +{13455,"强效石盾药水","D"}, +{13452,"猫鼬药剂","D"}, +{13462,"净化药水","D"}, +{13454,"强效奥法药剂","D"}, +{13457,"强效火焰防护药水","D"}, +{13456,"强效冰霜防护药水","D"}, +{13458,"强效自然防护药水","D"}, +{13461,"强效奥术防护药水","D"}, +{13459,"强效暗影防护药水","D"}, +{13444,"特效法力药水","D"}, +{13506,"化石合剂","D"}, +{13510,"泰坦合剂","D"}, +{13511,"精炼智慧合剂","D"}, +{13512,"超级能量合剂","D"}, +{13513,"多重抗性合剂","D"}, +{17708,"冰霜之力药剂","Q"}, +{18253,"特效活力药水","D"}, +{18294,"强效水下呼吸药剂","T"}, +{19931,"古拉巴什魔精","O"}, +{20007,"魔血药水","V"}, +{20002,"强效昏睡药水","V"}, +{20008,"活力行动药水","V"}, +{20004,"特效巨魔之血药水","V"}, +{7068,"转化:元素火焰","V"}, +{21546,"强效火力药剂","D"}, +{56113,"急速生长药剂","D"}, +{13460,"强效神圣防护药水","V"}, +{13503,"炼金石","D"}, +{17967,"精制奥妮克希亚鳞片","Q"}, +{55046,"强效冰霜之力药剂","V"}, +{55048,"强效奥术之力药剂","V"}, +{47410,"翡翠猫鼬药剂","Q"}, +{47412,"奥法巨人药剂","D"}, +{47414,"梦境火酒药剂","D"}, +{51262,"不稳定的混合物","?"}, +{50237,"强效自然力量药剂","D"}, +{61181,"加速药水","D"}, +{61225,"清醒药水","Q"}, +{61224,"梦境精华药剂","Q"}, +{7067,"转化:元素之土","V"}, +{7070,"转化:元素之水","V"}, +}, +["Blacksmithing"]={ +{2862,"劣质磨刀石","A"}, +{2851,"铜质链甲腰带","T"}, +{2852,"铜质链甲短裤","T"}, +{2853,"铜质护腕","A"}, +{2854,"铜质符文护腕","T"}, +{2863,"粗制磨刀石","T"}, +{2857,"铜质符文腰带","T"}, +{2864,"铜质符文胸甲","D"}, +{2865,"劣质青铜护腿","T"}, +{2866,"劣质青铜胸甲","T"}, +{2868,"青铜花纹护腕","T"}, +{2869,"镀银青铜胸甲","D"}, +{2871,"重磨刀石","T"}, +{2870,"银鳞胸甲","T"}, +{2844,"铜质钉锤","T"}, +{2845,"铜斧","T"}, +{2847,"铜质短剑","T"}, +{2848,"青铜钉锤","T"}, +{2849,"青铜斧","T"}, +{2850,"青铜短剑","T"}, +{3239,"劣质平衡石","A"}, +{3240,"粗制平衡石","T"}, +{3241,"重平衡石","T"}, +{3487,"铜质重剑","T"}, +{3488,"铜质战斧","T"}, +{3489,"厚重战斧","T"}, +{3490,"致命的青铜短剑","D"}, +{3491,"青铜重锤","T"}, +{3492,"巨型铁锤","D"}, +{3469,"铜质链甲战靴","T"}, +{3470,"劣质砂轮","T"}, +{3471,"铜质链甲外衣","D"}, +{3472,"铜质符文护手","T"}, +{3473,"铜质符文短裤","T"}, +{3474,"铜质宝石手套","D"}, +{3478,"粗制砂轮","T"}, +{3480,"劣质青铜护肩","T"}, +{3481,"镀银青铜护肩","D"}, +{3482,"镀银青铜战靴","T"}, +{3483,"镀银青铜护手","T"}, +{3484,"绿铁战靴","D"}, +{3485,"绿铁护手","D"}, +{3486,"重砂轮","T"}, +{3848,"青铜匕首","T"}, +{3849,"硬铁短剑","V"}, +{3850,"玉蛇刀","D"}, +{3851,"结实的铁锤","V"}, +{3852,"碎铁金锤","D"}, +{3853,"月钢宽剑","V"}, +{3854,"霜虎之刃","D"}, +{3855,"巨型铁斧","V"}, +{3856,"月牙斧","D"}, +{3835,"绿铁护腕","T"}, +{3836,"绿铁头盔","T"}, +{3837,"金鳞罩盔","V"}, +{3840,"绿铁护肩","D"}, +{3841,"金鳞护肩","D"}, +{3842,"绿铁护腿","T"}, +{3843,"金鳞护腿","D"}, +{3844,"绿铁锁甲","T"}, +{3845,"金鳞胸甲","D"}, +{3846,"精钢战靴","D"}, +{3847,"金鳞战靴","D"}, +{5540,"珍珠匕首","T"}, +{5541,"彩虹之锤","D"}, +{6042,"铁质盾刺","D"}, +{6043,"铁质平衡锤","D"}, +{6040,"金鳞护腕","T"}, +{6041,"钢质武器链","D"}, +{6214,"铜质大锤","T"}, +{6350,"劣质青铜战靴","T"}, +{6338,"银棒","T"}, +{6731,"铁炉堡胸甲","Q"}, +{7071,"铁扣环","T"}, +{7166,"铜质匕首","T"}, +{7913,"野人铁护肩","Q"}, +{7914,"野人铁质胸甲","Q"}, +{7915,"野人铁盔","Q"}, +{7916,"野人铁靴","Q"}, +{7917,"野人铁手套","Q"}, +{7963,"钢质胸甲","T"}, +{7964,"坚固的磨刀石","T"}, +{7966,"坚固的砂轮","T"}, +{7965,"坚固的平衡石","T"}, +{7918,"重型秘银护肩","T"}, +{7919,"重型秘银手套","T"}, +{7920,"秘银鳞片短裤","T"}, +{7921,"秘银短裤","D"}, +{7922,"钢质头盔","T"}, +{7924,"秘银鳞片护腕","V"}, +{7967,"秘银盾刺","D"}, +{7926,"精制秘银短裤","Q"}, +{7927,"精制秘银手套","Q"}, +{7928,"精制秘银护肩","Q"}, +{7938,"真银护手","T"}, +{7929,"兽人护腿","Q"}, +{7930,"重型秘银胸甲","T"}, +{7931,"秘银罩帽","T"}, +{7969,"秘银马刺","D"}, +{7932,"秘银鳞片护肩","D"}, +{7933,"秘银重靴","T"}, +{7934,"重型秘银头盔","D"}, +{7935,"精制秘银胸甲","Q"}, +{7939,"真银胸甲","T"}, +{7936,"精制秘银战靴","Q"}, +{7937,"精制秘银头盔","Q"}, +{7955,"铜质双刃刀","T"}, +{7956,"青铜战锤","T"}, +{7957,"青铜巨剑","T"}, +{7958,"青铜战斧","T"}, +{7941,"秘银重斧","T"}, +{7942,"蓝光斧","D"}, +{7943,"秘银魔剑","D"}, +{7945,"巨型黑色锤","T"}, +{7954,"粉碎者","T"}, +{7944,"秘银细剑","D"}, +{7961,"幻影之刃","T"}, +{7946,"秘银符文战锤","D"}, +{7959,"荒芜","T"}, +{7947,"乌木刀","V"}, +{7960,"真银圣剑","T"}, +{9060,"秘银杆","E"}, +{9366,"金鳞护手","Q"}, +{10423,"镀银青铜护腿","D"}, +{10421,"劣质铜外衣","A"}, +{11128,"金棒","T"}, +{11144,"真银棒","T"}, +{11608,"黑铁粉碎者","D"}, +{11606,"黑铁锁甲","D"}, +{11607,"黑铁斩碎者","D"}, +{11605,"黑铁护肩","D"}, +{11604,"黑铁板甲","D"}, +{12259,"亮闪闪的钢匕首","T"}, +{12260,"灼热金剑","D"}, +{12644,"致密砂轮","T"}, +{12643,"致密平衡石","T"}, +{12404,"致密磨刀石","T"}, +{12405,"瑟银护甲","D"}, +{12406,"瑟银腰带","D"}, +{12408,"瑟银护腕","D"}, +{12416,"辐光腰带","D"}, +{12428,"君王板甲护肩","Q"}, +{12424,"君王板甲腰带","Q"}, +{12415,"辐光胸甲","D"}, +{12425,"君王板甲护腕","Q"}, +{12624,"野刺锁甲","D"}, +{12645,"瑟银盾刺","D"}, +{12409,"瑟银长靴","D"}, +{12410,"瑟银头盔","D"}, +{12418,"辐光手套","D"}, +{12631,"炽热板甲护手","Q"}, +{12419,"辐光长靴","D"}, +{12426,"君王板甲战靴","Q"}, +{12427,"君王板甲头盔","Q"}, +{12417,"辐光头饰","D"}, +{12632,"风暴护手","D"}, +{12414,"瑟银护腿","D"}, +{12422,"君王板甲护胸","Q"}, +{12610,"符文板甲护肩","D"}, +{12611,"符文板甲战靴","D"}, +{12628,"魔铸胸甲","Q"}, +{12633,"白魂头盔","D"}, +{12420,"辐光护腿","D"}, +{12612,"符文板甲头盔","D"}, +{12636,"大酋长头盔","D"}, +{12640,"狮心头盔","D"}, +{12429,"君王板甲护腿","Q"}, +{12613,"符文板甲","D"}, +{12614,"符文板甲护腿","D"}, +{12639,"要塞护手","D"}, +{12620,"魔化瑟银头盔","Q"}, +{12619,"魔化瑟银护腿","Q"}, +{12618,"魔化瑟银胸甲","Q"}, +{12641,"免伤锁甲","D"}, +{12773,"华丽瑟银手斧","V"}, +{12774,"黎明之刃","Q"}, +{12775,"巨型瑟银战斧","V"}, +{12776,"魔化战锤","Q"}, +{12777,"闪耀轻剑","Q"}, +{12781,"平静","D"}, +{12792,"火山战锤","D"}, +{12782,"腐蚀术","D"}, +{12796,"泰坦之锤","D"}, +{12790,"奥金圣剑","D"}, +{12798,"歼灭者","D"}, +{12797,"寒冰护卫者","D"}, +{12794,"精工风暴战锤","D"}, +{12784,"奥金斧","D"}, +{12783,"寻心者","D"}, +{15869,"白银万能钥匙","T"}, +{15870,"黄金万能钥匙","T"}, +{15871,"真银万能钥匙","T"}, +{15872,"奥金万能钥匙","T"}, +{16206,"奥金棒","T"}, +{16989,"炽热链甲束带","V"}, +{16988,"炽热链甲护肩","V"}, +{17014,"黑铁护腕","V"}, +{17013,"黑铁护腿","V"}, +{17015,"黑铁利剑","V"}, +{17016,"黑铁战斧","V"}, +{17193,"萨弗隆战锤","Q"}, +{17704,"寒冬之刃","D"}, +{18262,"元素磨刀石","D"}, +{19043,"重型木喉腰带","V"}, +{19048,"重型木喉长靴","V"}, +{19051,"黎明束腰","V"}, +{19057,"黎明手套","V"}, +{19148,"黑铁头盔","V"}, +{19164,"黑铁护手","V"}, +{19166,"野蛮狂怒","V"}, +{19167,"黑色怒火","V"}, +{19170,"黑手","V"}, +{19168,"黑色卫士","V"}, +{19169,"夜幕","V"}, +{19690,"血魂胸甲","V"}, +{19691,"血魂护肩","V"}, +{19692,"血魂护手","V"}, +{19693,"黑暗之魂胸甲","V"}, +{19694,"黑暗之魂护腿","V"}, +{19695,"黑暗之魂护肩","V"}, +{20039,"黑铁长靴","V"}, +{20549,"黑暗符文护手","Q"}, +{20551,"黑暗符文头盔","Q"}, +{20550,"黑暗符文胸甲","Q"}, +{22197,"重型黑曜石腰带","V"}, +{22198,"碎裂黑曜石盾牌","V"}, +{22196,"厚重黑曜石胸甲","D"}, +{22195,"轻型黑曜石腰带","V"}, +{22194,"毁灭者的黑暗之握","D"}, +{22191,"黑曜石锁甲","V"}, +{22385,"泰坦护腿","D"}, +{22384,"说服者","D"}, +{22383,"先知之刃","D"}, +{22669,"破冰胸甲","T"}, +{22670,"破冰护手","T"}, +{22671,"破冰护腕","T"}, +{22762,"铁藤胸甲","V"}, +{22763,"铁藤手套","V"}, +{22764,"铁藤腰带","V"}, +{131,"钢带扣","D"}, +{66,"设计图:金带扣","D"}, +{67,"龙鳞带扣","D"}, +{82,"黑铁带扣","V"}, +{151,"真银带扣","D"}, +{87,"魔化瑟银带扣","D"}, +{103,"黑曜石带扣","D"}, +{2867,"劣质青铜护腕","V"}, +{6730,"铁炉堡链甲","V"}, +{6733,"铁炉堡护手","V"}, +{7925,"秘银鳞片手套","V"}, +{12625,"黎明使者护肩","D"}, +{12764,"瑟银巨剑","V"}, +{12769,"冷木斧","V"}, +{12772,"镶饰瑟银战锤","V"}, +{12779,"符文之刃","V"}, +{12795,"血爪","V"}, +{12802,"黑暗之矛","V"}, +{55058,"铭文板甲护腿","V"}, +{51264,"爆炸护盾","D"}, +{61364,"梦境钢铁护肩","D"}, +{61365,"梦境钢铁护腿","Q"}, +{61366,"梦境钢铁护腕","Q"}, +{61367,"梦境钢铁长靴","Q"}, +{61185,"黎明石锤","D"}, +{46600,"洛丹伦胸甲","Q"}, +{83410,"钢铁板甲长靴","T"}, +{83411,"钢铁板甲护手","T"}, +{83412,"钢铁板甲护腿","T"}, +{83413,"钢铁板甲胸甲","T"}, +{83414,"钢铁板甲护肩","T"}, +{83415,"钢铁板甲头盔","T"}, +{60294,"血石战刃","V"}, +{60293,"未淬火的符文剑","D"}, +{65004,"华丽血石匕首","Q"}, +{65005,"放血剃刀","?"}, +{65007,"帝国板甲护手","Q"}, +{65008,"梦境使者","V"}, +{65010,"铜指虎","T"}, +{65011,"锋利之爪","T"}, +{65012,"青铜荣耀者","T"}, +{65013,"冰霜缚斩者","D"}, +{65014,"偏斜护肩","D"}, +{60288,"符文蚀刻胫甲","D"}, +{60289,"符文蚀刻腿甲","D"}, +{60290,"符文蚀刻胸甲","D"}, +{60291,"符文蚀刻王冠","D"}, +{60292,"符文蚀刻护肩","D"}, +{60287,"符文蚀刻之握","D"}, +{60573,"仇恨熔炉头盔","D"}, +{60574,"仇恨熔炉胸甲","D"}, +{60575,"仇恨熔炉护腿","D"}, +{60576,"仇恨熔炉腰带","D"}, +{60577,"仇恨熔炉护手","D"}, +{60578,"仇恨熔炉靴子","D"}, +{61648,"木喉之怒","V"}, +{61649,"木喉肩铠","V"}, +{65039,"火链胸甲","V"}, +{60908,"半人马权威护肩","V"}, +{61182,"瑟银马刺","D"}, +{61779,"铜带扣","V"}, +{61780,"青铜带扣","V"}, +{61781,"铁扣环","V"}, +{61782,"秘银带扣","V"}, +{61783,"瑟银带扣","D"}, +{61784,"奥金带扣","D"}, +{61785,"梦钢带扣","Q"}, +{60007,"塔铸皇冠","D"}, +{60008,"塔铸胸甲","D"}, +{60009,"塔铸肩铠","D"}, +{60010,"塔铸破坏者","D"}, +{61810,"血腥带扣","Q"}, +{55526,"超凡罩帽","Q"}, +{55527,"超凡肩甲","Q"}, +{55528,"超凡胸甲","Q"}, +{55529,"超凡护腿","Q"}, +{55530,"炫光头盔","Q"}, +{55531,"炫光肩铠","Q"}, +{55532,"炫光胸甲","Q"}, +{55533,"炫光护腿","Q"}, +}, +["Cooking"]={ +{2679,"烧烤狼肉","A"}, +{2680,"香辣狼肉","T"}, +{2681,"烤野猪肉","A"}, +{2684,"山狗肉排","T"}, +{724,"猪肝馅饼","V"}, +{733,"杂味炖肉","V"}, +{2683,"蟹肉蛋糕","T"}, +{2682,"煮蟹爪","D"}, +{2687,"猪肉干","T"}, +{1082,"赤脊山炖肉","V"}, +{2685,"多汁猪排","D"}, +{1017,"干烤狼肉串","V"}, +{2888,"啤酒烤猪排","V"}, +{3662,"鳄鱼肉排","V"}, +{3220,"血肠","V"}, +{3663,"鱼人鳍汤","V"}, +{3664,"鳄鱼浓汤","V"}, +{3665,"美味煎蛋卷","V"}, +{3666,"蜘蛛蛋糕","V"}, +{3726,"大块的熊排","V"}, +{3727,"烤狮排","V"}, +{3728,"香烤狮肉","Q"}, +{3729,"海龟汤","Q"}, +{4457,"烧烤秃鹰翅膀","V"}, +{5472,"卡多雷蜘蛛烤肉","Q"}, +{5473,"蝎肉大餐","V"}, +{5474,"烤科多肉","V"}, +{5476,"狂鱼肉片","V"}, +{5477,"炖陆行鸟","V"}, +{5478,"掘地鼠炖肉","Q"}, +{5479,"脆炸蜥蜴尾","V"}, +{5480,"瘦鹿肉","V"}, +{5525,"水煮蚌肉","T"}, +{5527,"地精芥末蘸蚌肉","T"}, +{5526,"杂烩蚌肉","V"}, +{6038,"烧烤巨蚌","V"}, +{6290,"美味小鱼","V"}, +{787,"滑皮鲭鱼","V"}, +{4592,"长嘴泥鳅","V"}, +{6316,"洛克湖狂鱼","V"}, +{4593,"刺须鲶鱼","V"}, +{5095,"彩鳍鱼","V"}, +{4594,"石鳞鳕鱼","V"}, +{6657,"美味风蛇","D"}, +{6888,"草药烘蛋","A"}, +{6890,"熏熊肉","V"}, +{7676,"菊花茶","V"}, +{10841,"金棘茶","T"}, +{12209,"瘦狼排","V"}, +{12210,"烤迅猛龙肉","V"}, +{13851,"热狼排","V"}, +{12212,"丛林大杂烩","V"}, +{12213,"腐肉大餐","V"}, +{12214,"神秘杂烩","V"}, +{12217,"龙息红椒","V"}, +{12215,"科多肉杂烩","V"}, +{12216,"辣椒蟹肉","V"}, +{12218,"超级煎蛋卷","V"}, +{12224,"香脆蝙蝠翅","V"}, +{6887,"斑点黄尾鱼","V"}, +{13927,"煮熟的光滑大鱼","V"}, +{13928,"烤鱿鱼","V"}, +{13930,"油炸红腮鱼","V"}, +{13929,"烟熏鲈鱼","V"}, +{13931,"夜鳞鱼汤","V"}, +{13932,"水煮阳鳞鲑鱼","V"}, +{13933,"炖龙虾","V"}, +{13934,"大鱼片","V"}, +{13935,"烤鲑鱼","V"}, +{16766,"安德麦蚌肉杂烩","V"}, +{8364,"银头鲑鱼","V"}, +{17197,"姜饼","V"}, +{17198,"蛋奶酒","V"}, +{17222,"蜘蛛肉肠","T"}, +{18045,"嫩狼肉排","V"}, +{18254,"洛恩塔姆薯块","D"}, +{20074,"鳄鱼炖肉","V"}, +{20452,"沙漠肉丸子","Q"}, +{21023,"迪尔格的超美味奇美拉肉片","Q"}, +{21072,"烤鼠尾鱼","V"}, +{21217,"美味鼠尾鱼","V"}, +{30818,"海员香辣炖菜","Q"}, +{84040,"巧克力鱼","Q"}, +{84041,"吉尔尼斯热炖菜","V"}, +{53015,"古拉巴什浓汤","Q"}, +{83309,"强能草药沙拉","Q"}, +{60976,"达农佐的泰拉比姆惊喜","Q"}, +{60977,"达农佐的泰拉比姆趣味","Q"}, +{60978,"达农佐的泰拉比姆情调","Q"}, +{41674,"蜜汁烤猪排","V"}, +{41673,"克劳福德苹果挞","?"}, +}, +["Disguise"]={ +}, +["Enchanting"]={ +{6218,"符文铜棒","A"}, +{6339,"符文银棒","T"}, +{11130,"符文金棒","T"}, +{11145,"符文真银棒","T"}, +{11287,"次级魔法杖","T"}, +{11288,"强效魔法杖","T"}, +{11289,"次级秘法魔杖","T"}, +{11290,"强效秘法杖","T"}, +{11811,"浓烟山脉之心","D"}, +{12655,"魔化瑟银锭","T"}, +{12810,"魔化皮","T"}, +{16207,"符文奥金棒","V"}, +{20744,"初级巫师之油","V"}, +{20745,"初级法力之油","V"}, +{20746,"次级巫师之油","V"}, +{20747,"次级法力之油","V"}, +{20750,"巫师之油","V"}, +{20749,"卓越巫师之油","V"}, +{20748,"卓越法力之油","V"}, +{17968,"充能奥妮克希亚鳞片","Q"}, +{55248,"魔法宝石油","V"}, +{61732,"永恒梦境碎片","D"}, +}, +["Engineering"]={ +{4357,"劣质火药","A"}, +{4358,"劣质炸药","A"}, +{8067,"精制轻弹丸","A"}, +{4359,"一把螺栓","T"}, +{4360,"劣质铜壳炸弹","T"}, +{4361,"铜管","T"}, +{4362,"劣质火枪","T"}, +{4363,"铜质调节器","T"}, +{4401,"机械松鼠","D"}, +{4364,"粗制火药粉","T"}, +{8068,"精制重弹丸","T"}, +{4365,"粗制炸药","T"}, +{4366,"活动假人","T"}, +{4367,"小型爆盐炸弹","D"}, +{4368,"飞虎护目镜","T"}, +{4369,"致命的短枪","T"}, +{4370,"大型铜壳炸弹","T"}, +{4371,"青铜管","T"}, +{4372,"精致手工火枪","V"}, +{4373,"暗影护目镜","D"}, +{4374,"小型青铜炸弹","T"}, +{4375,"高速青铜齿轮","T"}, +{4376,"火焰偏斜器","D"}, +{4377,"烈性火药","T"}, +{4378,"烈性炸药","T"}, +{8069,"精制实心弹丸","T"}, +{4379,"镀银猎枪","T"}, +{4380,"重磅青铜炸弹","T"}, +{4381,"自动净化装置","V"}, +{4382,"青铜框架","T"}, +{4383,"夜视步枪","D"}, +{4384,"自爆绵羊","T"}, +{4385,"绿色护目镜","T"}, +{4386,"寒冰偏斜器","V"}, +{4387,"铁棒","T"}, +{4388,"退化射线","D"}, +{4403,"便携式青铜迫击炮","D"}, +{4389,"发条式同步协调陀螺仪","T"}, +{4390,"铁皮手雷","T"}, +{4391,"联合收割机组件","T"}, +{4392,"高级假人","T"}, +{4393,"工匠眼镜","D"}, +{4394,"重磅铁制炸弹","T"}, +{4395,"地精暗雷","D"}, +{4396,"机械幼龙","V"}, +{4397,"侏儒隐形装置","D"}, +{4398,"大型爆盐炸弹","D"}, +{4404,"银触媒","T"}, +{4405,"粗制瞄准镜","T"}, +{4406,"普通瞄准镜","T"}, +{4407,"精确瞄准镜","V"}, +{5507,"精制望远镜","T"}, +{6219,"扳手","T"}, +{4852,"闪光雷","Q"}, +{6712,"练习锁","T"}, +{6714,"简易投掷炸弹","D"}, +{7189,"地精火箭靴","T"}, +{7506,"侏儒通用遥控器","V"}, +{6533,"水下诱鱼器","T"}, +{7148,"地精起搏器","V"}, +{10558,"黄金能量核心","T"}, +{10505,"实心炸药","T"}, +{10507,"实心炸弹","T"}, +{10499,"增亮护目镜","D"}, +{10559,"秘银管","T"}, +{10498,"侏儒微调器","T"}, +{10560,"不牢固的扳机","T"}, +{10500,"火焰护目镜","T"}, +{10508,"秘银火枪","T"}, +{10512,"高速秘银弹头","T"}, +{10546,"致命瞄准镜","V"}, +{10561,"秘银外壳","T"}, +{10514,"秘银破片炸弹","T"}, +{10501,"猫眼超级护目镜","D"}, +{10510,"大口径秘银步枪","D"}, +{10502,"法术能量护目镜超级版","D"}, +{10518,"降落伞披风","D"}, +{10506,"潜水头盔","V"}, +{10503,"玫瑰色护目镜","T"}, +{10562,"高爆炸弹","T"}, +{10548,"狙击瞄准镜","D"}, +{10513,"秘银螺旋弹","T"}, +{10504,"绿色透镜","T"}, +{10576,"秘银机械幼龙","V"}, +{10644,"地精火箭燃油配方","T"}, +{10577,"地精迫击炮","T"}, +{10542,"地精采矿头盔","T"}, +{10543,"地精施工头盔","T"}, +{10586,"大炸弹","T"}, +{10587,"地精炸弹箱","T"}, +{10588,"地精火箭头盔","T"}, +{10645,"侏儒死亡射线","T"}, +{10646,"地精工兵炸药","T"}, +{10713,"秘银杆设计图","T"}, +{10545,"侏儒护目镜","T"}, +{10716,"侏儒缩小射线","T"}, +{10720,"侏儒撒网器","T"}, +{10721,"侏儒防护腰带","T"}, +{10724,"侏儒火箭靴","T"}, +{10725,"侏儒作战小鸡","T"}, +{10726,"侏儒洗脑帽","T"}, +{10727,"地精龙枪","T"}, +{11590,"机械修理包","T"}, +{11825,"炸弹宠物","G"}, +{11826,"发条娃娃","G"}, +{15846,"筛盐器","T"}, +{15992,"致密炸药粉","T"}, +{15993,"瑟银手榴弹","V"}, +{15994,"瑟银零件","V"}, +{15995,"瑟银火枪","D"}, +{15996,"仿真机械蛙","D"}, +{15999,"法术能量护目镜超级改良版","D"}, +{16000,"瑟银管","V"}, +{16004,"黑铁步枪","D"}, +{16005,"黑铁炸弹","D"}, +{15997,"瑟银弹","D"}, +{16023,"高级活动假人","V"}, +{16006,"精密奥金转换器","V"}, +{16009,"语音增强模组","D"}, +{16008,"高级技师护目镜","D"}, +{16022,"奥金幼龙","D"}, +{16040,"奥术炸弹","D"}, +{16007,"完美的奥金步枪","D"}, +{17716,"雪王9000型","Q"}, +{18232,"修理机器人74A型","O"}, +{18283,"比兹尼克247x128精确瞄准镜","D"}, +{18282,"火核狙击步枪","D"}, +{18168,"力反馈盾牌","D"}, +{9318,"红色焰火","V"}, +{9312,"蓝色焰火","V"}, +{9313,"绿色焰火","V"}, +{18588,"简易投掷炸弹II","V"}, +{18641,"致密炸药","T"}, +{18631,"真银变压器","V"}, +{18634,"寒冰偏斜器","V"}, +{18587,"地精起搏器XL型","D"}, +{18637,"强力净化器","D"}, +{18594,"强力爆盐炸弹","V"}, +{18638,"高辐射烈焰反射器","D"}, +{18639,"快速暗影反射器","D"}, +{18645,"报警机器人","D"}, +{18660,"世界放大器","D"}, +{18984,"空间撕裂器 - 永望镇","T"}, +{18986,"安全传送器 - 加基森","T"}, +{19026,"长蛇焰火","V"}, +{19999,"血藤护目镜","V"}, +{19998,"血藤透镜","V"}, +{21277,"安静的机械雪人","Q"}, +{21558,"小型蓝色烟花","Q"}, +{21559,"小型绿色烟花","Q"}, +{21557,"小型红色烟花","Q"}, +{21589,"大型蓝色烟花","Q"}, +{21590,"大型绿色烟花","Q"}, +{21592,"大型红色烟花","Q"}, +{21571,"蓝色烟花束","Q"}, +{21574,"绿色烟花束","Q"}, +{21576,"红色烟花束","Q"}, +{21714,"大型蓝色烟花束","Q"}, +{21716,"大型绿色烟花束","Q"}, +{21718,"大型红色烟花束","Q"}, +{21569,"烟花发射器","Q"}, +{21570,"烟花束发射器","Q"}, +{10585,"地精无线电","V"}, +{41326,"宝石透镜","V"}, +{41327,"宝石瞄准镜","D"}, +{41328,"精密珠宝工具包","D"}, +{51268,"不稳定的采矿炸药","D"}, +{61187,"精密陀螺仪护目镜","D"}, +{60098,"超能电池组","D"}, +{60099,"电动惩戒器","D"}, +{51312,"便携式虫洞发生器 - 暴风城","V"}, +{51313,"便携式虫洞发生器 - 奥格瑞玛","V"}, +{58304,"电压中和自然反射器","D"}, +{58305,"究极充能奥术反射器","D"}, +}, +["First Aid"]={ +{1251,"亚麻绷带","A"}, +{2581,"厚亚麻绷带","T"}, +{3530,"绒线绷带","T"}, +{3531,"厚绒线绷带","T"}, +{6450,"丝质绷带","T"}, +{6451,"厚丝质绷带","V"}, +{6452,"抗毒药剂","T"}, +{6453,"强力抗毒药剂","D"}, +{8544,"魔纹绷带","V"}, +{8545,"厚魔纹绷带","T"}, +{14529,"符文布绷带","T"}, +{14530,"厚符文布绷带","T"}, +{19440,"特效抗毒药剂","V"}, +{8546,"强力嗅盐","D"}, +}, +["Jewelcrafting"]={ +{156,"精致的矮人项链","D"}, +{56112,"古代矮人宝石","D"}, +{55150,"劣质砂纸","A"}, +{55156,"劣质的铜戒指","A"}, +{55157,"铜手镯","A"}, +{55060,"辛德拉长老的高贵法杖","V"}, +{55158,"明亮的铜戒指","T"}, +{55159,"坚硬的铜戒指","T"}, +{55160,"镶饰的铜戒指","T"}, +{81092,"铜杖","T"}, +{55161,"硬化铜手镯","T"}, +{55162,"小型强固戒指","T"}, +{55163,"虎纹戒指","T"}, +{55165,"小珍珠法杖","T"}, +{55166,"琥珀指环","T"}, +{55167,"碧蓝戒指","T"}, +{81031,"亮铜项链","T"}, +{55168,"柔光戒指","T"}, +{55170,"缀玉戒指","T"}, +{55151,"粗糙砂纸","T"}, +{81032,"劣质的宝石串","T"}, +{55171,"奢华宝石项链","T"}, +{55172,"琥珀石吊坠","T"}, +{55173,"深海项链","T"}, +{55174,"粗糙青铜戒指","T"}, +{41308,"闪亮青铜戒指","T"}, +{41309,"琥珀宝珠","T"}, +{55175,"硬化青铜法杖","T"}, +{55176,"岩石戒指","T"}, +{41310,"青铜手镯","T"}, +{41311,"暗影石戒指","T"}, +{41313,"青铜权杖","T"}, +{41312,"午夜吊坠","T"}, +{41314,"玛瑙头冠","T"}, +{41315,"月光法杖","T"}, +{41316,"禁锢徽记","T"}, +{41318,"魔化手镯","T"}, +{41320,"粗糙的宝石串","T"}, +{41319,"劣质瑟银戒指","T"}, +{41325,"银质勋章","T"}, +{41329,"纯银戒指","T"}, +{41332,"粗糙的铁戒指","T"}, +{41331,"粗糙的金戒指","T"}, +{41323,"灰烬石镶嵌指环","T"}, +{41321,"劣质瑟银戒指","T"}, +{41324,"秘银黑石项链","?"}, +{55154,"致密砂纸","T"}, +{55256,"明亮瑟银微光","?"}, +{55269,"铭文圣典","?"}, +{55271,"织法者之杖","?"}, +{55268,"水银环","?"}, +{55273,"水晶护腕","?"}, +{55267,"缥缈的霜花皇冠","?"}, +{41330,"奥术光辉吊坠","?"}, +{55152,"厚重砂纸","T"}, +{41344,"厚重的宝石串","T"}, +{55144,"金焰水晶手镯","T"}, +{55142,"石英指环","T"}, +{55148,"绽放翡翠之杖","T"}, +{55143,"翡翠和谐指环","T"}, +{55145,"黄金石英头冠","T"}, +{55146,"黄金酒杯","T"}, +{55147,"强能黄水晶吊坠","T"}, +{41322,"劣质秘银戒指","T"}, +{55141,"烈日黄玉戒指","T"}, +{41340,"闪光的金项链","T"}, +{41342,"铁花戒指","T"}, +{41343,"华丽的秘银权杖","T"}, +{55153,"坚固砂纸","T"}, +{55164,"小型巨魔血戒","D"}, +{41341,"劣质真银戒指","T"}, +{55196,"青绿石坠饰","T"}, +{56020,"精致的宝石串","T"}, +{41346,"强效禁锢徽记","T"}, +{41345,"皇家宝石法杖","T"}, +{41349,"灰烬石神像","T"}, +{41347,"符文真银戒指","T"}, +{55169,"小型珍珠戒指","D"}, +{81093,"笨重的铜戒指","D"}, +{55258,"天蓝星火","V"}, +{55265,"翡翠帝王石","D"}, +{55259,"光辉蓝宝石戒指","D"}, +{55272,"奥秘之杖","D"}, +{55266,"旭日皇冠","D"}, +{56023,"深海的凝视","D"}, +{55260,"星形瑟银指环","?"}, +{56032,"毁灭红玉指环","D"}, +{56031,"镶嵌宝石之戒","D"}, +{56033,"纯金戒指","?"}, +{55199,"棱光护符","D"}, +{55202,"黄玉坠饰","D"}, +{55197,"星形护符","D"}, +{55200,"虚空之心咒符","D"}, +{55204,"符文护符","D"}, +{55195,"星界护符","?"}, +{56034,"闪亮月亮石板","D"}, +{56035,"雷云魔印","D"}, +{55264,"巨型宝石指环","?"}, +{56036,"黄金权杖","?"}, +{55243,"宝石商的魔棒","?"}, +{55261,"星形红玉戒指","?"}, +{55178,"星型宝石护腕","?"}, +{55241,"深红护卫法杖","?"}, +{55198,"月光咒符","?"}, +{55263,"微光白玉坠戒","?"}, +{56037,"闪光项链","D"}, +{56038,"石之护符","D"}, +{56039,"火焰勋章","D"}, +{56040,"闪光的银项链","D"}, +{56041,"乌龟戒指","D"}, +{56042,"宝石项圈","D"}, +{56043,"金色徽记护符","V"}, +{56044,"闪亮护腕","D"}, +{56045,"曙光护腕","D"}, +{56046,"抑制头环","D"}, +{55180,"水晶火焰护腕","D"}, +{55228,"灰烬堕落戒指","D"}, +{55242,"柔光照明法杖","D"}, +{55255,"天火宝石戒指","V"}, +{55244,"宝石纲要","D"}, +{56048,"闪亮青绿石戒指","Q"}, +{56049,"迷人的黄玉项链","Q"}, +{56050,"精致的金手镯","Q"}, +{56051,"海洋之心","Q"}, +{56052,"加列拉之杖","Q"}, +{56053,"金玉戒指","D"}, +{56054,"精致秘银护符","Q"}, +{56055,"德莱尼水晶魔棒","Q"}, +{55316,"乌木戒指","D"}, +{55317,"王之决断","D"}, +{55318,"暗影宝珠","D"}, +{55319,"海洋之怒","V"}, +{55320,"闪耀月亮石指环","D"}, +{55321,"翼爪戒指","D"}, +{55322,"半人马指环","D"}, +{55323,"食人魔白骨指环","D"}, +{81030,"孔雀石戒指","T"}, +{55325,"水手的陨落","D"}, +{55326,"蛇盘之杖","D"}, +{55327,"法拉基祭祀图腾","D"}, +{55328,"古代法老智慧之杖","D"}, +{55329,"暗草护腕","D"}, +{56047,"水晶耳环","Q"}, +{55324,"幽灵戒指","D"}, +{56002,"尖锐黄水晶","Q"}, +{56004,"明亮灰烬石","Q"}, +{56006,"炽热红宝石","Q"}, +{56003,"闪亮水玉","D"}, +{56015,"艾泽拉斯红玉","D"}, +{56012,"幽影墨玉","D"}, +{56013,"漆黑曜石","D"}, +{56016,"奥术翡翠","D"}, +{56017,"猝火艾泽拉斯钻石","D"}, +{56014,"惊艳帝王石","D"}, +{56018,"魔化翡翠","D"}, +{56058,"无暇月亮石","V"}, +{56010,"绚丽宝钻","D"}, +{56000,"原始水晶石","T"}, +{56001,"圆润翡翠","T"}, +{56005,"幻光宝玉","T"}, +{56056,"燃星宝石","T"}, +{56008,"闪耀白玉","T"}, +{56009,"优雅翡翠","?"}, +{56007,"辉煌蓝宝石","?"}, +{56011,"不稳定的奥术宝石","?"}, +{56057,"辉光蓝宝石","?"}, +{56059,"闪烁的钻戒","D"}, +{56060,"熔火升华之冠","D"}, +{56061,"灰烬宝石护腕","D"}, +{56062,"支配之龙印","D"}, +{56063,"守御护符","D"}, +{56064,"精致钻石宝冠","Q"}, +{56065,"白玉指环","?"}, +{56066,"蓝玉指环","D"}, +{56067,"黑铁徽记之戒","V"}, +{56068,"白玉手镯","D"}, +{56069,"高雅之冠","D"}, +{56070,"华丽秘银手镯","Q"}, +{56071,"皇家曙光权杖","Q"}, +{56072,"幻彩吊坠","D"}, +{56073,"封印雕饰","D"}, +{55330,"刺花护腕","D"}, +{55331,"黑石铁夹","D"}, +{55332,"修道院灰烬护腕","D"}, +{55333,"影月宝珠","D"}, +{55334,"牙爪圣物","D"}, +{55335,"地狱灾祸手杖","D"}, +{55336,"海洋之根","D"}, +{55337,"雾林头冠","D"}, +{55338,"猛毒尖冠","?"}, +{55339,"血火头饰","?"}, +{55340,"影铸之眼","D"}, +{55341,"守护图腾","?"}, +{55210,"泛光月亮石胸针","D"}, +{55211,"黑曜石胸针","D"}, +{55212,"烟熏胸针","D"}, +{55213,"天青石胸针","D"}, +{56074,"璀璨玛瑙","D"}, +{56075,"深沉白玉","D"}, +{56077,"苏生黄玉","D"}, +{56076,"柔韧奥术石","D"}, +{56019,"致密的宝石串","T"}, +{56090,"织法者坠饰","D"}, +{56091,"午夜之戒","D"}, +{56092,"雷云护腕","T"}, +{56093,"雷云徽记","D"}, +{56094,"黄金符文戒指","D"}, +{56095,"魔法禁锢徽记","D"}, +{56089,"精致秘银头冠","D"}, +{55359,"光芒之怒指环","D"}, +{55360,"激发潜能之戒","D"}, +{55361,"支配之权杖","D"}, +{55362,"预视之眼","V"}, +{55363,"忘却的圣杯","D"}, +{55364,"破碎守护者的护符","D"}, +{55365,"粗野的聚焦手杖","D"}, +{55366,"魔导力量之杖","D"}, +{55367,"光亮护腕","D"}, +{55368,"辉煌女王的皇冠","D"}, +{56096,"精制钻石手镯","Q"}, +{61818,"华丽山地宝石","D"}, +}, +["Leatherworking"]={ +{2302,"手工皮靴","A"}, +{2304,"轻型护甲片","A"}, +{2303,"手工皮短裤","T"}, +{2307,"优质皮靴","D"}, +{2308,"优质皮披风","T"}, +{2300,"雕花皮外衣","T"}, +{2309,"雕花皮靴","T"}, +{2310,"雕花皮质披风","T"}, +{2311,"白色皮夹克","D"}, +{2312,"优质皮手套","D"}, +{2313,"中型护甲片","T"}, +{2314,"韧化皮甲","T"}, +{2315,"黑皮战靴","T"}, +{2316,"黑皮披风","T"}, +{2317,"黑皮外套","D"}, +{2318,"轻皮","A"}, +{4237,"手工皮带","T"}, +{4239,"雕花皮手套","T"}, +{4242,"雕花皮短裤","T"}, +{3719,"山地披风","T"}, +{4243,"优质皮外套","T"}, +{4244,"山地皮外衣","D"}, +{4246,"优质皮带","T"}, +{4247,"山地皮手套","T"}, +{4248,"黑皮手套","D"}, +{4249,"黑皮腰带","T"}, +{4250,"山地腰带","D"}, +{4251,"山地护肩","T"}, +{4252,"黑皮护肩","D"}, +{4253,"韧化皮手套","T"}, +{4254,"野人手套","D"}, +{4255,"绿色皮甲","V"}, +{4256,"守护之甲","D"}, +{4257,"绿色皮带","T"}, +{4258,"守护腰带","D"}, +{4259,"绿色皮护腕","T"}, +{4260,"守护腕甲","D"}, +{4262,"宝石皮带","V"}, +{4264,"野人腰带","D"}, +{4265,"重型护甲片","T"}, +{4231,"熟化轻毛皮","T"}, +{4233,"熟化中毛皮","T"}, +{4236,"熟化重毛皮","T"}, +{4455,"迅猛龙皮背心","V"}, +{4456,"迅猛龙皮腰带","V"}, +{5081,"科多兽皮包","Q"}, +{5739,"野人背心","T"}, +{5780,"鱼人鳞片腰带","D"}, +{5781,"鱼人鳞片胸甲","D"}, +{5782,"厚鱼人皮甲","D"}, +{5783,"鱼人鳞片护腕","D"}, +{5957,"手工皮外衣","A"}, +{5958,"优质皮裤","D"}, +{5961,"黑皮短裤","T"}, +{5962,"守护短裤","T"}, +{5963,"野人护腿","V"}, +{5964,"野人护肩","T"}, +{5965,"守护披风","D"}, +{5966,"守护手套","T"}, +{6466,"蛇鳞披风","V"}, +{6467,"蛇鳞手套","V"}, +{6468,"蛇鳞腰带","Q"}, +{6709,"月光外衣","Q"}, +{7276,"手工皮披风","A"}, +{7277,"手工皮护腕","A"}, +{7278,"轻皮箭袋","T"}, +{7279,"皮质小弹药包","T"}, +{7280,"皱褶皮短裤","D"}, +{7281,"轻皮护腕","T"}, +{7282,"轻皮短裤","T"}, +{7283,"黑色雏龙披风","V"}, +{7284,"红色雏龙手套","V"}, +{7285,"轻巧的皮手套","T"}, +{7348,"造弓师手套","T"}, +{7349,"采药人手套","V"}, +{7352,"土灵皮护肩","V"}, +{7358,"窃贼手套","D"}, +{7359,"重型土灵手套","D"}, +{7371,"重型箭袋","T"}, +{7372,"重皮弹药包","T"}, +{7373,"暗色皮护腿","D"}, +{7374,"暗色皮甲","T"}, +{7375,"绿色幼龙护甲","D"}, +{7377,"冰霜皮质披风","T"}, +{7378,"暗色护腕","T"}, +{7386,"绿色幼龙护腕","V"}, +{7387,"暗色皮带","T"}, +{7390,"暗色长靴","D"}, +{7391,"迅捷之靴","D"}, +{8172,"熟化厚毛皮","T"}, +{8173,"厚重护甲片","T"}, +{8174,"舒适的皮帽","D"}, +{8175,"夜色外套","T"}, +{8176,"夜色头带","T"}, +{8187,"龟壳手套","D"}, +{8189,"龟壳胸甲","T"}, +{8192,"夜色护肩","V"}, +{8198,"龟壳护腕","T"}, +{8200,"巫毒长袍","D"}, +{8203,"硬化蝎壳胸甲","D"}, +{8210,"蛮皮护肩","Q"}, +{8201,"巫毒面具","D"}, +{8205,"硬化蝎壳护腕","D"}, +{8204,"硬化蝎壳手套","D"}, +{8211,"蛮皮外衣","Q"}, +{8214,"蛮皮头盔","Q"}, +{8193,"夜色短裤","T"}, +{8191,"龟壳头盔","T"}, +{8209,"硬化蝎壳战靴","D"}, +{8185,"龟壳护腿","T"}, +{8197,"夜色长靴","T"}, +{8202,"巫毒短裤","D"}, +{8216,"巫毒披风","D"}, +{8207,"硬化蝎壳护肩","D"}, +{8213,"蛮皮战靴","Q"}, +{8206,"硬化蝎壳护腿","D"}, +{8208,"硬化蝎壳头盔","D"}, +{8212,"蛮皮护腿","Q"}, +{8215,"蛮皮披风","Q"}, +{8347,"龙鳞护手","T"}, +{8345,"狼头之盔","T"}, +{8346,"深海护手","T"}, +{8348,"火焰头盔","T"}, +{8349,"羽饰胸甲","T"}, +{8367,"龙鳞胸甲","T"}, +{8217,"快捷箭袋","T"}, +{8218,"厚皮弹药包","T"}, +{15407,"熟化毛皮","T"}, +{15077,"重型蝎壳护腕","V"}, +{15083,"邪恶皮甲护手","V"}, +{15045,"绿龙鳞片胸甲","V"}, +{15076,"重型蝎壳外衣","D"}, +{15084,"邪恶皮甲护腕","D"}, +{15074,"奇美拉手套","V"}, +{15047,"红龙鳞片胸甲","D"}, +{15091,"符文皮甲护手","D"}, +{15564,"毛皮护甲片","T"}, +{15054,"火山护腿","D"}, +{15046,"绿龙鳞片护腿","D"}, +{15061,"生命护肩","V"}, +{15067,"铁羽护肩","V"}, +{15073,"奇美拉长靴","D"}, +{15078,"重型蝎壳护手","D"}, +{15092,"符文皮甲护腕","D"}, +{15071,"霜刃长靴","V"}, +{15057,"雷暴短裤","V"}, +{15064,"战熊背心","D"}, +{15082,"重型蝎壳腰带","D"}, +{15086,"邪恶皮甲头环","D"}, +{15093,"符文皮甲腰带","D"}, +{15072,"奇美拉护腿","D"}, +{15069,"霜刃护腿","D"}, +{15079,"重型蝎壳护腿","D"}, +{15053,"火山胸甲","D"}, +{15048,"蓝龙鳞片胸甲","V"}, +{15060,"生命护腿","D"}, +{15056,"雷暴","D"}, +{15065,"战熊热裤","D"}, +{15075,"奇美拉外衣","D"}, +{15094,"符文皮甲头环","V"}, +{15087,"邪恶皮甲短裤","D"}, +{15063,"魔暴龙皮手套","V"}, +{15050,"黑色龙鳞胸甲","V"}, +{15066,"铁羽胸甲","D"}, +{15070,"霜刃手套","D"}, +{15080,"重型蝎壳头盔","V"}, +{15049,"蓝龙鳞片护肩","D"}, +{15058,"雷暴护肩","D"}, +{15095,"符文皮甲短裤","D"}, +{15088,"邪恶皮甲腰带","D"}, +{15138,"奥妮克希亚鳞片披风","Q"}, +{15051,"黑色龙鳞护肩","D"}, +{15059,"生命胸甲","D"}, +{15062,"魔暴龙皮护腿","D"}, +{15085,"邪恶皮甲","D"}, +{15081,"重型蝎壳护肩","D"}, +{15055,"火山护肩","D"}, +{15090,"符文皮甲","D"}, +{15096,"符文皮甲护肩","D"}, +{15068,"霜刃外套","D"}, +{15052,"黑色龙鳞护腿","D"}, +{2319,"中皮","T"}, +{4234,"重皮","T"}, +{4304,"厚皮","T"}, +{16982,"熔岩犬皮靴","V"}, +{16983,"熔铸头盔","V"}, +{16984,"黑色龙鳞战靴","V"}, +{17721,"冬天爷爷的手套","D"}, +{8170,"硬甲皮","T"}, +{18238,"影皮手套","V"}, +{18251,"熔火护甲片","D"}, +{18258,"戈多克食人魔装","Q"}, +{18504,"洞察束带","D"}, +{18506,"猫鼬长靴","D"}, +{18508,"迅行护腕","D"}, +{18509,"多彩披风","D"}, +{18510,"野性之皮","D"}, +{18511,"移形披风","D"}, +{18662,"重皮球","V"}, +{18948,"野人护腕","V"}, +{19044,"木喉之力","V"}, +{19049,"木喉作战手套","V"}, +{19052,"黎明皮靴","V"}, +{19058,"金色黎明衬肩","V"}, +{19149,"熔岩腰带","V"}, +{19157,"多彩护手","V"}, +{19162,"熔火犬皮腰带","V"}, +{19163,"熔火腰带","V"}, +{19685,"原始蝙蝠皮外套","V"}, +{19686,"原始蝙蝠皮手套","V"}, +{19687,"原始蝙蝠皮护腕","V"}, +{19688,"血虎胸甲","V"}, +{19689,"血虎护肩","V"}, +{20295,"蓝龙鳞片护腿","T"}, +{20296,"绿色龙鳞护手","T"}, +{20380,"梦幻龙鳞胸甲","V"}, +{20481,"飞火护腕","V"}, +{20480,"飞火护手","V"}, +{20479,"飞火胸甲","V"}, +{20476,"沙行者护腕","V"}, +{20477,"沙行者护手","V"}, +{20478,"沙行者胸甲","V"}, +{20575,"黑色雏龙外衣","V"}, +{21278,"雷暴手套","D"}, +{22661,"北极外套","T"}, +{22662,"北极手套","T"}, +{22663,"北极护腕","T"}, +{22664,"寒鳞胸甲","T"}, +{22666,"寒鳞护手","T"}, +{22665,"寒鳞护腕","T"}, +{22759,"荆木头盔","V"}, +{22760,"荆木长靴","V"}, +{22761,"荆木腰带","V"}, +{55043,"崇高领主甲胄","V"}, +{65,"龙喉护甲片","D"}, +{58112,"龙喉手套","D"}, +{8195,"夜色披风","V"}, +{15141,"奥妮克希亚鳞片胸甲","?"}, +{55050,"灌注精华手套","V"}, +{55054,"棱光鳞甲头盔","V"}, +{51284,"山猫步靴","D"}, +{61229,"梦境皮革","Q"}, +{61356,"梦境皮革披肩","D"}, +{61357,"梦境皮革护腕","Q"}, +{61358,"梦境皮革护腿","Q"}, +{61359,"梦境皮革腰带","Q"}, +{61188,"魔符雕刻护腕","D"}, +{83405,"骗子靴子","T"}, +{83404,"骗子手套","T"}, +{83403,"骗子腰带","T"}, +{83402,"骗子护腿","T"}, +{83401,"骗子外衣","T"}, +{83400,"骗子兜帽","T"}, +{65000,"红龙鳞片护腿","V"}, +{65001,"红龙鳞片护肩","D"}, +{65002,"红龙鳞片长靴","T"}, +{65006,"风暴鳞片护腿","D"}, +{65009,"暗影皮靴","D"}, +{65019,"龙鳞护腿","D"}, +{81061,"首领手套","T"}, +{81062,"首领护肩","T"}, +{81063,"首领头饰","T"}, +{81064,"首领短裤","T"}, +{81066,"首领马甲","T"}, +{81065,"首领长靴","T"}, +{65021,"翡翠梦境者护胸","V"}, +{65015,"蓝色龙鳞长靴","D"}, +{65038,"熔火猎犬手套","V"}, +{65036,"多彩护腿","V"}, +{65037,"熔岩护腿","V"}, +{65022,"大地胸甲","D"}, +{65023,"风之靴","D"}, +{65024,"大地卫士外套","D"}, +{65025,"火怒护腿","D"}, +{65026,"深渊猎手头盔","D"}, +{65027,"风行者之靴","D"}, +{60910,"半人马战甲","V"}, +{61183,"魔化护甲片","Q"}, +{55522,"虚灵头饰","Q"}, +{55523,"虚灵护肩","Q"}, +{55524,"虚灵外套","Q"}, +{55525,"虚灵护腿","Q"}, +}, +["Mining"]={ +{2840,"熔炼铜锭","A"}, +{2842,"熔炼银锭","T"}, +{2841,"熔炼青铜","T"}, +{3576,"熔炼锡锭","T"}, +{3575,"熔炼铁锭","T"}, +{3577,"熔炼金锭","V"}, +{3859,"熔炼钢锭","T"}, +{3860,"熔炼秘银","T"}, +{6037,"熔炼真银","V"}, +{11371,"熔炼黑铁","Q"}, +{12359,"熔炼瑟银","T"}, +{17771,"熔炼源质","T"}, +{61216,"熔炼梦境钢锭","Q"}, +}, +["Poisons"]={ +{2892,"致命毒药","T"}, +{2893,"致命毒药 II","T"}, +{3775,"致残毒药","T"}, +{3776,"致残毒药 II","T"}, +{5237,"麻痹毒药","T"}, +{5530,"致盲粉","T"}, +{6947,"速效毒药","A"}, +{6949,"速效毒药 II","T"}, +{6950,"速效毒药 III","T"}, +{6951,"麻痹毒药 II","T"}, +{8926,"速效毒药 IV","T"}, +{8927,"速效毒药 V","T"}, +{8928,"速效毒药 VI","T"}, +{8984,"致命毒药 III","T"}, +{8985,"致命毒药 IV","T"}, +{9186,"麻痹毒药 III","T"}, +{10918,"致伤毒药","T"}, +{10920,"致伤毒药 II","T"}, +{10921,"致伤毒药 III","T"}, +{10922,"致伤毒药 IV","T"}, +{20844,"致命毒药 V","D"}, +{65032,"煽动毒药I","T"}, +{54009,"溶解毒药","T"}, +{54010,"溶解毒药 II","T"}, +{47408,"腐蚀毒药","T"}, +{47409,"腐蚀毒药 II","D"}, +}, +["Tailoring"]={ +{2568,"棕色亚麻外衣","T"}, +{2569,"亚麻靴","T"}, +{2570,"亚麻披风","A"}, +{2572,"红色亚麻长袍","D"}, +{2575,"红色亚麻衬衣","T"}, +{2576,"白色亚麻衬衣","T"}, +{2577,"蓝色亚麻衬衣","T"}, +{2578,"野人亚麻外衣","T"}, +{2579,"绿色亚麻衬衣","T"}, +{2580,"强化亚麻斗篷","T"}, +{2582,"绿色毛纺外衣","T"}, +{2583,"毛纺靴","T"}, +{2584,"毛纺斗篷","T"}, +{2585,"灰色毛纺长袍","D"}, +{2587,"灰色毛纺衬衣","T"}, +{2996,"亚麻布卷","A"}, +{2997,"毛布卷","T"}, +{4238,"亚麻包","T"}, +{4240,"毛纺包","T"}, +{4241,"绿色毛纺包","D"}, +{4245,"丝绸小包","T"}, +{4305,"丝绸卷","T"}, +{4307,"高级亚麻手套","T"}, +{4308,"绿色亚麻护腕","T"}, +{4309,"手工亚麻裤","T"}, +{4310,"高级毛纺手套","T"}, +{4311,"高级毛纺披风","D"}, +{4312,"软底亚麻靴","T"}, +{4313,"红色毛纺靴","D"}, +{4314,"双线毛纺护肩","T"}, +{4315,"强化毛纺护肩","D"}, +{4316,"高级毛纺短裤","T"}, +{4317,"凤凰短裤","D"}, +{4318,"冥想手套","T"}, +{4319,"碧蓝丝质手套","V"}, +{4320,"蛛丝之靴","T"}, +{4321,"蛛丝便鞋","D"}, +{4322,"巫术师兜帽","V"}, +{4323,"暗影头巾","D"}, +{4324,"碧蓝丝质外衣","T"}, +{4325,"附魔师长靴","D"}, +{4326,"丝质长披风","T"}, +{4327,"冰覆披风","V"}, +{4328,"蜘蛛腰带","D"}, +{4329,"星辰腰带","D"}, +{4339,"魔纹布卷","T"}, +{4330,"漂亮的红衬衣","T"}, +{4331,"凤凰手套","D"}, +{4332,"淡黄色衬衣","V"}, +{4333,"黑丝衬衣","V"}, +{4334,"体面的白衬衣","T"}, +{4335,"紫色丝质衬衣","D"}, +{4336,"黑色冒险者衬衣","V"}, +{4343,"棕色亚麻短裤","T"}, +{4344,"棕色亚麻衬衣","A"}, +{5542,"珍珠披风","T"}, +{5762,"红色亚麻包","D"}, +{5763,"红色毛纺包","D"}, +{5766,"次级巫师袍","T"}, +{5770,"奥法之袍","D"}, +{5764,"绿色丝质包","D"}, +{5765,"黑色丝质背包","D"}, +{6238,"棕色亚麻长袍","T"}, +{6241,"白色亚麻长袍","T"}, +{6239,"红色亚麻外衣","D"}, +{6240,"蓝色亚麻外衣","V"}, +{6242,"蓝色亚麻长袍","V"}, +{6263,"蓝色罩衫","V"}, +{6264,"大师长袍","V"}, +{6384,"漂亮的蓝衬衣","D"}, +{6385,"漂亮的绿衬衣","D"}, +{6786,"简易的裙子","T"}, +{6787,"白色毛绒裙","T"}, +{6795,"白色冒险者衬衣","T"}, +{6796,"红色冒险者衬衣","T"}, +{7046,"碧蓝丝质短裤","T"}, +{7048,"碧蓝丝质头巾","T"}, +{7050,"丝质头带","T"}, +{7051,"土灵外衣","T"}, +{7052,"碧蓝丝质腰带","T"}, +{7054,"力量法袍","T"}, +{7055,"深红丝质腰带","T"}, +{7057,"绿色丝质护肩","T"}, +{7026,"亚麻腰带","T"}, +{7047,"黑暗之手","D"}, +{7049,"信念手套","D"}, +{7065,"绿色丝甲","D"}, +{7053,"碧蓝丝质披风","V"}, +{7056,"深红丝质披风","V"}, +{7058,"深红丝质外衣","T"}, +{7059,"深红丝质护肩","D"}, +{7060,"碧蓝护肩","D"}, +{7061,"土灵丝质腰带","D"}, +{7062,"深红丝质马裤","T"}, +{7063,"深红丝质长袍","V"}, +{7064,"深红丝质手套","T"}, +{10045,"简易亚麻短裤","A"}, +{10046,"简易的亚麻靴","T"}, +{10047,"简易的褶裙","T"}, +{10048,"多彩褶裙","D"}, +{9998,"黑色魔纹外衣","T"}, +{9999,"黑色魔纹短裤","T"}, +{10001,"黑色魔纹长袍","T"}, +{10002,"暗纹短裤","T"}, +{10003,"黑色魔纹手套","T"}, +{10004,"暗纹长袍","T"}, +{10007,"红色魔纹外衣","D"}, +{10008,"白色强盗面罩","D"}, +{10009,"红色魔纹短裤","D"}, +{10056,"橙色魔纹衬衣","T"}, +{10052,"橙色军用衬衣","V"}, +{10050,"魔纹包","T"}, +{10018,"红色魔纹手套","D"}, +{10019,"梦纹手套","T"}, +{10042,"灰布长袍","T"}, +{10021,"梦纹外衣","T"}, +{10023,"暗纹手套","T"}, +{10024,"黑色魔纹头带","T"}, +{10026,"黑色魔纹之靴","T"}, +{10027,"黑色魔纹护肩","T"}, +{10054,"紫色魔纹衬衣","V"}, +{10028,"暗纹护肩","T"}, +{10053,"简易的黑裙子","T"}, +{10029,"红色魔纹护肩","D"}, +{10051,"红色魔纹包","T"}, +{10055,"粉色魔纹衬衣","V"}, +{10030,"将军之帽","V"}, +{10031,"暗纹之靴","T"}, +{10033,"红色魔纹头带","D"}, +{10034,"礼服衬衣","V"}, +{10025,"暗纹面罩","Q"}, +{10044,"灰布长靴","T"}, +{10035,"礼服短裤","V"}, +{10040,"白色婚纱","V"}, +{10041,"梦纹头饰","T"}, +{10036,"礼服夹克","V"}, +{14048,"符文布卷","T"}, +{13856,"符文布腰带","T"}, +{13869,"霜纹外套","D"}, +{13868,"霜纹长袍","D"}, +{14046,"符文布背包","V"}, +{13858,"符文布袍","V"}, +{13857,"符文布外套","D"}, +{14042,"灰布外衣","D"}, +{13860,"符文布披风","V"}, +{14143,"鬼纹腰带","D"}, +{13870,"霜纹手套","D"}, +{14043,"灰布手套","D"}, +{14142,"鬼纹手套","D"}, +{14100,"亮布长袍","D"}, +{14101,"亮布手套","D"}, +{14141,"鬼纹外衣","D"}, +{13863,"符文布手套","V"}, +{14044,"灰布披风","D"}, +{14107,"恶魔布短裤","V"}, +{14103,"亮布披风","D"}, +{14132,"巫纹护腿","D"}, +{14134,"火焰披风","D"}, +{13864,"符文布靴","V"}, +{13871,"霜纹短裤","D"}, +{14045,"灰布短裤","D"}, +{14136,"冬夜法袍","D"}, +{14108,"恶魔布靴","D"}, +{13865,"符文布短裤","D"}, +{14104,"亮布短裤","D"}, +{14137,"月布护腿","D"}, +{14144,"鬼纹短裤","D"}, +{14111,"恶魔布帽","D"}, +{13866,"符文布头带","D"}, +{14155,"月布包","D"}, +{14128,"巫纹长袍","D"}, +{14138,"月布外衣","D"}, +{14139,"月布护肩","D"}, +{13867,"符文布护肩","D"}, +{14130,"巫纹头巾","D"}, +{14106,"恶魔布袍","D"}, +{14140,"月布头饰","D"}, +{14112,"恶魔布护肩","D"}, +{14146,"法术掌握手套","D"}, +{14156,"无底包","D"}, +{14154,"信念外衣","D"}, +{14152,"大法师之袍","D"}, +{14153,"虚空法袍","D"}, +{14342,"月布","V"}, +{15802,"月布长靴","Q"}, +{16980,"光芒衬肩","V"}, +{16979,"光芒手套","V"}, +{17723,"绿色节日衬衣","Q"}, +{18263,"光芒护腕","D"}, +{18258,"戈多克食人魔装","Q"}, +{18405,"大法师腰带","D"}, +{18407,"恶魔布手套","D"}, +{18408,"地狱火手套","D"}, +{18409,"月布手套","D"}, +{18413,"护卫披风","D"}, +{18486,"月布长袍","V"}, +{19047,"木喉之智","V"}, +{19050,"木喉衬肩","V"}, +{19056,"银色长靴","V"}, +{19059,"银色护肩","V"}, +{19156,"光芒长袍","V"}, +{19165,"光芒护腿","V"}, +{19682,"血藤外套","V"}, +{19683,"血藤护腿","V"}, +{19684,"血藤长靴","V"}, +{20538,"符文冥河护腿","D"}, +{20539,"符文冥河腰带","Q"}, +{20537,"符文冥河长靴","Q"}, +{21340,"灵魂袋","V"}, +{21341,"恶魔布包","O"}, +{21342,"熔火恶魔布包","D"}, +{21154,"红色节庆长裙","Q"}, +{21542,"红色节庆裤装","Q"}, +{22246,"魔化魔纹布包","V"}, +{22248,"魔化符文布包","V"}, +{22249,"大附魔袋","D"}, +{22251,"塞纳里奥草药包","V"}, +{22252,"塞纳留斯之袋","V"}, +{22654,"冰川手套","T"}, +{22652,"冰川外衣","T"}, +{22658,"冰川披风","T"}, +{22655,"冰川护腕","T"}, +{22660,"盖亚的拥抱","V"}, +{22756,"林栖者外衣","V"}, +{22757,"林栖者头冠","V"}, +{22758,"林栖者护肩","V"}, +{58134,"图样:暴掠手套","D"}, +{6243,"绿色毛纺长袍","V"}, +{7027,"黑暗之靴","V"}, +{10010,"雷织短裤","D"}, +{10011,"雷织手套","D"}, +{10020,"雷织外衣","D"}, +{10032,"雷织头带","D"}, +{10038,"雷织护肩","D"}, +{10039,"雷织长靴","D"}, +{55052,"观星者法袍","V"}, +{55056,"贵族编织斗篷","V"}, +{51256,"渴魔手套","D"}, +{61230,"梦境丝线","Q"}, +{61360,"梦境丝线披肩","D"}, +{61361,"梦境丝线裙裤","Q"}, +{61362,"梦境丝线护腕","Q"}, +{61363,"梦境丝线手套","Q"}, +{61186,"解谜手套","D"}, +{83280,"占卜者裤子","T"}, +{83281,"占卜者长袍","T"}, +{83282,"占卜者兜帽","T"}, +{83283,"占卜者鞋子","T"}, +{83284,"占卜者手套","T"}, +{83285,"占卜者护肩","T"}, +{83286,"预言家帽子","T"}, +{83287,"预言家长袍","T"}, +{83291,"预言家裤子","T"}, +{83290,"预言家护肩","T"}, +{83289,"预言家手套","T"}, +{83288,"预言家靴子","T"}, +{83292,"掠夺者兜帽","T"}, +{83293,"掠夺者披肩","T"}, +{83294,"掠夺者长袍","T"}, +{83295,"掠夺者手套","T"}, +{83296,"掠夺者鞋子","T"}, +{83297,"掠夺者裤子","T"}, +{65003,"牺牲长袍","D"}, +{65035,"烈焰核心靴子","V"}, +{60909,"导尘者腰带","V"}, +{60907,"缚风者手套","V"}, +{55518,"宇宙头饰","Q"}, +{55519,"宇宙衬肩","Q"}, +{55520,"宇宙外衣","Q"}, +{55521,"宇宙护腿","Q"}, +{55534,"魔网亲和披风","Q"}, +}, +} +end diff --git a/TradeSkillUI.lua b/TradeSkillUI.lua new file mode 100644 index 0000000..be4fa8b --- /dev/null +++ b/TradeSkillUI.lua @@ -0,0 +1,2130 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: TradeSkill / Craft UI (TradeSkillUI.lua) +-- Replaces TradeSkillFrame and CraftFrame with Nanami-UI styled interface +-- NOTE: Lua 5.0 upvalue limit = 32 per closure; all state packed into tables. +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.TradeSkillUI = {} +local TSUI = SFrames.TradeSkillUI +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme (Pink Cat-Paw) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + reagentOk = { 0.60, 0.90, 0.60 }, + reagentLack = { 0.90, 0.30, 0.30 }, + DIFFICULTY = { + optimal = { 1.00, 0.50, 0.25 }, + medium = { 1.00, 1.00, 0.00 }, + easy = { 0.25, 0.75, 0.25 }, + trivial = { 0.50, 0.50, 0.50 }, + difficult = { 1.00, 0.50, 0.25 }, + }, + QUALITY = { + [0] = { 0.62, 0.62, 0.62 }, + [1] = { 1.00, 1.00, 1.00 }, + [2] = { 0.12, 1.00, 0.00 }, + [3] = { 0.00, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, + [5] = { 1.00, 0.50, 0.00 }, + }, +}) +T.DIFFICULTY.header = { T.catHeader[1], T.catHeader[2], T.catHeader[3] } + +-------------------------------------------------------------------------------- +-- Layout (packed into table to save upvalues) +-------------------------------------------------------------------------------- +local L = { + FRAME_W = 700, FRAME_H = 500, + HEADER_H = 46, SIDE_PAD = 10, + FILTER_H = 50, LIST_ROW_H = 26, + CAT_ROW_H = 20, BOTTOM_H = 40, + SCROLL_STEP = 40, SCROLLBAR_W = 12, + MAX_ROWS = 80, MAX_REAGENTS = 8, + LEFT_W = 304, +} +L.RIGHT_W = L.FRAME_W - L.LEFT_W +L.CONTENT_W = L.RIGHT_W - L.SIDE_PAD * 2 +L.LIST_ROW_W = L.LEFT_W - L.SIDE_PAD * 2 - L.SCROLLBAR_W - 4 + +-------------------------------------------------------------------------------- +-- State (packed into table to save upvalues) +-------------------------------------------------------------------------------- +local S = { + MainFrame = nil, + selectedIndex = nil, + currentFilter = "all", + searchText = "", + displayList = {}, + rowButtons = {}, + collapsedCats = {}, + craftAmount = 1, + currentMode = "tradeskill", + reagentSlots = {}, + profTabs = {}, + profList = {}, + switchStartTime = nil, +} + +-- Professions that can open a crafting window (spell name -> true) +local PROF_SPELLS = { + ["附魔"]=true,["Enchanting"]=true, + ["裁缝"]=true,["裁缝术"]=true,["Tailoring"]=true, + ["皮革加工"]=true,["皮革制作"]=true,["制皮"]=true,["Leatherworking"]=true, + ["锻造"]=true,["锻造术"]=true,["Blacksmithing"]=true, + ["工程学"]=true,["Engineering"]=true, + ["炼金术"]=true,["炼金"]=true,["Alchemy"]=true, + ["珠宝加工"]=true,["Jewelcrafting"]=true, + ["烹饪"]=true,["Cooking"]=true, + ["急救"]=true,["First Aid"]=true, + ["熔炼"]=true,["Smelting"]=true, + ["毒药"]=true,["Poisons"]=true, + ["训练野兽"]=true,["Beast Training"]=true, +} + +-------------------------------------------------------------------------------- +-- Mode Abstraction Layer (packed into table) +-------------------------------------------------------------------------------- +local API = {} + +function API.GetNumRecipes() + if S.currentMode == "craft" then + return GetNumCrafts and GetNumCrafts() or 0 + end + return GetNumTradeSkills and GetNumTradeSkills() or 0 +end + +function API.GetRecipeInfo(i) + if S.currentMode == "craft" then + if not GetCraftInfo then return nil end + local name, rank, skillType = GetCraftInfo(i) + return name, skillType, 0, false + end + if not GetTradeSkillInfo then return nil end + local name, skillType, numAvail, isExpanded = GetTradeSkillInfo(i) + return name, skillType, numAvail or 0, isExpanded +end + +function API.GetRecipeIcon(i) + if S.currentMode == "craft" then + return GetCraftIcon and GetCraftIcon(i) + end + return GetTradeSkillIcon and GetTradeSkillIcon(i) +end + +function API.GetSkillLineName() + if S.currentMode == "craft" then + if GetCraftDisplaySkillLine then + local name, cur, mx = GetCraftDisplaySkillLine() + if name and name ~= "" then + return name, cur, mx + end + end + local n = GetCraftName and GetCraftName() or "" + return n, 0, 0 + end + if GetTradeSkillLine then + local name, cur, mx = GetTradeSkillLine() + return name or "", cur or 0, mx or 0 + end + return "", 0, 0 +end + +function API.GetNumReagents(i) + if S.currentMode == "craft" then + return GetCraftNumReagents and GetCraftNumReagents(i) or 0 + end + return GetTradeSkillNumReagents and GetTradeSkillNumReagents(i) or 0 +end + +function API.GetReagentInfo(i, j) + if S.currentMode == "craft" then + if not GetCraftReagentInfo then return nil, nil, 0, 0 end + local name, tex, count, playerCount = GetCraftReagentInfo(i, j) + return name, tex, count or 0, playerCount or 0 + end + if not GetTradeSkillReagentInfo then return nil, nil, 0, 0 end + local name, tex, count, playerCount = GetTradeSkillReagentInfo(i, j) + return name, tex, count or 0, playerCount or 0 +end + +function API.DoRecipe(i, num) + if S.currentMode == "craft" then + if DoCraft then DoCraft(i) end + else + if DoTradeSkill then DoTradeSkill(i, num or 1) end + end +end + +function API.CloseRecipe() + if S.currentMode == "craft" then + if CloseCraft then pcall(CloseCraft) end + else + if CloseTradeSkill then pcall(CloseTradeSkill) end + end +end + +function API.SelectRecipe(i) + if S.currentMode == "craft" then + if SelectCraft then pcall(SelectCraft, i) end + else + if SelectTradeSkill then pcall(SelectTradeSkill, i) end + end +end + +function API.GetCooldown(i) + if S.currentMode == "craft" then return nil end + if not GetTradeSkillCooldown then return nil end + local ok, cd = pcall(GetTradeSkillCooldown, i) + if ok then return cd end + return nil +end + +function API.GetDescription(i) + if S.currentMode == "craft" then + if GetCraftDescription then + local ok, desc = pcall(GetCraftDescription, i) + if ok and desc then return desc end + end + end + return "" +end + +function API.GetNumMade(i) + if S.currentMode == "craft" then return 1, 1 end + if not GetTradeSkillNumMade then return 1, 1 end + local ok, lo, hi = pcall(GetTradeSkillNumMade, i) + if ok then return lo or 1, hi or 1 end + return 1, 1 +end + +function API.GetItemLink(i) + if S.currentMode == "craft" then + if GetCraftItemLink then + local ok, l = pcall(GetCraftItemLink, i); if ok then return l end + end + else + if GetTradeSkillItemLink then + local ok, l = pcall(GetTradeSkillItemLink, i); if ok then return l end + end + end + return nil +end + +function API.GetReagentItemLink(i, j) + if S.currentMode == "craft" then + if GetCraftReagentItemLink then + local ok, l = pcall(GetCraftReagentItemLink, i, j); if ok then return l end + end + else + if GetTradeSkillReagentItemLink then + local ok, l = pcall(GetTradeSkillReagentItemLink, i, j); if ok then return l end + end + end + return nil +end + +function API.GetItemQuality(i) + local link = API.GetItemLink(i) + if not link then return nil end + local _, _, colorHex = string.find(link, "|c(%x+)|") + if not colorHex then return nil end + local qualityMap = { + ["ff9d9d9d"] = 0, ["ffffffff"] = 1, + ["ff1eff00"] = 2, ["ff0070dd"] = 3, + ["ffa335ee"] = 4, ["ffff8000"] = 5, + } + return qualityMap[colorHex] +end + +function API.GetTools(i) + if S.currentMode == "craft" then + if GetCraftSpellFocus then + local ok, focus = pcall(GetCraftSpellFocus, i) + if ok and focus then return focus end + end + return nil + end + if not GetTradeSkillTools then return nil end + local ok, r1, r2, r3, r4, r5, r6, r7, r8, r9 = pcall(GetTradeSkillTools, i) + if not ok or not r1 then return nil end + -- GetTradeSkillTools may return two formats: + -- Standard: desc, tool1, has1, tool2, has2, ... + -- Alt (some servers): tool1, has1, tool2, has2, ... + -- Detect: if r2 is a string → standard (r1=desc); otherwise alt (r1=tool1) + local toolPairs = {} + if type(r2) == "string" then + if type(r2) == "string" then table.insert(toolPairs, {r2, r3}) end + if type(r4) == "string" then table.insert(toolPairs, {r4, r5}) end + if type(r6) == "string" then table.insert(toolPairs, {r6, r7}) end + if type(r8) == "string" then table.insert(toolPairs, {r8, r9}) end + else + if type(r1) == "string" then table.insert(toolPairs, {r1, r2}) end + if type(r3) == "string" then table.insert(toolPairs, {r3, r4}) end + if type(r5) == "string" then table.insert(toolPairs, {r5, r6}) end + if type(r7) == "string" then table.insert(toolPairs, {r7, r8}) end + end + if table.getn(toolPairs) == 0 then + if type(r1) == "string" then return r1 end + return nil + end + local parts = {} + for idx = 1, table.getn(toolPairs) do + local name = toolPairs[idx][1] + local has = toolPairs[idx][2] + if has then + table.insert(parts, "|cff60e060" .. name .. "|r") + else + table.insert(parts, "|cffff3030" .. name .. "|r") + end + end + return table.concat(parts, ", ") +end + +function API.GetCraftedItemID(i) + local link = API.GetItemLink(i) + if not link then return nil end + local _, _, id = string.find(link, "item:(%d+)") + if id then return tonumber(id) end + return nil +end + +function API.GetSkillThresholds(i) + if not NanamiTradeSkillDB then return nil end + local itemID = API.GetCraftedItemID(i) + if itemID and NanamiTradeSkillDB[itemID] then + return NanamiTradeSkillDB[itemID] + end + local name = API.GetRecipeInfo(i) + if name and NanamiTradeSkillDB[name] then + return NanamiTradeSkillDB[name] + end + return nil +end + +function API.FormatThresholds(thresholds) + if not thresholds then return nil end + return "|cffff7f3f" .. thresholds[1] .. "|r " + .. "|cffffff00" .. thresholds[2] .. "|r " + .. "|cff3fbf3f" .. thresholds[3] .. "|r " + .. "|cff7f7f7f" .. thresholds[4] .. "|r" +end + +local SOURCE_LABELS = { + T = { "|cffffffff训练师|r", "|cffffffff[T]|r" }, + A = { "|cffffffff自动学习|r", "|cffffffff[A]|r" }, + D = { "|cffa335ee掉落|r", "|cffa335ee[D]|r" }, + V = { "|cff1eff00商人|r", "|cff1eff00[V]|r" }, + Q = { "|cff0070dd任务|r", "|cff0070dd[Q]|r" }, + F = { "|cff40bfff钓鱼|r", "|cff40bfff[F]|r" }, + O = { "|cffffff00世界物体|r", "|cffffff00[O]|r" }, + E = { "|cffff8000工程制作|r", "|cffff8000[E]|r" }, + G = { "|cff888888赠予|r", "|cff888888[G]|r" }, + ["?"] = { "|cffffff00未知|r", "|cffffff00[?]|r" }, +} + +function API.GetRecipeSource(i) + if not NanamiTradeSkillSources then return nil end + local itemID = API.GetCraftedItemID(i) + if itemID and NanamiTradeSkillSources[itemID] then + return NanamiTradeSkillSources[itemID] + end + local name = API.GetRecipeInfo(i) + if name and NanamiTradeSkillSources[name] then + return NanamiTradeSkillSources[name] + end + return nil +end + +function API.ParseSource(src) + if not src then return nil, nil end + local stype = string.sub(src, 1, 1) + local detail = nil + if string.len(src) > 2 then + detail = string.sub(src, 3) + end + return stype, detail +end + +local PROF_CN_TO_EN = { + ["炼金术"] = "Alchemy", ["附魔"] = "Enchanting", ["锻造"] = "Blacksmithing", + ["制皮"] = "Leatherworking", ["裁缝"] = "Tailoring", ["工程学"] = "Engineering", + ["烹饪"] = "Cooking", ["急救"] = "First Aid", ["采矿"] = "Mining", + ["熔炼"] = "Smelting", ["草药学"] = "Herbalism", ["珠宝加工"] = "Jewelcrafting", + ["毒药"] = "Poisons", ["生存"] = "Survival", +} + +function API.GetUnlearnedRecipes() + if not NanamiTradeSkillByProf then return nil end + local skillName = API.GetSkillLineName() + if not skillName or skillName == "" then return nil end + local profKey = PROF_CN_TO_EN[skillName] or skillName + local allRecipes = NanamiTradeSkillByProf[profKey] + if not allRecipes then return nil end + + local knownItems = {} + local numRecipes = API.GetNumRecipes() + for i = 1, numRecipes do + local name, skillType = API.GetRecipeInfo(i) + if name and skillType ~= "header" then + local itemID = API.GetCraftedItemID(i) + if itemID then + knownItems[itemID] = true + end + end + end + + local unlearned = {} + for _, entry in ipairs(allRecipes) do + local craftItemID = entry[1] + local cnName = entry[2] + local src = entry[3] + if not knownItems[craftItemID] then + table.insert(unlearned, { + itemID = craftItemID, + name = cnName, + source = src, + }) + end + end + return unlearned +end + +-------------------------------------------------------------------------------- +-- Helpers (module methods to avoid extra upvalues) +-------------------------------------------------------------------------------- +function TSUI.GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +function TSUI.SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +function TSUI.CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +function TSUI.FormatCooldown(seconds) + if not seconds or seconds <= 0 then return nil end + if seconds >= 86400 then + return string.format("%.1f 天", seconds / 86400) + elseif seconds >= 3600 then + return string.format("%.1f 小时", seconds / 3600) + elseif seconds >= 60 then + return string.format("%d 分钟", math.floor(seconds / 60)) + else + return string.format("%d 秒", math.floor(seconds)) + end +end + +function TSUI.FormatRecipeForChat(recipeIndex) + local name = API.GetRecipeInfo(recipeIndex) + if not name then return nil end + local itemLink = API.GetItemLink(recipeIndex) + local header = itemLink or name + local numReagents = API.GetNumReagents(recipeIndex) + if numReagents == 0 then return header end + local parts = {} + for j = 1, numReagents do + local rName, _, rCount = API.GetReagentInfo(recipeIndex, j) + if rName then + local rLink = API.GetReagentItemLink(recipeIndex, j) + local display = rLink or rName + if rCount and rCount > 1 then + table.insert(parts, display .. "x" .. rCount) + else + table.insert(parts, display) + end + end + end + return header .. " = " .. table.concat(parts, ", ") +end + +function TSUI.LinkRecipeToChat(recipeIndex) + local msg = TSUI.FormatRecipeForChat(recipeIndex) + if not msg then return end + if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Insert(msg) + else + if ChatFrame_OpenChat then + ChatFrame_OpenChat(msg) + elseif ChatFrameEditBox then + ChatFrameEditBox:Show() + ChatFrameEditBox:SetText(msg) + ChatFrameEditBox:SetFocus() + end + end +end + +local SOURCE_NAMES = { + T = "训练师", A = "自动学习", D = "掉落", V = "商人", + Q = "任务", F = "钓鱼", O = "世界物体", ["?"] = "未知", +} + +function TSUI.LinkUnlearnedToChat(data) + if not data or not data.name then return end + local msg = "[未学习] " .. data.name + local reagents = NanamiTradeSkillReagents and data.itemID and NanamiTradeSkillReagents[data.itemID] + if reagents and table.getn(reagents) > 0 then + local rParts = {} + for _, entry in ipairs(reagents) do + local rID, rCount = entry[1], entry[2] + local rName = GetItemInfo and GetItemInfo(rID) or ("#" .. rID) + if rCount > 1 then + table.insert(rParts, rName .. "x" .. rCount) + else + table.insert(rParts, rName) + end + end + msg = msg .. " = " .. table.concat(rParts, ", ") + end + if data.source then + local stype = API.ParseSource(data.source) + local sname = SOURCE_NAMES[stype] or stype + msg = msg .. " (来源: " .. sname .. ")" + end + if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Insert(msg) + else + if ChatFrame_OpenChat then + ChatFrame_OpenChat(msg) + elseif ChatFrameEditBox then + ChatFrameEditBox:Show() + ChatFrameEditBox:SetText(msg) + ChatFrameEditBox:SetFocus() + end + end +end + +function TSUI.MatchSearch(name) + if not S.searchText or S.searchText == "" then return true end + if not name then return false end + local lowerSearch = string.lower(S.searchText) + local lowerName = string.lower(name) + return string.find(lowerName, lowerSearch, 1, true) ~= nil +end + +-------------------------------------------------------------------------------- +-- Widget Factories (module methods) +-------------------------------------------------------------------------------- +function TSUI.CreateFilterBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 60) + btn:SetHeight(20) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.5) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(TSUI.GetFont(), 11, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end) + btn:SetScript("OnLeave", function() + if this.active then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 1) + else + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.5) + end + end) + + function btn:SetActive(flag) + self.active = flag + if flag then + self:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + self:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 1) + self.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + else + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + self:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.5) + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end + return btn +end + +function TSUI.CreateActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 100) + btn:SetHeight(28) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(TSUI.GetFont(), 12, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + btn.disabled = false + + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + return btn +end + +function TSUI.CreateSpinner(parent, x, y) + local frame = CreateFrame("Frame", nil, parent) + frame:SetWidth(80); frame:SetHeight(24) + frame:SetPoint("BOTTOMLEFT", parent, "BOTTOMLEFT", x, y) + + local bg = CreateFrame("Frame", nil, frame) + bg:SetAllPoints() + bg:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + bg:SetBackdropColor(T.searchBg[1], T.searchBg[2], T.searchBg[3], T.searchBg[4]) + bg:SetBackdropBorderColor(T.searchBorder[1], T.searchBorder[2], T.searchBorder[3], T.searchBorder[4]) + + local font = TSUI.GetFont() + local minus = CreateFrame("Button", nil, frame) + minus:SetWidth(20); minus:SetHeight(22); minus:SetPoint("LEFT", frame, "LEFT", 1, 0) + local minusFS = minus:CreateFontString(nil, "OVERLAY") + minusFS:SetFont(font, 14, "OUTLINE"); minusFS:SetPoint("CENTER", 0, 0) + minusFS:SetText("-"); minusFS:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + minus:SetScript("OnEnter", function() minusFS:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end) + minus:SetScript("OnLeave", function() minusFS:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) end) + + local plus = CreateFrame("Button", nil, frame) + plus:SetWidth(20); plus:SetHeight(22); plus:SetPoint("RIGHT", frame, "RIGHT", -1, 0) + local plusFS = plus:CreateFontString(nil, "OVERLAY") + plusFS:SetFont(font, 14, "OUTLINE"); plusFS:SetPoint("CENTER", 0, 0) + plusFS:SetText("+"); plusFS:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + plus:SetScript("OnEnter", function() plusFS:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) end) + plus:SetScript("OnLeave", function() plusFS:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) end) + + local editBox = CreateFrame("EditBox", nil, frame) + editBox:SetWidth(36); editBox:SetHeight(20) + editBox:SetPoint("CENTER", 0, 0) + editBox:SetFont(font, 12, "OUTLINE") + editBox:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + editBox:SetJustifyH("CENTER") + editBox:SetAutoFocus(false) + editBox:SetNumeric(true) + editBox:SetMaxLetters(4) + editBox:SetText("1") + editBox:SetScript("OnEscapePressed", function() this:ClearFocus() end) + editBox:SetScript("OnEnterPressed", function() this:ClearFocus() end) + editBox:SetScript("OnEditFocusLost", function() + local v = tonumber(this:GetText()) or 1 + if v < 1 then v = 1 end + frame.value = v + this:SetText(tostring(v)) + end) + frame.editBox = editBox; frame.value = 1 + + function frame:SetValue(v) + if v < 1 then v = 1 end + self.value = v + self.editBox:SetText(tostring(v)) + end + function frame:GetValue() + local v = tonumber(self.editBox:GetText()) or self.value + if v < 1 then v = 1 end + return v + end + + minus:SetScript("OnClick", function() + local c = frame:GetValue(); frame:SetValue(IsShiftKeyDown() and (c - 10) or (c - 1)) + end) + plus:SetScript("OnClick", function() + local c = frame:GetValue(); frame:SetValue(IsShiftKeyDown() and (c + 10) or (c + 1)) + end) + return frame +end + +function TSUI.CreateListRow(parent, idx) + local row = CreateFrame("Button", nil, parent) + row:SetWidth(L.CONTENT_W); row:SetHeight(L.LIST_ROW_H) + + local iconFrame = CreateFrame("Frame", nil, row) + iconFrame:SetWidth(L.LIST_ROW_H - 4); iconFrame:SetHeight(L.LIST_ROW_H - 4) + iconFrame:SetPoint("LEFT", row, "LEFT", 0, 0) + iconFrame:SetBackdrop({ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } }) + iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + row.iconFrame = iconFrame + + local icon = iconFrame:CreateTexture(nil, "ARTWORK") + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetPoint("TOPLEFT", iconFrame, "TOPLEFT", 3, -3) + icon:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", -3, 3) + row.icon = icon + + local qualGlow = iconFrame:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD"); qualGlow:SetAlpha(0.8) + local glowSize = (L.LIST_ROW_H - 4) * 1.9 + qualGlow:SetWidth(glowSize); qualGlow:SetHeight(glowSize) + qualGlow:SetPoint("CENTER", iconFrame, "CENTER", 0, 0) + qualGlow:Hide(); row.qualGlow = qualGlow + + local font = TSUI.GetFont() + local nameFS = row:CreateFontString(nil, "OVERLAY") + nameFS:SetFont(font, 11, "OUTLINE") + nameFS:SetPoint("LEFT", iconFrame, "RIGHT", 6, 0) + nameFS:SetPoint("RIGHT", row, "RIGHT", -105, 0) + nameFS:SetJustifyH("LEFT"); nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + row.nameFS = nameFS + + local skillFS = row:CreateFontString(nil, "OVERLAY") + skillFS:SetFont(font, 8, "OUTLINE"); skillFS:SetPoint("RIGHT", row, "RIGHT", -46, 0) + skillFS:SetJustifyH("RIGHT") + skillFS:Hide(); row.skillFS = skillFS + + local srcTagFS = row:CreateFontString(nil, "OVERLAY") + srcTagFS:SetFont(font, 8, "OUTLINE"); srcTagFS:SetPoint("RIGHT", row, "RIGHT", -26, 0) + srcTagFS:SetJustifyH("RIGHT") + srcTagFS:Hide(); row.srcTagFS = srcTagFS + + local countFS = row:CreateFontString(nil, "OVERLAY") + countFS:SetFont(font, 10, "OUTLINE"); countFS:SetPoint("RIGHT", row, "RIGHT", -4, 0) + countFS:SetJustifyH("RIGHT"); countFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + countFS:Hide(); row.countFS = countFS + + local catFS = row:CreateFontString(nil, "OVERLAY") + catFS:SetFont(font, 11, "OUTLINE"); catFS:SetPoint("LEFT", row, "LEFT", 4, 0) + catFS:SetJustifyH("LEFT"); catFS:SetTextColor(T.catHeader[1], T.catHeader[2], T.catHeader[3]) + catFS:Hide(); row.catFS = catFS + + local catSep = row:CreateTexture(nil, "ARTWORK") + catSep:SetTexture("Interface\\Buttons\\WHITE8X8"); catSep:SetHeight(1) + catSep:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + catSep:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0) + catSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], 0.3) + catSep:Hide(); row.catSep = catSep + + local selBg = row:CreateTexture(nil, "ARTWORK") + selBg:SetTexture("Interface\\Buttons\\WHITE8X8") + selBg:SetAllPoints(row) + selBg:SetVertexColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.40) + selBg:Hide(); row.selBg = selBg + + local selGlow = row:CreateTexture(nil, "ARTWORK") + selGlow:SetTexture("Interface\\Buttons\\WHITE8X8") + selGlow:SetWidth(4); selGlow:SetHeight(L.LIST_ROW_H) + selGlow:SetPoint("LEFT", row, "LEFT", 0, 0) + selGlow:SetVertexColor(1, 0.65, 0.85, 1) + selGlow:Hide(); row.selGlow = selGlow + + local selTop = row:CreateTexture(nil, "OVERLAY") + selTop:SetTexture("Interface\\Buttons\\WHITE8X8") + selTop:SetHeight(1) + selTop:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0) + selTop:SetPoint("TOPRIGHT", row, "TOPRIGHT", 0, 0) + selTop:SetVertexColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.8) + selTop:Hide(); row.selTop = selTop + + local selBot = row:CreateTexture(nil, "OVERLAY") + selBot:SetTexture("Interface\\Buttons\\WHITE8X8") + selBot:SetHeight(1) + selBot:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + selBot:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0) + selBot:SetVertexColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.8) + selBot:Hide(); row.selBot = selBot + + local hl = row:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + hl:SetBlendMode("ADD"); hl:SetAllPoints(row); hl:SetAlpha(0.3) + row.highlight = hl; row.recipeIndex = nil; row.isHeader = false; row.headerIndex = nil + + row:SetScript("OnEnter", function() + if this.recipeIndex and not this.isHeader then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + local ok + if S.currentMode == "craft" then + local link = GetCraftItemLink and GetCraftItemLink(this.recipeIndex) + if link then + ok = pcall(GameTooltip.SetCraftItem, GameTooltip, this.recipeIndex) + else + ok = pcall(GameTooltip.SetCraftSpell, GameTooltip, this.recipeIndex) + end + else + ok = pcall(GameTooltip.SetTradeSkillItem, GameTooltip, this.recipeIndex) + end + if ok then GameTooltip:Show() else GameTooltip:Hide() end + end + end) + row:SetScript("OnLeave", function() GameTooltip:Hide() end) + + function row:SetAsHeader(name, collapsed) + self.isHeader = true; self:SetHeight(L.CAT_ROW_H) + self.iconFrame:Hide(); self.nameFS:Hide(); self.countFS:Hide(); self.skillFS:Hide() + self.srcTagFS:Hide() + self.diffDot:Hide(); self.qualGlow:Hide(); self.highlight:SetAlpha(0.15) + self.selBg:Hide(); self.selGlow:Hide(); self.selTop:Hide(); self.selBot:Hide() + self.catFS:SetText((collapsed and "+" or "-") .. " " .. (name or "")) + self.catFS:Show(); self.catSep:Show() + end + + local diffDot = row:CreateTexture(nil, "OVERLAY") + diffDot:SetTexture("Interface\\Buttons\\WHITE8X8") + diffDot:SetWidth(4); diffDot:SetHeight(L.LIST_ROW_H - 8) + diffDot:SetPoint("LEFT", row, "LEFT", 0, 0) + row.diffDot = diffDot + + iconFrame:ClearAllPoints() + iconFrame:SetPoint("LEFT", row, "LEFT", 6, 0) + nameFS:ClearAllPoints() + nameFS:SetPoint("LEFT", iconFrame, "RIGHT", 6, 0) + nameFS:SetPoint("RIGHT", row, "RIGHT", -105, 0) + + function row:SetAsRecipe(recipe) + self.isHeader = false; self.recipeIndex = recipe.index; self.unlearnedData = nil + self:SetHeight(L.LIST_ROW_H); self.iconFrame:Show(); self.nameFS:Show() + self.catFS:Hide(); self.catSep:Hide(); self.highlight:SetAlpha(0.3) + self.icon:SetTexture(API.GetRecipeIcon(recipe.index)) + self.nameFS:SetText(recipe.name) + local dc = T.DIFFICULTY[recipe.difficulty] or T.DIFFICULTY.trivial + self.nameFS:SetTextColor(dc[1], dc[2], dc[3]) + + self.diffDot:SetVertexColor(dc[1], dc[2], dc[3], 1) + self.diffDot:Show() + + local qc = recipe.quality and recipe.quality >= 2 and T.QUALITY[recipe.quality] + if qc then + self.qualGlow:SetVertexColor(qc[1], qc[2], qc[3]); self.qualGlow:Show() + else + self.qualGlow:Hide() + end + + if recipe.difficulty == "trivial" then + self.icon:SetVertexColor(0.6, 0.6, 0.6) + else + self.icon:SetVertexColor(1, 1, 1) + end + if recipe.numAvail and recipe.numAvail > 0 then + self.countFS:SetText("[" .. recipe.numAvail .. "]"); self.countFS:Show() + else self.countFS:Hide() end + + local thresholds = API.GetSkillThresholds(recipe.index) + if thresholds then + self.skillFS:SetText(API.FormatThresholds(thresholds)) + self.skillFS:Show() + else + self.skillFS:Hide() + end + + local src = API.GetRecipeSource(recipe.index) + if src then + local stype = API.ParseSource(src) + local lbl = SOURCE_LABELS[stype] + if lbl then + self.srcTagFS:SetText(lbl[2]) + self.srcTagFS:Show() + else + self.srcTagFS:Hide() + end + else + self.srcTagFS:Hide() + end + end + + function row:SetAsUnlearned(data) + self.isHeader = false; self.recipeIndex = nil + self.unlearnedData = data + self:SetHeight(L.LIST_ROW_H); self.iconFrame:Show(); self.nameFS:Show() + self.catFS:Hide(); self.catSep:Hide(); self.highlight:SetAlpha(0.15) + self.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark") + self.icon:SetVertexColor(0.5, 0.5, 0.5) + self.nameFS:SetText("|cff888888" .. (data.name or "?") .. "|r") + self.nameFS:SetTextColor(0.55, 0.55, 0.55) + self.diffDot:SetVertexColor(0.4, 0.4, 0.4, 1); self.diffDot:Show() + self.qualGlow:Hide(); self.countFS:Hide() + self.selBg:Hide(); self.selGlow:Hide(); self.selTop:Hide(); self.selBot:Hide() + + if data.thresholds then + self.skillFS:SetText(API.FormatThresholds(data.thresholds)) + self.skillFS:Show() + else + self.skillFS:Hide() + end + + local stype = data.sourceType + local lbl = SOURCE_LABELS[stype] + if lbl then + self.srcTagFS:SetText(lbl[2]) + self.srcTagFS:Show() + else + self.srcTagFS:Hide() + end + end + + function row:Clear() + self.recipeIndex = nil; self.headerIndex = nil; self.isHeader = false + self.unlearnedData = nil + self.countFS:Hide(); self.diffDot:Hide(); self.qualGlow:Hide(); self.skillFS:Hide() + self.srcTagFS:Hide() + self.selBg:Hide(); self.selGlow:Hide(); self.selTop:Hide(); self.selBot:Hide() + self:Hide() + end + return row +end + +function TSUI.CreateReagentSlot(parent, i) + local slot = CreateFrame("Frame", nil, parent) + slot:SetWidth(L.CONTENT_W / 2 - 4); slot:SetHeight(30) + + local rIconFrame = CreateFrame("Frame", nil, slot) + rIconFrame:SetWidth(28); rIconFrame:SetHeight(28); rIconFrame:SetPoint("LEFT", slot, "LEFT", 0, 0) + rIconFrame:SetBackdrop({ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 } }) + rIconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + rIconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + slot.iconFrame = rIconFrame + + local rIcon = rIconFrame:CreateTexture(nil, "ARTWORK") + rIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + rIcon:SetPoint("TOPLEFT", rIconFrame, "TOPLEFT", 3, -3) + rIcon:SetPoint("BOTTOMRIGHT", rIconFrame, "BOTTOMRIGHT", -3, 3) + slot.icon = rIcon + + local font = TSUI.GetFont() + local rNameFS = slot:CreateFontString(nil, "OVERLAY") + rNameFS:SetFont(font, 11, "OUTLINE"); rNameFS:SetPoint("LEFT", rIconFrame, "RIGHT", 6, 0) + rNameFS:SetPoint("RIGHT", slot, "RIGHT", -46, 0); rNameFS:SetJustifyH("LEFT") + rNameFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]); slot.nameFS = rNameFS + + local rCountFS = slot:CreateFontString(nil, "OVERLAY") + rCountFS:SetFont(font, 11, "OUTLINE"); rCountFS:SetPoint("RIGHT", slot, "RIGHT", -2, 0) + rCountFS:SetJustifyH("RIGHT"); slot.countFS = rCountFS + + slot.reagentIndex = nil; slot:EnableMouse(true) + slot:SetScript("OnEnter", function() + if S.selectedIndex and this.reagentIndex then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + local ok + if S.currentMode == "craft" then + local link = GetCraftItemLink and GetCraftItemLink(S.selectedIndex) + if link then + ok = pcall(GameTooltip.SetCraftItem, GameTooltip, S.selectedIndex, this.reagentIndex) + else + ok = pcall(GameTooltip.SetCraftSpell, GameTooltip, S.selectedIndex) + end + else + ok = pcall(GameTooltip.SetTradeSkillItem, GameTooltip, S.selectedIndex, this.reagentIndex) + end + if ok then GameTooltip:Show() else GameTooltip:Hide() end + end + end) + slot:SetScript("OnLeave", function() GameTooltip:Hide() end) + slot:SetScript("OnMouseUp", function() + if IsShiftKeyDown() and S.selectedIndex and this.reagentIndex then + local link = API.GetReagentItemLink(S.selectedIndex, this.reagentIndex) + if link then + if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Insert(link) + else + if ChatFrame_OpenChat then + ChatFrame_OpenChat(link) + elseif ChatFrameEditBox then + ChatFrameEditBox:Show() + ChatFrameEditBox:SetText(link) + ChatFrameEditBox:SetFocus() + end + end + end + end + end) + slot:Hide() + return slot +end + +-------------------------------------------------------------------------------- +-- Logic (module methods referencing S, L, T, API only) +-------------------------------------------------------------------------------- +function TSUI.BuildDisplayList() + S.displayList = {} + + if S.currentFilter == "unlearned" then + local unlearned = API.GetUnlearnedRecipes() + if not unlearned or table.getn(unlearned) == 0 then return end + local filtered = {} + for _, entry in ipairs(unlearned) do + if TSUI.MatchSearch(entry.name) then + local stype = API.ParseSource(entry.source or "T") + local th = NanamiTradeSkillDB and NanamiTradeSkillDB[entry.itemID] + table.insert(filtered, { + type = "unlearned", + data = { + name = entry.name, + itemID = entry.itemID, + source = entry.source, + sourceType = stype, + thresholds = th, + }, + }) + end + end + if table.getn(filtered) == 0 then return end + table.insert(S.displayList, { type = "header", name = "未学习的配方 (" .. table.getn(filtered) .. ")", collapsed = false, headerIndex = 0 }) + for _, item in ipairs(filtered) do + table.insert(S.displayList, item) + end + return + end + + local numRecipes = API.GetNumRecipes() + if numRecipes == 0 then return end + + local currentCat = nil + local catRecipes = {} + local catOrder = {} + + for i = 1, numRecipes do + local name, skillType, numAvail, isExpanded = API.GetRecipeInfo(i) + if name then + if skillType == "header" then + currentCat = name + if not catRecipes[name] then + catRecipes[name] = {} + table.insert(catOrder, { name = name, index = i }) + end + else + if not currentCat then + currentCat = "配方" + if not catRecipes[currentCat] then + catRecipes[currentCat] = {} + table.insert(catOrder, { name = currentCat, index = 0 }) + end + end + local show = true + if S.currentFilter == "available" then + show = (skillType ~= "trivial" and numAvail > 0) + elseif S.currentFilter == "optimal" then + show = (skillType == "optimal" or skillType == "difficult" or skillType == "medium") + elseif S.currentFilter == "hasmat" then + show = (numAvail and numAvail > 0) + end + if show and not TSUI.MatchSearch(name) then show = false end + if show then + local quality = API.GetItemQuality(i) + table.insert(catRecipes[currentCat], { + index = i, name = name, + difficulty = skillType or "trivial", + numAvail = numAvail or 0, + quality = quality, + }) + end + end + end + end + + local hasCats = table.getn(catOrder) > 1 + for _, catInfo in ipairs(catOrder) do + local catName = catInfo.name + local recipes = catRecipes[catName] + if recipes and table.getn(recipes) > 0 then + if hasCats then + table.insert(S.displayList, { type = "header", name = catName, + collapsed = S.collapsedCats[catName], headerIndex = catInfo.index }) + end + if not S.collapsedCats[catName] then + for _, recipe in ipairs(recipes) do + table.insert(S.displayList, { type = "recipe", data = recipe }) + end + end + end + end +end + +function TSUI.UpdateList() + if not S.MainFrame or not S.MainFrame:IsVisible() then return end + TSUI.BuildDisplayList() + local content = S.MainFrame.listScroll.content + local count = table.getn(S.displayList) + local y = 0 + for i = 1, L.MAX_ROWS do + local row = S.rowButtons[i] + if i <= count then + local entry = S.displayList[i] + row:ClearAllPoints() + if entry.type == "header" then + row:SetAsHeader(entry.name, entry.collapsed) + row:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + row.catName = entry.name; row.headerIndex = entry.headerIndex + row:Show(); y = y + L.CAT_ROW_H + elseif entry.type == "unlearned" then + row:SetAsUnlearned(entry.data) + row:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + row.catName = nil; row:Show(); y = y + L.LIST_ROW_H + if S.selectedUnlearned and S.selectedUnlearned.itemID == entry.data.itemID then + row.selBg:Show(); row.selGlow:Show(); row.selTop:Show(); row.selBot:Show() + end + else + row:SetAsRecipe(entry.data) + row:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + row.catName = nil; row:Show(); y = y + L.LIST_ROW_H + if S.selectedIndex == entry.data.index then + row.iconFrame:SetBackdropBorderColor(1, 0.65, 0.85, 1) + row.iconFrame:SetBackdropColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.5) + row.selBg:Show() + row.selGlow:Show() + row.selTop:Show() + row.selBot:Show() + row.nameFS:SetTextColor(1, 1, 1) + else + row.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + row.iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + row.selBg:Hide() + row.selGlow:Hide() + row.selTop:Hide() + row.selBot:Hide() + end + end + else row:Clear() end + end + content:SetHeight(math.max(1, y)) +end + +function TSUI.UpdateDetail() + if not S.MainFrame then return end + local detail = S.MainFrame.detail + if not S.selectedIndex then + if S.selectedUnlearned then + TSUI.UpdateDetailUnlearned(S.selectedUnlearned) + return + end + detail.iconFrame:Hide(); detail.qualGlow:Hide() + detail.nameFS:SetText(""); detail.descFS:SetText("") + detail.cooldownFS:SetText(""); detail.toolsFS:SetText(""); detail.madeFS:SetText("") + if detail.diffDot then detail.diffDot:Hide() end + if detail.diffFS then detail.diffFS:SetText("") end + if detail.sourceFS then detail.sourceFS:SetText("") end + for i = 1, L.MAX_REAGENTS do S.reagentSlots[i]:Hide() end + S.MainFrame.createBtn:SetDisabled(true); S.MainFrame.createAllBtn:SetDisabled(true) + return + end + local name, skillType, numAvail = API.GetRecipeInfo(S.selectedIndex) + detail.icon:SetTexture(API.GetRecipeIcon(S.selectedIndex)); detail.iconFrame:Show() + detail.nameFS:SetText(name or "") + local dc = T.DIFFICULTY[skillType] or T.DIFFICULTY.trivial + detail.nameFS:SetTextColor(dc[1], dc[2], dc[3]) + + local quality = API.GetItemQuality(S.selectedIndex) + local qc = quality and quality >= 2 and T.QUALITY[quality] + if qc then + detail.qualGlow:SetVertexColor(qc[1], qc[2], qc[3]); detail.qualGlow:Show() + else + detail.qualGlow:Hide() + end + + local cdText = TSUI.FormatCooldown(API.GetCooldown(S.selectedIndex)) + detail.cooldownFS:SetText(cdText and ("|cffff8040冷却: " .. cdText .. "|r") or "") + + local tools = API.GetTools(S.selectedIndex) + detail.toolsFS:SetText(tools and ("|cffffcc80需要: |r" .. tools) or "") + detail.descFS:SetText(API.GetDescription(S.selectedIndex) or "") + + local loMade, hiMade = API.GetNumMade(S.selectedIndex) + if loMade and hiMade and (loMade > 1 or hiMade > 1) then + local mt = (loMade == hiMade) and ("产出: " .. loMade) or ("产出: " .. loMade .. "-" .. hiMade) + detail.madeFS:SetText("|cffa0a0a0" .. mt .. "|r") + else detail.madeFS:SetText("") end + + if detail.diffDot then + local DIFF_NAMES = { + optimal = { "橙色", "必涨点" }, + difficult = { "橙色", "必涨点" }, + medium = { "黄色", "大概率涨点" }, + easy = { "绿色", "小概率涨点" }, + trivial = { "灰色", "不涨点" }, + } + local info = DIFF_NAMES[skillType] + local thresholds = API.GetSkillThresholds(S.selectedIndex) + + if info then + detail.diffDot:SetVertexColor(dc[1], dc[2], dc[3], 1) + detail.diffDot:Show() + if thresholds then + local thText = API.FormatThresholds(thresholds) + detail.diffFS:SetText(info[2] .. " |cffbbbbbb技能:|r " .. thText) + else + detail.diffFS:SetText("当前难度: " .. info[1] .. " (" .. info[2] .. ")") + end + detail.diffFS:SetTextColor(dc[1], dc[2], dc[3]) + else + detail.diffDot:Hide() + detail.diffFS:SetText("") + end + end + + if detail.sourceFS then + local src = API.GetRecipeSource(S.selectedIndex) + if src then + local stype, sdetail = API.ParseSource(src) + local lbl = SOURCE_LABELS[stype] + if lbl then + local text = "|cffbbbbbb来源:|r " .. lbl[1] + if sdetail and sdetail ~= "" then + text = text .. " - " .. sdetail + end + detail.sourceFS:SetText(text) + else + detail.sourceFS:SetText("") + end + else + detail.sourceFS:SetText("") + end + end + + local numReagents = API.GetNumReagents(S.selectedIndex) + local canCreate = true + for i = 1, L.MAX_REAGENTS do + if i <= numReagents then + local rName, rTex, rCount, rPC = API.GetReagentInfo(S.selectedIndex, i) + S.reagentSlots[i].icon:SetTexture(rTex) + S.reagentSlots[i].nameFS:SetText(rName or "") + + local rQuality + local rLink = API.GetReagentItemLink(S.selectedIndex, i) + if rLink then + local _, _, itemString = string.find(rLink, "item:(%d+)") + if itemString and GetItemInfo then + local _, _, scanRarity = GetItemInfo("item:" .. itemString) + rQuality = scanRarity + end + end + if rQuality and rQuality > 1 and GetItemQualityColor then + local qr, qg, qb = GetItemQualityColor(rQuality) + S.reagentSlots[i].nameFS:SetTextColor(qr, qg, qb) + else + S.reagentSlots[i].nameFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + end + + S.reagentSlots[i].countFS:SetText((rPC or 0) .. "/" .. (rCount or 0)) + if (rPC or 0) >= (rCount or 0) then + S.reagentSlots[i].countFS:SetTextColor(T.reagentOk[1], T.reagentOk[2], T.reagentOk[3]) + if rQuality and rQuality > 1 and GetItemQualityColor then + local qr, qg, qb = GetItemQualityColor(rQuality) + S.reagentSlots[i].iconFrame:SetBackdropBorderColor(qr, qg, qb, 1) + else + S.reagentSlots[i].iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + else + S.reagentSlots[i].countFS:SetTextColor(T.reagentLack[1], T.reagentLack[2], T.reagentLack[3]) + S.reagentSlots[i].iconFrame:SetBackdropBorderColor(T.reagentLack[1], T.reagentLack[2], T.reagentLack[3], 0.8) + canCreate = false + end + S.reagentSlots[i].reagentIndex = i; S.reagentSlots[i]:Show() + else S.reagentSlots[i]:Hide() end + end + S.MainFrame.createBtn:SetDisabled(not canCreate) + S.MainFrame.createAllBtn:SetDisabled(not canCreate or not numAvail or numAvail <= 0) +end + +function TSUI.UpdateFilters() + if not S.MainFrame then return end + S.MainFrame.filterAll:SetActive(S.currentFilter == "all") + S.MainFrame.filterAvail:SetActive(S.currentFilter == "available") + S.MainFrame.filterOptimal:SetActive(S.currentFilter == "optimal") + S.MainFrame.filterHasMat:SetActive(S.currentFilter == "hasmat") + S.MainFrame.filterUnlearned:SetActive(S.currentFilter == "unlearned") +end + +function TSUI.FullUpdate() + TSUI.UpdateFilters(); TSUI.UpdateList(); TSUI.UpdateDetail() + if TSUI.UpdateScrollbar then TSUI.UpdateScrollbar() end +end + +function TSUI.SelectRecipe(index) + S.selectedIndex = index; S.selectedUnlearned = nil + API.SelectRecipe(index) + S.craftAmount = 1 + if S.MainFrame and S.MainFrame.spinner then S.MainFrame.spinner:SetValue(1) end + TSUI.FullUpdate() +end + +function TSUI.SelectUnlearned(data) + S.selectedIndex = nil; S.selectedUnlearned = data + TSUI.UpdateDetailUnlearned(data) + if S.MainFrame then + S.MainFrame.createBtn:SetDisabled(true) + S.MainFrame.createAllBtn:SetDisabled(true) + end +end + +function TSUI.UpdateDetailUnlearned(data) + if not S.MainFrame then return end + local detail = S.MainFrame.detail + + detail.icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark") + detail.iconFrame:Show(); detail.qualGlow:Hide() + detail.nameFS:SetText("|cff888888" .. (data.name or "?") .. "|r") + detail.nameFS:SetTextColor(0.55, 0.55, 0.55) + detail.descFS:SetText("") + detail.cooldownFS:SetText(""); detail.toolsFS:SetText("") + detail.madeFS:SetText("|cffff5555未学习|r") + + if detail.diffDot then + if data.thresholds then + detail.diffDot:SetVertexColor(0.5, 0.5, 0.5, 1); detail.diffDot:Show() + detail.diffFS:SetText("|cffbbbbbb技能:|r " .. API.FormatThresholds(data.thresholds)) + detail.diffFS:SetTextColor(0.6, 0.6, 0.6) + else + detail.diffDot:Hide(); detail.diffFS:SetText("") + end + end + + if detail.sourceFS then + local src = data.source + if src then + local stype, sdetail = API.ParseSource(src) + local lbl = SOURCE_LABELS[stype] + if lbl then + local text = "|cffbbbbbb来源:|r " .. lbl[1] + if sdetail and sdetail ~= "" then + text = text .. " - " .. sdetail + end + detail.sourceFS:SetText(text) + else + detail.sourceFS:SetText("") + end + else + detail.sourceFS:SetText("") + end + end + + local reagents = NanamiTradeSkillReagents and data.itemID and NanamiTradeSkillReagents[data.itemID] + for i = 1, L.MAX_REAGENTS do + if reagents and i <= table.getn(reagents) then + local entry = reagents[i] + local rItemID, rCount = entry[1], entry[2] + local rName, rTex, rQuality + if GetItemInfo then + local n, _, q, _, _, _, _, _, t = GetItemInfo(rItemID) + rName = n; rTex = t; rQuality = q + end + if rName then + S.reagentSlots[i].icon:SetTexture(rTex) + S.reagentSlots[i].nameFS:SetText(rName) + if rQuality and rQuality > 1 and GetItemQualityColor then + local qr, qg, qb = GetItemQualityColor(rQuality) + S.reagentSlots[i].nameFS:SetTextColor(qr, qg, qb) + S.reagentSlots[i].iconFrame:SetBackdropBorderColor(qr, qg, qb, 1) + else + S.reagentSlots[i].nameFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + S.reagentSlots[i].iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + else + S.reagentSlots[i].icon:SetTexture("Interface\\Icons\\INV_Misc_QuestionMark") + S.reagentSlots[i].nameFS:SetText("|cff888888物品#" .. rItemID .. "|r") + S.reagentSlots[i].nameFS:SetTextColor(0.55, 0.55, 0.55) + S.reagentSlots[i].iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + S.reagentSlots[i].countFS:SetText("x" .. rCount) + S.reagentSlots[i].countFS:SetTextColor(0.7, 0.7, 0.7) + S.reagentSlots[i].reagentIndex = nil + S.reagentSlots[i]:Show() + else + S.reagentSlots[i]:Hide() + end + end +end + +function TSUI.ToggleCategory(catName) + if S.collapsedCats[catName] then S.collapsedCats[catName] = nil + else S.collapsedCats[catName] = true end + TSUI.FullUpdate() +end + +function TSUI.UpdateProgressBar() + local skillName, cur, mx = API.GetSkillLineName() + S.MainFrame.titleFS:SetText(skillName or "") + if mx and mx > 0 and cur then + local barWidth = S.MainFrame.progressFrame:GetWidth() - 4 + local fill = math.min(1, cur / mx) + S.MainFrame.progressBar:SetWidth(math.max(1, barWidth * fill)) + S.MainFrame.progressText:SetText(cur .. " / " .. mx) + else + S.MainFrame.progressBar:SetWidth(1) + S.MainFrame.progressText:SetText("") + end +end + +-------------------------------------------------------------------------------- +-- Profession Tabs (right-side icon strip, spellbook style) +-------------------------------------------------------------------------------- +local PROF_ALIAS = { + ["熔炼"]="采矿", ["采矿"]="熔炼", + ["Smelting"]="Mining", ["Mining"]="Smelting", +} + +function TSUI.ProfNamesMatch(a, b) + if not a or not b or a == "" or b == "" then return false end + if a == b then return true end + if string.find(a, b, 1, true) or string.find(b, a, 1, true) then return true end + local a2 = PROF_ALIAS[a] + if a2 and (a2 == b or string.find(a2, b, 1, true) or string.find(b, a2, 1, true)) then return true end + local b2 = PROF_ALIAS[b] + if b2 and (b2 == a or string.find(b2, a, 1, true) or string.find(a, b2, 1, true)) then return true end + return false +end + +function TSUI.ScanProfessions() + S.profList = {} + if not GetSpellName then return end + local seen = {} + local idx = 1 + local btype = BOOKTYPE_SPELL or "spell" + while true do + local name, rank = GetSpellName(idx, btype) + if not name then break end + if PROF_SPELLS[name] and not seen[name] then + seen[name] = true + local tex = GetSpellTexture(idx, btype) + table.insert(S.profList, { name = name, icon = tex }) + end + idx = idx + 1 + end +end + +function TSUI.CreateProfTabs(parent) + local TAB_SZ, TAB_GAP, TAB_TOP = 42, 4, 6 + for i = 1, 10 do + local tab = CreateFrame("Button", nil, parent) + tab:SetWidth(TAB_SZ); tab:SetHeight(TAB_SZ) + tab:SetPoint("TOPLEFT", parent, "TOPRIGHT", 2, + -(TAB_TOP + (i - 1) * (TAB_SZ + TAB_GAP))) + tab:SetFrameStrata("HIGH") + tab:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + tab:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + tab:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], + T.slotBorder[4]) + + local icon = tab:CreateTexture(nil, "ARTWORK") + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetPoint("TOPLEFT", tab, "TOPLEFT", 4, -4) + icon:SetPoint("BOTTOMRIGHT", tab, "BOTTOMRIGHT", -4, 4) + tab.icon = icon + + local glow = tab:CreateTexture(nil, "OVERLAY") + glow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + glow:SetBlendMode("ADD"); glow:SetAlpha(0.7) + local gs = TAB_SZ * 1.8 + glow:SetWidth(gs); glow:SetHeight(gs) + glow:SetPoint("CENTER", tab, "CENTER", 0, 0) + glow:Hide(); tab.glow = glow + + local hl = tab:CreateTexture(nil, "HIGHLIGHT") + hl:SetTexture("Interface\\Buttons\\ButtonHilight-Square") + hl:SetBlendMode("ADD"); hl:SetAlpha(0.3) + hl:SetPoint("TOPLEFT", icon, "TOPLEFT", 0, 0) + hl:SetPoint("BOTTOMRIGHT", icon, "BOTTOMRIGHT", 0, 0) + + local checked = tab:CreateTexture(nil, "BORDER") + checked:SetTexture("Interface\\Buttons\\CheckButtonHilight") + checked:SetBlendMode("ADD"); checked:SetAlpha(0.35) + checked:SetAllPoints(tab); checked:Hide(); tab.checked = checked + + tab.profName = nil; tab.active = false; tab:Hide() + + tab:SetScript("OnEnter", function() + if this.profName then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetText(this.profName, 1, 0.82, 0.60) + GameTooltip:Show() + end + end) + tab:SetScript("OnLeave", function() GameTooltip:Hide() end) + tab:SetScript("OnClick", function() + if this.active or not this.profName then return end + S.switchStartTime = GetTime() + CastSpellByName(this.profName) + end) + S.profTabs[i] = tab + end +end + +function TSUI.UpdateProfTabs() + TSUI.ScanProfessions() + local currentSkillName = API.GetSkillLineName() + for i = 1, 10 do + local tab = S.profTabs[i] + if not tab then break end + local prof = S.profList[i] + if prof then + tab.profName = prof.name + tab.icon:SetTexture(prof.icon) + local isActive = TSUI.ProfNamesMatch(prof.name, currentSkillName) + tab.active = isActive + if isActive then + tab:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], + T.slotSelected[3], 1) + tab.icon:SetVertexColor(1, 1, 1) + tab.glow:SetVertexColor(T.slotSelected[1], T.slotSelected[2], + T.slotSelected[3]) + tab.glow:Show(); tab.checked:Show() + else + tab:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], + T.slotBorder[3], T.slotBorder[4]) + tab.icon:SetVertexColor(0.75, 0.75, 0.75) + tab.glow:Hide(); tab.checked:Hide() + end + tab:Show() + else + tab.profName = nil; tab.active = false; tab:Hide() + end + end +end + +function TSUI.IsTabSwitching() + return S.switchStartTime and (GetTime() - S.switchStartTime) < 1.0 +end + +-------------------------------------------------------------------------------- +-- Hide Blizzard Frames (module methods) +-------------------------------------------------------------------------------- +function TSUI.HideBlizzardTradeSkill() + if not TradeSkillFrame then return end + TradeSkillFrame:SetScript("OnHide", function() end) + if TradeSkillFrame:IsVisible() then + if HideUIPanel then pcall(HideUIPanel, TradeSkillFrame) else TradeSkillFrame:Hide() end + end + TradeSkillFrame:SetAlpha(0); TradeSkillFrame:EnableMouse(false) + TradeSkillFrame:ClearAllPoints() + TradeSkillFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 2000, 2000) +end + +function TSUI.HideBlizzardCraft() + if not CraftFrame then return end + CraftFrame:SetScript("OnHide", function() end) + if CraftFrame:IsVisible() then + if HideUIPanel then pcall(HideUIPanel, CraftFrame) else CraftFrame:Hide() end + end + CraftFrame:SetAlpha(0); CraftFrame:EnableMouse(false) + CraftFrame:ClearAllPoints() + CraftFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 2000, 2000) +end + +function TSUI.CleanupBlizzardTradeSkill() + if not TradeSkillFrame then return end + TradeSkillFrame:SetScript("OnHide", function() end) + if HideUIPanel then pcall(HideUIPanel, TradeSkillFrame) end + if TradeSkillFrame:IsVisible() then TradeSkillFrame:Hide() end + TradeSkillFrame:SetAlpha(0); TradeSkillFrame:EnableMouse(false) +end + +function TSUI.CleanupBlizzardCraft() + if not CraftFrame then return end + CraftFrame:SetScript("OnHide", function() end) + if HideUIPanel then pcall(HideUIPanel, CraftFrame) end + if CraftFrame:IsVisible() then CraftFrame:Hide() end + CraftFrame:SetAlpha(0); CraftFrame:EnableMouse(false) +end + +-------------------------------------------------------------------------------- +-- Initialize (left-right layout: list on left, detail on right) +-------------------------------------------------------------------------------- +function TSUI:Initialize() + if S.MainFrame then return end + local MF = CreateFrame("Frame", "SFramesTradeSkillFrame", UIParent) + S.MainFrame = MF + MF:SetWidth(L.FRAME_W); MF:SetHeight(L.FRAME_H) + MF:SetPoint("LEFT", UIParent, "LEFT", 36, 0) + MF:SetFrameStrata("HIGH"); MF:SetToplevel(true); MF:EnableMouse(true) + MF:SetMovable(true); MF:RegisterForDrag("LeftButton") + MF:SetScript("OnDragStart", function() this:StartMoving() end) + MF:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + TSUI.SetRoundBackdrop(MF); TSUI.CreateShadow(MF) + + local font = TSUI.GetFont() + + -- ═══ Header (full width) ═════════════════════════════════════════ + local header = CreateFrame("Frame", nil, MF) + header:SetPoint("TOPLEFT", 0, 0); header:SetPoint("TOPRIGHT", 0, 0) + header:SetHeight(L.HEADER_H) + header:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8" }) + header:SetBackdropColor(T.headerBg[1], T.headerBg[2], T.headerBg[3], T.headerBg[4]) + + local titleFS = header:CreateFontString(nil, "OVERLAY") + local titleIco = SFrames:CreateIcon(header, "profession", 16) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("TOPLEFT", header, "TOPLEFT", L.SIDE_PAD, -8) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + titleFS:SetFont(font, 14, "OUTLINE") + titleFS:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + titleFS:SetPoint("RIGHT", header, "RIGHT", -30, 0) + titleFS:SetJustifyH("LEFT"); titleFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + MF.titleFS = titleFS + + local pf = CreateFrame("Frame", nil, header) + pf:SetPoint("BOTTOMLEFT", header, "BOTTOMLEFT", L.SIDE_PAD, 5) + pf:SetPoint("BOTTOMRIGHT", header, "BOTTOMRIGHT", -L.SIDE_PAD - 24, 5) + pf:SetHeight(10) + pf:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + pf:SetBackdropColor(T.progressBg[1], T.progressBg[2], T.progressBg[3], T.progressBg[4]) + pf:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], 0.5) + + local pb = pf:CreateTexture(nil, "ARTWORK") + pb:SetTexture("Interface\\Buttons\\WHITE8X8") + pb:SetPoint("TOPLEFT", pf, "TOPLEFT", 2, -2); pb:SetPoint("BOTTOMLEFT", pf, "BOTTOMLEFT", 2, 2) + pb:SetWidth(1); pb:SetVertexColor(T.progressFill[1], T.progressFill[2], T.progressFill[3], T.progressFill[4]) + MF.progressBar = pb; MF.progressFrame = pf + + local pt = pf:CreateFontString(nil, "OVERLAY") + pt:SetFont(font, 8, "OUTLINE"); pt:SetPoint("CENTER", pf, "CENTER", 0, 0) + pt:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]); MF.progressText = pt + + local closeBtn = CreateFrame("Button", nil, header) + closeBtn:SetWidth(20); closeBtn:SetHeight(20); closeBtn:SetPoint("TOPRIGHT", header, "TOPRIGHT", -8, -6) + local closeTex = closeBtn:CreateTexture(nil, "ARTWORK") + closeTex:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + closeTex:SetTexCoord(0.25, 0.375, 0, 0.125); closeTex:SetAllPoints() + closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + closeBtn:SetScript("OnClick", function() S.MainFrame:Hide() end) + closeBtn:SetScript("OnEnter", function() closeTex:SetVertexColor(1, 0.6, 0.7) end) + closeBtn:SetScript("OnLeave", function() closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) end) + + -- Separators + local hsep = MF:CreateTexture(nil, "ARTWORK") + hsep:SetTexture("Interface\\Buttons\\WHITE8X8"); hsep:SetHeight(1) + hsep:SetPoint("TOPLEFT", MF, "TOPLEFT", 4, -L.HEADER_H) + hsep:SetPoint("TOPRIGHT", MF, "TOPRIGHT", -4, -L.HEADER_H) + hsep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + local vdiv = MF:CreateTexture(nil, "ARTWORK") + vdiv:SetTexture("Interface\\Buttons\\WHITE8X8"); vdiv:SetWidth(1) + vdiv:SetPoint("TOP", MF, "TOPLEFT", L.LEFT_W, -(L.HEADER_H + 2)) + vdiv:SetPoint("BOTTOM", MF, "BOTTOMLEFT", L.LEFT_W, 4) + vdiv:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- ═══ LEFT PANEL: Filters + Recipe List ═══════════════════════════ + + local fb = CreateFrame("Frame", nil, MF) + fb:SetPoint("TOPLEFT", MF, "TOPLEFT", L.SIDE_PAD, -(L.HEADER_H + 4)) + fb:SetWidth(L.LEFT_W - L.SIDE_PAD * 2); fb:SetHeight(22) + + local fAll = TSUI.CreateFilterBtn(fb, "全部", 38) + fAll:SetPoint("LEFT", fb, "LEFT", 0, 0) + fAll:SetScript("OnClick", function() S.currentFilter = "all"; TSUI.FullUpdate() end) + MF.filterAll = fAll + + local fAvail = TSUI.CreateFilterBtn(fb, "可做", 38) + fAvail:SetPoint("LEFT", fAll, "RIGHT", 3, 0) + fAvail:SetScript("OnClick", function() S.currentFilter = "available"; TSUI.FullUpdate() end) + MF.filterAvail = fAvail + + local fOpt = TSUI.CreateFilterBtn(fb, "橙/黄", 42) + fOpt:SetPoint("LEFT", fAvail, "RIGHT", 3, 0) + fOpt:SetScript("OnClick", function() S.currentFilter = "optimal"; TSUI.FullUpdate() end) + MF.filterOptimal = fOpt + + local fMat = TSUI.CreateFilterBtn(fb, "有材料", 46) + fMat:SetPoint("LEFT", fOpt, "RIGHT", 3, 0) + fMat:SetScript("OnClick", function() S.currentFilter = "hasmat"; TSUI.FullUpdate() end) + MF.filterHasMat = fMat + + local fUnlearned = TSUI.CreateFilterBtn(fb, "未学", 38) + fUnlearned:SetPoint("LEFT", fMat, "RIGHT", 3, 0) + fUnlearned:SetScript("OnClick", function() S.currentFilter = "unlearned"; TSUI.FullUpdate() end) + MF.filterUnlearned = fUnlearned + + local sb = CreateFrame("EditBox", "SFramesTSSearchBox", MF) + sb:SetPoint("TOPLEFT", MF, "TOPLEFT", L.SIDE_PAD, -(L.HEADER_H + 28)) + sb:SetWidth(L.LEFT_W - L.SIDE_PAD * 2); sb:SetHeight(20) + sb:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + sb:SetBackdropColor(T.searchBg[1], T.searchBg[2], T.searchBg[3], T.searchBg[4]) + sb:SetBackdropBorderColor(T.searchBorder[1], T.searchBorder[2], T.searchBorder[3], T.searchBorder[4]) + sb:SetFont(font, 11); sb:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + sb:SetTextInsets(6, 6, 2, 2); sb:SetAutoFocus(false); sb:SetMaxLetters(30) + sb:SetScript("OnEscapePressed", function() this:ClearFocus() end) + sb:SetScript("OnEnterPressed", function() this:ClearFocus() end) + sb:SetScript("OnTextChanged", function() S.searchText = this:GetText() or ""; TSUI.FullUpdate() end) + MF.searchBox = sb + + local sLabel = sb:CreateFontString(nil, "OVERLAY") + sLabel:SetFont(font, 11, "OUTLINE"); sLabel:SetPoint("LEFT", sb, "LEFT", 6, 0) + sLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3], 0.6); sLabel:SetText("搜索...") + MF.searchLabel = sLabel + sb:SetScript("OnEditFocusGained", function() sLabel:Hide() end) + sb:SetScript("OnEditFocusLost", function() if (this:GetText() or "") == "" then sLabel:Show() end end) + + -- List scroll area (fills left panel below filters) + local listTop = L.HEADER_H + L.FILTER_H + 4 + local ls = CreateFrame("ScrollFrame", "SFramesTSListScroll", MF) + ls:SetPoint("TOPLEFT", MF, "TOPLEFT", L.SIDE_PAD, -listTop) + ls:SetPoint("BOTTOMRIGHT", MF, "BOTTOMLEFT", L.SIDE_PAD + L.LIST_ROW_W, 6) + + local lc = CreateFrame("Frame", "SFramesTSListContent", ls) + lc:SetWidth(L.LIST_ROW_W); lc:SetHeight(1) + ls:SetScrollChild(lc) + ls:EnableMouseWheel(true) + + -- Scrollbar track + local sbTrack = CreateFrame("Frame", nil, MF) + sbTrack:SetWidth(L.SCROLLBAR_W) + sbTrack:SetPoint("TOPLEFT", ls, "TOPRIGHT", 2, 0) + sbTrack:SetPoint("BOTTOMLEFT", ls, "BOTTOMRIGHT", 2, 0) + sbTrack:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", tile = false, tileSize = 0, + edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + sbTrack:SetBackdropColor(T.progressBg[1], T.progressBg[2], T.progressBg[3], 0.6) + sbTrack:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], 0.3) + + -- Scrollbar thumb + local sbThumb = CreateFrame("Button", nil, sbTrack) + sbThumb:SetWidth(L.SCROLLBAR_W - 2); sbThumb:SetHeight(30) + sbThumb:SetPoint("TOP", sbTrack, "TOP", 0, -1) + sbThumb:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", tile = false, tileSize = 0, + edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + sbThumb:SetBackdropColor(T.progressFill[1], T.progressFill[2], T.progressFill[3], 0.7) + sbThumb:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], 0.5) + sbThumb:EnableMouse(true); sbThumb:SetMovable(true) + sbThumb:RegisterForDrag("LeftButton") + sbThumb._dragging = false + + sbThumb:SetScript("OnEnter", function() + this:SetBackdropColor(T.progressFill[1], T.progressFill[2], T.progressFill[3], 1) + end) + sbThumb:SetScript("OnLeave", function() + this:SetBackdropColor(T.progressFill[1], T.progressFill[2], T.progressFill[3], 0.7) + end) + sbThumb:SetScript("OnDragStart", function() + this._dragging = true + this._startY = select(2, GetCursorPosition()) / (this:GetEffectiveScale()) + this._startScroll = ls:GetVerticalScroll() + end) + sbThumb:SetScript("OnDragStop", function() this._dragging = false end) + sbThumb:SetScript("OnUpdate", function() + if not this._dragging then return end + local cursorY = select(2, GetCursorPosition()) / (this:GetEffectiveScale()) + local delta = this._startY - cursorY + local trackH = sbTrack:GetHeight() - this:GetHeight() + if trackH <= 0 then return end + local scrollMax = TSUI.GetScrollMax() + local newScroll = this._startScroll + (delta / trackH) * scrollMax + newScroll = math.max(0, math.min(scrollMax, newScroll)) + ls:SetVerticalScroll(newScroll) + TSUI.UpdateScrollbar() + end) + + sbTrack:EnableMouse(true) + sbTrack:SetScript("OnMouseDown", function() + local trackTop = sbTrack:GetTop() + local cursorY = select(2, GetCursorPosition()) / (sbTrack:GetEffectiveScale()) + local clickRatio = (trackTop - cursorY) / sbTrack:GetHeight() + clickRatio = math.max(0, math.min(1, clickRatio)) + ls:SetVerticalScroll(clickRatio * TSUI.GetScrollMax()) + TSUI.UpdateScrollbar() + end) + + MF.sbTrack = sbTrack; MF.sbThumb = sbThumb + + function TSUI.GetScrollMax() + local contentH = ls.content and ls.content:GetHeight() or 0 + local viewH = ls:GetHeight() or 0 + return math.max(0, contentH - viewH) + end + + function TSUI.UpdateScrollbar() + if not MF.sbThumb or not MF.sbTrack then return end + local scrollMax = TSUI.GetScrollMax() + if scrollMax <= 0 then MF.sbThumb:Hide(); return end + MF.sbThumb:Show() + local trackH = MF.sbTrack:GetHeight() + local curScroll = ls:GetVerticalScroll() + local ratio = curScroll / scrollMax + ratio = math.max(0, math.min(1, ratio)) + local thumbH = math.max(20, trackH * (trackH / (trackH + scrollMax))) + MF.sbThumb:SetHeight(thumbH) + local maxOffset = trackH - thumbH - 2 + MF.sbThumb:ClearAllPoints() + MF.sbThumb:SetPoint("TOP", MF.sbTrack, "TOP", 0, -(1 + ratio * maxOffset)) + end + + ls:SetScript("OnMouseWheel", function() + local cur = this:GetVerticalScroll(); local mx = TSUI.GetScrollMax() + if arg1 > 0 then this:SetVerticalScroll(math.max(0, cur - L.SCROLL_STEP)) + else this:SetVerticalScroll(math.min(mx, cur + L.SCROLL_STEP)) end + TSUI.UpdateScrollbar() + end) + ls:SetScript("OnScrollRangeChanged", function() TSUI.UpdateScrollbar() end) + ls.content = lc; MF.listScroll = ls + + for i = 1, L.MAX_ROWS do + local row = TSUI.CreateListRow(lc, i) + row:SetWidth(L.LIST_ROW_W) + row:EnableMouseWheel(true) + row:SetScript("OnMouseWheel", function() + local sf = S.MainFrame.listScroll + local cur = sf:GetVerticalScroll() + local mx = TSUI.GetScrollMax() + if arg1 > 0 then sf:SetVerticalScroll(math.max(0, cur - L.SCROLL_STEP)) + else sf:SetVerticalScroll(math.min(mx, cur + L.SCROLL_STEP)) end + TSUI.UpdateScrollbar() + end) + row:SetScript("OnClick", function() + if IsShiftKeyDown() and this.recipeIndex and not this.isHeader then + TSUI.LinkRecipeToChat(this.recipeIndex) + elseif IsShiftKeyDown() and this.unlearnedData then + TSUI.LinkUnlearnedToChat(this.unlearnedData) + elseif this.isHeader and this.catName then + TSUI.ToggleCategory(this.catName) + elseif this.recipeIndex then + TSUI.SelectRecipe(this.recipeIndex) + elseif this.unlearnedData then + TSUI.SelectUnlearned(this.unlearnedData) + end + end) + S.rowButtons[i] = row + end + + -- ═══ RIGHT PANEL: Recipe Detail ══════════════════════════════════ + + local rightX = L.LEFT_W + L.SIDE_PAD + local rightW = L.CONTENT_W + + local det = CreateFrame("Frame", nil, MF) + det:SetPoint("TOPLEFT", MF, "TOPLEFT", rightX, -(L.HEADER_H + 6)) + det:SetPoint("BOTTOMRIGHT", MF, "BOTTOMRIGHT", -L.SIDE_PAD, L.BOTTOM_H + 2) + MF.detail = det + + -- Recipe icon + local dIF = CreateFrame("Frame", nil, det) + dIF:SetWidth(40); dIF:SetHeight(40); dIF:SetPoint("TOPLEFT", det, "TOPLEFT", 0, 0) + dIF:SetBackdrop({ bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 2, right = 2, top = 2, bottom = 2 } }) + dIF:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + dIF:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + dIF:Hide(); det.iconFrame = dIF + + local dIcon = dIF:CreateTexture(nil, "ARTWORK") + dIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + dIcon:SetPoint("TOPLEFT", dIF, "TOPLEFT", 3, -3) + dIcon:SetPoint("BOTTOMRIGHT", dIF, "BOTTOMRIGHT", -3, 3) + det.icon = dIcon + + local dGlow = dIF:CreateTexture(nil, "OVERLAY") + dGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + dGlow:SetBlendMode("ADD"); dGlow:SetAlpha(0.8) + dGlow:SetWidth(80); dGlow:SetHeight(80) + dGlow:SetPoint("CENTER", dIF, "CENTER", 0, 0) + dGlow:Hide(); det.qualGlow = dGlow + + dIF:EnableMouse(true) + dIF:SetScript("OnEnter", function() + if S.selectedIndex then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + local ok + if S.currentMode == "craft" then + local link = GetCraftItemLink and GetCraftItemLink(S.selectedIndex) + if link then + ok = pcall(GameTooltip.SetCraftItem, GameTooltip, S.selectedIndex) + else + ok = pcall(GameTooltip.SetCraftSpell, GameTooltip, S.selectedIndex) + end + else ok = pcall(GameTooltip.SetTradeSkillItem, GameTooltip, S.selectedIndex) end + if ok then GameTooltip:Show() else GameTooltip:Hide() end + end + end) + dIF:SetScript("OnLeave", function() GameTooltip:Hide() end) + + local dName = det:CreateFontString(nil, "OVERLAY") + dName:SetFont(font, 13, "OUTLINE") + dName:SetPoint("TOPLEFT", dIF, "TOPRIGHT", 8, -2) + dName:SetPoint("RIGHT", det, "RIGHT", -4, 0) + dName:SetJustifyH("LEFT"); dName:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + det.nameFS = dName + + local dMade = det:CreateFontString(nil, "OVERLAY") + dMade:SetFont(font, 10, "OUTLINE") + dMade:SetPoint("TOPLEFT", dName, "BOTTOMLEFT", 0, -2) + dMade:SetJustifyH("LEFT"); det.madeFS = dMade + + local dCD = det:CreateFontString(nil, "OVERLAY") + dCD:SetFont(font, 10, "OUTLINE") + dCD:SetPoint("TOPLEFT", det, "TOPLEFT", 0, -48) + dCD:SetPoint("RIGHT", det, "RIGHT", -4, 0) + dCD:SetJustifyH("LEFT"); det.cooldownFS = dCD + + local dTools = det:CreateFontString(nil, "OVERLAY") + dTools:SetFont(font, 10, "OUTLINE") + dTools:SetPoint("TOPLEFT", dCD, "BOTTOMLEFT", 0, -2) + dTools:SetPoint("RIGHT", det, "RIGHT", -4, 0) + dTools:SetJustifyH("LEFT"); det.toolsFS = dTools + + local dDesc = det:CreateFontString(nil, "OVERLAY") + dDesc:SetFont(font, 10) + dDesc:SetPoint("TOPLEFT", dTools, "BOTTOMLEFT", 0, -2) + dDesc:SetPoint("RIGHT", det, "RIGHT", -4, 0) + dDesc:SetJustifyH("LEFT") + dDesc:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]); det.descFS = dDesc + + -- ── Current Difficulty ────────────────────────────────────────── + local diffSep1 = det:CreateTexture(nil, "ARTWORK") + diffSep1:SetTexture("Interface\\Buttons\\WHITE8X8"); diffSep1:SetHeight(1) + diffSep1:SetPoint("TOPLEFT", det, "TOPLEFT", 0, -86) + diffSep1:SetPoint("RIGHT", det, "RIGHT", 0, 0) + diffSep1:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], 0.3) + + local diffDot = det:CreateTexture(nil, "ARTWORK") + diffDot:SetTexture("Interface\\Buttons\\WHITE8X8") + diffDot:SetWidth(10); diffDot:SetHeight(10) + diffDot:SetPoint("TOPLEFT", det, "TOPLEFT", 2, -94) + diffDot:Hide(); det.diffDot = diffDot + + local diffFS = det:CreateFontString(nil, "OVERLAY") + diffFS:SetFont(font, 11, "OUTLINE") + diffFS:SetPoint("LEFT", diffDot, "RIGHT", 6, 0) + diffFS:SetJustifyH("LEFT"); det.diffFS = diffFS + + local sourceFS = det:CreateFontString(nil, "OVERLAY") + sourceFS:SetFont(font, 10, "OUTLINE") + sourceFS:SetPoint("TOPLEFT", det, "TOPLEFT", 2, -108) + sourceFS:SetJustifyH("LEFT"); det.sourceFS = sourceFS + + -- ── Reagent Section ───────────────────────────────────────────── + local reagSep = det:CreateTexture(nil, "ARTWORK") + reagSep:SetTexture("Interface\\Buttons\\WHITE8X8"); reagSep:SetHeight(1) + reagSep:SetPoint("TOPLEFT", det, "TOPLEFT", 0, -126) + reagSep:SetPoint("RIGHT", det, "RIGHT", 0, 0) + reagSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], 0.3) + + local rLabel = det:CreateFontString(nil, "OVERLAY") + rLabel:SetFont(font, 10, "OUTLINE") + rLabel:SetPoint("TOPLEFT", det, "TOPLEFT", 0, -132) + rLabel:SetTextColor(T.sectionTitle[1], T.sectionTitle[2], T.sectionTitle[3]) + rLabel:SetText("所需材料:") + + local rStartY = -150 + for i = 1, L.MAX_REAGENTS do + local slot = TSUI.CreateReagentSlot(det, i) + local col = math.mod(i - 1, 2) + local ri = math.floor((i - 1) / 2) + slot:SetPoint("TOPLEFT", det, "TOPLEFT", col * (rightW / 2 + 2), rStartY - ri * 34) + S.reagentSlots[i] = slot + end + + -- ── Bottom Bar (right panel bottom) ───────────────────────────── + local bsep = MF:CreateTexture(nil, "ARTWORK") + bsep:SetTexture("Interface\\Buttons\\WHITE8X8"); bsep:SetHeight(1) + bsep:SetPoint("BOTTOMLEFT", MF, "BOTTOMLEFT", L.LEFT_W + 4, L.BOTTOM_H) + bsep:SetPoint("BOTTOMRIGHT", MF, "BOTTOMRIGHT", -4, L.BOTTOM_H) + bsep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + MF.spinner = TSUI.CreateSpinner(MF, rightX, 8) + + local cBtn = TSUI.CreateActionBtn(MF, "制作", 70) + cBtn:SetPoint("BOTTOMRIGHT", MF, "BOTTOMRIGHT", -(L.SIDE_PAD + 76), 8) + cBtn:SetScript("OnClick", function() + if this.disabled then return end + if S.selectedIndex then + local amt = S.MainFrame.spinner:GetValue() + if S.currentMode == "craft" then + for ci = 1, amt do API.DoRecipe(S.selectedIndex, 1) end + else API.DoRecipe(S.selectedIndex, amt) end + end + end) + MF.createBtn = cBtn + + local caBtn = TSUI.CreateActionBtn(MF, "全部制作", 70) + caBtn:SetPoint("BOTTOMRIGHT", MF, "BOTTOMRIGHT", -L.SIDE_PAD, 8) + caBtn:SetScript("OnClick", function() + if this.disabled then return end + if S.selectedIndex then + local _, _, na = API.GetRecipeInfo(S.selectedIndex) + if na and na > 0 then + if S.currentMode == "craft" then + for ci = 1, na do API.DoRecipe(S.selectedIndex, 1) end + else API.DoRecipe(S.selectedIndex, na) end + end + end + end) + MF.createAllBtn = caBtn + + -- ═══ Events ══════════════════════════════════════════════════════ + MF:SetScript("OnHide", function() + S.switchStartTime = nil + API.CloseRecipe() + if S.currentMode == "tradeskill" then TSUI.CleanupBlizzardTradeSkill() + else TSUI.CleanupBlizzardCraft() end + end) + + MF:RegisterEvent("TRADE_SKILL_SHOW") + MF:RegisterEvent("TRADE_SKILL_UPDATE") + MF:RegisterEvent("TRADE_SKILL_CLOSE") + MF:RegisterEvent("CRAFT_SHOW") + MF:RegisterEvent("CRAFT_UPDATE") + MF:RegisterEvent("CRAFT_CLOSE") + MF:SetScript("OnEvent", function() + if event == "TRADE_SKILL_SHOW" then + S.switchStartTime = nil + S.currentMode = "tradeskill" + if TradeSkillFrame then + TradeSkillFrame:SetScript("OnHide", function() end) + TradeSkillFrame:SetAlpha(0); TradeSkillFrame:EnableMouse(false) + end + TSUI.ResetAndShow() + S.MainFrame._hideBlizzTimer = 0 + S.MainFrame:SetScript("OnUpdate", function() + if not this._hideBlizzTimer then return end + this._hideBlizzTimer = this._hideBlizzTimer + arg1 + if this._hideBlizzTimer > 0.05 then + this._hideBlizzTimer = nil; this:SetScript("OnUpdate", nil) + TSUI.CleanupBlizzardTradeSkill() + end + end) + elseif event == "TRADE_SKILL_UPDATE" then + if S.MainFrame:IsVisible() and S.currentMode == "tradeskill" then + TSUI.UpdateProgressBar(); TSUI.FullUpdate() + end + elseif event == "TRADE_SKILL_CLOSE" then + TSUI.CleanupBlizzardTradeSkill() + if TSUI.IsTabSwitching() then + -- switching: keep panel open + else + S.MainFrame._hideBlizzTimer = nil + S.MainFrame:SetScript("OnUpdate", nil) + S.MainFrame:Hide() + end + elseif event == "CRAFT_SHOW" then + S.switchStartTime = nil + S.currentMode = "craft" + if CraftFrame then + CraftFrame:SetScript("OnHide", function() end) + CraftFrame:SetAlpha(0); CraftFrame:EnableMouse(false) + end + TSUI.ResetAndShow() + S.MainFrame._hideBlizzTimer = 0 + S.MainFrame:SetScript("OnUpdate", function() + if not this._hideBlizzTimer then return end + this._hideBlizzTimer = this._hideBlizzTimer + arg1 + if this._hideBlizzTimer > 0.05 then + this._hideBlizzTimer = nil; this:SetScript("OnUpdate", nil) + TSUI.CleanupBlizzardCraft() + end + end) + elseif event == "CRAFT_UPDATE" then + if S.MainFrame:IsVisible() and S.currentMode == "craft" then + TSUI.UpdateProgressBar(); TSUI.FullUpdate() + end + elseif event == "CRAFT_CLOSE" then + TSUI.CleanupBlizzardCraft() + if TSUI.IsTabSwitching() then + -- switching: keep panel open + else + S.MainFrame._hideBlizzTimer = nil + S.MainFrame:SetScript("OnUpdate", nil) + S.MainFrame:Hide() + end + end + end) + TSUI.CreateProfTabs(MF) + + MF:Hide() + tinsert(UISpecialFrames, "SFramesTradeSkillFrame") +end + +function TSUI.ResetAndShow() + if NanamiTradeSkillDB_Init then NanamiTradeSkillDB_Init() end + S.selectedIndex = nil; S.selectedUnlearned = nil; S.currentFilter = "all"; S.searchText = "" + S.collapsedCats = {}; S.craftAmount = 1 + if S.MainFrame.searchBox then S.MainFrame.searchBox:SetText("") end + if S.MainFrame.spinner then S.MainFrame.spinner:SetValue(1) end + if S.MainFrame.listScroll then S.MainFrame.listScroll:SetVerticalScroll(0) end + TSUI.UpdateProgressBar(); S.MainFrame:Show(); TSUI.FullUpdate() + TSUI.UpdateScrollbar() + TSUI.UpdateProfTabs() + for _, entry in ipairs(S.displayList) do + if entry.type == "recipe" then + TSUI.SelectRecipe(entry.data.index); break + end + end +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:RegisterEvent("ADDON_LOADED") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableTradeSkill == nil then SFramesDB.enableTradeSkill = true end + if SFramesDB.enableTradeSkill ~= false then TSUI:Initialize() end + elseif event == "ADDON_LOADED" then + if arg1 == "Blizzard_TradeSkillUI" then + if S.MainFrame and TradeSkillFrame then TSUI.HideBlizzardTradeSkill() end + elseif arg1 == "Blizzard_CraftUI" then + if S.MainFrame and CraftFrame then TSUI.HideBlizzardCraft() end + end + end +end) diff --git a/TrainerUI.lua b/TrainerUI.lua new file mode 100644 index 0000000..53109cb --- /dev/null +++ b/TrainerUI.lua @@ -0,0 +1,1234 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Trainer UI (TrainerUI.lua) +-- Replaces ClassTrainerFrame with Nanami-UI styled interface +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.TrainerUI = {} +local TUI = SFrames.TrainerUI +SFramesDB = SFramesDB or {} + +-------------------------------------------------------------------------------- +-- Theme (Pink Cat-Paw) +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend({ + moneyGold = { 1, 0.84, 0.0 }, + moneySilver = { 0.78, 0.78, 0.78 }, + moneyCopper = { 0.71, 0.43, 0.18 }, + available = { 0.25, 1.0, 0.25 }, + unavailable = { 0.80, 0.20, 0.20 }, + used = { 0.50, 0.50, 0.50 }, +}) + +local QUALITY_COLORS = { + [0] = { 0.62, 0.62, 0.62 }, [1] = { 1, 1, 1 }, + [2] = { 0.12, 1, 0 }, [3] = { 0.0, 0.44, 0.87 }, + [4] = { 0.64, 0.21, 0.93 }, [5] = { 1, 0.5, 0 }, +} + +local function ColorToQuality(r, g, b) + if not r then return nil end + if r > 0.9 and g > 0.35 and g < 0.65 and b < 0.15 then return 5 end + if r > 0.5 and r < 0.8 and g < 0.35 and b > 0.8 then return 4 end + if r < 0.15 and g > 0.3 and g < 0.6 and b > 0.7 then return 3 end + if r < 0.25 and g > 0.85 and b < 0.15 then return 2 end + if r > 0.5 and r < 0.75 and g > 0.5 and g < 0.75 and b > 0.5 and b < 0.75 then return 0 end + return 1 +end + +-------------------------------------------------------------------------------- +-- Layout +-------------------------------------------------------------------------------- +local FRAME_W = 380 +local FRAME_H = 540 +local HEADER_H = 34 +local SIDE_PAD = 14 +local CONTENT_W = FRAME_W - SIDE_PAD * 2 +local FILTER_H = 28 +local LIST_ROW_H = 32 +local CAT_ROW_H = 20 +local DETAIL_H = 160 +local BOTTOM_H = 52 +local SCROLL_STEP = 40 +local MAX_ROWS = 60 + +-------------------------------------------------------------------------------- +-- State +-------------------------------------------------------------------------------- +local MainFrame = nil +local selectedIndex = nil +local currentFilter = "all" +local displayList = {} +local rowButtons = {} +local collapsedCats = {} +local function HideBlizzardTrainer() + if not ClassTrainerFrame then return end + ClassTrainerFrame:SetScript("OnHide", function() end) + if ClassTrainerFrame:IsVisible() then + if HideUIPanel then + pcall(HideUIPanel, ClassTrainerFrame) + else + ClassTrainerFrame:Hide() + end + end + ClassTrainerFrame:SetAlpha(0) + ClassTrainerFrame:EnableMouse(false) + ClassTrainerFrame:ClearAllPoints() + ClassTrainerFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMRIGHT", 2000, 2000) +end + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(T.panelBg[1], T.panelBg[2], T.panelBg[3], T.panelBg[4]) + frame:SetBackdropBorderColor(T.panelBorder[1], T.panelBorder[2], T.panelBorder[3], T.panelBorder[4]) +end + +local function CreateShadow(parent) + local s = CreateFrame("Frame", nil, parent) + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -4, 4) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", 4, -4) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.45) + s:SetBackdropBorderColor(0, 0, 0, 0.6) + s:SetFrameLevel(math.max(0, parent:GetFrameLevel() - 1)) + return s +end + +local function FormatMoneyText(copper) + if not copper or copper <= 0 then return "" end + local g = math.floor(copper / 10000) + local s = math.floor(math.mod(copper, 10000) / 100) + local c = math.mod(copper, 100) + local parts = {} + if g > 0 then table.insert(parts, "|cffffd700" .. g .. "g|r") end + if s > 0 then table.insert(parts, "|cffc7c7cf" .. s .. "s|r") end + if c > 0 then table.insert(parts, "|cffeda55f" .. c .. "c|r") end + if table.getn(parts) == 0 then return "|cffc7c7cf0c|r" end + return table.concat(parts, " ") +end + +local function SetMoneyFrame(moneyFrame, value) + if not moneyFrame then return end + value = tonumber(value) or 0 + if value < 0 then value = 0 end + if SmallMoneyFrame_SetAmount then + pcall(SmallMoneyFrame_SetAmount, moneyFrame, value) + elseif MoneyFrame_Update and moneyFrame.GetName then + local name = moneyFrame:GetName() + if name and name ~= "" then + pcall(MoneyFrame_Update, name, value) + end + end +end + +local function IsServiceHeader(index) + local name, _, category = GetTrainerServiceInfo(index) + if not name then return false end + local hasIcon = GetTrainerServiceIcon and GetTrainerServiceIcon(index) + if not hasIcon or hasIcon == "" then return true end + local ok, cost = pcall(GetTrainerServiceCost, index) + if not ok then return true end + if category ~= "available" and category ~= "unavailable" and category ~= "used" then + return true + end + return false +end + +local scanTip = nil + +local function GetServiceTooltipInfo(index) + if not scanTip then + scanTip = CreateFrame("GameTooltip", "SFramesTrainerScanTip", nil, "GameTooltipTemplate") + end + scanTip:SetOwner(WorldFrame, "ANCHOR_NONE") + scanTip:ClearLines() + local ok = pcall(scanTip.SetTrainerService, scanTip, index) + if not ok then return "", "" end + + local infoLines = {} + local descLines = {} + local numLines = scanTip:NumLines() + local foundDesc = false + + for i = 2, numLines do + local leftFS = _G["SFramesTrainerScanTipTextLeft" .. i] + local rightFS = _G["SFramesTrainerScanTipTextRight" .. i] + local leftText = leftFS and leftFS:GetText() or "" + local rightText = rightFS and rightFS:GetText() or "" + + if leftText == "" and rightText == "" then + if not foundDesc and table.getn(infoLines) > 0 then + foundDesc = true + end + else + local line + if rightText ~= "" and leftText ~= "" then + line = leftText .. " " .. rightText + elseif leftText ~= "" then + line = leftText + else + line = rightText + end + + local isYellow = leftFS and leftFS.GetTextColor and true + local r, g, b + if leftFS and leftFS.GetTextColor then + r, g, b = leftFS:GetTextColor() + end + local isWhiteOrYellow = r and (r > 0.9 and g > 0.75) + + if not foundDesc and rightText ~= "" then + table.insert(infoLines, line) + elseif not foundDesc and not isWhiteOrYellow and string.len(leftText) < 30 then + table.insert(infoLines, line) + else + foundDesc = true + table.insert(descLines, line) + end + end + end + scanTip:Hide() + return table.concat(infoLines, "\n"), table.concat(descLines, "\n") +end + +local function GetServiceQuality(index) + if not scanTip then + scanTip = CreateFrame("GameTooltip", "SFramesTrainerScanTip", nil, "GameTooltipTemplate") + end + scanTip:SetOwner(WorldFrame, "ANCHOR_NONE") + scanTip:ClearLines() + local ok = pcall(scanTip.SetTrainerService, scanTip, index) + if not ok then scanTip:Hide() return nil end + local firstLine = _G["SFramesTrainerScanTipTextLeft1"] + if not firstLine or not firstLine.GetTextColor then + scanTip:Hide() + return nil + end + local r, g, b = firstLine:GetTextColor() + scanTip:Hide() + return ColorToQuality(r, g, b) +end + +-------------------------------------------------------------------------------- +-- Filter Button Factory +-------------------------------------------------------------------------------- +local function CreateFilterBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 60) + btn:SetHeight(20) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.5) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 11, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end) + btn:SetScript("OnLeave", function() + if this.active then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 1) + else + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.5) + end + end) + + function btn:SetActive(flag) + self.active = flag + if flag then + self:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + self:SetBackdropBorderColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 1) + self.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + else + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + self:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], 0.5) + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end + + return btn +end + +-------------------------------------------------------------------------------- +-- Action Button Factory +-------------------------------------------------------------------------------- +local function CreateActionBtn(parent, text, w) + local btn = CreateFrame("Button", nil, parent) + btn:SetWidth(w or 100) + btn:SetHeight(28) + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + btn:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 12, "OUTLINE") + fs:SetPoint("CENTER", 0, 0) + fs:SetText(text) + fs:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + btn.label = fs + + btn.disabled = false + function btn:SetDisabled(flag) + self.disabled = flag + if flag then + self.label:SetTextColor(T.btnDisabledText[1], T.btnDisabledText[2], T.btnDisabledText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], 0.5) + else + self.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + self:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + end + end + + btn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + end) + btn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + end) + + return btn +end + +-------------------------------------------------------------------------------- +-- List Row Factory (reusable for both headers and services) +-------------------------------------------------------------------------------- +local function CreateListRow(parent, idx) + local row = CreateFrame("Button", nil, parent) + row:SetWidth(CONTENT_W) + row:SetHeight(LIST_ROW_H) + + local iconFrame = CreateFrame("Frame", nil, row) + iconFrame:SetWidth(LIST_ROW_H - 4) + iconFrame:SetHeight(LIST_ROW_H - 4) + iconFrame:SetPoint("LEFT", row, "LEFT", 0, 0) + iconFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 12, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + row.iconFrame = iconFrame + + local icon = iconFrame:CreateTexture(nil, "ARTWORK") + icon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + icon:SetPoint("TOPLEFT", iconFrame, "TOPLEFT", 3, -3) + icon:SetPoint("BOTTOMRIGHT", iconFrame, "BOTTOMRIGHT", -3, 3) + row.icon = icon + + local qualGlow = iconFrame:CreateTexture(nil, "OVERLAY") + qualGlow:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + qualGlow:SetBlendMode("ADD") + qualGlow:SetAlpha(0.7) + qualGlow:SetWidth((LIST_ROW_H - 4) * 1.8) + qualGlow:SetHeight((LIST_ROW_H - 4) * 1.8) + qualGlow:SetPoint("CENTER", iconFrame, "CENTER", 0, 0) + qualGlow:Hide() + row.qualGlow = qualGlow + + local nameFS = row:CreateFontString(nil, "OVERLAY") + nameFS:SetFont(GetFont(), 12, "OUTLINE") + nameFS:SetPoint("LEFT", iconFrame, "RIGHT", 6, 2) + nameFS:SetPoint("RIGHT", row, "RIGHT", -90, 0) + nameFS:SetJustifyH("LEFT") + nameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + row.nameFS = nameFS + + local subFS = row:CreateFontString(nil, "OVERLAY") + subFS:SetFont(GetFont(), 10, "OUTLINE") + subFS:SetPoint("TOPLEFT", nameFS, "BOTTOMLEFT", 0, -1) + subFS:SetJustifyH("LEFT") + subFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + row.subFS = subFS + + local costFS = row:CreateFontString(nil, "OVERLAY") + costFS:SetFont(GetFont(), 11, "OUTLINE") + costFS:SetPoint("RIGHT", row, "RIGHT", -4, 0) + costFS:SetJustifyH("RIGHT") + costFS:Hide() + row.costFS = costFS + + local costMoney = CreateFrame("Frame", "SFTRow" .. idx .. "Money", row, "SmallMoneyFrameTemplate") + costMoney:SetPoint("RIGHT", row, "RIGHT", -2, 0) + costMoney:SetWidth(100) + costMoney:SetHeight(14) + costMoney:SetFrameLevel(row:GetFrameLevel() + 2) + costMoney:SetScale(0.85) + costMoney:UnregisterAllEvents() + costMoney:SetScript("OnEvent", nil) + costMoney:SetScript("OnShow", nil) + costMoney.moneyType = nil + costMoney.hasPickup = nil + costMoney.small = 1 + row.costMoney = costMoney + + local catFS = row:CreateFontString(nil, "OVERLAY") + catFS:SetFont(GetFont(), 11, "OUTLINE") + catFS:SetPoint("LEFT", row, "LEFT", 4, 0) + catFS:SetJustifyH("LEFT") + catFS:SetTextColor(T.catHeader[1], T.catHeader[2], T.catHeader[3]) + catFS:Hide() + row.catFS = catFS + + local catSep = row:CreateTexture(nil, "ARTWORK") + catSep:SetTexture("Interface\\Buttons\\WHITE8X8") + catSep:SetHeight(1) + catSep:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + catSep:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0) + catSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], 0.3) + catSep:Hide() + row.catSep = catSep + + local highlight = row:CreateTexture(nil, "HIGHLIGHT") + highlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + highlight:SetBlendMode("ADD") + highlight:SetAllPoints(row) + highlight:SetAlpha(0.3) + row.highlight = highlight + + local selectedBg = row:CreateTexture(nil, "ARTWORK") + selectedBg:SetTexture("Interface\\Buttons\\WHITE8X8") + selectedBg:SetAllPoints(row) + selectedBg:SetVertexColor(T.selectedRowBg[1], T.selectedRowBg[2], T.selectedRowBg[3], 0.40) + selectedBg:Hide() + row.selectedBg = selectedBg + + local selectedGlow = row:CreateTexture(nil, "ARTWORK") + selectedGlow:SetTexture("Interface\\Buttons\\WHITE8X8") + selectedGlow:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0) + selectedGlow:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + selectedGlow:SetWidth(4) + selectedGlow:SetVertexColor(1, 0.65, 0.85, 1) + selectedGlow:Hide() + row.selectedGlow = selectedGlow + + local selTop = row:CreateTexture(nil, "OVERLAY") + selTop:SetTexture("Interface\\Buttons\\WHITE8X8") + selTop:SetHeight(1) + selTop:SetPoint("TOPLEFT", row, "TOPLEFT", 0, 0) + selTop:SetPoint("TOPRIGHT", row, "TOPRIGHT", 0, 0) + selTop:SetVertexColor(T.selectedRowBorder[1], T.selectedRowBorder[2], T.selectedRowBorder[3], T.selectedRowBorder[4]) + selTop:Hide() + row.selTop = selTop + + local selBot = row:CreateTexture(nil, "OVERLAY") + selBot:SetTexture("Interface\\Buttons\\WHITE8X8") + selBot:SetHeight(1) + selBot:SetPoint("BOTTOMLEFT", row, "BOTTOMLEFT", 0, 0) + selBot:SetPoint("BOTTOMRIGHT", row, "BOTTOMRIGHT", 0, 0) + selBot:SetVertexColor(T.selectedRowBorder[1], T.selectedRowBorder[2], T.selectedRowBorder[3], T.selectedRowBorder[4]) + selBot:Hide() + row.selBot = selBot + + row.serviceIndex = nil + row.isHeader = false + + row:SetScript("OnEnter", function() + if this.serviceIndex and not this.isHeader then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + local ok = pcall(GameTooltip.SetTrainerService, GameTooltip, this.serviceIndex) + if ok then + GameTooltip:Show() + else + GameTooltip:Hide() + end + end + end) + row:SetScript("OnLeave", function() GameTooltip:Hide() end) + + function row:SetAsHeader(name, collapsed) + self.isHeader = true + self:SetHeight(CAT_ROW_H) + self.iconFrame:Hide() + self.qualGlow:Hide() + self.nameFS:Hide() + self.subFS:Hide() + self.costFS:Hide() + self.costMoney:Hide() + self.selectedBg:Hide() + self.selectedGlow:Hide() + self.selTop:Hide() + self.selBot:Hide() + self.highlight:SetAlpha(0.15) + local arrow = collapsed and "+" or "-" + self.catFS:SetText(arrow .. " " .. (name or "")) + self.catFS:Show() + self.catSep:Show() + end + + function row:SetAsService(svc) + self.isHeader = false + self.serviceIndex = svc.index + self:SetHeight(LIST_ROW_H) + self.iconFrame:Show() + self.nameFS:Show() + self.subFS:Show() + self.costFS:Hide() + self.costMoney:Show() + self.catFS:Hide() + self.catSep:Hide() + self.highlight:SetAlpha(0.3) + + local iconTex = GetTrainerServiceIcon and GetTrainerServiceIcon(svc.index) + self.icon:SetTexture(iconTex) + self.nameFS:SetText(svc.name) + self.subFS:SetText(svc.subText) + + if svc.category == "available" then + self.nameFS:SetTextColor(T.available[1], T.available[2], T.available[3]) + self.icon:SetVertexColor(1, 1, 1) + elseif svc.category == "unavailable" then + self.nameFS:SetTextColor(T.unavailable[1], T.unavailable[2], T.unavailable[3]) + self.icon:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + else + self.nameFS:SetTextColor(T.used[1], T.used[2], T.used[3]) + self.icon:SetVertexColor(T.passive[1], T.passive[2], T.passive[3]) + end + + local qc = QUALITY_COLORS[svc.quality] + if qc and svc.quality and svc.quality >= 2 then + self.qualGlow:SetVertexColor(qc[1], qc[2], qc[3]) + self.qualGlow:Show() + self.iconFrame:SetBackdropBorderColor(qc[1], qc[2], qc[3], 1) + else + self.qualGlow:Hide() + self.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + + local ok, cost = pcall(GetTrainerServiceCost, svc.index) + if ok and cost and cost > 0 then + SetMoneyFrame(self.costMoney, cost) + else + SetMoneyFrame(self.costMoney, 0) + end + end + + function row:Clear() + self.serviceIndex = nil + self.isHeader = false + self.qualGlow:Hide() + self.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + self.selectedBg:Hide() + self.selectedGlow:Hide() + self.selTop:Hide() + self.selBot:Hide() + self.costMoney:Hide() + self:Hide() + end + + return row +end + +-------------------------------------------------------------------------------- +-- Build Display List (with categories) +-------------------------------------------------------------------------------- +local function BuildDisplayList() + displayList = {} + local numServices = GetNumTrainerServices and GetNumTrainerServices() or 0 + if numServices == 0 then return end + + local currentCat = nil + local catServices = {} + local categories = {} + local catOrder = {} + + for i = 1, numServices do + local name, subText, category = GetTrainerServiceInfo(i) + if name then + local isHdr = IsServiceHeader(i) + if isHdr then + currentCat = name + if not catServices[name] then + catServices[name] = {} + table.insert(catOrder, name) + end + else + if not currentCat then + currentCat = "技能" + if not catServices[currentCat] then + catServices[currentCat] = {} + table.insert(catOrder, currentCat) + end + end + local show = false + if currentFilter == "all" then + show = true + elseif currentFilter == (category or "") then + show = true + end + if show then + table.insert(catServices[currentCat], { + index = i, + name = name, + subText = subText or "", + category = category or "unavailable", + quality = GetServiceQuality(i), + }) + end + end + end + end + + local hasCats = table.getn(catOrder) > 1 + + for _, catName in ipairs(catOrder) do + local svcs = catServices[catName] + if table.getn(svcs) > 0 then + if hasCats then + table.insert(displayList, { + type = "header", + name = catName, + collapsed = collapsedCats[catName], + }) + end + if not collapsedCats[catName] then + for _, svc in ipairs(svcs) do + table.insert(displayList, { + type = "service", + data = svc, + }) + end + end + end + end + + if table.getn(catOrder) <= 1 and table.getn(displayList) == 0 then + local allCat = catOrder[1] or "技能" + local svcs = catServices[allCat] or {} + for _, svc in ipairs(svcs) do + table.insert(displayList, { type = "service", data = svc }) + end + end +end + +-------------------------------------------------------------------------------- +-- Update Functions +-------------------------------------------------------------------------------- +local function UpdateList() + if not MainFrame or not MainFrame:IsVisible() then return end + + BuildDisplayList() + + local content = MainFrame.listScroll.content + local count = table.getn(displayList) + local y = 0 + + for i = 1, MAX_ROWS do + local row = rowButtons[i] + if i <= count then + local entry = displayList[i] + row:ClearAllPoints() + + if entry.type == "header" then + row:SetAsHeader(entry.name, entry.collapsed) + row:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + row.catName = entry.name + row:Show() + y = y + CAT_ROW_H + else + row:SetAsService(entry.data) + row:SetPoint("TOPLEFT", content, "TOPLEFT", 0, -y) + row.catName = nil + row:Show() + y = y + LIST_ROW_H + + if selectedIndex == entry.data.index then + row.iconFrame:SetBackdropBorderColor(1, 0.65, 0.85, 1) + row.iconFrame:SetBackdropColor(T.slotSelected[1], T.slotSelected[2], T.slotSelected[3], 0.5) + row.selectedBg:Show() + row.selectedGlow:Show() + row.selTop:Show() + row.selBot:Show() + row.nameFS:SetTextColor(T.selectedNameText[1], T.selectedNameText[2], T.selectedNameText[3]) + else + row.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + row.iconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + row.selectedBg:Hide() + row.selectedGlow:Hide() + row.selTop:Hide() + row.selBot:Hide() + end + end + else + row:Clear() + end + end + + content:SetHeight(math.max(1, y)) +end + +local function UpdateDetail() + if not MainFrame then return end + local detail = MainFrame.detail + + if not selectedIndex then + detail.iconFrame:Hide() + detail.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + detail.nameFS:SetText("") + detail.subFS:SetText("") + detail.reqFS:SetText("") + detail.infoFS:SetText("") + detail.descFS:SetText("") + detail.descDivider:Hide() + MainFrame.trainBtn:SetDisabled(true) + SetMoneyFrame(MainFrame.costMoney, 0) + SetMoneyFrame(MainFrame.availMoney, 0) + MainFrame.costLabel:SetText("花费:") + return + end + + local name, subText, category = GetTrainerServiceInfo(selectedIndex) + local iconTex = GetTrainerServiceIcon and GetTrainerServiceIcon(selectedIndex) + local ok, cost = pcall(GetTrainerServiceCost, selectedIndex) + if not ok then cost = 0 end + local levelReq = 0 + if GetTrainerServiceLevelReq then + local ok2, lr = pcall(GetTrainerServiceLevelReq, selectedIndex) + if ok2 then levelReq = lr or 0 end + end + + detail.icon:SetTexture(iconTex) + detail.iconFrame:Show() + + local quality = GetServiceQuality(selectedIndex) + local qc = QUALITY_COLORS[quality] + if qc and quality and quality >= 2 then + detail.iconFrame:SetBackdropBorderColor(qc[1], qc[2], qc[3], 1) + else + detail.iconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + end + + detail.nameFS:SetText(name or "") + + if category == "available" then + detail.nameFS:SetTextColor(T.available[1], T.available[2], T.available[3]) + elseif category == "unavailable" then + detail.nameFS:SetTextColor(T.unavailable[1], T.unavailable[2], T.unavailable[3]) + else + detail.nameFS:SetTextColor(T.used[1], T.used[2], T.used[3]) + end + + detail.subFS:SetText(subText or "") + + local reqParts = {} + if levelReq and levelReq > 0 then + local pLvl = UnitLevel("player") or 60 + local color = pLvl >= levelReq and "|cff40ff40" or "|cffff4040" + table.insert(reqParts, color .. "需要等级 " .. levelReq .. "|r") + end + if GetTrainerServiceSkillReq then + local ok3, skillName, skillRank, hasReq = pcall(GetTrainerServiceSkillReq, selectedIndex) + if ok3 and skillName and skillName ~= "" then + local color = hasReq and "|cff40ff40" or "|cffff4040" + table.insert(reqParts, color .. "需要 " .. skillName .. " (" .. (skillRank or 0) .. ")|r") + end + end + detail.reqFS:SetText(table.concat(reqParts, " ")) + + local spellInfo, descText = GetServiceTooltipInfo(selectedIndex) + detail.infoFS:SetText(spellInfo) + detail.descFS:SetText(descText) + detail.descDivider:Show() + + local textH = detail.descFS:GetHeight() or 40 + detail.descScroll:GetScrollChild():SetHeight(math.max(1, textH)) + detail.descScroll:SetVerticalScroll(0) + + local canTrain = (category == "available") and cost and (GetMoney() >= cost) + MainFrame.trainBtn:SetDisabled(not canTrain) + + if cost and cost > 0 then + MainFrame.costLabel:SetText("花费:") + SetMoneyFrame(MainFrame.costMoney, cost) + else + MainFrame.costLabel:SetText("花费: 免费") + SetMoneyFrame(MainFrame.costMoney, 0) + end + SetMoneyFrame(MainFrame.availMoney, GetMoney()) +end + +local function UpdateFilters() + if not MainFrame then return end + MainFrame.filterAll:SetActive(currentFilter == "all") + MainFrame.filterAvail:SetActive(currentFilter == "available") + MainFrame.filterUnavail:SetActive(currentFilter == "unavailable") + MainFrame.filterUsed:SetActive(currentFilter == "used") +end + +local function FullUpdate() + UpdateFilters() + UpdateList() + UpdateDetail() +end + +local function SelectService(index) + selectedIndex = index + local ok = pcall(SelectTrainerService, index) + FullUpdate() +end + +local function ToggleCategory(catName) + if collapsedCats[catName] then + collapsedCats[catName] = nil + else + collapsedCats[catName] = true + end + FullUpdate() +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function TUI:Initialize() + if MainFrame then return end + + MainFrame = CreateFrame("Frame", "SFramesTrainerFrame", UIParent) + MainFrame:SetWidth(FRAME_W) + MainFrame:SetHeight(FRAME_H) + MainFrame:SetPoint("LEFT", UIParent, "LEFT", 64, 0) + MainFrame:SetFrameStrata("HIGH") + MainFrame:SetToplevel(true) + MainFrame:EnableMouse(true) + MainFrame:SetMovable(true) + MainFrame:RegisterForDrag("LeftButton") + MainFrame:SetScript("OnDragStart", function() this:StartMoving() end) + MainFrame:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + SetRoundBackdrop(MainFrame) + CreateShadow(MainFrame) + + -- Header + local header = CreateFrame("Frame", nil, MainFrame) + header:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 0, 0) + header:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", 0, 0) + header:SetHeight(HEADER_H) + header:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8" }) + header:SetBackdropColor(T.headerBg[1], T.headerBg[2], T.headerBg[3], T.headerBg[4]) + + local titleIco = SFrames:CreateIcon(header, "spellbook", 16) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("LEFT", header, "LEFT", SIDE_PAD, 0) + titleIco:SetVertexColor(T.gold[1], T.gold[2], T.gold[3]) + + local npcNameFS = header:CreateFontString(nil, "OVERLAY") + npcNameFS:SetFont(GetFont(), 14, "OUTLINE") + npcNameFS:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + npcNameFS:SetPoint("RIGHT", header, "RIGHT", -30, 0) + npcNameFS:SetJustifyH("LEFT") + npcNameFS:SetTextColor(T.gold[1], T.gold[2], T.gold[3]) + MainFrame.npcNameFS = npcNameFS + + local closeBtn = CreateFrame("Button", nil, header) + closeBtn:SetWidth(20); closeBtn:SetHeight(20) + closeBtn:SetPoint("TOPRIGHT", header, "TOPRIGHT", -8, -6) + local closeTex = closeBtn:CreateTexture(nil, "ARTWORK") + closeTex:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + closeTex:SetTexCoord(0.25, 0.375, 0, 0.125) + closeTex:SetAllPoints() + closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) + closeBtn:SetScript("OnClick", function() MainFrame:Hide() end) + closeBtn:SetScript("OnEnter", function() closeTex:SetVertexColor(1, 0.6, 0.7) end) + closeBtn:SetScript("OnLeave", function() closeTex:SetVertexColor(T.dimText[1], T.dimText[2], T.dimText[3]) end) + + local headerSep = MainFrame:CreateTexture(nil, "ARTWORK") + headerSep:SetTexture("Interface\\Buttons\\WHITE8X8") + headerSep:SetHeight(1) + headerSep:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", 6, -HEADER_H) + headerSep:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", -6, -HEADER_H) + headerSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- Filter bar + local filterBar = CreateFrame("Frame", nil, MainFrame) + filterBar:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", SIDE_PAD, -(HEADER_H + 4)) + filterBar:SetPoint("TOPRIGHT", MainFrame, "TOPRIGHT", -SIDE_PAD, -(HEADER_H + 4)) + filterBar:SetHeight(FILTER_H) + + local fAll = CreateFilterBtn(filterBar, "全部", 52) + fAll:SetPoint("LEFT", filterBar, "LEFT", 0, 0) + fAll:SetScript("OnClick", function() currentFilter = "all"; FullUpdate() end) + MainFrame.filterAll = fAll + + local fAvail = CreateFilterBtn(filterBar, "可学习", 60) + fAvail:SetPoint("LEFT", fAll, "RIGHT", 4, 0) + fAvail:SetScript("OnClick", function() currentFilter = "available"; FullUpdate() end) + MainFrame.filterAvail = fAvail + + local fUnavail = CreateFilterBtn(filterBar, "不可学", 60) + fUnavail:SetPoint("LEFT", fAvail, "RIGHT", 4, 0) + fUnavail:SetScript("OnClick", function() currentFilter = "unavailable"; FullUpdate() end) + MainFrame.filterUnavail = fUnavail + + local fUsed = CreateFilterBtn(filterBar, "已学会", 60) + fUsed:SetPoint("LEFT", fUnavail, "RIGHT", 4, 0) + fUsed:SetScript("OnClick", function() currentFilter = "used"; FullUpdate() end) + MainFrame.filterUsed = fUsed + + -- Scrollable list area + local listTop = HEADER_H + FILTER_H + 8 + local listBottom = DETAIL_H + BOTTOM_H + 8 + + local listScroll = CreateFrame("ScrollFrame", "SFramesTrainerListScroll", MainFrame) + listScroll:SetPoint("TOPLEFT", MainFrame, "TOPLEFT", SIDE_PAD, -listTop) + listScroll:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, listBottom) + + local listContent = CreateFrame("Frame", "SFramesTrainerListContent", listScroll) + listContent:SetWidth(CONTENT_W) + listContent:SetHeight(1) + listScroll:SetScrollChild(listContent) + + listScroll:EnableMouseWheel(true) + listScroll:SetScript("OnMouseWheel", function() + local cur = this:GetVerticalScroll() + local maxVal = this:GetVerticalScrollRange() + if arg1 > 0 then + this:SetVerticalScroll(math.max(0, cur - SCROLL_STEP)) + else + this:SetVerticalScroll(math.min(maxVal, cur + SCROLL_STEP)) + end + end) + listScroll.content = listContent + MainFrame.listScroll = listScroll + + for i = 1, MAX_ROWS do + local row = CreateListRow(listContent, i) + row:SetScript("OnClick", function() + if this.isHeader and this.catName then + ToggleCategory(this.catName) + elseif this.serviceIndex then + SelectService(this.serviceIndex) + end + end) + rowButtons[i] = row + end + + -- Detail separator + local detailSep = MainFrame:CreateTexture(nil, "ARTWORK") + detailSep:SetTexture("Interface\\Buttons\\WHITE8X8") + detailSep:SetHeight(1) + detailSep:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", 6, DETAIL_H + BOTTOM_H + 4) + detailSep:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -6, DETAIL_H + BOTTOM_H + 4) + detailSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + -- Detail area + local detail = CreateFrame("Frame", nil, MainFrame) + detail:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", SIDE_PAD, BOTTOM_H + 4) + detail:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, BOTTOM_H + 4) + detail:SetHeight(DETAIL_H) + MainFrame.detail = detail + + local dIconFrame = CreateFrame("Frame", nil, detail) + dIconFrame:SetWidth(42); dIconFrame:SetHeight(42) + dIconFrame:SetPoint("TOPLEFT", detail, "TOPLEFT", 2, -6) + dIconFrame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 2, right = 2, top = 2, bottom = 2 }, + }) + dIconFrame:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + dIconFrame:SetBackdropBorderColor(T.slotBorder[1], T.slotBorder[2], T.slotBorder[3], T.slotBorder[4]) + dIconFrame:Hide() + detail.iconFrame = dIconFrame + + local dIcon = dIconFrame:CreateTexture(nil, "ARTWORK") + dIcon:SetTexCoord(0.08, 0.92, 0.08, 0.92) + dIcon:SetPoint("TOPLEFT", dIconFrame, "TOPLEFT", 3, -3) + dIcon:SetPoint("BOTTOMRIGHT", dIconFrame, "BOTTOMRIGHT", -3, 3) + detail.icon = dIcon + + local dNameFS = detail:CreateFontString(nil, "OVERLAY") + dNameFS:SetFont(GetFont(), 13, "OUTLINE") + dNameFS:SetPoint("TOPLEFT", dIconFrame, "TOPRIGHT", 8, -2) + dNameFS:SetPoint("RIGHT", detail, "RIGHT", -4, 0) + dNameFS:SetJustifyH("LEFT") + dNameFS:SetTextColor(T.nameText[1], T.nameText[2], T.nameText[3]) + detail.nameFS = dNameFS + + local dSubFS = detail:CreateFontString(nil, "OVERLAY") + dSubFS:SetFont(GetFont(), 11, "OUTLINE") + dSubFS:SetPoint("TOPLEFT", dNameFS, "BOTTOMLEFT", 0, -2) + dSubFS:SetJustifyH("LEFT") + dSubFS:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + detail.subFS = dSubFS + + local dReqFS = detail:CreateFontString(nil, "OVERLAY") + dReqFS:SetFont(GetFont(), 11, "OUTLINE") + dReqFS:SetPoint("TOPLEFT", dIconFrame, "BOTTOMLEFT", 0, -6) + dReqFS:SetPoint("RIGHT", detail, "RIGHT", -4, 0) + dReqFS:SetJustifyH("LEFT") + detail.reqFS = dReqFS + + local dInfoFS = detail:CreateFontString(nil, "OVERLAY") + dInfoFS:SetFont(GetFont(), 11) + dInfoFS:SetPoint("TOPLEFT", dReqFS, "BOTTOMLEFT", 0, -4) + dInfoFS:SetPoint("RIGHT", detail, "RIGHT", -4, 0) + dInfoFS:SetJustifyH("LEFT") + dInfoFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + detail.infoFS = dInfoFS + + local descDivider = detail:CreateTexture(nil, "ARTWORK") + descDivider:SetTexture("Interface\\Buttons\\WHITE8X8") + descDivider:SetHeight(1) + descDivider:SetPoint("TOPLEFT", dInfoFS, "BOTTOMLEFT", 0, -5) + descDivider:SetPoint("RIGHT", detail, "RIGHT", -4, 0) + descDivider:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], 0.3) + detail.descDivider = descDivider + + local descScroll = CreateFrame("ScrollFrame", nil, detail) + descScroll:SetPoint("TOPLEFT", descDivider, "BOTTOMLEFT", 0, -4) + descScroll:SetPoint("BOTTOMRIGHT", detail, "BOTTOMRIGHT", -4, 2) + descScroll:EnableMouseWheel(true) + descScroll:SetScript("OnMouseWheel", function() + local cur = this:GetVerticalScroll() + local maxVal = this:GetVerticalScrollRange() + if arg1 > 0 then + this:SetVerticalScroll(math.max(0, cur - 14)) + else + this:SetVerticalScroll(math.min(maxVal, cur + 14)) + end + end) + detail.descScroll = descScroll + + local descContent = CreateFrame("Frame", nil, descScroll) + descContent:SetWidth(CONTENT_W - 8) + descContent:SetHeight(1) + descScroll:SetScrollChild(descContent) + + local dDescFS = descContent:CreateFontString(nil, "OVERLAY") + dDescFS:SetFont(GetFont(), 11) + dDescFS:SetPoint("TOPLEFT", descContent, "TOPLEFT", 0, 0) + dDescFS:SetWidth(CONTENT_W - 8) + dDescFS:SetJustifyH("LEFT") + dDescFS:SetTextColor(T.bodyText[1], T.bodyText[2], T.bodyText[3]) + detail.descFS = dDescFS + + -- Bottom bar + local bottomSep = MainFrame:CreateTexture(nil, "ARTWORK") + bottomSep:SetTexture("Interface\\Buttons\\WHITE8X8") + bottomSep:SetHeight(1) + bottomSep:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", 6, BOTTOM_H) + bottomSep:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -6, BOTTOM_H) + bottomSep:SetVertexColor(T.divider[1], T.divider[2], T.divider[3], T.divider[4]) + + local costLabel = MainFrame:CreateFontString(nil, "OVERLAY") + costLabel:SetFont(GetFont(), 11, "OUTLINE") + costLabel:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", SIDE_PAD, 32) + costLabel:SetJustifyH("LEFT") + costLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + costLabel:SetText("花费:") + MainFrame.costLabel = costLabel + + local costMoney = CreateFrame("Frame", "SFramesTrainerCostMoney", MainFrame, "SmallMoneyFrameTemplate") + costMoney:SetPoint("LEFT", costLabel, "RIGHT", 4, 0) + costMoney:SetWidth(120) + costMoney:SetHeight(14) + costMoney:SetFrameLevel(MainFrame:GetFrameLevel() + 5) + costMoney:UnregisterAllEvents() + costMoney:SetScript("OnEvent", nil) + costMoney:SetScript("OnShow", nil) + costMoney.moneyType = nil + costMoney.small = 1 + MainFrame.costMoney = costMoney + + local availLabel = MainFrame:CreateFontString(nil, "OVERLAY") + availLabel:SetFont(GetFont(), 11, "OUTLINE") + availLabel:SetPoint("BOTTOMLEFT", MainFrame, "BOTTOMLEFT", SIDE_PAD, 16) + availLabel:SetJustifyH("LEFT") + availLabel:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + availLabel:SetText("可用:") + MainFrame.availLabel = availLabel + + local availMoney = CreateFrame("Frame", "SFramesTrainerAvailMoney", MainFrame, "SmallMoneyFrameTemplate") + availMoney:SetPoint("LEFT", availLabel, "RIGHT", 4, 0) + availMoney:SetWidth(120) + availMoney:SetHeight(14) + availMoney:SetFrameLevel(MainFrame:GetFrameLevel() + 5) + availMoney:UnregisterAllEvents() + availMoney:SetScript("OnEvent", nil) + availMoney:SetScript("OnShow", nil) + availMoney.moneyType = nil + availMoney.small = 1 + MainFrame.availMoney = availMoney + + local trainBtn = CreateActionBtn(MainFrame, "训练", 80) + trainBtn:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -(SIDE_PAD + 90), 8) + trainBtn:SetScript("OnClick", function() + if this.disabled then return end + if IsControlKeyDown() and BuyTrainerService then + local numServices = GetNumTrainerServices and GetNumTrainerServices() or 0 + local gold = GetMoney() + for i = 1, numServices do + local name, _, category = GetTrainerServiceInfo(i) + if name and category == "available" and not IsServiceHeader(i) then + local ok, cost = pcall(GetTrainerServiceCost, i) + if ok and cost and gold >= cost then + pcall(BuyTrainerService, i) + gold = gold - cost + end + end + end + return + end + if selectedIndex and BuyTrainerService then + BuyTrainerService(selectedIndex) + end + end) + trainBtn:SetScript("OnEnter", function() + if not this.disabled then + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + this.label:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:AddLine("Ctrl+点击: 学习所有可学技能", 0.8, 0.8, 0.8) + GameTooltip:Show() + end) + trainBtn:SetScript("OnLeave", function() + if not this.disabled then + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + this.label:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + GameTooltip:Hide() + end) + MainFrame.trainBtn = trainBtn + + local exitBtn = CreateActionBtn(MainFrame, "退出", 80) + exitBtn:SetPoint("BOTTOMRIGHT", MainFrame, "BOTTOMRIGHT", -SIDE_PAD, 8) + exitBtn:SetScript("OnClick", function() MainFrame:Hide() end) + + -- Events + local function CleanupBlizzardTrainer() + if not ClassTrainerFrame then return end + ClassTrainerFrame:SetScript("OnHide", function() end) + if HideUIPanel then pcall(HideUIPanel, ClassTrainerFrame) end + if ClassTrainerFrame:IsVisible() then ClassTrainerFrame:Hide() end + ClassTrainerFrame:SetAlpha(0) + ClassTrainerFrame:EnableMouse(false) + end + + MainFrame:SetScript("OnHide", function() + if CloseTrainer then pcall(CloseTrainer) end + if CloseGossip then pcall(CloseGossip) end + CleanupBlizzardTrainer() + end) + + MainFrame:RegisterEvent("TRAINER_SHOW") + MainFrame:RegisterEvent("TRAINER_UPDATE") + MainFrame:RegisterEvent("TRAINER_CLOSED") + MainFrame:SetScript("OnEvent", function() + if event == "TRAINER_SHOW" then + if ClassTrainerFrame then + ClassTrainerFrame:SetScript("OnHide", function() end) + ClassTrainerFrame:SetAlpha(0) + ClassTrainerFrame:EnableMouse(false) + end + + selectedIndex = nil + currentFilter = "all" + collapsedCats = {} + local npcName = UnitName("npc") or "训练师" + if IsTradeskillTrainer and IsTradeskillTrainer() then + npcName = npcName .. " - 专业训练" + end + MainFrame.npcNameFS:SetText(npcName) + MainFrame:Show() + FullUpdate() + for _, entry in ipairs(displayList) do + if entry.type == "service" then + SelectService(entry.data.index) + break + end + end + + MainFrame._hideBlizzTimer = 0 + MainFrame:SetScript("OnUpdate", function() + if not this._hideBlizzTimer then return end + this._hideBlizzTimer = this._hideBlizzTimer + arg1 + if this._hideBlizzTimer > 0.05 then + this._hideBlizzTimer = nil + this:SetScript("OnUpdate", nil) + CleanupBlizzardTrainer() + end + end) + elseif event == "TRAINER_UPDATE" then + if MainFrame:IsVisible() then FullUpdate() end + elseif event == "TRAINER_CLOSED" then + MainFrame._hideBlizzTimer = nil + MainFrame:SetScript("OnUpdate", nil) + CleanupBlizzardTrainer() + MainFrame:Hide() + end + end) + MainFrame:Hide() + + tinsert(UISpecialFrames, "SFramesTrainerFrame") +end + +-------------------------------------------------------------------------------- +-- Bootstrap +-------------------------------------------------------------------------------- +local bootstrap = CreateFrame("Frame") +bootstrap:RegisterEvent("PLAYER_LOGIN") +bootstrap:RegisterEvent("ADDON_LOADED") +bootstrap:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + if SFramesDB.enableTrainer == nil then + SFramesDB.enableTrainer = true + end + if SFramesDB.enableTrainer ~= false then + TUI:Initialize() + end + elseif event == "ADDON_LOADED" and arg1 == "Blizzard_TrainerUI" then + if MainFrame and ClassTrainerFrame then + ClassTrainerFrame:SetScript("OnHide", function() end) + ClassTrainerFrame:SetAlpha(0) + ClassTrainerFrame:EnableMouse(false) + end + end +end) diff --git a/Tweaks.lua b/Tweaks.lua new file mode 100644 index 0000000..c67d7eb --- /dev/null +++ b/Tweaks.lua @@ -0,0 +1,1051 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: Tweaks -- Ported from ShaguTweaks +-- 1. Auto Stance - auto switch warrior/druid stance on spell cast +-- 2. SuperWoW - GUID-based cast/channel data for SuperWoW client +-- 3. Turtle Compat - hide TW's overlapping target HP text, etc. +-- 4. Cooldown Numbers - show remaining cooldown time as text overlay +-- 5. Dark UI - darken the entire interface +-- 6. WorldMap Window - turn fullscreen map into a movable/scalable window +-- 7. Auto Dismount - cancel shapeshift/mount when casting incompatible spells +-------------------------------------------------------------------------------- + +SFrames.Tweaks = SFrames.Tweaks or {} +local Tweaks = SFrames.Tweaks + +SFrames.castdb = SFrames.castdb or {} + +local function GetTweaksCfg() + if not SFramesDB or type(SFramesDB.Tweaks) ~= "table" then + return { autoStance = true, superWoW = true, turtleCompat = true, + cooldownNumbers = true, darkUI = false, worldMapWindow = false } + end + return SFramesDB.Tweaks +end + +local function strsplit(delimiter, str) + local result = {} + local pattern = "([^" .. delimiter .. "]+)" + for match in string.gfind(str, pattern) do + table.insert(result, match) + end + return unpack(result) +end + +-- hooksecurefunc polyfill for WoW 1.12 (vanilla) +local _hooks = {} +local _hooksecurefunc = hooksecurefunc +if not _hooksecurefunc then + _hooksecurefunc = function(tbl, name, func) + if type(tbl) == "string" then + func = name + name = tbl + tbl = getfenv(0) + end + if not tbl or not tbl[name] then return end + local key = tostring(func) + _hooks[key] = {} + _hooks[key].old = tbl[name] + _hooks[key].new = func + tbl[name] = function(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) + local r1,r2,r3,r4,r5 = _hooks[key].old(a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) + pcall(_hooks[key].new, a1,a2,a3,a4,a5,a6,a7,a8,a9,a10) + return r1,r2,r3,r4,r5 + end + end +end + +-------------------------------------------------------------------------------- +-- Auto Stance +-- When a spell fails because you're in the wrong stance/form, automatically +-- switch to the required one. Works for warriors, druids, etc. +-------------------------------------------------------------------------------- +local function InitAutoStance() + local frame = CreateFrame("Frame", "NanamiAutoStance") + local scanString = string.gsub(SPELL_FAILED_ONLY_SHAPESHIFT, "%%s", "(.+)") + + frame:RegisterEvent("UI_ERROR_MESSAGE") + frame:SetScript("OnEvent", function() + for stances in string.gfind(arg1, scanString) do + for _, stance in pairs({ strsplit(",", stances) }) do + CastSpellByName(string.gsub(stance, "^%s*(.-)%s*$", "%1")) + end + end + end) +end + +-------------------------------------------------------------------------------- +-- Auto Dismount / Cancel Shapeshift +-- When casting a spell that fails because you are mounted or shapeshifted, +-- automatically cancel the mount/shapeshift buff so the next cast succeeds. +-------------------------------------------------------------------------------- +local function InitAutoDismount() + local dismount = CreateFrame("Frame", "NanamiAutoDismount") + + local scanner = CreateFrame("GameTooltip", "NanamiDismountScan", nil, "GameTooltipTemplate") + scanner:SetOwner(WorldFrame, "ANCHOR_NONE") + + local mountStrings = { + "^Increases speed by (.+)%%", + "^Erhöht Tempo um (.+)%%", + "^Aumenta la velocidad en un (.+)%%", + "^Augmente la vitesse de (.+)%%", + "^Скорость увеличена на (.+)%%", + "^이동 속도 (.+)%%만큼 증가", + "^速度提高(.+)%%", + "speed based on", "Slow and steady...", "Riding", + "Lento y constante...", "Aumenta la velocidad según tu habilidad de Montar.", + "根据您的骑行技能提高速度。", "根据骑术技能提高速度。", "又慢又稳......", + } + + local shapeshiftIcons = { + "ability_racial_bearform", "ability_druid_catform", + "ability_druid_travelform", "spell_nature_forceofnature", + "ability_druid_aquaticform", "spell_nature_spiritwolf", + "ability_druid_treeoflife", "ability_druid_stagform", + } + + local errorStrings = {} + local errorGlobals = { + "SPELL_FAILED_NOT_MOUNTED", "ERR_ATTACK_MOUNTED", "ERR_TAXIPLAYERALREADYMOUNTED", + "SPELL_FAILED_NOT_SHAPESHIFT", "SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED", + "SPELL_NOT_SHAPESHIFTED", "SPELL_NOT_SHAPESHIFTED_NOSPACE", + "ERR_CANT_INTERACT_SHAPESHIFTED", "ERR_NOT_WHILE_SHAPESHIFTED", + "ERR_NO_ITEMS_WHILE_SHAPESHIFTED", "ERR_TAXIPLAYERSHAPESHIFTED", + "ERR_MOUNT_SHAPESHIFTED", + } + for _, name in pairs(errorGlobals) do + local val = getfenv(0)[name] + if val then table.insert(errorStrings, val) end + end + + dismount:RegisterEvent("UI_ERROR_MESSAGE") + dismount:SetScript("OnEvent", function() + if arg1 == SPELL_FAILED_NOT_STANDING then + SitOrStand() + return + end + + local matched = false + for _, err in pairs(errorStrings) do + if arg1 == err then matched = true break end + end + if not matched then return end + + for i = 0, 31 do + scanner:ClearLines() + scanner:SetPlayerBuff(i) + for line = 1, scanner:NumLines() do + local text = getfenv(0)["NanamiDismountScanTextLeft" .. line] + if text and text:GetText() then + for _, str in pairs(mountStrings) do + if string.find(text:GetText(), str) then + CancelPlayerBuff(i) + return + end + end + end + end + + local buff = GetPlayerBuffTexture(i) + if buff then + for _, icon in pairs(shapeshiftIcons) do + if string.find(string.lower(buff), icon) then + CancelPlayerBuff(i) + return + end + end + end + end + end) +end + +-------------------------------------------------------------------------------- +-- SuperWoW Compatibility +-- Provides GUID-based cast/channel data when SuperWoW client mod is active. +-- Data stored in SFrames.castdb[guid] for consumption by castbar features. +-------------------------------------------------------------------------------- +local function InitSuperWoW() + if not GetPlayerBuffID or not CombatLogAdd or not SpellInfo then return end + + local castdb = SFrames.castdb + + local frame = CreateFrame("Frame", "NanamiSuperWoW") + frame:RegisterEvent("UNIT_CASTEVENT") + frame:SetScript("OnEvent", function() + if arg3 == "START" or arg3 == "CAST" or arg3 == "CHANNEL" then + local guid = arg1 + local spell, icon, _ + if SpellInfo and SpellInfo(arg4) then + spell, _, icon = SpellInfo(arg4) + end + spell = spell or UNKNOWN + icon = icon or "Interface\\Icons\\INV_Misc_QuestionMark" + + if not castdb[guid] then castdb[guid] = {} end + castdb[guid].cast = spell + castdb[guid].rank = nil + castdb[guid].start = GetTime() + castdb[guid].casttime = arg5 + castdb[guid].icon = icon + castdb[guid].channel = (arg3 == "CHANNEL") or false + + SFrames.superwow_active = true + elseif arg3 == "FAIL" then + local guid = arg1 + if castdb[guid] then + castdb[guid].cast = nil + castdb[guid].rank = nil + castdb[guid].start = nil + castdb[guid].casttime = nil + castdb[guid].icon = nil + castdb[guid].channel = nil + end + end + end) +end + +-------------------------------------------------------------------------------- +-- Turtle WoW Compatibility +-- Hides TW's built-in target HP text that overlaps with Nanami-UI frames, +-- and applies other TW-specific fixes. +-------------------------------------------------------------------------------- +local function ApplyWorldMapWindowLayout() + WorldMapFrame:SetMovable(true) + WorldMapFrame:EnableMouse(true) + WorldMapFrame:SetScale(.85) + WorldMapFrame:ClearAllPoints() + WorldMapFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 30) + WorldMapFrame:SetWidth(WorldMapButton:GetWidth() + 15) + WorldMapFrame:SetHeight(WorldMapButton:GetHeight() + 55) + if WorldMapFrameTitle then + WorldMapFrameTitle:SetPoint("TOP", WorldMapFrame, 0, 17) + end + BlackoutWorld:Hide() +end + +local function InitTurtleCompat() + if not TargetHPText or not TargetHPPercText then return end + + TargetHPText:Hide() + TargetHPText.Show = function() return end + + TargetHPPercText:Hide() + TargetHPPercText.Show = function() return end + + if WorldMapFrame_Maximize then + local origMaximize = WorldMapFrame_Maximize + WorldMapFrame_Maximize = function() + origMaximize() + local cfg = GetTweaksCfg() + if cfg.worldMapWindow ~= false then + ApplyWorldMapWindowLayout() + elseif WorldMapFrameTitle then + WorldMapFrameTitle:SetPoint("TOP", WorldMapFrame, 0, 17) + end + end + end +end + +-------------------------------------------------------------------------------- +-- WorldMap Window +-- Turn the fullscreen world map into a movable, scalable window. +-- Ctrl+Scroll to zoom, Shift+Scroll to change transparency, drag to move. +-------------------------------------------------------------------------------- +local function HookScript(frame, script, func) + local prev = frame:GetScript(script) + frame:SetScript(script, function(a1,a2,a3,a4,a5,a6,a7,a8,a9) + if prev then prev(a1,a2,a3,a4,a5,a6,a7,a8,a9) end + func(a1,a2,a3,a4,a5,a6,a7,a8,a9) + end) +end + +local function InitWorldMapWindow() + if Cartographer or METAMAP_TITLE then return end + + table.insert(UISpecialFrames, "WorldMapFrame") + + local _G = getfenv(0) + _G.ToggleWorldMap = function() + if WorldMapFrame:IsShown() then + WorldMapFrame:Hide() + else + WorldMapFrame:Show() + end + end + + UIPanelWindows["WorldMapFrame"] = { area = "center" } + + HookScript(WorldMapFrame, "OnShow", function() + this:EnableKeyboard(false) + this:EnableMouseWheel(1) + WorldMapFrame:SetScale(.85) + WorldMapFrame:SetAlpha(1) + WorldMapFrame:SetFrameStrata("FULLSCREEN_DIALOG") + end) + + HookScript(WorldMapFrame, "OnMouseWheel", function() + if IsShiftKeyDown() then + local newAlpha = WorldMapFrame:GetAlpha() + arg1 / 10 + if newAlpha < 0.2 then newAlpha = 0.2 end + if newAlpha > 1 then newAlpha = 1 end + WorldMapFrame:SetAlpha(newAlpha) + elseif IsControlKeyDown() then + local newScale = WorldMapFrame:GetScale() + arg1 / 10 + if newScale < 0.4 then newScale = 0.4 end + if newScale > 1.5 then newScale = 1.5 end + WorldMapFrame:SetScale(newScale) + end + end) + + HookScript(WorldMapFrame, "OnMouseDown", function() + WorldMapFrame:StartMoving() + end) + + HookScript(WorldMapFrame, "OnMouseUp", function() + WorldMapFrame:StopMovingOrSizing() + end) + + ApplyWorldMapWindowLayout() + + -- WorldMapTooltip: raw textures on a child frame (SetBackdrop is unreliable) + if WorldMapTooltip and not WorldMapTooltip._nanamiBG then + WorldMapTooltip._nanamiBG = true + + local wmtBgFrame = CreateFrame("Frame", nil, WorldMapTooltip) + wmtBgFrame:SetAllPoints(WorldMapTooltip) + wmtBgFrame:SetFrameLevel(math.max(0, WorldMapTooltip:GetFrameLevel())) + + local bg = wmtBgFrame:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\Buttons\\WHITE8X8") + bg:SetVertexColor(0.05, 0.05, 0.05, 1) + bg:SetAllPoints(wmtBgFrame) + + local function MakeEdge(p1, r1, p2, r2, w, h) + local t = wmtBgFrame:CreateTexture(nil, "BORDER") + t:SetTexture("Interface\\Buttons\\WHITE8X8") + t:SetVertexColor(0.25, 0.25, 0.25, 1) + t:SetPoint(p1, WorldMapTooltip, r1) + t:SetPoint(p2, WorldMapTooltip, r2) + if w then t:SetWidth(w) end + if h then t:SetHeight(h) end + end + MakeEdge("TOPLEFT","TOPLEFT","TOPRIGHT","TOPRIGHT", nil, 1) + MakeEdge("BOTTOMLEFT","BOTTOMLEFT","BOTTOMRIGHT","BOTTOMRIGHT", nil, 1) + MakeEdge("TOPLEFT","TOPLEFT","BOTTOMLEFT","BOTTOMLEFT", 1, nil) + MakeEdge("TOPRIGHT","TOPRIGHT","BOTTOMRIGHT","BOTTOMRIGHT", 1, nil) + end +end + +-------------------------------------------------------------------------------- +-- Cooldown Numbers +-- Display remaining duration as text on every cooldown frame (>= 2 sec). +-------------------------------------------------------------------------------- +local function TimeConvert(remaining) + local color = "|cffffffff" + if remaining < 5 then + color = "|cffff5555" + elseif remaining < 10 then + color = "|cffffff55" + end + + if remaining < 60 then + return color .. math.ceil(remaining) + elseif remaining < 3600 then + return color .. math.ceil(remaining / 60) .. "m" + elseif remaining < 86400 then + return color .. math.ceil(remaining / 3600) .. "h" + else + return color .. math.ceil(remaining / 86400) .. "d" + end +end + +local function CooldownOnUpdate() + local parent = this:GetParent() + if not parent then this:Hide() return end + + if not this.tick then this.tick = GetTime() + 0.1 end + if this.tick > GetTime() then return end + this.tick = GetTime() + 0.1 + + this:SetAlpha(parent:GetAlpha()) + + if this.start < GetTime() then + local remaining = this.duration - (GetTime() - this.start) + if remaining > 0 then + this.text:SetText(TimeConvert(remaining)) + else + this:Hide() + end + else + local time = time() + local startupTime = time - GetTime() + local cdTime = (2 ^ 32) / 1000 - this.start + local cdStartTime = startupTime - cdTime + local cdEndTime = cdStartTime + this.duration + local remaining = cdEndTime - time + if remaining >= 0 then + this.text:SetText(TimeConvert(remaining)) + else + this:Hide() + end + end +end + +local function IsActionBarButtonName(name) + if not name then return false end + return string.find(name, "^ActionButton%d+$") + or string.find(name, "^BonusActionButton%d+$") + or string.find(name, "^MultiBarBottomLeftButton%d+$") + or string.find(name, "^MultiBarBottomRightButton%d+$") + or string.find(name, "^MultiBarLeftButton%d+$") + or string.find(name, "^MultiBarRightButton%d+$") + or string.find(name, "^PetActionButton%d+$") + or string.find(name, "^ShapeshiftButton%d+$") +end + +local function UpdateActionBarCooldownMask(cooldown) + if not cooldown then return end + if cooldown.cooldownmask then + cooldown.cooldownmask:SetAllPoints(cooldown) + cooldown.cooldownmask:SetFrameStrata(cooldown:GetFrameStrata()) + cooldown.cooldownmask:SetFrameLevel(cooldown:GetFrameLevel() + 1) + end + if cooldown.cooldowntext then + cooldown.cooldowntext:SetAllPoints(cooldown) + cooldown.cooldowntext:SetFrameStrata(cooldown:GetFrameStrata()) + cooldown.cooldowntext:SetFrameLevel(cooldown:GetFrameLevel() + 2) + end +end + +local function CreateCoolDown(cooldown, start, duration) + if not cooldown then return end + local parent = cooldown:GetParent() + if not parent then return end + if cooldown.readable then return end + + local parentname = parent and parent.GetName and parent:GetName() + parentname = parentname or "UnknownCooldownFrame" + + cooldown.cooldowntext = CreateFrame("Frame", parentname .. "NanamiCDText", cooldown) + cooldown.cooldowntext:SetAllPoints(cooldown) + cooldown.cooldowntext:SetFrameStrata(cooldown:GetFrameStrata()) + cooldown.cooldowntext:SetFrameLevel(cooldown:GetFrameLevel() + 2) + cooldown.cooldowntext.text = cooldown.cooldowntext:CreateFontString( + parentname .. "NanamiCDFont", "OVERLAY") + + local isActionBar = IsActionBarButtonName(parentname) + local size = parent:GetHeight() or 0 + size = size > 0 and size * 0.64 or 12 + size = size > 14 and 14 or size + + if isActionBar then + local bigSize = size * 1.22 + if bigSize < 13 then bigSize = 13 end + if bigSize > 18 then bigSize = 18 end + cooldown.cooldowntext.text:SetFont(STANDARD_TEXT_FONT, bigSize, "THICKOUTLINE") + else + cooldown.cooldowntext.text:SetFont(STANDARD_TEXT_FONT, size, "OUTLINE") + end + cooldown.cooldowntext.text:SetDrawLayer("OVERLAY", 7) + + if isActionBar then + cooldown.cooldownmask = CreateFrame("Frame", parentname .. "NanamiCDMask", cooldown) + cooldown.cooldownmask:SetAllPoints(cooldown) + cooldown.cooldownmask:SetFrameStrata(cooldown:GetFrameStrata()) + cooldown.cooldownmask:SetFrameLevel(cooldown:GetFrameLevel() + 1) + local mask = cooldown.cooldownmask:CreateTexture(nil, "BACKGROUND") + mask:SetTexture("Interface\\Buttons\\WHITE8X8") + mask:SetAllPoints(cooldown.cooldownmask) + mask:SetDrawLayer("BACKGROUND", 0) + mask:SetVertexColor(0, 0, 0, 0.45) + cooldown.cooldownmask.mask = mask + cooldown.cooldowntext.text:SetPoint("CENTER", cooldown.cooldowntext, "CENTER", 0, 0) + else + cooldown.cooldowntext.text:SetPoint("CENTER", cooldown.cooldowntext, "CENTER", 0, 0) + end + + cooldown.cooldowntext:SetScript("OnUpdate", CooldownOnUpdate) +end + +local function SetCooldown(frame, start, duration, enable) + if not frame then return end + if frame.noCooldownCount then return end + + if not duration or duration < 2 then + if frame.cooldowntext then + frame.cooldowntext:Hide() + end + if frame.cooldownmask then + frame.cooldownmask:Hide() + end + return + end + + if not frame.cooldowntext then + CreateCoolDown(frame, start, duration) + end + + if frame.cooldowntext then + UpdateActionBarCooldownMask(frame) + if start > 0 and duration > 0 and (not enable or enable > 0) then + if frame.cooldownmask then frame.cooldownmask:Show() end + frame.cooldowntext:Show() + else + if frame.cooldownmask then frame.cooldownmask:Hide() end + frame.cooldowntext:Hide() + end + frame.cooldowntext.start = start + frame.cooldowntext.duration = duration + end +end + +local function InitCooldownNumbers() + _hooksecurefunc("CooldownFrame_SetTimer", SetCooldown) +end + +-------------------------------------------------------------------------------- +-- Quest Watch Timed Quest Countdown +-- Append remaining time for timed quests in the watched quest list (outside +-- quest detail UI), so players can see countdown directly on the main HUD. +-------------------------------------------------------------------------------- +local function FormatQuestCountdown(seconds) + local s = tonumber(seconds) or 0 + if s <= 0 then return "0s" end + + local h = math.floor(s / 3600) + local m = math.floor(math.mod(s, 3600) / 60) + local sec = math.floor(math.mod(s, 60)) + + if h > 0 then + return string.format("%dh %02dm %02ds", h, m, sec) + elseif m > 0 then + return string.format("%dm %02ds", m, sec) + end + return string.format("%ds", sec) +end + +local function InitQuestWatchCountdown() + if not QuestWatch_Update or not GetNumQuestWatches or not GetQuestLogTitle + or not GetQuestIndexForWatch or not GetQuestLogTimeLeft then + return + end + + local function StripNanamiCountdown(text) + if not text then return text end + return string.gsub(text, " |cffffcc00%[剩余: [^%]]+%]|r$", "") + end + + local applying = false + local function ApplyQuestWatchCountdown() + if applying then return end + applying = true + + local timedByTitle = {} + local watchCount = tonumber(GetNumQuestWatches()) or 0 + for i = 1, watchCount do + local questIndex = GetQuestIndexForWatch(i) + if questIndex and questIndex > 0 then + local title, level, tag, isHeader = GetQuestLogTitle(questIndex) + if title and not isHeader then + local timeLeft = GetQuestLogTimeLeft(questIndex) + if timeLeft and timeLeft > 0 then + timedByTitle[title] = FormatQuestCountdown(timeLeft) + end + end + end + end + + local lineCount = tonumber(QUESTWATCHLINES) or 0 + for i = 1, lineCount do + local fs = _G["QuestWatchLine" .. i] + if fs and fs.GetText and fs.SetText then + local text = fs:GetText() + if text and text ~= "" then + local clean = StripNanamiCountdown(text) + local timerText = timedByTitle[clean] + if timerText then + fs:SetText(clean .. " |cffffcc00[剩余: " .. timerText .. "]|r") + elseif clean ~= text then + fs:SetText(clean) + end + end + end + end + + applying = false + end + + _hooksecurefunc("QuestWatch_Update", ApplyQuestWatchCountdown) + + local ticker = CreateFrame("Frame", "NanamiQuestWatchCountdownTicker") + ticker._e = 0 + ticker:SetScript("OnUpdate", function() + this._e = (this._e or 0) + (arg1 or 0) + if this._e < 1.0 then return end + this._e = 0 + if (tonumber(GetNumQuestWatches()) or 0) > 0 then + pcall(ApplyQuestWatchCountdown) + end + end) +end + +-------------------------------------------------------------------------------- +-- Dark UI +-- Turns the entire interface into darker colors by applying vertex color +-- tinting to all UI textures recursively. +-------------------------------------------------------------------------------- +local function HookAddonOrVariable(addon, func) + local lurker = CreateFrame("Frame", nil) + lurker.func = func + lurker:RegisterEvent("ADDON_LOADED") + lurker:RegisterEvent("VARIABLES_LOADED") + lurker:RegisterEvent("PLAYER_ENTERING_WORLD") + lurker:SetScript("OnEvent", function() + if IsAddOnLoaded(addon) or getfenv(0)[addon] then + this:func() + this:UnregisterAllEvents() + end + end) +end + +local borderBackdrop = { + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 8, edgeSize = 16, + insets = { left = 0, right = 0, top = 0, bottom = 0 } +} + +local function AddBorder(frame, inset, color) + if not frame then return end + if frame.NanamiBorder then return frame.NanamiBorder end + + local top, right, bottom, left + if type(inset) == "table" then + top, right, bottom, left = unpack(inset) + left, bottom = -left, -bottom + end + + frame.NanamiBorder = CreateFrame("Frame", nil, frame) + frame.NanamiBorder:SetPoint("TOPLEFT", frame, "TOPLEFT", + (left or -inset), (top or inset)) + frame.NanamiBorder:SetPoint("BOTTOMRIGHT", frame, "BOTTOMRIGHT", + (right or inset), (bottom or -inset)) + frame.NanamiBorder:SetBackdrop(borderBackdrop) + if color then + frame.NanamiBorder:SetBackdropBorderColor(color.r, color.g, color.b, 1) + end + return frame.NanamiBorder +end + +local darkColor = { r = .3, g = .3, b = .3, a = .9 } + +local darkBlacklist = { + ["Solid Texture"] = true, ["WHITE8X8"] = true, ["StatusBar"] = true, + ["BarFill"] = true, ["Portrait"] = true, ["Button"] = true, + ["Icon"] = true, ["AddOns"] = true, ["StationeryTest"] = true, + ["TargetDead"] = true, ["^KeyRing"] = true, ["GossipIcon"] = true, + ["WorldMap\\(.+)\\"] = true, ["PetHappiness"] = true, + ["Elite"] = true, ["Rare"] = true, ["ColorPickerWheel"] = true, + ["ComboPoint"] = true, ["Skull"] = true, + ["battlenetworking0"] = true, ["damage"] = true, + ["tank"] = true, ["healer"] = true, +} + +local darkRegionSkips = { + ["ColorPickerFrame"] = { [15] = true } +} + +local darkBackgrounds = { + ["^SpellBookFrame$"] = { 325, 355, 17, -74 }, + ["^ItemTextFrame$"] = { 300, 355, 24, -74 }, +} + +local darkBorders = { + ["ShapeshiftButton"] = 3, ["BuffButton"] = 3, + ["TargetFrameBuff"] = 3, ["TempEnchant"] = 3, + ["SpellButton"] = 3, ["SpellBookSkillLineTab"] = 3, + ["ActionButton%d+$"] = 3, ["MultiBar(.+)Button%d+$"] = 3, + ["KeyRingButton"] = 2, + ["ActionBarUpButton"] = -3, ["ActionBarDownButton"] = -3, + ["Character(.+)Slot$"] = 3, ["Inspect(.+)Slot$"] = 3, + ["ContainerFrame(.+)Item"] = 3, ["MainMenuBarBackpackButton$"] = 3, + ["CharacterBag(.+)Slot$"] = 3, ["ChatFrame(.+)Button"] = -2, + ["PetFrameHappiness"] = 2, ["MicroButton"] = { -21, 0, 0, 0 }, +} + +local darkAddonFrames = { + ["Blizzard_TalentUI"] = { "TalentFrame" }, + ["Blizzard_AuctionUI"] = { "AuctionFrame", "AuctionDressUpFrame" }, + ["Blizzard_CraftUI"] = { "CraftFrame" }, + ["Blizzard_InspectUI"] = { "InspectPaperDollFrame", "InspectHonorFrame", "InspectFrameTab1", "InspectFrameTab2" }, + ["Blizzard_MacroUI"] = { "MacroFrame", "MacroPopupFrame" }, + ["Blizzard_RaidUI"] = { "ReadyCheckFrame" }, + ["Blizzard_TradeSkillUI"] = { "TradeSkillFrame" }, + -- ClassTrainerFrame replaced by TrainerUI.lua +} + +local function IsDarkBlacklisted(texture) + local name = texture:GetName() + local tex = texture:GetTexture() + if not tex then return true end + + if name then + for entry in pairs(darkBlacklist) do + if string.find(name, entry, 1) then return true end + end + end + + for entry in pairs(darkBlacklist) do + if string.find(tex, entry, 1) then return true end + end + return nil +end + +local function AddSpecialBackground(frame, w, h, x, y) + frame.NanamiMaterial = frame.NanamiMaterial or frame:CreateTexture(nil, "OVERLAY") + frame.NanamiMaterial:SetTexture("Interface\\Stationery\\StationeryTest1") + frame.NanamiMaterial:SetWidth(w) + frame.NanamiMaterial:SetHeight(h) + frame.NanamiMaterial:SetPoint("TOPLEFT", frame, x, y) + frame.NanamiMaterial:SetVertexColor(.8, .8, .8) +end + +local darkFrameSkips = { + ["^SFramesChat"] = true, + ["^SFramesPlayer"] = true, + ["^SFramesTarget"] = true, + ["^SFramesParty"] = true, + ["^SFramesRaid"] = true, + ["^SFramesMBuff"] = true, + ["^SFramesMDebuff"] = true, + ["^GameTooltip"] = true, +} + +local function DarkenFrame(frame, r, g, b, a) + if not r and not g and not b then + r, g, b, a = darkColor.r, darkColor.g, darkColor.b, darkColor.a + end + + local fname = frame and frame.GetName and frame:GetName() + if fname then + for pattern in pairs(darkFrameSkips) do + if string.find(fname, pattern) then return end + end + end + + if frame and frame.GetChildren then + for _, child in pairs({ frame:GetChildren() }) do + DarkenFrame(child, r, g, b, a) + end + end + + if frame and frame.GetRegions then + local name = frame.GetName and frame:GetName() + + if frame.SetBackdropBorderColor then + frame:SetBackdropBorderColor(darkColor.r, darkColor.g, darkColor.b, darkColor.a) + end + + for pattern, inset in pairs(darkBackgrounds) do + if name and string.find(name, pattern) then + AddSpecialBackground(frame, inset[1], inset[2], inset[3], inset[4]) + end + end + + for pattern, inset in pairs(darkBorders) do + if name and string.find(name, pattern) then + AddBorder(frame, inset, darkColor) + end + end + + for id, region in pairs({ frame:GetRegions() }) do + if region.SetVertexColor and region:GetObjectType() == "Texture" then + if name and id and darkRegionSkips[name] and darkRegionSkips[name][id] then + -- skip + elseif region.GetBlendMode and region:GetBlendMode() == "ADD" then + -- skip blend textures + elseif IsDarkBlacklisted(region) then + -- skip blacklisted + else + region:SetVertexColor(r, g, b, a) + end + end + end + end +end + +-------------------------------------------------------------------------------- +-- StaticPopup Theme Skin +-------------------------------------------------------------------------------- +local function InitPopupSkin() + local popupSkinned = {} + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARKai_T.ttf" + + local _A = SFrames.ActiveTheme + local P = { + bg = _A.panelBg or { 0.12, 0.06, 0.10, 0.95 }, + border = _A.panelBorder or { 0.55, 0.30, 0.42, 0.9 }, + btnBg = _A.btnBg or { 0.18, 0.10, 0.15, 0.94 }, + btnBd = _A.btnBorder or { 0.50, 0.30, 0.40, 0.80 }, + text = _A.nameText or { 0.90, 0.88, 0.94 }, + } + + local function SkinButton(btn) + if not btn then return end + local regions = { btn:GetRegions() } + for _, r in ipairs(regions) do + if r and r.SetTexture and r:GetObjectType() == "Texture" then + local tex = r:GetTexture() + if tex and type(tex) == "string" and (string.find(tex, "UI%-Panel") or string.find(tex, "UI%-DialogBox")) then + r:Hide() + end + end + end + + btn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + btn:SetBackdropColor(P.btnBg[1], P.btnBg[2], P.btnBg[3], P.btnBg[4]) + btn:SetBackdropBorderColor(P.btnBd[1], P.btnBd[2], P.btnBd[3], P.btnBd[4]) + + local fs = btn:GetFontString() + if fs then + fs:SetFont(font, 12, "OUTLINE") + fs:SetTextColor(P.text[1], P.text[2], P.text[3]) + end + end + + local function SkinPopupFrame(frame) + if not frame then return end + local frameName = frame:GetName() + if not frameName then return end + + if not popupSkinned[frameName] then + popupSkinned[frameName] = true + + local regions = { frame:GetRegions() } + for _, r in ipairs(regions) do + if r and r:GetObjectType() == "Texture" then + local dl = r:GetDrawLayer() + if dl == "BACKGROUND" or dl == "BORDER" or dl == "ARTWORK" then + local tex = r:GetTexture() or "" + if type(tex) == "string" and (string.find(tex, "UI%-DialogBox") or string.find(tex, "UI%-Panel")) then + r:Hide() + end + end + end + end + + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + frame:SetBackdropColor(P.bg[1], P.bg[2], P.bg[3], P.bg[4]) + frame:SetBackdropBorderColor(P.border[1], P.border[2], P.border[3], P.border[4]) + + local textFS = _G[frameName .. "Text"] + if textFS and textFS.SetFont then + textFS:SetFont(font, 13, "OUTLINE") + textFS:SetTextColor(P.text[1], P.text[2], P.text[3]) + end + + local editBox = _G[frameName .. "EditBox"] + if editBox then + editBox:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + editBox:SetBackdropColor(0.05, 0.03, 0.05, 0.9) + editBox:SetBackdropBorderColor(P.btnBd[1], P.btnBd[2], P.btnBd[3], P.btnBd[4]) + editBox:SetFont(font, 12, "OUTLINE") + editBox:SetTextColor(P.text[1], P.text[2], P.text[3]) + end + + local moneyFrame = _G[frameName .. "MoneyFrame"] + if moneyFrame then + local mRegions = { moneyFrame:GetRegions() } + for _, r in ipairs(mRegions) do + if r and r.SetFont then r:SetFont(font, 12, "OUTLINE") end + end + end + end + + for _, suffix in ipairs({"Button1", "Button2", "Button3"}) do + local btn = _G[frameName .. suffix] + if btn then SkinButton(btn) end + end + end + + for i = 1, 4 do + local f = _G["StaticPopup" .. i] + if f then pcall(SkinPopupFrame, f) end + end + + if StaticPopup_Show then + local origShow = StaticPopup_Show + StaticPopup_Show = function(a1, a2, a3, a4) + local dialog = origShow(a1, a2, a3, a4) + if dialog then + pcall(SkinPopupFrame, dialog) + end + return dialog + end + end +end + +local function InitDarkUI() + local hookBuffButton_Update = BuffButton_Update + BuffButton_Update = function(buttonName, index, filter) + hookBuffButton_Update(buttonName, index, filter) + local name = buttonName and index and buttonName .. index or this:GetName() + local original = getfenv(0)[name .. "Border"] + if original and this.NanamiBorder then + local r, g, b = original:GetVertexColor() + this.NanamiBorder:SetBackdropBorderColor(r, g, b, 1) + original:SetAlpha(0) + end + end + + TOOLTIP_DEFAULT_COLOR.r = darkColor.r + TOOLTIP_DEFAULT_COLOR.g = darkColor.g + TOOLTIP_DEFAULT_COLOR.b = darkColor.b + + TOOLTIP_DEFAULT_BACKGROUND_COLOR.r = darkColor.r + TOOLTIP_DEFAULT_BACKGROUND_COLOR.g = darkColor.g + TOOLTIP_DEFAULT_BACKGROUND_COLOR.b = darkColor.b + + DarkenFrame(UIParent) + DarkenFrame(WorldMapFrame) + DarkenFrame(DropDownList1) + DarkenFrame(DropDownList2) + DarkenFrame(DropDownList3) + + local bars = { "Action", "BonusAction", "MultiBarBottomLeft", + "MultiBarBottomRight", "MultiBarLeft", "MultiBarRight", "Shapeshift" } + for _, prefix in pairs(bars) do + for i = 1, NUM_ACTIONBAR_BUTTONS do + local button = getfenv(0)[prefix .. "Button" .. i] + local texture = getfenv(0)[prefix .. "Button" .. i .. "NormalTexture"] + if button and texture then + texture:SetWidth(60) + texture:SetHeight(60) + texture:SetPoint("CENTER", 0, 0) + AddBorder(button, 3) + end + end + end + + for _, button in pairs({ MinimapZoomOut, MinimapZoomIn }) do + for _, func in pairs({ "GetNormalTexture", "GetDisabledTexture", "GetPushedTexture" }) do + if button[func] then + local tex = button[func](button) + if tex then + tex:SetVertexColor(darkColor.r + .2, darkColor.g + .2, darkColor.b + .2, 1) + end + end + end + end + + for addon, data in pairs(darkAddonFrames) do + local skip = false + if SFramesDB and SFramesDB.enableTradeSkill ~= false then + if addon == "Blizzard_TradeSkillUI" or addon == "Blizzard_CraftUI" then + skip = true + end + end + if not skip then + for _, frameName in pairs(data) do + local fn = frameName + HookAddonOrVariable(fn, function() + DarkenFrame(getfenv(0)[fn]) + end) + end + end + end + + HookAddonOrVariable("Blizzard_TimeManager", function() + DarkenFrame(TimeManagerClockButton) + end) + + HookAddonOrVariable("GameTooltipStatusBarBackdrop", function() + DarkenFrame(getfenv(0)["GameTooltipStatusBarBackdrop"]) + end) +end + +-------------------------------------------------------------------------------- +-- Module API +-------------------------------------------------------------------------------- +function Tweaks:Initialize() + local cfg = GetTweaksCfg() + + if cfg.autoStance ~= false then + local ok, err = pcall(InitAutoStance) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: AutoStance init failed: " .. tostring(err) .. "|r") + end + end + + if cfg.autoDismount ~= false then + local ok, err = pcall(InitAutoDismount) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: AutoDismount init failed: " .. tostring(err) .. "|r") + end + end + + if cfg.superWoW ~= false then + local ok, err = pcall(InitSuperWoW) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: SuperWoW init failed: " .. tostring(err) .. "|r") + end + end + + if cfg.turtleCompat ~= false then + local ok, err = pcall(InitTurtleCompat) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: TurtleCompat init failed: " .. tostring(err) .. "|r") + end + end + + if SFrames.WorldMap and SFrames.WorldMap.initialized then + -- New WorldMap module has taken over; skip legacy code + elseif cfg.worldMapWindow ~= false then + local ok, err = pcall(InitWorldMapWindow) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: WorldMapWindow init failed: " .. tostring(err) .. "|r") + end + end + + if cfg.cooldownNumbers ~= false then + local ok, err = pcall(InitCooldownNumbers) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: CooldownNumbers init failed: " .. tostring(err) .. "|r") + end + end + + do + local ok, err = pcall(InitQuestWatchCountdown) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: QuestWatchCountdown init failed: " .. tostring(err) .. "|r") + end + end + + if cfg.darkUI then + local ok, err = pcall(InitDarkUI) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: DarkUI init failed: " .. tostring(err) .. "|r") + end + end + + do + local ok, err = pcall(InitPopupSkin) + if not ok then + DEFAULT_CHAT_FRAME:AddMessage("|cffff4444Nanami-UI: PopupSkin init failed: " .. tostring(err) .. "|r") + end + end +end diff --git a/Units/Party.lua b/Units/Party.lua new file mode 100644 index 0000000..cf2a639 --- /dev/null +++ b/Units/Party.lua @@ -0,0 +1,1176 @@ +SFrames.Party = {} +local _A = SFrames.ActiveTheme + +local PARTY_FRAME_WIDTH = 150 +local PARTY_FRAME_HEIGHT = 35 +local PARTY_VERTICAL_GAP = 30 +local PARTY_HORIZONTAL_GAP = 8 + +local PARTY_UNIT_LOOKUP = { party1 = true, party2 = true, party3 = true, party4 = true } +local PARTYPET_UNIT_LOOKUP = { partypet1 = true, partypet2 = true, partypet3 = true, partypet4 = true } + +local function GetIncomingHeals(unit) + return SFrames:GetIncomingHeals(unit) +end + +local function TryDropCursorOnUnit(unit) + if not unit or not UnitExists(unit) then return false end + if not CursorHasItem or not CursorHasItem() then return false end + if not DropItemOnUnit then return false end + + local ok = pcall(DropItemOnUnit, unit) + if not ok then + return false + end + + return not CursorHasItem() +end + +local function Clamp(value, minValue, maxValue) + if value < minValue then + return minValue + end + if value > maxValue then + return maxValue + end + return value +end + +function SFrames.Party:GetMetrics() + local db = SFramesDB or {} + + local width = tonumber(db.partyFrameWidth) or PARTY_FRAME_WIDTH + width = Clamp(math.floor(width + 0.5), 120, 320) + + local height = tonumber(db.partyFrameHeight) or PARTY_FRAME_HEIGHT + height = Clamp(math.floor(height + 0.5), 28, 80) + + local portraitWidth = tonumber(db.partyPortraitWidth) or math.min(33, height - 2) + portraitWidth = Clamp(math.floor(portraitWidth + 0.5), 24, 64) + if portraitWidth > width - 70 then + portraitWidth = width - 70 + end + + local healthHeight = tonumber(db.partyHealthHeight) or math.floor((height - 3) * 0.7) + healthHeight = Clamp(math.floor(healthHeight + 0.5), 10, height - 8) + + local powerHeight = tonumber(db.partyPowerHeight) or (height - healthHeight - 3) + powerHeight = Clamp(math.floor(powerHeight + 0.5), 6, height - 6) + + if healthHeight + powerHeight + 3 > height then + powerHeight = height - healthHeight - 3 + if powerHeight < 6 then + powerHeight = 6 + healthHeight = height - powerHeight - 3 + if healthHeight < 10 then + healthHeight = 10 + powerHeight = height - healthHeight - 3 + end + end + end + + local hgap = tonumber(db.partyHorizontalGap) or PARTY_HORIZONTAL_GAP + hgap = Clamp(math.floor(hgap + 0.5), 0, 40) + + local vgap = tonumber(db.partyVerticalGap) or PARTY_VERTICAL_GAP + vgap = Clamp(math.floor(vgap + 0.5), 0, 80) + + local nameFont = tonumber(db.partyNameFontSize) or 10 + nameFont = Clamp(math.floor(nameFont + 0.5), 8, 18) + + local valueFont = tonumber(db.partyValueFontSize) or 10 + valueFont = Clamp(math.floor(valueFont + 0.5), 8, 18) + + return { + width = width, + height = height, + portraitWidth = portraitWidth, + healthHeight = healthHeight, + powerHeight = powerHeight, + horizontalGap = hgap, + verticalGap = vgap, + nameFont = nameFont, + valueFont = valueFont, + } +end + +function SFrames.Party:ApplyFrameStyle(frame, metrics) + if not frame then return end + + frame:SetWidth(metrics.width) + frame:SetHeight(metrics.height) + + if frame.pbg then + frame.pbg:SetWidth(metrics.portraitWidth + 2) + frame.pbg:SetHeight(metrics.height) + frame.pbg:ClearAllPoints() + frame.pbg:SetPoint("TOPLEFT", frame, "TOPLEFT", 0, 0) + end + + if frame.portrait then + frame.portrait:SetWidth(metrics.portraitWidth) + frame.portrait:SetHeight(metrics.height - 2) + if frame.pbg then + frame.portrait:ClearAllPoints() + frame.portrait:SetPoint("CENTER", frame.pbg, "CENTER", 0, 0) + end + end + + if frame.health then + frame.health:ClearAllPoints() + frame.health:SetPoint("TOPLEFT", frame.pbg, "TOPRIGHT", 2, -1) + frame.health:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -1, -1) + frame.health:SetHeight(metrics.healthHeight) + end + + if frame.healthBGFrame then + frame.healthBGFrame:ClearAllPoints() + frame.healthBGFrame:SetPoint("TOPLEFT", frame.health, "TOPLEFT", -1, 1) + frame.healthBGFrame:SetPoint("BOTTOMRIGHT", frame.health, "BOTTOMRIGHT", 1, -1) + end + + if frame.power then + frame.power:ClearAllPoints() + frame.power:SetPoint("TOPLEFT", frame.health, "BOTTOMLEFT", 0, -1) + frame.power:SetPoint("TOPRIGHT", frame.health, "BOTTOMRIGHT", 0, 0) + frame.power:SetHeight(metrics.powerHeight) + end + + if frame.powerBGFrame then + frame.powerBGFrame:ClearAllPoints() + frame.powerBGFrame:SetPoint("TOPLEFT", frame.power, "TOPLEFT", -1, 1) + frame.powerBGFrame:SetPoint("BOTTOMRIGHT", frame.power, "BOTTOMRIGHT", 1, -1) + end + + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + local fontPath = SFrames:GetFont() + + if frame.nameText then + frame.nameText:SetFont(fontPath, metrics.nameFont, outline) + end + if frame.healthText then + frame.healthText:SetFont(fontPath, metrics.valueFont, outline) + end +end + +function SFrames.Party:ApplyConfig() + if not self.parent then return end + + local frameScale = tonumber(SFramesDB and SFramesDB.partyFrameScale) or 1 + frameScale = Clamp(frameScale, 0.7, 1.8) + self.parent:SetScale(frameScale) + + local metrics = self:GetMetrics() + self.metrics = metrics + + if self.frames then + for i = 1, 4 do + local item = self.frames[i] + if item and item.frame then + self:ApplyFrameStyle(item.frame, metrics) + end + end + end + + self:ApplyLayout() + if self.testing then + for i = 1, 4 do + if self.frames[i] and self.frames[i].frame then + self.frames[i].frame:Show() + end + end + else + self:UpdateAll() + end +end + +function SFrames.Party:GetLayoutMode() + if SFramesDB and SFramesDB.partyLayout == "horizontal" then + return "horizontal" + end + return "vertical" +end + +function SFrames.Party:SavePosition() + if not (self.parent and SFramesDB) then return end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + local point, _, relativePoint, xOfs, yOfs = self.parent:GetPoint() + if point and relativePoint then + SFramesDB.Positions["PartyFrame"] = { + point = point, + relativePoint = relativePoint, + xOfs = xOfs or 0, + yOfs = yOfs or 0, + } + end +end + +function SFrames.Party:ApplyPosition() + if not self.parent then return end + self.parent:ClearAllPoints() + local pos = SFramesDB and SFramesDB.Positions and SFramesDB.Positions["PartyFrame"] + if pos and pos.point and pos.relativePoint and type(pos.xOfs) == "number" and type(pos.yOfs) == "number" then + self.parent:SetPoint(pos.point, UIParent, pos.relativePoint, pos.xOfs, pos.yOfs) + else + self.parent:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 15, -150) + end +end + +function SFrames.Party:ApplyLayout() + if not (self.parent and self.frames) then return end + + local metrics = self.metrics or self:GetMetrics() + self.metrics = metrics + local mode = self:GetLayoutMode() + for i = 1, 4 do + local f = self.frames[i] and self.frames[i].frame + if f then + f:ClearAllPoints() + if i == 1 then + f:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 0, 0) + else + local prev = self.frames[i - 1].frame + if mode == "horizontal" then + f:SetPoint("TOPLEFT", prev, "TOPRIGHT", metrics.horizontalGap, 0) + else + f:SetPoint("TOPLEFT", prev, "BOTTOMLEFT", 0, -metrics.verticalGap) + end + end + end + end + + if mode == "horizontal" then + self.parent:SetWidth((metrics.width * 4) + (metrics.horizontalGap * 3)) + self.parent:SetHeight(metrics.height) + else + self.parent:SetWidth(metrics.width) + self.parent:SetHeight(metrics.height + ((metrics.height + metrics.verticalGap) * 3)) + end +end + +function SFrames.Party:SetLayout(mode) + if not SFramesDB then SFramesDB = {} end + if mode ~= "horizontal" then + mode = "vertical" + end + SFramesDB.partyLayout = mode + self:ApplyLayout() + if self.testing then + for i = 1, 4 do + self.frames[i].frame:Show() + end + else + self:UpdateAll() + end +end + +function SFrames.Party:Initialize() + self.frames = {} + + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.partyLayout then + SFramesDB.partyLayout = "vertical" + end + + local parent = CreateFrame("Frame", "SFramesPartyParent", UIParent) + parent:SetWidth(PARTY_FRAME_WIDTH) + parent:SetHeight(PARTY_FRAME_HEIGHT) + local frameScale = (SFramesDB and type(SFramesDB.partyFrameScale) == "number") and SFramesDB.partyFrameScale or 1 + parent:SetScale(frameScale) + self.parent = parent + self:ApplyPosition() + + parent:SetMovable(true) + + for i = 1, 4 do + local unit = "party" .. i + local f = CreateFrame("Button", "SFramesPartyFrame"..i, parent) + f:SetWidth(PARTY_FRAME_WIDTH) + f:SetHeight(PARTY_FRAME_HEIGHT) + + f.id = i + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() + if IsAltKeyDown() or SFrames.isUnlocked then + SFrames.Party.parent:StartMoving() + end + end) + f:SetScript("OnDragStop", function() + SFrames.Party.parent:StopMovingOrSizing() + SFrames.Party:SavePosition() + end) + f:SetScript("OnClick", function() + if arg1 == "LeftButton" then + if TryDropCursorOnUnit(this.unit) then + return + end + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit(this.unit) + return + end + TargetUnit(this.unit) + SFrames.Party:UpdateFrame(this.unit) + elseif arg1 == "RightButton" then + ToggleDropDownMenu(1, nil, getglobal("PartyMemberFrame"..this.id.."DropDown"), "cursor") + end + end) + f:SetScript("OnReceiveDrag", function() + if TryDropCursorOnUnit(this.unit) then + return + end + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit(this.unit) + end + end) + f:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetUnit(this.unit) + end) + f:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + f.unit = unit + + -- Portrait + local pbg = CreateFrame("Frame", nil, f) + pbg:SetWidth(35) + pbg:SetHeight(35) + pbg:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0) + pbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(pbg) + f.pbg = pbg + + f.portrait = CreateFrame("PlayerModel", nil, f) + f.portrait:SetWidth(33) + f.portrait:SetHeight(33) + f.portrait:SetPoint("CENTER", pbg, "CENTER", 0, 0) + + local offlineOverlay = CreateFrame("Frame", nil, f) + offlineOverlay:SetFrameLevel((f.portrait:GetFrameLevel() or 0) + 3) + offlineOverlay:SetAllPoints(pbg) + local offlineIcon = SFrames:CreateIcon(offlineOverlay, "offline", 20) + offlineIcon:SetPoint("CENTER", offlineOverlay, "CENTER", 0, 0) + offlineIcon:SetVertexColor(0.7, 0.7, 0.7, 0.9) + offlineIcon:Hide() + f.offlineIcon = offlineIcon + + -- Health Bar + f.health = SFrames:CreateStatusBar(f, "SFramesPartyFrame"..i.."Health") + f.health:SetPoint("TOPLEFT", pbg, "TOPRIGHT", 2, -1) + f.health:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 10) + + local hbg = CreateFrame("Frame", nil, f) + hbg:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + hbg:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + hbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(hbg) + f.healthBGFrame = hbg + + f.health.bg = f.health:CreateTexture(nil, "BACKGROUND") + f.health.bg:SetAllPoints() + f.health.bg:SetTexture(SFrames:GetTexture()) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Heal prediction overlay (incoming heals) + f.health.healPredMine = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredMine:SetTexture(SFrames:GetTexture()) + f.health.healPredMine:SetVertexColor(0.4, 1.0, 0.55, 0.78) + f.health.healPredMine:Hide() + + f.health.healPredOther = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredOther:SetTexture(SFrames:GetTexture()) + f.health.healPredOther:SetVertexColor(0.2, 0.9, 0.35, 0.5) + f.health.healPredOther:Hide() + + -- Power Bar + f.power = SFrames:CreateStatusBar(f, "SFramesPartyFrame"..i.."Power") + f.power:SetPoint("TOPLEFT", f.health, "BOTTOMLEFT", 0, -1) + f.power:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1) + f.power:SetMinMaxValues(0, 100) + + local powerbg = CreateFrame("Frame", nil, f) + powerbg:SetPoint("TOPLEFT", f.power, "TOPLEFT", -1, 1) + powerbg:SetPoint("BOTTOMRIGHT", f.power, "BOTTOMRIGHT", 1, -1) + powerbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(powerbg) + f.powerBGFrame = powerbg + + f.power.bg = f.power:CreateTexture(nil, "BACKGROUND") + f.power.bg:SetAllPoints() + f.power.bg:SetTexture(SFrames:GetTexture()) + f.power.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Texts + f.nameText = SFrames:CreateFontString(f.health, 10, "LEFT") + f.nameText:SetPoint("LEFT", f.health, "LEFT", 4, 0) + + f.healthText = SFrames:CreateFontString(f.health, 10, "RIGHT") + f.healthText:SetPoint("RIGHT", f.health, "RIGHT", -4, 0) + + f.nameText:SetShadowColor(0, 0, 0, 1) + f.nameText:SetShadowOffset(1, -1) + f.healthText:SetShadowColor(0, 0, 0, 1) + f.healthText:SetShadowOffset(1, -1) + + -- Leader / Master Looter overlay (high frame level so icons aren't hidden by portrait) + local roleOvr = CreateFrame("Frame", nil, f) + roleOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 4) + roleOvr:SetAllPoints(f) + + -- Leader Icon + f.leaderIcon = roleOvr:CreateTexture(nil, "OVERLAY") + f.leaderIcon:SetWidth(14) + f.leaderIcon:SetHeight(14) + f.leaderIcon:SetPoint("TOPLEFT", pbg, "TOPLEFT", -4, 4) + f.leaderIcon:SetTexture("Interface\\GroupFrame\\UI-Group-LeaderIcon") + f.leaderIcon:Hide() + + -- Master Looter Icon + f.masterIcon = roleOvr:CreateTexture(nil, "OVERLAY") + f.masterIcon:SetWidth(12) + f.masterIcon:SetHeight(12) + f.masterIcon:SetPoint("TOPRIGHT", pbg, "TOPRIGHT", 4, 4) + f.masterIcon:SetTexture("Interface\\GroupFrame\\UI-Group-MasterLooter") + f.masterIcon:Hide() + + -- Raid Target Icon + local raidIconSize = 18 + local raidIconOvr = CreateFrame("Frame", nil, f) + raidIconOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 5) + raidIconOvr:SetWidth(raidIconSize) + raidIconOvr:SetHeight(raidIconSize) + raidIconOvr:SetPoint("CENTER", f.health, "TOP", 0, 0) + f.raidIcon = raidIconOvr:CreateTexture(nil, "OVERLAY") + f.raidIcon:SetTexture("Interface\\TargetingFrame\\UI-RaidTargetingIcons") + f.raidIcon:SetAllPoints(raidIconOvr) + f.raidIcon:Hide() + f.raidIconOverlay = raidIconOvr + + -- Pet Frame + local pf = CreateFrame("Button", "SFramesPartyPetFrame"..i, f) + pf:SetHeight(8) + pf:SetPoint("BOTTOMLEFT", f.health, "TOPLEFT", 0, 2) + pf:SetPoint("BOTTOMRIGHT", f.health, "TOPRIGHT", 0, 2) + pf.unit = "partypet"..i + + SFrames:CreateUnitBackdrop(pf) + pf.health = SFrames:CreateStatusBar(pf, "SFramesPartyPetHealth"..i) + pf.health:SetAllPoints() + pf.health.bg = pf.health:CreateTexture(nil, "BACKGROUND") + pf.health.bg:SetAllPoints() + pf.health.bg:SetTexture(SFrames:GetTexture()) + pf.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + pf.nameText = SFrames:CreateFontString(pf.health, 8, "LEFT") + pf.nameText:SetPoint("LEFT", pf.health, "LEFT", 2, 0) + pf.nameText:SetShadowColor(0, 0, 0, 1) + pf.nameText:SetShadowOffset(1, -1) + + pf:RegisterForClicks("LeftButtonUp", "RightButtonUp") + pf:SetScript("OnClick", function() TargetUnit(this.unit) end) + pf:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetUnit(this.unit) + end) + pf:SetScript("OnLeave", function() GameTooltip:Hide() end) + pf:Hide() + f.petFrame = pf + + self.frames[i] = { frame = f, unit = unit, index = i } + f.unit = unit + + self:CreateAuras(i) + + f:SetScript("OnShow", function() + if not SFrames.Party.testing then + SFrames.Party:UpdateFrame(this.unit) + end + end) + + f:Hide() + end + + if not self._globalUpdateFrame then + self._globalUpdateFrame = CreateFrame("Frame", nil, UIParent) + self._globalUpdateFrame:SetScript("OnUpdate", function() + if SFrames.Party.testing then return end + local dt = arg1 + local frames = SFrames.Party.frames + if not frames then return end + for i = 1, 4 do + local entry = frames[i] + if entry then + local f = entry.frame + if f:IsVisible() and f.unit and f.unit ~= "" then + f.rangeTimer = f.rangeTimer + dt + if f.rangeTimer >= 0.5 then + if UnitExists(f.unit) and not CheckInteractDistance(f.unit, 4) then + f:SetAlpha(0.5) + else + f:SetAlpha(1.0) + end + f.rangeTimer = 0 + end + + f.auraScanTimer = f.auraScanTimer + dt + if f.auraScanTimer >= 0.5 then + SFrames.Party:UpdateAuras(f.unit) + f.auraScanTimer = 0 + end + + f.healPredTimer = f.healPredTimer + dt + if f.healPredTimer >= 0.2 then + SFrames.Party:UpdateHealPrediction(f.unit) + f.healPredTimer = 0 + end + + f.tickAuraTimer = f.tickAuraTimer + dt + if f.tickAuraTimer >= 0.5 then + SFrames.Party:TickAuras(f.unit) + f.tickAuraTimer = 0 + end + end + end + end + end) + end + + self:ApplyConfig() + + SFrames:RegisterEvent("PARTY_MEMBERS_CHANGED", function() self:UpdateAll() end) + SFrames:RegisterEvent("RAID_ROSTER_UPDATE", function() self:UpdateAll() end) + SFrames:RegisterEvent("UNIT_HEALTH", function() + if PARTY_UNIT_LOOKUP[arg1] then self:UpdateHealth(arg1) + elseif PARTYPET_UNIT_LOOKUP[arg1] then self:UpdatePet(arg1) end + end) + SFrames:RegisterEvent("UNIT_MAXHEALTH", function() + if PARTY_UNIT_LOOKUP[arg1] then self:UpdateHealth(arg1) + elseif PARTYPET_UNIT_LOOKUP[arg1] then self:UpdatePet(arg1) end + end) + SFrames:RegisterEvent("UNIT_MANA", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_MAXMANA", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_RAGE", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_MAXRAGE", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_ENERGY", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_MAXENERGY", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_FOCUS", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_MAXFOCUS", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_DISPLAYPOWER", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePowerType(arg1) end end) + SFrames:RegisterEvent("UNIT_PORTRAIT_UPDATE", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePortrait(arg1) end end) + SFrames:RegisterEvent("UNIT_AURA", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdateAuras(arg1) end end) + SFrames:RegisterEvent("UNIT_LEVEL", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdateFrame(arg1) end end) + SFrames:RegisterEvent("PARTY_LEADER_CHANGED", function() self:UpdateAll() end) + SFrames:RegisterEvent("PARTY_LOOT_METHOD_CHANGED", function() self:UpdateAll() end) + SFrames:RegisterEvent("UNIT_PET", function() if PARTY_UNIT_LOOKUP[arg1] then self:UpdatePet("partypet" .. string.sub(arg1, 6)) end end) + SFrames:RegisterEvent("RAID_TARGET_UPDATE", function() self:UpdateRaidIcons() end) + + -- Bulletproof Party load syncer (watches for count changes for 10 seconds after reload) + local syncWatcher = CreateFrame("Frame") + local syncTimer = 0 + local lastCount = -1 + syncWatcher:SetScript("OnUpdate", function() + syncTimer = syncTimer + arg1 + local count = GetNumPartyMembers() + if count ~= lastCount then + lastCount = count + SFrames.Party:UpdateAll() + end + if syncTimer > 10.0 then + this:SetScript("OnUpdate", nil) + end + end) + + self:UpdateAll() +end + +function SFrames.Party:CreateAuras(index) + local f = self.frames[index].frame + f.buffs = {} + f.debuffs = {} + local size = 20 + local spacing = 2 + + -- Party Buffs + for i = 1, 4 do + local b = CreateFrame("Button", "SFramesParty"..index.."Buff"..i, f) + b:SetWidth(size) + b:SetHeight(size) + SFrames:CreateUnitBackdrop(b) + + b.icon = b:CreateTexture(nil, "ARTWORK") + b.icon:SetAllPoints() + b.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + b.cdText = SFrames:CreateFontString(b, 9, "CENTER") + b.cdText:SetPoint("BOTTOM", b, "BOTTOM", 0, 1) + b.cdText:SetTextColor(1, 0.82, 0) + b.cdText:SetShadowColor(0, 0, 0, 1) + b.cdText:SetShadowOffset(1, -1) + + b:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitBuff(f.unit, this:GetID()) + end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + + -- Anchored BELOW the frame on the left side + if i == 1 then + b:SetPoint("TOPLEFT", f, "BOTTOMLEFT", 0, -2) + else + b:SetPoint("LEFT", f.buffs[i-1], "RIGHT", spacing, 0) + end + + b:Hide() + f.buffs[i] = b + end + + -- Debuffs (Starting right after Buffs to remain linear) + for i = 1, 4 do + local b = CreateFrame("Button", "SFramesParty"..index.."Debuff"..i, f) + b:SetWidth(size) + b:SetHeight(size) + SFrames:CreateUnitBackdrop(b) + + b.icon = b:CreateTexture(nil, "ARTWORK") + b.icon:SetAllPoints() + b.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + b.cdText = SFrames:CreateFontString(b, 9, "CENTER") + b.cdText:SetPoint("BOTTOM", b, "BOTTOM", 0, 1) + b.cdText:SetTextColor(1, 0.82, 0) + b.cdText:SetShadowColor(0, 0, 0, 1) + b.cdText:SetShadowOffset(1, -1) + + b:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitDebuff(f.unit, this:GetID()) + end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + + if i == 1 then + b:SetPoint("LEFT", f.buffs[4], "RIGHT", spacing * 4, 0) + else + b:SetPoint("LEFT", f.debuffs[i-1], "RIGHT", spacing, 0) + end + + b:Hide() + f.debuffs[i] = b + end + + f.auraScanTimer = 0 + f.rangeTimer = 0 + f.healPredTimer = 0 + f.tickAuraTimer = 0 +end + +function SFrames.Party:UpdatePet(unit) + local _, _, indexStr = string.find(unit, "(%d+)") + local index = tonumber(indexStr) + if not index or not self.frames[index] then return end + local pf = self.frames[index].frame.petFrame + if not pf then return end + + if UnitExists(unit) and UnitIsConnected("party"..index) then + pf:Show() + local name = UnitName(unit) + if name == UNKNOWNOBJECT or name == "未知目标" or name == "Unknown" then + name = "宠物" + end + pf.nameText:SetText(name) + + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + pf.health:SetMinMaxValues(0, maxHp) + pf.health:SetValue(hp) + pf.health:SetStatusBarColor(0.2, 0.8, 0.2) + else + pf:Hide() + end +end + + +function SFrames.Party:TickAuras(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + local timeNow = GetTime() + + for i = 1, 4 do + local b = f.buffs[i] + if b:IsShown() and b.expirationTime then + local timeLeft = b.expirationTime - timeNow + if timeLeft > 0 and timeLeft < 3600 then + b.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + b.cdText:SetText("") + end + end + + local db = f.debuffs[i] + if db:IsShown() and db.expirationTime then + local timeLeft = db.expirationTime - timeNow + if timeLeft > 0 and timeLeft < 3600 then + db.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + db.cdText:SetText("") + end + end + end +end + +function SFrames.Party:GetFrameByUnit(unit) + for i = 1, 4 do + if self.frames[i].unit == unit then + return self.frames[i] + end + end + return nil +end + +function SFrames.Party:UpdateAll() + if self.testing then return end + + local inRaid = GetNumRaidMembers() > 0 + local raidFramesEnabled = SFramesDB and SFramesDB.enableRaidFrames ~= false + + if inRaid and raidFramesEnabled then + for i = 1, 4 do + if self.frames[i] and self.frames[i].frame then + self.frames[i].frame:Hide() + end + end + return + end + if self.testing then return end + local numParty = GetNumPartyMembers() + for i = 1, 4 do + local data = self.frames[i] + local f = data.frame + if i <= numParty then + f:Show() + self:UpdateFrame(data.unit) + else + f:Hide() + end + end +end + +function SFrames.Party:UpdateFrame(unit) + if self.testing then return end + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + + f.portrait:SetUnit(unit) + f.portrait:SetCamera(0) + f.portrait:Hide() + f.portrait:Show() + + local name = UnitName(unit) or "" + local level = UnitLevel(unit) + if level == -1 then level = "??" end + + local _, class = UnitClass(unit) + + if not UnitIsConnected(unit) then + f.health:SetStatusBarColor(0.5, 0.5, 0.5) + f.nameText:SetText(name) + f.nameText:SetTextColor(0.5, 0.5, 0.5) + if f.offlineIcon then f.offlineIcon:Show() end + else + if f.offlineIcon then f.offlineIcon:Hide() end + if class and SFrames.Config.colors.class[class] then + local color = SFrames.Config.colors.class[class] + f.health:SetStatusBarColor(color.r, color.g, color.b) + f.nameText:SetText(level .. " " .. name) + f.nameText:SetTextColor(color.r, color.g, color.b) + else + f.health:SetStatusBarColor(0, 1, 0) + f.nameText:SetText(level .. " " .. name) + f.nameText:SetTextColor(1, 1, 1) + end + end + + -- Update Leader/Master Looter + if GetPartyLeaderIndex() == data.index then + f.leaderIcon:Show() + else + f.leaderIcon:Hide() + end + + local method, partyIndex, raidIndex = GetLootMethod() + if method == "master" and partyIndex == data.index then + f.masterIcon:Show() + else + f.masterIcon:Hide() + end + + self:UpdateHealth(unit) + self:UpdatePowerType(unit) + self:UpdatePower(unit) + self:UpdateAuras(unit) + self:UpdateRaidIcon(unit) + + local petUnit = string.gsub(unit, "party", "partypet") + self:UpdatePet(petUnit) +end + +function SFrames.Party:UpdatePortrait(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + f.portrait:SetUnit(unit) + f.portrait:SetCamera(0) + f.portrait:Hide() + f.portrait:Show() +end + +function SFrames.Party:UpdateHealth(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + + if not UnitIsConnected(unit) then + f.health:SetMinMaxValues(0, 100) + f.health:SetValue(0) + f.healthText:SetText("Offline") + if f.health.healPredMine then f.health.healPredMine:Hide() end + if f.health.healPredOther then f.health.healPredOther:Hide() end + if f.offlineIcon then f.offlineIcon:Show() end + return + end + if f.offlineIcon then f.offlineIcon:Hide() end + + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + f.health:SetMinMaxValues(0, maxHp) + f.health:SetValue(hp) + + if maxHp > 0 then + local percent = math.floor((hp / maxHp) * 100) + f.healthText:SetText(percent .. "%") + else + f.healthText:SetText("") + end + + self:UpdateHealPrediction(unit) +end + +function SFrames.Party:UpdateHealPrediction(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + if not (f.health and f.health.healPredMine and f.health.healPredOther) then return end + + local predMine = f.health.healPredMine + local predOther = f.health.healPredOther + + local function HidePredictions() + predMine:Hide() + predOther:Hide() + end + + if not UnitExists(unit) or not UnitIsConnected(unit) then + HidePredictions() + return + end + + local hp = UnitHealth(unit) or 0 + local maxHp = UnitHealthMax(unit) or 0 + if maxHp <= 0 or hp >= maxHp then + HidePredictions() + return + end + + local _, mineIncoming, othersIncoming = GetIncomingHeals(unit) + local missing = maxHp - hp + if missing <= 0 then + HidePredictions() + return + end + + local mineShown = math.min(math.max(0, mineIncoming), missing) + local remaining = missing - mineShown + local otherShown = math.min(math.max(0, othersIncoming), remaining) + if mineShown <= 0 and otherShown <= 0 then + HidePredictions() + return + end + + local barWidth = f.health:GetWidth() or 0 + if barWidth <= 0 then + HidePredictions() + return + end + + local currentWidth = math.floor((hp / maxHp) * barWidth + 0.5) + if currentWidth < 0 then currentWidth = 0 end + if currentWidth > barWidth then currentWidth = barWidth end + + local availableWidth = barWidth - currentWidth + if availableWidth <= 0 then + HidePredictions() + return + end + + local mineWidth = math.floor((mineShown / maxHp) * barWidth + 0.5) + local otherWidth = math.floor((otherShown / maxHp) * barWidth + 0.5) + if mineWidth < 0 then mineWidth = 0 end + if otherWidth < 0 then otherWidth = 0 end + if mineWidth > availableWidth then mineWidth = availableWidth end + if otherWidth > (availableWidth - mineWidth) then + otherWidth = availableWidth - mineWidth + end + + if mineWidth > 0 then + predMine:ClearAllPoints() + predMine:SetPoint("TOPLEFT", f.health, "TOPLEFT", currentWidth, 0) + predMine:SetPoint("BOTTOMLEFT", f.health, "BOTTOMLEFT", currentWidth, 0) + predMine:SetWidth(mineWidth) + predMine:Show() + else + predMine:Hide() + end + + if otherWidth > 0 then + predOther:ClearAllPoints() + predOther:SetPoint("TOPLEFT", f.health, "TOPLEFT", currentWidth + mineWidth, 0) + predOther:SetPoint("BOTTOMLEFT", f.health, "BOTTOMLEFT", currentWidth + mineWidth, 0) + predOther:SetWidth(otherWidth) + predOther:Show() + else + predOther:Hide() + end +end + +function SFrames.Party:UpdatePowerType(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + + local powerType = UnitPowerType(unit) + local color = SFrames.Config.colors.power[powerType] + if color then + f.power:SetStatusBarColor(color.r, color.g, color.b) + else + f.power:SetStatusBarColor(0, 0, 1) + end +end + +function SFrames.Party:UpdatePower(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + + if not UnitIsConnected(unit) then + f.power:SetMinMaxValues(0, 100) + f.power:SetValue(0) + return + end + + local power = UnitMana(unit) + local maxPower = UnitManaMax(unit) + f.power:SetMinMaxValues(0, maxPower) + f.power:SetValue(power) +end + +function SFrames.Party:UpdateRaidIcons() + for i = 1, 4 do + if self.frames[i] and self.frames[i].frame:IsShown() then + self:UpdateRaidIcon(self.frames[i].unit) + end + end +end + +function SFrames.Party:UpdateRaidIcon(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + if not f.raidIcon then return end + if not GetRaidTargetIndex then + f.raidIcon:Hide() + return + end + if not UnitExists(unit) then + f.raidIcon:Hide() + return + end + local index = GetRaidTargetIndex(unit) + if index and index > 0 and index <= 8 then + local col = math.mod(index - 1, 4) + local row = math.floor((index - 1) / 4) + f.raidIcon:SetTexCoord(col * 0.25, (col + 1) * 0.25, row * 0.25, (row + 1) * 0.25) + f.raidIcon:Show() + else + f.raidIcon:Hide() + end +end + +function SFrames.Party:UpdateAuras(unit) + local data = self:GetFrameByUnit(unit) + if not data then return end + local f = data.frame + + local showDebuffs = not (SFramesDB and SFramesDB.partyShowDebuffs == false) + local showBuffs = not (SFramesDB and SFramesDB.partyShowBuffs == false) + + local hasDebuff = false + local debuffColor = {r=_A.slotBg[1], g=_A.slotBg[2], b=_A.slotBg[3]} + + SFrames.Tooltip:SetOwner(UIParent, "ANCHOR_NONE") + + -- Debuffs + if showDebuffs then + for i = 1, 4 do + local texture, applications, debuffType = UnitDebuff(unit, i) + local b = f.debuffs[i] + b:SetID(i) + + if texture then + if debuffType then + hasDebuff = true + if debuffType == "Magic" then debuffColor = {r=0.2, g=0.6, b=1} + elseif debuffType == "Curse" then debuffColor = {r=0.6, g=0, b=1} + elseif debuffType == "Disease" then debuffColor = {r=0.6, g=0.4, b=0} + elseif debuffType == "Poison" then debuffColor = {r=0, g=0.6, b=0} + end + end + + b.icon:SetTexture(texture) + + SFrames.Tooltip:ClearLines() + SFrames.Tooltip:SetUnitDebuff(unit, i) + local timeLeft = SFrames:GetAuraTimeLeft(unit, i, false) + if timeLeft and timeLeft > 0 then + local newExp = GetTime() + timeLeft + if not b.expirationTime or math.abs(b.expirationTime - newExp) > 2 then + b.expirationTime = newExp + end + local currentLeft = b.expirationTime - GetTime() + if currentLeft > 0 and currentLeft < 3600 then + b.cdText:SetText(SFrames:FormatTime(currentLeft)) + else + b.cdText:SetText("") + end + else + b.expirationTime = nil + b.cdText:SetText("") + end + + b:Show() + else + b.expirationTime = nil + b.cdText:SetText("") + b:Hide() + end + end + else + for i = 1, 4 do + local b = f.debuffs[i] + b.expirationTime = nil + b.cdText:SetText("") + b:Hide() + end + end + + if hasDebuff then + f.health.bg:SetVertexColor(debuffColor.r, debuffColor.g, debuffColor.b, 1) + else + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + end + + -- Buffs + if showBuffs then + for i = 1, 4 do + local texture = UnitBuff(unit, i) + local b = f.buffs[i] + b:SetID(i) + + if texture then + b.icon:SetTexture(texture) + + SFrames.Tooltip:ClearLines() + SFrames.Tooltip:SetUnitBuff(unit, i) + local timeLeft = SFrames:GetAuraTimeLeft(unit, i, true) + if timeLeft and timeLeft > 0 then + local newExp = GetTime() + timeLeft + if not b.expirationTime or math.abs(b.expirationTime - newExp) > 2 then + b.expirationTime = newExp + end + local currentLeft = b.expirationTime - GetTime() + if currentLeft > 0 and currentLeft < 3600 then + b.cdText:SetText(SFrames:FormatTime(currentLeft)) + else + b.cdText:SetText("") + end + else + b.expirationTime = nil + b.cdText:SetText("") + end + + b:Show() + else + b.expirationTime = nil + b.cdText:SetText("") + b:Hide() + end + end + else + for i = 1, 4 do + local b = f.buffs[i] + b.expirationTime = nil + b.cdText:SetText("") + b:Hide() + end + end +end + +function SFrames.Party:TestMode() + self.testing = not self.testing + if self.testing then + for i = 1, 4 do + local data = self.frames[i] + local f = data.frame + f:Show() + + f.health:SetMinMaxValues(0, 100) + f.health:SetValue(math.random(30, 90)) + f.health:SetStatusBarColor(SFrames.Config.colors.class["DRUID"].r, SFrames.Config.colors.class["DRUID"].g, SFrames.Config.colors.class["DRUID"].b) + f.nameText:SetText("60 队友" .. i) + f.nameText:SetTextColor(SFrames.Config.colors.class["DRUID"].r, SFrames.Config.colors.class["DRUID"].g, SFrames.Config.colors.class["DRUID"].b) + f.healthText:SetText(math.floor(f.health:GetValue()) .. "%") + if f.health.healPredMine then f.health.healPredMine:Hide() end + if f.health.healPredOther then f.health.healPredOther:Hide() end + + f.power:SetMinMaxValues(0, 100) + f.power:SetValue(math.random(20, 100)) + f.power:SetStatusBarColor(SFrames.Config.colors.power[0].r, SFrames.Config.colors.power[0].g, SFrames.Config.colors.power[0].b) + + f.leaderIcon:Hide() + f.masterIcon:Hide() + if i == 1 then + f.leaderIcon:Show() + f.masterIcon:Show() + end + + -- Show one dummy debuff to test positioning + f.debuffs[1].icon:SetTexture("Interface\\Icons\\Spell_Shadow_ShadowWordPain") + f.debuffs[1]:Show() + + -- Test pet + if f.petFrame then + f.petFrame:Show() + f.petFrame.nameText:SetText("测试宠物") + f.petFrame.health:SetMinMaxValues(0, 100) + f.petFrame.health:SetValue(100) + f.petFrame.health:SetStatusBarColor(0.2, 0.8, 0.2) + end + end + else + self:UpdateAll() + for i = 1, 4 do + self.frames[i].frame.debuffs[1]:Hide() + end + end +end diff --git a/Units/Pet.lua b/Units/Pet.lua new file mode 100644 index 0000000..eee161a --- /dev/null +++ b/Units/Pet.lua @@ -0,0 +1,787 @@ +SFrames.Pet = {} +local _A = SFrames.ActiveTheme + +local function Clamp(value, minValue, maxValue) + if value < minValue then return minValue end + if value > maxValue then return maxValue end + return value +end + +function SFrames.Pet:Initialize() + local f = CreateFrame("Button", "SFramesPetFrame", UIParent) + f:SetWidth(150) + f:SetHeight(30) + + if SFramesDB and SFramesDB.Positions and SFramesDB.Positions["PetFrame"] then + local pos = SFramesDB.Positions["PetFrame"] + f:SetPoint(pos.point, UIParent, pos.relativePoint, pos.xOfs, pos.yOfs) + else + f:SetPoint("TOPLEFT", SFramesPlayerFrame, "BOTTOMLEFT", 10, -55) + end + + local frameScale = (SFramesDB and type(SFramesDB.petFrameScale) == "number") and SFramesDB.petFrameScale or 1 + f:SetScale(Clamp(frameScale, 0.7, 1.8)) + + f:SetMovable(true) + f:EnableMouse(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() if IsAltKeyDown() or SFrames.isUnlocked then f:StartMoving() end end) + f:SetScript("OnDragStop", function() + f:StopMovingOrSizing() + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + local point, relativeTo, relativePoint, xOfs, yOfs = f:GetPoint() + SFramesDB.Positions["PetFrame"] = { point = point, relativePoint = relativePoint, xOfs = xOfs, yOfs = yOfs } + end) + + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:SetScript("OnClick", function() + if arg1 == "LeftButton" then + if SpellIsTargeting() then + SpellTargetUnit("pet") + elseif CursorHasItem() then + DropItemOnUnit("pet") + else + TargetUnit("pet") + end + else + ToggleDropDownMenu(1, nil, PetFrameDropDown, "SFramesPetFrame", 106, 27) + end + end) + + f:SetScript("OnReceiveDrag", function() + if CursorHasItem() then + DropItemOnUnit("pet") + end + end) + + f:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetUnit("pet") + GameTooltip:Show() + end) + f:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + SFrames:CreateUnitBackdrop(f) + + -- Health Bar + f.health = SFrames:CreateStatusBar(f, "SFramesPetHealth") + f.health:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1) + f.health:SetPoint("TOPRIGHT", f, "TOPRIGHT", -1, -1) + f.health:SetHeight(18) + + local hbg = CreateFrame("Frame", nil, f) + hbg:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + hbg:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + hbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(hbg) + + f.health.bg = f.health:CreateTexture(nil, "BACKGROUND") + f.health.bg:SetAllPoints() + f.health.bg:SetTexture(SFrames:GetTexture()) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Power Bar + f.power = SFrames:CreateStatusBar(f, "SFramesPetPower") + f.power:SetPoint("TOPLEFT", f.health, "BOTTOMLEFT", 0, -1) + f.power:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1) + + local pbg = CreateFrame("Frame", nil, f) + pbg:SetPoint("TOPLEFT", f.power, "TOPLEFT", -1, 1) + pbg:SetPoint("BOTTOMRIGHT", f.power, "BOTTOMRIGHT", 1, -1) + pbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(pbg) + + f.power.bg = f.power:CreateTexture(nil, "BACKGROUND") + f.power.bg:SetAllPoints() + f.power.bg:SetTexture(SFrames:GetTexture()) + f.power.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Texts + local fontPath = SFrames:GetFont() + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + + f.nameText = SFrames:CreateFontString(f.health, 10, "LEFT") + f.nameText:SetPoint("LEFT", f.health, "LEFT", 4, 0) + f.nameText:SetWidth(75) + f.nameText:SetHeight(12) + f.nameText:SetJustifyH("LEFT") + f.nameText:SetFont(fontPath, 10, outline) + f.nameText:SetShadowColor(0, 0, 0, 1) + f.nameText:SetShadowOffset(1, -1) + + f.healthText = SFrames:CreateFontString(f.health, 10, "RIGHT") + f.healthText:SetPoint("RIGHT", f.health, "RIGHT", -4, 0) + f.healthText:SetFont(fontPath, 10, outline) + f.healthText:SetShadowColor(0, 0, 0, 1) + f.healthText:SetShadowOffset(1, -1) + + -- Happiness Icon (for hunters) + local hBG = CreateFrame("Frame", nil, f) + hBG:SetWidth(20) + hBG:SetHeight(20) + hBG:SetPoint("RIGHT", f, "LEFT", -2, 0) + SFrames:CreateUnitBackdrop(hBG) + + f.happiness = hBG:CreateTexture(nil, "OVERLAY") + f.happiness:SetPoint("TOPLEFT", hBG, "TOPLEFT", 1, -1) + f.happiness:SetPoint("BOTTOMRIGHT", hBG, "BOTTOMRIGHT", -1, 1) + f.happiness:SetTexture("Interface\\PetPaperDollFrame\\UI-PetHappiness") + + f.happinessBG = hBG + f.happinessBG:Hide() + + self.frame = f + self.frame.unit = "pet" + f:Hide() + + SFrames:RegisterEvent("UNIT_PET", function() if arg1 == "player" then self:UpdateAll() end end) + SFrames:RegisterEvent("PET_BAR_UPDATE", function() self:UpdateAll() end) + SFrames:RegisterEvent("UNIT_HEALTH", function() if arg1 == "pet" then self:UpdateHealth() end end) + SFrames:RegisterEvent("UNIT_MAXHEALTH", function() if arg1 == "pet" then self:UpdateHealth() end end) + SFrames:RegisterEvent("UNIT_MANA", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXMANA", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_ENERGY", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXENERGY", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_FOCUS", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXFOCUS", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_RAGE", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXRAGE", function() if arg1 == "pet" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_DISPLAYPOWER", function() if arg1 == "pet" then self:UpdatePowerType() end end) + SFrames:RegisterEvent("UNIT_HAPPINESS", function() if arg1 == "pet" then self:UpdateHappiness() end end) + SFrames:RegisterEvent("UNIT_NAME_UPDATE", function() if arg1 == "pet" then self:UpdateAll() end end) + SFrames:RegisterEvent("PLAYER_ENTERING_WORLD", function() self:UpdateAll() end) + + self:InitFoodFeature() + self:UpdateAll() +end + +function SFrames.Pet:UpdateAll() + if UnitExists("pet") then + if SFramesDB and SFramesDB.showPetFrame == false then + self.frame:Hide() + if self.foodPanel then self.foodPanel:Hide() end + return + end + + self.frame:Show() + self:UpdateHealth() + self:UpdatePowerType() + self:UpdatePower() + self:UpdateHappiness() + + local name = UnitName("pet") + if name == UNKNOWNOBJECT or name == "未知目标" or name == "Unknown" then + name = "宠物" + end + self.frame.nameText:SetText(name) + + local r, g, b = 0.33, 0.59, 0.33 + self.frame.health:SetStatusBarColor(r, g, b) + else + self.frame:Hide() + if self.foodPanel then self.foodPanel:Hide() end + end +end + +function SFrames.Pet:UpdateHealth() + local hp = UnitHealth("pet") + local maxHp = UnitHealthMax("pet") + self.frame.health:SetMinMaxValues(0, maxHp) + self.frame.health:SetValue(hp) + + if maxHp > 0 then + self.frame.healthText:SetText(hp .. " / " .. maxHp) + else + self.frame.healthText:SetText("") + end +end + +function SFrames.Pet:UpdatePowerType() + local powerType = UnitPowerType("pet") + local color = SFrames.Config.colors.power[powerType] + if color then + self.frame.power:SetStatusBarColor(color.r, color.g, color.b) + else + self.frame.power:SetStatusBarColor(0, 0, 1) + end +end + +function SFrames.Pet:UpdatePower() + local power = UnitMana("pet") + local maxPower = UnitManaMax("pet") + self.frame.power:SetMinMaxValues(0, maxPower) + self.frame.power:SetValue(power) +end + +function SFrames.Pet:UpdateHappiness() + local happiness = GetPetHappiness() + if not happiness then + self.frame.happinessBG:Hide() + self:UpdateFoodButton() + return + end + + local isHunter = false + local _, class = UnitClass("player") + if class == "HUNTER" then isHunter = true end + + if isHunter then + if happiness == 1 then + self.frame.happiness:SetTexCoord(0.375, 0.5625, 0, 0.359375) + self.frame.happinessBG:Show() + elseif happiness == 2 then + self.frame.happiness:SetTexCoord(0.1875, 0.375, 0, 0.359375) + self.frame.happinessBG:Show() + elseif happiness == 3 then + self.frame.happiness:SetTexCoord(0, 0.1875, 0, 0.359375) + self.frame.happinessBG:Show() + end + else + self.frame.happinessBG:Hide() + end + self:UpdateFoodButton() +end + +-------------------------------------------------------------------------------- +-- Pet Food Feature (Hunter only) +-- Food button on pet frame, food selection panel, quick-feed via right-click +-------------------------------------------------------------------------------- + +local petFoodScanTip +local cachedFeedSpell + +local function EnsureFoodScanTooltip() + if not petFoodScanTip then + petFoodScanTip = CreateFrame("GameTooltip", "NanamiPetFoodScanTip", UIParent, "GameTooltipTemplate") + petFoodScanTip:SetOwner(UIParent, "ANCHOR_NONE") + end + return petFoodScanTip +end + +local function GetFeedPetSpell() + if cachedFeedSpell then return cachedFeedSpell end + for tab = 1, GetNumSpellTabs() do + local _, _, offset, numSpells = GetSpellTabInfo(tab) + for i = offset + 1, offset + numSpells do + local spellName = GetSpellName(i, BOOKTYPE_SPELL) + if spellName and (spellName == "Feed Pet" or spellName == "喂养宠物") then + cachedFeedSpell = spellName + return cachedFeedSpell + end + end + end + cachedFeedSpell = "Feed Pet" + return cachedFeedSpell +end + +local REJECT_NAME_PATTERNS = { + "Potion", "potion", "药水", + "Elixir", "elixir", "药剂", + "Flask", "flask", "合剂", + "Bandage", "bandage", "绷带", + "Scroll", "scroll", "卷轴", + "Healthstone", "healthstone", "治疗石", + "Mana Gem", "法力宝石", + "Thistle Tea", "蓟花茶", + "Firewater", "火焰花水", + "Juju", "符咒", +} + +local function NameIsRejected(itemName) + for i = 1, table.getn(REJECT_NAME_PATTERNS) do + if string.find(itemName, REJECT_NAME_PATTERNS[i], 1, true) then + return true + end + end + return false +end + +local function IsItemPetFood(bag, slot) + local link = GetContainerItemLink(bag, slot) + if not link then return false end + + local texture = GetContainerItemInfo(bag, slot) + + local _, _, itemIdStr = string.find(link, "item:(%d+)") + local name, itemType, subType + + if itemIdStr then + local n, _, _, _, _, t, st = GetItemInfo("item:" .. itemIdStr) + name = n + itemType = t + subType = st + end + + if not name then + local _, _, parsed = string.find(link, "%[(.+)%]") + name = parsed + end + if not name then return false end + + if NameIsRejected(name) then + return false + end + + if itemType then + if itemType ~= "Consumable" and itemType ~= "消耗品" then + return false + end + if subType then + if string.find(subType, "Potion", 1, true) or string.find(subType, "药水", 1, true) + or string.find(subType, "Elixir", 1, true) or string.find(subType, "药剂", 1, true) + or string.find(subType, "Flask", 1, true) or string.find(subType, "合剂", 1, true) + or string.find(subType, "Bandage", 1, true) or string.find(subType, "绷带", 1, true) + or string.find(subType, "Scroll", 1, true) or string.find(subType, "卷轴", 1, true) then + return false + end + if string.find(subType, "Food", 1, true) or string.find(subType, "食物", 1, true) then + return true, name, texture + end + end + end + + local tip = EnsureFoodScanTooltip() + tip:SetOwner(UIParent, "ANCHOR_NONE") + tip:SetBagItem(bag, slot) + + local found = false + local rejected = false + for i = 1, tip:NumLines() do + local leftObj = _G["NanamiPetFoodScanTipTextLeft" .. i] + if leftObj then + local text = leftObj:GetText() + if text then + if string.find(text, "进食", 1, true) or string.find(text, "eating", 1, true) then + found = true + end + if string.find(text, "Well Fed", 1, true) or string.find(text, "充分进食", 1, true) then + found = true + end + if string.find(text, "Restores", 1, true) and string.find(text, "health", 1, true) + and string.find(text, "over", 1, true) then + found = true + end + if string.find(text, "恢复", 1, true) and string.find(text, "生命", 1, true) + and string.find(text, "秒", 1, true) then + found = true + end + if string.find(text, "Potion", 1, true) or string.find(text, "药水", 1, true) + or string.find(text, "Elixir", 1, true) or string.find(text, "药剂", 1, true) + or string.find(text, "Bandage", 1, true) or string.find(text, "绷带", 1, true) then + rejected = true + end + end + end + end + tip:Hide() + + if found and not rejected then + return true, name, texture + end + + if itemType and subType then + if (itemType == "Consumable" or itemType == "消耗品") + and (subType == "Food & Drink" or subType == "食物和饮料") then + return true, name, texture + end + end + + return false +end + +function SFrames.Pet:ScanBagsForFood() + local foods = {} + for bag = 0, 4 do + for slot = 1, GetContainerNumSlots(bag) do + local isFood, name, itemTex = IsItemPetFood(bag, slot) + if isFood then + local texture, itemCount = GetContainerItemInfo(bag, slot) + local link = GetContainerItemLink(bag, slot) + table.insert(foods, { + bag = bag, + slot = slot, + name = name, + link = link, + texture = texture or itemTex, + count = itemCount or 1, + }) + end + end + end + return foods +end + +function SFrames.Pet:FeedPet(bag, slot) + if not UnitExists("pet") then return end + local link = GetContainerItemLink(bag, slot) + local tex = GetContainerItemInfo(bag, slot) + local spell = GetFeedPetSpell() + CastSpellByName(spell) + PickupContainerItem(bag, slot) + if link then + local _, _, itemId = string.find(link, "item:(%d+)") + if itemId then + if not SFramesDB then SFramesDB = {} end + SFramesDB.lastPetFoodId = tonumber(itemId) + end + end + if tex and self.foodButton then + self.foodButton.icon:SetTexture(tex) + if not SFramesDB then SFramesDB = {} end + SFramesDB.lastPetFoodIcon = tex + end +end + +function SFrames.Pet:QuickFeed() + if not UnitExists("pet") then return end + local foods = self:ScanBagsForFood() + if table.getn(foods) == 0 then + DEFAULT_CHAT_FRAME:AddMessage("|cffff9900[Nanami]|r 背包中没有可喂食的食物") + return + end + local preferred = SFramesDB and SFramesDB.lastPetFoodId + if preferred then + for i = 1, table.getn(foods) do + local f = foods[i] + if f.link then + local _, _, itemId = string.find(f.link, "item:(%d+)") + if itemId and tonumber(itemId) == preferred then + self:FeedPet(f.bag, f.slot) + return + end + end + end + end + self:FeedPet(foods[1].bag, foods[1].slot) +end + +-------------------------------------------------------------------------------- +-- Food Button & Panel UI +-------------------------------------------------------------------------------- + +local FOOD_COLS = 6 +local FOOD_SLOT_SIZE = 30 +local FOOD_SLOT_GAP = 2 +local FOOD_PAD = 8 + +function SFrames.Pet:CreateFoodButton() + local f = self.frame + local A = SFrames.ActiveTheme + + local btn = CreateFrame("Button", "SFramesPetFoodBtn", f) + btn:SetWidth(20) + btn:SetHeight(20) + btn:SetPoint("TOP", f.happinessBG, "BOTTOM", 0, -2) + SFrames:CreateUnitBackdrop(btn) + + local icon = btn:CreateTexture(nil, "ARTWORK") + icon:SetPoint("TOPLEFT", btn, "TOPLEFT", 1, -1) + icon:SetPoint("BOTTOMRIGHT", btn, "BOTTOMRIGHT", -1, 1) + icon:SetTexture("Interface\\Icons\\INV_Misc_Food_14") + btn.icon = icon + + btn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + + local pet = self + btn:SetScript("OnClick", function() + if CursorHasItem() then + local curTex = pet:GetCursorItemTexture() + DropItemOnUnit("pet") + if curTex then + pet:SetFoodIcon(curTex) + end + return + end + if arg1 == "RightButton" then + pet:QuickFeed() + else + if pet.foodPanel and pet.foodPanel:IsShown() then + pet.foodPanel:Hide() + else + pet:ShowFoodPanel() + end + end + end) + + btn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:AddLine("喂养宠物", 1, 1, 1) + GameTooltip:AddLine("左键: 选择食物", 0.7, 0.7, 0.7) + GameTooltip:AddLine("右键: 快速喂食", 0.7, 0.7, 0.7) + GameTooltip:AddLine("可拖拽背包食物到此按钮", 0.7, 0.7, 0.7) + GameTooltip:Show() + end) + + btn:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + btn:SetScript("OnReceiveDrag", function() + if CursorHasItem() then + DropItemOnUnit("pet") + end + end) + + self.foodButton = btn + btn:Hide() +end + +function SFrames.Pet:CreateFoodPanel() + if self.foodPanel then return self.foodPanel end + + local A = SFrames.ActiveTheme + + local panel = CreateFrame("Frame", "SFramesPetFoodPanel", UIParent) + panel:SetFrameStrata("DIALOG") + panel:SetFrameLevel(20) + panel:SetWidth(FOOD_COLS * (FOOD_SLOT_SIZE + FOOD_SLOT_GAP) + FOOD_PAD * 2 - FOOD_SLOT_GAP) + panel:SetHeight(80) + panel:SetPoint("BOTTOMLEFT", self.frame, "TOPLEFT", -22, 4) + SFrames:CreateUnitBackdrop(panel) + panel:EnableMouse(true) + panel:Hide() + + local titleBar = CreateFrame("Frame", nil, panel) + titleBar:SetPoint("TOPLEFT", panel, "TOPLEFT", 1, -1) + titleBar:SetPoint("TOPRIGHT", panel, "TOPRIGHT", -1, -1) + titleBar:SetHeight(18) + titleBar:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8" }) + local hdr = A.headerBg or A.panelBg + titleBar:SetBackdropColor(hdr[1], hdr[2], hdr[3], (hdr[4] or 0.9) * 0.6) + + local titleText = titleBar:CreateFontString(nil, "OVERLAY") + titleText:SetFont(SFrames:GetFont(), 10, SFrames.Media.fontOutline or "OUTLINE") + titleText:SetPoint("LEFT", titleBar, "LEFT", FOOD_PAD, 0) + titleText:SetTextColor(A.title[1], A.title[2], A.title[3]) + titleText:SetText("选择食物") + panel.titleText = titleText + + local hintText = panel:CreateFontString(nil, "OVERLAY") + hintText:SetFont(SFrames:GetFont(), 9, SFrames.Media.fontOutline or "OUTLINE") + hintText:SetPoint("BOTTOMLEFT", panel, "BOTTOMLEFT", FOOD_PAD, 4) + hintText:SetPoint("BOTTOMRIGHT", panel, "BOTTOMRIGHT", -FOOD_PAD, 4) + hintText:SetJustifyH("LEFT") + local dim = A.dimText or { 0.5, 0.5, 0.5 } + hintText:SetTextColor(dim[1], dim[2], dim[3]) + hintText:SetText("点击喂食 | 可拖拽食物到此面板") + panel.hintText = hintText + + local emptyText = panel:CreateFontString(nil, "OVERLAY") + emptyText:SetFont(SFrames:GetFont(), 10, SFrames.Media.fontOutline or "OUTLINE") + emptyText:SetPoint("CENTER", panel, "CENTER", 0, 0) + emptyText:SetTextColor(dim[1], dim[2], dim[3]) + emptyText:SetText("背包中没有可喂食的食物") + emptyText:Hide() + panel.emptyText = emptyText + + local pet = self + panel:SetScript("OnReceiveDrag", function() + if CursorHasItem() then + local curTex = pet:GetCursorItemTexture() + DropItemOnUnit("pet") + if curTex then + pet:SetFoodIcon(curTex) + end + end + end) + + table.insert(UISpecialFrames, "SFramesPetFoodPanel") + + panel.slots = {} + self.foodPanel = panel + return panel +end + +function SFrames.Pet:CreateFoodSlot(parent, index) + local A = SFrames.ActiveTheme + + local slot = CreateFrame("Button", "SFramesPetFoodSlot" .. index, parent) + slot:SetWidth(FOOD_SLOT_SIZE) + slot:SetHeight(FOOD_SLOT_SIZE) + slot:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + slot:SetBackdropColor(A.slotBg[1], A.slotBg[2], A.slotBg[3], A.slotBg[4] or 0.9) + slot:SetBackdropBorderColor(0, 0, 0, 1) + + local icon = slot:CreateTexture(nil, "ARTWORK") + icon:SetPoint("TOPLEFT", 2, -2) + icon:SetPoint("BOTTOMRIGHT", -2, 2) + slot.icon = icon + + local count = slot:CreateFontString(nil, "OVERLAY") + count:SetFont(SFrames:GetFont(), 10, "OUTLINE") + count:SetPoint("BOTTOMRIGHT", -2, 2) + count:SetJustifyH("RIGHT") + count:SetTextColor(1, 1, 1) + slot.count = count + + slot:RegisterForClicks("LeftButtonUp", "RightButtonUp") + + local pet = self + slot:SetScript("OnClick", function() + if CursorHasItem() then + local curTex = pet:GetCursorItemTexture() + DropItemOnUnit("pet") + if curTex then + pet:SetFoodIcon(curTex) + end + return + end + if IsShiftKeyDown() and this.foodLink then + if ChatFrameEditBox and ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Insert(this.foodLink) + end + return + end + if this.foodBag and this.foodSlot then + pet:FeedPet(this.foodBag, this.foodSlot) + if pet.foodPanel then pet.foodPanel:Hide() end + end + end) + + slot:SetScript("OnEnter", function() + if this.foodBag and this.foodSlot then + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:SetBagItem(this.foodBag, this.foodSlot) + GameTooltip:AddLine(" ") + GameTooltip:AddLine("点击: 喂食宠物", 0.5, 1, 0.5) + GameTooltip:AddLine("Shift+点击: 链接到聊天", 0.7, 0.7, 0.7) + GameTooltip:Show() + end + this:SetBackdropBorderColor(0.4, 0.4, 0.4, 1) + end) + + slot:SetScript("OnLeave", function() + GameTooltip:Hide() + this:SetBackdropBorderColor(0, 0, 0, 1) + end) + + slot:SetScript("OnReceiveDrag", function() + if CursorHasItem() then + DropItemOnUnit("pet") + end + end) + + return slot +end + +function SFrames.Pet:ShowFoodPanel() + self:CreateFoodPanel() + self:RefreshFoodPanel() + self.foodPanel:Show() +end + +function SFrames.Pet:RefreshFoodPanel() + local panel = self.foodPanel + if not panel then return end + + local foods = self:ScanBagsForFood() + local numFoods = table.getn(foods) + + for i = 1, table.getn(panel.slots) do + panel.slots[i]:Hide() + end + + if numFoods == 0 then + panel:SetHeight(60) + panel.emptyText:Show() + panel.hintText:Hide() + return + end + + panel.emptyText:Hide() + panel.hintText:Show() + + local rows = math.ceil(numFoods / FOOD_COLS) + local panelH = FOOD_PAD + 20 + rows * (FOOD_SLOT_SIZE + FOOD_SLOT_GAP) + 18 + panel:SetHeight(panelH) + + for i = 1, numFoods do + local food = foods[i] + local slot = panel.slots[i] + if not slot then + slot = self:CreateFoodSlot(panel, i) + panel.slots[i] = slot + end + + local col = mod(i - 1, FOOD_COLS) + local row = math.floor((i - 1) / FOOD_COLS) + + slot:ClearAllPoints() + slot:SetPoint("TOPLEFT", panel, "TOPLEFT", + FOOD_PAD + col * (FOOD_SLOT_SIZE + FOOD_SLOT_GAP), + -(FOOD_PAD + 18 + row * (FOOD_SLOT_SIZE + FOOD_SLOT_GAP))) + + slot.icon:SetTexture(food.texture) + slot.count:SetText(food.count > 1 and tostring(food.count) or "") + slot.foodBag = food.bag + slot.foodSlot = food.slot + slot.foodName = food.name + slot.foodLink = food.link + slot:Show() + end +end + +function SFrames.Pet:GetCursorItemTexture() + for bag = 0, 4 do + for slot = 1, GetContainerNumSlots(bag) do + local texture, count, locked = GetContainerItemInfo(bag, slot) + if locked and texture then + return texture + end + end + end + return nil +end + +function SFrames.Pet:SetFoodIcon(tex) + if not tex or not self.foodButton then return end + self.foodButton.icon:SetTexture(tex) + if not SFramesDB then SFramesDB = {} end + SFramesDB.lastPetFoodIcon = tex +end + +function SFrames.Pet:InitFoodFeature() + local _, playerClass = UnitClass("player") + if playerClass ~= "HUNTER" then return end + + self:CreateFoodButton() + + if SFramesDB and SFramesDB.lastPetFoodIcon then + self.foodButton.icon:SetTexture(SFramesDB.lastPetFoodIcon) + end + + local pet = self + SFrames:RegisterEvent("BAG_UPDATE", function() + if pet.foodPanel and pet.foodPanel:IsShown() then + pet:RefreshFoodPanel() + end + end) +end + +function SFrames.Pet:UpdateFoodButton() + if not self.foodButton then return end + + local _, class = UnitClass("player") + if class == "HUNTER" and UnitExists("pet") then + self.foodButton:Show() + local happiness = GetPetHappiness() + if happiness and happiness == 1 then + self.foodButton.icon:SetVertexColor(1, 0.3, 0.3) + elseif happiness and happiness == 2 then + self.foodButton.icon:SetVertexColor(1, 0.8, 0.4) + else + self.foodButton.icon:SetVertexColor(1, 1, 1) + end + else + self.foodButton:Hide() + if self.foodPanel then self.foodPanel:Hide() end + end +end diff --git a/Units/Player.lua b/Units/Player.lua new file mode 100644 index 0000000..8515e17 --- /dev/null +++ b/Units/Player.lua @@ -0,0 +1,1449 @@ +SFrames.Player = {} +local _A = SFrames.ActiveTheme + +local CLASS_NAME_ZH = { + WARRIOR = "\230\136\152\229\163\171", + MAGE = "\230\179\149\229\184\136", + ROGUE = "\230\189\156\232\161\140\232\128\133", + DRUID = "\229\190\183\233\178\129\228\188\138", + HUNTER = "\231\140\142\228\186\186", + SHAMAN = "\232\144\168\230\187\161\231\165\173\229\143\184", + PRIEST = "\231\137\167\229\184\136", + WARLOCK = "\230\156\175\229\163\171", + PALADIN = "\229\156\163\233\170\145\229\163\171", +} + +local function GetChineseClassName(classToken, localizedClass) + if classToken and CLASS_NAME_ZH[classToken] then + return CLASS_NAME_ZH[classToken] + end + return localizedClass or "" +end + +local function GetIncomingHeals(unit) + if not (ShaguTweaks and ShaguTweaks.libpredict and ShaguTweaks.libpredict.UnitGetIncomingHeals) then + return 0, 0, 0 + end + + local libpredict = ShaguTweaks.libpredict + if libpredict.UnitGetIncomingHealsBreakdown then + local ok, total, mine, others = pcall(function() + return libpredict:UnitGetIncomingHealsBreakdown(unit, UnitName("player")) + end) + if ok then + total = math.max(0, tonumber(total) or 0) + mine = math.max(0, tonumber(mine) or 0) + others = math.max(0, tonumber(others) or 0) + return total, mine, others + end + end + + local ok, amount = pcall(function() + return libpredict:UnitGetIncomingHeals(unit) + end) + if not ok then return 0, 0, 0 end + + amount = tonumber(amount) or 0 + if amount < 0 then amount = 0 end + return amount, 0, amount +end + +local function Clamp(value, minValue, maxValue) + if value < minValue then + return minValue + end + if value > maxValue then + return maxValue + end + return value +end + +function SFrames.Player:GetConfig() + local db = SFramesDB or {} + + local width = tonumber(db.playerFrameWidth) or SFrames.Config.width or 220 + width = Clamp(math.floor(width + 0.5), 170, 420) + + local portraitWidth = tonumber(db.playerPortraitWidth) or SFrames.Config.portraitWidth or 50 + portraitWidth = Clamp(math.floor(portraitWidth + 0.5), 32, 95) + if portraitWidth > width - 90 then + portraitWidth = width - 90 + end + + local healthHeight = tonumber(db.playerHealthHeight) or 38 + healthHeight = Clamp(math.floor(healthHeight + 0.5), 14, 80) + + local powerHeight = tonumber(db.playerPowerHeight) or 9 + powerHeight = Clamp(math.floor(powerHeight + 0.5), 6, 40) + + local height = healthHeight + powerHeight + 4 + height = Clamp(height, 30, 140) + + local nameFont = tonumber(db.playerNameFontSize) or 10 + nameFont = Clamp(math.floor(nameFont + 0.5), 8, 18) + + local valueFont = tonumber(db.playerValueFontSize) or 10 + valueFont = Clamp(math.floor(valueFont + 0.5), 8, 18) + + local frameScale = tonumber(db.playerFrameScale) or 1 + frameScale = Clamp(frameScale, 0.7, 1.8) + + return { + width = width, + height = height, + portraitWidth = portraitWidth, + healthHeight = healthHeight, + powerHeight = powerHeight, + nameFont = nameFont, + valueFont = valueFont, + scale = frameScale, + } +end + +function SFrames.Player:ApplyConfig() + if not self.frame then return end + + local cfg = self:GetConfig() + local f = self.frame + + f:SetScale(cfg.scale) + f:SetWidth(cfg.width) + f:SetHeight(cfg.height) + + if f.portrait then + f.portrait:SetWidth(cfg.portraitWidth) + f.portrait:SetHeight(cfg.height - 2) + end + + if f.portraitBG then + f.portraitBG:ClearAllPoints() + f.portraitBG:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0) + f.portraitBG:SetPoint("BOTTOMRIGHT", f.portrait, "BOTTOMRIGHT", 1, -1) + end + + if f.health then + f.health:ClearAllPoints() + f.health:SetPoint("TOPLEFT", f.portrait, "TOPRIGHT", 1, 0) + f.health:SetPoint("TOPRIGHT", f, "TOPRIGHT", -1, -1) + f.health:SetHeight(cfg.healthHeight) + end + + if f.healthBGFrame then + f.healthBGFrame:ClearAllPoints() + f.healthBGFrame:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + f.healthBGFrame:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + end + + if f.power then + f.power:ClearAllPoints() + f.power:SetPoint("TOPLEFT", f.health, "BOTTOMLEFT", 0, -1) + f.power:SetPoint("TOPRIGHT", f.health, "BOTTOMRIGHT", 0, 0) + f.power:SetHeight(cfg.powerHeight) + end + + if f.powerBGFrame then + f.powerBGFrame:ClearAllPoints() + f.powerBGFrame:SetPoint("TOPLEFT", f.power, "TOPLEFT", -1, 1) + f.powerBGFrame:SetPoint("BOTTOMRIGHT", f.power, "BOTTOMRIGHT", 1, -1) + end + + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + local fontPath = SFrames:GetFont() + + if f.nameText then + f.nameText:SetFont(fontPath, cfg.nameFont, outline) + end + if f.healthText then + f.healthText:SetFont(fontPath, cfg.valueFont, outline) + end + if f.powerText then + f.powerText:SetFont(fontPath, cfg.valueFont, outline) + end + if f.manaText then + local manaFont = cfg.valueFont - 1 + if manaFont < 8 then manaFont = 8 end + f.manaText:SetFont(fontPath, manaFont, outline) + end + + if f.zLetters then + for i = 1, 3 do + if f.zLetters[i] and f.zLetters[i].text then + f.zLetters[i].text:SetFont(fontPath, 8 + (i - 1) * 3, "OUTLINE") + end + end + end + + self:UpdateAll() +end + +function SFrames.Player:Initialize() + local f = CreateFrame("Button", "SFramesPlayerFrame", UIParent) + f:SetWidth(SFrames.Config.width) + f:SetHeight(SFrames.Config.height) + if SFramesDB and SFramesDB.Positions and SFramesDB.Positions["PlayerFrame"] then + local pos = SFramesDB.Positions["PlayerFrame"] + f:SetPoint(pos.point, UIParent, pos.relativePoint, pos.xOfs, pos.yOfs) + else + f:SetPoint("CENTER", UIParent, "CENTER", -200, -100) + end + local frameScale = (SFramesDB and type(SFramesDB.playerFrameScale) == "number") and SFramesDB.playerFrameScale or 1 + f:SetScale(frameScale) + + -- Make it movable + f:SetMovable(true) + f:EnableMouse(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() if IsAltKeyDown() or SFrames.isUnlocked then f:StartMoving() end end) + f:SetScript("OnDragStop", function() + f:StopMovingOrSizing() + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + local point, relativeTo, relativePoint, xOfs, yOfs = f:GetPoint() + SFramesDB.Positions["PlayerFrame"] = { point = point, relativePoint = relativePoint, xOfs = xOfs, yOfs = yOfs } + end) + + -- Register clicks for targeting + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:SetScript("OnClick", function() + if arg1 == "LeftButton" then + TargetUnit("player") + else + ToggleDropDownMenu(1, nil, PlayerFrameDropDown, this:GetName(), 106, 27) + end + end) + + -- Base Backdrop + SFrames:CreateUnitBackdrop(f) + + -- 3D Portrait + local pWidth = SFrames.Config.portraitWidth + f.portrait = CreateFrame("PlayerModel", nil, f) + f.portrait:SetWidth(pWidth) + f.portrait:SetHeight(SFrames.Config.height - 2) + f.portrait:SetPoint("LEFT", f, "LEFT", 1, 0) + f.portrait:SetUnit("player") + f.portrait:SetCamera(0) + f.portrait:SetPosition(-1.0, 0, 0) + + -- We need a backdrop for the portrait to separate it from health bar + local pbg = CreateFrame("Frame", nil, f) + pbg:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0) + pbg:SetPoint("BOTTOMRIGHT", f.portrait, "BOTTOMRIGHT", 1, -1) + pbg:SetFrameLevel(f:GetFrameLevel()) + SFrames:CreateUnitBackdrop(pbg) + f.portraitBG = pbg + + -- Health Bar + f.health = SFrames:CreateStatusBar(f, "SFramesPlayerHealth") + f.health:SetPoint("TOPLEFT", f.portrait, "TOPRIGHT", 1, 0) + f.health:SetPoint("TOPRIGHT", f, "TOPRIGHT", -1, -1) + f.health:SetHeight((SFrames.Config.height - 2) * 0.82 - 1) -- 82% height, minus 1px gap + f.health:SetMinMaxValues(0, 100) + + -- Health Backdrop + local hbg = CreateFrame("Frame", nil, f) + hbg:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + hbg:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + hbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(hbg) + f.healthBGFrame = hbg + + -- Add a dark backdrop behind the health texture + f.health.bg = f.health:CreateTexture(nil, "BACKGROUND") + f.health.bg:SetAllPoints() + f.health.bg:SetTexture(SFrames:GetTexture()) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Heal prediction overlay (incoming heals) + f.health.healPredMine = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredMine:SetTexture(SFrames:GetTexture()) + f.health.healPredMine:SetVertexColor(0.4, 1.0, 0.55, 0.78) + f.health.healPredMine:Hide() + + f.health.healPredOther = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredOther:SetTexture(SFrames:GetTexture()) + f.health.healPredOther:SetVertexColor(0.2, 0.9, 0.35, 0.5) + f.health.healPredOther:Hide() + + -- Power Bar + f.power = SFrames:CreateStatusBar(f, "SFramesPlayerPower") + f.power:SetPoint("TOPLEFT", f.health, "BOTTOMLEFT", 0, -1) + f.power:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1) + f.power:SetMinMaxValues(0, 100) + + -- Power Backdrop + local powerbg = CreateFrame("Frame", nil, f) + powerbg:SetPoint("TOPLEFT", f.power, "TOPLEFT", -1, 1) + powerbg:SetPoint("BOTTOMRIGHT", f.power, "BOTTOMRIGHT", 1, -1) + powerbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(powerbg) + f.powerBGFrame = powerbg + + -- Add a dark backdrop behind the power texture + f.power.bg = f.power:CreateTexture(nil, "BACKGROUND") + f.power.bg:SetAllPoints() + f.power.bg:SetTexture(SFrames:GetTexture()) + f.power.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Five-second rule ticker (mana regen delay indicator) + f.power.fsrGlow = f.power:CreateTexture(nil, "OVERLAY") + f.power.fsrGlow:SetTexture("Interface\\CastingBar\\UI-CastingBar-Spark") + f.power.fsrGlow:SetVertexColor(0.62, 0.90, 1.0, 0.52) + f.power.fsrGlow:SetBlendMode("ADD") + pcall(function() f.power.fsrGlow:SetDrawLayer("OVERLAY", 5) end) + f.power.fsrGlow:Hide() + + -- Texts + f.nameText = SFrames:CreateFontString(f.health, 10, "LEFT") + f.nameText:SetPoint("LEFT", f.health, "LEFT", 6, 0) + + f.healthText = SFrames:CreateFontString(f.health, 10, "RIGHT") + f.healthText:SetPoint("RIGHT", f.health, "RIGHT", -6, 0) + + f.powerText = SFrames:CreateFontString(f.power, 10, "RIGHT") + f.powerText:SetPoint("RIGHT", f.power, "RIGHT", -6, 0) + + -- Extra mana text for shapeshift druids (show blue mana while rage/energy is active) + f.manaText = SFrames:CreateFontString(f.power, 9, "LEFT") + f.manaText:SetPoint("LEFT", f.power, "LEFT", 6, 0) + f.manaText:SetTextColor(0.30, 0.65, 1.0) + f.manaText:Hide() + + f.manaBar = CreateFrame("StatusBar", nil, f) + f.manaBar:SetHeight(4) + f.manaBar:SetPoint("TOPLEFT", f.power, "BOTTOMLEFT", 0, -1) + f.manaBar:SetPoint("TOPRIGHT", f.power, "BOTTOMRIGHT", 0, -1) + f.manaBar:SetStatusBarTexture(SFrames:GetTexture()) + f.manaBar:SetStatusBarColor(0.30, 0.65, 1.0, 0.90) + f.manaBar:SetMinMaxValues(0, 100) + f.manaBar:SetValue(0) + f.manaBar:SetFrameLevel(f:GetFrameLevel() + 1) + f.manaBar.bg = f.manaBar:CreateTexture(nil, "BACKGROUND") + f.manaBar.bg:SetAllPoints() + f.manaBar.bg:SetTexture(SFrames:GetTexture()) + f.manaBar.bg:SetVertexColor(0.05, 0.10, 0.20, 0.7) + f.manaBar:Hide() + + -- Outline/shadow setup for text to make it pop + f.nameText:SetShadowColor(0, 0, 0, 1) + f.nameText:SetShadowOffset(1, -1) + f.healthText:SetShadowColor(0, 0, 0, 1) + f.healthText:SetShadowOffset(1, -1) + f.powerText:SetShadowColor(0, 0, 0, 1) + f.powerText:SetShadowOffset(1, -1) + f.manaText:SetShadowColor(0, 0, 0, 1) + f.manaText:SetShadowOffset(1, -1) + + -- Resting Indicator (animated zzz on portrait) + local restOverlay = CreateFrame("Frame", nil, f) + restOverlay:SetFrameLevel((f:GetFrameLevel() or 0) + 6) + restOverlay:SetWidth(pWidth) + restOverlay:SetHeight(SFrames.Config.height) + restOverlay:SetPoint("CENTER", f.portrait, "CENTER", 0, 0) + f.restOverlay = restOverlay + + local zLetters = {} + for i = 1, 3 do + local zf = CreateFrame("Frame", nil, restOverlay) + zf:SetWidth(16) + zf:SetHeight(16) + local zt = zf:CreateFontString(nil, "OVERLAY") + zt:SetFont(SFrames:GetFont(), 8 + (i - 1) * 3, "OUTLINE") + zt:SetText("z") + zt:SetTextColor(0.85, 0.85, 1.0) + zt:SetShadowColor(0, 0, 0, 0.8) + zt:SetShadowOffset(1, -1) + zt:SetAllPoints(zf) + zf.text = zt + zf.phase = (i - 1) * 1.2 + zf.baseX = (i - 1) * 6 - 2 + zf.baseY = (i - 1) * 5 + zf:SetPoint("BOTTOMLEFT", restOverlay, "CENTER", zf.baseX, zf.baseY - 4) + zLetters[i] = zf + end + f.zLetters = zLetters + + local restElapsed = 0 + restOverlay:SetScript("OnUpdate", function() + restElapsed = restElapsed + arg1 + for idx = 1, 3 do + local zf = zLetters[idx] + local t = math.mod(restElapsed + zf.phase, 3.6) + local ratio = t / 3.6 + local floatY = ratio * 14 + local alpha + if ratio < 0.15 then + alpha = ratio / 0.15 + elseif ratio < 0.7 then + alpha = 1.0 + else + alpha = 1.0 - (ratio - 0.7) / 0.3 + end + if alpha < 0 then alpha = 0 end + if alpha > 1 then alpha = 1 end + zf.text:SetAlpha(alpha) + zf:ClearAllPoints() + zf:SetPoint("BOTTOMLEFT", restOverlay, "CENTER", zf.baseX, zf.baseY - 4 + floatY) + end + end) + restOverlay:Hide() + + -- Class Icon Badge (overlaid on portrait, top-right corner with 1/3 outside) + f.classIcon = SFrames:CreateClassIcon(f, 16) + f.classIcon.overlay:SetPoint("CENTER", f.portrait, "TOPRIGHT", 0, 0) + + -- Party Leader Icon + local leaderOvr = CreateFrame("Frame", nil, f) + leaderOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 4) + leaderOvr:SetAllPoints(f) + f.leaderIcon = leaderOvr:CreateTexture(nil, "OVERLAY") + f.leaderIcon:SetTexture("Interface\\GroupFrame\\UI-Group-LeaderIcon") + f.leaderIcon:SetWidth(16) + f.leaderIcon:SetHeight(16) + f.leaderIcon:SetPoint("TOPLEFT", f.portrait, "TOPLEFT", -4, 4) + f.leaderIcon:Hide() + + -- Raid Target Icon (top center of health bar, half outside frame) + local raidIconSize = 22 + local raidIconOvr = CreateFrame("Frame", nil, f) + raidIconOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 5) + raidIconOvr:SetWidth(raidIconSize) + raidIconOvr:SetHeight(raidIconSize) + raidIconOvr:SetPoint("CENTER", f.health, "TOP", 0, 0) + f.raidIcon = raidIconOvr:CreateTexture(nil, "OVERLAY") + f.raidIcon:SetTexture("Interface\\TargetingFrame\\UI-RaidTargetingIcons") + f.raidIcon:SetAllPoints(raidIconOvr) + f.raidIcon:Hide() + f.raidIconOverlay = raidIconOvr + + self.frame = f + self:ApplyConfig() + self.frame:Show() -- Ensure it's explicitly shown + self:UpdateAll() + + -- Events + SFrames:RegisterEvent("UNIT_HEALTH", function() if arg1 == "player" then self:UpdateHealth() end end) + SFrames:RegisterEvent("UNIT_MAXHEALTH", function() if arg1 == "player" then self:UpdateHealth() end end) + SFrames:RegisterEvent("UNIT_MANA", function() if arg1 == "player" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXMANA", function() if arg1 == "player" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_ENERGY", function() if arg1 == "player" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXENERGY", function() if arg1 == "player" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_RAGE", function() if arg1 == "player" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXRAGE", function() if arg1 == "player" then self:UpdatePower() end end) + SFrames:RegisterEvent("PLAYER_ENTERING_WORLD", function() self:UpdateAll() end) + SFrames:RegisterEvent("PLAYER_LEVEL_UP", function() + if arg1 then self.currentLevel = arg1 end + self:UpdateAll() + if arg1 and mod(arg1, 2) == 0 and (not SFramesDB or SFramesDB.trainerReminder ~= false) then + self:ShowTrainerReminder(arg1) + end + end) + SFrames:RegisterEvent("PARTY_MEMBERS_CHANGED", function() self:UpdateLeaderIcon() end) + SFrames:RegisterEvent("PARTY_LEADER_CHANGED", function() self:UpdateLeaderIcon() end) + SFrames:RegisterEvent("RAID_TARGET_UPDATE", function() self:UpdateRaidIcon() end) + SFrames:RegisterEvent("UNIT_PORTRAIT_UPDATE", function() if arg1 == "player" then self.frame.portrait:SetUnit("player") self.frame.portrait:SetCamera(0) self.frame.portrait:SetPosition(-1.0, 0, 0) end end) + SFrames:RegisterEvent("UNIT_DISPLAYPOWER", function() if arg1 == "player" then self:UpdatePowerType(); self:UpdatePower() end end) + SFrames:RegisterEvent("UPDATE_SHAPESHIFT_FORM", function() self:UpdatePowerType(); self:UpdatePower() end) + SFrames:RegisterEvent("PLAYER_UPDATE_RESTING", function() self:UpdateRestingStatus() end) + + f.unit = "player" + f:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetUnit(this.unit) + GameTooltip:Show() + end) + f:SetScript("OnLeave", function() + GameTooltip:Hide() + end) +end + +function SFrames.Player:HasSpellInBook(spellName) + local i = 1 + while true do + local name = GetSpellName(i, BOOKTYPE_SPELL) + if not name then return false end + if name == spellName then return true end + i = i + 1 + end +end + +function SFrames.Player:GetSpellIcon(skillDisplayName) + local baseName = string.gsub(skillDisplayName, " %d+级$", "") + local altName1 = string.gsub(baseName, ":", ":") + local altName2 = string.gsub(baseName, ":", ":") + local i = 1 + while true do + local name = GetSpellName(i, BOOKTYPE_SPELL) + if not name then break end + if name == baseName or name == altName1 or name == altName2 then + return GetSpellTexture(i, BOOKTYPE_SPELL) + end + i = i + 1 + end + return nil +end + +function SFrames.Player:ShowTrainerReminder(newLevel) + local _, classEn = UnitClass("player") + local classNames = { + WARRIOR = "战士", PALADIN = "圣骑士", HUNTER = "猎人", + ROGUE = "盗贼", PRIEST = "牧师", SHAMAN = "萨满祭司", + MAGE = "法师", WARLOCK = "术士", DRUID = "德鲁伊", + } + local className = classNames[classEn] or UnitClass("player") + + local classFallbackIcons = { + WARRIOR = "Interface\\Icons\\Ability_Warrior_OffensiveStance", + PALADIN = "Interface\\Icons\\Spell_Holy_HolyBolt", + HUNTER = "Interface\\Icons\\Ability_Marksmanship", + ROGUE = "Interface\\Icons\\Ability_BackStab", + PRIEST = "Interface\\Icons\\Spell_Holy_HolyBolt", + SHAMAN = "Interface\\Icons\\Spell_Nature_Lightning", + MAGE = "Interface\\Icons\\Spell_Frost_IceStorm", + WARLOCK = "Interface\\Icons\\Spell_Shadow_DeathCoil", + DRUID = "Interface\\Icons\\Spell_Nature_Regeneration", + } + local fallbackIcon = classFallbackIcons[classEn] or "Interface\\Icons\\Trade_Engraving" + + local allSkills = {} + local allIcons = {} + + local baseSkills = SFrames.ClassSkillData and SFrames.ClassSkillData[classEn] and SFrames.ClassSkillData[classEn][newLevel] + if baseSkills then + for _, s in ipairs(baseSkills) do + table.insert(allSkills, s) + table.insert(allIcons, self:GetSpellIcon(s) or fallbackIcon) + end + end + + local talentData = SFrames.TalentTrainerSkills and SFrames.TalentTrainerSkills[classEn] and SFrames.TalentTrainerSkills[classEn][newLevel] + local talentSkills = {} + if talentData then + for _, entry in ipairs(talentData) do + local displayName = entry[1] + local requiredSpell = entry[2] + if self:HasSpellInBook(requiredSpell) then + table.insert(allSkills, displayName) + table.insert(allIcons, self:GetSpellIcon(displayName) or fallbackIcon) + table.insert(talentSkills, displayName) + end + end + end + + local mountQuest = SFrames.ClassMountQuests and SFrames.ClassMountQuests[classEn] and SFrames.ClassMountQuests[classEn][newLevel] + + local skillCount = table.getn(allSkills) + local hex = SFrames.Theme and SFrames.Theme:GetAccentHex() or "ffffb3d9" + + SFrames:Print(string.format("已达到 %d 级!你的%s训练师有新技能可以学习。", newLevel, className)) + if skillCount > 0 then + DEFAULT_CHAT_FRAME:AddMessage("|c" .. hex .. "[Nanami-UI]|r 可学习的技能(共 " .. skillCount .. " 项):") + local line = " " + local lineCount = 0 + for i = 1, skillCount do + if lineCount > 0 then line = line .. ", " end + line = line .. "|cffffd100" .. allSkills[i] .. "|r" + lineCount = lineCount + 1 + if i == skillCount or lineCount == 4 then + DEFAULT_CHAT_FRAME:AddMessage(line) + line = " " + lineCount = 0 + end + end + end + if table.getn(talentSkills) > 0 then + DEFAULT_CHAT_FRAME:AddMessage("|c" .. hex .. "[Nanami-UI]|r |cff00ff00(天赋)|r " .. table.concat(talentSkills, ", ")) + end + if mountQuest then + DEFAULT_CHAT_FRAME:AddMessage("|c" .. hex .. "[Nanami-UI]|r |cffffff00★|r " .. mountQuest) + end + + local bannerMsg = string.format("Lv.%d - %s训练师有 %d 项新技能可学习", newLevel, className, skillCount) + if mountQuest then + bannerMsg = bannerMsg .. " + " .. mountQuest + end + if skillCount == 0 and not mountQuest then + bannerMsg = string.format("Lv.%d - 前往%s训练师查看可学技能", newLevel, className) + elseif skillCount == 0 and mountQuest then + bannerMsg = string.format("Lv.%d - %s", newLevel, mountQuest) + end + UIErrorsFrame:AddMessage(bannerMsg, 1.0, 0.82, 0.0, 1, 5) + PlaySound("LEVELUP") + + if not self.trainerReminderFrame then + local fr = CreateFrame("Frame", "NanamiTrainerReminder", UIParent) + fr:SetWidth(440) + fr:SetHeight(106) + fr:SetPoint("TOP", UIParent, "TOP", 0, -120) + fr:SetFrameStrata("DIALOG") + + local bg = fr:CreateTexture(nil, "BACKGROUND") + bg:SetAllPoints(fr) + bg:SetTexture(0, 0, 0, 0.78) + + local border = fr:CreateTexture(nil, "BORDER") + border:SetPoint("TOPLEFT", fr, "TOPLEFT", -1, 1) + border:SetPoint("BOTTOMRIGHT", fr, "BOTTOMRIGHT", 1, -1) + border:SetTexture(1, 0.82, 0, 0.3) + + local icon = fr:CreateTexture(nil, "ARTWORK") + icon:SetWidth(36) + icon:SetHeight(36) + icon:SetPoint("TOPLEFT", fr, "TOPLEFT", 10, -6) + icon:SetTexture("Interface\\Icons\\INV_Misc_Book_11") + fr.icon = icon + + local title = fr:CreateFontString(nil, "OVERLAY", "GameFontNormal") + title:SetPoint("TOPLEFT", icon, "TOPRIGHT", 10, -2) + title:SetPoint("RIGHT", fr, "RIGHT", -10, 0) + title:SetJustifyH("LEFT") + title:SetTextColor(1, 0.82, 0) + fr.title = title + + local subtitle = fr:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + subtitle:SetPoint("TOPLEFT", icon, "TOPRIGHT", 10, -18) + subtitle:SetPoint("RIGHT", fr, "RIGHT", -10, 0) + subtitle:SetJustifyH("LEFT") + subtitle:SetTextColor(0.75, 0.75, 0.75) + fr.subtitle = subtitle + + fr.skillIcons = {} + fr.skillBorders = {} + local maxIcons = 13 + for idx = 1, maxIcons do + local bdr = fr:CreateTexture(nil, "BORDER") + bdr:SetWidth(30) + bdr:SetHeight(30) + bdr:SetPoint("TOPLEFT", fr, "TOPLEFT", 9 + (idx - 1) * 32, -45) + bdr:SetTexture(1, 0.82, 0, 0.25) + bdr:Hide() + fr.skillBorders[idx] = bdr + + local si = fr:CreateTexture(nil, "ARTWORK") + si:SetWidth(28) + si:SetHeight(28) + si:SetPoint("CENTER", bdr, "CENTER", 0, 0) + si:SetTexCoord(0.07, 0.93, 0.07, 0.93) + si:Hide() + fr.skillIcons[idx] = si + end + + local detail = fr:CreateFontString(nil, "OVERLAY", "GameFontHighlightSmall") + detail:SetPoint("BOTTOMLEFT", fr, "BOTTOMLEFT", 10, 8) + detail:SetPoint("RIGHT", fr, "RIGHT", -10, 0) + detail:SetJustifyH("LEFT") + detail:SetTextColor(0.85, 0.85, 0.85) + fr.detail = detail + + fr:SetAlpha(0) + fr:Hide() + self.trainerReminderFrame = fr + end + + local fr = self.trainerReminderFrame + + for idx = 1, 13 do + fr.skillIcons[idx]:Hide() + fr.skillBorders[idx]:Hide() + end + + local iconCount = 0 + for i = 1, skillCount do + if iconCount >= 13 then break end + iconCount = iconCount + 1 + fr.skillIcons[iconCount]:SetTexture(allIcons[i]) + fr.skillIcons[iconCount]:Show() + fr.skillBorders[iconCount]:Show() + end + if mountQuest and iconCount < 13 then + iconCount = iconCount + 1 + fr.skillIcons[iconCount]:SetTexture("Interface\\Icons\\Spell_Nature_Swiftness") + fr.skillIcons[iconCount]:Show() + fr.skillBorders[iconCount]:Show() + end + + if iconCount > 0 then + fr:SetHeight(106) + else + fr:SetHeight(72) + end + + fr.title:SetText(string.format("已达到 |cffffffff%d|r 级 — %s训练师有新技能", newLevel, className)) + if skillCount > 0 or mountQuest then + local countText = "" + if skillCount > 0 then + countText = skillCount .. " 项技能" + end + if mountQuest then + if countText ~= "" then countText = countText .. " + " end + countText = countText .. mountQuest + end + fr.subtitle:SetText(countText) + fr.detail:SetText("详见聊天窗口") + else + fr.subtitle:SetText("") + fr.detail:SetText("前往职业训练师查看可学习的技能") + end + fr:Show() + fr:SetAlpha(0) + + fr.fadeState = "in" + fr.fadeTimer = 0 + fr.holdTimer = 0 + fr:SetScript("OnUpdate", function() + local dt = arg1 + if fr.fadeState == "in" then + fr.fadeTimer = fr.fadeTimer + dt + local a = fr.fadeTimer / 0.5 + if a >= 1 then + a = 1 + fr.fadeState = "hold" + end + fr:SetAlpha(a) + elseif fr.fadeState == "hold" then + fr.holdTimer = fr.holdTimer + dt + if fr.holdTimer >= 8 then + fr.fadeState = "out" + fr.fadeTimer = 0 + end + elseif fr.fadeState == "out" then + fr.fadeTimer = fr.fadeTimer + dt + local a = 1 - fr.fadeTimer / 1.0 + if a <= 0 then + a = 0 + fr:Hide() + fr:SetScript("OnUpdate", nil) + end + fr:SetAlpha(a) + end + end) +end + +function SFrames.Player:UpdateAll() + if not self.frame then return end + self:UpdateHealth() + self:UpdatePowerType() + self:UpdatePower() + self:UpdateLeaderIcon() + self:UpdateRaidIcon() + self:UpdateRestingStatus() + + local name = UnitName("player") or "" + -- Use the stored level from PLAYER_LEVEL_UP if it exists, since API might lag slightly + local level = self.currentLevel or UnitLevel("player") + local formattedLevel = string.format("|cffffff00%d|r", level) + + if SFramesDB and SFramesDB.showLevel == false then + formattedLevel = "" + else + formattedLevel = formattedLevel .. " " + end + + self.frame.portrait:SetUnit("player") + self.frame.portrait:SetCamera(0) + self.frame.portrait:SetPosition(-1.0, 0, 0) + + -- Class Color for Health + local localizedClass, class = UnitClass("player") + local className = GetChineseClassName(class, localizedClass) + local nameLine = formattedLevel .. name + local showClassText = not (SFramesDB and SFramesDB.playerShowClass == false) + if showClassText and className and className ~= "" then + nameLine = nameLine .. " " .. className + end + + if not (SFramesDB and SFramesDB.playerShowClassIcon == false) then + SFrames:SetClassIcon(self.frame.classIcon, class) + else + self.frame.classIcon:Hide() + if self.frame.classIcon.overlay then self.frame.classIcon.overlay:Hide() end + end + + local useClassColor = not (SFramesDB and SFramesDB.classColorHealth == false) + + if useClassColor and class and SFrames.Config.colors.class[class] then + local color = SFrames.Config.colors.class[class] + self.frame.health:SetStatusBarColor(color.r, color.g, color.b) + + -- Apply Class Color to Name + self.frame.nameText:SetText(nameLine) + self.frame.nameText:SetTextColor(color.r, color.g, color.b) + else + self.frame.health:SetStatusBarColor(0, 1, 0) + self.frame.nameText:SetText(nameLine) + self.frame.nameText:SetTextColor(1, 1, 1) + end +end + +function SFrames.Player:UpdateRestingStatus() + if not self.frame or not self.frame.restOverlay then return end + if IsResting() then + self.frame.restOverlay:Show() + else + self.frame.restOverlay:Hide() + end +end + +function SFrames.Player:UpdateLeaderIcon() + if IsPartyLeader() then + self.frame.leaderIcon:Show() + else + self.frame.leaderIcon:Hide() + end +end + +function SFrames.Player:UpdateRaidIcon() + if not (self.frame and self.frame.raidIcon) then return end + if not GetRaidTargetIndex then + self.frame.raidIcon:Hide() + return + end + local index = GetRaidTargetIndex("player") + if index and index > 0 and index <= 8 then + local col = math.mod(index - 1, 4) + local row = math.floor((index - 1) / 4) + self.frame.raidIcon:SetTexCoord(col * 0.25, (col + 1) * 0.25, row * 0.25, (row + 1) * 0.25) + self.frame.raidIcon:Show() + else + self.frame.raidIcon:Hide() + end +end + +function SFrames.Player:UpdateHealth() + local hp = UnitHealth("player") + local maxHp = UnitHealthMax("player") + self.frame.health:SetMinMaxValues(0, maxHp) + self.frame.health:SetValue(hp) + + if maxHp > 0 then + self.frame.healthText:SetText(hp .. " / " .. maxHp) + else + self.frame.healthText:SetText(hp) + end + + self:UpdateHealPrediction() +end + +function SFrames.Player:UpdateHealPrediction() + if not (self.frame and self.frame.health and self.frame.health.healPredMine and self.frame.health.healPredOther) then return end + local predMine = self.frame.health.healPredMine + local predOther = self.frame.health.healPredOther + + local function HidePredictions() + predMine:Hide() + predOther:Hide() + end + + local hp = UnitHealth("player") or 0 + local maxHp = UnitHealthMax("player") or 0 + if maxHp <= 0 or hp >= maxHp or UnitIsDeadOrGhost("player") then + HidePredictions() + return + end + + local _, mineIncoming, othersIncoming = GetIncomingHeals("player") + local missing = maxHp - hp + if missing <= 0 then + HidePredictions() + return + end + + local mineShown = math.min(math.max(0, mineIncoming), missing) + local remaining = missing - mineShown + local otherShown = math.min(math.max(0, othersIncoming), remaining) + if mineShown <= 0 and otherShown <= 0 then + HidePredictions() + return + end + + local barWidth = self.frame.health:GetWidth() or 0 + if barWidth <= 0 then + HidePredictions() + return + end + + local currentWidth = math.floor((hp / maxHp) * barWidth + 0.5) + if currentWidth < 0 then currentWidth = 0 end + if currentWidth > barWidth then currentWidth = barWidth end + + local availableWidth = barWidth - currentWidth + if availableWidth <= 0 then + HidePredictions() + return + end + + local mineWidth = math.floor((mineShown / maxHp) * barWidth + 0.5) + local otherWidth = math.floor((otherShown / maxHp) * barWidth + 0.5) + if mineWidth < 0 then mineWidth = 0 end + if otherWidth < 0 then otherWidth = 0 end + if mineWidth > availableWidth then mineWidth = availableWidth end + if otherWidth > (availableWidth - mineWidth) then + otherWidth = availableWidth - mineWidth + end + + if mineWidth > 0 then + predMine:ClearAllPoints() + predMine:SetPoint("TOPLEFT", self.frame.health, "TOPLEFT", currentWidth, 0) + predMine:SetPoint("BOTTOMLEFT", self.frame.health, "BOTTOMLEFT", currentWidth, 0) + predMine:SetWidth(mineWidth) + predMine:Show() + else + predMine:Hide() + end + + if otherWidth > 0 then + predOther:ClearAllPoints() + predOther:SetPoint("TOPLEFT", self.frame.health, "TOPLEFT", currentWidth + mineWidth, 0) + predOther:SetPoint("BOTTOMLEFT", self.frame.health, "BOTTOMLEFT", currentWidth + mineWidth, 0) + predOther:SetWidth(otherWidth) + predOther:Show() + else + predOther:Hide() + end +end + +function SFrames.Player:UpdatePowerType() + local powerType = UnitPowerType("player") + local color = SFrames.Config.colors.power[powerType] + if color then + self.frame.power:SetStatusBarColor(color.r, color.g, color.b) + else + self.frame.power:SetStatusBarColor(0, 0, 1) + end +end + +function SFrames.Player:GetDruidAltMana(currentPower, currentMaxPower) + -- Method 1: DruidManaLib (tracks regen ticks, MP5, talents, shapeshift cost) + if AceLibrary and AceLibrary.HasInstance and AceLibrary:HasInstance("DruidManaLib-1.0") then + local ok, lib = pcall(function() return AceLibrary("DruidManaLib-1.0") end) + if ok and lib and lib.GetMana then + local mana, maxMana = lib:GetMana() + if type(mana) == "number" and type(maxMana) == "number" and maxMana > 0 then + return math.floor(mana + 0.5), math.floor(maxMana + 0.5) + end + end + end + + -- Method 2: SuperWow returns real mana as second value of UnitMana + if CheckSuperWow then + local ok, hasSW = pcall(CheckSuperWow) + if ok and hasSW then + local ok2, _, realMana = pcall(UnitMana, "player") + local ok3, _, realMax = pcall(UnitManaMax, "player") + if ok2 and ok3 and type(realMana) == "number" and type(realMax) == "number" and realMax > 0 then + return realMana, realMax + end + end + end + + -- Method 3: TBC-style UnitPower API + if UnitPower and UnitPowerMax then + local okMana, pMana = pcall(function() return UnitPower("player", 0) end) + local okMax, pMax = pcall(function() return UnitPowerMax("player", 0) end) + if okMana and okMax and type(pMana) == "number" and type(pMax) == "number" and pMax > 0 then + if not (pMax == currentMaxPower and pMana == currentPower) and pMax > 100 then + return pMana, pMax + end + end + end + + return nil, nil +end + +function SFrames.Player:UpdateFiveSecondRule() + if not (self.frame and self.frame.power and self.frame.power.fsrGlow) then return end + + local powerBar = self.frame.power + local glow = powerBar.fsrGlow + + local function HideTicker() + glow:Hide() + end + + local powerType = UnitPowerType("player") + if powerType ~= 0 then + self.fiveSecondStart = nil + self.fiveSecondPendingStart = nil + self.fiveSecondLastMana = nil + HideTicker() + return + end + + local now = GetTime() + + -- Continuous monitoring: whenever mana drops, (re)start 5-second rule. + -- If mana drops while hard-casting, delay start until cast end. + local currentMana = UnitMana("player") or 0 + if self.fiveSecondLastMana and currentMana < self.fiveSecondLastMana then + local delay = 0 + local cb = self.frame and self.frame.castbar + if cb and cb.casting and cb.startTime and cb.maxValue then + local castEnd = cb.startTime + cb.maxValue + if castEnd > now then + delay = castEnd - now + end + end + + local startAt = now + delay + 0.08 + if delay > 0 then + self.fiveSecondPendingStart = startAt + else + self.fiveSecondStart = startAt + self.fiveSecondPendingStart = nil + end + end + self.fiveSecondLastMana = currentMana + + if self.fiveSecondPendingStart then + if now >= self.fiveSecondPendingStart then + self.fiveSecondStart = self.fiveSecondPendingStart + self.fiveSecondPendingStart = nil + else + HideTicker() + return + end + end + + local startTime = self.fiveSecondStart + if not startTime then + HideTicker() + return + end + + local elapsed = now - startTime + if elapsed < 0 then + HideTicker() + return + end + if elapsed >= 5 then + self.fiveSecondStart = nil + HideTicker() + return + end + + local barWidth = powerBar:GetWidth() or 0 + if barWidth <= 0 then + HideTicker() + return + end + + local progress = elapsed / 5 + if progress < 0 then progress = 0 end + if progress > 1 then progress = 1 end + + local glowWidth = 40 + if glowWidth > barWidth then glowWidth = barWidth end + + local maxGlowX = barWidth - glowWidth + + -- Move strictly from left edge to right edge across full 5 seconds. + local glowX = math.floor(progress * maxGlowX + 0.5) + + local pulse = 0.82 + 0.18 * math.sin(GetTime() * 10) + + glow:ClearAllPoints() + glow:SetPoint("TOPLEFT", powerBar, "TOPLEFT", glowX, 0) + glow:SetPoint("BOTTOMLEFT", powerBar, "BOTTOMLEFT", glowX, 0) + glow:SetWidth(glowWidth) + glow:SetAlpha(0.62 * pulse) + glow:Show() +end + +function SFrames.Player:UpdatePower() + local power = UnitMana("player") + local maxPower = UnitManaMax("player") + self.frame.power:SetMinMaxValues(0, maxPower) + self.frame.power:SetValue(power) + self.frame.powerText:SetText(power .. " / " .. maxPower) + + local _, class = UnitClass("player") + local powerType = UnitPowerType("player") + + self:UpdateFiveSecondRule() + + if class ~= "DRUID" then + if self.frame.manaText then self.frame.manaText:Hide() end + if self.frame.manaBar then self.frame.manaBar:Hide() end + return + end + + if not self.druidManaCache then + self.druidManaCache = { value = 0, max = 0, ts = GetTime() } + end + + if powerType == 0 then + self.druidManaCache.value = power or 0 + self.druidManaCache.max = maxPower or 0 + self.druidManaCache.ts = GetTime() + if self.frame.manaText then self.frame.manaText:Hide() end + if self.frame.manaBar then self.frame.manaBar:Hide() end + return + end + + if not self.frame.manaText then + return + end + + local mana, maxMana = self:GetDruidAltMana(power, maxPower) + if mana and maxMana and maxMana > 0 then + self.druidManaCache.value = mana + self.druidManaCache.max = maxMana + self.druidManaCache.ts = GetTime() + else + local cache = self.druidManaCache + if cache and cache.max and cache.max > 0 then + local now = GetTime() + local dt = now - (cache.ts or now) + if dt < 0 then dt = 0 end + + local regen = 0 + if GetManaRegen then + local base, casting = GetManaRegen() + if type(base) == "number" and base > 0 then + regen = base + elseif type(casting) == "number" and casting > 0 then + regen = casting + end + end + if (not regen or regen <= 0) and UnitStat then + local ok, _, spi = pcall(UnitStat, "player", 5) + if not (ok and type(spi) == "number" and spi > 0) then + ok, spi = pcall(function() return UnitStat("player", 5) end) + end + if ok and type(spi) == "number" and spi > 0 then + regen = (math.ceil(spi / 5) + 15) / 2 + end + end + if regen and regen > 0 and dt > 0 then + cache.value = math.min(cache.max, (cache.value or 0) + regen * dt) + end + cache.ts = now + mana = math.floor((cache.value or 0) + 0.5) + maxMana = cache.max + end + end + + if maxMana and maxMana > 0 then + local pct = math.floor(mana / maxMana * 100 + 0.5) + self.frame.manaText:SetText(pct .. "% " .. mana) + self.frame.manaText:Show() + if self.frame.manaBar then + self.frame.manaBar:SetMinMaxValues(0, maxMana) + self.frame.manaBar:SetValue(mana) + self.frame.manaBar:Show() + end + else + self.frame.manaText:SetText("--") + self.frame.manaText:Show() + if self.frame.manaBar then self.frame.manaBar:Hide() end + end +end + +-------------------------------------------------------------------------------- +-- Player Auras (Buffs / Debuffs) +-------------------------------------------------------------------------------- + +function SFrames.Player:CreateAuras() + -- Create 16 Buff Slots + self.frame.buffs = {} + self.frame.debuffs = {} + local size = 24 + local spacing = 2 + local rowSpacing = 1 + local buffsPerRow = 9 + + for i = 1, 16 do + local b = CreateFrame("Button", "SFramesPlayerBuff"..i, self.frame) + b:SetWidth(size) + b:SetHeight(size) + SFrames:CreateUnitBackdrop(b) + + b.icon = b:CreateTexture(nil, "ARTWORK") + b.icon:SetPoint("TOPLEFT", b, "TOPLEFT", 1, -1) + b.icon:SetPoint("BOTTOMRIGHT", b, "BOTTOMRIGHT", -1, 1) + b.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + b.cdText = SFrames:CreateFontString(b, 9, "CENTER") + b.cdText:SetPoint("BOTTOM", b, "BOTTOM", 0, 1) + b.cdText:SetTextColor(1, 0.82, 0) + b.cdText:SetShadowColor(0, 0, 0, 1) + b.cdText:SetShadowOffset(1, -1) + + -- Tooltip support for precise buff checking + b:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetPlayerBuff(this.buffIndex) + end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + + -- Default row anchor + if i == 1 then + b:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", 0, -1) + elseif math.mod(i - 1, buffsPerRow) == 0 then + b:SetPoint("TOP", self.frame.buffs[i-buffsPerRow], "BOTTOM", 0, -rowSpacing) + else + b:SetPoint("LEFT", self.frame.buffs[i-1], "RIGHT", spacing, 0) + end + + b:Hide() + self.frame.buffs[i] = b + end +end + +function SFrames.Player:UpdateAuras() + local timeNow = GetTime() + for i = 1, 16 do + local b = self.frame.buffs[i] + local buffIndex, untilCancelled = GetPlayerBuff(i - 1, "HELPFUL") + if buffIndex >= 0 then + local texture = GetPlayerBuffTexture(buffIndex) + if texture then + b.icon:SetTexture(texture) + b.buffIndex = buffIndex + b:Show() + + local timeLeft = GetPlayerBuffTimeLeft(buffIndex) + if timeLeft and timeLeft > 0 and timeLeft < 9999 then + b.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + b.cdText:SetText("") + end + else + b:Hide() + end + else + b:Hide() + end + end +end + +-- Initialization Hook for Auras and Castbar +local origInit = SFrames.Player.Initialize +function SFrames.Player:Initialize() + origInit(self) + + -- Setup Auras + self:CreateAuras() + self.auraUpdater = CreateFrame("Frame") + self.auraUpdater.timer = 0 + self.auraUpdater:SetScript("OnUpdate", function() + this.timer = this.timer + arg1 + SFrames.Player:UpdateFiveSecondRule() + if this.timer >= 0.2 then + SFrames.Player:UpdateAuras() + SFrames.Player:UpdatePower() + SFrames.Player:UpdateHealPrediction() + this.timer = 0 + end + end) + + -- Setup Castbar + self:CreateCastbar() + + -- Hide default castbar + if CastingBarFrame then + CastingBarFrame:UnregisterAllEvents() + CastingBarFrame:Hide() + end +end + +-------------------------------------------------------------------------------- +-- Player Castbar +-------------------------------------------------------------------------------- + +function SFrames.Player:CreateCastbar() + local cb = SFrames:CreateStatusBar(self.frame, "SFramesPlayerCastbar") + cb:SetHeight(SFrames.Config.castbarHeight) + cb:SetPoint("BOTTOMRIGHT", self.frame, "TOPRIGHT", 0, 6) + cb:SetPoint("BOTTOMLEFT", self.frame.portrait, "TOPLEFT", SFrames.Config.castbarHeight + 6, 6) + + local cbbg = CreateFrame("Frame", nil, self.frame) + cbbg:SetPoint("TOPLEFT", cb, "TOPLEFT", -1, 1) + cbbg:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", 1, -1) + cbbg:SetFrameLevel(cb:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(cbbg) + + cb.bg = cb:CreateTexture(nil, "BACKGROUND") + cb.bg:SetAllPoints() + cb.bg:SetTexture(SFrames:GetTexture()) + cb.bg:SetVertexColor(0.2, 0.2, 0.2, 1) + cb:SetStatusBarColor(1, 0.7, 0) + + cb.text = SFrames:CreateFontString(cb, 10, "LEFT") + cb.text:SetPoint("LEFT", cb, "LEFT", 4, 0) + + cb.time = SFrames:CreateFontString(cb, 10, "RIGHT") + cb.time:SetPoint("RIGHT", cb, "RIGHT", -4, 0) + + cb.icon = cb:CreateTexture(nil, "ARTWORK") + cb.icon:SetWidth(SFrames.Config.castbarHeight + 2) + cb.icon:SetHeight(SFrames.Config.castbarHeight + 2) + cb.icon:SetPoint("RIGHT", cb, "LEFT", -4, 0) + cb.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + -- Icon Backdrop + local ibg = CreateFrame("Frame", nil, self.frame) + ibg:SetPoint("TOPLEFT", cb.icon, "TOPLEFT", -1, 1) + ibg:SetPoint("BOTTOMRIGHT", cb.icon, "BOTTOMRIGHT", 1, -1) + ibg:SetFrameLevel(cb:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(ibg) + + cb:Hide() + cbbg:Hide() + cb.icon:Hide() + ibg:Hide() + + self.frame.castbar = cb + self.frame.castbar.cbbg = cbbg + self.frame.castbar.ibg = ibg + + cb:SetScript("OnUpdate", function() SFrames.Player:CastbarOnUpdate() end) + + -- Hook events + SFrames:RegisterEvent("SPELLCAST_START", function() self:CastbarStart(arg1, arg2) end) + SFrames:RegisterEvent("SPELLCAST_STOP", function() self:CastbarStop() end) + SFrames:RegisterEvent("SPELLCAST_FAILED", function() self:CastbarStop() end) + SFrames:RegisterEvent("SPELLCAST_INTERRUPTED", function() self:CastbarStop() end) + SFrames:RegisterEvent("SPELLCAST_DELAYED", function() self:CastbarDelayed(arg1) end) + SFrames:RegisterEvent("SPELLCAST_CHANNEL_START", function() self:CastbarChannelStart(arg1, arg2) end) + SFrames:RegisterEvent("SPELLCAST_CHANNEL_UPDATE", function() self:CastbarChannelUpdate(arg1) end) + SFrames:RegisterEvent("SPELLCAST_CHANNEL_STOP", function() self:CastbarStop() end) +end + +function SFrames.Player:CastbarStart(spellName, duration) + local cb = self.frame.castbar + cb.casting = true + cb.channeling = nil + cb.fadeOut = nil + cb.startTime = GetTime() + cb.maxValue = duration / 1000 + cb:SetMinMaxValues(0, cb.maxValue) + cb:SetValue(0) + cb.text:SetText(spellName) + + local texture + local _UnitCastingInfo = UnitCastingInfo or (ShaguTweaks and ShaguTweaks.UnitCastingInfo) + if _UnitCastingInfo then + local _, _, _, tex = _UnitCastingInfo("player") + texture = tex + end + if texture then + cb.icon:SetTexture(texture) + cb.icon:Show() + cb.ibg:Show() + else + cb.icon:Hide() + cb.ibg:Hide() + end + + cb:SetAlpha(1) + cb.cbbg:SetAlpha(1) + if texture then + cb.icon:SetAlpha(1) + cb.ibg:SetAlpha(1) + end + cb:Show() + cb.cbbg:Show() +end + +function SFrames.Player:CastbarChannelStart(duration, spellName) + local cb = self.frame.castbar + cb.casting = nil + cb.channeling = true + cb.fadeOut = nil + cb.startTime = GetTime() + cb.maxValue = duration / 1000 + cb.endTime = cb.startTime + cb.maxValue + cb:SetMinMaxValues(0, cb.maxValue) + cb:SetValue(cb.maxValue) + cb.text:SetText(spellName) + + local texture + local _UnitChannelInfo = UnitChannelInfo or (ShaguTweaks and ShaguTweaks.UnitChannelInfo) + if _UnitChannelInfo then + local _, _, _, tex = _UnitChannelInfo("player") + texture = tex + end + if texture then + cb.icon:SetTexture(texture) + cb.icon:Show() + cb.ibg:Show() + else + cb.icon:Hide() + cb.ibg:Hide() + end + + cb:SetAlpha(1) + cb.cbbg:SetAlpha(1) + if texture then + cb.icon:SetAlpha(1) + cb.ibg:SetAlpha(1) + end + cb:Show() + cb.cbbg:Show() +end + +function SFrames.Player:CastbarStop() + local cb = self.frame.castbar + cb.casting = nil + cb.channeling = nil + cb.fadeOut = true + -- keep showing for a short fade out +end + +function SFrames.Player:CastbarDelayed(delay) + local cb = self.frame.castbar + if cb.casting then + cb.maxValue = cb.maxValue + (delay / 1000) + cb:SetMinMaxValues(0, cb.maxValue) + end +end + +function SFrames.Player:CastbarChannelUpdate(delay) + local cb = self.frame.castbar + if cb.channeling then + local add = delay / 1000 + cb.maxValue = cb.maxValue + add + cb.endTime = cb.endTime + add + cb:SetMinMaxValues(0, cb.maxValue) + end +end + +function SFrames.Player:CastbarOnUpdate() + local cb = self.frame.castbar + if cb.casting then + local elapsed = GetTime() - cb.startTime + if elapsed >= cb.maxValue then + cb.casting = nil + cb.fadeOut = true + cb:SetValue(cb.maxValue) + return + end + cb:SetValue(elapsed) + cb.time:SetText(string.format("%.1f", math.max(cb.maxValue - elapsed, 0))) + elseif cb.channeling then + local timeRemaining = cb.endTime - GetTime() + if timeRemaining <= 0 then + cb.channeling = nil + cb.fadeOut = true + cb:SetValue(0) + return + end + cb:SetValue(timeRemaining) + cb.time:SetText(string.format("%.1f", timeRemaining)) + elseif cb.fadeOut then + local alpha = cb:GetAlpha() - 0.05 + if alpha > 0 then + cb:SetAlpha(alpha) + cb.cbbg:SetAlpha(alpha) + cb.icon:SetAlpha(alpha) + cb.ibg:SetAlpha(alpha) + else + cb.fadeOut = nil + cb:Hide() + cb.cbbg:Hide() + cb.icon:Hide() + cb.ibg:Hide() + end + end +end diff --git a/Units/Raid.lua b/Units/Raid.lua new file mode 100644 index 0000000..042c169 --- /dev/null +++ b/Units/Raid.lua @@ -0,0 +1,1064 @@ +SFrames.Raid = {} +local _A = SFrames.ActiveTheme + +local RAID_FRAME_WIDTH = 60 +local RAID_FRAME_HEIGHT = 40 +local GROUP_PADDING = 8 +local UNIT_PADDING = 2 + +local RAID_UNIT_LOOKUP = {} +for i = 1, 40 do RAID_UNIT_LOOKUP["raid" .. i] = true end + +local function GetIncomingHeals(unit) + return SFrames:GetIncomingHeals(unit) +end + +function SFrames.Raid:GetMetrics() + local db = SFramesDB or {} + + local width = tonumber(db.raidFrameWidth) or RAID_FRAME_WIDTH + width = math.max(30, math.min(150, width)) + + local height = tonumber(db.raidFrameHeight) or RAID_FRAME_HEIGHT + height = math.max(20, math.min(80, height)) + + local healthHeight = tonumber(db.raidHealthHeight) or math.floor((height - 3) * 0.8) + healthHeight = math.max(10, math.min(height - 6, healthHeight)) + + local powerHeight = height - healthHeight - 3 + if not db.raidShowPower then + powerHeight = 0 + healthHeight = height - 2 + end + + local hgap = tonumber(db.raidHorizontalGap) or UNIT_PADDING + local vgap = tonumber(db.raidVerticalGap) or UNIT_PADDING + local groupGap = tonumber(db.raidGroupGap) or GROUP_PADDING + + local nameFont = tonumber(db.raidNameFontSize) or 10 + local valueFont = tonumber(db.raidValueFontSize) or 9 + + return { + width = width, + height = height, + healthHeight = healthHeight, + powerHeight = powerHeight, + horizontalGap = hgap, + verticalGap = vgap, + groupGap = groupGap, + nameFont = nameFont, + valueFont = valueFont, + showPower = db.raidShowPower ~= false, + } +end + +function SFrames.Raid:ApplyFrameStyle(frame, metrics) + if not frame then return end + + frame:SetWidth(metrics.width) + frame:SetHeight(metrics.height) + + if frame.health then + frame.health:ClearAllPoints() + frame.health:SetPoint("TOPLEFT", frame, "TOPLEFT", 1, -1) + frame.health:SetPoint("TOPRIGHT", frame, "TOPRIGHT", -1, -1) + frame.health:SetHeight(metrics.healthHeight) + end + + if frame.healthBGFrame then + frame.healthBGFrame:ClearAllPoints() + frame.healthBGFrame:SetPoint("TOPLEFT", frame.health, "TOPLEFT", -1, 1) + frame.healthBGFrame:SetPoint("BOTTOMRIGHT", frame.health, "BOTTOMRIGHT", 1, -1) + end + + if frame.power then + if metrics.showPower then + frame.power:Show() + if frame.powerBGFrame then frame.powerBGFrame:Show() end + frame.power:ClearAllPoints() + frame.power:SetPoint("TOPLEFT", frame.health, "BOTTOMLEFT", 0, -1) + frame.power:SetPoint("TOPRIGHT", frame.health, "BOTTOMRIGHT", 0, 0) + frame.power:SetHeight(metrics.powerHeight) + else + frame.power:Hide() + if frame.powerBGFrame then frame.powerBGFrame:Hide() end + end + end + + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + local fontPath = SFrames:GetFont() + + if frame.nameText then + frame.nameText:SetFont(fontPath, metrics.nameFont, outline) + end + if frame.healthText then + frame.healthText:SetFont(fontPath, metrics.valueFont, outline) + end +end + +function SFrames.Raid:ApplyLayout() + if not (self.parent and self._framesBuilt) then return end + + local metrics = self:GetMetrics() + self.metrics = metrics + local mode = (SFramesDB and SFramesDB.raidLayout) or "horizontal" + local showLabel = SFramesDB and SFramesDB.raidShowGroupLabel ~= false + + local LABEL_H = 16 -- px above each column (horizontal mode) + local LABEL_W = 16 -- px left of each row (vertical mode) + + for g = 1, 8 do + local groupParent = self.groups[g] + groupParent:ClearAllPoints() + + if mode == "horizontal" then + local extraTop = showLabel and LABEL_H or 0 + if g == 1 then + groupParent:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 0, 0) + else + groupParent:SetPoint("TOPLEFT", self.groups[g-1], "TOPRIGHT", metrics.groupGap, 0) + end + groupParent:SetWidth(metrics.width) + groupParent:SetHeight(extraTop + (metrics.height * 5) + (metrics.verticalGap * 4)) + else + local extraLeft = showLabel and LABEL_W or 0 + if g == 1 then + groupParent:SetPoint("TOPLEFT", self.parent, "TOPLEFT", 0, 0) + else + groupParent:SetPoint("TOPLEFT", self.groups[g-1], "BOTTOMLEFT", 0, -metrics.groupGap) + end + groupParent:SetWidth(extraLeft + (metrics.width * 5) + (metrics.horizontalGap * 4)) + groupParent:SetHeight(metrics.height) + end + + -- Position label; visibility is controlled per-group in UpdateAll + local lbl = self.groupLabels and self.groupLabels[g] + if lbl then + lbl:ClearAllPoints() + if showLabel then + if mode == "horizontal" then + -- Place label at the very top of the column, centered horizontally + -- Frames start at -LABEL_H, so the strip [0, -LABEL_H] is exclusively for the label + lbl:SetPoint("TOP", groupParent, "TOP", 0, -2) + else + -- Vertically centered on the left strip, centered horizontally within it + lbl:SetPoint("CENTER", groupParent, "LEFT", LABEL_W / 2, 0) + end + else + lbl:Hide() + end + end + + for i = 1, 5 do + local index = (g - 1) * 5 + i + local f = self.frames[index].frame + f:ClearAllPoints() + + if mode == "horizontal" then + local extraTop = showLabel and LABEL_H or 0 + if i == 1 then + -- Frames start below the label strip + f:SetPoint("TOPLEFT", groupParent, "TOPLEFT", 0, -extraTop) + else + f:SetPoint("TOPLEFT", self.frames[index-1].frame, "BOTTOMLEFT", 0, -metrics.verticalGap) + end + else + local extraLeft = showLabel and LABEL_W or 0 + if i == 1 then + f:SetPoint("TOPLEFT", groupParent, "TOPLEFT", extraLeft, 0) + else + f:SetPoint("TOPLEFT", self.frames[index-1].frame, "TOPRIGHT", metrics.horizontalGap, 0) + end + end + end + end + + local extraTop = showLabel and LABEL_H or 0 + local extraLeft = showLabel and LABEL_W or 0 + if mode == "horizontal" then + self.parent:SetWidth((metrics.width * 8) + (metrics.groupGap * 7)) + self.parent:SetHeight(extraTop + (metrics.height * 5) + (metrics.verticalGap * 4)) + else + self.parent:SetWidth(extraLeft + (metrics.width * 5) + (metrics.horizontalGap * 4)) + self.parent:SetHeight((metrics.height * 8) + (metrics.groupGap * 7)) + end +end + +function SFrames.Raid:SavePosition() + if not (self.parent and SFramesDB) then return end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + local point, _, relativePoint, xOfs, yOfs = self.parent:GetPoint() + if point and relativePoint then + SFramesDB.Positions["RaidFrame"] = { + point = point, + relativePoint = relativePoint, + xOfs = xOfs or 0, + yOfs = yOfs or 0, + } + end +end + +function SFrames.Raid:ApplyPosition() + if not self.parent then return end + self.parent:ClearAllPoints() + local pos = SFramesDB and SFramesDB.Positions and SFramesDB.Positions["RaidFrame"] + if pos and pos.point and pos.relativePoint and type(pos.xOfs) == "number" and type(pos.yOfs) == "number" then + self.parent:SetPoint(pos.point, UIParent, pos.relativePoint, pos.xOfs, pos.yOfs) + else + self.parent:SetPoint("TOPLEFT", UIParent, "TOPLEFT", 15, -200) + end +end + +local function TryDropCursorOnUnit(unit) + if not unit or not UnitExists(unit) then return false end + if not CursorHasItem or not CursorHasItem() then return false end + if not DropItemOnUnit then return false end + + local ok = pcall(DropItemOnUnit, unit) + return not CursorHasItem() +end + +function SFrames.Raid:Initialize() + self.frames = {} + self.groups = {} + self._framesBuilt = false + + if not SFramesDB then SFramesDB = {} end + + local parent = CreateFrame("Frame", "SFramesRaidParent", UIParent) + local frameScale = (SFramesDB and type(SFramesDB.raidFrameScale) == "number") and SFramesDB.raidFrameScale or 1 + parent:SetScale(frameScale) + self.parent = parent + self:ApplyPosition() + + parent:SetMovable(true) + + self.groupLabels = {} + for g = 1, 8 do + local groupParent = CreateFrame("Frame", "SFramesRaidGroup"..g, parent) + self.groups[g] = groupParent + + local lbl = groupParent:CreateFontString(nil, "OVERLAY") + lbl:SetFont(SFrames:GetFont(), 9, "OUTLINE") + lbl:SetTextColor(0.85, 0.78, 0.92) + lbl:SetShadowColor(0, 0, 0, 1) + lbl:SetShadowOffset(1, -1) + lbl:SetText("小队 " .. g) + lbl:Hide() + self.groupLabels[g] = lbl + end + + SFrames:RegisterEvent("RAID_ROSTER_UPDATE", function() self:UpdateAll() end) + SFrames:RegisterEvent("PARTY_LEADER_CHANGED", function() self:UpdateAll() end) + SFrames:RegisterEvent("PLAYER_TARGET_CHANGED", function() self:UpdateTargetHighlight() end) + SFrames:RegisterEvent("UNIT_HEALTH", function() if RAID_UNIT_LOOKUP[arg1] then self:UpdateHealth(arg1) end end) + SFrames:RegisterEvent("UNIT_MAXHEALTH", function() if RAID_UNIT_LOOKUP[arg1] then self:UpdateHealth(arg1) end end) + SFrames:RegisterEvent("UNIT_MANA", function() if RAID_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_MAXMANA", function() if RAID_UNIT_LOOKUP[arg1] then self:UpdatePower(arg1) end end) + SFrames:RegisterEvent("UNIT_AURA", function() if RAID_UNIT_LOOKUP[arg1] then self:UpdateAuras(arg1) end end) + SFrames:RegisterEvent("RAID_TARGET_UPDATE", function() self:UpdateRaidIcons() end) + + self:UpdateAll() +end + +function SFrames.Raid:EnsureFrames() + if self._framesBuilt then return end + self._framesBuilt = true + + for i = 1, 40 do + local unit = "raid" .. i + local groupIndex = math.ceil(i / 5) + local groupParent = self.groups[groupIndex] + local f = CreateFrame("Button", "SFramesRaidFrame"..i, groupParent) + + f.id = i + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() + if IsAltKeyDown() or SFrames.isUnlocked then + SFrames.Raid.parent:StartMoving() + end + end) + f:SetScript("OnDragStop", function() + SFrames.Raid.parent:StopMovingOrSizing() + SFrames.Raid:SavePosition() + end) + f:SetScript("OnClick", function() + if arg1 == "LeftButton" then + if TryDropCursorOnUnit(this.unit) then return end + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit(this.unit) + return + end + TargetUnit(this.unit) + elseif arg1 == "RightButton" then + if UnitExists(this.unit) then + GameTooltip:Hide() + if not SFrames.Raid.dropDown then + SFrames.Raid.dropDown = CreateFrame("Frame", "SFramesRaidDropDown", UIParent, "UIDropDownMenuTemplate") + SFrames.Raid.dropDown.displayMode = "MENU" + SFrames.Raid.dropDown.initialize = function() + local dd = SFrames.Raid.dropDown + local unit = dd.unit + local name = dd.name + if not unit or not name then return end + + local info = {} + info.text = name + info.isTitle = 1 + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + + if not UnitIsUnit(unit, "player") then + info = {} + info.text = WHISPER or "密语" + info.notCheckable = 1 + info.func = function() ChatFrame_SendTell(name) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = INSPECT or "检查" + info.notCheckable = 1 + info.func = function() InspectUnit(unit) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = TRADE or "交易" + info.notCheckable = 1 + info.func = function() InitiateTrade(unit) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = FOLLOW or "跟随" + info.notCheckable = 1 + info.func = function() FollowUnit(unit) end + UIDropDownMenu_AddButton(info) + end + + if (IsRaidLeader and IsRaidLeader()) or (IsRaidOfficer and IsRaidOfficer()) then + if not UnitIsUnit(unit, "player") then + info = {} + info.text = "提升为助手" + info.notCheckable = 1 + info.func = function() PromoteToAssistant(name) end + UIDropDownMenu_AddButton(info) + + info = {} + info.text = "移出团队" + info.notCheckable = 1 + info.func = function() UninviteByName(name) end + UIDropDownMenu_AddButton(info) + end + end + + info = {} + info.text = CANCEL or "取消" + info.notCheckable = 1 + UIDropDownMenu_AddButton(info) + end + end + SFrames.Raid.dropDown.unit = this.unit + SFrames.Raid.dropDown.name = UnitName(this.unit) + ToggleDropDownMenu(1, nil, SFrames.Raid.dropDown, "cursor") + end + end + end) + f:SetScript("OnReceiveDrag", function() + if TryDropCursorOnUnit(this.unit) then return end + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit(this.unit) + end + end) + f:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetUnit(this.unit) + end) + f:SetScript("OnLeave", function() GameTooltip:Hide() end) + f.unit = unit + + -- Health Bar + f.health = SFrames:CreateStatusBar(f, "SFramesRaidFrame"..i.."Health") + + local hbg = CreateFrame("Frame", nil, f) + hbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(hbg) + f.healthBGFrame = hbg + + f.health.bg = f.health:CreateTexture(nil, "BACKGROUND") + f.health.bg:SetAllPoints() + f.health.bg:SetTexture(SFrames:GetTexture()) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Heal prediction overlay (incoming heals) + f.health.healPredMine = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredMine:SetTexture(SFrames:GetTexture()) + f.health.healPredMine:SetVertexColor(0.4, 1.0, 0.55, 0.78) + f.health.healPredMine:Hide() + + f.health.healPredOther = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredOther:SetTexture(SFrames:GetTexture()) + f.health.healPredOther:SetVertexColor(0.2, 0.9, 0.35, 0.5) + f.health.healPredOther:Hide() + + -- Power Bar + f.power = SFrames:CreateStatusBar(f, "SFramesRaidFrame"..i.."Power") + f.power:SetMinMaxValues(0, 100) + + local powerbg = CreateFrame("Frame", nil, f) + powerbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(powerbg) + f.powerBGFrame = powerbg + + f.power.bg = f.power:CreateTexture(nil, "BACKGROUND") + f.power.bg:SetAllPoints() + f.power.bg:SetTexture(SFrames:GetTexture()) + f.power.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Target Highlight + f.targetHighlight = f:CreateTexture(nil, "OVERLAY") + f.targetHighlight:SetPoint("TOPLEFT", f, "TOPLEFT", -2, 2) + f.targetHighlight:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 2, -2) + f.targetHighlight:SetTexture("Interface\\QuestFrame\\UI-QuestTitleHighlight") + f.targetHighlight:SetBlendMode("ADD") + f.targetHighlight:SetVertexColor(1, 1, 1, 0.6) + f.targetHighlight:Hide() + + -- Texts + f.nameText = SFrames:CreateFontString(f.health, 10, "CENTER") + f.nameText:SetPoint("TOP", f.health, "TOP", 0, -2) + f.nameText:SetShadowColor(0, 0, 0, 1) + f.nameText:SetShadowOffset(1, -1) + + f.healthText = SFrames:CreateFontString(f.health, 9, "CENTER") + f.healthText:SetPoint("BOTTOM", f.health, "BOTTOM", 0, 2) + f.healthText:SetShadowColor(0, 0, 0, 1) + f.healthText:SetShadowOffset(1, -1) + f.healthText:SetTextColor(0.8, 0.8, 0.8) + + local offOvr = CreateFrame("Frame", nil, f) + offOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 4) + offOvr:SetAllPoints(f) + local offIco = SFrames:CreateIcon(offOvr, "offline", 16) + offIco:SetPoint("CENTER", offOvr, "CENTER", 0, 0) + offIco:SetVertexColor(0.7, 0.7, 0.7, 0.9) + offIco:Hide() + f.offlineIcon = offIco + + local roleOvr = CreateFrame("Frame", nil, f) + roleOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 6) + roleOvr:SetAllPoints(f) + + f.leaderIcon = roleOvr:CreateTexture(nil, "OVERLAY") + f.leaderIcon:SetWidth(12) + f.leaderIcon:SetHeight(12) + f.leaderIcon:SetPoint("TOPLEFT", f, "TOPLEFT", -3, 3) + f.leaderIcon:SetTexture("Interface\\GroupFrame\\UI-Group-LeaderIcon") + f.leaderIcon:Hide() + + f.assistantIcon = roleOvr:CreateFontString(nil, "OVERLAY") + f.assistantIcon:SetFont(SFrames:GetFont(), 12, "OUTLINE") + f.assistantIcon:SetPoint("TOPLEFT", f, "TOPLEFT", -1, 1) + f.assistantIcon:SetTextColor(0.5, 0.8, 1.0) + f.assistantIcon:SetShadowColor(0, 0, 0, 1) + f.assistantIcon:SetShadowOffset(1, -1) + f.assistantIcon:SetText("+") + f.assistantIcon:Hide() + + -- Raid Target Icon + local raidIconSize = 16 + local raidIconOvr = CreateFrame("Frame", nil, f) + raidIconOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 7) + raidIconOvr:SetWidth(raidIconSize) + raidIconOvr:SetHeight(raidIconSize) + raidIconOvr:SetPoint("CENTER", f.health, "TOP", 0, 0) + f.raidIcon = raidIconOvr:CreateTexture(nil, "OVERLAY") + f.raidIcon:SetTexture("Interface\\TargetingFrame\\UI-RaidTargetingIcons") + f.raidIcon:SetAllPoints(raidIconOvr) + f.raidIcon:Hide() + f.raidIconOverlay = raidIconOvr + + f.indicators = {} + for pos = 1, 4 do + local ind = CreateFrame("Button", nil, f) + ind:SetWidth(10) + ind:SetHeight(10) + ind:SetFrameLevel(f:GetFrameLevel() + 5) + SFrames:CreateUnitBackdrop(ind) + + ind.icon = ind:CreateTexture(nil, "ARTWORK") + ind.icon:SetAllPoints() + ind.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + if pos == 1 then + ind:SetPoint("TOPLEFT", f.health, "TOPLEFT", 1, -1) + elseif pos == 2 then + ind:SetPoint("TOPRIGHT", f.health, "TOPRIGHT", -1, -1) + elseif pos == 3 then + ind:SetPoint("BOTTOMLEFT", f.health, "BOTTOMLEFT", 1, 1) + elseif pos == 4 then + ind:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", -1, 1) + end + + ind:SetScript("OnEnter", function() + if this.index then + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + if this.isDebuff then + GameTooltip:SetUnitDebuff(f.unit, this.index) + else + GameTooltip:SetUnitBuff(f.unit, this.index) + end + end + end) + ind:SetScript("OnLeave", function() GameTooltip:Hide() end) + + ind:Hide() + f.indicators[pos] = ind + end + + self.frames[i] = { frame = f, unit = unit, index = i } + + self:ApplyFrameStyle(f, self:GetMetrics()) + + f.rangeTimer = 0 + f.auraScanTimer = 0 + f.healPredTimer = 0 + + f:SetScript("OnShow", function() + if not SFrames.Raid.testing then + SFrames.Raid:UpdateFrame(this.unit) + end + end) + + f:Hide() + end + + if not self._globalUpdateFrame then + self._globalUpdateFrame = CreateFrame("Frame", nil, UIParent) + self._globalUpdateFrame:SetScript("OnUpdate", function() + if SFrames.Raid.testing then return end + local dt = arg1 + local frames = SFrames.Raid.frames + if not frames then return end + for i = 1, 40 do + local entry = frames[i] + if entry then + local f = entry.frame + if f:IsVisible() and f.unit and f.unit ~= "" then + f.rangeTimer = f.rangeTimer + dt + if f.rangeTimer >= 0.5 then + if UnitExists(f.unit) and not CheckInteractDistance(f.unit, 4) then + f:SetAlpha(0.6) + else + f:SetAlpha(1.0) + end + f.rangeTimer = 0 + end + + f.auraScanTimer = f.auraScanTimer + dt + if f.auraScanTimer >= 0.7 then + SFrames.Raid:UpdateAuras(f.unit) + f.auraScanTimer = 0 + end + + f.healPredTimer = f.healPredTimer + dt + if f.healPredTimer >= 0.2 then + SFrames.Raid:UpdateHealPrediction(f.unit) + f.healPredTimer = 0 + end + end + end + end + end) + end + + self:ApplyLayout() +end + +function SFrames.Raid:UpdateAll() + if self.testing then return end + + if SFramesDB and SFramesDB.enableRaidFrames == false then + self.parent:Hide() + return + else + self.parent:Show() + end + + if GetNumRaidMembers() > 0 then + self:EnsureFrames() + for i = 1, 40 do + self.frames[i].frame:Hide() + self.frames[i].frame.unit = "" + self.frames[i].unit = "" + end + + local groupSlots = {} + for g = 1, 8 do + groupSlots[g] = 0 + end + + for i = 1, 40 do + local name, rank, subgroup = GetRaidRosterInfo(i) + if name and subgroup and subgroup >= 1 and subgroup <= 8 then + groupSlots[subgroup] = groupSlots[subgroup] + 1 + local slot = groupSlots[subgroup] + if slot <= 5 then + local frameIndex = (subgroup - 1) * 5 + slot + local f = self.frames[frameIndex].frame + f.unit = "raid" .. i + f.raidRank = rank + self.frames[frameIndex].unit = "raid" .. i + f:Show() + self:UpdateFrame("raid" .. i) + end + end + end + + -- Show/hide group labels based on whether each group has members + local showLabel = SFramesDB and SFramesDB.raidShowGroupLabel ~= false + for g = 1, 8 do + local lbl = self.groupLabels and self.groupLabels[g] + if lbl then + if showLabel and groupSlots[g] > 0 then + lbl:Show() + else + lbl:Hide() + end + end + end + else + if not self.testing and self._framesBuilt then + for i = 1, 40 do + self.frames[i].frame:Hide() + self.frames[i].frame.unit = "" + self.frames[i].unit = "" + end + end + for g = 1, 8 do + local lbl = self.groupLabels and self.groupLabels[g] + if lbl then lbl:Hide() end + end + end +end + +function SFrames.Raid:UpdateFrame(unit) + if self.testing or not self._framesBuilt then return end + for i=1, 40 do + if self.frames[i].unit == unit then + local f = self.frames[i].frame + local name = UnitName(unit) or "" + local _, class = UnitClass(unit) + + local display = string.sub(name, 1, 15) + f.nameText:SetText(display) + + local rank = f.raidRank or 0 + if f.leaderIcon then + if rank == 2 then f.leaderIcon:Show() else f.leaderIcon:Hide() end + end + if f.assistantIcon then + if rank == 1 then f.assistantIcon:Show() else f.assistantIcon:Hide() end + end + + if not UnitIsConnected(unit) then + f.health:SetStatusBarColor(0.5, 0.5, 0.5) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + f.nameText:SetTextColor(0.5, 0.5, 0.5) + if f.offlineIcon then f.offlineIcon:Show() end + else + if f.offlineIcon then f.offlineIcon:Hide() end + if class and SFrames.Config.colors.class[class] then + local color = SFrames.Config.colors.class[class] + f.health:SetStatusBarColor(color.r, color.g, color.b) + f.nameText:SetTextColor(1, 1, 1) + else + f.health:SetStatusBarColor(0, 1, 0) + f.nameText:SetTextColor(1, 1, 1) + end + end + + self:UpdateHealth(unit) + self:UpdatePower(unit) + self:UpdateAuras(unit) + self:UpdateRaidIcon(unit) + self:UpdateTargetHighlight() + break + end + end +end + +function SFrames.Raid:UpdateTargetHighlight() + if self.testing or not self._framesBuilt then return end + for i=1, 40 do + local f = self.frames[i].frame + if UnitExists("target") and UnitIsUnit("target", self.frames[i].unit) then + f.targetHighlight:Show() + else + f.targetHighlight:Hide() + end + end +end + +function SFrames.Raid:UpdateHealth(unit) + if not self._framesBuilt then return end + for i=1, 40 do + if self.frames[i].unit == unit then + local f = self.frames[i].frame + if not UnitIsConnected(unit) then + f.health:SetMinMaxValues(0, 100) + f.health:SetValue(0) + f.healthText:SetText("离线") + if f.offlineIcon then f.offlineIcon:Show() end + return + end + if f.offlineIcon then f.offlineIcon:Hide() end + + local hp = UnitHealth(unit) + local maxHp = UnitHealthMax(unit) + + if UnitIsDead(unit) then + f.health:SetMinMaxValues(0, 100) + f.health:SetValue(0) + f.healthText:SetText("死亡") + f.nameText:SetTextColor(0.5, 0.5, 0.5) + return + end + + if UnitIsGhost(unit) then + f.health:SetMinMaxValues(0, 100) + f.health:SetValue(0) + f.healthText:SetText("灵魂") + f.nameText:SetTextColor(0.5, 0.5, 0.5) + return + end + + f.health:SetMinMaxValues(0, maxHp) + f.health:SetValue(hp) + + local percent = 0 + if maxHp > 0 then + percent = math.floor((hp / maxHp) * 100) + end + + local db = SFramesDB or {} + local txt = "" + if db.raidHealthFormat == "percent" then + txt = percent .. "%" + elseif db.raidHealthFormat == "deficit" then + if maxHp - hp > 0 then + txt = "-" .. (maxHp - hp) + end + else + txt = (math.floor(hp/100)/10).."k" -- default compact e.g. 4.5k + if hp < 1000 then txt = tostring(hp) end + end + + f.healthText:SetText(txt) + self:UpdateHealPrediction(unit) + break + end + end +end + +function SFrames.Raid:UpdateHealPrediction(unit) + if not self._framesBuilt then return end + local frameData = nil + for i=1, 40 do + if self.frames[i].unit == unit then + frameData = self.frames[i] + break + end + end + if not frameData then return end + + local f = frameData.frame + if not (f.health and f.health.healPredMine and f.health.healPredOther) then return end + + local predMine = f.health.healPredMine + local predOther = f.health.healPredOther + + local function HidePredictions() + predMine:Hide() + predOther:Hide() + end + + if not UnitExists(unit) or not UnitIsConnected(unit) then + HidePredictions() + return + end + + local hp = UnitHealth(unit) or 0 + local maxHp = UnitHealthMax(unit) or 0 + if maxHp <= 0 or hp >= maxHp then + HidePredictions() + return + end + + local _, mineIncoming, othersIncoming = GetIncomingHeals(unit) + local missing = maxHp - hp + if missing <= 0 then + HidePredictions() + return + end + + local mineShown = math.min(math.max(0, mineIncoming), missing) + local remaining = missing - mineShown + local otherShown = math.min(math.max(0, othersIncoming), remaining) + if mineShown <= 0 and otherShown <= 0 then + HidePredictions() + return + end + + local barWidth = f.health:GetWidth() or 0 + if barWidth <= 0 then + HidePredictions() + return + end + + local currentWidth = math.floor((hp / maxHp) * barWidth + 0.5) + if currentWidth < 0 then currentWidth = 0 end + if currentWidth > barWidth then currentWidth = barWidth end + + local availableWidth = barWidth - currentWidth + if availableWidth <= 0 then + HidePredictions() + return + end + + local mineWidth = math.floor((mineShown / maxHp) * barWidth + 0.5) + local otherWidth = math.floor((otherShown / maxHp) * barWidth + 0.5) + if mineWidth < 0 then mineWidth = 0 end + if otherWidth < 0 then otherWidth = 0 end + if mineWidth > availableWidth then mineWidth = availableWidth end + if otherWidth > (availableWidth - mineWidth) then + otherWidth = availableWidth - mineWidth + end + + if mineWidth > 0 then + predMine:ClearAllPoints() + predMine:SetPoint("TOPLEFT", f.health, "TOPLEFT", currentWidth, 0) + predMine:SetPoint("BOTTOMLEFT", f.health, "BOTTOMLEFT", currentWidth, 0) + predMine:SetWidth(mineWidth) + predMine:Show() + else + predMine:Hide() + end + + if otherWidth > 0 then + predOther:ClearAllPoints() + predOther:SetPoint("TOPLEFT", f.health, "TOPLEFT", currentWidth + mineWidth, 0) + predOther:SetPoint("BOTTOMLEFT", f.health, "BOTTOMLEFT", currentWidth + mineWidth, 0) + predOther:SetWidth(otherWidth) + predOther:Show() + else + predOther:Hide() + end +end + +function SFrames.Raid:UpdatePower(unit) + if not self._framesBuilt then return end + local db = SFramesDB or {} + if db.raidShowPower == false then return end + + for i=1, 40 do + if self.frames[i].unit == unit then + local f = self.frames[i].frame + local power = UnitMana(unit) + local maxPower = UnitManaMax(unit) + local _, class = UnitClass(unit) + + f.power:SetMinMaxValues(0, maxPower) + f.power:SetValue(power) + + local pType = UnitPowerType(unit) + local color = SFrames.Config.colors.power[pType] or SFrames.Config.colors.power[0] + f.power:SetStatusBarColor(color.r, color.g, color.b) + break + end + end +end + +function SFrames.Raid:UpdateRaidIcons() + if not self._framesBuilt then return end + for i = 1, 40 do + local unit = self.frames[i].unit + if unit and unit ~= "" and self.frames[i].frame:IsShown() then + self:UpdateRaidIcon(unit) + end + end +end + +function SFrames.Raid:UpdateRaidIcon(unit) + if not self._framesBuilt then return end + for i = 1, 40 do + if self.frames[i].unit == unit then + local f = self.frames[i].frame + if not f.raidIcon then return end + if not GetRaidTargetIndex then + f.raidIcon:Hide() + return + end + if not UnitExists(unit) then + f.raidIcon:Hide() + return + end + local index = GetRaidTargetIndex(unit) + if index and index > 0 and index <= 8 then + local col = math.mod(index - 1, 4) + local row = math.floor((index - 1) / 4) + f.raidIcon:SetTexCoord(col * 0.25, (col + 1) * 0.25, row * 0.25, (row + 1) * 0.25) + f.raidIcon:Show() + else + f.raidIcon:Hide() + end + break + end + end +end + +local PlayerClassBuffs = nil + +function SFrames.Raid:GetClassBuffs() + if PlayerClassBuffs then return PlayerClassBuffs end + + local _, playerClass = UnitClass("player") + PlayerClassBuffs = {} + + if playerClass == "PRIEST" then + PlayerClassBuffs = { + [1] = { "真言术:韧", "坚韧祷言" }, + [2] = { "神圣之灵", "精神祷言" }, + [3] = { "恢复" }, + [4] = { "虚弱灵魂", isDebuff = true }, + [5] = { "防恐结界" } + } + elseif playerClass == "DRUID" then + PlayerClassBuffs = { + [1] = { "野性印记", "野性赐福" }, + [2] = { "荆棘术" }, + [3] = { "回春术" }, + [4] = { "愈合" }, + } + elseif playerClass == "PALADIN" then + PlayerClassBuffs = { + [1] = { "王者祝福", "强效王者祝福" }, + [2] = { "拯救祝福", "强效拯救祝福" }, + [3] = { "智慧祝福", "强效智慧祝福" }, + [4] = { "力量祝福", "强效力量祝福" }, + [5] = { "庇护祝福", "强效庇护祝福" }, + [6] = { "光明祝福", "强效光明祝福" } + } + elseif playerClass == "MAGE" then + PlayerClassBuffs = { + [1] = { "奥术智慧", "奥术光辉" }, + [2] = { "魔法抑制" }, + [3] = { "魔法增效" } + } + end + + return PlayerClassBuffs +end + +function SFrames.Raid:UpdateAuras(unit) + if not self._framesBuilt then return end + local frameData = nil + for i=1, 40 do + if self.frames[i].unit == unit then + frameData = self.frames[i] + break + end + end + if not frameData then return end + + local f = frameData.frame + local buffsNeeded = self:GetClassBuffs() + + local foundIndicators = { [1] = false, [2] = false, [3] = false, [4] = false } + + -- Hide all first + for i = 1, 4 do + f.indicators[i]:Hide() + f.indicators[i].index = nil + end + + if not buffsNeeded or not UnitIsConnected(unit) or UnitIsDeadOrGhost(unit) then + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + return + end + + local function MatchesList(auraName, list) + for _, name in ipairs(list) do + if string.find(auraName, name) then + return true + end + end + return false + end + + -- Check Buffs + for i = 1, 32 do + local texture, applications = UnitBuff(unit, i) + if not texture then break end + + SFrames.Tooltip:SetOwner(UIParent, "ANCHOR_NONE") + SFrames.Tooltip:SetUnitBuff(unit, i) + local buffName = SFramesScanTooltipTextLeft1:GetText() + + if buffName then + for pos, listData in pairs(buffsNeeded) do + if pos <= 4 and not listData.isDebuff and not foundIndicators[pos] then + if MatchesList(buffName, listData) then + f.indicators[pos].icon:SetTexture(texture) + f.indicators[pos].index = i + f.indicators[pos].isDebuff = false + f.indicators[pos]:Show() + foundIndicators[pos] = true + end + end + end + end + end + + local hasDebuff = false + local debuffColor = {r=_A.slotBg[1], g=_A.slotBg[2], b=_A.slotBg[3]} + + -- Check Debuffs + for i = 1, 16 do + local texture, applications, dispelType = UnitDebuff(unit, i) + if not texture then break end + + if dispelType then + hasDebuff = true + if dispelType == "Magic" then debuffColor = {r=0.2, g=0.6, b=1} + elseif dispelType == "Curse" then debuffColor = {r=0.6, g=0, b=1} + elseif dispelType == "Disease" then debuffColor = {r=0.6, g=0.4, b=0} + elseif dispelType == "Poison" then debuffColor = {r=0, g=0.6, b=0} + end + end + + SFrames.Tooltip:SetOwner(UIParent, "ANCHOR_NONE") + SFrames.Tooltip:SetUnitDebuff(unit, i) + local debuffName = SFramesScanTooltipTextLeft1:GetText() + + if debuffName then + for pos, listData in pairs(buffsNeeded) do + if pos <= 4 and listData.isDebuff and not foundIndicators[pos] then + if MatchesList(debuffName, listData) then + f.indicators[pos].icon:SetTexture(texture) + f.indicators[pos].index = i + f.indicators[pos].isDebuff = true + f.indicators[pos]:Show() + foundIndicators[pos] = true + end + end + end + end + end + + if hasDebuff then + f.health.bg:SetVertexColor(debuffColor.r, debuffColor.g, debuffColor.b, 1) + else + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + end +end + diff --git a/Units/TalentTree.lua b/Units/TalentTree.lua new file mode 100644 index 0000000..7217f27 --- /dev/null +++ b/Units/TalentTree.lua @@ -0,0 +1,1065 @@ +SFrames.TalentTree = {} + +local ICON_SIZE = 36 +local ICON_SPACING_X = 14 +local ICON_SPACING_Y = 14 +local TAB_WIDTH = 220 +local FRAME_WIDTH = (TAB_WIDTH * 3) + 40 +local FRAME_HEIGHT = 520 + +-------------------------------------------------------------------------------- +-- Theme: Pink Cat-Paw +-------------------------------------------------------------------------------- +local T = SFrames.Theme:Extend() +local function GetHex() + return (SFrames.Theme and SFrames.Theme:GetAccentHex()) or "ffffb3d9" +end + +-------------------------------------------------------------------------------- +-- Class definitions +-------------------------------------------------------------------------------- +local CLASS_LIST = { + { key = "WARRIOR", name = "战士", color = { 0.78, 0.61, 0.43 } }, + { key = "PALADIN", name = "圣骑士", color = { 0.96, 0.55, 0.73 } }, + { key = "HUNTER", name = "猎人", color = { 0.67, 0.83, 0.45 } }, + { key = "ROGUE", name = "盗贼", color = { 1.00, 0.96, 0.41 } }, + { key = "PRIEST", name = "牧师", color = { 1.00, 1.00, 1.00 } }, + { key = "SHAMAN", name = "萨满", color = { 0.00, 0.44, 0.87 } }, + { key = "MAGE", name = "法师", color = { 0.41, 0.80, 0.94 } }, + { key = "WARLOCK", name = "术士", color = { 0.58, 0.51, 0.79 } }, + { key = "DRUID", name = "德鲁伊", color = { 1.00, 0.49, 0.04 } }, +} + +-------------------------------------------------------------------------------- +-- Helpers +-------------------------------------------------------------------------------- +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or T.panelBg + local bd = borderColor or T.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function SetPixelBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + tile = false, tileSize = 0, edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 } + }) + if bgColor then frame:SetBackdropColor(bgColor[1], bgColor[2], bgColor[3], bgColor[4] or 1) end + if borderColor then frame:SetBackdropBorderColor(borderColor[1], borderColor[2], borderColor[3], borderColor[4] or 1) end +end + +local function CreateShadow(parent, size) + local s = CreateFrame("Frame", nil, parent) + local sz = size or 4 + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -sz, sz) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", sz, -sz) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.55) + s:SetBackdropBorderColor(0, 0, 0, 0.4) + return s +end + +local function MakeFS(parent, size, justifyH, color) + local fs = parent:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), size or 11, "OUTLINE") + fs:SetJustifyH(justifyH or "LEFT") + local c = color or T.valueText + fs:SetTextColor(c[1], c[2], c[3]) + return fs +end + +local function StyleButton(btn, label) + SetRoundBackdrop(btn, T.btnBg, T.btnBorder) + + local fs = MakeFS(btn, 12, "CENTER", T.btnText) + fs:SetPoint("CENTER", btn, "CENTER", 0, 0) + if label then fs:SetText(label) end + btn.nanamiLabel = fs + + btn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + if this.nanamiLabel then + this.nanamiLabel:SetTextColor(T.btnActiveText[1], T.btnActiveText[2], T.btnActiveText[3]) + end + if this.nanamiTooltip then + GameTooltip:SetOwner(this, "ANCHOR_TOP") + GameTooltip:AddLine(this.nanamiTooltip[1], 1, 1, 1) + if this.nanamiTooltip[2] then + GameTooltip:AddLine(this.nanamiTooltip[2], 0.7, 0.7, 0.7) + end + GameTooltip:Show() + end + end) + + btn:SetScript("OnLeave", function() + this:SetBackdropColor(T.btnBg[1], T.btnBg[2], T.btnBg[3], T.btnBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + if this.nanamiLabel then + this.nanamiLabel:SetTextColor(T.btnText[1], T.btnText[2], T.btnText[3]) + end + GameTooltip:Hide() + end) + + btn:SetScript("OnMouseDown", function() + this:SetBackdropColor(T.btnDownBg[1], T.btnDownBg[2], T.btnDownBg[3], T.btnDownBg[4]) + end) + + btn:SetScript("OnMouseUp", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + end) + + return fs +end + +-------------------------------------------------------------------------------- +-- Talent data cache (stores talent trees per class in SFramesGlobalDB) +-------------------------------------------------------------------------------- +local function GetCache() + if not SFramesGlobalDB then SFramesGlobalDB = {} end + if not SFramesGlobalDB.talentCache then SFramesGlobalDB.talentCache = {} end + return SFramesGlobalDB.talentCache +end + +local function CacheCurrentClassData() + local _, classEn = UnitClass("player") + if not classEn then return end + local numTabs = GetNumTalentTabs() + if numTabs == 0 then return end + + local cache = GetCache() + local classData = {} + + for t = 1, numTabs do + local tabName, tabIcon, pointsSpent, background = GetTalentTabInfo(t) + local treeData = { name = tabName, icon = tabIcon, background = background or "", talents = {}, numTalents = 0 } + local numTalents = GetNumTalents(t) + treeData.numTalents = numTalents + + for i = 1, numTalents do + local tName, tIcon, tier, column, rank, maxRank = GetTalentInfo(t, i) + local prereqTier, prereqCol = GetTalentPrereqs(t, i) + + local descLines = {} + local scanTip = _G["NanamiTalentScanTip"] + if not scanTip then + scanTip = CreateFrame("GameTooltip", "NanamiTalentScanTip", UIParent, "GameTooltipTemplate") + scanTip:SetOwner(UIParent, "ANCHOR_NONE") + end + scanTip:ClearLines() + scanTip:SetTalent(t, i) + local numLines = scanTip:NumLines() + for li = 2, numLines do + local lineObj = _G["NanamiTalentScanTipTextLeft" .. li] + if lineObj then + local txt = lineObj:GetText() + if txt and txt ~= "" then + table.insert(descLines, txt) + end + end + end + + treeData.talents[i] = { + name = tName or "", + icon = tIcon or "", + tier = tier or 1, + column = column or 1, + maxRank = maxRank or 1, + prereqTier = prereqTier, + prereqColumn = prereqCol, + desc = descLines, + } + end + classData[t] = treeData + end + classData.numTabs = numTabs + cache[classEn] = classData +end + +-------------------------------------------------------------------------------- +-- Data access wrappers (API for own class, cache for others) +-------------------------------------------------------------------------------- +local TT = SFrames.TalentTree + +local function IsViewingOwnClass(self) + return not self.viewingClass or self.viewingClass == self.playerClass +end + +local function TT_GetNumTabs(self) + if IsViewingOwnClass(self) then return GetNumTalentTabs() end + local cache = GetCache() + local cd = cache[self.viewingClass] + return cd and cd.numTabs or 0 +end + +local function TT_GetTabInfo(self, tab) + if IsViewingOwnClass(self) then return GetTalentTabInfo(tab) end + local cache = GetCache() + local cd = cache[self.viewingClass] + if cd and cd[tab] then + return cd[tab].name, cd[tab].icon, 0, cd[tab].background + end + return "", "", 0, "" +end + +local function TT_GetNumTalents(self, tab) + if IsViewingOwnClass(self) then return GetNumTalents(tab) end + local cache = GetCache() + local cd = cache[self.viewingClass] + if cd and cd[tab] then return cd[tab].numTalents or 0 end + return 0 +end + +local function TT_GetTalentInfo(self, tab, index) + if IsViewingOwnClass(self) then return GetTalentInfo(tab, index) end + local cache = GetCache() + local cd = cache[self.viewingClass] + if cd and cd[tab] and cd[tab].talents[index] then + local t = cd[tab].talents[index] + return t.name, t.icon, t.tier, t.column, 0, t.maxRank, nil, true + end + return nil +end + +local function TT_GetTalentPrereqs(self, tab, index) + if IsViewingOwnClass(self) then return GetTalentPrereqs(tab, index) end + local cache = GetCache() + local cd = cache[self.viewingClass] + if cd and cd[tab] and cd[tab].talents[index] then + local t = cd[tab].talents[index] + return t.prereqTier, t.prereqColumn + end + return nil, nil +end + +-------------------------------------------------------------------------------- +-- Initialize +-------------------------------------------------------------------------------- +function SFrames.TalentTree:Initialize() + local _, classEn = UnitClass("player") + self.playerClass = classEn + + self:CreateMainFrame() + self:HookVanillaUI() + + SFrames:RegisterEvent("CHARACTER_POINTS_CHANGED", function() + if self.frame and self.frame:IsShown() then self:Update() end + end) + SFrames:RegisterEvent("SPELLS_CHANGED", function() + if self.frame and self.frame:IsShown() then self:Update() end + end) +end + +-------------------------------------------------------------------------------- +-- Main Frame +-------------------------------------------------------------------------------- +function SFrames.TalentTree:CreateMainFrame() + local f = CreateFrame("Frame", "SFramesTalentFrame", UIParent) + f:SetWidth(FRAME_WIDTH) + f:SetHeight(FRAME_HEIGHT) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + SetRoundBackdrop(f, T.panelBg, T.panelBorder) + CreateShadow(f, 5) + f:EnableMouse(true) + f:SetMovable(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + f:SetFrameStrata("HIGH") + f:Hide() + + local titleIcoSize = 14 + local titleGap = 4 + f.title = MakeFS(f, 14, "CENTER", T.titleColor) + f.title:SetPoint("TOP", f, "TOP", (titleIcoSize + titleGap) / 2, -10) + f.title:SetText("|c" .. GetHex() .. "Nanami|r 天赋系统") + local titleIco = SFrames:CreateIcon(f, "talent", titleIcoSize) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetVertexColor(T.titleColor[1], T.titleColor[2], T.titleColor[3]) + titleIco:SetPoint("RIGHT", f.title, "LEFT", -titleGap, 0) + + -- Close button + local closeBtn = CreateFrame("Button", nil, f) + closeBtn:SetWidth(18) + closeBtn:SetHeight(18) + closeBtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -8, -8) + closeBtn:SetFrameLevel(f:GetFrameLevel() + 3) + SetRoundBackdrop(closeBtn, T.buttonDownBg, T.btnBorder) + local closeTxt = MakeFS(closeBtn, 10, "CENTER", T.title) + closeTxt:SetPoint("CENTER", closeBtn, "CENTER", 0, 0) + closeTxt:SetText("x") + closeBtn:SetScript("OnClick", function() f:Hide() end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(T.btnHoverBg[1], T.btnHoverBg[2], T.btnHoverBg[3], T.btnHoverBg[4]) + this:SetBackdropBorderColor(T.btnHoverBd[1], T.btnHoverBd[2], T.btnHoverBd[3], T.btnHoverBd[4]) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(T.buttonDownBg[1], T.buttonDownBg[2], T.buttonDownBg[3], T.buttonDownBg[4]) + this:SetBackdropBorderColor(T.btnBorder[1], T.btnBorder[2], T.btnBorder[3], T.btnBorder[4]) + end) + f.close = closeBtn + + -- Class selector bar (shown in sim mode) + local classBar = CreateFrame("Frame", nil, f) + classBar:SetHeight(20) + classBar:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -28) + classBar:SetPoint("TOPRIGHT", f, "TOPRIGHT", -10, -28) + classBar:SetFrameLevel(f:GetFrameLevel() + 2) + classBar:Hide() + f.classBar = classBar + + local numClasses = table.getn(CLASS_LIST) + local gap = 2 + local barW = FRAME_WIDTH - 20 + local cbW = math.floor((barW - (numClasses - 1) * gap) / numClasses) + f.classBtns = {} + + for ci, cinfo in ipairs(CLASS_LIST) do + local cb = CreateFrame("Button", nil, classBar) + cb:SetWidth(cbW) + cb:SetHeight(18) + cb:SetPoint("TOPLEFT", classBar, "TOPLEFT", (ci - 1) * (cbW + gap), 0) + SetPixelBackdrop(cb, T.slotBg, T.slotBorder) + + local cIcon = SFrames:CreateClassIcon(cb, 14) + cIcon.overlay:SetPoint("LEFT", cb, "LEFT", 3, 0) + SFrames:SetClassIcon(cIcon, cinfo.key) + cb.classIconTex = cIcon + + local cbt = MakeFS(cb, 9, "CENTER", cinfo.color) + cbt:SetPoint("LEFT", cIcon.overlay, "RIGHT", 1, 0) + cbt:SetPoint("RIGHT", cb, "RIGHT", -2, 0) + cbt:SetText(cinfo.name) + cb.label = cbt + cb.classKey = cinfo.key + cb.classColor = cinfo.color + cb:SetScript("OnClick", function() + SFrames.TalentTree:SwitchViewClass(this.classKey) + end) + cb:SetScript("OnEnter", function() + this:SetBackdropColor(T.slotHover[1], T.slotHover[2], T.slotHover[3], T.slotHover[4]) + local cache = GetCache() + if not cache[this.classKey] and this.classKey ~= SFrames.TalentTree.playerClass then + GameTooltip:SetOwner(this, "ANCHOR_BOTTOM") + GameTooltip:AddLine("需先用该职业角色打开天赋面板以缓存数据", 1, 0.5, 0.5) + GameTooltip:Show() + end + end) + cb:SetScript("OnLeave", function() + this:SetBackdropColor(T.slotBg[1], T.slotBg[2], T.slotBg[3], T.slotBg[4]) + GameTooltip:Hide() + end) + f.classBtns[ci] = cb + end + + -- Overlay for text on top of children + f.overlay = CreateFrame("Frame", nil, f) + f.overlay:SetAllPoints(f) + f.overlay:SetFrameLevel(f:GetFrameLevel() + 10) + + f.pointsText = MakeFS(f.overlay, 13, "LEFT", T.titleColor) + f.pointsText:SetPoint("BOTTOMLEFT", f.overlay, "BOTTOMLEFT", 14, 25) + + f.simLabel = MakeFS(f.overlay, 11, "LEFT", T.titleColor) + f.simLabel:SetPoint("LEFT", f.pointsText, "LEFT", 0, -18) + f.simLabel:SetText("") + + -- Bottom buttons + f.btnApply = CreateFrame("Button", nil, f) + f.btnApply:SetWidth(100) + f.btnApply:SetHeight(26) + f.btnApply:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -12, 12) + StyleButton(f.btnApply, "应用天赋") + f.btnApply.nanamiTooltip = { "应用天赋", "将所有模拟点数提交至服务器。" } + f.btnApply:SetScript("OnClick", function() SFrames.TalentTree:ApplyVirtualPoints() end) + + f.btnReset = CreateFrame("Button", nil, f) + f.btnReset:SetWidth(100) + f.btnReset:SetHeight(26) + f.btnReset:SetPoint("RIGHT", f.btnApply, "LEFT", -8, 0) + StyleButton(f.btnReset, "重置预览") + f.btnReset:SetScript("OnClick", function() SFrames.TalentTree:ResetVirtualPoints() end) + + f.btnSimMode = CreateFrame("Button", nil, f) + f.btnSimMode:SetWidth(110) + f.btnSimMode:SetHeight(26) + f.btnSimMode:SetPoint("RIGHT", f.btnReset, "LEFT", -8, 0) + StyleButton(f.btnSimMode, "|cff888888模拟加点: 关|r") + f.simModeText = f.btnSimMode.nanamiLabel + f.btnSimMode.nanamiTooltip = { "模拟加点模式", "开启后可用左键虚拟加点、右键取消,\n确认后点「应用天赋」才会实际扣分。\n可切换职业模拟其他职业加点。" } + f.btnSimMode:SetScript("OnClick", function() + SFrames.TalentTree.simMode = not SFrames.TalentTree.simMode + SFrames.TalentTree:UpdateSimModeLabel() + end) + + self.frame = f + self.tabs = {} + self.virtualPoints = {} + self.simMode = false + self.viewingClass = nil + + tinsert(UISpecialFrames, "SFramesTalentFrame") +end + +-------------------------------------------------------------------------------- +-- Class bar update +-------------------------------------------------------------------------------- +function SFrames.TalentTree:UpdateClassBar() + if not self.frame or not self.frame.classBtns then return end + local viewing = self.viewingClass or self.playerClass + local cache = GetCache() + + for ci, cinfo in ipairs(CLASS_LIST) do + local cb = self.frame.classBtns[ci] + if not cb then break end + + local hasData = (cinfo.key == self.playerClass) or (cache[cinfo.key] ~= nil) + + if cinfo.key == viewing then + SetPixelBackdrop(cb, T.tabActiveBg, cinfo.color) + cb.label:SetTextColor(cinfo.color[1], cinfo.color[2], cinfo.color[3]) + elseif hasData then + SetPixelBackdrop(cb, T.slotBg, T.slotBorder) + cb.label:SetTextColor(cinfo.color[1] * 0.8, cinfo.color[2] * 0.8, cinfo.color[3] * 0.8) + else + SetPixelBackdrop(cb, T.emptySlotBg, T.emptySlotBd) + cb.label:SetTextColor(T.passive[1], T.passive[2], T.passive[3]) + end + end +end + +function SFrames.TalentTree:UpdateSimModeLabel() + if self.simMode then + local viewing = self.viewingClass or self.playerClass + local viewName = viewing or "?" + for _, c in ipairs(CLASS_LIST) do + if c.key == viewing then viewName = c.name; break end + end + self.frame.simModeText:SetText("|c" .. GetHex() .. "模拟: " .. viewName .. "|r") + self.frame.simLabel:SetText("|c" .. GetHex() .. "[模拟] 总点数: 51 左键: 加点 右键: 撤销|r") + self.frame.classBar:Show() + self:UpdateClassBar() + if not IsViewingOwnClass(self) then + self.frame.btnApply:Hide() + else + self.frame.btnApply:Show() + end + else + self.frame.simModeText:SetText("|cff888888模拟加点: 关|r") + self.frame.simLabel:SetText("") + self.frame.classBar:Hide() + self.frame.btnApply:Show() + if self.viewingClass and self.viewingClass ~= self.playerClass then + self.viewingClass = self.playerClass + self.virtualPoints = {} + self:DestroyTrees() + self:BuildTrees() + self:Update() + return + end + end + self:ResetVirtualPoints() +end + +-------------------------------------------------------------------------------- +-- Switch class +-------------------------------------------------------------------------------- +function SFrames.TalentTree:SwitchViewClass(classKey) + if not self.simMode then return end + if classKey == (self.viewingClass or self.playerClass) then return end + + if classKey ~= self.playerClass then + local cache = GetCache() + if not cache[classKey] then + UIErrorsFrame:AddMessage("该职业天赋数据尚未缓存,请先用该职业角色打开天赋面板", 1, 0.5, 0.5, 1) + return + end + end + + self.viewingClass = classKey + self.virtualPoints = {} + self:DestroyTrees() + self:BuildTrees() + self:UpdateSimModeLabel() + self:Update() +end + +-------------------------------------------------------------------------------- +-- Destroy / Rebuild trees +-------------------------------------------------------------------------------- +function SFrames.TalentTree:DestroyTrees() + if self.tabs then + for _, tabData in pairs(self.tabs) do + if type(tabData) == "table" and tabData.frame then + tabData.frame:Hide() + tabData.frame:ClearAllPoints() + tabData.frame:SetParent(nil) + end + end + end + self.tabs = {} + self.treesBuilt = false +end + +-------------------------------------------------------------------------------- +-- Build trees (from API or cache) +-------------------------------------------------------------------------------- +function SFrames.TalentTree:BuildTrees() + if self.treesBuilt then return end + self.treesBuilt = true + + if IsViewingOwnClass(self) then + CacheCurrentClassData() + end + + local treeTop = -38 + if self.simMode then treeTop = -52 end + + local numTabs = TT_GetNumTabs(self) + for t = 1, numTabs do + local name, icon, pointsSpent, background = TT_GetTabInfo(self, t) + + local tabFrame = CreateFrame("Frame", nil, self.frame) + tabFrame:SetWidth(TAB_WIDTH) + tabFrame:SetHeight(FRAME_HEIGHT - 90) + local offsetX = 10 + ((t - 1) * (TAB_WIDTH + 5)) + tabFrame:SetPoint("TOPLEFT", self.frame, "TOPLEFT", offsetX, treeTop) + + SetRoundBackdrop(tabFrame, T.tabBg, T.tabBorder) + + if background and background ~= "" then + local bg = tabFrame:CreateTexture(nil, "BACKGROUND") + bg:SetTexture("Interface\\TalentFrame\\" .. background) + bg:SetPoint("TOPLEFT", tabFrame, "TOPLEFT", 3, -3) + bg:SetPoint("BOTTOMRIGHT", tabFrame, "BOTTOMRIGHT", -3, 3) + bg:SetAlpha(0.35) + end + + local tTitle = MakeFS(tabFrame, 14, "CENTER", T.titleColor) + tTitle:SetPoint("TOP", tabFrame, "TOP", 0, -10) + tTitle:SetText("|c" .. GetHex() .. (name or "") .. "|r") + + local tPoints = MakeFS(tabFrame, 12, "CENTER", T.dimText) + tPoints:SetPoint("TOP", tTitle, "BOTTOM", 0, -2) + tabFrame.pointsText = tPoints + + self.tabs[t] = { frame = tabFrame, talents = {}, grid = {} } + + local GRID_PAD_X = math.floor((TAB_WIDTH - (4 * ICON_SIZE + 3 * ICON_SPACING_X)) / 2) + + local numTalents = TT_GetNumTalents(self, t) + for i = 1, numTalents do + local tName, tIcon, tier, column, rank, maxRank = TT_GetTalentInfo(self, t, i) + if not tName then break end + + if not self.tabs[t].grid[tier] then self.tabs[t].grid[tier] = {} end + + local btn = CreateFrame("Button", "SFramesTalent_" .. (self.viewingClass or "own") .. "_" .. t .. "_" .. i, tabFrame) + btn:SetWidth(ICON_SIZE) + btn:SetHeight(ICON_SIZE) + + local x = (column - 1) * (ICON_SIZE + ICON_SPACING_X) + GRID_PAD_X + local y = -(tier - 1) * (ICON_SIZE + ICON_SPACING_Y) - 44 + btn:SetPoint("TOPLEFT", tabFrame, "TOPLEFT", x, y) + + btn.icon = btn:CreateTexture(nil, "ARTWORK") + btn.icon:SetTexture(tIcon) + btn.icon:SetAllPoints() + + btn.borderTex = btn:CreateTexture(nil, "OVERLAY") + btn.borderTex:SetTexture("Interface\\Buttons\\UI-Quickslot2") + btn.borderTex:SetWidth(ICON_SIZE * 1.5) + btn.borderTex:SetHeight(ICON_SIZE * 1.5) + btn.borderTex:SetPoint("CENTER", btn, "CENTER", 0, 0) + + local rankFrame = CreateFrame("Frame", nil, btn) + rankFrame:SetAllPoints(btn) + rankFrame:SetFrameLevel(btn:GetFrameLevel() + 2) + + btn.rankBg = rankFrame:CreateTexture(nil, "BACKGROUND") + btn.rankBg:SetTexture(0, 0, 0, 0.75) + btn.rankBg:SetWidth(20) + btn.rankBg:SetHeight(12) + btn.rankBg:SetPoint("BOTTOMRIGHT", rankFrame, "BOTTOMRIGHT", -1, 1) + btn.rankBg:Hide() + + btn.rankText = MakeFS(rankFrame, 10, "RIGHT") + btn.rankText:SetPoint("BOTTOMRIGHT", rankFrame, "BOTTOMRIGHT", -2, 2) + btn.rankText:SetShadowColor(0, 0, 0, 1) + btn.rankText:SetShadowOffset(1, -1) + btn.rankText:SetText("") + + btn.tab = t + btn.index = i + btn.tier = tier + btn.maxRank = maxRank + btn.talentName = tName + + local cachedDesc = nil + if not IsViewingOwnClass(self) then + local cd = GetCache()[self.viewingClass] + if cd and cd[t] and cd[t].talents[i] then + cachedDesc = cd[t].talents[i].desc + end + end + btn.cachedDesc = cachedDesc + + if IsViewingOwnClass(self) then + btn:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetTalent(this.tab, this.index) + GameTooltip:Show() + end) + else + btn:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:AddLine(this.talentName or "?", 1, 1, 1) + local vr = SFrames.TalentTree:GetVirtualRank(this.tab, this.index) + GameTooltip:AddLine("等级 " .. vr .. "/" .. (this.maxRank or "?"), 0.7, 0.7, 0.7) + if this.cachedDesc then + GameTooltip:AddLine(" ") + for _, line in ipairs(this.cachedDesc) do + GameTooltip:AddLine(line, 1, 0.82, 0, 1) + end + end + GameTooltip:Show() + end) + end + btn:SetScript("OnLeave", function() GameTooltip:Hide() end) + + btn:RegisterForClicks("LeftButtonUp", "RightButtonUp") + btn:SetScript("OnClick", function() + SFrames.TalentTree:OnTalentClick(this, arg1) + end) + + self.tabs[t].talents[i] = btn + self.tabs[t].grid[tier][column] = btn + end + + -- Dependency lines + for i = 1, numTalents do + local prereqTier, prereqColumn = TT_GetTalentPrereqs(self, t, i) + if prereqTier and prereqColumn then + local btn = self.tabs[t].talents[i] + local pBtn = self.tabs[t].grid[prereqTier] and self.tabs[t].grid[prereqTier][prereqColumn] + if pBtn then + btn.prereqIndex = pBtn.index + btn.prereqLines = {} + + local _, _, tier, column = TT_GetTalentInfo(self, t, i) + local pX = (prereqColumn - 1) * (ICON_SIZE + ICON_SPACING_X) + GRID_PAD_X + local pY = -(prereqTier - 1) * (ICON_SIZE + ICON_SPACING_Y) - 44 + local cX = (column - 1) * (ICON_SIZE + ICON_SPACING_X) + GRID_PAD_X + local cY = -(tier - 1) * (ICON_SIZE + ICON_SPACING_Y) - 44 + + local pCenterX = pX + (ICON_SIZE / 2) + local pCenterY = pY - (ICON_SIZE / 2) + local pBottomY = pY - ICON_SIZE + local pRightX = pX + ICON_SIZE + + local tCenterX = cX + (ICON_SIZE / 2) + local tTopY = cY + local tLeftX = cX + local tRightX = cX + ICON_SIZE + + local function CreateLine(x1, y1, x2, y2) + local line = tabFrame:CreateTexture(nil, "BACKGROUND") + line:SetTexture(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + if math.abs(x1 - x2) < 0.1 then + line:SetWidth(2) + line:SetHeight(math.abs(y1 - y2)) + line:SetPoint("TOP", tabFrame, "TOPLEFT", x1, math.max(y1, y2)) + else + line:SetHeight(2) + line:SetWidth(math.abs(x1 - x2)) + line:SetPoint("LEFT", tabFrame, "TOPLEFT", math.min(x1, x2), y1) + end + table.insert(btn.prereqLines, line) + end + + if prereqTier == tier then + if prereqColumn < column then + CreateLine(pRightX, pCenterY, tLeftX, pCenterY) + else + CreateLine(pX, pCenterY, tRightX, pCenterY) + end + elseif prereqColumn == column then + CreateLine(pCenterX, pBottomY, tCenterX, tTopY) + else + local midY = pBottomY - (ICON_SPACING_Y / 2) + 2 + CreateLine(pCenterX, pBottomY, pCenterX, midY) + CreateLine(pCenterX, midY, tCenterX, midY) + CreateLine(tCenterX, midY, tCenterX, tTopY) + end + end + end + end + end +end + +-------------------------------------------------------------------------------- +-- Hooks +-------------------------------------------------------------------------------- +function SFrames.TalentTree:HookVanillaUI() + local self = SFrames.TalentTree + + local function ShowCustomTalentFrame() + if not self.frame then return end + if not self.frame:IsShown() then + self:BuildTrees() + self.frame:Show() + self:Update() + end + end + + local function ToggleCustomTalentFrame() + if not self.frame then return end + if self.frame:IsShown() then + self.frame:Hide() + else + ShowCustomTalentFrame() + end + end + + ToggleTalentFrame = ToggleCustomTalentFrame + + if not self.hookedShowUIPanel then + self.hookedShowUIPanel = true + local orig_ShowUIPanel = ShowUIPanel + ShowUIPanel = function(frame) + if frame and frame.GetName then + local fName = frame:GetName() + if fName == "TalentFrame" or fName == "TalentMicroButtonAlert" then + ShowCustomTalentFrame() + return + end + end + if orig_ShowUIPanel then + orig_ShowUIPanel(frame) + end + end + + local orig_HideUIPanel = HideUIPanel + HideUIPanel = function(frame) + if frame and frame.GetName and frame:GetName() == "TalentFrame" then + if self.frame then self.frame:Hide() end + return + end + if orig_HideUIPanel then + orig_HideUIPanel(frame) + end + end + end + + local orig_TalentFrame_LoadUI = TalentFrame_LoadUI + if orig_TalentFrame_LoadUI then + TalentFrame_LoadUI = function() + orig_TalentFrame_LoadUI() + end + end +end + +-------------------------------------------------------------------------------- +-- Virtual point helpers +-------------------------------------------------------------------------------- +function SFrames.TalentTree:GetVirtualRank(tab, index) + if self.virtualPoints[tab] and self.virtualPoints[tab][index] then + return self.virtualPoints[tab][index] + end + if self.simMode then return 0 end + if IsViewingOwnClass(self) then + local name, icon, tier, column, rank, maxRank = GetTalentInfo(tab, index) + return rank or 0 + end + return 0 +end + +function SFrames.TalentTree:GetVirtualTreePoints(tab) + local total = 0 + local n = TT_GetNumTalents(self, tab) + for i = 1, n do + total = total + self:GetVirtualRank(tab, i) + end + return total +end + +function SFrames.TalentTree:GetRemainingUnspent() + if self.simMode then + local unspent = 51 + local numTabs = TT_GetNumTabs(self) + for tb = 1, numTabs do + unspent = unspent - self:GetVirtualTreePoints(tb) + end + return unspent + else + local unspent = UnitCharacterPoints("player") + for tb = 1, GetNumTalentTabs() do + for idx = 1, GetNumTalents(tb) do + local name, icon, tier, column, realRank = GetTalentInfo(tb, idx) + local virtRank = self:GetVirtualRank(tb, idx) + unspent = unspent - (virtRank - (realRank or 0)) + end + end + return unspent + end +end + +-------------------------------------------------------------------------------- +-- Talent click +-------------------------------------------------------------------------------- +function SFrames.TalentTree:OnTalentClick(btn, buttonType) + if not self.simMode and IsViewingOwnClass(self) then + if buttonType == "LeftButton" then + local tName, tIcon, tier, column, rank, maxRank, isExceptional, meetsPrereq = GetTalentInfo(btn.tab, btn.index) + local unspent = UnitCharacterPoints("player") + if rank < maxRank and meetsPrereq and unspent > 0 then + StaticPopupDialogs["NANAMI_CONFIRM_TALENT"] = { + text = "确定学习天赋 [" .. tName .. "] ?\n(等级 " .. rank .. " → " .. (rank+1) .. " / " .. maxRank .. ")", + button1 = "确认", + button2 = "取消", + OnAccept = function() + LearnTalent(btn.tab, btn.index) + end, + timeout = 0, + whileDead = true, + hideOnEscape = true, + } + StaticPopup_Show("NANAMI_CONFIRM_TALENT") + end + end + return + end + + if not self.simMode then return end + + local _, _, tier, _, _, maxRank = TT_GetTalentInfo(self, btn.tab, btn.index) + local virtRank = self:GetVirtualRank(btn.tab, btn.index) + maxRank = maxRank or btn.maxRank + + if not self.virtualPoints[btn.tab] then self.virtualPoints[btn.tab] = {} end + if not self.virtualPoints[btn.tab][btn.index] then + self.virtualPoints[btn.tab][btn.index] = self:GetVirtualRank(btn.tab, btn.index) + end + + if buttonType == "LeftButton" then + local unspent = self:GetRemainingUnspent() + if unspent > 0 and virtRank < maxRank then + local treePts = self:GetVirtualTreePoints(btn.tab) + local prereqMet = true + if btn.prereqIndex then + local pVirtRank = self:GetVirtualRank(btn.tab, btn.prereqIndex) + local pMaxRank = self.tabs[btn.tab].talents[btn.prereqIndex].maxRank + if pVirtRank < pMaxRank then prereqMet = false end + end + + if treePts >= (tier - 1) * 5 and prereqMet then + self.virtualPoints[btn.tab][btn.index] = virtRank + 1 + end + end + elseif buttonType == "RightButton" then + if virtRank > 0 then + local canRevert = true + local treePts = self:GetVirtualTreePoints(btn.tab) + local numT = TT_GetNumTalents(self, btn.tab) + for i = 1, numT do + local childVirtRank = self:GetVirtualRank(btn.tab, i) + if childVirtRank > 0 then + local _, _, qTier = TT_GetTalentInfo(self, btn.tab, i) + if qTier and qTier > tier and (treePts - 1) < (qTier - 1) * 5 then + canRevert = false + end + local cBtn = self.tabs[btn.tab].talents[i] + if cBtn and cBtn.prereqIndex == btn.index then + if childVirtRank > 0 and (virtRank - 1) < maxRank then + canRevert = false + end + end + end + end + if canRevert then + self.virtualPoints[btn.tab][btn.index] = virtRank - 1 + else + UIErrorsFrame:AddMessage("无法取消点数:其他已点天赋依赖于此天赋", 1, 0, 0, 1) + end + end + end + + self:Update() +end + +function SFrames.TalentTree:ResetVirtualPoints() + self.virtualPoints = {} + self:Update() +end + +function SFrames.TalentTree:ApplyVirtualPoints() + if not self.simMode then return end + if not IsViewingOwnClass(self) then + DEFAULT_CHAT_FRAME:AddMessage("|cffff0000[错误]|r 只能应用本职业的天赋。") + return + end + + local canApply = true + for tb = 1, GetNumTalentTabs() do + for idx = 1, GetNumTalents(tb) do + local name, icon, tier, column, realRank = GetTalentInfo(tb, idx) + local virtRank = self:GetVirtualRank(tb, idx) + if realRank > virtRank then + canApply = false + end + end + end + + if not canApply then + DEFAULT_CHAT_FRAME:AddMessage("|cffff0000[错误]|r 模拟的点数未包含您已学习的天赋,无法直接应用。") + return + end + + if not self.applyQueue then self.applyQueue = {} end + self.applyQueue = {} + + for tb = 1, GetNumTalentTabs() do + for idx = 1, GetNumTalents(tb) do + local name, icon, tier, column, realRank = GetTalentInfo(tb, idx) + local virtRank = self:GetVirtualRank(tb, idx) + local diff = virtRank - realRank + if diff > 0 then + for i = 1, diff do + table.insert(self.applyQueue, {tab = tb, index = idx}) + end + end + end + end + + if table.getn(self.applyQueue) > 0 then + self.frame:SetScript("OnUpdate", function() + if table.getn(SFrames.TalentTree.applyQueue) > 0 then + local t = table.remove(SFrames.TalentTree.applyQueue, 1) + LearnTalent(t.tab, t.index) + else + this:SetScript("OnUpdate", nil) + SFrames.TalentTree.simMode = false + SFrames.TalentTree:UpdateSimModeLabel() + end + end) + else + DEFAULT_CHAT_FRAME:AddMessage("|c" .. GetHex() .. "Nanami:|r 没有新的天赋点数需要应用。") + end +end + +-------------------------------------------------------------------------------- +-- Update display +-------------------------------------------------------------------------------- +function SFrames.TalentTree:Update() + if not self.frame or not self.frame:IsShown() then return end + if not self.tabs or not self.tabs[1] then return end + + local unspent = self:GetRemainingUnspent() + local realUnspent = UnitCharacterPoints("player") + local numTabs = TT_GetNumTabs(self) + + for tb = 1, numTabs do + if not self.tabs[tb] then break end + local treePts = self:GetVirtualTreePoints(tb) + self.tabs[tb].frame.pointsText:SetText("已用: |c" .. GetHex() .. treePts .. "|r") + + local numT = TT_GetNumTalents(self, tb) + for idx = 1, numT do + local btn = self.tabs[tb].talents[idx] + if btn then + local _, _, tier, column, rank, maxRank = TT_GetTalentInfo(self, tb, idx) + if not IsViewingOwnClass(self) then rank = 0 end + local virtRank = self:GetVirtualRank(tb, idx) + + if virtRank > 0 or (not self.simMode and rank and rank > 0) then + local displayRank = virtRank + if not self.simMode and displayRank == 0 and rank and rank > 0 then + displayRank = rank + end + btn.rankText:SetText(displayRank .. "/" .. maxRank) + btn.rankBg:Show() + btn.rankText:Show() + else + btn.rankText:SetText("") + btn.rankText:Hide() + btn.rankBg:Hide() + end + + local prereqMet = true + if btn.prereqIndex then + local pVirtRank = self:GetVirtualRank(tb, btn.prereqIndex) + local pMaxRank = self.tabs[tb].talents[btn.prereqIndex].maxRank + if pVirtRank < pMaxRank then + prereqMet = false + end + end + + local isLearnable = (unspent > 0 and treePts >= (tier - 1) * 5 and virtRank < maxRank and prereqMet) + + if btn.prereqLines then + for _, line in ipairs(btn.prereqLines) do + if prereqMet then + line:SetTexture(T.accent[1], T.accent[2], T.accent[3], 0.8) + else + line:SetTexture(T.sepColor[1], T.sepColor[2], T.sepColor[3], T.sepColor[4]) + end + end + end + + local isVirtual = (not self.simMode and virtRank > (rank or 0)) or (self.simMode and virtRank > 0) + + if (not self.simMode and isVirtual) or (self.simMode and isVirtual and virtRank < maxRank) then + btn.rankText:SetTextColor(T.title[1], T.title[2], T.title[3]) + btn.icon:SetVertexColor(T.accentLight[1], T.accentLight[2], T.accentLight[3]) + btn.borderTex:SetVertexColor(T.accent[1], T.accent[2], T.accent[3]) + elseif virtRank >= maxRank then + btn.rankText:SetTextColor(T.title[1], T.title[2], T.title[3]) + btn.icon:SetVertexColor(1, 1, 1) + btn.borderTex:SetVertexColor(T.accent[1], T.accent[2], T.accent[3]) + elseif virtRank > 0 then + btn.rankText:SetTextColor(0, 1, 0) + btn.icon:SetVertexColor(1, 1, 1) + btn.borderTex:SetVertexColor(0, 0.7, 0) + elseif isLearnable then + btn.rankText:SetTextColor(T.dimText[1], T.dimText[2], T.dimText[3]) + btn.icon:SetVertexColor(1, 1, 1) + btn.borderTex:SetVertexColor(T.passive[1], T.passive[2], T.passive[3]) + else + btn.rankText:SetTextColor(T.passive[1], T.passive[2], T.passive[3]) + btn.icon:SetVertexColor(T.passive[1], T.passive[2], T.passive[3]) + btn.borderTex:SetVertexColor(T.passive[1], T.passive[2], T.passive[3]) + end + end + end + end + + if self.simMode then + if IsViewingOwnClass(self) then + self.frame.pointsText:SetText("剩余天赋点: |c" .. GetHex() .. unspent .. " |cff888888(总 " .. realUnspent .. ")|r") + else + self.frame.pointsText:SetText("剩余天赋点: |c" .. GetHex() .. unspent .. "|r") + end + else + self.frame.pointsText:SetText("剩余天赋点: |c" .. GetHex() .. realUnspent .. "|r") + end +end diff --git a/Units/Target.lua b/Units/Target.lua new file mode 100644 index 0000000..966ba88 --- /dev/null +++ b/Units/Target.lua @@ -0,0 +1,1046 @@ +SFrames.Target = {} +local _A = SFrames.ActiveTheme + +local function Clamp(value, minValue, maxValue) + if value < minValue then + return minValue + end + if value > maxValue then + return maxValue + end + return value +end + +function SFrames.Target:GetDistance(unit) + if not UnitExists(unit) then return nil end + if UnitIsUnit(unit, "player") then return "0 码" end + -- Using multiple "scale rulers" (rungs) for better precision in 1.12 + if CheckInteractDistance(unit, 2) then return "< 8 码" -- Trade + elseif CheckInteractDistance(unit, 3) then return "8-10 码" -- Duel + elseif CheckInteractDistance(unit, 4) then return "10-28 码" -- Follow + elseif UnitIsVisible(unit) then return "28-100 码" + else return "> 100 码" end +end + +function SFrames.Target:GetConfig() + local db = SFramesDB or {} + + local width = tonumber(db.targetFrameWidth) or SFrames.Config.width or 220 + width = Clamp(math.floor(width + 0.5), 170, 420) + + local portraitWidth = tonumber(db.targetPortraitWidth) or SFrames.Config.portraitWidth or 50 + portraitWidth = Clamp(math.floor(portraitWidth + 0.5), 32, 95) + if portraitWidth > width - 90 then + portraitWidth = width - 90 + end + + local healthHeight = tonumber(db.targetHealthHeight) or 38 + healthHeight = Clamp(math.floor(healthHeight + 0.5), 14, 80) + + local powerHeight = tonumber(db.targetPowerHeight) or 9 + powerHeight = Clamp(math.floor(powerHeight + 0.5), 6, 40) + + local height = healthHeight + powerHeight + 4 + height = Clamp(height, 30, 140) + + local nameFont = tonumber(db.targetNameFontSize) or 10 + nameFont = Clamp(math.floor(nameFont + 0.5), 8, 18) + + local valueFont = tonumber(db.targetValueFontSize) or 10 + valueFont = Clamp(math.floor(valueFont + 0.5), 8, 18) + + local frameScale = tonumber(db.targetFrameScale) or 1 + frameScale = Clamp(frameScale, 0.7, 1.8) + + return { + width = width, + height = height, + portraitWidth = portraitWidth, + healthHeight = healthHeight, + powerHeight = powerHeight, + nameFont = nameFont, + valueFont = valueFont, + scale = frameScale, + } +end + +function SFrames.Target:ApplyConfig() + if not self.frame then return end + + local cfg = self:GetConfig() + local f = self.frame + + f:SetScale(cfg.scale) + f:SetWidth(cfg.width) + f:SetHeight(cfg.height) + + if f.portrait then + f.portrait:SetWidth(cfg.portraitWidth) + f.portrait:SetHeight(cfg.height - 2) + end + + if f.portraitBG then + f.portraitBG:ClearAllPoints() + f.portraitBG:SetPoint("TOPLEFT", f.portrait, "TOPLEFT", -1, 0) + f.portraitBG:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0) + end + + if f.health then + f.health:ClearAllPoints() + f.health:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1) + f.health:SetPoint("TOPRIGHT", f.portrait, "TOPLEFT", -1, 0) + f.health:SetHeight(cfg.healthHeight) + end + + if f.healthBGFrame then + f.healthBGFrame:ClearAllPoints() + f.healthBGFrame:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + f.healthBGFrame:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + end + + if f.power then + f.power:ClearAllPoints() + f.power:SetPoint("TOPLEFT", f.health, "BOTTOMLEFT", 0, -1) + f.power:SetPoint("TOPRIGHT", f.health, "BOTTOMRIGHT", 0, 0) + f.power:SetHeight(cfg.powerHeight) + end + + if f.powerBGFrame then + f.powerBGFrame:ClearAllPoints() + f.powerBGFrame:SetPoint("TOPLEFT", f.power, "TOPLEFT", -1, 1) + f.powerBGFrame:SetPoint("BOTTOMRIGHT", f.power, "BOTTOMRIGHT", 1, -1) + end + + local outline = (SFrames and SFrames.Media and SFrames.Media.fontOutline) or "OUTLINE" + local fontPath = SFrames:GetFont() + + if f.nameText then + f.nameText:SetFont(fontPath, cfg.nameFont, outline) + end + if f.healthText then + f.healthText:SetFont(fontPath, cfg.valueFont, outline) + end + if f.powerText then + f.powerText:SetFont(fontPath, cfg.valueFont, outline) + end + + if self.distanceFrame then + local dScale = tonumber(SFramesDB and SFramesDB.targetDistanceScale) or 1 + self.distanceFrame:SetScale(Clamp(dScale, 0.7, 1.8)) + end + + if UnitExists("target") then + self:UpdateAll() + end +end + +function SFrames.Target:InitializeDistanceFrame() + local f = CreateFrame("Button", "SFramesTargetDistanceFrame", UIParent) + f:SetWidth(80) + f:SetHeight(24) + f:SetFrameStrata("HIGH") + local frameScale = (SFramesDB and type(SFramesDB.targetDistanceScale) == "number") and SFramesDB.targetDistanceScale or 1 + f:SetScale(frameScale) + + if SFramesDB and SFramesDB.Positions and SFramesDB.Positions["TargetDistanceFrame"] then + local pos = SFramesDB.Positions["TargetDistanceFrame"] + f:SetPoint(pos.point, UIParent, pos.relativePoint, pos.xOfs, pos.yOfs) + else + -- Default position: Center of screen for visibility if first time + f:SetPoint("CENTER", UIParent, "CENTER", 0, 100) + end + + f:SetMovable(true) + f:EnableMouse(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() if IsAltKeyDown() or SFrames.isUnlocked then this:StartMoving() end end) + f:SetScript("OnDragStop", function() + this:StopMovingOrSizing() + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + local point, relativeTo, relativePoint, xOfs, yOfs = this:GetPoint() + SFramesDB.Positions["TargetDistanceFrame"] = { point = point, relativePoint = relativePoint, xOfs = xOfs, yOfs = yOfs } + end) + + SFrames:CreateUnitBackdrop(f) + f:SetBackdrop(nil) -- Remove border and background for natural look + + f.text = SFrames:CreateFontString(f, 14, "CENTER") + f.text:SetPoint("CENTER", f, "CENTER", 0, 0) + f.text:SetTextColor(1, 0.8, 0.2) + f.text:SetShadowColor(0, 0, 0, 1) + f.text:SetShadowOffset(1, -1) + + SFrames.Target.distanceFrame = f + f:Hide() + + -- Distance Updater on the frame itself + f.timer = 0 + f:SetScript("OnUpdate", function() + if SFramesDB and SFramesDB.targetDistanceEnabled == false then + if this:IsShown() then this:Hide() end + return + end + if not UnitExists("target") then + if this:IsShown() then this:Hide() end + return + end + this.timer = this.timer + (arg1 or 0) + if this.timer >= 0.4 then + this.timer = 0 + local dist = SFrames.Target:GetDistance("target") + this.text:SetText(dist or "---") + if not this:IsShown() then this:Show() end + end + end) +end + +local AURA_SIZE = 24 +local AURA_SPACING = 2 +local AURA_ROW_SPACING = 1 + +local function GetIncomingHeals(unit) + return SFrames:GetIncomingHeals(unit) +end + +local function TryDropCursorOnUnit(unit) + if not unit or not UnitExists(unit) then return false end + if not CursorHasItem or not CursorHasItem() then return false end + if not DropItemOnUnit then return false end + + local ok = pcall(DropItemOnUnit, unit) + if not ok then + return false + end + + return not CursorHasItem() +end + +function SFrames.Target:Initialize() + local f = CreateFrame("Button", "SFramesTargetFrame", UIParent) + f:SetWidth(SFrames.Config.width) + f:SetHeight(SFrames.Config.height) + if SFramesDB and SFramesDB.Positions and SFramesDB.Positions["TargetFrame"] then + local pos = SFramesDB.Positions["TargetFrame"] + f:SetPoint(pos.point, UIParent, pos.relativePoint, pos.xOfs, pos.yOfs) + else + f:SetPoint("CENTER", UIParent, "CENTER", 200, -100) -- Mirrored from player + end + local frameScale = (SFramesDB and type(SFramesDB.targetFrameScale) == "number") and SFramesDB.targetFrameScale or 1 + f:SetScale(frameScale) + + f:SetMovable(true) + f:EnableMouse(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() if IsAltKeyDown() or SFrames.isUnlocked then f:StartMoving() end end) + f:SetScript("OnDragStop", function() + f:StopMovingOrSizing() + if not SFramesDB then SFramesDB = {} end + if not SFramesDB.Positions then SFramesDB.Positions = {} end + local point, relativeTo, relativePoint, xOfs, yOfs = f:GetPoint() + SFramesDB.Positions["TargetFrame"] = { point = point, relativePoint = relativePoint, xOfs = xOfs, yOfs = yOfs } + end) + + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:SetScript("OnClick", function() + if arg1 == "LeftButton" then + if TryDropCursorOnUnit(this.unit) then + return + end + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit(this.unit) + end + elseif arg1 == "RightButton" then + if SpellIsTargeting() then + SpellStopTargeting() + return + end + HideDropDownMenu(1) + TargetFrameDropDown.unit = "target" + TargetFrameDropDown.name = UnitName("target") + TargetFrameDropDown.initialize = TargetFrameDropDown_Initialize + ToggleDropDownMenu(1, nil, TargetFrameDropDown, "SFramesTargetFrame", 120, 10) + end + end) + f:SetScript("OnReceiveDrag", function() + if TryDropCursorOnUnit(this.unit) then + return + end + if SpellIsTargeting and SpellIsTargeting() then + SpellTargetUnit(this.unit) + end + end) + + SFrames:CreateUnitBackdrop(f) + + -- 3D Portrait (Right side for target) + local pWidth = SFrames.Config.portraitWidth + f.portrait = CreateFrame("PlayerModel", nil, f) + f.portrait:SetWidth(pWidth) + f.portrait:SetHeight(SFrames.Config.height - 2) + f.portrait:SetPoint("RIGHT", f, "RIGHT", -1, 0) + + local pbg = CreateFrame("Frame", nil, f) + pbg:SetPoint("TOPLEFT", f.portrait, "TOPLEFT", -1, 0) + pbg:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", 0, 0) + pbg:SetFrameLevel(f:GetFrameLevel()) + SFrames:CreateUnitBackdrop(pbg) + f.portraitBG = pbg + + -- Health Bar (Left side) + f.health = SFrames:CreateStatusBar(f, "SFramesTargetHealth") + f.health:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1) + f.health:SetPoint("TOPRIGHT", f.portrait, "TOPLEFT", -1, 0) + f.health:SetHeight((SFrames.Config.height - 2) * 0.82 - 1) + + local hbg = CreateFrame("Frame", nil, f) + hbg:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + hbg:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + hbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(hbg) + f.healthBGFrame = hbg + + -- Add a dark backdrop behind the health texture + f.health.bg = f.health:CreateTexture(nil, "BACKGROUND") + f.health.bg:SetAllPoints() + f.health.bg:SetTexture(SFrames:GetTexture()) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Heal prediction overlay (incoming heals) + f.health.healPredMine = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredMine:SetTexture(SFrames:GetTexture()) + f.health.healPredMine:SetVertexColor(0.4, 1.0, 0.55, 0.78) + f.health.healPredMine:Hide() + + f.health.healPredOther = f.health:CreateTexture(nil, "OVERLAY") + f.health.healPredOther:SetTexture(SFrames:GetTexture()) + f.health.healPredOther:SetVertexColor(0.2, 0.9, 0.35, 0.5) + f.health.healPredOther:Hide() + + -- Power Bar + f.power = SFrames:CreateStatusBar(f, "SFramesTargetPower") + f.power:SetPoint("TOPLEFT", f.health, "BOTTOMLEFT", 0, -1) + f.power:SetPoint("BOTTOMRIGHT", f.portrait, "BOTTOMLEFT", -1, 0) + + local powerbg = CreateFrame("Frame", nil, f) + powerbg:SetPoint("TOPLEFT", f.power, "TOPLEFT", -1, 1) + powerbg:SetPoint("BOTTOMRIGHT", f.power, "BOTTOMRIGHT", 1, -1) + powerbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(powerbg) + f.powerBGFrame = powerbg + + -- Add a dark backdrop behind the power texture + f.power.bg = f.power:CreateTexture(nil, "BACKGROUND") + f.power.bg:SetAllPoints() + f.power.bg:SetTexture(SFrames:GetTexture()) + f.power.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + -- Class Icon Badge (overlaid on portrait, top-right corner with 1/3 outside) + f.classIcon = SFrames:CreateClassIcon(f, 16) + f.classIcon.overlay:SetPoint("CENTER", f.portrait, "TOPRIGHT", 0, 0) + + -- Texts + f.nameText = SFrames:CreateFontString(f.health, 10, "LEFT") + f.nameText:SetPoint("LEFT", f.health, "LEFT", 4, 0) + + f.healthText = SFrames:CreateFontString(f.health, 10, "RIGHT") + f.healthText:SetPoint("RIGHT", f.health, "RIGHT", -4, 0) + + f.powerText = SFrames:CreateFontString(f.power, 10, "RIGHT") + f.powerText:SetPoint("RIGHT", f.power, "RIGHT", -4, 0) + + -- Outline/shadow setup for text to make it pop + f.nameText:SetShadowColor(0, 0, 0, 1) + f.nameText:SetShadowOffset(1, -1) + f.healthText:SetShadowColor(0, 0, 0, 1) + f.healthText:SetShadowOffset(1, -1) + f.powerText:SetShadowColor(0, 0, 0, 1) + f.powerText:SetShadowOffset(1, -1) + + -- Combo Points + f.comboText = SFrames:CreateFontString(f, 20, "CENTER") + f.comboText:SetPoint("CENTER", f.portrait, "CENTER", 0, 0) + f.comboText:SetTextColor(1, 0.8, 0) + f.comboText:SetText("") + + -- Raid Target Icon (top center of health bar, half outside frame) + local raidIconSize = 22 + local raidIconOvr = CreateFrame("Frame", nil, f) + raidIconOvr:SetFrameLevel((f:GetFrameLevel() or 0) + 5) + raidIconOvr:SetWidth(raidIconSize) + raidIconOvr:SetHeight(raidIconSize) + raidIconOvr:SetPoint("CENTER", f.health, "TOP", 0, 0) + f.raidIcon = raidIconOvr:CreateTexture(nil, "OVERLAY") + f.raidIcon:SetTexture("Interface\\TargetingFrame\\UI-RaidTargetingIcons") + f.raidIcon:SetAllPoints(raidIconOvr) + f.raidIcon:Hide() + f.raidIconOverlay = raidIconOvr + + self.frame = f + self:ApplyConfig() + f:Hide() + + SFrames:RegisterEvent("PLAYER_TARGET_CHANGED", function() self:OnTargetChanged() end) + SFrames:RegisterEvent("UNIT_HEALTH", function() if arg1 == "target" then self:UpdateHealth() end end) + SFrames:RegisterEvent("UNIT_MAXHEALTH", function() if arg1 == "target" then self:UpdateHealth() end end) + SFrames:RegisterEvent("UNIT_MANA", function() if arg1 == "target" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXMANA", function() if arg1 == "target" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_ENERGY", function() if arg1 == "target" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXENERGY", function() if arg1 == "target" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_RAGE", function() if arg1 == "target" then self:UpdatePower() end end) + SFrames:RegisterEvent("UNIT_MAXRAGE", function() if arg1 == "target" then self:UpdatePower() end end) + SFrames:RegisterEvent("PLAYER_COMBO_POINTS", function() self:UpdateComboPoints() end) + SFrames:RegisterEvent("UNIT_DISPLAYPOWER", function() if arg1 == "target" then self:UpdatePowerType() end end) + SFrames:RegisterEvent("UNIT_PORTRAIT_UPDATE", function() if arg1 == "target" then self.frame.portrait:SetUnit("target") self.frame.portrait:SetCamera(0) self.frame.portrait:SetPosition(-1.0, 0, 0) end end) + SFrames:RegisterEvent("UNIT_DYNAMIC_FLAGS", function() if arg1 == "target" then self:UpdateAll() end end) + SFrames:RegisterEvent("UNIT_FACTION", function() if arg1 == "target" then self:UpdateAll() end end) + SFrames:RegisterEvent("RAID_TARGET_UPDATE", function() self:UpdateRaidIcon() end) + + self:CreateAuras() + self:CreateCastbar() + self:InitializeDistanceFrame() + + f.unit = "target" + f:SetScript("OnEnter", function() + GameTooltip_SetDefaultAnchor(GameTooltip, this) + GameTooltip:SetUnit(this.unit) + GameTooltip:Show() + end) + f:SetScript("OnLeave", function() + GameTooltip:Hide() + end) + + -- If target already exists on load (e.g. after /reload), show and update it immediately + self:OnTargetChanged() + + -- Distance Updater removed from target frame +end + +function SFrames.Target:OnTargetChanged() + if UnitExists("target") then + self.frame:Show() + self:UpdateAll() + -- Force distance update immediately + if SFrames.Target.distanceFrame then + local dist = self:GetDistance("target") + SFrames.Target.distanceFrame.text:SetText(dist or "---") + if not (SFramesDB and SFramesDB.targetDistanceEnabled == false) then + SFrames.Target.distanceFrame:Show() + else + SFrames.Target.distanceFrame:Hide() + end + end + else + self.frame:Hide() + if SFrames.Target.distanceFrame then SFrames.Target.distanceFrame:Hide() end + end +end + +function SFrames.Target:UpdateAll() + self:UpdateHealth() + self:UpdatePowerType() + self:UpdatePower() + self:UpdateComboPoints() + self:UpdateRaidIcon() + self:UpdateAuras() + + self.frame.portrait:SetUnit("target") + self.frame.portrait:SetCamera(0) + self.frame.portrait:Hide() + self.frame.portrait:Show() + self.frame.portrait:SetPosition(-1.0, 0, 0) + + local name = UnitName("target") or "" + local level = UnitLevel("target") + local levelText = level + + -- Difficulty Color logic + local function RGBToHex(r, g, b) + return string.format("|cff%02x%02x%02x", r*255, g*255, b*255) + end + + local function GetLevelDiffColor(targetLevel) + local playerLevel = UnitLevel("player") + if targetLevel == -1 then return 1, 0, 0 end -- Skull + + local diff = targetLevel - playerLevel + if diff >= 5 then + return 1, 0.1, 0.1 -- Red + elseif diff >= 3 then + return 1, 0.5, 0.25 -- Orange + elseif diff >= -2 then + return 1, 1, 0 -- Yellow + elseif -diff <= GetQuestGreenRange() then + return 0.25, 0.75, 0.25 -- Green + else + return 0.5, 0.5, 0.5 -- Grey + end + end + + local levelColor = RGBToHex(1, 1, 1) -- default white + + if level == -1 then + levelText = "??" + levelColor = RGBToHex(1, 0, 0) -- skull is always red + else + local r, g, b = GetLevelDiffColor(level) + levelColor = RGBToHex(r, g, b) + end + + local classif = UnitClassification("target") + if classif == "elite" or classif == "rareelite" then + levelText = levelText .. "+" + elseif classif == "rare" then + levelText = levelText .. "R" + elseif classif == "worldboss" then + levelText = "??" + levelColor = RGBToHex(1, 0, 0) + end + + local formattedLevel = levelColor .. levelText .. "|r" + + -- Toggle level display from config DB + if SFramesDB and SFramesDB.showLevel == false then + formattedLevel = "" + else + formattedLevel = formattedLevel .. " " + end + local showClassText = not (SFramesDB and SFramesDB.targetShowClass == false) + if showClassText and UnitIsPlayer("target") then + local localizedClass = UnitClass("target") + if localizedClass and localizedClass ~= "" then + name = name .. " " .. localizedClass + end + end + + if UnitIsPlayer("target") and not (SFramesDB and SFramesDB.targetShowClassIcon == false) then + local _, tClass = UnitClass("target") + SFrames:SetClassIcon(self.frame.classIcon, tClass) + else + if self.frame.classIcon then + self.frame.classIcon:Hide() + if self.frame.classIcon.overlay then self.frame.classIcon.overlay:Hide() end + end + end + + local useClassColor = not (SFramesDB and SFramesDB.classColorHealth == false) + + if UnitIsPlayer("target") and useClassColor then + local _, class = UnitClass("target") + if class and SFrames.Config.colors.class[class] then + local color = SFrames.Config.colors.class[class] + -- Set Health Color + self.frame.health:SetStatusBarColor(color.r, color.g, color.b) + -- Apply Class Color to Name + self.frame.nameText:SetText(formattedLevel .. name) + self.frame.nameText:SetTextColor(color.r, color.g, color.b) + else + self.frame.health:SetStatusBarColor(0, 1, 0) + self.frame.nameText:SetText(formattedLevel .. name) + self.frame.nameText:SetTextColor(1, 1, 1) + end + else + local r, g, b = 0.85, 0.77, 0.36 -- Neutral (Softer Yellow) + local isTapped = UnitIsTapped("target") and not UnitIsTappedByPlayer("target") + if isTapped then + r, g, b = 0.53, 0.53, 0.53 -- Tapped by others (Grey) + name = name .. " (无拾取)" -- For colorblind + elseif UnitIsEnemy("player", "target") then + r, g, b = 0.78, 0.25, 0.25 -- Enemy (Softer Red) + elseif UnitIsFriend("player", "target") then + r, g, b = 0.33, 0.59, 0.33 -- Friend (Softer Green) + end + self.frame.health:SetStatusBarColor(r, g, b) + -- Color Name same as reaction + self.frame.nameText:SetText(formattedLevel .. name) + self.frame.nameText:SetTextColor(r, g, b) + end +end + +function SFrames.Target:UpdateHealth() + local hp = UnitHealth("target") + local maxHp = UnitHealthMax("target") + self.frame.health:SetMinMaxValues(0, maxHp) + self.frame.health:SetValue(hp) + + local displayHp, displayMax = hp, maxHp + if (not SFramesDB or SFramesDB.mobRealHealth ~= false) and maxHp == 100 + and not UnitIsPlayer("target") and not UnitPlayerControlled("target") then + local name = UnitName("target") + local level = UnitLevel("target") + if name and level and LibMobHealth_Cache then + local key = name .. ":" .. level + local realMax = LibMobHealth_Cache[key] + if realMax and realMax > 0 then + displayMax = realMax + displayHp = math.floor(realMax * hp / 100) + end + end + end + + if displayMax > 0 then + self.frame.healthText:SetText(displayHp .. " / " .. displayMax) + else + self.frame.healthText:SetText(displayHp) + end + + self:UpdateHealPrediction() +end + +function SFrames.Target:UpdateHealPrediction() + if not (self.frame and self.frame.health and self.frame.health.healPredMine and self.frame.health.healPredOther) then return end + local predMine = self.frame.health.healPredMine + local predOther = self.frame.health.healPredOther + + local function HidePredictions() + predMine:Hide() + predOther:Hide() + end + + if not UnitExists("target") then + HidePredictions() + return + end + + local hp = UnitHealth("target") or 0 + local maxHp = UnitHealthMax("target") or 0 + if maxHp <= 0 or hp >= maxHp then + HidePredictions() + return + end + + local _, mineIncoming, othersIncoming = GetIncomingHeals("target") + local missing = maxHp - hp + if missing <= 0 then + HidePredictions() + return + end + + local mineShown = math.min(math.max(0, mineIncoming), missing) + local remaining = missing - mineShown + local otherShown = math.min(math.max(0, othersIncoming), remaining) + if mineShown <= 0 and otherShown <= 0 then + HidePredictions() + return + end + + local barWidth = self.frame.health:GetWidth() or 0 + if barWidth <= 0 then + HidePredictions() + return + end + + local currentWidth = math.floor((hp / maxHp) * barWidth + 0.5) + if currentWidth < 0 then currentWidth = 0 end + if currentWidth > barWidth then currentWidth = barWidth end + + local availableWidth = barWidth - currentWidth + if availableWidth <= 0 then + HidePredictions() + return + end + + local mineWidth = math.floor((mineShown / maxHp) * barWidth + 0.5) + local otherWidth = math.floor((otherShown / maxHp) * barWidth + 0.5) + if mineWidth < 0 then mineWidth = 0 end + if otherWidth < 0 then otherWidth = 0 end + if mineWidth > availableWidth then mineWidth = availableWidth end + if otherWidth > (availableWidth - mineWidth) then + otherWidth = availableWidth - mineWidth + end + + if mineWidth > 0 then + predMine:ClearAllPoints() + predMine:SetPoint("TOPLEFT", self.frame.health, "TOPLEFT", currentWidth, 0) + predMine:SetPoint("BOTTOMLEFT", self.frame.health, "BOTTOMLEFT", currentWidth, 0) + predMine:SetWidth(mineWidth) + predMine:Show() + else + predMine:Hide() + end + + if otherWidth > 0 then + predOther:ClearAllPoints() + predOther:SetPoint("TOPLEFT", self.frame.health, "TOPLEFT", currentWidth + mineWidth, 0) + predOther:SetPoint("BOTTOMLEFT", self.frame.health, "BOTTOMLEFT", currentWidth + mineWidth, 0) + predOther:SetWidth(otherWidth) + predOther:Show() + else + predOther:Hide() + end +end + +function SFrames.Target:UpdatePowerType() + local powerType = UnitPowerType("target") + local color = SFrames.Config.colors.power[powerType] + if color then + self.frame.power:SetStatusBarColor(color.r, color.g, color.b) + else + self.frame.power:SetStatusBarColor(0, 0, 1) + end +end + +function SFrames.Target:UpdatePower() + local power = UnitMana("target") + local maxPower = UnitManaMax("target") + self.frame.power:SetMinMaxValues(0, maxPower) + self.frame.power:SetValue(power) + if maxPower > 0 then + self.frame.powerText:SetText(power .. " / " .. maxPower) + else + self.frame.powerText:SetText("") + end +end + +function SFrames.Target:UpdateComboPoints() + local points = GetComboPoints() + if points > 0 then + self.frame.comboText:SetText(points) + else + self.frame.comboText:SetText("") + end +end + +function SFrames.Target:UpdateRaidIcon() + if not (self.frame and self.frame.raidIcon) then return end + if not GetRaidTargetIndex then + self.frame.raidIcon:Hide() + return + end + if not UnitExists("target") then + self.frame.raidIcon:Hide() + return + end + local index = GetRaidTargetIndex("target") + if index and index > 0 and index <= 8 then + local col = math.mod(index - 1, 4) + local row = math.floor((index - 1) / 4) + self.frame.raidIcon:SetTexCoord(col * 0.25, (col + 1) * 0.25, row * 0.25, (row + 1) * 0.25) + self.frame.raidIcon:Show() + else + self.frame.raidIcon:Hide() + end +end + +-------------------------------------------------------------------------------- +-- Target Auras (Buffs / Debuffs) +-------------------------------------------------------------------------------- + +function SFrames.Target:CreateAuras() + self.frame.buffs = {} + self.frame.debuffs = {} + + -- Target Buffs (Top left to right) + for i = 1, 16 do + local b = CreateFrame("Button", "SFramesTargetBuff"..i, self.frame) + b:SetWidth(AURA_SIZE) + b:SetHeight(AURA_SIZE) + SFrames:CreateUnitBackdrop(b) + + b.icon = b:CreateTexture(nil, "ARTWORK") + b.icon:SetAllPoints() + b.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + b.cdText = SFrames:CreateFontString(b, 9, "CENTER") + b.cdText:SetPoint("BOTTOM", b, "BOTTOM", 0, 1) + b.cdText:SetTextColor(1, 0.82, 0) + b.cdText:SetShadowColor(0, 0, 0, 1) + b.cdText:SetShadowOffset(1, -1) + + -- Tooltip support + b:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitBuff("target", this:GetID()) + end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + + -- Default row anchor (Starting bottom left for buffs) + if i == 1 then + b:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", 0, -1) + elseif math.mod(i - 1, 8) == 0 then + b:SetPoint("TOP", self.frame.buffs[i-8], "BOTTOM", 0, -AURA_ROW_SPACING) + else + b:SetPoint("LEFT", self.frame.buffs[i-1], "RIGHT", AURA_SPACING, 0) + end + b:Hide() + self.frame.buffs[i] = b + end + + -- Target Debuffs (Bottom left to right) + for i = 1, 16 do + local b = CreateFrame("Button", "SFramesTargetDebuff"..i, self.frame) + b:SetWidth(AURA_SIZE) + b:SetHeight(AURA_SIZE) + SFrames:CreateUnitBackdrop(b) + + b.icon = b:CreateTexture(nil, "ARTWORK") + b.icon:SetAllPoints() + b.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + b.cdText = SFrames:CreateFontString(b, 9, "CENTER") + b.cdText:SetPoint("BOTTOM", b, "BOTTOM", 0, 1) + b.cdText:SetTextColor(1, 0.82, 0) + b.cdText:SetShadowColor(0, 0, 0, 1) + b.cdText:SetShadowOffset(1, -1) + + -- Tooltip support + b:SetScript("OnEnter", function() + GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT") + GameTooltip:SetUnitDebuff("target", this:GetID()) + end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + b:SetScript("OnLeave", function() GameTooltip:Hide() end) + + -- Debuff anchors are recalulated dynamically in UpdateAuras + if i == 1 then + b:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", 0, -1) + elseif math.mod(i - 1, 8) == 0 then + b:SetPoint("TOP", self.frame.debuffs[i-8], "BOTTOM", 0, -AURA_ROW_SPACING) + else + b:SetPoint("LEFT", self.frame.debuffs[i-1], "RIGHT", AURA_SPACING, 0) + end + b:Hide() + self.frame.debuffs[i] = b + end + + SFrames:RegisterEvent("UNIT_AURA", function() if arg1 == "target" then self:UpdateAuras() end end) + + self.auraUpdater = CreateFrame("Frame", nil, self.frame) + self.auraUpdater.timer = 0 + self.auraUpdater:SetScript("OnUpdate", function() + this.timer = this.timer + arg1 + if this.timer >= 0.25 then + SFrames.Target:TickAuras() + SFrames.Target:UpdateHealPrediction() + this.timer = 0 + end + end) +end + +function SFrames.Target:TickAuras() + if not UnitExists("target") then return end + + local timeNow = GetTime() + + for i = 1, 16 do + local b = self.frame.buffs[i] + if b:IsShown() and b.expirationTime then + local timeLeft = b.expirationTime - timeNow + if timeLeft > 0 and timeLeft < 3600 then + b.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + b.cdText:SetText("") + end + end + end + + for i = 1, 16 do + local b = self.frame.debuffs[i] + if b:IsShown() and b.expirationTime then + local timeLeft = b.expirationTime - timeNow + if timeLeft > 0 and timeLeft < 3600 then + b.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + b.cdText:SetText("") + end + end + end +end + +function SFrames.Target:UpdateAuras() + if not UnitExists("target") then return end + + local numBuffs = 0 + -- Buffs + for i = 1, 16 do + local texture = UnitBuff("target", i) + local b = self.frame.buffs[i] + b:SetID(i) -- Ensure ID is set for tooltips + if texture then + b.icon:SetTexture(texture) + + -- Scrape tooltip for duration + SFrames.Tooltip:SetOwner(UIParent, "ANCHOR_NONE") + SFrames.Tooltip:ClearLines() + SFrames.Tooltip:SetUnitBuff("target", i) + local timeLeft = SFrames:GetAuraTimeLeft("target", i, true) + if timeLeft and timeLeft > 0 then + b.expirationTime = GetTime() + timeLeft + b.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + b.expirationTime = nil + b.cdText:SetText("") + end + + b:Show() + numBuffs = numBuffs + 1 + else + b.expirationTime = nil + b.cdText:SetText("") + b:Hide() + end + end + + -- Dynamically re-anchor the first Debuff based on visible Buffs + local firstDebuff = self.frame.debuffs[1] + if firstDebuff then + firstDebuff:ClearAllPoints() + if numBuffs > 0 then + -- Find the start of the LAST row of buffs + local lastRowStart = math.floor((numBuffs - 1) / 8) * 8 + 1 + firstDebuff:SetPoint("TOP", self.frame.buffs[lastRowStart], "BOTTOM", 0, -AURA_ROW_SPACING) + else + firstDebuff:SetPoint("TOPLEFT", self.frame, "BOTTOMLEFT", 0, -1) + end + end + + -- Debuffs + for i = 1, 16 do + local texture = UnitDebuff("target", i) + local b = self.frame.debuffs[i] + b:SetID(i) -- Ensure ID is set for tooltips + if texture then + b.icon:SetTexture(texture) + + -- Scrape tooltip for duration + SFrames.Tooltip:SetOwner(UIParent, "ANCHOR_NONE") + SFrames.Tooltip:ClearLines() + SFrames.Tooltip:SetUnitDebuff("target", i) + local timeLeft = SFrames:GetAuraTimeLeft("target", i, false) + if timeLeft and timeLeft > 0 then + b.expirationTime = GetTime() + timeLeft + b.cdText:SetText(SFrames:FormatTime(timeLeft)) + else + b.expirationTime = nil + b.cdText:SetText("") + end + + b:Show() + else + b.expirationTime = nil + b.cdText:SetText("") + b:Hide() + end + end +end + +-------------------------------------------------------------------------------- +-- Target Castbar +-------------------------------------------------------------------------------- + +function SFrames.Target:CreateCastbar() + local cb = SFrames:CreateStatusBar(self.frame, "SFramesTargetCastbar") + cb:SetHeight(SFrames.Config.castbarHeight) + cb:SetPoint("BOTTOMLEFT", self.frame, "TOPLEFT", 0, 6) + cb:SetPoint("BOTTOMRIGHT", self.frame.portrait, "TOPRIGHT", -(SFrames.Config.castbarHeight + 6), 6) + + local cbbg = CreateFrame("Frame", nil, self.frame) + cbbg:SetPoint("TOPLEFT", cb, "TOPLEFT", -1, 1) + cbbg:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", 1, -1) + cbbg:SetFrameLevel(cb:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(cbbg) + + cb.bg = cb:CreateTexture(nil, "BACKGROUND") + cb.bg:SetAllPoints() + cb.bg:SetTexture(SFrames:GetTexture()) + cb.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + cb:SetStatusBarColor(1, 0.7, 0) + + cb.text = SFrames:CreateFontString(cb, 10, "LEFT") + cb.text:SetPoint("LEFT", cb, "LEFT", 4, 0) + + cb.icon = cb:CreateTexture(nil, "ARTWORK") + cb.icon:SetWidth(SFrames.Config.castbarHeight + 2) + cb.icon:SetHeight(SFrames.Config.castbarHeight + 2) + cb.icon:SetPoint("LEFT", cb, "RIGHT", 4, 0) + cb.icon:SetTexCoord(0.07, 0.93, 0.07, 0.93) + + local ibg = CreateFrame("Frame", nil, self.frame) + ibg:SetPoint("TOPLEFT", cb.icon, "TOPLEFT", -1, 1) + ibg:SetPoint("BOTTOMRIGHT", cb.icon, "BOTTOMRIGHT", 1, -1) + ibg:SetFrameLevel(cb:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(ibg) + + cb:Hide() + cbbg:Hide() + cb.icon:Hide() + ibg:Hide() + + self.frame.castbar = cb + self.frame.castbar.cbbg = cbbg + self.frame.castbar.ibg = ibg + + self.frame.castbarUpdater = CreateFrame("Frame", nil, self.frame) + self.frame.castbarUpdater:SetScript("OnUpdate", function() SFrames.Target:CastbarOnUpdate() end) +end + +function SFrames.Target:CastbarOnUpdate() + local cb = self.frame.castbar + if not UnitExists("target") then + cb:Hide() + cb.cbbg:Hide() + cb.icon:Hide() + cb.ibg:Hide() + return + end + + -- Try to read cast from Vanilla extensions (SuperWoW or TurtleWoW modern API, or ShaguTweaks) + local cast, nameSubtext, text, texture, startTime, endTime + local _UnitCastingInfo = UnitCastingInfo or (ShaguTweaks and ShaguTweaks.UnitCastingInfo) + if _UnitCastingInfo then + cast, nameSubtext, text, texture, startTime, endTime = _UnitCastingInfo("target") + end + + local channel + local _UnitChannelInfo = UnitChannelInfo or (ShaguTweaks and ShaguTweaks.UnitChannelInfo) + if not cast and _UnitChannelInfo then + channel, nameSubtext, text, texture, startTime, endTime = _UnitChannelInfo("target") + cast = channel + end + + if cast and startTime and endTime then + local duration = (endTime - startTime) / 1000 + local cur = GetTime() - (startTime / 1000) + + if channel then + cur = duration + (startTime / 1000) - GetTime() + end + + if cur > duration then cur = duration end + if cur < 0 then cur = 0 end + + cb:SetMinMaxValues(0, duration) + cb:SetValue(cur) + cb.text:SetText(cast) + + if texture then + cb.icon:SetTexture(texture) + end + + cb:SetAlpha(1) + cb.cbbg:SetAlpha(1) + cb.icon:SetAlpha(1) + cb.ibg:SetAlpha(1) + + cb:Show() + cb.cbbg:Show() + cb.icon:Show() + cb.ibg:Show() + else + cb:Hide() + cb.cbbg:Hide() + cb.icon:Hide() + cb.ibg:Hide() + end +end + +-- Diagnostic Slash Command (Position Recovery) +SLASH_NANAMIDIST1 = "/nanamidist" +SlashCmdList["NANAMIDIST"] = function() + if SFrames.Target.distanceFrame then + SFrames.Target.distanceFrame:ClearAllPoints() + SFrames.Target.distanceFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 100) + SFrames.Target.distanceFrame:Show() + DEFAULT_CHAT_FRAME:AddMessage("|cffffd100Nanami-UI:|r 距离显示已重置到屏幕中央。") + end +end diff --git a/Units/ToT.lua b/Units/ToT.lua new file mode 100644 index 0000000..0519d0d --- /dev/null +++ b/Units/ToT.lua @@ -0,0 +1,85 @@ +SFrames.ToT = {} +local _A = SFrames.ActiveTheme + +function SFrames.ToT:Initialize() + local f = CreateFrame("Button", "SFramesToTFrame", UIParent) + f:SetWidth(120) + f:SetHeight(25) + f:SetPoint("BOTTOMLEFT", SFramesTargetFrame, "BOTTOMRIGHT", 5, 0) + + f:RegisterForClicks("LeftButtonUp", "RightButtonUp") + f:SetScript("OnClick", function() + if arg1 == "LeftButton" then + TargetUnit("targettarget") + end + end) + + -- Health Bar + f.health = SFrames:CreateStatusBar(f, "SFramesToTHealth") + f.health:SetPoint("TOPLEFT", f, "TOPLEFT", 1, -1) + f.health:SetPoint("BOTTOMRIGHT", f, "BOTTOMRIGHT", -1, 1) + + local hbg = CreateFrame("Frame", nil, f) + hbg:SetPoint("TOPLEFT", f.health, "TOPLEFT", -1, 1) + hbg:SetPoint("BOTTOMRIGHT", f.health, "BOTTOMRIGHT", 1, -1) + hbg:SetFrameLevel(f:GetFrameLevel() - 1) + SFrames:CreateUnitBackdrop(hbg) + + f.health.bg = f.health:CreateTexture(nil, "BACKGROUND") + f.health.bg:SetAllPoints() + f.health.bg:SetTexture(SFrames:GetTexture()) + f.health.bg:SetVertexColor(_A.slotBg[1], _A.slotBg[2], _A.slotBg[3], _A.slotBg[4] or 1) + + f.nameText = SFrames:CreateFontString(f.health, 10, "CENTER") + f.nameText:SetPoint("CENTER", f.health, "CENTER", 0, 0) + + self.frame = f + f:Hide() + + -- Update loop since targettarget changes don't fire precise events in Vanilla + self.updater = CreateFrame("Frame") + self.updater.timer = 0 + self.updater:SetScript("OnUpdate", function() + this.timer = this.timer + arg1 + if this.timer >= 0.2 then + SFrames.ToT:Update() + this.timer = 0 + end + end) +end + +function SFrames.ToT:Update() + if UnitExists("targettarget") then + self.frame:Show() + + local hp = UnitHealth("targettarget") + local maxHp = UnitHealthMax("targettarget") + self.frame.health:SetMinMaxValues(0, maxHp) + self.frame.health:SetValue(hp) + + self.frame.nameText:SetText(UnitName("targettarget")) + + if UnitIsPlayer("targettarget") then + local _, class = UnitClass("targettarget") + local color = SFrames.Config.colors.class[class] + if color then + self.frame.health:SetStatusBarColor(color.r, color.g, color.b) + self.frame.nameText:SetTextColor(color.r, color.g, color.b) + else + self.frame.health:SetStatusBarColor(0, 1, 0) + self.frame.nameText:SetTextColor(1, 1, 1) + end + else + local r, g, b = 0.85, 0.77, 0.36 -- Neutral + if UnitIsEnemy("player", "targettarget") then + r, g, b = 0.78, 0.25, 0.25 -- Enemy + elseif UnitIsFriend("player", "targettarget") then + r, g, b = 0.33, 0.59, 0.33 -- Friend + end + self.frame.health:SetStatusBarColor(r, g, b) + self.frame.nameText:SetTextColor(r, g, b) + end + else + self.frame:Hide() + end +end diff --git a/Whisper.lua b/Whisper.lua new file mode 100644 index 0000000..556bc0d --- /dev/null +++ b/Whisper.lua @@ -0,0 +1,882 @@ +local CFG_THEME = SFrames.ActiveTheme + +SFrames.Whisper = SFrames.Whisper or {} +SFrames.Whisper.history = SFrames.Whisper.history or {} +SFrames.Whisper.contacts = SFrames.Whisper.contacts or {} +SFrames.Whisper.unreadCount = SFrames.Whisper.unreadCount or {} +SFrames.Whisper.activeContact = nil + +local MAX_WHISPER_CONTACTS = 200 +local MAX_MESSAGES_PER_CONTACT = 100 + +function SFrames.Whisper:SaveCache() + if not SFramesDB then SFramesDB = {} end + SFramesDB.whisperContacts = {} + SFramesDB.whisperHistory = {} + for _, contact in ipairs(self.contacts) do + table.insert(SFramesDB.whisperContacts, contact) + if self.history[contact] then + local msgs = self.history[contact] + -- Only persist the last MAX_MESSAGES_PER_CONTACT messages per contact + local start = math.max(1, table.getn(msgs) - MAX_MESSAGES_PER_CONTACT + 1) + local trimmed = {} + for i = start, table.getn(msgs) do + table.insert(trimmed, { time = msgs[i].time, text = msgs[i].text, isMe = msgs[i].isMe, translated = msgs[i].translated }) + end + SFramesDB.whisperHistory[contact] = trimmed + end + end +end + +function SFrames.Whisper:LoadCache() + if not SFramesDB then return end + if type(SFramesDB.whisperContacts) ~= "table" or type(SFramesDB.whisperHistory) ~= "table" then return end + + self.contacts = {} + self.history = {} + for _, contact in ipairs(SFramesDB.whisperContacts) do + if type(contact) == "string" and SFramesDB.whisperHistory[contact] and table.getn(SFramesDB.whisperHistory[contact]) > 0 then + table.insert(self.contacts, contact) + self.history[contact] = SFramesDB.whisperHistory[contact] + end + end + -- Trim to max contacts (remove oldest = last in list) + while table.getn(self.contacts) > MAX_WHISPER_CONTACTS do + local oldest = table.remove(self.contacts) + if oldest then + self.history[oldest] = nil + end + end +end + +function SFrames.Whisper:RemoveContact(contact) + for i, v in ipairs(self.contacts) do + if v == contact then + table.remove(self.contacts, i) + break + end + end + self.history[contact] = nil + self.unreadCount[contact] = nil + if self.activeContact == contact then + self.activeContact = self.contacts[1] + end + self:SaveCache() + if self.frame and self.frame:IsShown() then + self:UpdateContacts() + self:UpdateMessages() + end +end + +function SFrames.Whisper:ClearAllHistory() + self.history = {} + self.contacts = {} + self.unreadCount = {} + self.activeContact = nil + self:SaveCache() + if self.frame and self.frame:IsShown() then + self:UpdateContacts() + self:UpdateMessages() + end +end + +local function FormatTime() + local h, m = GetGameTime() + return string.format("%02d:%02d", h, m) +end + +local function GetFont() + if SFrames and SFrames.GetFont then return SFrames:GetFont() end + return "Fonts\\ARIALN.TTF" +end + +local function SetRoundBackdrop(frame, bgColor, borderColor) + frame:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, + }) + local bg = bgColor or CFG_THEME.panelBg + local bd = borderColor or CFG_THEME.panelBorder + frame:SetBackdropColor(bg[1], bg[2], bg[3], bg[4] or 1) + frame:SetBackdropBorderColor(bd[1], bd[2], bd[3], bd[4] or 1) +end + +local function CreateShadow(parent, size) + local s = CreateFrame("Frame", nil, parent) + local sz = size or 4 + s:SetPoint("TOPLEFT", parent, "TOPLEFT", -sz, sz) + s:SetPoint("BOTTOMRIGHT", parent, "BOTTOMRIGHT", sz, -sz) + s:SetFrameLevel(math.max(parent:GetFrameLevel() - 1, 0)) + s:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + s:SetBackdropColor(0, 0, 0, 0.55) + s:SetBackdropBorderColor(0, 0, 0, 0.4) + return s +end + +local function EnsureBackdrop(frame) + if not frame then return end + if frame.sfCfgBackdrop then return end + SetRoundBackdrop(frame) + frame.sfCfgBackdrop = true +end + +local function StyleActionButton(btn, label) + SetRoundBackdrop(btn, CFG_THEME.buttonBg, CFG_THEME.buttonBorder) + local fs = btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(GetFont(), 12, "OUTLINE") + fs:SetTextColor(CFG_THEME.btnText[1], CFG_THEME.btnText[2], CFG_THEME.btnText[3]) + fs:SetPoint("CENTER", btn, "CENTER", 0, 0) + if label then fs:SetText(label) end + btn.nLabel = fs + + btn:SetScript("OnEnter", function() + this:SetBackdropColor(CFG_THEME.buttonHoverBg[1], CFG_THEME.buttonHoverBg[2], CFG_THEME.buttonHoverBg[3], CFG_THEME.buttonHoverBg[4]) + this:SetBackdropBorderColor(CFG_THEME.btnHoverBorder[1], CFG_THEME.btnHoverBorder[2], CFG_THEME.btnHoverBorder[3], CFG_THEME.btnHoverBorder[4]) + if this.nLabel then this.nLabel:SetTextColor(CFG_THEME.btnActiveText[1], CFG_THEME.btnActiveText[2], CFG_THEME.btnActiveText[3]) end + end) + btn:SetScript("OnLeave", function() + this:SetBackdropColor(CFG_THEME.buttonBg[1], CFG_THEME.buttonBg[2], CFG_THEME.buttonBg[3], CFG_THEME.buttonBg[4]) + this:SetBackdropBorderColor(CFG_THEME.buttonBorder[1], CFG_THEME.buttonBorder[2], CFG_THEME.buttonBorder[3], CFG_THEME.buttonBorder[4]) + if this.nLabel then this.nLabel:SetTextColor(CFG_THEME.btnText[1], CFG_THEME.btnText[2], CFG_THEME.btnText[3]) end + end) + btn:SetScript("OnMouseDown", function() + this:SetBackdropColor(CFG_THEME.buttonDownBg[1], CFG_THEME.buttonDownBg[2], CFG_THEME.buttonDownBg[3], CFG_THEME.buttonDownBg[4]) + end) + btn:SetScript("OnMouseUp", function() + this:SetBackdropColor(CFG_THEME.buttonHoverBg[1], CFG_THEME.buttonHoverBg[2], CFG_THEME.buttonHoverBg[3], CFG_THEME.buttonHoverBg[4]) + end) + return fs +end + +local function IsNotFullyChinese(text) + -- If there's any english letter, we consider it requires translation + return string.find(text, "[a-zA-Z]") ~= nil +end + +local function TranslateMessage(text, callback) + if SFramesDB and SFramesDB.Chat and SFramesDB.Chat.translateEnabled == false then + callback(nil) + return + end + if not IsNotFullyChinese(text) then + callback(nil) + return + end + + local cleanText = string.gsub(text, "|c%x%x%x%x%x%x%x%x", "") + cleanText = string.gsub(cleanText, "|r", "") + cleanText = string.gsub(cleanText, "|H.-|h(.-)|h", "%1") + + if _G.STranslateAPI and _G.STranslateAPI.IsReady and _G.STranslateAPI.IsReady() then + _G.STranslateAPI.Translate(cleanText, "auto", "zh", function(result, err, meta) + if result then + callback(result) + end + end, "Nanami-UI") + else + callback(nil) + end +end + +function SFrames.Whisper:AddMessage(sender, text, isMe) + if not self.history[sender] then + self.history[sender] = {} + table.insert(self.contacts, 1, sender) + else + -- Move to front + for i, v in ipairs(self.contacts) do + if v == sender then + table.remove(self.contacts, i) + break + end + end + table.insert(self.contacts, 1, sender) + end + + local msgData = { + time = FormatTime(), + text = text, + isMe = isMe + } + table.insert(self.history[sender], msgData) + + if not isMe then + PlaySound("TellIncoming") + if self.activeContact ~= sender or not (self.frame and self.frame:IsShown()) then + self.unreadCount[sender] = (self.unreadCount[sender] or 0) + 1 + if SFrames.Chat and SFrames.Chat.frame and SFrames.Chat.frame.whisperButton then + SFrames.Chat.frame.whisperButton.hasUnread = true + if SFrames.Chat.frame.whisperButton.flashFrame then + SFrames.Chat.frame.whisperButton.flashFrame:Show() + end + end + end + + TranslateMessage(text, function(translated) + if translated and translated ~= "" then + msgData.translated = "(翻译) " .. translated + if self.frame and self.frame:IsShown() and self.activeContact == sender then + self:UpdateMessages() + end + end + end) + end + + -- Trim contacts if exceeding max + while table.getn(self.contacts) > MAX_WHISPER_CONTACTS do + local oldest = table.remove(self.contacts) + if oldest then + self.history[oldest] = nil + self.unreadCount[oldest] = nil + end + end + + if self.frame and self.frame:IsShown() then + self:UpdateContacts() + if self.activeContact == sender then + self:UpdateMessages() + end + end + + self:SaveCache() +end + +function SFrames.Whisper:SelectContact(contact) + self.activeContact = contact + self.unreadCount[contact] = 0 + self:UpdateContacts() + self:UpdateMessages() + + -- Clear global unread state if no more unread + local totalUnread = 0 + for k, v in pairs(self.unreadCount) do + totalUnread = totalUnread + v + end + if totalUnread == 0 and SFrames.Chat and SFrames.Chat.frame and SFrames.Chat.frame.whisperButton then + SFrames.Chat.frame.whisperButton.hasUnread = false + if SFrames.Chat.frame.whisperButton.flashFrame then + SFrames.Chat.frame.whisperButton.flashFrame:Hide() + end + end + + if self.frame and self.frame.editBox then + self.frame.editBox:SetText("") + self.frame.editBox:SetFocus() + end +end + +function SFrames.Whisper:UpdateContacts() + if not self.frame or not self.frame.contactList then return end + + local scrollChild = self.frame.contactList.scrollChild + for _, child in ipairs({scrollChild:GetChildren()}) do + child:Hide() + end + + local yOffset = -5 + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + for i, contact in ipairs(self.contacts) do + local btn = self.contactButtons and self.contactButtons[i] + if not btn then + btn = CreateFrame("Button", nil, scrollChild) + btn:SetWidth(120) + btn:SetHeight(24) + + EnsureBackdrop(btn) + + local txt = btn:CreateFontString(nil, "OVERLAY") + txt:SetFont(fontPath, 12, "OUTLINE") + txt:SetPoint("LEFT", btn, "LEFT", 8, 0) + btn.txt = txt + + local closeBtn = CreateFrame("Button", nil, btn) + closeBtn:SetWidth(16) + closeBtn:SetHeight(16) + closeBtn:SetPoint("RIGHT", btn, "RIGHT", -2, 0) + + local closeTxt = closeBtn:CreateFontString(nil, "OVERLAY") + closeTxt:SetFont(fontPath, 10, "OUTLINE") + closeTxt:SetPoint("CENTER", closeBtn, "CENTER", 0, 1) + closeTxt:SetText("x") + closeTxt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) + closeBtn:SetFontString(closeTxt) + closeBtn:SetScript("OnEnter", function() closeTxt:SetTextColor(1, 0.4, 0.5) end) + closeBtn:SetScript("OnLeave", function() closeTxt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) end) + closeBtn:SetScript("OnClick", function() + SFrames.Whisper:RemoveContact(this:GetParent().contact) + end) + btn.closeBtn = closeBtn + + local unreadTxt = btn:CreateFontString(nil, "OVERLAY") + unreadTxt:SetFont(fontPath, 10, "OUTLINE") + unreadTxt:SetPoint("RIGHT", closeBtn, "LEFT", -2, 0) + unreadTxt:SetTextColor(1, 0.4, 0.4) + btn.unreadTxt = unreadTxt + + btn:SetScript("OnClick", function() + SFrames.Whisper:SelectContact(this.contact) + end) + + btn:SetScript("OnEnter", function() + if this.contact ~= SFrames.Whisper.activeContact then + this:SetBackdropColor(CFG_THEME.buttonHoverBg[1], CFG_THEME.buttonHoverBg[2], CFG_THEME.buttonHoverBg[3], CFG_THEME.buttonHoverBg[4]) + end + end) + btn:SetScript("OnLeave", function() + if this.contact ~= SFrames.Whisper.activeContact then + this:SetBackdropColor(0,0,0,0) + end + end) + + if not self.contactButtons then self.contactButtons = {} end + self.contactButtons[i] = btn + end + + btn.contact = contact + btn:SetPoint("TOPLEFT", scrollChild, "TOPLEFT", 5, yOffset) + btn.txt:SetText(contact) + + local unreads = self.unreadCount[contact] or 0 + if unreads > 0 then + btn.unreadTxt:SetText("("..unreads..")") + btn.txt:SetTextColor(1, 0.8, 0.2) + else + btn.unreadTxt:SetText("") + btn.txt:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + end + + if contact == self.activeContact then + btn:SetBackdropColor(CFG_THEME.buttonBg[1], CFG_THEME.buttonBg[2], CFG_THEME.buttonBg[3], CFG_THEME.buttonBg[4]) + btn:SetBackdropBorderColor(CFG_THEME.buttonBorder[1], CFG_THEME.buttonBorder[2], CFG_THEME.buttonBorder[3], CFG_THEME.buttonBorder[4]) + else + btn:SetBackdropColor(0,0,0,0) + btn:SetBackdropBorderColor(0,0,0,0) + end + + btn:Show() + yOffset = yOffset - 26 + end + + scrollChild:SetHeight(math.abs(yOffset)) + self.frame.contactList:UpdateScrollChildRect() + local maxScroll = math.max(0, math.abs(yOffset) - 330) + local slider = _G["SFramesWhisperContactScrollScrollBar"] + if slider then + slider:SetMinMaxValues(0, maxScroll) + end +end + +function SFrames.Whisper:UpdateMessages() + if not self.frame or not self.frame.messageScroll then return end + + local scrollChild = self.frame.messageScroll.scrollChild + if self.msgLabels then + for i, fs in ipairs(self.msgLabels) do + fs:Hide() + end + end + if self.msgCopyBtns then + for i, btn in ipairs(self.msgCopyBtns) do + btn:Hide() + end + end + + if not self.activeContact then return end + local messages = self.history[self.activeContact] or {} + + local yOffset = -5 + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + if not self.msgLabels then self.msgLabels = {} end + if not self.msgCopyBtns then self.msgCopyBtns = {} end + + for i, msg in ipairs(messages) do + local fs = self.msgLabels[i] + if not fs then + fs = scrollChild:CreateFontString(nil, "OVERLAY") + fs:SetFont(fontPath, 13, "OUTLINE") + fs:SetJustifyH("LEFT") + fs:SetWidth(380) + if fs.EnableMouse then fs:EnableMouse(true) end + self.msgLabels[i] = fs + end + + local btn = self.msgCopyBtns[i] + if not btn then + btn = CreateFrame("Button", nil, scrollChild) + btn:SetWidth(20) + btn:SetHeight(16) + local txt = btn:CreateFontString(nil, "OVERLAY") + txt:SetFont(fontPath, 13, "OUTLINE") + txt:SetPoint("CENTER", btn, "CENTER", 0, 0) + txt:SetText("[+]") + txt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) + btn:SetFontString(txt) + + btn:SetScript("OnEnter", function() txt:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) end) + btn:SetScript("OnLeave", function() txt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) end) + btn:SetScript("OnClick", function() + if SFrames and SFrames.Chat and SFrames.Chat.OpenMessageContextMenu then + SFrames.Chat:OpenMessageContextMenu("whisper", this.rawText, this.senderName) + end + end) + self.msgCopyBtns[i] = btn + end + + local color = msg.isMe and "|cff66ccff" or "|cffffbbee" + local nameStr = msg.isMe and "我" or self.activeContact + local textStr = string.format("%s[%s] %s:|r %s", color, msg.time, nameStr, msg.text) + + if msg.translated then + textStr = textStr .. "\n|cffaaaaaa" .. msg.translated .. "|r" + end + + btn.rawText = msg.text + btn.senderName = nameStr + btn:SetPoint("TOPLEFT", scrollChild, "TOPLEFT", 5, yOffset) + btn:Show() + + fs:SetText(textStr) + fs:SetPoint("TOPLEFT", scrollChild, "TOPLEFT", 28, yOffset) + fs:Show() + + yOffset = yOffset - fs:GetHeight() - 8 + end + + scrollChild:SetHeight(math.abs(yOffset)) + self.frame.messageScroll:UpdateScrollChildRect() + local maxScroll = math.max(0, math.abs(yOffset) - 270) + local slider = _G["SFramesWhisperMessageScrollScrollBar"] + if slider then + slider:SetMinMaxValues(0, maxScroll) + slider:SetValue(maxScroll) + end + self.frame.messageScroll:SetVerticalScroll(maxScroll) +end + +function SFrames.Whisper:EnsureFrame() + if self.frame then return end + + local fontPath = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + local f = CreateFrame("Frame", "SFramesWhisperContainer", UIParent) + f:SetWidth(580) + f:SetHeight(380) + f:SetPoint("CENTER", UIParent, "CENTER", 0, 100) + f:SetFrameStrata("HIGH") + f:SetMovable(true) + f:EnableMouse(true) + f:RegisterForDrag("LeftButton") + f:SetScript("OnDragStart", function() this:StartMoving() end) + f:SetScript("OnDragStop", function() this:StopMovingOrSizing() end) + + if not self.enterHooked then + self.enterHooked = true + local orig_ChatFrame_OpenChat = ChatFrame_OpenChat + if orig_ChatFrame_OpenChat then + ChatFrame_OpenChat = function(text, chatFrame) + if SFrames and SFrames.Whisper and SFrames.Whisper.frame and SFrames.Whisper.frame:IsShown() and (not text or text == "") then + SFrames.Whisper.frame.editBox:SetFocus() + return + end + orig_ChatFrame_OpenChat(text, chatFrame) + end + end + end + + table.insert(UISpecialFrames, "SFramesWhisperContainer") + + SetRoundBackdrop(f, CFG_THEME.panelBg, CFG_THEME.panelBorder) + CreateShadow(f, 5) + + local titleIcon = SFrames:CreateIcon(f, "chat", 14) + titleIcon:SetDrawLayer("OVERLAY") + titleIcon:SetPoint("TOPLEFT", f, "TOPLEFT", 15, -12) + titleIcon:SetVertexColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + local title = f:CreateFontString(nil, "OVERLAY") + title:SetFont(fontPath, 14, "OUTLINE") + title:SetPoint("LEFT", titleIcon, "RIGHT", 4, 0) + title:SetText("私聊对话管理") + title:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) + + local close = CreateFrame("Button", nil, f) + close:SetWidth(18) + close:SetHeight(18) + close:SetPoint("TOPRIGHT", f, "TOPRIGHT", -8, -8) + close:SetFrameLevel(f:GetFrameLevel() + 3) + SetRoundBackdrop(close, CFG_THEME.buttonDownBg or { 0.35, 0.06, 0.06, 0.85 }, CFG_THEME.buttonBorder or { 0.45, 0.1, 0.1, 0.6 }) + local closeIco = SFrames:CreateIcon(close, "close", 12) + closeIco:SetDrawLayer("OVERLAY") + closeIco:SetPoint("CENTER", close, "CENTER", 0, 0) + closeIco:SetVertexColor(1, 0.7, 0.7) + close:SetScript("OnClick", function() f:Hide() end) + close:SetScript("OnEnter", function() + local h = CFG_THEME.buttonHoverBg or { 0.55, 0.1, 0.1, 0.95 } + local hb = CFG_THEME.btnHoverBd or { 0.65, 0.15, 0.15, 0.9 } + this:SetBackdropColor(h[1], h[2], h[3], h[4] or 0.95) + this:SetBackdropBorderColor(hb[1], hb[2], hb[3], hb[4] or 0.9) + end) + close:SetScript("OnLeave", function() + local d = CFG_THEME.buttonDownBg or { 0.35, 0.06, 0.06, 0.85 } + local db = CFG_THEME.buttonBorder or { 0.45, 0.1, 0.1, 0.6 } + this:SetBackdropColor(d[1], d[2], d[3], d[4] or 0.85) + this:SetBackdropBorderColor(db[1], db[2], db[3], db[4] or 0.6) + end) + + -- Contact List + local contactList = CreateFrame("ScrollFrame", "SFramesWhisperContactScroll", f, "UIPanelScrollFrameTemplate") + contactList:SetWidth(130) + contactList:SetHeight(330) + contactList:SetPoint("TOPLEFT", f, "TOPLEFT", 10, -40) + SetRoundBackdrop(contactList, CFG_THEME.listBg, CFG_THEME.listBorder) + + local contactChild = CreateFrame("Frame", nil, contactList) + contactChild:SetWidth(130) + contactChild:SetHeight(10) + contactList:SetScrollChild(contactChild) + contactList.scrollChild = contactChild + f.contactList = contactList + + -- Apply Nanami-UI scrollbar styling + local contactSlider = _G["SFramesWhisperContactScrollScrollBar"] + if contactSlider then + contactSlider:SetWidth(12) + local regions = { contactSlider:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.GetObjectType and region:GetObjectType() == "Texture" then + region:SetTexture(nil) + end + end + local track = contactSlider:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetPoint("TOPLEFT", contactSlider, "TOPLEFT", 3, 0) + track:SetPoint("BOTTOMRIGHT", contactSlider, "BOTTOMRIGHT", -3, 0) + track:SetVertexColor(0.22, 0.12, 0.18, 0.9) + + if contactSlider.SetThumbTexture then + contactSlider:SetThumbTexture("Interface\\Buttons\\WHITE8X8") + end + local thumb = contactSlider.GetThumbTexture and contactSlider:GetThumbTexture() + if thumb then + thumb:SetWidth(8) + thumb:SetHeight(20) + thumb:SetVertexColor(0.85, 0.55, 0.70, 0.95) + end + + local upBtn = _G["SFramesWhisperContactScrollScrollBarScrollUpButton"] + local downBtn = _G["SFramesWhisperContactScrollScrollBarScrollDownButton"] + if upBtn then upBtn:Hide() end + if downBtn then downBtn:Hide() end + + contactSlider:ClearAllPoints() + contactSlider:SetPoint("TOPRIGHT", contactList, "TOPRIGHT", -2, -6) + contactSlider:SetPoint("BOTTOMRIGHT", contactList, "BOTTOMRIGHT", -2, 6) + end + + -- Message List + local messageScroll = CreateFrame("ScrollFrame", "SFramesWhisperMessageScroll", f, "UIPanelScrollFrameTemplate") + messageScroll:SetWidth(405) + messageScroll:SetHeight(270) + messageScroll:SetPoint("TOPLEFT", contactList, "TOPRIGHT", 5, 0) + SetRoundBackdrop(messageScroll, CFG_THEME.listBg, CFG_THEME.listBorder) + + local messageChild = CreateFrame("Frame", nil, messageScroll) + messageChild:SetWidth(405) + messageChild:SetHeight(10) + messageChild:EnableMouse(true) + -- Hyperlink 脚本仅部分帧类型支持,pcall 防止不支持的客户端报错 + pcall(function() + messageChild:SetScript("OnHyperlinkClick", function() + local link = arg1 + if not link then return end + if IsShiftKeyDown() then + if ChatFrameEditBox and ChatFrameEditBox:IsShown() then + ChatFrameEditBox:Insert(link) + elseif SFrames.Whisper.frame and SFrames.Whisper.frame.editBox then + SFrames.Whisper.frame.editBox:Insert(link) + end + else + pcall(function() SetItemRef(link, arg2, arg3) end) + end + end) + end) + pcall(function() + messageChild:SetScript("OnHyperlinkEnter", function() + local link = arg1 + if not link then return end + GameTooltip:SetOwner(UIParent, "ANCHOR_CURSOR") + local ok = pcall(function() GameTooltip:SetHyperlink(link) end) + if ok then + GameTooltip:Show() + else + GameTooltip:Hide() + end + end) + end) + pcall(function() + messageChild:SetScript("OnHyperlinkLeave", function() + GameTooltip:Hide() + end) + end) + messageScroll:SetScrollChild(messageChild) + messageScroll.scrollChild = messageChild + f.messageScroll = messageScroll + + local messageSlider = _G["SFramesWhisperMessageScrollScrollBar"] + if messageSlider then + messageSlider:SetWidth(12) + local regions = { messageSlider:GetRegions() } + for i = 1, table.getn(regions) do + local region = regions[i] + if region and region.GetObjectType and region:GetObjectType() == "Texture" then + region:SetTexture(nil) + end + end + local track = messageSlider:CreateTexture(nil, "BACKGROUND") + track:SetTexture("Interface\\Buttons\\WHITE8X8") + track:SetPoint("TOPLEFT", messageSlider, "TOPLEFT", 3, 0) + track:SetPoint("BOTTOMRIGHT", messageSlider, "BOTTOMRIGHT", -3, 0) + track:SetVertexColor(0.22, 0.12, 0.18, 0.9) + + if messageSlider.SetThumbTexture then + messageSlider:SetThumbTexture("Interface\\Buttons\\WHITE8X8") + end + local thumb = messageSlider.GetThumbTexture and messageSlider:GetThumbTexture() + if thumb then + thumb:SetWidth(8) + thumb:SetHeight(20) + thumb:SetVertexColor(0.85, 0.55, 0.70, 0.95) + end + + local upBtn = _G["SFramesWhisperMessageScrollScrollBarScrollUpButton"] + local downBtn = _G["SFramesWhisperMessageScrollScrollBarScrollDownButton"] + if upBtn then upBtn:Hide() end + if downBtn then downBtn:Hide() end + + messageSlider:ClearAllPoints() + messageSlider:SetPoint("TOPRIGHT", messageScroll, "TOPRIGHT", -2, -22) + messageSlider:SetPoint("BOTTOMRIGHT", messageScroll, "BOTTOMRIGHT", -2, 22) + + local topBtn = CreateFrame("Button", nil, messageScroll) + topBtn:SetWidth(12) + topBtn:SetHeight(12) + topBtn:SetPoint("BOTTOM", messageSlider, "TOP", 0, 4) + local topTxt = topBtn:CreateFontString(nil, "OVERLAY") + topTxt:SetFont(fontPath, 11, "OUTLINE") + topTxt:SetPoint("CENTER", topBtn, "CENTER", 0, 1) + topTxt:SetText("▲") + topTxt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) + topBtn:SetFontString(topTxt) + topBtn:SetScript("OnEnter", function() topTxt:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) end) + topBtn:SetScript("OnLeave", function() topTxt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) end) + topBtn:SetScript("OnClick", function() + messageSlider:SetValue(0) + end) + + local bottomBtn = CreateFrame("Button", nil, messageScroll) + bottomBtn:SetWidth(12) + bottomBtn:SetHeight(12) + bottomBtn:SetPoint("TOP", messageSlider, "BOTTOM", 0, -4) + local botTxt = bottomBtn:CreateFontString(nil, "OVERLAY") + botTxt:SetFont(fontPath, 11, "OUTLINE") + botTxt:SetPoint("CENTER", bottomBtn, "CENTER", 0, -1) + botTxt:SetText("▼") + botTxt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) + bottomBtn:SetFontString(botTxt) + bottomBtn:SetScript("OnEnter", function() botTxt:SetTextColor(CFG_THEME.title[1], CFG_THEME.title[2], CFG_THEME.title[3]) end) + bottomBtn:SetScript("OnLeave", function() botTxt:SetTextColor(CFG_THEME.dimText[1], CFG_THEME.dimText[2], CFG_THEME.dimText[3]) end) + bottomBtn:SetScript("OnClick", function() + local _, maxVal = messageSlider:GetMinMaxValues() + messageSlider:SetValue(maxVal) + end) + + if messageScroll.EnableMouseWheel then + messageScroll:EnableMouseWheel(true) + messageScroll:SetScript("OnMouseWheel", function() + local delta = arg1 + local _, maxVal = messageSlider:GetMinMaxValues() + local val = messageSlider:GetValue() - delta * 40 + if val < 0 then val = 0 end + if val > maxVal then val = maxVal end + messageSlider:SetValue(val) + end) + end + end + + local contactSlider = _G["SFramesWhisperContactScrollScrollBar"] + if contactList and contactSlider and contactList.EnableMouseWheel then + contactList:EnableMouseWheel(true) + contactList:SetScript("OnMouseWheel", function() + local delta = arg1 + local _, maxVal = contactSlider:GetMinMaxValues() + local val = contactSlider:GetValue() - delta * 30 + if val < 0 then val = 0 end + if val > maxVal then val = maxVal end + contactSlider:SetValue(val) + end) + end + + -- EditBox for replying + local editBox = CreateFrame("EditBox", "SFramesWhisperEditBox", f, "InputBoxTemplate") + editBox:SetWidth(405) + editBox:SetHeight(20) + editBox:SetPoint("TOPLEFT", messageScroll, "BOTTOMLEFT", 0, -10) + editBox:SetAutoFocus(false) + editBox:SetFont(fontPath, 13, "OUTLINE") + + local translateCheck = CreateFrame("CheckButton", "SFramesWhisperTranslateCheck", f, "UICheckButtonTemplate") + translateCheck:SetWidth(24) + translateCheck:SetHeight(24) + translateCheck:SetPoint("TOPLEFT", editBox, "BOTTOMLEFT", -5, -6) + + local txt = translateCheck:CreateFontString(nil, "OVERLAY") + txt:SetFont(fontPath, 11, "OUTLINE") + txt:SetPoint("LEFT", translateCheck, "RIGHT", 2, 0) + txt:SetText("发前自动翻译 (译后可修改再回车)") + txt:SetTextColor(CFG_THEME.text[1], CFG_THEME.text[2], CFG_THEME.text[3]) + + -- Hide the default text and reskin the button if you have defined StyleCfgCheck inside your environment + if _G["SFramesWhisperTranslateCheckText"] then + _G["SFramesWhisperTranslateCheckText"]:Hide() + end + -- Reskin checkbox + local function StyleCheck(cb) + local box = CreateFrame("Frame", nil, cb) + box:SetPoint("TOPLEFT", cb, "TOPLEFT", 2, -2) + box:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", -2, 2) + local boxLevel = (cb:GetFrameLevel() or 1) - 1 + if boxLevel < 0 then boxLevel = 0 end + box:SetFrameLevel(boxLevel) + EnsureBackdrop(box) + if box.SetBackdropColor then + box:SetBackdropColor(CFG_THEME.buttonBg[1], CFG_THEME.buttonBg[2], CFG_THEME.buttonBg[3], CFG_THEME.buttonBg[4]) + end + if box.SetBackdropBorderColor then + box:SetBackdropBorderColor(CFG_THEME.buttonBorder[1], CFG_THEME.buttonBorder[2], CFG_THEME.buttonBorder[3], CFG_THEME.buttonBorder[4]) + end + cb.sfBox = box + + if cb.GetNormalTexture and cb:GetNormalTexture() then cb:GetNormalTexture():Hide() end + if cb.GetPushedTexture and cb:GetPushedTexture() then cb:GetPushedTexture():Hide() end + if cb.GetHighlightTexture and cb:GetHighlightTexture() then cb:GetHighlightTexture():Hide() end + + if cb.SetCheckedTexture then cb:SetCheckedTexture("Interface\\Buttons\\WHITE8X8") end + local checked = cb.GetCheckedTexture and cb:GetCheckedTexture() + if checked then + checked:ClearAllPoints() + checked:SetPoint("TOPLEFT", cb, "TOPLEFT", 5, -5) + checked:SetPoint("BOTTOMRIGHT", cb, "BOTTOMRIGHT", -5, 5) + checked:SetVertexColor(CFG_THEME.checkFill[1], CFG_THEME.checkFill[2], CFG_THEME.checkFill[3], CFG_THEME.checkFill[4]) + end + end + StyleCheck(translateCheck) + + f.translateCheck = translateCheck + + local function SendReply() + if SFrames.Whisper.isTranslating then return end + + local text = editBox:GetText() + if not text or text == "" or not SFrames.Whisper.activeContact then return end + + if f.translateCheck and f.translateCheck:GetChecked() then + if text == SFrames.Whisper.lastTranslation then + SendChatMessage(text, "WHISPER", nil, SFrames.Whisper.activeContact) + editBox:SetText("") + editBox:ClearFocus() + SFrames.Whisper.lastTranslation = nil + else + local targetLang = "en" + if not string.find(text, "[\128-\255]") then + targetLang = "zh" + end + + if _G.STranslateAPI and _G.STranslateAPI.IsReady and _G.STranslateAPI.IsReady() then + SFrames.Whisper.isTranslating = true + editBox:SetText("翻译中...") + _G.STranslateAPI.Translate(text, "auto", targetLang, function(result, err, meta) + SFrames.Whisper.isTranslating = false + if result then + editBox:SetText(result) + SFrames.Whisper.lastTranslation = result + editBox:SetFocus() + else + editBox:SetText(text) + DEFAULT_CHAT_FRAME:AddMessage("|cffff3333[私聊翻译失败]|r " .. tostring(err)) + end + end, "Nanami-UI") + else + DEFAULT_CHAT_FRAME:AddMessage("|cffff3333[Nanami-UI] STranslate插件未加载|r") + SFrames.Whisper.lastTranslation = text + end + end + else + SendChatMessage(text, "WHISPER", nil, SFrames.Whisper.activeContact) + editBox:SetText("") + editBox:ClearFocus() + end + end + + editBox:SetScript("OnEnterPressed", SendReply) + editBox:SetScript("OnEscapePressed", function() this:ClearFocus() end) + f.editBox = editBox + + local sendBtn = CreateFrame("Button", nil, f) + sendBtn:SetWidth(60) + sendBtn:SetHeight(24) + sendBtn:SetPoint("TOPRIGHT", editBox, "BOTTOMRIGHT", 0, -5) + StyleActionButton(sendBtn, "发送") + sendBtn:SetScript("OnClick", SendReply) + + f:Hide() + self.frame = f +end + +function SFrames.Whisper:Toggle() + self:EnsureFrame() + if self.frame:IsShown() then + self.frame:Hide() + else + self.frame:Show() + self:UpdateContacts() + if self.contacts[1] and not self.activeContact then + self:SelectContact(self.contacts[1]) + elseif self.activeContact then + self:SelectContact(self.activeContact) + end + end +end + +-- Hook Events +local eventFrame = CreateFrame("Frame") +eventFrame:RegisterEvent("CHAT_MSG_WHISPER") +eventFrame:RegisterEvent("CHAT_MSG_WHISPER_INFORM") +eventFrame:RegisterEvent("PLAYER_LOGIN") +eventFrame:SetScript("OnEvent", function() + if event == "PLAYER_LOGIN" then + SFrames.Whisper:LoadCache() + return + end + + local text = arg1 + local sender = arg2 + if not sender or sender == "" then return end + + sender = string.gsub(sender, "-.*", "") -- remove realm name if attached + + if event == "CHAT_MSG_WHISPER" then + SFrames.Whisper:AddMessage(sender, text, false) + elseif event == "CHAT_MSG_WHISPER_INFORM" then + SFrames.Whisper:AddMessage(sender, text, true) + end +end) diff --git a/WorldMap.lua b/WorldMap.lua new file mode 100644 index 0000000..3cd2b80 --- /dev/null +++ b/WorldMap.lua @@ -0,0 +1,1941 @@ +-------------------------------------------------------------------------------- +-- Nanami-UI: WorldMap Module (WorldMap.lua) +-- Full Nanami-UI themed world map: windowed, dark pink-purple skin, +-- hides all Blizzard decorations, custom title bar + close button, +-- brute-force tooltip theming while the map is open. +-------------------------------------------------------------------------------- + +SFrames = SFrames or {} +SFrames.WorldMap = {} +local WM = SFrames.WorldMap + +-------------------------------------------------------------------------------- +-- Nanami theme constants (matches SocialUI / ConfigUI / QuestUI) +-------------------------------------------------------------------------------- +local PANEL_BACKDROP = { + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, +} +local _A = SFrames.ActiveTheme + +local TOOLTIP_BACKDROP = { + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 14, + insets = { left = 3, right = 3, top = 3, bottom = 3 }, +} + +-------------------------------------------------------------------------------- +-- Config +-------------------------------------------------------------------------------- +function WM:GetConfig() + SFramesDB = SFramesDB or {} + if type(SFramesDB.WorldMap) ~= "table" then + SFramesDB.WorldMap = { enabled = true, scale = 0.85 } + end + if SFramesDB.WorldMap.enabled == nil then + SFramesDB.WorldMap.enabled = true + end + return SFramesDB.WorldMap +end + +-------------------------------------------------------------------------------- +-- HookScript helper +-------------------------------------------------------------------------------- +local function HookScript(frame, script, fn) + local prev = frame:GetScript(script) + frame:SetScript(script, function(a1,a2,a3,a4,a5,a6,a7,a8,a9) + if prev then prev(a1,a2,a3,a4,a5,a6,a7,a8,a9) end + fn(a1,a2,a3,a4,a5,a6,a7,a8,a9) + end) +end + +-------------------------------------------------------------------------------- +-- 1. Hide Blizzard Decorations +-- Called at init AND on every WorldMapFrame:OnShow to counter Blizzard resets +-------------------------------------------------------------------------------- +local function NukeFrame(f) + if not f then return end + f:Hide() + f:SetAlpha(0) + f:EnableMouse(false) + f:ClearAllPoints() + f:SetPoint("TOPLEFT", UIParent, "TOPLEFT", -9999, 9999) + f:SetWidth(1) + f:SetHeight(1) + if not f._nanamiNuked then + f._nanamiNuked = true + f.Show = function(self) self:Hide() end + if f.SetScript then + f:SetScript("OnShow", function() this:Hide() end) + end + end +end + +local function HideAllRegions(frame) + if not frame or not frame.GetRegions then return end + local regions = { frame:GetRegions() } + for _, r in ipairs(regions) do + if r and r.Hide then r:Hide() end + end +end + +local blizzHooked = false + +local function NukeBorderChildren(border) + if not border or not border.GetChildren then return end + local children = { border:GetChildren() } + for _, child in ipairs(children) do + local name = child.GetName and child:GetName() or "" + local isDropDown = name ~= "" and string.find(name, "DropDown") + if not isDropDown then + NukeFrame(child) + end + end +end + +local function HideBlizzardDecorations() + if BlackoutWorld then BlackoutWorld:Hide() end + + local _G = getfenv(0) + + local framesToNuke = { + "WorldMapFrameCloseButton", + "WorldMapFrameSizeUpButton", + "WorldMapFrameSizeDownButton", + } + for _, name in ipairs(framesToNuke) do + NukeFrame(_G[name]) + end + + HideAllRegions(WorldMapFrame) + + local borderNames = { + "WorldMapFrameMiniBorderLeft", + "WorldMapFrameMiniBorderRight", + } + for _, name in ipairs(borderNames) do + local border = _G[name] + if border then + HideAllRegions(border) + NukeBorderChildren(border) + border:EnableMouse(false) + + if not blizzHooked then + local oldShow = border.Show + if oldShow then + border.Show = function(self) + oldShow(self) + HideAllRegions(self) + NukeBorderChildren(self) + self:EnableMouse(false) + end + end + end + end + end + + if WorldMapFrameTitle then + WorldMapFrameTitle:Hide() + end + + blizzHooked = true +end + +-------------------------------------------------------------------------------- +-- 2. Create Nanami Skin +-------------------------------------------------------------------------------- +local skinFrame, titleBar, titleText, closeBtn, coordText, mouseCoordText, coordOverlay + +local function CreateNanamiSkin() + if skinFrame then return end + + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + skinFrame = CreateFrame("Frame", "NanamiWorldMapSkin", WorldMapFrame) + skinFrame:SetFrameLevel(WorldMapFrame:GetFrameLevel()) + skinFrame:SetAllPoints(WorldMapFrame) + skinFrame:SetBackdrop(PANEL_BACKDROP) + skinFrame:SetBackdropColor(unpack(_A.panelBg)) + skinFrame:SetBackdropBorderColor(unpack(_A.panelBorder)) + + titleBar = CreateFrame("Frame", nil, skinFrame) + titleBar:SetHeight(26) + titleBar:SetPoint("TOPLEFT", skinFrame, "TOPLEFT", 4, -4) + titleBar:SetPoint("TOPRIGHT", skinFrame, "TOPRIGHT", -4, -4) + titleBar:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + titleBar:SetBackdropColor(unpack(_A.headerBg)) + titleBar:SetBackdropBorderColor(unpack(_A.panelBorder)) + + local titleIco = SFrames:CreateIcon(titleBar, "worldmap", 14) + titleIco:SetDrawLayer("OVERLAY") + titleIco:SetPoint("LEFT", titleBar, "LEFT", 10, 0) + titleIco:SetVertexColor(unpack(_A.title)) + + titleText = titleBar:CreateFontString(nil, "OVERLAY") + titleText:SetFont(font, 13, "OUTLINE") + titleText:SetPoint("LEFT", titleIco, "RIGHT", 5, 0) + titleText:SetTextColor(unpack(_A.title)) + titleText:SetText("世界地图") + + local hintText = titleBar:CreateFontString(nil, "OVERLAY") + hintText:SetFont(font, 10, "") + hintText:SetPoint("RIGHT", titleBar, "RIGHT", -40, 0) + hintText:SetTextColor(unpack(_A.dimText)) + hintText:SetText("Ctrl+滚轮缩放 | Shift+滚轮透明度 | Ctrl+左键标记") + + closeBtn = CreateFrame("Button", nil, titleBar) + closeBtn:SetWidth(22) + closeBtn:SetHeight(22) + closeBtn:SetPoint("RIGHT", titleBar, "RIGHT", -2, 0) + closeBtn:SetBackdrop({ + bgFile = "Interface\\Buttons\\WHITE8X8", + edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 1, + insets = { left = 1, right = 1, top = 1, bottom = 1 }, + }) + closeBtn:SetBackdropColor(unpack(_A.buttonDownBg)) + closeBtn:SetBackdropBorderColor(unpack(_A.btnBorder)) + + local closeIcon = closeBtn:CreateTexture(nil, "OVERLAY") + closeIcon:SetTexture("Interface\\AddOns\\Nanami-UI\\img\\icon") + closeIcon:SetTexCoord(0.25, 0.375, 0, 0.125) + closeIcon:SetPoint("CENTER", 0, 0) + closeIcon:SetWidth(14) + closeIcon:SetHeight(14) + + closeBtn:SetScript("OnClick", function() + WorldMapFrame:Hide() + end) + closeBtn:SetScript("OnEnter", function() + this:SetBackdropColor(unpack(_A.btnHoverBg)) + this:SetBackdropBorderColor(unpack(_A.btnHoverBd)) + end) + closeBtn:SetScript("OnLeave", function() + this:SetBackdropColor(unpack(_A.buttonDownBg)) + this:SetBackdropBorderColor(unpack(_A.btnBorder)) + end) + + -- High-level overlay for coordinates so they render above map content + coordOverlay = CreateFrame("Frame", "NanamiWorldMapCoordOverlay", WorldMapFrame) + coordOverlay:SetAllPoints(skinFrame) + coordOverlay:SetFrameStrata("TOOLTIP") + coordOverlay:SetFrameLevel(250) + coordOverlay:EnableMouse(false) + + coordText = coordOverlay:CreateFontString(nil, "OVERLAY") + coordText:SetFont(font, 12, "OUTLINE") + coordText:SetPoint("BOTTOMLEFT", skinFrame, "BOTTOMLEFT", 12, 6) + coordText:SetTextColor(unpack(_A.title)) + coordText:SetText("") + + mouseCoordText = coordOverlay:CreateFontString(nil, "OVERLAY") + mouseCoordText:SetFont(font, 12, "OUTLINE") + mouseCoordText:SetPoint("BOTTOMRIGHT", skinFrame, "BOTTOMRIGHT", -12, 6) + mouseCoordText:SetTextColor(unpack(_A.dimText)) + mouseCoordText:SetText("") +end + +local function UpdateTitle() + if not titleText then return end + local zoneName = GetZoneText and GetZoneText() or "" + local subZone = GetSubZoneText and GetSubZoneText() or "" + local display = zoneName + if subZone ~= "" and subZone ~= zoneName then + display = zoneName .. " - " .. subZone + end + if display == "" then display = "世界地图" end + titleText:SetText(display) +end + +local function UpdateCoords() + if not coordText then return end + local x, y = GetPlayerMapPosition("player") + if x and y and (x > 0 or y > 0) then + coordText:SetText(string.format("玩家: %.1f, %.1f", x * 100, y * 100)) + else + coordText:SetText("") + end +end + +local function UpdateMouseCoords() + if not mouseCoordText or not WorldMapButton then return end + if not WorldMapFrame or not WorldMapFrame:IsVisible() then + mouseCoordText:SetText("") + return + end + + local cx, cy = GetCursorPosition() + if not cx or not cy then + mouseCoordText:SetText("") + return + end + + local scale = WorldMapButton:GetEffectiveScale() + local left = WorldMapButton:GetLeft() + local top = WorldMapButton:GetTop() + local w = WorldMapButton:GetWidth() + local h = WorldMapButton:GetHeight() + + if not left or not top or not w or not h or w == 0 or h == 0 then + mouseCoordText:SetText("") + return + end + + local mx = (cx / scale - left) / w + local my = (top - cy / scale) / h + + if mx >= 0 and mx <= 1 and my >= 0 and my <= 1 then + mouseCoordText:SetText(string.format("鼠标: %.1f, %.1f", mx * 100, my * 100)) + else + mouseCoordText:SetText("") + end +end + +-------------------------------------------------------------------------------- +-- 3. Tooltip theming +-- SetBackdrop on scaled child frames is unreliable in WoW 1.12. +-- Approach: use a SEPARATE frame parented to UIParent (outside the +-- WorldMapFrame scale chain) positioned exactly behind whichever tooltip +-- is currently visible. This frame has its own backdrop at TOOLTIP strata. +-- Also hook WorldMapTooltip:Show to try SetBackdrop as secondary attempt. +-------------------------------------------------------------------------------- +local ttBG + +local TT_PAD = 4 + +local function CreateTooltipBG() + if ttBG then return end + ttBG = CreateFrame("Frame", "NanamiMapTTBG", UIParent) + ttBG:SetFrameStrata("FULLSCREEN_DIALOG") + ttBG:SetFrameLevel(255) + ttBG:SetBackdrop({ + bgFile = "Interface\\Tooltips\\UI-Tooltip-Background", + edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border", + tile = true, tileSize = 16, edgeSize = 16, + insets = { left = 4, right = 4, top = 4, bottom = 4 }, + }) + ttBG:SetBackdropColor(unpack(_A.panelBg)) + ttBG:SetBackdropBorderColor(unpack(_A.panelBorder)) + ttBG:Hide() +end + +local function PositionTTBG(tip) + if not ttBG then return end + if not tip or not tip:IsVisible() then + ttBG:Hide() + return + end + + local l = tip:GetLeft() + local r = tip:GetRight() + local t = tip:GetTop() + local b = tip:GetBottom() + if not l or not r or not t or not b then + ttBG:Hide() + return + end + + local tipScale = tip:GetEffectiveScale() + local bgScale = ttBG:GetEffectiveScale() + local s = tipScale / bgScale + + ttBG:ClearAllPoints() + ttBG:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", l * s - TT_PAD, t * s + TT_PAD) + ttBG:SetPoint("BOTTOMRIGHT", UIParent, "BOTTOMLEFT", r * s + TT_PAD, b * s - TT_PAD) + ttBG:Show() +end + +local function HideTTBG() + if ttBG then ttBG:Hide() end +end + +local function RaiseTooltipStrata(tip) + if not tip then return end + tip:SetFrameStrata("TOOLTIP") +end + +local function HookTooltipShow(tip) + if not tip or tip._nanamiShowHooked then return end + tip._nanamiShowHooked = true + local origShow = tip.Show + tip.Show = function(self) + origShow(self) + if WorldMapFrame and WorldMapFrame:IsVisible() then + self:SetFrameStrata("TOOLTIP") + self:SetBackdrop(TOOLTIP_BACKDROP) + self:SetBackdropColor(unpack(_A.panelBg)) + self:SetBackdropBorderColor(unpack(_A.panelBorder)) + end + end +end + +-------------------------------------------------------------------------------- +-- 4. Per-frame updater +-------------------------------------------------------------------------------- +local elapsed = 0 +local function OnFrameUpdate() + if not WorldMapFrame or not WorldMapFrame:IsShown() then + HideTTBG() + return + end + + local activeTip = nil + if WorldMapTooltip and WorldMapTooltip:IsVisible() then + activeTip = WorldMapTooltip + elseif GameTooltip and GameTooltip:IsVisible() then + activeTip = GameTooltip + end + + if activeTip then + PositionTTBG(activeTip) + RaiseTooltipStrata(activeTip) + activeTip:SetBackdrop(TOOLTIP_BACKDROP) + activeTip:SetBackdropColor(unpack(_A.panelBg)) + activeTip:SetBackdropBorderColor(unpack(_A.panelBorder)) + else + HideTTBG() + end + + UpdateMouseCoords() + + elapsed = elapsed + (arg1 or 0) + if elapsed > 0.1 then + elapsed = 0 + UpdateTitle() + UpdateCoords() + HideBlizzardDecorations() + end +end + +-------------------------------------------------------------------------------- +-- 5. Layout +-------------------------------------------------------------------------------- +local function ApplyLayout(cfg) + local s = cfg.scale or 0.85 + WorldMapFrame:SetMovable(true) + WorldMapFrame:EnableMouse(true) + WorldMapFrame:SetScale(s) + WorldMapFrame:ClearAllPoints() + WorldMapFrame:SetPoint("CENTER", UIParent, "CENTER", 0, 30) + WorldMapFrame:SetWidth(WorldMapButton:GetWidth() + 20) + WorldMapFrame:SetHeight(WorldMapButton:GetHeight() + 60) + if BlackoutWorld then + BlackoutWorld:Hide() + end +end + +-------------------------------------------------------------------------------- +-- 6. Window mode setup +-------------------------------------------------------------------------------- +function WM:SetupWindowMode() + if Cartographer or METAMAP_TITLE then return end + + local cfg = self:GetConfig() + + table.insert(UISpecialFrames, "WorldMapFrame") + + local _G = getfenv(0) + _G.ToggleWorldMap = function() + if WorldMapFrame:IsShown() then + WorldMapFrame:Hide() + else + WorldMapFrame:Show() + end + end + + UIPanelWindows["WorldMapFrame"] = { area = "center" } + + HookScript(WorldMapFrame, "OnShow", function() + this:EnableKeyboard(false) + this:EnableMouseWheel(1) + local c = WM:GetConfig() + WorldMapFrame:SetScale(c.scale or 0.85) + WorldMapFrame:SetAlpha(1) + WorldMapFrame:SetFrameStrata("FULLSCREEN_DIALOG") + if BlackoutWorld then BlackoutWorld:Hide() end + HideBlizzardDecorations() + end) + + HookScript(WorldMapFrame, "OnHide", function() + HideTTBG() + end) + + HookScript(WorldMapFrame, "OnMouseWheel", function() + if IsShiftKeyDown() then + local a = WorldMapFrame:GetAlpha() + arg1 / 10 + if a < 0.2 then a = 0.2 end + if a > 1 then a = 1 end + WorldMapFrame:SetAlpha(a) + elseif IsControlKeyDown() then + local oldScale = WorldMapFrame:GetScale() + local newScale = oldScale + arg1 / 10 + if newScale < 0.4 then newScale = 0.4 end + if newScale > 1.5 then newScale = 1.5 end + + local eff = WorldMapFrame:GetEffectiveScale() + local fw = WorldMapFrame:GetWidth() + local fh = WorldMapFrame:GetHeight() + local fl = WorldMapFrame:GetLeft() + local ft = WorldMapFrame:GetTop() + + if fl and ft and fw and fh and eff and eff > 0 then + local scrCX = (fl + fw / 2) * eff + local scrCY = (ft - fh / 2) * eff + WorldMapFrame:SetScale(newScale) + local newEff = newScale * eff / oldScale + WorldMapFrame:ClearAllPoints() + WorldMapFrame:SetPoint("TOPLEFT", UIParent, "BOTTOMLEFT", + scrCX / newEff - fw / 2, + scrCY / newEff + fh / 2) + else + WorldMapFrame:SetScale(newScale) + end + + local c = WM:GetConfig() + c.scale = newScale + end + end) + + HookScript(WorldMapFrame, "OnMouseDown", function() + WorldMapFrame:StartMoving() + end) + + HookScript(WorldMapFrame, "OnMouseUp", function() + WorldMapFrame:StopMovingOrSizing() + end) + + ApplyLayout(cfg) + + local _G2 = getfenv(0) + local origMaximize = _G2.WorldMapFrame_Maximize + local origMinimize = _G2.WorldMapFrame_Minimize + _G2.WorldMapFrame_Maximize = function() + if origMaximize then origMaximize() end + ApplyLayout(WM:GetConfig()) + HideBlizzardDecorations() + end + _G2.WorldMapFrame_Minimize = function() + if origMinimize then origMinimize() end + ApplyLayout(WM:GetConfig()) + HideBlizzardDecorations() + end +end + +-------------------------------------------------------------------------------- +-- 7. Skin World Map Native Controls (Dropdowns, Buttons) +-------------------------------------------------------------------------------- + +local function SkinDropDown(dropdownName) + local _G = getfenv(0) + local dd = _G[dropdownName] + if not dd or dd._nanamiSkinned then return end + dd._nanamiSkinned = true + + for _, suffix in ipairs({ "Left", "Middle", "Right" }) do + local tex = _G[dropdownName .. suffix] + if tex then tex:SetAlpha(0) end + end + + local bg = CreateFrame("Frame", nil, dd) + bg:SetPoint("TOPLEFT", dd, "TOPLEFT", 16, -2) + bg:SetPoint("BOTTOMRIGHT", dd, "BOTTOMRIGHT", -16, 6) + bg:SetFrameLevel(dd:GetFrameLevel()) + bg:SetBackdrop(PANEL_BACKDROP) + bg:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + bg:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + dd._nanamiBG = bg + + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + local text = _G[dropdownName .. "Text"] + if text then + text:SetFont(font, 11, "OUTLINE") + text:SetTextColor(_A.btnText[1], _A.btnText[2], _A.btnText[3]) + end + + local btn = _G[dropdownName .. "Button"] + if btn then + local nt = btn:GetNormalTexture() + if nt then nt:SetVertexColor(_A.title[1], _A.title[2], _A.title[3]) end + local pt = btn:GetPushedTexture() + if pt then pt:SetVertexColor(_A.title[1], _A.title[2], _A.title[3]) end + local dt = btn:GetDisabledTexture() + if dt then dt:SetVertexColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) end + local ht = btn:GetHighlightTexture() + if ht then ht:SetVertexColor(_A.title[1], _A.title[2], _A.title[3], 0.3) end + end +end + +local function SkinDropDownLists() + local _G = getfenv(0) + for i = 1, 3 do + local listName = "DropDownList" .. i + local backdrop = _G[listName .. "Backdrop"] + if backdrop then + backdrop:SetBackdrop(PANEL_BACKDROP) + backdrop:SetBackdropColor(_A.panelBg[1], _A.panelBg[2], _A.panelBg[3], _A.panelBg[4]) + backdrop:SetBackdropBorderColor(_A.panelBorder[1], _A.panelBorder[2], _A.panelBorder[3], _A.panelBorder[4]) + end + local menuBackdrop = _G[listName .. "MenuBackdrop"] + if menuBackdrop then + menuBackdrop:SetBackdrop(PANEL_BACKDROP) + menuBackdrop:SetBackdropColor(_A.panelBg[1], _A.panelBg[2], _A.panelBg[3], _A.panelBg[4]) + menuBackdrop:SetBackdropBorderColor(_A.panelBorder[1], _A.panelBorder[2], _A.panelBorder[3], _A.panelBorder[4]) + end + for j = 1, 30 do + local hlTex = _G[listName .. "Button" .. j .. "Highlight"] + if hlTex and hlTex.SetVertexColor then + hlTex:SetVertexColor(_A.panelBorder[1], _A.panelBorder[2], _A.panelBorder[3], 0.35) + end + end + end +end + +local function SkinNativeButton(btnName, labelOverride) + local _G = getfenv(0) + local btn = _G[btnName] + if not btn or btn._nanamiSkinned then return end + btn._nanamiSkinned = true + + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + local regions = { btn:GetRegions() } + for _, r in ipairs(regions) do + if r and r.GetObjectType and r:GetObjectType() == "Texture" then + local tex = r:GetTexture() + if tex and type(tex) == "string" and (string.find(tex, "UI%-Panel") or string.find(tex, "UI%-DialogBox")) then + r:Hide() + end + end + end + + local nt = btn.GetNormalTexture and btn:GetNormalTexture() + if nt then nt:SetAlpha(0) end + local pt = btn.GetPushedTexture and btn:GetPushedTexture() + if pt then pt:SetAlpha(0) end + local ht = btn.GetHighlightTexture and btn:GetHighlightTexture() + if ht then ht:SetAlpha(0) end + + btn:SetBackdrop(PANEL_BACKDROP) + btn:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + btn:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + + if labelOverride then + local fs = btn:GetFontString() or btn:CreateFontString(nil, "OVERLAY") + fs:SetFont(font, 11, "OUTLINE") + fs:SetText(labelOverride) + fs:SetTextColor(_A.btnText[1], _A.btnText[2], _A.btnText[3]) + fs:SetPoint("CENTER", 0, 0) + elseif btn.GetFontString and btn:GetFontString() then + local fs = btn:GetFontString() + fs:SetFont(font, 11, "OUTLINE") + fs:SetTextColor(_A.btnText[1], _A.btnText[2], _A.btnText[3]) + end + + local prevEnter = btn:GetScript("OnEnter") + local prevLeave = btn:GetScript("OnLeave") + btn:SetScript("OnEnter", function() + if prevEnter then prevEnter() end + this:SetBackdropColor(_A.btnHoverBg[1], _A.btnHoverBg[2], _A.btnHoverBg[3], _A.btnHoverBg[4]) + this:SetBackdropBorderColor(_A.btnHoverBd[1], _A.btnHoverBd[2], _A.btnHoverBd[3], _A.btnHoverBd[4]) + end) + btn:SetScript("OnLeave", function() + if prevLeave then prevLeave() end + this:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + this:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + end) +end + +local ddListHooked = false +local function SkinWorldMapControls() + SkinDropDown("WorldMapContinentDropDown") + SkinDropDown("WorldMapZoneDropDown") + SkinDropDown("WorldMapZoneMinimapDropDown") + + SkinNativeButton("WorldMapZoomOutButton", "缩小") + + SkinDropDownLists() + + if not ddListHooked then + ddListHooked = true + local _G = getfenv(0) + for i = 1, 3 do + local list = _G["DropDownList" .. i] + if list then + local oldShow = list.Show + if oldShow then + list.Show = function(self) + oldShow(self) + SkinDropDownLists() + end + end + end + end + end +end + +-------------------------------------------------------------------------------- +-- 8. Waypoint / Map Pin System +-------------------------------------------------------------------------------- +local waypoint = { active = false, continent = 0, zone = 0, x = 0, y = 0, name = "" } +local pinFrame, pinTexture, pinLabel, pinShareBtn, pinClearBtn + +local function GetMapCursorPos() + if not WorldMapButton then return nil, nil end + local cx, cy = GetCursorPosition() + if not cx or not cy then return nil, nil end + local scale = WorldMapButton:GetEffectiveScale() + local left = WorldMapButton:GetLeft() + local top = WorldMapButton:GetTop() + local w = WorldMapButton:GetWidth() + local h = WorldMapButton:GetHeight() + if not left or not top or not w or not h or w == 0 or h == 0 then return nil, nil end + local mx = (cx / scale - left) / w + local my = (top - cy / scale) / h + if mx >= 0 and mx <= 1 and my >= 0 and my <= 1 then + return mx, my + end + return nil, nil +end + +local function GetCurrentMapName() + local _G = getfenv(0) + local zoneText = _G["WorldMapFrameAreaLabel"] + if zoneText and zoneText.GetText then + local t = zoneText:GetText() + if t and t ~= "" then return t end + end + local c = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local z = GetCurrentMapZone and GetCurrentMapZone() or 0 + if z > 0 and GetMapZones then + local zones = { GetMapZones(c) } + if zones[z] then return zones[z] end + end + if c > 0 and GetMapContinents then + local continents = { GetMapContinents() } + if continents[c] then return continents[c] end + end + return "未知区域" +end + +local function CreateWaypointPin() + if pinFrame then return end + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + + pinFrame = CreateFrame("Frame", "NanamiWorldMapPin", WorldMapButton) + pinFrame:SetWidth(24) + pinFrame:SetHeight(38) + pinFrame:SetFrameStrata("FULLSCREEN_DIALOG") + pinFrame:SetFrameLevel(200) + + local stem = pinFrame:CreateTexture(nil, "ARTWORK") + stem:SetTexture("Interface\\Buttons\\WHITE8X8") + stem:SetWidth(2) + stem:SetHeight(14) + stem:SetPoint("BOTTOM", pinFrame, "BOTTOM", 0, 0) + stem:SetVertexColor(_A.panelBorder[1], _A.panelBorder[2], _A.panelBorder[3], 0.85) + + local glow = pinFrame:CreateTexture(nil, "BACKGROUND") + glow:SetTexture("Interface\\Buttons\\WHITE8X8") + glow:SetWidth(20) + glow:SetHeight(20) + glow:SetPoint("BOTTOM", stem, "TOP", 0, -6) + glow:SetVertexColor(_A.accent[1], _A.accent[2], _A.accent[3], 0.30) + + pinTexture = pinFrame:CreateTexture(nil, "ARTWORK") + pinTexture:SetTexture("Interface\\Buttons\\WHITE8X8") + pinTexture:SetWidth(12) + pinTexture:SetHeight(12) + pinTexture:SetPoint("BOTTOM", stem, "TOP", 0, -1) + pinTexture:SetVertexColor(_A.accent[1], _A.accent[2], _A.accent[3], 1) + + local dot = pinFrame:CreateTexture(nil, "OVERLAY") + dot:SetTexture("Interface\\Buttons\\WHITE8X8") + dot:SetWidth(4) + dot:SetHeight(4) + dot:SetPoint("CENTER", pinTexture, "CENTER", 0, 0) + dot:SetVertexColor(_A.title[1], _A.title[2], _A.title[3], 1) + + pinLabel = pinFrame:CreateFontString(nil, "OVERLAY") + pinLabel:SetFont(font, 11, "OUTLINE") + pinLabel:SetPoint("TOP", pinFrame, "BOTTOM", 0, -2) + pinLabel:SetTextColor(_A.title[1], _A.title[2], _A.title[3]) + pinLabel:SetText("") + + local btnW, btnH = 52, 18 + + pinShareBtn = CreateFrame("Button", nil, pinFrame) + pinShareBtn:SetWidth(btnW) + pinShareBtn:SetHeight(btnH) + pinShareBtn:SetPoint("TOPLEFT", pinFrame, "BOTTOMLEFT", -10, -8) + pinShareBtn:SetBackdrop(PANEL_BACKDROP) + pinShareBtn:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + pinShareBtn:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + local shareFS = pinShareBtn:CreateFontString(nil, "OVERLAY") + shareFS:SetFont(font, 10, "OUTLINE") + shareFS:SetPoint("CENTER", 0, 0) + shareFS:SetText("分享") + shareFS:SetTextColor(_A.btnText[1], _A.btnText[2], _A.btnText[3]) + pinShareBtn:SetScript("OnEnter", function() + this:SetBackdropColor(_A.btnHoverBg[1], _A.btnHoverBg[2], _A.btnHoverBg[3], _A.btnHoverBg[4]) + end) + pinShareBtn:SetScript("OnLeave", function() + this:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + end) + pinShareBtn:SetScript("OnClick", function() + WM:ShareWaypoint() + end) + + pinClearBtn = CreateFrame("Button", nil, pinFrame) + pinClearBtn:SetWidth(btnW) + pinClearBtn:SetHeight(btnH) + pinClearBtn:SetPoint("LEFT", pinShareBtn, "RIGHT", 4, 0) + pinClearBtn:SetBackdrop(PANEL_BACKDROP) + pinClearBtn:SetBackdropColor(_A.buttonDownBg[1], _A.buttonDownBg[2], _A.buttonDownBg[3], _A.buttonDownBg[4]) + pinClearBtn:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + local clearFS = pinClearBtn:CreateFontString(nil, "OVERLAY") + clearFS:SetFont(font, 10, "OUTLINE") + clearFS:SetPoint("CENTER", 0, 0) + clearFS:SetText("清除") + clearFS:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + pinClearBtn:SetScript("OnEnter", function() + this:SetBackdropColor(_A.btnHoverBg[1], _A.btnHoverBg[2], _A.btnHoverBg[3], _A.btnHoverBg[4]) + end) + pinClearBtn:SetScript("OnLeave", function() + this:SetBackdropColor(_A.buttonDownBg[1], _A.buttonDownBg[2], _A.buttonDownBg[3], _A.buttonDownBg[4]) + end) + pinClearBtn:SetScript("OnClick", function() + WM:ClearWaypoint() + end) + + pinFrame:Hide() +end + +local function UpdatePinPosition() + if not pinFrame or not waypoint.active then + if pinFrame then pinFrame:Hide() end + return + end + if not WorldMapButton or not WorldMapFrame:IsVisible() then + pinFrame:Hide() + return + end + local c = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local z = GetCurrentMapZone and GetCurrentMapZone() or 0 + if c ~= waypoint.continent or z ~= waypoint.zone then + pinFrame:Hide() + return + end + local w = WorldMapButton:GetWidth() + local h = WorldMapButton:GetHeight() + if not w or not h or w == 0 or h == 0 then + pinFrame:Hide() + return + end + pinFrame:ClearAllPoints() + pinFrame:SetPoint("BOTTOM", WorldMapButton, "TOPLEFT", w * waypoint.x, -h * waypoint.y) + pinFrame:Show() +end + +function WM:SetWaypoint(continent, zone, x, y, name) + waypoint.active = true + waypoint.continent = continent + waypoint.zone = zone + waypoint.x = x + waypoint.y = y + waypoint.name = name or "标记点" + + CreateWaypointPin() + local xPct = string.format("%.1f", x * 100) + local yPct = string.format("%.1f", y * 100) + pinLabel:SetText(waypoint.name .. " (" .. xPct .. ", " .. yPct .. ")") + UpdatePinPosition() + + if SFrames and SFrames.Print then + SFrames:Print("地图标记已放置: " .. waypoint.name .. " (" .. xPct .. ", " .. yPct .. ")") + end +end + +function WM:ClearWaypoint() + waypoint.active = false + waypoint.continent = 0 + waypoint.zone = 0 + waypoint.x = 0 + waypoint.y = 0 + waypoint.name = "" + if pinFrame then pinFrame:Hide() end +end + +function WM:ShareWaypoint() + if not waypoint.active then return end + local xPct = string.format("%.1f", waypoint.x * 100) + local yPct = string.format("%.1f", waypoint.y * 100) + local shareText = "" + if ChatFrameEditBox then + if not ChatFrameEditBox:IsVisible() then + ChatFrameEditBox:Show() + end + ChatFrameEditBox:SetFocus() + ChatFrameEditBox:SetText(shareText .. " " .. waypoint.name .. " (" .. xPct .. ", " .. yPct .. ")") + end +end + +function WM:HandleWaypointLink(data) + local _, _, cs, zs, xs, ys = string.find(data, "^(%d+):(%d+):([%d%.]+):([%d%.]+)") + if not cs then return end + local c = tonumber(cs) or 0 + local z = tonumber(zs) or 0 + local x = (tonumber(xs) or 0) / 100 + local y = (tonumber(ys) or 0) / 100 + + local name = "标记点" + if z > 0 and GetMapZones then + local zones = { GetMapZones(c) } + if zones[z] then name = zones[z] end + elseif c > 0 and GetMapContinents then + local continents = { GetMapContinents() } + if continents[c] then name = continents[c] end + end + + if not WorldMapFrame:IsVisible() then + WorldMapFrame:Show() + end + + self:SetWaypoint(c, z, x, y, name) + + local pending = { continent = c, zone = z, x = x, y = y, name = name } + local timer = CreateFrame("Frame") + local waited = 0 + timer:SetScript("OnUpdate", function() + waited = waited + (arg1 or 0) + if waited >= 0.05 then + timer:SetScript("OnUpdate", nil) + if SetMapZoom then + SetMapZoom(pending.continent, pending.zone) + end + WM:SetWaypoint(pending.continent, pending.zone, pending.x, pending.y, pending.name) + end + end) +end + +-------------------------------------------------------------------------------- +-- 8b. Darkmoon Faire Map Markers (暗月马戏团世界地图标记) +-------------------------------------------------------------------------------- +local DMF_ICON = "Interface\\Icons\\INV_Misc_Orb_02" +local DMF_SIZE = 24 +local DMF_SIZE_CONT = 16 +local DMF_LOCATIONS = { + { zone = "ElwynnForest", cont = 2, + zx = 0.41, zy = 0.69, -- zone-level coordinates + cx = 0.453, cy = 0.721, -- continent-level coordinates (Eastern Kingdoms) + name = "闪金镇", fullName = "闪金镇 (艾尔文森林)", + }, + { zone = "Mulgore", cont = 1, + zx = 0.36, zy = 0.38, -- zone-level coordinates + cx = 0.463, cy = 0.595, -- continent-level coordinates (Kalimdor) + name = "莫高雷", fullName = "莫高雷", + }, +} +local DMF_REF_LOC = 1 -- ref Monday (2026-03-09) week → Goldshire +local dmfPins = {} +local dmfPulse = 0 +local dmfRefJDN = nil + +local function DiscoverDmfZoneIndices() + local savedC = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local savedZ = GetCurrentMapZone and GetCurrentMapZone() or 0 + for i = 1, 2 do + local loc = DMF_LOCATIONS[i] + if not loc.zoneIdx then + local target = string.lower(loc.zone) + local zones = { GetMapZones(loc.cont) } + for idx = 1, table.getn(zones) do + SetMapZoom(loc.cont, idx) + local mf = GetMapInfo and GetMapInfo() or "" + if mf ~= "" then + if mf == loc.zone then + loc.zoneIdx = idx + break + elseif string.find(string.lower(mf), target) then + loc.zoneIdx = idx + loc.zone = mf + break + elseif string.find(target, string.lower(mf)) then + loc.zoneIdx = idx + loc.zone = mf + break + end + end + end + end + end + if savedZ > 0 then + SetMapZoom(savedC, savedZ) + elseif savedC > 0 then + SetMapZoom(savedC, 0) + else + if SetMapToCurrentZone then SetMapToCurrentZone() end + end +end + +local function DmfJDN(y, m, d) + local a = math.floor((14 - m) / 12) + local y2 = y + 4800 - a + local m2 = m + 12 * a - 3 + return d + math.floor((153 * m2 + 2) / 5) + 365 * y2 + + math.floor(y2 / 4) - math.floor(y2 / 100) + math.floor(y2 / 400) - 32045 +end + +local function GetCETJDN() + local ts = time() + local daysSinceEpoch = math.floor(ts / 86400) + local utcJDN = 2440588 + daysSinceEpoch -- Jan 1 1970 = JDN 2440588 + local utcHour = math.mod(math.floor(ts / 3600), 24) + + local ok, utc = pcall(date, "!*t") + local utcYear + if ok and utc and utc.year then + utcYear = utc.year + else + local lt = date("*t") + utcYear = lt.year + end + + local mar31dow = math.mod(DmfJDN(utcYear, 3, 31), 7) + local lastSunMar = 31 - math.mod(mar31dow + 1, 7) + local oct31dow = math.mod(DmfJDN(utcYear, 10, 31), 7) + local lastSunOct = 31 - math.mod(oct31dow + 1, 7) + + local utcMonth = math.floor((daysSinceEpoch - 10957) / 30.44) + 1 + if ok and utc and utc.month then utcMonth = utc.month end + local utcDay = 0 + if ok and utc then utcDay = utc.day or 0 end + + local afterSpring = (utcMonth > 3) + or (utcMonth == 3 and utcDay > lastSunMar) + or (utcMonth == 3 and utcDay == lastSunMar and utcHour >= 1) + local beforeAutumn = (utcMonth < 10) + or (utcMonth == 10 and utcDay < lastSunOct) + or (utcMonth == 10 and utcDay == lastSunOct and utcHour < 1) + + local offset = (afterSpring and beforeAutumn) and 2 or 1 -- CEST=2, CET=1 + local cetJDN = utcJDN + if utcHour + offset >= 24 then cetJDN = cetJDN + 1 end + return cetJDN +end + +local function GetDmfSchedule() + local todayJDN = GetCETJDN() + local dow = math.mod(todayJDN, 7) -- 0=Mon 1=Tue 2=Wed 3=Thu 4=Fri 5=Sat 6=Sun + local isWed = (dow == 2) + + -- Week runs Sun(6)-Sat(5); ref Sunday March 8 = Goldshire + if not dmfRefJDN then dmfRefJDN = DmfJDN(2026, 3, 8) end + local daysSinceSun = math.mod(dow + 1, 7) -- Sun=0 Mon=1 Tue=2 Wed=3 Thu=4 Fri=5 Sat=6 + local thisSunJDN = todayJDN - daysSinceSun + local weeksDiff = math.floor((thisSunJDN - dmfRefJDN) / 7) + if weeksDiff < 0 then weeksDiff = -weeksDiff end + local ai = math.mod(weeksDiff, 2) == 0 and DMF_REF_LOC or (3 - DMF_REF_LOC) + + local daysLeft = 6 - daysSinceSun -- days until Saturday (0 on Sat itself) + local daysUntilNext = daysLeft + 1 -- days until next Sunday + + return ai, isWed, daysLeft, daysUntilNext +end + +local function CreateDmfPin(i) + if dmfPins[i] then return end + if not WorldMapButton then return end + local f = CreateFrame("Button", "NanamiDMFPin" .. i, WorldMapButton) + f:SetWidth(DMF_SIZE); f:SetHeight(DMF_SIZE) + f:SetFrameStrata("FULLSCREEN_DIALOG") + f:SetFrameLevel(200) + + local ico = f:CreateTexture(nil, "OVERLAY") + ico:SetTexture(DMF_ICON) + ico:SetWidth(DMF_SIZE); ico:SetHeight(DMF_SIZE) + ico:SetPoint("CENTER", f, "CENTER", 0, 0) + f.icon = ico + + local gl = f:CreateTexture(nil, "OVERLAY") + gl:SetTexture("Interface\\Buttons\\UI-ActionButton-Border") + gl:SetBlendMode("ADD") + gl:SetWidth(DMF_SIZE * 2.2); gl:SetHeight(DMF_SIZE * 2.2) + gl:SetPoint("CENTER", f, "CENTER", 0, 0) + local _glc = SFrames.ActiveTheme and SFrames.ActiveTheme.accentLight or { 1, 0.84, 0 } + gl:SetVertexColor(_glc[1], _glc[2], _glc[3], 0.35) + f.glow = gl + + f.locIdx = i + f:SetScript("OnEnter", function() + local loc = DMF_LOCATIONS[this.locIdx] + local other = DMF_LOCATIONS[3 - this.locIdx] + local ai, iw, dl, ds = GetDmfSchedule() + local here = (ai == this.locIdx) + GameTooltip:SetOwner(this, "ANCHOR_RIGHT") + GameTooltip:AddLine("暗月马戏团", 1, 0.84, 0) + GameTooltip:AddLine(loc.fullName, 0.7, 0.7, 0.7) + GameTooltip:AddLine(" ") + if here then + if iw then + GameTooltip:AddLine("今天是马戏团休息日 (周三)", 1, 0.3, 0.3) + GameTooltip:AddLine("马戏团在此处,明天恢复营业", 0.4, 1, 0.4) + GameTooltip:AddLine(" ") + GameTooltip:AddLine("本轮还剩 " .. dl .. " 天 (周六结束)", 0.8, 0.8, 0.8) + else + GameTooltip:AddLine("马戏团正在此处营业中!", 0.4, 1, 0.4) + GameTooltip:AddLine(" ") + if dl > 1 then + GameTooltip:AddLine("剩余 " .. dl .. " 天 (周六结束)", 0.8, 0.8, 0.8) + elseif dl == 1 then + GameTooltip:AddLine("明天是本轮最后一天", 1, 0.84, 0) + else + GameTooltip:AddLine("今天是本轮最后一天!", 1, 0.84, 0) + GameTooltip:AddLine("之后将转移至 " .. other.fullName, 0.6, 0.8, 1) + end + end + else + GameTooltip:AddLine("马戏团目前不在此处", 0.6, 0.6, 0.6) + GameTooltip:AddLine(" ") + GameTooltip:AddLine("当前位置: " .. other.fullName, 0.6, 0.8, 1) + if iw then + GameTooltip:AddLine("今天对方休息," .. ds .. " 天后来此", 1, 0.84, 0) + else + GameTooltip:AddLine(ds .. " 天后到来", 1, 0.84, 0) + end + end + GameTooltip:AddLine(" ") + GameTooltip:AddLine("点击打开Buff指引", 0.5, 0.5, 0.5) + GameTooltip:Show() + end) + f:SetScript("OnLeave", function() GameTooltip:Hide() end) + f:SetScript("OnClick", function() + if SFrames.DarkmoonGuide and SFrames.DarkmoonGuide.Toggle then + SFrames.DarkmoonGuide:Toggle() + end + end) + f:RegisterForClicks("LeftButtonUp") + f:Hide() + dmfPins[i] = f +end + +local function UpdateDarkmoonPins() + if not WorldMapButton or not WorldMapFrame:IsVisible() then + for i = 1, 2 do if dmfPins[i] then dmfPins[i]:Hide() end end + return + end + + local mapFile = GetMapInfo and GetMapInfo() or "" + local curC = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local curZ = GetCurrentMapZone and GetCurrentMapZone() or 0 + local ai, iw = GetDmfSchedule() + local w = WorldMapButton:GetWidth() + local h = WorldMapButton:GetHeight() + if not w or not h or w == 0 or h == 0 then return end + + for i = 1, 2 do + CreateDmfPin(i) + local pin = dmfPins[i] + local loc = DMF_LOCATIONS[i] + local px, py + local show = false + local isContinent = false + + if curZ > 0 and curC == loc.cont and loc.zoneIdx and curZ == loc.zoneIdx then + show = true + px, py = loc.zx, loc.zy + elseif mapFile ~= "" and mapFile == loc.zone then + show = true + px, py = loc.zx, loc.zy + elseif curZ == 0 and curC == loc.cont then + show = true + isContinent = true + px, py = loc.cx, loc.cy + end + + if show then + local sz = isContinent and DMF_SIZE_CONT or DMF_SIZE + pin:SetWidth(sz); pin:SetHeight(sz) + pin.icon:SetWidth(sz); pin.icon:SetHeight(sz) + pin.glow:SetWidth(sz * 2.2); pin.glow:SetHeight(sz * 2.2) + pin:ClearAllPoints() + pin:SetPoint("CENTER", WorldMapButton, "TOPLEFT", w * px, -h * py) + if ai == i then + if iw then + pin.icon:SetVertexColor(0.75, 0.75, 0.75) + pin:SetAlpha(0.85) + pin.glow:Hide() + else + pin.icon:SetVertexColor(1, 1, 1) + pin:SetAlpha(1) + pin.glow:Show() + end + else + pin.icon:SetVertexColor(0.45, 0.45, 0.45) + pin:SetAlpha(0.7) + pin.glow:Hide() + end + pin:Show() + else + pin:Hide() + end + end + + dmfPulse = dmfPulse + 0.03 + if dmfPulse > 6.2832 then dmfPulse = dmfPulse - 6.2832 end + for i = 1, 2 do + local p = dmfPins[i] + if p and p:IsShown() and p.glow and p.glow:IsShown() then + p.glow:SetAlpha(0.25 + 0.20 * math.sin(dmfPulse * 2)) + end + end +end + +SLASH_DMFMAP1 = "/dmfmap" +SlashCmdList["DMFMAP"] = function(msg) + local cf = DEFAULT_CHAT_FRAME + if msg == "scan" then + local savedC = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local savedZ = GetCurrentMapZone and GetCurrentMapZone() or 0 + for c = 1, 2 do + local cname = c == 1 and "Kalimdor" or "Eastern Kingdoms" + cf:AddMessage("|cffffcc66[DMF Scan] " .. cname .. " (cont=" .. c .. "):|r") + local zones = { GetMapZones(c) } + for idx = 1, table.getn(zones) do + SetMapZoom(c, idx) + local mf = GetMapInfo and GetMapInfo() or "(nil)" + local zname = zones[idx] or "?" + if string.find(string.lower(mf), "elwynn") or string.find(string.lower(zname), "elwynn") + or string.find(string.lower(mf), "mulgore") or string.find(string.lower(zname), "mulgore") then + cf:AddMessage(" |cff00ff00>>|r idx=" .. idx .. " file=" .. tostring(mf) .. " name=" .. tostring(zname)) + else + cf:AddMessage(" idx=" .. idx .. " file=" .. tostring(mf) .. " name=" .. tostring(zname)) + end + end + end + if savedZ > 0 then SetMapZoom(savedC, savedZ) + elseif savedC > 0 then SetMapZoom(savedC, 0) + else if SetMapToCurrentZone then SetMapToCurrentZone() end end + return + end + local ai, iw, dl, ds = GetDmfSchedule() + local n = DMF_LOCATIONS[ai] and DMF_LOCATIONS[ai].name or "?" + local mf = GetMapInfo and GetMapInfo() or "(nil)" + local curC = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local curZ = GetCurrentMapZone and GetCurrentMapZone() or 0 + local cetJDN = GetCETJDN() + local dow = math.mod(cetJDN, 7) + local dayNames = { [0]="Mon", [1]="Tue", [2]="Wed", [3]="Thu", [4]="Fri", [5]="Sat", [6]="Sun" } + local localT = date("%H:%M") + local ts = time() + local utcH = math.mod(math.floor(ts / 3600), 24) + local utcM = math.mod(math.floor(ts / 60), 60) + cf:AddMessage("|cffffcc66[暗月马戏团]|r 本周: " .. n + .. " | CET " .. (dayNames[dow] or "?") .. (iw and "(休息)" or "") + .. " | 剩余" .. dl .. "天 | " .. ds .. "天后轮换") + cf:AddMessage(" 本地=" .. localT .. " UTC=" .. string.format("%02d:%02d", utcH, utcM) + .. " | map=" .. tostring(mf) + .. " | cont=" .. curC .. " zone=" .. curZ) + for i = 1, 2 do + local p = dmfPins[i] + local loc = DMF_LOCATIONS[i] + cf:AddMessage(" " .. loc.name .. ": " + .. (p and ("shown=" .. tostring(p:IsShown())) or "未创建") + .. " | zoneIdx=" .. tostring(loc.zoneIdx or "未发现") + .. " | file=" .. loc.zone .. " cont=" .. loc.cont) + end +end + +-------------------------------------------------------------------------------- +-- 9. Chat Link Integration: transform and handle nmwp: clicks +-------------------------------------------------------------------------------- +local function TransformMapLinks(text) + if not text or type(text) ~= "string" then return text end + local result = string.gsub(text, "]*)>", + function(c, z, x, y, name) + local display = name + if not display or display == "" then display = "地图标记" end + local _wh = (SFrames.Theme and SFrames.Theme:GetAccentHex()) or "ffFFB3D9" + return "|c" .. _wh .. "|Hnmwp:" .. c .. ":" .. z .. ":" .. x .. ":" .. y .. "|h[" .. display .. " (" .. x .. ", " .. y .. ")]|h|r" + end) + return result +end + +local function HookChatFrameForMapLinks(cf) + if not cf or not cf.AddMessage or cf._nanamiMapLinkHooked then return end + cf._nanamiMapLinkHooked = true + local orig = cf.AddMessage + cf.AddMessage = function(self, text, r, g, b, alpha, holdTime) + if text and type(text) == "string" then + text = TransformMapLinks(text) + end + orig(self, text, r, g, b, alpha, holdTime) + end +end + +local function HookAllChatFramesForMapLinks() + local _G = getfenv(0) + for i = 1, 10 do + local cf = _G["ChatFrame" .. i] + if cf then HookChatFrameForMapLinks(cf) end + end +end + +local function HookSetItemRefForWaypoints() + local _G = getfenv(0) + local origSIR = _G.SetItemRef + _G.SetItemRef = function(link, text, button) + if link and string.sub(link, 1, 5) == "nmwp:" then + local data = string.sub(link, 6) + WM:HandleWaypointLink(data) + return + end + if origSIR then + origSIR(link, text, button) + end + end +end + +-------------------------------------------------------------------------------- +-- 10. WorldMapButton Click Hook for Placing Waypoints +-------------------------------------------------------------------------------- +local function HookWorldMapButtonClick() + if not WorldMapButton then return end + local prevOnClick = WorldMapButton:GetScript("OnClick") + WorldMapButton:SetScript("OnClick", function() + if arg1 == "LeftButton" and IsControlKeyDown() then + local mx, my = GetMapCursorPos() + if mx and my then + local c = GetCurrentMapContinent and GetCurrentMapContinent() or 0 + local z = GetCurrentMapZone and GetCurrentMapZone() or 0 + local name = GetCurrentMapName() + WM:SetWaypoint(c, z, mx, my, name) + end + return + end + if prevOnClick then prevOnClick() end + end) +end + +-------------------------------------------------------------------------------- +-- 11. Navigation Map (迷你全区域地图 - 类似正式服 Shift+M) +-- Shows the entire zone map scaled down. All state in table N. +-------------------------------------------------------------------------------- +local N = { + MW = 1002, MH = 668, + CW = { 256, 256, 256, 234 }, + RH = { 256, 256, 156 }, + DEF_W = 350, MIN_W = 200, MAX_W = 600, + curMap = "", pulse = 0, + overlays = {}, overlayCount = 0, +} +local NC = { + PBG = _A.panelBg, PBD = _A.panelBorder, TC = _A.title, DT = _A.dimText, +} + +local function GetNavConfig() + local cfg = WM:GetConfig() + if type(cfg.nav) ~= "table" then + cfg.nav = { enabled = false, width = N.DEF_W, alpha = 0.70, locked = false } + end + if not cfg.nav.width then cfg.nav.width = N.DEF_W end + if cfg.nav.width < N.MIN_W then cfg.nav.width = N.MIN_W end + if cfg.nav.width > N.MAX_W then cfg.nav.width = N.MAX_W end + return cfg.nav +end + +local function SaveNavPos() + if not N.frame then return end + local nc = GetNavConfig() + local pt, _, rp, x, y = N.frame:GetPoint() + nc.aF = pt; nc.aT = rp; nc.pX = x; nc.pY = y +end + +local function NavNextPow2(n) + local p = 16 + while p < n do p = p * 2 end + return p +end + + +local function NavApplySize(w) + if not N.frame or not N.tiles then return end + local h = w * N.MH / N.MW + local s = w / N.MW + N.frame:SetWidth(w); N.frame:SetHeight(h) + + local idx = 0 + for row = 1, 3 do + for col = 1, 4 do + idx = idx + 1 + local t = N.tiles[idx] + t:SetWidth(N.CW[col] * s); t:SetHeight(N.RH[row] * s) + local xO, yO = 0, 0 + for c = 1, col - 1 do xO = xO + N.CW[c] end + for r = 1, row - 1 do yO = yO + N.RH[r] end + t:ClearAllPoints() + t:SetPoint("TOPLEFT", N.frame, "TOPLEFT", xO * s, -yO * s) + end + end + + for i = 1, N.overlayCount do + if N.overlays[i] and N.ovData and N.ovData[i] then + local d = N.ovData[i] + local tex = N.overlays[i] + tex:SetWidth(d.pw * s); tex:SetHeight(d.ph * s) + tex:ClearAllPoints() + tex:SetPoint("TOPLEFT", N.frame, "TOPLEFT", d.ox * s, -d.oy * s) + end + end +end + +local function UpdateNavOverlays(mapFile) + if not N.frame or not mapFile or mapFile == "" then return end + + local db = MapOverlayData or LibMapOverlayData or zMapOverlayData or mapOverlayData + if not db then + for i = 1, N.overlayCount do if N.overlays[i] then N.overlays[i]:Hide() end end + return + end + + local zoneData = db[mapFile] + if not zoneData then + for i = 1, N.overlayCount do if N.overlays[i] then N.overlays[i]:Hide() end end + return + end + + local nc = GetNavConfig() + local s = (nc.width or N.DEF_W) / N.MW + local prefix = "Interface\\WorldMap\\" .. mapFile .. "\\" + local texIdx = 0 + if not N.ovData then N.ovData = {} end + + for idx = 1, table.getn(zoneData) do + local entry = zoneData[idx] + local _, _, oName, sW, sH, sX, sY = string.find(entry, "^(%u+):(%d+):(%d+):(%d+):(%d+)$") + if not oName then + _, _, oName, sW, sH, sX, sY = string.find(entry, "^([^:]+):(%d+):(%d+):(%d+):(%d+)$") + end + if oName then + local tw = tonumber(sW) + local th = tonumber(sH) + local ox = tonumber(sX) + local oy = tonumber(sY) + local tName = prefix .. oName + local numH = math.ceil(tw / 256) + local numV = math.ceil(th / 256) + + for row = 1, numV do + local pxH, fileH + if row < numV then + pxH = 256; fileH = 256 + else + pxH = math.mod(th, 256) + if pxH == 0 then pxH = 256 end + fileH = NavNextPow2(pxH) + end + for col = 1, numH do + texIdx = texIdx + 1 + local pxW, fileW + if col < numH then + pxW = 256; fileW = 256 + else + pxW = math.mod(tw, 256) + if pxW == 0 then pxW = 256 end + fileW = NavNextPow2(pxW) + end + + if not N.overlays[texIdx] then + N.overlays[texIdx] = N.frame:CreateTexture(nil, "OVERLAY") + end + local tex = N.overlays[texIdx] + local realOx = ox + 256 * (col - 1) + local realOy = oy + 256 * (row - 1) + + N.ovData[texIdx] = { pw = pxW, ph = pxH, ox = realOx, oy = realOy } + + tex:SetWidth(pxW * s); tex:SetHeight(pxH * s) + tex:SetTexCoord(0, pxW / fileW, 0, pxH / fileH) + tex:ClearAllPoints() + tex:SetPoint("TOPLEFT", N.frame, "TOPLEFT", realOx * s, -realOy * s) + + local tileIndex = ((row - 1) * numH) + col + tex:SetTexture(tName .. tileIndex) + tex:SetVertexColor(1, 1, 1, 1) + tex:Show() + end + end + end + end + + for i = texIdx + 1, N.overlayCount do + if N.overlays[i] then N.overlays[i]:Hide() end + end + if texIdx > N.overlayCount then N.overlayCount = texIdx end +end + +local function CreateNavMap() + if N.frame then return end + local nc = GetNavConfig() + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + local w = nc.width or N.DEF_W + local h = w * N.MH / N.MW + local s = w / N.MW + + local f = CreateFrame("Frame", "NanamiNavMap", UIParent) + N.frame = f + f:SetWidth(w); f:SetHeight(h) + f:SetAlpha(nc.alpha or 0.70) + f:SetMovable(true); f:EnableMouse(true); f:EnableMouseWheel(1) + f:SetClampedToScreen(true) + f:SetFrameStrata("LOW"); f:SetFrameLevel(10) + f:Hide() + + f:ClearAllPoints() + if nc.aF and nc.pX and nc.pY then + f:SetPoint(nc.aF, UIParent, nc.aT or nc.aF, nc.pX, nc.pY) + else + f:SetPoint("CENTER", UIParent, "CENTER", 0, 0) + end + + N.tiles = {} + local idx = 0 + for row = 1, 3 do + for col = 1, 4 do + idx = idx + 1 + local oW = N.CW[col] + local oH = N.RH[row] + local tile = f:CreateTexture("NanamiNavTile" .. idx, "ARTWORK") + tile:SetWidth(oW * s); tile:SetHeight(oH * s) + local xO, yO = 0, 0 + for c = 1, col - 1 do xO = xO + N.CW[c] end + for r = 1, row - 1 do yO = yO + N.RH[r] end + tile:SetPoint("TOPLEFT", f, "TOPLEFT", xO * s, -yO * s) + local tcR = (oW >= 256) and 1 or (oW / 256) + local tcB = (oH >= 256) and 1 or (oH / 256) + tile:SetTexCoord(0, tcR, 0, tcB) + N.tiles[idx] = tile + end + end + + -- thin border + local borderFrame = CreateFrame("Frame", nil, f) + borderFrame:SetAllPoints(f) + borderFrame:SetFrameLevel(f:GetFrameLevel() + 5) + borderFrame:SetBackdrop({ + edgeFile = "Interface\\Buttons\\WHITE8X8", edgeSize = 1, + insets = { left = 0, right = 0, top = 0, bottom = 0 }, + }) + borderFrame:SetBackdropBorderColor(0, 0, 0, 0.50) + + -- gradient fade overlay (soft vignette at edges) + local fade = CreateFrame("Frame", nil, f) + fade:SetAllPoints(f) + fade:SetFrameLevel(f:GetFrameLevel() + 6) + local FD = 30 + + local fadeL = fade:CreateTexture(nil, "OVERLAY") + fadeL:SetTexture("Interface\\Buttons\\WHITE8X8") + fadeL:SetWidth(FD) + fadeL:SetPoint("TOPLEFT", fade, "TOPLEFT", 0, 0) + fadeL:SetPoint("BOTTOMLEFT", fade, "BOTTOMLEFT", 0, 0) + fadeL:SetGradientAlpha("HORIZONTAL", 0,0,0,0.25, 0,0,0,0) + + local fadeR = fade:CreateTexture(nil, "OVERLAY") + fadeR:SetTexture("Interface\\Buttons\\WHITE8X8") + fadeR:SetWidth(FD) + fadeR:SetPoint("TOPRIGHT", fade, "TOPRIGHT", 0, 0) + fadeR:SetPoint("BOTTOMRIGHT", fade, "BOTTOMRIGHT", 0, 0) + fadeR:SetGradientAlpha("HORIZONTAL", 0,0,0,0, 0,0,0,0.25) + + local fadeT = fade:CreateTexture(nil, "OVERLAY") + fadeT:SetTexture("Interface\\Buttons\\WHITE8X8") + fadeT:SetHeight(FD) + fadeT:SetPoint("TOPLEFT", fade, "TOPLEFT", 0, 0) + fadeT:SetPoint("TOPRIGHT", fade, "TOPRIGHT", 0, 0) + fadeT:SetGradientAlpha("VERTICAL", 0,0,0,0, 0,0,0,0.25) + + local fadeB = fade:CreateTexture(nil, "OVERLAY") + fadeB:SetTexture("Interface\\Buttons\\WHITE8X8") + fadeB:SetHeight(FD) + fadeB:SetPoint("BOTTOMLEFT", fade, "BOTTOMLEFT", 0, 0) + fadeB:SetPoint("BOTTOMRIGHT", fade, "BOTTOMRIGHT", 0, 0) + fadeB:SetGradientAlpha("VERTICAL", 0,0,0,0.25, 0,0,0,0) + + -- player indicator (arrow + ripple) + local dotFrame = CreateFrame("Frame", nil, f) + N.dotFrame = dotFrame + dotFrame:SetWidth(1); dotFrame:SetHeight(1) + dotFrame:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0) + dotFrame:SetFrameLevel(f:GetFrameLevel() + 7) + + local CIRCLE = "Interface\\Minimap\\UI-Minimap-Background" + N.ripples = {} + for i = 1, 3 do + local rip = dotFrame:CreateTexture(nil, "ARTWORK") + rip:SetTexture(CIRCLE) + rip:SetWidth(8); rip:SetHeight(8) + rip:SetPoint("CENTER", dotFrame, "CENTER", 0, 0) + rip:SetVertexColor(0.0, 0.85, 1.0, 0.35) + rip:SetBlendMode("ADD") + N.ripples[i] = rip + end + + local CLASS_ICON = "Interface\\AddOns\\Nanami-UI\\img\\UI-Classes-Circles" + N.dotTex = dotFrame:CreateTexture(nil, "OVERLAY") + N.dotTex:SetTexture(CLASS_ICON) + N.dotTex:SetWidth(14); N.dotTex:SetHeight(14) + N.dotTex:SetPoint("CENTER", dotFrame, "CENTER", 0, 0) + local _, pClass = UnitClass("player") + if pClass and SFrames.CLASS_ICON_TCOORDS and SFrames.CLASS_ICON_TCOORDS[pClass] then + local tc = SFrames.CLASS_ICON_TCOORDS[pClass] + N.dotTex:SetTexCoord(tc[1], tc[2], tc[3], tc[4]) + end + + N.dirTip = dotFrame:CreateTexture(nil, "OVERLAY") + N.dirTip:SetTexture(CIRCLE) + N.dirTip:SetWidth(4); N.dirTip:SetHeight(4) + N.dirTip:SetPoint("CENTER", dotFrame, "CENTER", 0, 10) + N.dirTip:SetVertexColor(1, 1, 1, 0.90) + + N.dirTail = dotFrame:CreateTexture(nil, "OVERLAY") + N.dirTail:SetTexture(CIRCLE) + N.dirTail:SetWidth(2); N.dirTail:SetHeight(2) + N.dirTail:SetPoint("CENTER", dotFrame, "CENTER", 0, -7) + N.dirTail:SetVertexColor(0.6, 0.6, 0.6, 0.50) + + -- info bar (zone + coords below map) + local infoFrame = CreateFrame("Frame", nil, f) + infoFrame:SetWidth(w); infoFrame:SetHeight(24) + infoFrame:SetPoint("TOP", f, "BOTTOM", 0, 0) + infoFrame:SetFrameLevel(f:GetFrameLevel() + 6) + + N.zoneFS = infoFrame:CreateFontString(nil, "OVERLAY") + N.zoneFS:SetFont(font, 9, "OUTLINE") + N.zoneFS:SetPoint("LEFT", infoFrame, "LEFT", 4, 0) + N.zoneFS:SetTextColor(NC.TC[1], NC.TC[2], NC.TC[3]) + + N.coordFS = infoFrame:CreateFontString(nil, "OVERLAY") + N.coordFS:SetFont(font, 9, "OUTLINE") + N.coordFS:SetPoint("RIGHT", infoFrame, "RIGHT", -4, 0) + N.coordFS:SetTextColor(0.85, 0.85, 0.85) + + -- close button + local cbtn = CreateFrame("Button", nil, f) + cbtn:SetWidth(14); cbtn:SetHeight(14) + cbtn:SetPoint("TOPRIGHT", f, "TOPRIGHT", -3, -3) + cbtn:SetFrameLevel(f:GetFrameLevel() + 8) + local cbFS = cbtn:CreateFontString(nil, "OVERLAY") + cbFS:SetFont(font, 11, "OUTLINE"); cbFS:SetPoint("CENTER", 0, 0) + cbFS:SetText("x"); cbFS:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + cbtn:SetScript("OnClick", function() WM:ToggleNav() end) + cbtn:SetScript("OnEnter", function() cbFS:SetTextColor(1, 0.3, 0.3) end) + cbtn:SetScript("OnLeave", function() cbFS:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) end) + + -- hover toolbar (shown on mouse enter) + local toolbar = CreateFrame("Frame", nil, f) + toolbar:SetWidth(w); toolbar:SetHeight(22) + toolbar:SetPoint("BOTTOM", f, "TOP", 0, 2) + toolbar:SetFrameLevel(f:GetFrameLevel() + 9) + toolbar:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + toolbar:SetBackdropColor(_A.headerBg[1], _A.headerBg[2], _A.headerBg[3], 0.85) + toolbar:SetBackdropBorderColor(0, 0, 0, 0.50) + toolbar:EnableMouse(true) + toolbar:Hide() + N.toolbar = toolbar + + local tipFS = toolbar:CreateFontString(nil, "OVERLAY") + tipFS:SetFont(font, 9, "OUTLINE") + tipFS:SetPoint("CENTER", toolbar, "CENTER", 0, 0) + tipFS:SetTextColor(_A.dimText[1], _A.dimText[2], _A.dimText[3]) + tipFS:SetText("拖动移位 | 滚轮缩放 | Ctrl+滚轮透明度") + + local lockBtn = CreateFrame("Button", nil, toolbar) + lockBtn:SetWidth(28); lockBtn:SetHeight(16) + lockBtn:SetPoint("RIGHT", toolbar, "RIGHT", -4, 0) + lockBtn:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + lockBtn:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], 0.90) + lockBtn:SetBackdropBorderColor(0.4, 0.4, 0.4, 0.6) + local lockFS = lockBtn:CreateFontString(nil, "OVERLAY") + lockFS:SetFont(font, 8, "OUTLINE"); lockFS:SetPoint("CENTER", 0, 0) + N.lockFS = lockFS + + local function UpdateLockText() + local lk = GetNavConfig().locked + if lk then + lockFS:SetText("解锁"); lockFS:SetTextColor(1.0, 0.5, 0.5) + else + lockFS:SetText("锁定"); lockFS:SetTextColor(0.5, 1.0, 0.5) + end + end + UpdateLockText() + + lockBtn:SetScript("OnClick", function() + local cfg = GetNavConfig() + cfg.locked = not cfg.locked + UpdateLockText() + end) + lockBtn:SetScript("OnEnter", function() + this:SetBackdropBorderColor(_A.btnHoverBd[1], _A.btnHoverBd[2], _A.btnHoverBd[3], _A.btnHoverBd[4]) + end) + lockBtn:SetScript("OnLeave", function() + this:SetBackdropBorderColor(0.4, 0.4, 0.4, 0.6) + end) + + N.hideTimer = 0 + f:SetScript("OnEnter", function() + N.hideTimer = 0 + if N.toolbar then N.toolbar:Show() end + if cbtn then cbtn:Show() end + end) + f:SetScript("OnLeave", function() + N.hideTimer = 1.5 + end) + toolbar:SetScript("OnEnter", function() + N.hideTimer = 0 + end) + toolbar:SetScript("OnLeave", function() + N.hideTimer = 1.5 + end) + cbtn:Hide() + + -- dragging + f:SetScript("OnMouseDown", function() + if arg1 == "LeftButton" and not GetNavConfig().locked then this:StartMoving() end + end) + f:SetScript("OnMouseUp", function() this:StopMovingOrSizing(); SaveNavPos() end) + + -- scroll: resize from center / alpha + f:SetScript("OnMouseWheel", function() + local cfg = GetNavConfig() + if IsControlKeyDown() then + local a = (cfg.alpha or this:GetAlpha()) + arg1 * 0.10 + if a < 0.15 then a = 0.15 end; if a > 1 then a = 1 end + cfg.alpha = a; this:SetAlpha(a) + else + local oldW = this:GetWidth() + local oldH = this:GetHeight() + local nw = cfg.width + arg1 * 25 + if nw < N.MIN_W then nw = N.MIN_W end + if nw > N.MAX_W then nw = N.MAX_W end + local nh = nw * N.MH / N.MW + local dw = (nw - oldW) / 2 + local dh = (nh - oldH) / 2 + + local pt, rel, rp, px, py = this:GetPoint() + if pt and px and py then + this:ClearAllPoints() + this:SetPoint(pt, rel, rp, px - dw, py + dh) + end + + cfg.width = nw + NavApplySize(nw) + if N.toolbar then N.toolbar:SetWidth(nw) end + SaveNavPos() + end + end) +end + +local function UpdateNavMap() + if not N.frame or not N.tiles or not N.frame:IsVisible() then return end + if WorldMapFrame and WorldMapFrame:IsVisible() then return end + + if SetMapToCurrentZone then SetMapToCurrentZone() end + + local mapFile = GetMapInfo and GetMapInfo() or "" + if mapFile ~= "" and mapFile ~= N.curMap then + N.curMap = mapFile + for i = 1, 12 do + N.tiles[i]:SetTexture("Interface\\WorldMap\\" .. mapFile .. "\\" .. mapFile .. i) + end + UpdateNavOverlays(mapFile) + end + + if mapFile ~= "" then + local px, py = GetPlayerMapPosition("player") + if px and py and (px > 0 or py > 0) then + local fw = N.frame:GetWidth() + local fh = N.frame:GetHeight() + if N.dotFrame then + N.dotFrame:ClearAllPoints() + N.dotFrame:SetPoint("TOPLEFT", N.frame, "TOPLEFT", px * fw, -py * fh) + end + + if GetPlayerFacing and N.dirTip then + local facing = GetPlayerFacing() + if facing then + local r = 10 + local tipX = -math.sin(facing) * r + local tipY = math.cos(facing) * r + N.dirTip:ClearAllPoints() + N.dirTip:SetPoint("CENTER", N.dotFrame, "CENTER", tipX, tipY) + if N.dirTail then + local tr = 7 + N.dirTail:ClearAllPoints() + N.dirTail:SetPoint("CENTER", N.dotFrame, "CENTER", -tipX / r * tr, -tipY / r * tr) + end + end + end + + local coordStr = string.format("%.1f, %.1f", px * 100, py * 100) + if N.coordFS then N.coordFS:SetText(coordStr) end + end + end + + local zn = GetZoneText and GetZoneText() or "" + if zn ~= "" and N.zoneFS then N.zoneFS:SetText(zn) end +end + +local function UpdateNavPulse(dt) + if not N.frame or not N.ripples or not N.frame:IsVisible() then return end + N.pulse = (N.pulse or 0) + 0.05 + if N.pulse > 6.2832 then N.pulse = N.pulse - 6.2832 end + + local PHASE_OFF = 2.0944 + for i = 1, 3 do + local rip = N.ripples[i] + if rip then + local t = math.mod(N.pulse + (i - 1) * PHASE_OFF, 6.2832) / 6.2832 + local sz = 6 + 28 * t + local a = 0.40 * (1 - t) + rip:SetWidth(sz); rip:SetHeight(sz) + rip:SetVertexColor(0.0, 0.85, 1.0, a) + end + end + + if N.hideTimer and N.hideTimer > 0 then + N.hideTimer = N.hideTimer - (dt or 0.04) + if N.hideTimer <= 0 then + N.hideTimer = 0 + if N.toolbar then N.toolbar:Hide() end + end + end +end + +function WM:ToggleNav() + local nc = GetNavConfig() + nc.enabled = not nc.enabled + CreateNavMap() + if nc.enabled then + N.frame:Show(); N.curMap = "" + UpdateNavMap() + if SFrames and SFrames.Print then + SFrames:Print("导航地图: |cff00ff00已开启|r (滚轮缩放 | Ctrl+滚轮透明度 | 拖动)") + end + else + N.frame:Hide() + if SFrames and SFrames.Print then + SFrames:Print("导航地图: |cffff0000已关闭|r") + end + end +end + +function WM:ShowNav() + local nc = GetNavConfig() + CreateNavMap() + if not nc.enabled then nc.enabled = true end + if WorldMapFrame and WorldMapFrame:IsVisible() then + WorldMapFrame:Hide() + end + N.frame:Show(); N.curMap = "" + UpdateNavMap() +end + +local function CreateNavToggleBtn() + if not skinFrame or not coordOverlay then return end + if N.toggleBtn then return end + local font = (SFrames and SFrames.GetFont and SFrames:GetFont()) or "Fonts\\ARIALN.TTF" + local b = CreateFrame("Button", nil, coordOverlay) + N.toggleBtn = b + b:SetWidth(70); b:SetHeight(20) + b:SetPoint("BOTTOMRIGHT", skinFrame, "BOTTOMRIGHT", -12, 22) + b:SetFrameLevel(coordOverlay:GetFrameLevel() + 1) + b:SetBackdrop({ bgFile = "Interface\\Buttons\\WHITE8X8", edgeFile = "Interface\\Buttons\\WHITE8X8", + edgeSize = 1, insets = { left = 1, right = 1, top = 1, bottom = 1 } }) + b:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + b:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + local fs = b:CreateFontString(nil, "OVERLAY") + fs:SetFont(font, 10, "OUTLINE"); fs:SetPoint("CENTER", 0, 0) + fs:SetText("缩略地图"); fs:SetTextColor(_A.btnText[1], _A.btnText[2], _A.btnText[3]) + b:SetScript("OnClick", function() WM:ShowNav() end) + b:SetScript("OnEnter", function() + this:SetBackdropColor(_A.btnHoverBg[1], _A.btnHoverBg[2], _A.btnHoverBg[3], _A.btnHoverBg[4]) + this:SetBackdropBorderColor(_A.btnHoverBd[1], _A.btnHoverBd[2], _A.btnHoverBd[3], _A.btnHoverBd[4]) + end) + b:SetScript("OnLeave", function() + this:SetBackdropColor(_A.btnBg[1], _A.btnBg[2], _A.btnBg[3], _A.btnBg[4]) + this:SetBackdropBorderColor(_A.btnBorder[1], _A.btnBorder[2], _A.btnBorder[3], _A.btnBorder[4]) + end) +end + +local function InitNavMap() + CreateNavMap() + CreateNavToggleBtn() + + local nc = GetNavConfig() + if nc.enabled then + N.frame:Show(); N.curMap = "" + end + + local mapEl, animEl = 0, 0 + local u = CreateFrame("Frame", nil, UIParent) + u:SetScript("OnUpdate", function() + local dt = arg1 or 0 + mapEl = mapEl + dt + animEl = animEl + dt + if mapEl >= 0.10 then mapEl = 0; UpdateNavMap() end + if animEl >= 0.04 then + local elapsed = animEl; animEl = 0; UpdateNavPulse(elapsed) + end + end) +end + +-------------------------------------------------------------------------------- +-- 12. Initialize +-------------------------------------------------------------------------------- +function WM:Initialize() + local cfg = self:GetConfig() + if not cfg.enabled then return end + + HideBlizzardDecorations() + CreateNanamiSkin() + CreateTooltipBG() + self:SetupWindowMode() + + SkinWorldMapControls() + CreateWaypointPin() + HookWorldMapButtonClick() + + HookTooltipShow(WorldMapTooltip) + HookTooltipShow(GameTooltip) + + HookAllChatFramesForMapLinks() + HookSetItemRefForWaypoints() + + local origUpdater = OnFrameUpdate + local function NewOnFrameUpdate() + origUpdater() + UpdatePinPosition() + UpdateDarkmoonPins() + end + + local updater = CreateFrame("Frame", nil, UIParent) + updater:SetScript("OnUpdate", NewOnFrameUpdate) + + InitNavMap() + DiscoverDmfZoneIndices() + + self.initialized = true + local _hex = (SFrames.Theme and SFrames.Theme:GetAccentHex()) or "ffffb3d9" + DEFAULT_CHAT_FRAME:AddMessage("|c" .. _hex .. "[Nanami-UI]|r 世界地图模块已加载 (Nanami主题 | Ctrl+左键放置标记 | /nui nav 导航地图)") +end diff --git a/agent-tools/MAGE_WARLOCK_DRUID_skills.lua b/agent-tools/MAGE_WARLOCK_DRUID_skills.lua new file mode 100644 index 0000000..2942707 --- /dev/null +++ b/agent-tools/MAGE_WARLOCK_DRUID_skills.lua @@ -0,0 +1,96 @@ +MAGE = { + [4] = {"造水术", "寒冰箭"}, + [6] = {"造食术", "火球术 2级", "火焰冲击", "魔法抑制", "造水术 2级"}, + [8] = {"变形术", "奥术飞弹"}, + [10] = {"霜甲术 2级", "冰霜新星"}, + [12] = {"缓落术", "造食术 2级", "魔法抑制", "火球术 3级"}, + [14] = {"魔爆术", "奥术智慧 2级", "奥术飞弹 3级", "火焰冲击 2级"}, + [16] = {"奥术飞弹 2级", "侦测魔法", "烈焰风暴"}, + [18] = {"解除次级诅咒", "魔法增效", "造水术 4级", "火球术 4级"}, + [20] = {"变形术 2级", "造水术 3级", "法力护盾", "闪现术", "传送:暴风城", "传送:铁炉堡", "传送:幽暗城", "传送:奥格瑞玛", "防护火焰结界", "霜甲术 3级", "寒冰箭 4级", "暴风雪", "唤醒"}, + [22] = {"造食术 3级", "魔爆术 2级", "火焰冲击 3级", "灼烧"}, + [24] = {"魔法抑制 2级", "火球术 5级", "奥术飞弹 4级", "烈焰风暴 2级", "法术反制", "防护冰霜结界"}, + [26] = {"寒冰箭 5级", "冰锥术"}, + [28] = {"制造魔法玛瑙", "奥术智慧 3级", "法力护盾 2级", "暴风雪 2级", "灼烧 2级", "冰霜新星 2级"}, + [30] = {"魔爆术 3级", "火球术 6级", "传送:达纳苏斯", "传送:雷霆崖", "防护火焰结界 2级", "冰甲术"}, + [32] = {"造食术 4级", "奥术飞弹 4级", "烈焰风暴 3级", "寒冰箭 6级", "防护冰霜结界 2级"}, + [34] = {"魔甲术", "冰锥术 2级", "灼烧 3级"}, + [36] = {"魔法抑制 3级", "法力护盾 3级", "火球术 7级", "暴风雪 3级", "冰霜新星 3级"}, + [38] = {"魔爆术 4级", "制造魔法翡翠", "寒冰箭 7级", "火焰冲击 5级"}, + [40] = {"造食术 5级", "奥术飞弹 5级", "传送门:暴风城", "传送门:铁炉堡", "传送门:奥格瑞玛", "传送门:幽暗城", "火球术 8级", "冰甲术 2级", "灼烧 4级"}, + [42] = {"魔法增效 3级", "奥术智慧 4级", "火球术 8级", "防护冰霜结界 3级"}, + [44] = {"法力护盾 4级", "暴风雪 4级", "寒冰箭 8级"}, + [46] = {"魔爆术 5级", "灼烧 5级"}, + [48] = {"魔法抑制 4级", "制造魔法黄水晶", "火球术 9级", "奥术飞弹 6级", "烈焰风暴 5级"}, + [50] = {"造水术 6级", "寒冰箭 9级", "冰锥术 4级", "防护火焰结界 4级", "传送门:达纳苏斯", "传送门:雷霆崖", "冰甲术 3级"}, + [52] = {"法力护盾 5级", "火球术 10级", "火焰冲击 7级", "防护冰霜结界 4级", "冰霜新星 4级"}, + [54] = {"魔法增效 4级", "奥术飞弹 7级", "烈焰风暴 6级"}, + [56] = {"奥术智慧 5级", "寒冰箭 10级", "冰锥术 5级"}, + [58] = {"魔甲术 3级", "制造魔法红宝石", "灼烧 7级"}, + [60] = {"变形术 4级", "魔法抑制 5级", "法力护盾 6级", "火球术 11级", "防护火焰结界 5级", "暴风雪 6级", "冰甲术 4级"}, +}, + +WARLOCK = { + [2] = {"痛苦诅咒", "恐惧术"}, + [4] = {"腐蚀术", "虚弱诅咒"}, + [6] = {"虚弱诅咒 2级", "暗影箭 3级"}, + [8] = {"痛苦诅咒"}, + [10] = {"吸取灵魂", "献祭 2级", "恶魔皮肤 2级", "制造初级治疗石"}, + [12] = {"生命分流 2级", "生命通道", "魔息术"}, + [14] = {"腐蚀术 2级", "吸取生命", "鲁莽诅咒"}, + [16] = {"生命分流 2级"}, + [18] = {"痛苦诅咒 2级", "制造初级灵魂石", "灼热之痛"}, + [20] = {"献祭 3级", "生命通道 2级", "暗影箭 4级", "召唤仪式", "魔甲术", "火焰之雨"}, + [22] = {"吸取生命 2级", "虚弱诅咒 3级", "基尔罗格之眼", "制造次级治疗石"}, + [24] = {"腐蚀术 3级", "吸取灵魂 2级", "吸取法力", "感知恶魔"}, + [26] = {"生命分流 3级", "语言诅咒", "侦测次级隐形"}, + [28] = {"鲁莽诅咒 2级", "痛苦诅咒 3级", "生命通道 3级", "放逐术", "制造次级火焰石"}, + [30] = {"吸取生命 3级", "献祭 4级", "奴役恶魔", "制造次级灵魂石", "地狱烈焰", "魔甲术 2级"}, + [32] = {"虚弱诅咒 4级", "恐惧术 2级", "元素诅咒", "防护暗影结界"}, + [34] = {"生命分流 4级", "吸取法力 2级", "火焰之雨 2级", "制造治疗石", "灼热之痛 3级"}, + [36] = {"生命通道 4级", "制造法术石", "制造火焰石"}, + [38] = {"吸取灵魂 3级", "痛苦诅咒 4级", "生命虹吸 2级", "侦测隐形"}, + [40] = {"恐惧嚎叫", "献祭 5级", "制造灵魂石", "奴役恶魔 2级"}, + [42] = {"虚弱诅咒 5级", "鲁莽诅咒 3级", "死亡缠绕", "防护暗影结界 2级", "地狱烈焰 2级", "灼热之痛 4级"}, + [44] = {"吸取生命 5级", "生命通道 5级", "暗影诅咒", "暗影箭 7级"}, + [46] = {"生命分流 5级", "制造强效治疗石", "制造强效火焰石", "火焰之雨 3级"}, + [48] = {"痛苦诅咒 5级", "放逐术 2级", "灵魂之火", "制造强效法术石"}, + [50] = {"虚弱诅咒 6级", "死亡缠绕 2级", "恐惧嚎叫 2级", "魔甲术 4级", "吸取灵魂 4级", "吸取法力 4级", "生命虹吸 3级", "黑暗契约 2级", "侦测强效隐形", "暗影箭 8级", "灼热之痛 5级"}, + [52] = {"防护暗影结界 3级", "生命通道 6级"}, + [54] = {"腐蚀术 6级", "吸取生命 6级", "地狱烈焰 3级", "灵魂之火 2级"}, + [56] = {"鲁莽诅咒 4级", "暗影诅咒 2级", "死亡缠绕 3级", "生命虹吸 4级", "制造特效火焰石"}, + [58] = {"痛苦诅咒 6级", "奴役恶魔 3级", "火焰之雨 4级", "制造特效治疗石", "灼热之痛 6级"}, + [60] = {"厄运诅咒", "元素诅咒 3级", "魔甲术 5级", "制造特效法术石", "暗影箭 9级"}, +}, + +DRUID = { + [4] = {"月火术", "回春术"}, + [6] = {"荆棘术", "愤怒 2级"}, + [8] = {"纠缠根须", "治疗之触 2级"}, + [10] = {"月火术 2级", "回春术 2级", "挫志咆哮", "野性印记 2级"}, + [12] = {"愈合", "狂怒"}, + [14] = {"荆棘术 2级", "愤怒 3级", "重击"}, + [16] = {"月火术 3级", "回春术 3级", "挥击"}, + [18] = {"精灵之火", "休眠", "愈合 2级", "槌击 2级"}, + [20] = {"纠缠根须 2级", "星火术", "月火术 4级", "回春术 4级", "挫志咆哮 2级", "猎豹形态", "撕扯", "爪击", "治疗之触 4级", "潜行", "野性印记 3级", "复生"}, + [22] = {"月火术 4级", "回春术 4级", "愤怒 4级", "撕碎", "安抚动物"}, + [24] = {"荆棘术 3级", "挥击 2级", "扫击", "猛虎之怒", "撕碎", "解除诅咒"}, + [26] = {"星火术 2级", "月火术 5级", "槌击 3级", "爪击 2级", "治疗之触 5级", "驱毒术"}, + [28] = {"撕扯 2级", "挑战咆哮", "畏缩"}, + [30] = {"精灵之火 2级", "星火术 3级", "愤怒 5级", "旅行形态", "撕碎 2级", "重击 2级", "野性印记 4级", "宁静", "复生 2级", "虫群 2级"}, + [32] = {"挫志咆哮 3级", "挥击 3级", "毁灭", "撕碎 3级", "治疗之触 6级", "追踪人型生物", "凶猛撕咬"}, + [34] = {"荆棘术 4级", "月火术 6级", "回春术 6级", "槌击 4级", "扫击 2级", "爪击 3级"}, + [36] = {"愤怒 6级", "突袭", "狂暴回复"}, + [38] = {"纠缠根须 4级", "休眠 2级", "安抚动物 2级", "爪击 3级", "撕碎 3级"}, + [40] = {"星火术 4级", "飓风", "挥击 4级", "潜行 2级", "畏缩 2级", "巨熊形态", "豹之优雅", "凶猛撕咬 2级", "回春术 7级", "宁静 2级", "复生 3级", "虫群 3级", "激活"}, + [42] = {"挫志咆哮 4级", "槌击 5级", "毁灭 2级"}, + [44] = {"荆棘术 5级", "树皮术", "撕扯 4级", "扫击 3级", "治疗之触 8级"}, + [46] = {"愤怒 7级", "重击 3级", "突袭 2级"}, + [48] = {"纠缠根须 5级", "月火术 8级", "猛虎之怒 3级", "撕碎 4级"}, + [50] = {"星火术 5级", "槌击 6级", "宁静 3级", "复生 4级", "虫群 4级"}, + [52] = {"挫志咆哮 5级", "撕扯 5级", "畏缩 3级", "凶猛撕咬 4级", "回春术 9级"}, + [54] = {"荆棘术 6级", "愤怒 8级", "月火术 9级", "挥击 5级", "扫击 4级", "爪击 4级"}, + [56] = {"凶猛撕咬 4级", "治疗之触 10级"}, + [58] = {"纠缠根须 6级", "星火术 6级", "月火术 10级", "爪击 5级", "槌击 7级", "毁灭 4级", "回春术 10级"}, + [60] = {"飓风 3级", "潜行 3级", "猛虎之怒 4级", "撕扯 6级", "宁静 4级", "复生 5级", "虫群 5级", "野性印记 7级", "愈合 9级"}, +}, diff --git a/agent-tools/TALENT_TRAINER_SKILLS.lua b/agent-tools/TALENT_TRAINER_SKILLS.lua new file mode 100644 index 0000000..7d90e7e --- /dev/null +++ b/agent-tools/TALENT_TRAINER_SKILLS.lua @@ -0,0 +1,73 @@ +--[[ +TALENT-based trainer skill data for WoW Classic +Skills where Rank 1 comes from talent points, higher ranks from class trainer. +Only includes ranks that are NOT "默认开启" and have EVEN required levels. +]] + +local TALENT_TRAINER_SKILLS = { + -- WARRIOR: 致死打击, 嗜血, 盾牌猛击 - NOT FOUND in provided warrior file + WARRIOR = { + -- 致死打击 (Mortal Strike), 嗜血 (Bloodthirst), 盾牌猛击 (Shield Slam) + -- These skills were not found in the warrior class data file. + }, + + -- ROGUE: 出血 (Hemorrhage) - Rank 1 from talent (默认开启), Ranks 2-3 from trainer + ROGUE = { + {base="出血", level=46, display="出血 2级"}, + {base="出血", level=58, display="出血 3级"}, + }, + + -- PRIEST: 精神鞭笞 (Mind Flay) - Rank 1 from talent (默认开启), Ranks 2-6 from trainer + PRIEST = { + {base="精神鞭笞", level=28, display="精神鞭笞 2级"}, + {base="精神鞭笞", level=36, display="精神鞭笞 3级"}, + {base="精神鞭笞", level=44, display="精神鞭笞 4级"}, + {base="精神鞭笞", level=52, display="精神鞭笞 5级"}, + {base="精神鞭笞", level=60, display="精神鞭笞 6级"}, + }, + + -- HUNTER: 瞄准射击, 反击, 翼龙钉刺 - NOT FOUND in provided hunter file + HUNTER = { + -- 瞄准射击 (Aimed Shot), 反击 (Counterattack), 翼龙钉刺 (Wyvern Sting) + -- These skills were not found in the hunter class data file. + }, + + -- MAGE: 炎爆术 (Pyroblast) - Rank 1 from talent (默认开启), Ranks 2-8 from trainer + -- 冲击波 (Blast Wave), 寒冰屏障 (Ice Barrier) - NOT FOUND in provided mage file + MAGE = { + {base="炎爆术", level=24, display="炎爆术 2级"}, + {base="炎爆术", level=30, display="炎爆术 3级"}, + {base="炎爆术", level=36, display="炎爆术 4级"}, + {base="炎爆术", level=42, display="炎爆术 5级"}, + {base="炎爆术", level=48, display="炎爆术 6级"}, + {base="炎爆术", level=54, display="炎爆术 7级"}, + {base="炎爆术", level=60, display="炎爆术 8级"}, + -- 冲击波 (Blast Wave), 寒冰屏障 (Ice Barrier) - not found in file + }, + + -- PALADIN: 神圣震击 (Holy Shock) - NOT FOUND in provided paladin file + PALADIN = { + -- 神圣震击 (Holy Shock) was not found in the paladin class data file. + }, + + -- WARLOCK: 暗影灼烧 (Shadowburn) - NOT FOUND; 生命虹吸, 黑暗契约 found; 灵魂之火 skipped per user + WARLOCK = { + {base="生命虹吸", level=38, display="生命虹吸 2级"}, + {base="生命虹吸", level=48, display="生命虹吸 3级"}, + {base="生命虹吸", level=58, display="生命虹吸 4级"}, + {base="黑暗契约", level=50, display="黑暗契约 2级"}, + {base="黑暗契约", level=60, display="黑暗契约 3级"}, + -- 暗影灼烧 (Shadowburn) - not found in file + -- 灵魂之火 - skipped (already in regular data per user) + }, + + -- DRUID: 虫群 (Insect Swarm) - Rank 1 from talent (默认开启), Ranks 2-5 from trainer + DRUID = { + {base="虫群", level=30, display="虫群 2级"}, + {base="虫群", level=40, display="虫群 3级"}, + {base="虫群", level=50, display="虫群 4级"}, + {base="虫群", level=60, display="虫群 5级"}, + }, +} + +return TALENT_TRAINER_SKILLS diff --git a/agent-tools/class_trainer_skills.lua b/agent-tools/class_trainer_skills.lua new file mode 100644 index 0000000..17ee722 --- /dev/null +++ b/agent-tools/class_trainer_skills.lua @@ -0,0 +1,63 @@ +PRIEST = { + [4] = {"暗言术:痛", "次级治疗术 2级"}, + [6] = {"真言术:盾", "惩击 2级"}, + [8] = {"恢复", "渐隐术"}, + [10] = {"暗言术:痛 2级", "心灵震爆", "复活术"}, + [12] = {"真言术:盾 2级", "心灵之火", "真言术:韧 2级", "惩击 3级", "祛病术"}, + [14] = {"恢复 2级", "心灵尖啸", "惩击 3级"}, + [16] = {"治疗术", "心灵震爆 2级"}, + [18] = {"真言术:盾 3级", "驱散魔法", "星辰碎片 2级", "绝望祷言 2级", "暗言术:痛 3级"}, + [20] = {"心灵之火 2级", "束缚亡灵", "回馈 2级", "恢复 3级", "快速治疗", "安抚心灵", "渐隐术 2级", "神圣之火", "虚弱之触 2级", "虚弱妖术 2级"}, + [22] = {"惩击 4级", "心灵视界", "复活术 2级", "心灵震爆 3级"}, + [24] = {"真言术:盾 4级", "真言术:韧 3级", "法力燃烧", "神圣之火 2级"}, + [26] = {"星辰碎片 3级", "恢复 4级", "暗言术:痛 4级", "绝望祷言 3级"}, + [28] = {"治疗术 3级", "心灵震爆 4级", "精神鞭笞 2级", "心灵尖啸 2级", "暗影守卫 2级"}, + [30] = {"真言术:盾 5级", "心灵之火 3级", "艾露恩的赐福 3级", "回馈 2级", "治疗祷言", "束缚亡灵 2级", "虚弱之触 3级", "虚弱妖术 3级", "精神控制", "防护暗影", "渐隐术 3级"}, + [32] = {"法力燃烧 2级", "恢复 5级", "驱除疾病", "快速治疗 3级"}, + [34] = {"漂浮术", "星辰碎片 4级", "暗言术:痛 5级", "心灵震爆 5级", "复活术 3级", "治疗术 4级"}, + [36] = {"真言术:盾 6级", "驱散魔法 2级", "真言术:韧 4级", "噬灵瘟疫 3级", "星辰碎片 5级", "心灵之火 4级", "恢复 6级", "惩击 6级", "精神鞭笞 3级", "暗影守卫 3级", "安抚心灵 2级"}, + [38] = {"恢复 6级", "惩击 6级"}, + [40] = {"心灵之火 4级", "艾露恩的赐福 4级", "法力燃烧 3级", "回馈 3级", "神圣之灵 2级", "治疗祷言 2级", "束缚亡灵 2级", "虚弱之触 4级", "虚弱妖术 4级", "防护暗影 2级", "心灵震爆 6级", "渐隐术 4级"}, + [42] = {"真言术:盾 7级", "星辰碎片 5级", "神圣之火 5级", "心灵尖啸 3级"}, + [44] = {"恢复 7级", "精神控制 2级", "心灵视界 2级"}, + [46] = {"惩击 7级", "强效治疗术 2级", "心灵震爆 7级", "复活术 4级"}, + [48] = {"真言术:盾 8级", "真言术:韧 5级", "法力燃烧 4级", "噬灵瘟疫 4级", "星辰碎片 6级", "神圣之火 6级", "恢复 8级", "暗言术:痛 7级"}, + [50] = {"心灵之火 5级", "艾露恩的赐福 5级", "回馈 4级", "神圣之灵 3级", "治疗祷言 3级", "虚弱之触 5级", "虚弱妖术 5级", "恢复 8级", "绝望祷言 6级"}, + [52] = {"强效治疗术 3级", "心灵震爆 8级", "安抚心灵 3级"}, + [54] = {"真言术:盾 9级", "神圣之火 7级", "惩击 8级"}, + [56] = {"法力燃烧 5级", "恢复 9级", "防护暗影 3级", "心灵尖啸 4级", "暗言术:痛 8级"}, + [58] = {"复活术 5级", "强效治疗术 4级", "心灵震爆 9级"}, + [60] = {"真言术:盾 10级", "心灵之火 6级", "真言术:韧 6级", "束缚亡灵 3级", "艾露恩的赐福 5级", "回馈 5级", "神圣之灵 4级", "精神祷言", "治疗祷言 4级", "虚弱之触 6级", "虚弱妖术 6级", "噬灵瘟疫 6级", "神圣之火 8级", "精神鞭笞 6级", "暗影守卫 6级", "渐隐术 6级"}, +}, + +SHAMAN = { + [4] = {"地震术"}, + [6] = {"治疗波 2级", "地缚图腾"}, + [8] = {"闪电箭 2级", "石爪图腾", "地震术 2级", "闪电之盾"}, + [10] = {"烈焰震击", "火舌武器", "大地之力图腾"}, + [12] = {"净化术", "火焰新星图腾", "先祖之魂", "治疗波 3级"}, + [14] = {"闪电箭 3级", "地震术 3级", "石肤图腾 2级"}, + [16] = {"闪电之盾 2级", "石化武器 3级", "消毒术"}, + [18] = {"烈焰震击 2级", "火舌武器 2级", "石爪图腾 2级", "治疗波 4级", "战栗图腾"}, + [20] = {"闪电箭 4级", "灼热图腾 2级", "冰霜震击", "幽魂之狼", "次级治疗波"}, + [22] = {"火焰新星图腾 2级", "水下呼吸", "祛病术", "清毒图腾"}, + [24] = {"净化术 2级", "地震术 4级", "石肤图腾 3级", "石化武器 4级", "大地之力图腾 2级", "闪电之盾 3级", "抗寒图腾", "先祖之魂 2级"}, + [26] = {"闪电箭 5级", "熔岩图腾", "火舌武器 3级", "视界术", "法力之泉图腾"}, + [28] = {"石爪图腾 3级", "烈焰震击 3级", "冰封武器 2级", "抗火图腾", "火舌图腾", "水上行走", "次级治疗波 2级"}, + [30] = {"灼热图腾 3级", "星界传送", "根基图腾", "石化武器 5级", "风怒武器", "自然抗性图腾", "治疗之泉图腾 2级"}, + [32] = {"闪电箭 6级", "火焰新星图腾 3级", "闪电之盾 4级", "治疗波 6级", "闪电链", "风怒图腾"}, + [34] = {"冰霜震击 2级", "石肤图腾 4级", "岗哨图腾"}, + [36] = {"地震术 5级", "熔岩图腾 2级", "火舌武器 4级", "法力之泉图腾 2级", "次级治疗波 3级", "风墙图腾"}, + [38] = {"石爪图腾 4级", "冰封武器 3级", "抗寒图腾 2级", "大地之力图腾 3级", "火舌图腾 2级"}, + [40] = {"闪电箭 8级", "闪电链 2级", "烈焰震击 4级", "石肤图腾 5级", "治疗波 7级", "治疗链", "治疗之泉图腾 3级", "风怒武器 2级"}, + [42] = {"火焰新星图腾 4级", "灼热图腾 4级", "抗火图腾 2级", "风之优雅图腾"}, + [44] = {"闪电之盾 6级", "石化武器 6级", "冰霜震击 3级", "熔岩图腾 3级", "自然抗性图腾 2级", "风墙图腾 2级"}, + [46] = {"火舌武器 5级", "治疗链 2级"}, + [48] = {"地震术 6级", "石爪图腾 5级", "抗寒图腾 3级", "火舌图腾 3级", "治疗波 8级"}, + [50] = {"闪电箭 9级", "灼热图腾 5级", "治疗之泉图腾 4级", "风怒武器 3级", "宁静之风图腾"}, + [52] = {"烈焰震击 5级", "大地之力图腾 4级", "风怒图腾 3级", "次级治疗波 5级"}, + [54] = {"石化武器 7级", "石肤图腾 6级", "抗寒图腾 3级"}, + [56] = {"闪电箭 10级", "闪电链 4级", "熔岩图腾 4级", "冰封武器 4级", "抗火图腾 3级", "火舌图腾 4级", "风之优雅图腾 2级", "风墙图腾 3级", "治疗波 9级", "法力之泉图腾 4级"}, + [58] = {"冰霜震击 4级"}, + [60] = {"灼热图腾 6级", "风怒武器 4级", "自然抗性图腾 3级", "次级治疗波 6级", "治疗之泉图腾 5级"}, +}, diff --git a/agent-tools/class_trainer_skills_output.lua b/agent-tools/class_trainer_skills_output.lua new file mode 100644 index 0000000..187bcd2 --- /dev/null +++ b/agent-tools/class_trainer_skills_output.lua @@ -0,0 +1,63 @@ +WARRIOR = { + [4] = {"冲锋", "撕裂"}, + [6] = {"雷霆一击"}, + [8] = {"英勇打击 2级", "断筋"}, + [10] = {"撕裂 2级", "血性狂暴"}, + [12] = {"压制", "盾击", "战斗怒吼 2级"}, + [14] = {"挫志怒吼", "复仇"}, + [16] = {"英勇打击 3级", "惩戒痛击", "盾牌格挡"}, + [18] = {"雷霆一击 2级", "缴械"}, + [20] = {"撕裂 3级", "反击风暴", "顺劈斩"}, + [22] = {"战斗怒吼 3级", "破甲攻击 2级", "破胆怒吼"}, + [24] = {"英勇打击 4级", "挫志怒吼 2级", "复仇 2级", "斩杀"}, + [26] = {"冲锋 2级", "惩戒痛击 2级", "挑战怒吼"}, + [28] = {"雷霆一击 3级", "压制 2级", "盾墙"}, + [30] = {"撕裂 4级", "顺劈斩 2级"}, + [32] = {"英勇打击 5级", "断筋 2级", "斩杀 2级", "战斗怒吼 4级", "盾击 2级", "狂暴之怒"}, + [34] = {"挫志怒吼 3级", "复仇 3级", "破甲攻击 3级"}, + [36] = {"惩戒痛击 3级", "旋风斩"}, + [38] = {"雷霆一击 4级", "猛击 2级", "拳击"}, + [40] = {"英勇打击 6级", "撕裂 5级", "顺劈斩 3级", "斩杀 3级"}, + [42] = {"战斗怒吼 5级", "拦截 2级"}, + [44] = {"压制 3级", "挫志怒吼 4级", "复仇 4级"}, + [46] = {"冲锋 3级", "惩戒痛击 4级", "猛击 3级", "破甲攻击 4级"}, + [48] = {"英勇打击 7级", "雷霆一击 5级", "斩杀 4级"}, + [50] = {"撕裂 6级", "鲁莽", "顺劈斩 4级"}, + [52] = {"战斗怒吼 6级", "拦截 3级", "盾击 3级"}, + [54] = {"断筋 3级", "挫志怒吼 5级", "猛击 4级", "复仇 5级"}, + [56] = {"英勇打击 8级", "惩戒痛击 5级", "斩杀 5级"}, + [58] = {"雷霆一击 6级", "拳击 2级", "破甲攻击 5级"}, + [60] = {"撕裂 7级", "压制 4级", "顺劈斩 5级"}, +}, + +PALADIN = { + [4] = {"力量祝福", "审判"}, + [6] = {"圣光术 2级", "圣佑术", "十字军圣印"}, + [8] = {"纯净术", "制裁之锤"}, + [10] = {"圣疗术", "正义圣印 2级", "虔诚光环 2级", "保护祝福"}, + [12] = {"力量祝福 2级", "十字军圣印 2级"}, + [14] = {"圣光术 3级"}, + [16] = {"正义之怒", "惩罚光环"}, + [18] = {"正义圣印 3级", "圣佑术 2级"}, + [20] = {"驱邪术", "圣光闪现", "虔诚光环 3级"}, + [22] = {"圣光术 4级", "专注光环", "公正圣印", "力量祝福 3级", "十字军圣印 3级"}, + [24] = {"超度亡灵", "救赎 2级", "智慧祝福 2级", "制裁之锤 2级", "保护祝福 2级"}, + [26] = {"圣光闪现 2级", "正义圣印 4级", "拯救祝福", "惩罚光环 2级"}, + [28] = {"驱邪术 2级"}, + [30] = {"圣疗术 2级", "圣光术 5级", "光明圣印", "虔诚光环 4级", "神圣干涉"}, + [32] = {"冰霜抗性光环", "力量祝福 4级", "十字军圣印 4级"}, + [34] = {"智慧祝福 3级", "圣光闪现 3级", "正义圣印 5级", "圣盾术"}, + [36] = {"驱邪术 3级", "救赎 3级", "火焰抗性光环", "惩罚光环 3级"}, + [38] = {"圣光术 6级", "超度亡灵 2级", "智慧圣印", "保护祝福 3级"}, + [40] = {"光明祝福", "光明圣印 2级", "虔诚光环 5级", "制裁之锤 3级", "暗影抗性光环 2级", "命令圣印 3级"}, + [42] = {"圣光闪现 4级", "正义圣印 6级", "力量祝福 5级", "十字军圣印 5级"}, + [44] = {"驱邪术 4级", "智慧祝福 4级", "冰霜抗性光环 2级"}, + [46] = {"圣光术 7级", "惩罚光环 4级"}, + [48] = {"救赎 4级", "智慧圣印 2级", "火焰抗性光环 2级"}, + [50] = {"圣疗术 3级", "圣光闪现 5级", "光明祝福 2级", "光明圣印 3级", "正义圣印 7级", "虔诚光环 6级", "圣盾术 2级", "庇护祝福 3级", "命令圣印 4级"}, + [52] = {"驱邪术 5级", "超度亡灵 3级", "愤怒之锤 2级", "暗影抗性光环 3级", "力量祝福 6级", "十字军圣印 6级", "强效力量祝福"}, + [54] = {"圣光术 8级", "智慧祝福 5级", "强效智慧祝福", "制裁之锤 4级", "牺牲祝福 2级"}, + [56] = {"冰霜抗性光环 3级", "惩罚光环 5级"}, + [58] = {"圣光闪现 6级", "智慧圣印 3级", "正义圣印 8级"}, + [60] = {"驱邪术 6级", "神圣愤怒 2级", "救赎 5级", "光明祝福 3级", "光明圣印 4级", "愤怒之锤 3级", "强效光明祝福", "强效智慧祝福 2级", "虔诚光环 7级", "火焰抗性光环 3级", "庇护祝福 4级", "命令圣印 5级", "强效力量祝福 2级", "强效拯救祝福", "强效王者祝福", "强效庇护祝福"}, +}, \ No newline at end of file diff --git a/agent-tools/parse_skills.py b/agent-tools/parse_skills.py new file mode 100644 index 0000000..6c0b6bb --- /dev/null +++ b/agent-tools/parse_skills.py @@ -0,0 +1,78 @@ +# -*- coding: utf-8 -*- +import re + +def parse_file(filepath): + with open(filepath, 'r', encoding='utf-8') as f: + content = f.read() + + result = {} + # Split by "需要等级" to find each skill block - the skill name is before it + parts = re.split(r'(需要等级\s+\d+)', content) + + for i in range(1, len(parts), 2): + if i+1 >= len(parts): + break + level_line = parts[i] # "需要等级 12" + level_match = re.search(r'需要等级\s+(\d+)', level_line) + if not level_match: + continue + level = int(level_match.group(1)) + if level % 2 != 0: + continue + + after = parts[i+1] + learn_match = re.search(r'学习:\s*(.+?)(?:\n|$)', after) + if not learn_match or '默认开启' in learn_match.group(1): + continue + + # Get skill name from the part before "需要等级" + before = parts[i-1] + lines = before.strip().split('\n') + skill_line = None + for line in reversed(lines): + line = line.strip() + if not line or 'javascript' in line or line.startswith('['): + continue + if re.match(r'^[\u4e00-\u9fff\s:]+(等级\s+\d+)?\s*$', line) and len(line) < 50: + skill_line = line + break + if not skill_line: + continue + + rank_match = re.match(r'^(.+?)\s+等级\s+(\d+)\s*$', skill_line) + if rank_match: + skill_base = rank_match.group(1).strip() + rank = int(rank_match.group(2)) + display = skill_base if rank == 1 else f"{skill_base} {rank}级" + else: + display = skill_line + + if any(x in display for x in ['魔兽世界', '职业', '需要', '·']): + continue + + if level not in result: + result[level] = [] + if display not in result[level]: + result[level].append(display) + + return dict(sorted(result.items())) + +def format_lua(data, name): + lines = [f"{name} = {{"] + for level, skills in sorted(data.items()): + skills_str = ", ".join(f'"{s}"' for s in sorted(skills)) + lines.append(f" [{level}] = {{{skills_str}}},") + lines.append("},") + return "\n".join(lines) + +priest_file = r'C:\Users\rucky\.cursor\projects\e-Game-trutle-wow-Interface-AddOns-Nanami-UI\agent-tools\8aaa3634-8b06-4c6a-838c-18f248f9b747.txt' +shaman_file = r'C:\Users\rucky\.cursor\projects\e-Game-trutle-wow-Interface-AddOns-Nanami-UI\agent-tools\e5e3b3f9-edfa-4a99-a95e-c9f7ed954371.txt' + +priest_data = parse_file(priest_file) +shaman_data = parse_file(shaman_file) + +output = format_lua(priest_data, "PRIEST") + "\n\n" + format_lua(shaman_data, "SHAMAN") +outpath = r'C:\Users\rucky\.cursor\projects\e-Game-trutle-wow-Interface-AddOns-Nanami-UI\agent-tools\class_trainer_skills.lua' +with open(outpath, 'w', encoding='utf-8') as f: + f.write(output) +print("Done. Output written to class_trainer_skills.lua") diff --git a/img/UI-Classes-Circles.tga b/img/UI-Classes-Circles.tga new file mode 100644 index 0000000000000000000000000000000000000000..542d0f7139d12c4252a6951099d87bd1680d23da GIT binary patch literal 86097 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 BnrZ+5 literal 0 HcmV?d00001 diff --git a/img/cat.tga b/img/cat.tga new file mode 100644 index 0000000000000000000000000000000000000000..c697d9bfb9a2d9279fe20a54c7f9cae71ec35327 GIT binary patch literal 262162 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

YDoz?$T`BYIa{L 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 z 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 z zuv;x*pKRo;+sGR7AhMAeZ5haMp~kiOBp=_#yYXbfUrl#s5M$jJde;jRwESfr4$#xR zhb(wFpUs>f@u9vp{MR;bk2r%>d)UD<#y>C9L3me0nDgM2_n`ib#$WN&i!te;P^M}BjbGucnuT?7AO3_s)9F}~#m zdyz|vpS{+QneEs{jiCp>&=-D-^ZdsyY~Xj1u-}|DY-;_a_8Q}7vSkzUs#nfMnXXX9c~yJ^{njm)u=J=P*NXs>?H^sq8bf!%pvzk7f+H}N^1-S>ZY6t(R5{?7;W=1catOZO*Xj_>(|N3wEFIepk;9G(_089%1<)i#ix77yo)>+@ZL3`5~?jF8FxCg+1hw%lS z>8NJHW0+kYXw9nuVm$u(<*OXpHD%Qs>*Epj<13cRQ+kIJcj15ap%|?GRCkfQc|`(gj(TMfHf5A*h&;Bp^e*Yr>`ou`%SaEb7r#_-5yM$je_QVcb^53+XwZ1*EcX%XroCB}r z>3pa6T_2XiBYp3$jakRPt+&oM1Fdm;#GLzuKA(`w7&7KwDj$kdG26EsefNNLPv7ES z45fehA$HiIJaV3M-6?#JhSPXjmkr}%4}NUXnZ*@bsv~4(JN;;4zuXefsC>)LY-hap z{n@wHI9}v%eln1U9?2IDhz~^myJDLT^o76PJ5cZc;d>a|J9sTDp6~Ac1`v)<%!mE% z4dJ{wHg}Iep4-=X+T$3RtffC*;XfZ3V+*xK%U^ft{v^!tuX>%|wfDjQ{@cB9IIOGkn+U_j0yyp4gLD$M^k- z*?dP1d)U-kxi0sOBXYH;`qi`j&e9@$>`6~Dk!|Dt!v8Sexch+L!~5OUJ4W@;es*QU zY{K`+3xnJN$ZC&u-tolUe&>Vf@cx4N;XC{=4@=ZD``NMgMDwk|lWugC&um|9CBL|1 zk95vn_DnL*cYMYtbbFXsd$I1x-*n`QqaB)`#pv}r|FUD__#%3UdG@87zjX=wwZ`Te>ySNkC6jX_ zwTb-XnDsym^qx}vyDN6>$J_Tm|DH}wfd6o{ckS?aWBBDAK5SP%;CJu#S{QB2e*Gwn z_gw&g@BQJw=dk`M?W&8Nuf@w+a%=hD9Wngh^?2Ez4dnh^x<3hX;!$m;H&Rc%gQ>;G z_kVR54*PfaVe|DjfbngyOq8(tySN$1sjPqd;Cp+n1TIax$*j1xv3_qf!;6eXHRYC zYMqNO{pjw@>Z!ZHz7H(h!!113fXFkl#vZ;Qw|e>{@ z#bQ;QYQ^-t2Z-z9oDSu+{pnqfXyr{gsI^{hW*6rmXOwenh2n#+XR#%BdVkQ0Pc16$ z*b}akAEmo<^!v6bE?d_@L^E;kL>0N43UTr+ak8y=50M%SPgY?f6qnur<79``L#3TK54YFMJDt_hEf~>%x9(oyFID zFCNM3yian?{cM<4JOHPYweRC2v5&y z#LQWC7E{h+WATjSQ}6%cF%0jUe|ncM;l6Qet!s}OL?*f;a`2Tr))v$0XRS5l)JJlr zI(Szsvx)b8wL`riN59?oUO(|SJcr+Y!|(k)EblHb-}xuDy90P`z1H)*8-)G4HjcZ1 zb?zQpz9qA}pYImk*XS>X`Gt-6_%7X_ggO4>>+oOu6#QQ~JoSY0{rx}u?_Gbl3$JH8 zF#2;I;xjfOTIqG~EfuDctXRqJ--8W#rF>;V$%J)qA&XJGwN3e(f#r_rh zS1crBIbB}C$(>UxXY5z=%F*&M?02uh$2|P$JaNblc#1(jQFp2v>|{=BEE#s*t$Q|p z8~ay&TO)4eFk2$)t6jD6v!3nyCaOj1qufvv)fhER4OOe!i&yqam*R+jz03RW$*Rfx zuSSQ>*5Tvq?iDbEy!KjWeeeBzWnHAkv7vV;eZ<~cSYf|C-2wPz-UZ-;7?bDKU@iZ! z9ow=EKg>JuGl{RqZ7sd&EMDN#|6}j&b!=<4vyS^F2oN`bFTjB%6IvqSAOx3yWRnnq z?8Jc+ju1#h-~$pOLjq*JOhSq!Bbnd`3(JxNcsWV0OEYP zw$_b)_@VuwdD?!v)-E66XYqdiC+Cyq_--Aq@$oV1g&$eFu%EBz_wzi!-0LSlXpF@K z#Q^$XGxhKwJ*`JJYOVHM8(c3LNA|4DddtV@>KfOFDXuGz``t@?pFH|mTl%7#eTzgl z`*LFz6Sa=_I#{;R&iZ4!Fwpfwe#~dciT~}z+h51wc(;W2o#W&Fe#6&(e{#AyZ=K_=atDlVeRlYHA%|CnaYh#z16Lw&ihsOR9o*83n#++L-@xL{tY>pHE z$Gx4!-xmYK_4aP+6$^B2-HP4WyqHwZ?(jsv)|)k@tv=;q0Q_&w_a0*E_nd2e#Q%6A zJFtmPckL9k#;1J=TQ{)`WZ56IOPvP#^SXKgo3| z8|u>>OKj3vfON&zgp5)}Z!qA7@mb?Tl9}0$c0Tc!@a~HPaJ@N|m*$?oGT#yF z-(2S#?Onx)eCc}c&u5ASJm(AU`4e9=zx2kHd<}0}17cmd#P_W&W1c+8FUV<4b?u%F ztS9o_+XwSg@^PbQ>?-Gv{GC6$-uAu3RrG4lkL!&)?r$v?dy(y0GB2=`j_|?!(8C-W zgEdVL_LE!dY^yGv)iWNpQ7##i^pI~`U)qxizw!V41`wy?T^ugoXZ|Y&u+L{7J2s*-9VOS{6Z>XI_2_MEFhl$6v(UclgD+%h zBZax<*H|0#%;&Z7;eT@^*M_=#nIFpeN3nGN1-Fz-`+d^zzsA5P__#iBsC9rV<<_k=f~VU~CGxb@r+faUFW6Bm5SM#C_x#Qe-&`oO8a1Hs?U&u}rG$GhL)|L^|R9uMA+^Np|b0NjqJ#S1uE zdofXUohy(x_xJGeE>`e8)aBejJ=b(|Zm`b_mTu&-iF@NTcH?GCHe?g!kB$AkKevX> zwPf6K*y#)ap2EpFMsY#!0PMl<-T|z2i2rdq-j~CCc`e@WjjefMun!(?uc#3`5mS3@{b!pD{8Z3$9C+FjLae%XZ*ToFiaX`FJ27iF}eBE_E ztWUm#@2w$uTrW4r^vG9~IeVHut4y4bfABl8I)Bp_zbw{njo@hUfc2R!#jdS4x#!j( zJ;~pDgcU!CA=K9wp23%LX8_i=e&wxmd^i(3(9d&itP47ms~@s)7diDo56|dJFPLU* zdtb5iu&#;$j8{F04T}Mc<1r60ZvB&wxA8Z*WI5*-19S%9{X70PHv9iL-}SujJAiWa z`2%@z`W@ddj-O@41-M(d#% zeENVjXYb!0+6a)PJ|M@%neSm(a zUeCSOC)vjCT4D>F)P8%fkxSgH+HrFFj#Sygu{zX_mRhjj(F(F)sWcri4FY zGV*sHt8aM17Ic-lEZ0_0I z9Gh$Lfb)A?9{=CB&&T=dSqFR=2IDz+Z{G2cIkhhM2j7MR`oiJ)8BUkTk>`sr0@m1C{Rp;zlpZe8Ns;(+|$IO2W$9p~#0#~XKh zf4MR_n>h2beys)VvWjD?3SC$_WyEgMw;X43;++{1pEGC09-z~UR{5; zLk#X5&NHd=f!^g?pM0pZD)Yl1<3kuj*J1#Be`|T_^_**CZS3Y>-+Z1wOzz*;E0(ox zW{j*Y-S*yn`HVFOPw-Ls5ChIqf69(>NaP7h;reP60y_{u-&?3ymtdh5Nm?CFeR z@Avs{#}A7ET4S(>539FvXyFFmEl$wJGrH=Juj#L|hxl}J=fa2L0QK4nSeNm> zyqJJb8o!)u{!KQXwia-@`#2x}>$g;FT&|rqf=-Q3d3A~d z_88aLl(+8a+?XEo60+5`ukIZ{X8`VTIS$6*&hw2E|Ig%iAjJeT22fYK_VRIm_wxAP zwYro4_2=BdTuHda97^z=?%V$s9)&A>E?jzS?C2yWoztu zjQHLefbYBUxifun03H_uw8#J5-}wFy|KR_9fB(iu-5CSm@7@K71FT1V;WTq2mMjKP zMo<1s_s`w?Td(|EPM)#jethX#&Nr-a>)w6qg01M`e)H<`dG+YeUX%ZKJhjS-tE^MF zR3eMLVF7<5lkAc>l%8~AgRbS0dXxLLHy)fxZ~F0N_6)z`eHddOUK^Om#^EU4W->l= z))|0%Y4SdO;(hvxE9d~fCWadiJtb}6+O>~$PbYTBKIP_4x#!hA`P;JqA8M{~vwQQ; z?{StmP!gx&A$9p=eyJ`WQil)W13AAo|LXAtew07vtMNUbgf+bfpo2Q;lb_ExfbZ(Z zI?+GfaGG*!$=adA#0GlcLD)(kDGsG4ezg{~YyaPv;{5je##$J&|p z@tj@c^f5MTlup@}&Yl|+Inq9JTsWqzHD(Qy@t9Y^BC_F(7{D1o=k3np?c;I!{_X$b zW3d3PkMn2VdjRv?89?6w1$^Gi+tFw*v{^n0IPV>XI5}Uw%zS(o*dTjjf zPOJkgVG{Lwo79GkNNIr8oQ%jfyJbs+)OT$?iyN&ye#3s^ zpSYc_;sJ?$+0;8M5;^^k+wy1+U--oGIQg zelqAm$GE&)xdbca?fK2Cc{c_aN`}7aqpJguKVtwKFR5$IY&$Fr zinBa(O)i=rtntJ1Qt{n; z-)Hazk)rQ)~7h2 zZ~Dl>HGGu)`I7naEkJQJ{qP^IOqb{6#%nzKi2KRE=6>s<^F4iMr?^-9c+S~@=kY%s zt;cCkIN|qz);E5g{BI5GgUr^fIoWZ@%3bqKx#w~J#76Deia+ml4Wm|41~c{RjFn8| zCnuhVm0cGH7>}~+-2Bj8BEvk;hrMvTvA`k8HC^;4vG;T4>eT&s7O*Dx6o2JEd_vh{ zBb|OER?eq!C*O9@2g$T9>=E!d9D+^P+~5A+nv#lffPeF4eaSmF*WXTSoxv+> z)EegNbTCGEK_|&GIB?DVzVSB(<+vZ`xyDQQ9QWfV?X6!rlsX%T|CQ5YDuj&t2nw{K00Z$EFnX}90=uQo!H=bjMJHKD+WAgsy+qLiSyoismo%Im+mXm{9tv7K1o8m;aYJDs7 ze8#q70QQY@`50cNM?S_6^)r()W2TQpx4W?{{m9vC`7$QBM6b@?-PZ;#>Yu*sEvIWS zK-cncu~?wJk-l3moj- z1a{@eay|_EB=^>tYq_-mzr+oE-t+j<8g0+6UwtUs>+ZrA`i3u4M{--U+O$sO?e$%k z^bx;Xzi^pMYf1b7mzAlbu6x(&x{tqcmv+YM3}9o^<@c4wMBc{2@MGn4-R&=B;gYrf znAbHY&i$PK<9}oF-b4(5mx}@Lv$FvFj`L?SmvO&xXFa_GxaR(OPrkDPveh@fVvo7^ z$0c-SOYxPM#k>_aZ7f~mpYzHl+OW@Kc6dwA`5nC{_rrDfIN$gF&gF3upWs*4n0wFm zcL1xNb%Zmn$7Y>~0q{3Ims>wGi39LVXa2qmz=_xVUmT#VHOuG3ZRQRqn-6npF6eJu z^m2Wz*Y&+It54?SN&ekBwqLG~=DM}ZHtM+#57fuq{D*wl;k<;;TYJjbvfuDp>k`|l zYdw--z2sl!OCKeD>QC})V#~xH?cE#S)@$Jbxpaer#sdfFCpLp?a&ur_-P1>+x758{ zTefF!I*BL9F1~=h?$yy3eXr->+#d_v(gOUDukkstE`M+DEDo>+t%u?OKFrVW<9%hG z+tc`+tFuVgtpU&YzW(%Ojq`c?NqRUFfF0IF{LxylX6a!~YY$`X1JV^|<2=|vE3MB=odi=_$FUFFtH6^d{$_`NJpb!5`dD z7kqDCb_}rg;rQCPl@|l3TbbOw*g%f^#Q^Mr-=(?tcU^gH?)Lqc@BQL_dH618M?S(% z?CRQh-Ft3c;i_xplJUJ4Y%|aFHP^1qw;U%qi^uPL3?G?y{_UB0R91W-?>&Hc;Mxbs z@-DzP0M<=$06s4j55)1#0lIGQFW27r0Dh!T^MwETm3zAKMZRrL^5bj0y0^C3flq56 zS6U;RL)RRW&EKtsWRq{MTMzCfa<-qZwT}PociDCG|FV^J%$L}`oITxdyDko9Piqoh zSSRvyoc+xH!xMY!{E^P_zIR%Dnmm}0o@CHZf93(c(N!`JVz|zEI+qCd=wcr9?RxUQ zH3_F+Al)VUWcQOF3w#L+@XP$qy10%5_^dV1+Q#M9gIGXYxqHcb0&4;eSs%p=)p4&c zYtS0A2E-b7SOQ;GvL@)#8q_yF2}@uEZj)QD?cL=PK9a-Z^d_&pKHMojkX!falZC(Z z8=t{5{nFid;h}rwWY1(=#Q~Mm+qyPx?H`&`HdGHL;_~+KcQL@?Wbf>8|2zvQ7U&y6 z`}e!_-QT+7__$si(RI8}hIoM9_V~U(!1>ZX|6d&98T>bQY-Z0wSGH0PquHGOvm;v? zx98^IDRy|sMqla~J@ae0j>qlw?MLx=&-j4^=Z#Ms$p%t!f*f~|`6>OK1Be6gdU1d} zu2+tK zt|e_|JnX(TOeT5Oq4m#i;D!E*=dDHS+kL#h=V5Vw=ZpG=A#(kTW%!%Eq^>=a=*d@& zz46e=ee1ti!hEs`-QsgNhU?i}vd5vf`JkJ6>hlfljgx$RI`h)hIy>%w*G!+L;Q)(Y%{Th@s-aH+L{6RZjAp|b#G z`jVU#Sf|#meywMHTT}Gv-JokYA>k&xgoEN@?Z|+2`YR5Y*V@tpZfmDs>lT*jvqTTF z=x}##vG9kk}|1ZAB z{qg&CzT<*bC*CJR8JYC-KYpA6;Cy4!XYX{`G45wyF@X6}ZhUOQkCb`NraLycaEJ2z z>>(R`?Ptva&d2x8o1DA%_kHAW-dw_ZxjEw_+88$<>)O3_V2$woPmNDpfx9K=0lgQ% z>+yWtQ(k=FH-)v;mp=4IFE%$f;yS*`&-s`6Hg}B|&!(Gk<*(L){V{(o=ihw2_d&)^ zj(+$8o5aVJXD4#`!ZrUF1F&!LJsZ-?Gy8t&j{g@%SQmWESjeA!E7O-UHZXSm8UsD$ z{Iq?DdX3rm!?&5kFS@Wl+lOt+)bs8oyV465Su-$7n!N9M_CEQsz+13D_-q|m<9yfp zXpQjM`_>8WZ(YRu?NvH6!~c@CWu52)ZdfDM20pev;LMHz)_T<+oUymIu1ea`%^pEa z4KMb)?!+j- zW%}7M`NEaBf5$=V9uA0wtmSlTU(=Z-Ta@&R^XY;2{XIoxeIKn){lhM6g#3wX`jF^8 z=jdD?3%oT8;J*BI$Lb6Fiv#e$bsW&%-}-<>)`i^Ka4l|zedWag;R1ZI7F*BmacXgZ zHBJv}tVBQ9qa0quPjJCHw65WgeTaGz{)+$Q;sNdOnK3mkeUPJ#JvXj%Pba#;PP|V) zXBT1^2|r8p^-O*EQyf4Zy^Z^!Ij6sRWW#J{0g^a}jqvk63%HyIxVMj=zaNXAjsX_G^J|#S4(z2(F@SMP-D`)_)Wa)}ji;DHJL{-~e;$eYB?q-(0(v<4$wzxw__3xiObKD=9PQ>bkZjT8sFfU$I@>E}wBg z`~8`-0o#c|tOe(8$5dWU)PPpxM2-n4u74chMjr2zVNAyM z5byKSm3Q&0OwgxQgJ|gh~5kEf2rRJ>{wvol{JFzC1vo@^~|j=Wvy8pYE8q1 zxYoLob{s$U9oBfM_ViGukM;=kw)WMr2F2vC2QC*2zyf2H@LTw1UBeGpgYV&>YkFGi z;tBQL%iY6zeMs5JShSPUg{}|He|(}(vT(m74loBe9dGx2V4S}5#qaj^@cOP?tZ+#? zc3HZ__vA>ham!r#vX{P%M=~~cQpPUXSZ+-Aj+^%vPpXgmaVFd+>#^}ZWQ(u;thwN; zIN3Oh0bKLr83U-VT-yB4CM&rYKkyaj0FRvo++y6gll{#fpEY;pIRE6E{DSZ2_mj)b zxB2Bu>Z)Unk%Kp9-FRPp<*iTUtuKC{tu<~PvKwy2`*Htue#igIhWK9_Yq|YG{#9kY}#rJS3zOSt3J)Fn7j6uJungePD{Qk}ncs);j^R;!nK4_o(=D!~x=Y{aIgd2ENGQ z4*jI|H1!2@)SG)U<8Y7H>?5?ZUezVvxb;gXxq3Jqey6{2`F5+kG2=tBjm7sr#^Jox zSpa$I{?NRV5sqkQ--7ph-{H4{FjQ`ThtDPN@$tWY!er@4__I$)zl3Q2g zT=Tzp3eU&&I|f)bs!Xnqvk#cTS78vH=}T_wzx{r?_w5fKrkDEGDLImPFkhWZcCV~! z^*lEw?e#@2JP5C>(QIeDuQ{hj_OZa1w!n-7oK1ITZ!KF3)&&1A4zPZ#GwVh!!J@8P zZ|YfJ%C)zatySyW`od$<-it3DhFM{W`r%Y~8Ew)gfNj~kzP#r>Uobj_FZLvzb6lD$7$x>nacKFgCGxtS znAEjrQ+GO(Ykl-C!Fbc-HRkWgJQjE>7HBQ;dE9_ctpjVq+JFPrf;D69;6ZK5TUT=( z!T@Im@?vb5M6QIR+~d#U0P7tN>5DG<3zy)4di2pZOi)LT+h8$H$59d<^o*>y%{{IZ zAJCcp@jmX4^YOm)zy9;j?9_d602{!4a>7}-m7Un(vANYYjFH>R<8>S!_rr9&ex39c z4jQLqzYqJ_i#&1<5d4@TpzZwm$*CmY~#%fdgW!KYviX0_F~1il zyN}EHNBmCCOzOCo&%_4S65nZUwN~TL$^ZOrbNywn&u;GfI~JV*unT?hKOML4u72Wv z{TgGjE1mQ^-%(nVom0x;jx=Kd*X9r&)ra)}H*mi(w1$oUsq=8^9SeK}3$(7R0h|(7 zySDCI>#!{TERXxGG3&1N=(ja6Q5)^0VhnQO2o9YwfHi7;svAZ*>r_`iFa|czSH0v} z$KncD2ctZL9qP9yQcf4xf%E-Mwz=nbEe>OH-z@U!UB2wp z_kZGY{I5Nk@P>cF26JI;he7nATUZnC_ZuaB!ymGpF}P-XW1+XU)&iL@PM%#nw{C7Z zM@QDNzfB zHW<)eMPD!p7U)~9KHO`~($ijyuJ#euwz9s1QqR3|I>-I^|2h>5%v?Nx|NYm*&2z8q`W49KZPqPPG@!f3bTA63@y!u^h@7kPJ2VZG-Ydgiy)>8c6`=a7Q z>&raT*%;|zJ(apIuUxJ^KNCY3zdFi1t8e{T&-yS(tdB?1DLB0Qdk`oC|nn?ZOt^roFN-gba1#e*1U-r#1Of7yb);3hjrbW~<8Ha0K0+USqI z?5(et>iwSE8MpDXL;TIQIF0St5eMdr=9wMMfi^Rd<-X_Ju8Xg3Z69(advGzjxX|B) z=zT!vMa~7Ri;}TO#&BQix%%60*0}kNzG^4;T;KNZ*5BlRxWUJ8KhC%J_pJ_JV^{od z4f&?l*?@Hq7px_1Ck|z6I3nTuncz(PPo@|E*3hpwH@p#3C^r^!dFwej@{R>Qf(5J% zYos-ftKo`u4im%xFaX9`lh$+bxH!Oilv|J1Dh`GZkm0#!Fi3wmTf+S~f4=|!oqzb9yLSP&UmaX8mMQffKzZK- z*lWXGdcrMz(=)8Z0k`x8<1-&PhYgHPiqGRG&%!u5P42H945nW>TYg))zd2%8c3>0N z=9i7wjNkD;Ha5SLH$9K*)t9vA?|8^MsgGOb^pwoAwIXK5|JIY=mU<7sFYT}SX72;? zi`kxj(j1d|e8<>|f0U`GT<#wK+rNuJ*#HK>0&5cQ<96IDMlbO*=Y;H|y*lj5zty#V z8(Vt^IbFgMxxSqJx6kOe{Mypd+JFn~`Nc!Yz12J%ImZGY*#hANEa@zu*xnk$t=6Ws zY%N-se%pilJDXEhoFI1(YsiKzkH<{CF>!bj7{7_He7M`kj-wr9&bIj zN8Yi(TeAQ>YyDVPFvhy>yCT>i4zLdG_r(G8+~0bgYq$H}2Uxex<;cbRus|-sF8rkr zI=~|PFge^+=DBmlzV&ktx8(YeHutan|IGa@R^0DgV3y=abAhNS~5>c^J6ksCCbV=@L)DS#yfx%p0t|wT|yuUiQTm*^1AyAHQSI z?9X;H7Gqb>;v@MjZ9zAQ4&FV*-R}9n_wjfa@45H;67}}=@=@y-A3DeDY`_{57bJts z=$+#rEz-Qp!=lTv_A`=F(gZRUBaR58ue|Ayk zo~>N73!9UnEjgd7&qr%-PT7T>B>pGQ=eEt4E$4l8<>o>z?tF@E%#ArJxxcSn>%&h7bKr>7YGK6{?BV}WCV=UKp7YF+tu zr}gV>5x-cAodsB@Qh10jtyyWF-6`)ZfDAI72f(QK-2Ma(Tj%jq2th4*;vjCh9Gp$)`d#+(+-WB+E$NK`;>RZn^ObkGt zb9D*-iv{3u>$|$@yM|A&Pd%KhoXmJ%?i|4XWNrT*--kWjiw&Fsc<=8FK)JGhFHn2f z18ZTdLBqfi=0bmLZOr=LWlJBqy2?FQ z5AIgyb9~^Vw`Je##&+h353}jCvukB++I+dj;cU<5{MUT*6Fpa!7XL3sAm6qA@9SHi{x*;`vif$At$mv_zZq(e5N?!^Vi-Vuj@13m(xS8Uhe>Uu3d3}cCg7g2)*Dl9F1G?w4@F`FOTElpY#jg z`NcgZSRIz(1=l5G^4@lj{Ss@CS%2ZNzDpak2miB2iS53&|Gf47*~%U>-jOTI-?F(m z*c`d$#eCXlTLaByetezB|JN}M{{t(mYxj7z-w!CWjC_QYA{$=sO#xYe9UI1gWo1@M%4 zlw3Q1aV?k3#Z2+AGQP3zFR?{3^h;KG@u#}h0bQle9h8Yvtqp5wax!i<2Ib^P##b^< zdw=~&#?ObyH*Orx5AV+Z*ZF?DFV^ttW%}ZB<#g7LKhi0^l+6^^?|6HSSzErBKgsps{}1>- zmUx)1?eFn?zyFuxd23j?I_hp4ibvKu!t-=-Ew?v_`{}AbYrq(@J)QWrXAjNcd3G#t zEbwJ45EsLZI0-i5EYGZOYd`FPb$x4(_niyMt$BE)zIN97jsX_#dQZ7=_JVt^VSohd zI)6~Ey%c{JZ{T!sKrz7Nb#*<%{dBAC{0)IJa^cb5`!9?X1Hjz4UM}J7_V#f?xpL?K zzx*@5v~w|ldt?8b-}$+n+`G0{EMBNRyGp&AW$SBR@|p@u@%(wNyx3x3Q)|kFJ2O%&1SKr>=-rt^I@|?Zy&KuS<{7-K&Iy*Wa zG#2Bu_S*+oJM_@6aj2_}WPJQt`TO;G!YVs*K4YuS2_|KWvi?5zFD ztoyJHPPiw}9!3mc{kz6%VN-jP_}~B46*J(v$^Z4||Gf3vKDbvbAn)AY-!O{jcMPy% zm2x^sFsZ%2{@Q29&()JFD=!|1?|<#Pzw*QX`|CfrHx5vT9f|>p3(99qP&^Q46$`LG zzVh3zxQ(tK&-*@aM7WKwP2S)8{S{Z?LOvYVn$OAe@p(C)j=N_*|`x}4LawhSB=hh9qtTDbV?&h~*XnnXB<4^v_ z{r3A3-gh=48PARZF7Z7ZTF2I{evCn^ZOyTXGB{xj`ld78`LX$t^!0hOeOez291FaL z1+4YfDcpn;);kWerg0E16z|XX{&=qB`Mf3%UWfs_TYzcqVRErWc;~rmd;SzR21C!|e68zi_`rLT$yWS}Z}L&T<1EFz zy5~pcE1!&maXF5T>nG1E$K~?L`L3^d-}iX!ndSHsXPSHM>o2Y^Z+&!MPFHITUs^Bm zzcpw~eEFL5``cFK>X3(j#QR6k`AokC8 zaX?1ysn@i8lw-mSX1ss;&x|Z;I945#8I8c7g|L$>M9O-ZN zN#2v|TbsB)`TBRA9&&SwBh}?2J#%gCiTkXDz24RuH0R#c(;ffE^>SxlrS6TJKJh;v z(FYE;_TvA>=xpDV0|K9Pg`B8BWA|#Q^Hyzs-@0|2?Q>jTxne-qx`yW<>nLjTLbB= zUa^2RVl7w){+5t&?$~CPSqpK0oL^qK_h5XTp8Q37He(ySZEaa+#>jqRn)u(i#50~b z1Hk?J`Gxhc#q&9=*fGFGmcMf@1|UnW55G(HeX@IUw87ub0KETi|6dHyH-Vl@I~KUS zH_-nz_v3tg0fXrxzQL(D7)LiQ*cPAQ@Hn|V{&%mPy7I2wx9?Zhb^NbP>>wwDyuKyq z3_$J~46gk?6Ik}QAEdXj*e9AN^YOMk=yuxhBV)v6c+RG%kFF+2jbL{wq)aR>%w()J)3=YPrmt6Uvh0+)#Wqh5dV{Fy!hI;49>;) zGk%C1WnO*)f3M{+GtMjjQ&ZCD66?Tuj}2iZJ7L zvwtKV3mgl4Eeo`s;Sk)|@AX!^zj^zzM~7oD0ZzavxqIcs0pXi=umT2l2CvL-naQ^Y zaeW;FbPn*lzw!OM?*RInz;QpWhKu@?U?HA`QS_hZ#QMY~Fkgaw_}F-1rFL{CXL5D# z{p0Ln0p&2A4%tKQ9)Ej=&+)u|ByIl0kN?$ut(+`%VXj=lIoELj&Nn6;NO$p!@z7nL zU&~isqhI4OF80G&#%kX3HFFe)mg8f4c=LT71K{KK{+`+I`kQv@#^>6`=e_sWt}?l{ zeFL!lXO&Ia=|X>XtsC<7cOU<&XAZ@6>Ke2CyYY$%Jdgk5{`p(iVgS$BMq7!mSOQj% z*abgucbo%*!v=f_f4YZTt|iZ4hjwBBa-0LWw;%7f$;AM@3xHn|Y!e6cU4Xpn{cJt2 zuACltgRU?X#>1<5wu)2mD2}y1$1TP>V}Kb4xUMe##^c2Ru05CVK3Va&d(X9%&$9q> ziYKZshsX2YwYFr5NhH5zXg}OpfN_5vPq}Tc=7DdBb<7icnoo1fmnO&ZFTSQsj_2^R z`pWR#byAMI__Wy5-k)FM>&f-5wVh>jAzwQ&nwX;J>XJ<-vdEXb|LWRV6hE0d8!JDh zgR$qkeh)|vd3fG8FTQ#0Z*f`!{NFRz>fvVVhfk0zIX7Y#@dbIl{oDM%cz$wzF@f>0 zHBP4|ed!hV@84N0eb2l8+xq>Hb}aDLEKq!Jt>f(-11yZe+c05rK5T{;a7e=0a_{kB z;~$Fw7EX~tR^KPVV*3^S!m?rqZR2=l66}-53-F1a&Jg@9b^O@=Umw0lv}c2d@qZkO zpJ5|?u490>T^%V7mQQXDEAjNk{|j%o-=BPs&!xT#xaRxr)v4dw&_~~RLR=%hneoe8 z^P%VH!}gN#7@HWtSk19<$FKRBTp4?7;~h31a2F9#&0=0x6#h?lKT9XA9}|B@?ZZW*jg}l-@MG<06GJZW(;60 zkX!uR+7ee7V>;u1f43*@-}yQd_%HwDdwc(HP3w~^GRd*7*w;G=u~X}xU7j<)r|z-9 zvB3MXfHe*S>?JzSgqvXijDQ*856<_U9(=<6&J=yS4a8E&>uat0v5tZ+;$ zkbGDPo20JeeRbe0*{~Y+;(yph*Ukdse0bP3?3ZwC9E5k`emNfYyfV+LGdUmjx9^X$ z-8=Iq!=7Kc>-b+AoX^&B+)@nCIYa$xOJ4mOv#}bFIbzTE_ z@q=;EKmA-QPTcsJ<|`{)7N!S!9*o19;#*mMG#6ub*#l*0~q20L6k|A$R@U%8l|Yx_EF zv?mA8lM@EQ;LZa4K0qBfs6H%oFTvFC5mu5Tu7IIr?S22kt?IyEb>>-sJq-@P|6Su+ zJoKrvfOzP>9JedS(e2%FcGvN_9RE+w$1m>X#R%$=HSa5{9PUdSt49o=>}&bTQ~Tuy z_>a9M*Y==sBVO8^y!M;MlaH~nXZT92W9;ggM>6<_clGMvXxt}f+jw3(_m$hz`X4y* zcwIaEUkt!k#2I1+b&4yr0THMXQ^W*KeD-Out_00z2 z0Co^tTT}i|hBfCI-xnM6e`jdglBpkO{r3Mj-}S%vSN~>TJ3Av&9oO`cJBP4V*tWI* z)OkJijs=bdKAr{O1T4U_umx6yH}D6Bz`?!0Sey@+>^ZyxfK%`^tb$SYt;uor={r5V z4GZBP{)gB0Yp}HY%It68TR3I!r#&5EVSE2@Rjw?~kM}FH&rya0@N2P3v4An+mr^)> zoyW~HcP+*J^2z`6n!NV=;t_Sl0FrCZ>XW_cW865jGYmF(%jW>}v+s}l*%tTnp?E%C z7n>PlaY4DUvjZ9YsQKe7+Nc*#$K~q9`}n(Z_4oyUjq~wj*Kz%h&&C;nb`o8R1B`+0 z^pN;DJ(Ww%owZ=ztRZVjOe^t!W&D-Ck~l&x_SnxaYmv<)_E9dDu(qsGZP{F(qnQye8el{hzlg=sbnMz z-^cm*9`5hD3oGHadoh31JA3rL0?Y-B|*L`*6#S5;JKVyJm0sZe7cKjwmS!1NXxiR**I{l3| zpX1+R8NTni7}ywH8>jik-)!aDTCjFJQ%Bk6{}tDWZS4DvO`Si+{cA4be*L~x|9Nfy zJo1kPjs-q#0eAx&<{2ZrfGIGo7{D2&_mwa+?uUWeyH{5m+za1)yHBQlhwr9(FOXck z4&NlWsa&cY=fPZ6v_<6?7fJ$^GH+AfqPF>55yZ7|QU@X=V8yT>LwEO0FF)-3=VU<7=DGjO^X0G@ar=i9rrzl;0J)rE0k zn;5{m05O2?`udwe`ifui0(>Mx|M(7{kR!(duIWQB_y`XreD53pj(R2)2dF1rAVV(U zqRs-~qQ1$7vGf$D=s)}|F2G+f8-{BmkHhTU@j3o428jRRv+K?Y@V$1O38;_X-0Nd< zf7j~MiT-THc5lI-@)`DJFLTc?l;S{7T+^ahrHR8NS2C@p`%P zVpHv}Q!y3Wb*+v$opt%$b<%HRDfS>^UQe0o@(aFaPcP>$?a9eAW`1J)eoJT`wV}`U z&*iWD*K^!$EvVy}_XzAlZ??ey#_xISQ!W{AzdJ|H7IM?w5a%LnhzXhq+Cs{C&m&u07|YI9glrVRbzt z$1~&ieJj7^d!Cug;z=^LzpdOn^Z9(8Tyk)~oc-C|wK$^~S?oYI|5Qf|`n7%K^nWaH zEb#U%(0QW03*5oqa4^n+S8y7(#rJXFEQ4vY~JNz%reZRQNGiLzuPbIQpz5eL;HTQJpmtEMAUU-P!d_d}2ZXUA@8=4>I zjYbwY|M(`B%0#{ym>-ZpD7)5U&;o;@2H(EZ^mO;*I+fJ+`l?x7x?e$;?0G ze8@QHU=HX+H_1HESFXJAH?Ha=Pd~1$HP4D4v=awN@wsu@`}1*Y!@GX<&A)ndF&C2O z)(8EqUvU>b+@kz#XQ;^M&hhRt&Je30PPd zRZqXTsqX}e1!g>;4!jiu>=+Y-UdEdb;WQ~57^k*uscn33e)tkOd^10| zFV~N9b#Y?xf%YZO_=&tUV+HlZ6Z+*l#gfGWbd=~z_c@Nn)0nC&Z_QMP?P_cO`57Oe zi{CLCKRKQGXE(N2mp|}BzJ9p>YpjaX=dr-Yu>fAgFZLLBF~Hh~&lq6hn(Htv9&oQd z8E_Q-dJiBDu&2kJ@fZvv1I|qzhW+qNECO@oFqk~}9{6VS(=w(*dmFEV$Vh0Aez=K$sLzI~%>_4FmVm)F*{7()NJ zMw?=>FYR^av%ROBj&z#ypWe#MVfHsCbl1+aIL~!F$|u-v^Zw#9ZM8GE_`IACIEN8y zi4%&u_)BTN*WqIlyLDYIPL;GHNB{Au{_oBdE`E$>&GGi(Rlj**hsMSR#>KC#2}zl} zvc@l0uC3(z0Dbfwq59fdPsvn|{_NHJe)=09zx~pFar!$JI2QOg7JwnJ1TNmi01Izn zPTw1cY2liCX@8f!zRh;6Zs!0n4PJ`_+S|cS{YW@Kzi~K>#TVME@45OgnNGefv-g*} z78BII99Ky3keqB755sZI=9^WfycBo!enC!-aX80_Kg0p?kaGP>%1K&Acm~o_MrTCE!xYNC7xKpmI&JM@v&qb}r8*Ms=aXVue$BRY?3{(KsApa2uQ(;{SN}`<#Od!?;8@_}S)dpI z-o&MF4kp4RI1kI=neVjvyMS_k)6{PU;TEjw{MYaNVch&C5N5*MuolL`{>`=P8h+CO z_N$94aEdye0Tc%m3uqe;cP)3mP!6}_dN^84QY=tA_wiFPLEmsq-Pyz#^g$20Irq@U z89{qoyw^DZ`*jweJkBo$!2gxGR+k;{2Ah3Jufr|+G){X~{$Xz9#$1fUA6(1vl`--I z{!(l}e|6Zk^Ao%p=d(Q@;Wzp#@q_peNB-XL|6t#|5bTj_A zKpB0i6EDDePdKO5mvKnN0mT6EKfdod&KC=a7v$AtSN(iR@3Ys|C;PiL zFL6G5(9IZ1e8M$dyVlm&Hm5FI;7axuE16Gm7~8Qq`;n>7WXts_;r^cMU%X(B#Fuh> z%*V9nSK8>mL=W>S*PnXkkSudd7w?StgnH_f$W_i4Cqe{!^w z?tE&sC668OzPN^879-$&@BZ0wuZ>lgY(7N>z0bb?ORj{|*RjC2#{zf|#=x3l0Q?M} ziUHsgjK}%--`@!Kw*s9Dz%BL2fOBMMKi{3h&Uh3)yN0Pa7RSR-_b?RR!cTbFe(^d6 z=={|4$^SUUy|(sFuo~8e#jZWWA9TP2bc45^Ifs_(ABU++FLl`iXW>To#!FXyib;&4 zzjH`_Txd_RP;sN?d*LKHU%EdkD2=6!kFL}l^x!<_$|0Vp{dw}8rxflTl-`C%D|F^uK z{Ll8rjf2^Xt=N`L;{9R)^N(lwj&|%`T&B!CYk!}v#;846WD<@wYvOL#!^~k0to0)qyU^~~6a_zO@ zGuDeWDLWQ87C08Tr3H!s;2jQyVK5Cg;dWT%y?@^U6bF>U z?y%85hYb5R2|wakIn0z`s`@Y$K1z7Ea`>k#E{Xg57O?yK;(&Pu08jC_dgPIdN8mhu z=sX#(6ceZikJ+F$biU8t?NiAmgI;0*HVFH141R;>_#OYtmG#~~{*yZgAP*?AomF;^14Cd+(2q-#D?pK|lBEqn7tviJ}^T+_+7 zdg}0>xS2lf;gwCUR<7;-#&7Mdiwo3~YR4zEBTM<@{>GdC^5wlgmR{PBslMlQlZp?! zCevAm^ECT@c2q~Z_Wk6l&lV5a?mRmdI2Je-xTOVP4(x$JaNOVZh3zm(f?I$12mf-% z0%8LAh5zB2T>CiP-Ww0^7{KoWFZ}9WA7N}bEhncGj^a_eh$rIw_S*m9KmO)jS-cwu z6$9Xlp6LU|!`t?2a`&49F5iHQ1C;kZfG*lTWNX}RT$1x!I^zF$fvrlozjJ}g*lu2v zgM%OH^On!_Z;t6;4%n^p5ca_J^SoajzQImxZM^J7Z?=4jZfu}WeV5pojD4PPnVa~Z zd^{Nk(}7-mNt!&)5A#K`$l%ZUUv0H1j&ZGxeEZ1qi{y7Mpl|DgP5S1;JsZT`)&}{~ zjE`NjVM$-=7!!M2BgU@mDfT;cjs=bdjs2Rf7ljZ zb{3B#{J(&`$64}VDS5>J@D}cOuRkfAw|}RLeJGxZ_lpCH3!DuolhlXFlJBnUMajd- z_*r~nPYZKlFRrye?0i^#V^^*ntbU4}vlTnii_Um~4R9PjVY~URf8HyX^obvz(&sJe z(9N9Ch3;%gcXpt&=bo7(yl+39kC^BFcEWScEXX8JUZMkEU^85;AO2!qI`?Ord_~TG z(u@7IH(%;`hX0#q&m{GXi)`1m^Gq2V$dj*}Zsw6L%_$xE7{Bt|8Znk@-fx}6{ly47 z##;W^Ig|cwF`q}qvB0swvA|0#02g7|=E?8`;mYw*oQ~hSm&gAz9&p{6fp+A;T7B=m+R}ww{1ygxZJ)XM z|ANcfK9&F3Tgesh*gJesoGNx_PcY?bxb5y3Vex4KnjFy5%p=wc)9MEO0Dv zEO2WJz)6@?3}Al(vv33q!x6Y4d~@&G`2Z|;tv!sxf8@YR7>t8)ZheH~FcXG`?_p?| z-F_N>lNqbb79h;|<(TpB)1% zZowbqu~Gb5ZtpJ!U+SNlx3-o6eV>j!6u6Vx$g^`y9EY#ErU#wbFz#m`bMlhDYD2Dm#EWc{K|Ma>n#^KOGJNZ)JfEr^S>!4=PSSA@x6h}xkH_MD^JXsSB(Vouvz>7~RqjLe$k!iv?7R7N#TM)@#xPfs`IFd08yuRC z(2bw)uejX3`egDof0F`#yVrit{UrvdO>(M39=(*u{q%Ew)!(i3oSksJZ(_as;`e?d zV;y)#7dd_OEp{lz)Sh2HWTW%!Sm0RTSm0|~puY_OlZyd1MlXH}|KOek2mPHOxxW`+ zFQg8vgSEKYxo0r|Y{kExhmqks>R} zJh}RDO{Q{n?H6(K-ghpJpjZ5Ii#f;+*XIDZjh(y;!2k49_ZEFVCZqYq#bPc^Tml|vN`|SezkHuX%0GTz@6s7T(K2hB>H*QoT{Td{wLSopPwo7 zta0T7+9Zc8iB9_BXLz5S{DNMd)89K1zAol9f0A|JzWu*?5;=TKuKkz%eaB-yaGoCv z919!^e98iF4rbwMT!3R?seNN-0N(xo@8A5-d87^^OdwX?wykmfc^Y&-(*K;@y z-(fFYhSlLb9o&1SE{^D3zZjr>zkNG-;sJYlb>;XUp6dgayT<#H@yv4o_xiyZamlA_ z^PKYD1?Zo?&VId1*LN|1zYib|p!Z9^t$U76{SLn~YkIIB9of=+vjq;L(=GX*yv@n0 zFI-;?!2W#1bMtl0{rQKsJ$D`d(^VZ@i~r}h|M7pk@7{HBgg(tV|1dA?KreBta~u8f z`_4-Ee=&f(Gce}?>d{3Xe2_iK*Vl9A=+r$HI2Je-_?i}gd$7xyEWU+j%Hns}=j^jR zzg!ut!`<oIv$nC6kE){^_Lv=^+6V%&?jsc zL*O%Gf$_N5{?4=bBR;s5?Qsj4`k?ndYginEXK*iGiIdswR{efT4(`KK_+Okx2fDD4 z_bJ6@^riPLViLYVmU-a=Y_A_S*Dss+=3bpRonFnSTz$Ufx;k=+jg|Ym6a1A-WuEZ? zZRd4znj7Qi8+21&EVAF(tZO>u)9h91JwWlWa`Lq2d-Tv&`qW&U@?(Kxfn$NUYJu|t||tAfBrY1J%4APFwixub*(*26hFYz&H%`<-||dSKU{~OQh4neZ@_SM@dSDO zKY-2zCg#U2WNIJh<9+pZ9}Dx98ymSe32tjc?_2O*XYKff%whohU1i3I=j{LG(rfzy z?r)y-M-O_LALFN|axsbPTf`*nOqRYRF&TTC2m9<|4LqAK=W!0$#o_*{O1GOme|hqcLxkD_nzbae;5O;AMDBW_!Fin_SqBlhwu1>cQA}1^4^j5B`#cYjE3^v2yqD**zJ! zSDE(oz!&6`?VA8)$^M*q!3%WPmvOmg3)ghmd&Ns^fbaBqi}wzn(z$u02kvAe^MM2P z-8qiubY^?ypOW{Ka`V9k`e0vkpl`mwpU7|j96#&VwR&>xl~pe11D?}WAMVYg-|OLZ zW$LLTdCtaU>60G#o?p;QzGK@}?m4;BkBe`~bRGBav#DiAeq}yu`xM)pI>!RX0>=XH z!2<9Qw!ui80b^kwKAYG$F%wpH)~qe;^$r2{!(2QIGhuJf+xKnmURW&G5B%<(foo;y zti>V(GNGV2urDsPj2>pQxZ*eb&%g9%Zq?B)S=t*OKo8@-hS7skSW?c>>rzn*Ic zTgimquJJuicV^o@a$>w|b#PXAk2hRN{O^4M-CtsZ-ZdD1`~TkI;96rP zmwfZfCa&pbUYe`8-#pHF&8B21CtF;aY%<7F&-41j)BK1|=2;xz%%Hh8{=V&J4~Y-Q z|8YM%lEIhFA3a|4-OW?x_tZHSI2Je-cufoRTQ1lacfoJG6^FoFxQXxmeYF4d@Bj53 z$G}bJuiC;+XRt8XHLif8uo`~D?J!(f_4JJw;)r+yho~2qxR&%uUR>h2L^c`f;12N& z9>EKJ2jIE!J=dn%?LHRY$n~Fn0b=hJAXd()Ok4djs=bdjs@PU1z;dN z#o6{-@DzS3Z~qu(_8UR?*)w(Fud`a;0B$^9GGJ*~4Nu7n$8k8Ehu1J3wtG%ib>aos z9QNZ72?u*F=_5Xo8w;Kz+nEIZ$654x$+<4xB$E!>>s!LBQrE^r7rzJaE?#}@Uc)ci zkFy0kOL)vY#rNi?WWLx+J9EL#Pt{91;}F}JXUW{-))1*_GX=>!f^HQ z11y&-tIg)#>3P66c6FHYYDGn{gT4;y&f~idf};eEO0FFQ7i!a@Gjnjt*~5~GgE&X7Ul1g;y2jty{>1y3+N0$+sEdR&Sc^K`i%dz?|SmTu^N-U8^dG$JomXi$kvBs zj&NE$ANR$7mDATev!k&+b_Sr1aq|T{>ze&`T($0-(`kQo@H{S7uCMvrT(F(z+PjzR z{qa6uAj31dCa*a)7yG^cDco&Uqc(`uQ z=N!Ph12F(TP}j3KUmK}=x&GvMP8#l#{JHPnD zU;W9S`$i0)T)*D`v!Ss(CC+$AkNciAZhd51aTq(a=Px&o%IVKO+R%%x_sLh*b9LDb z{~Hg!)UWxG*tpdEG|%j2esHZiWYS%~a%Fg%Ts|=W{}Wl-%hQEFbnfq&GYRuM&;1)~ zzR6ElphNm3mgl48!P||;W3PdweS~a!chr^!dCoJu8w|N4h_zX`+}+QcR5#0k6Y;v~GHj(ajaFV!Eu zvPYx~-R5rr=<=yKrPr3d`YG1X2Y!)ozZk%?%GrRe@FhNxlkurOURq8j{=$9P(7foM zZe9CdMEy_Vc+r@%qcMKU2A+{!ytJ>c_?8}InFo1XkK5Ikl&cr-&zM2EJ$Qff(U|nB z4d0T}PaEaV{GAh-NAU24`Ag^Gv^y3!7C098 zC>H43a@>z!oZ-Xi_P#JQY<3NAD+}Ybb(ZU#ws!!q8&1Pte2LG=!5PZoc|717gg^D; z>wmB>&Q?zwiTv8(7T3z?Ah{=7a!;9QS+H z+>qmMOVLBy&zXzU_E_Lp;8@@zSs=`Y^%5+GlQ0yAz*YQOKH~uOw8#J2+CPc|?9*Vr z=P(_|kQ>J+hvnMggE(6Zpgi6v4p2r17%t%l_maBghwt`!`WIt#24LSwmilw<`sR;3 zi5#3}jIMD$?sr}8nq4FuqhDk99zfeE{}$J5h5wx~7^^oWu2H10Q;c4yk-Q1|d4s7a~Tw)9LJa^VFHy6cvWRjszbK!Y&IpyGc zi5`4PyZ%0a@$gMHkc_{3IsR9NF6Q0b7@I!lxX<;mz_Gxwz_GxO{a73TXZwZ@&)|{b z0C@dS3;_4xEdD3MemGvh72*Ak0T!<7Q&LY1;F|zg-M4|A2jB~Ga4U`|Coj2OlShyE zV)Mu1FfwtC=X1W@lOGR}Eg84GegBLDTo(hdk!$-)W2Wbne~asE#5TsMPn?J6=t-aQ z_+MFZft=m4e{mAsI{z^zVkLH9KVuPZ^#6U?NQ$eCnSGjHGRg0|0Xdt*`~981>L(|= zlSfBmHD~%yAMt~+Ynx9R6JPYMf4=XZ=l;e-2k{`e{P-60abz3|919!^d?X9R1I|jF z$G2aG$++b{-Vb|WF?@yp-v8s;-UHwP&*FzT2*$&H4y2p0$UFBhUU5IiVL!}Hc-MHd6WPkdZRUfW%?;bxcYAJp`eom1-rxGHGaEAc z=0aO@*tw4K=B@dcYokxs#d!MSgY=;bUlPlyM;G(ryZ-CsdsRM)|Ba1a+n1Lv{Z`=C z^K#@J3mgj^3w#s{z*jg8za_YhYv403k;7jc0BilmD%_0+VRe5O@TY(FNB<)@j@M3t zKAX5OFzjt;6Gi&A$UZ>p>pli(RS;x_-^yp8Y`YO zR`TM0*XrWdU;FN_>~dx5v5#xqPj7N>?GI$y%d&;>#s9c2o~Mhw|9tna%zT+Exv^=_ zhQ=Ew&%HnU$D7$H?w@uy<~@%~mgjzRLBAQlP2Sg5+@VeKT+@dvb7-7mj=lF^xw#^f zZ9Ow?W8riCKJ}md^*?v_H!AvlD!t9Mc+%ODw&(Bs+}bOTykmi5fsbZ^jlpZbj63lF z-jm`GJR-qzWm0FZ+B*C9P9JAW{y*>BN5Xsfzqw=auIqiju01ObP?jvQfHR4H*XJ2- znS7*O=K-$i(z!7nvHy3TY+o6#;XvFcH^#W%_;4q_$En2u^K5Wq$9h}{XXueS928qmn%0;bH~=?(*3c$fAgX~+ctORAdWUi=AF;9-)3iRcm1Wm zzT8W$m77cRrmkyT&u_>z|K1xY*EhY5A-~J_It#%6Y(p+N=3hJg-Fi-rykmi5fn$M> zW&v0UGws3fjr}o9h0*v1*0#@b?QaFzi^VPY1!ixqT6;og0B|@?faN%9n!3p>VZ_+H*QOZ27(AoP^%(#TC7T}l*UlK@N#(fIxBmU^Pc9Bn zr=*^?WYAA6LGG=6LLY3T4{;1#_08t=Y~Np5bt+)R1B(bI^+A|&c;&=z$ev_ z$f28lw7vCw9C^nA#{$O!AJqad6JNtn`#Bh`4AwgH_jgrset%z8nQsALvU>J!odMWe zk|XyF*5fHM;|Dm6&*KUA5`Ksqa0=cb3onRIiUYLMUL9%j8!pr4?hIh@R9r=Nb>l|5 z#qaVsRo=6i<6<02CpzQRTl+=dX84wk9re*!1syvBNN@8{Qs&y+mDAr`uon&MxZfo1THqU&3{k7w7-W!o!yeD=uM{L~QpDg1j z4k%Yf2XkTX-x#ic>v-$AIr5GLjs=bdK9U9cOe!q6*p6jQ%qK9^L;U~?fIH&lLY~!GJTtBas zNqm#P&`(^F+}D_kBlB3`Sm0RTBU=C_!(MwSxD2=5;}d)T&ivi`9!m`18pgw7+ycYB z!^JD@E6K$xI84F?IGOzJUE>#c9;e9DDZWt$Z@_$eSoh@Bhg`zVfBxtH>8_)mxaRuz z4LAlLm5jx89O~NnzvS9;<8aMJ61`r_Cyc|`^us>!KmAH{x=zI|${S1eH!tEMbHy&W zUp!zOl6v~opSe&^VrOOIhCP3)PJCO;Ry*~&ZZ4HI|N7BJ-_0XmDW0N#9N!p<1Ijx? zXzy=s$vxlvy_Po~xyJ&>0w3K1FcfyfW0(r#I|FbIU>_#=Efp{ep?!ZG9_M(jU%JTMdnT!iJLL4cjsb9{c6bh-?Dxv+{{wo5j_1hmoE}o#?mDh? zjdv=GYu)2VGK>@Vko8(Vf$PY}|7^v6(ly_wZ(MnOHsJY=C6)|)%NFd`8Ajh}Z0^6r zW$c@+)!lKxbM~I2Je-_~;gZ)vy$cp@q>hi;(K-bI{~iAlIWl>GUgcoZfWmJ5B2c6@96s8 zUm5)*&*aA4eb4pdyqX;2e@&k-7IBXA3;Y)U7pu@O9qHM4!~nh#km$)C#^1YkcEq{P zdGsM|8?O0gcYWb`@tb!kY$>@`=DodlE9}Z=$mavDCG$A%=}o47$R~q7^dO5aWX!#P zu_YUm<=!<}=7L?wp*Oj&IS)tnvB0swvB0;%0%0^vwoil0?aRX8nTO4A8P{yiSZ(*; z;aU9P9v_e!hvBNt6$`uZ!Hx$mJfa?%xWWDqPv9wXX2Kh||NpahHzC(=>7CbmYO@z-!JF628;jOdb!qb?fd_|uIvBb z`xd|2;*~zxpbyU>FpC}f$p_f=SDYEwz2}dcScxkqQ)4UMy2e%v98@i>pYvxBEntPU`_#Du^HOL=uj;4xs?2P}` zuQj#rv*Eh6Ib(lq*0)0-tsTdKb{W z)xE#?%6(kU|GY;#=h)Ug*gYImuHV61?8RZflkeWI;4U6)K3w>ZAF(@*U{voBzK%iI zWE}k)Q^6LtU>c6?>&s8b7r`~Gah)Cbg0Zpld>+ts^HV3A|AW8vT^2ic@6SSOA=b4H zG-HR7pJMA6`%nAXZ4NZ2C2i^hyJ<=X^N`C=L)Uz_fAf85#pj6KtxdjwXFc@SuWPio zj&1F0uNccZYs(gXh%pp4vg2gEd3om4?@jsawGN(LXs18@-g_OU|50ER7zN%I1>95J z&oRRN-TfQed*)v(*8Msb#a{R3{T{&LKlV7zkBDE`RJ`au?mQ0Qkhl;dY>kh5Cxf=X zu$UtT#42NH=Q#nE#T%>$C%f5#o$}^!-?jGRjyV{UK9BW1v$)A_^H$Cr z02{L(^A)zMLr?Yb5^w2Ei(+nl^M}lfe%6Ve#?sdH*ld01;Fx~aM-GPebdB@I$hY%( z&`y1Qsh1B{?9aYFTfS4uZl5dfoBG~~!Vl1wvDxbROR@iBt;5^$w?Fe71xA6lTLCey z`!x<=f_rrgYcZ3SQwtoUnb!6=TL~wqS@hCx^6A z53~3x_>T|HY2zIMtizn`11#3%Pq-f6F~`1~x$Rk8Gk1K$(R;u5_wbX~ZvoK4{Afi3 zcEx%2@?VPiZPnTOtT}5-7j1W5XZb{~sY5F|SsytS^=MSHVRVUuypU+k|PTRxe(AFnmdXw|&T z&055HbI5l4&gZjWzj@PM;SV{d&wK(}(~mB#kMWG7n0sqwi~ai7pS6+$Fb18h3p>wx z`rN+4@}JbR&klZoYd$xM_`lzqv^Kn$}x;{UOcDJl^<^asi{H??3r?9{0 z|9pV_CVK3=$l@~YTNCd_(AIqPhsAW)#(6rQ+;^;4hpws14!UYfpZe6VbyL(cUOt`i z)Ned}%K9-+J^}G>(36sqyqR3XB4yz$ozN3Sgi6EIweSdpEYb zNAm%S*W9*{Kc|9lGD_^&OS`W(=j=6td0 z8;2cy75vW!!2X^Ci2q&JFW=4j>PNfzt)IvH?9E7{z$ox`D&StbW4y&>>~Sv^v&r}W z&X<3BGswPJjUV8CjSuAj_zvQEOvZJ*!46EpF$D`Ydlsk48DNV#`f|NkQa$_5;fzvy zZSX%|#d-GgJ+PziteX#xmFyKQO2Za&M- zc^oFY*mR}0we7tD=ZpP~uRb5F=l(kvbHx7okNZA5 z=YF{WpEdoO3p=fuc2BhqGwvub3XB48ivq=P?!Dqi_jSzly{uw>{}WK$hCS}vVo>*O z_kV33<^XU5KVoi7!lU?&L+&q)m;Kg<{d8w5 ze$y!S=ew!zx_M#ue%7+qQ-9W=b#UD|+s*%_mvz_1czm9sX`}?fq2jmkJ`ZJZA;md*g`s6CZHLecC-7 z``y#++jgv-d;VsPcktH#1`yxtt3Hag^(V%A?~gv%J^+8gchkl6SR#+?9QNVDjziZL zr;Hi5)D>r{TP$lV{Kv8U2yC*?Mq{%>T&f?8JLmbF)`q=oWFOX=JHH^`!1*2ji~W~A z{5Er?fub!QTN6H(bLu&7OADOWH+_1>&xfO*zQq03$+2E z{-UjTzvE(mc9;kLYsb##v<_p-C@>0)0&jx??!StAv3vfG0~agt-@PCA^8-#Fz&+f3 z8+(83i@&{@j6Dx?0Q$ooY{OnT0A(|KaUXlckNa8jViGnfaf=Q1v4y|T^M346Prt_1 zU;KA0PG+BWO1?<_YWLjMSB%UqoX2c)XSZ{7yt04gF3fe$`4V?qLz>W^My+e})t_^Y z>1Ln5hTWKN4aEF=E!O9Nc4=>|)7l#5Yw-c9&qkk*a{Qhh`5uWmIcHlQh7IhrM%vBy z{h!+>aqJldMuE3Q0r%i?0AhNvvU|R`4FlTd6O_xv2pqx??d1U6*PYWRW}Mu04x`@x z!*6`&_x|*|et=jLfBe>r`ufC&xMh6oidkY*zJlij&g;`QzrfgR5gY5nb#tjdY<2Fb z-}!sfXNzt8mF5@!txL~GT(gh=IIazSoTtA+$9?XiCI2D*)51QM(+bb^rJX)b8?>Vz zo1A9{|0-X@+8M`n{P!-yH~!$A{XPGFPa>b7e&l(KrEh({NsBo@3XB4yz$kEE1!9GJ zvU~ex!{t3L_jKGpbGgNNo=vNZz4$FJuYEabOmNS~u=r~%Z7^Ir-0^OIe8MC=SF~}S z51?qLe|CEI>^gqv(>defzhWQTT-O%YuwNhQ-&fI3);pWc+x%$AUd-&BJq$MA{$FwR z&6}opu1&h>2cu7az`4F_(7t2(7&FbRoi#Lu>pKUr#=(DnpY=QaMc)}!`n_M@_2&op z%&^H=)~48he&_#_eO9LRC@>0)0-r>I{x3jmb&qyW$AF&Qiuvu!>$<0x6Tk($!GdCM zZ1VisHSEBhc#gvu|lfQw)n9bx0nqjapEviZN57yHDZv5D>2 z#}B~2Vr2a{H(T?0vkK4WO7k*jbHIOdQpC?R$d8Ku{GQGKRcE(bn$nFn#r|oVzWlWI zt&95V(#gKH)0dLAbT@wA`D3fR|H=HXzyG=YIpHt%IqCDo{+F~C&*xJymW%?Uz$kEg z1^OL2_hvqTd$oH$&gTP&DgNA?zr>uIJD2_M z#ea46wb`@A!FcB|(0L`>`5>-47H_)7M%&vfcfTI9*&Gyeq7!Y)pJT6iSufXdnZMwi zy7AoghZVm+fcle`WmAiMGY(C;zQsTE&0cxPCrgNoRWM!+3lF=dD}Xx=v4h^Q*-Et|_sf zpXfP1{}A_mR_yoruom9SWH)=BgT`aSC@>0)0;9lR`b+rW-t0cD;DP(Q`#RR+zZj2C zAQ#{s?|vVHYKQ+=ffMl=OZ12J#=#iJor^=|qaAn7HvX%R@%qOxY-xOBxh77+K>yBvV~ zf4uiUfia&SAiwKA-}8apPW-*vo$SSP*UAB0xw9C9N7%B@U5@R?DckDDf9xv8x6eP( zhplmN3G=a#9gce!;p1xYl=XWaV-3XK=ED~-cXP5X=8W$#dav8MuC8;m!}P1hhqn9L zCI7D-t@#wjz;gX++vmZU*zX+xxqp4S7WeZ3$`$!s*k_}DPQS&ur_^@F9tB2$QD7AK ziwfX0b`;CwuJ{e>6>-1+RinTtFbcT0yWhKK;|{jV^PZ*nuKT@f+Q}2k0le-#Kpest9H}@LpW@QPEq=r~ z_QZFL!WY-Ne)T~-16Xx2QS7M?_PvzVWh?vnF1F`$_qc4%^rQhTXl|~29_Q$a|K{lOr3ZDmc&-eby{re2a^W%M6{5Q7JXUUqsq&0XcpOvw56c`0Y zfmL}+~votV%}nCI+!a?Kfr!|1HFt(PrB0-|BWRlbn-s#pPvhL*vM{0f5y1g z=XClR1xA5UU=+Bm0$2X5`@Z`&CUn0)V?F!b@5Oua!MKAH3P$f|0IQ$=7cI_U!sh+S z{|k@e)9C}`C+HgwV|)C^D}7>J%wjiY$(f6XF-&{Rx~*Eb?~O+0W}fB$aoU{l(>%=8 zoE3F9lUIHp`^~lgsY{#9`lT;zPkrf1qx93a>&7<*A5eeW2U+#xgV;pla{sOW=?k>4 z5B`I8)6Dud#uB@d(FeXe(#~z^f?NQ0;9kva61Lu!`B{4^S0+RVAtdc zut&^?)A7hwe^`S_*cE^9%X!CV+^^2|0~Vw3qh}I+XAp;CeetVv>KTX4Y!`pVua^>o zvR|H`{rF51`-(YR2Xl@6wrRoNQBNEF&_-S5)YdU==)3v9#<70(X{bNC;lDoVX-(s} zwO9P^pLap~Oz5NU{27}q`e4hv_jkL$&*^Ct7zIXwdn(|bE&g;5$BLfky2s-_?%4WX z01jY)7!Nx(e^N?MEz64&$ zn{SS-XX#>5*F4|2r*5C5Z+4rP|Ls%kZ~o=bo3r^U&7DucKk{9E+MBnzZvL^5u=s2K>Uc=bVQ&PjkV4^EDrSfd94Q-AdPE{<)=x zg0;PKq3+i84g9Bb>wwj?q>VMw554$rw*F@`Tlj#nzu$lIIk5IhIUxP;AMzQTf4oob zj5G?20;9kv@JST-i68xm&4TXZ=l#F?Jr=nC`>j_zCd2LH|9 zKHi!)AAwHhZ4I2;8XtP*U(rl^Y_@L=^v`e52R|Y|j{l)A{@-5vFMVPA0%CrpbNoVc z&>tK0^PKhmB!3^%b`%%|MuAVW0`A?#-C{(15aatlK<@eO{kZQLfGvNZ8~|>~0pNZy zDTe5yxLu$4gk|{CF-GMdXoF>Z3H^vo>nHxHTYdeoTkJ0fzB~~hTnhpH~-Q0L0bFG z`^A6j>@)E7-}=>^|8bswppV{Pv_6hM&3_{^w^3je7zI9!3KUmjxtP?kdpzFD`76Kk z<)6MD;{h(X=i`UC5qG__he`N^V{r?cFdw@yY_n>eI~f(%iYLp1JFg9!Z0nORVSIeU zP7Gs9akXpDF&}LX3Y}v=e}xal4`4T*#%c3E3te63@9>q(SDWn@EiF#o>%a4~NJo9B z7yoIF|IXn*|4zYr+nxjQ{hafBKwq9;_{`{!U-N1F+n70x0;9kv@M%`SJKOHzn1ls5 z&@*87{CID_|M%({09IfT{`U+(drZ<_%+??NV>Xt>e{70RzRO+?Li>COY>R*Dbc{cp z7yp;{=L49B_UwCZ>$cguxE%k@|IGb2KU>~Gzi=l5a0Hr6;_fDh>XKga61&hL6D-?w;fpM$Yy6c`0Yf#;$CF3CsZfO~p* z;Qk)~_U8*=05%kZYl8*&jY$edU=8MASZu=W&3}x#@Cm!rmG{@y`)JO|QDff8GUw}? zjrRK<9sAjUt@h37x#*i6Y@!A3mj9<;zxn67d2PRF>0|!#0^XTW%un8A=kHhEfbV0U zey3mcaKC3SX_vpm2L2m+T$9(q_KLOkF6cWy|L)HJ@adF%MPollKP$awI|_^fqrfQe z;R@h`I1+#5101`r7m;A;J{$bMQN+&fm5C@K60*9R)^#QD77h-?^9X_vscJFv7jwy&nr=K*!kNJRd7cy=MSe(EVThXFvA4*1OGPgUG-g~S6cHQwA20}{~cQc zTF^T7TPxZc!`SLr({p{Tck5pcL4E7--1NQuicOEBz$h>Zyd4U-zvBQVc(>dA9TQ@J zZ9YJps11LiX8__+jKZY2g8Q3I7d~y)EiQ>A`3Ty?du@G}!13mj@5(K1s*?|JK0Clw zOvNR>LHxIM?YXQTTlggkCYyu#vE4O3k#l??@8g>@o#=zxwlws9B#k_`*Iuz!+F#kf z>ZQ3gl7rEgdUVpaap*}W*B(Cm&-b(D;(wn7W4!a;SNHgAp4|U)`E-pPqrfOI3Vi!4pFJGeP z1g_~r-^Rc&O!Q3LKDIrlcK|RHV{wR$_K!IeuC!#>A5xL zV<~I>Y_UI`9Mg#%)(QWO)3bkT8ux9LGxx7gZLAO5zW-0#v>XLSfl*)-cuopzmM%8n z4@O|`$pHKE!i1;yhdsRmfImAfT^!*P=pW-TNzq zV62LdnCH4N^rgLa#$Y=}v5U=5tuc0+EBo-CjrPr@Ik?UzpuNJEanAM4@}(IqY2f*R z`TpY9{^S+@^DUI>+iIg9T9jwm?+&i9jqkiVt*!03&*yW@7o;iMjQ^aTtvvPm&iJFi zC@>1VbOmrU#(KXycE@^K{8xM@+;;-vznB|OcKrX|ci&x$JNhjjjY;_cuH!hCX&b{| ziDy@RHt7R9#h+qc#|r-IM_YW`&j1$x`4QSZ2TozEImt(k5&F`epCu2Vo%Wmk%ePS9KAo*${qxbRlV|@pZmsBd=KkY-et_JCJ`~S| z*sP8IU;5{L>>mY2fl*)-_^tw;=eoD|3;?I_r@Vi^2k6-E0{KkC&{u}Sdzw-OveKx)L=)AFUOo^Y^|7(Bz!LH}J;+molJlp(Vec*rNKlS?3 z0QbfGbW->$YniDDVvRHYA_N}+A*q?9U{Q&LzOgy!wA8!Sw_9!q4i~^&;M^OM1Jd?*KaUwo=FDxd+e0<;! z_&-7RF#&(&0K}%+I*wzTYZpGnf9J4E8#!-n;(r`eHy)~sL$2vJE*e`MenkA|!}OjS zj(wE5-=hw@_(tquyTX6LQt>z2%?I1#yZX(qIl7h~RG#4X{`7<0kNU>RzuMcSHU8_z zbz{<3{4e&mHqKjLYx?a!``Uh{<5_@XxgKjSFQE?K%x6M>Y`KS4)8{BK3XB4yz|$#! zm6#;Y>wb?p;y=Fw*zW-MTfo?FAOEog+py*Q{vKB02WAwT#{crq#*x>@Bsu%|j%iBu z**D?Y|7busLz6g4)#1%LSf=0jWj_fBKln6rY}wAy;Dx}A4yE_*$e zrrP5_rkj7-<_FM5U#@9mOnwzoSc3;Kb+&eAVC>MeM=7*(zH|9d zv`MRYtWQ2cIRN|GSrhHzzOAwOXtaI!|Ni)N*0?qG+z0=S!(TD>Q~FX*wT3h9C@>0) z0&j}~*x^1eX7rse965g*CO({7*J~qIjQ{$;8Vtj@9j7jiJH~Fu+F_TN);n!D6Kl#V z#Q%H%ZDXb_mf{{x@gXX4mLKrg>zD6Q?9V<7rjO_FAIAUYM?3nMWA94z++TZZlcuz3 z|9tlEw}Y(*j$=QK^x60R_;cR#>)C%kfW8%<0qdxZdXKH+j5i950;9kv@Hh(e4giK? z6&4jMVm<~aC;uH6EA|XPEH2)}Foj=Hj2i#<@!}SiVGJL@m{^B-n4@URj{E@oovWTL zw&_Q~JI@33rS9XX_vfP+)4cg0#r|oU&FUzQ^N~8Hr@6bflBE_kVosI~T_`!&j{T3jZ(1n5I6)@f{qO2Y99Z>Q6te*($E9AN#eJcNe>w z2bSGRn~&NLo4kJz|Jm_j@BYyQ`(wBEv@=i4<{R~Wf9vB~+)oE(@qrfOI3cO4O;%%`Xwx4W>8L`4vopRLLVHTd- zV#oOofS6V(A7C5rF%IkSN`Lteo2P4xll!>my0)(Oy#+aU%+kkGvCEu|E&ne5@0|)Z zv6aniKe>;&+BI);H7DPXq^0B5M%(y*>WTl>VvoPZHJ)4upGY72c0K-|@xOI--deLo z-oRRF!RA;yZFj!^l0R`iEz*h}efQ6r=tm!Xv4{LWeLDVuKIHqgXV+8y zj>4_hWcnEeMuAaa6!>rjuD=C*`JXSif(bnve#rhX;!H6o7Rx#JJv`hgW_=z1 z^8qlbxEC|AP{DoIjI-NcVqolZUVCFUHr_eLugCn}divon9{~GpG1xv^(n2m2Z7QcIEO}ovv zbxl8e{Kd9@=N1!jj~{?x%8q$geQh1P*0cYf0q_M}Q|GbPCVPtg%?pe9GWjrcXrFy_ zU_Z_IO#4~=YUdi?D{aiVd256J`}&%n^K_*hp8)UW8*DvSQJ1#m`Qv}=?|kcs|Jvy9 zv9z0UMuAaa6c`1bR)Khm|Kd!H!3W$|FvD-h`OO%=9pjujn1&nph5g!#gY_5xaqHZV zZKn?q$MmNU{Q9du^4C});-}vvz+kpH z&sMB%4zZuD=Bb`}+zO#d!kEPv=GYX6XqrfQev#mvC$^JCi=MMgB?;Jhjzj5_N19=BNls@ra&c>Sk##evgJHPU! zFYIII_;A)(AM*XaKj|~Tj;H-J&gi4SC@>0)0*|FYzXMR*iUHVw`~Uy{`OBO8j&VaC zzVVC>;TIFD;FAG3;Eul!%k+WU)TuE(`_i2dG&^GsWOtFC_Q+g8kN{Br5+ zf9xDK{_}st&}_ti8t_Z9*VZ-fM#%XW_dCDy@9SFgKYf7C@f)uGN zfg89VOU~Re_Gp89n|;d%zgMIOzZERHXU)bnb3Eqme%~P9K=1-FcCC&Cbm6vPU>YJ|E zjsND4|JHW~VbNIsJz5{T^tFPt%8qb)!T)4Jl-gQn}HpxqS z7J#SN>Uvyt>>WVN$6s3v)b26j*xvo`{X>2TJMq+<*wMV%N+*1FuDBoT_na^D&nG&4 zfcVd^N~`!!C)%4gA0S`M|8lZ^crX9o`0q z+7!S7&)V@rJc%zDuV4lr;2(bRhj!eE|B5>0{WpVFu0Hl*G&Y?)x4&5y^Do=Zy~4qD z4JQ?SiktnGz8Kn=Sk-Uk#{cr*#>UTkuaPl~we^zQU;MYvUbeBZ`D3%ZKR+P*PR6&d z{#l%-k8_*<>)3w&k^bVpaXo`^?c~4plkfNZh976`JioDid>8Gtq4m8roBl_EQD77p z1)i4zn1V|f;vGQGg~f>YUku3yz>xd``Q^?3)dt_NsPDmH-$&yAg=d?8i}`W~Z0VRy z^5;D>HwMl+FNYrc#NBcLj@g85_f{A$G1;8isL)SNf_)0R_$;{0Ha71(KHq1}y?NT| zi)L(B>{|yhzwOC?*J(_PtpVR_jbVJ_y59PguPN{E*xKpueD{wH_ttFs9|cB%QD78! zUJA&U3zx*`*TfTs;_2VDtkFUpfWA9`BZqmKiX8IomMuAaa z6!>Tg-~a|-)q7w0_02Pkz>3och$+tFiZ<9LKaW9TUoj~5;ZXd?MjXRQ{1OLa*jZdZ zeSjFLt~SQezZ`&)z0RHdx9{3VoB8)&%NUsM-8o~5#m$}n;~M*&Pm|_KgIzAZPV9F* z)@yrmo|eujH1)iOE;Pq{-;>}UIaZhNhV>O|W$mox$$!uOt@&f<_5CY7Ek}V-U=$by z?x_FhC&w#J^ufBHzVlLaovXAvHyZLRM*0`Jhi}h@2?rdZ;J8Fc#WhUBM{O|=yS+1~jr!LZc`?ed^UmRa zzX_l({a~*4isu*Xz~+1AvpqLA2HW`n7;1d>#cTGmg`Vcz+^+LmT056-qYs+sCoMbI zvjg?{3Tm4$&K6b?aw$9;*cG!bKxaFCA@vdvJAKy3g7w6P94tC+4I9?lU%SXUGtc?Gz;hp|* zuH1pX#M%0>^$tEZ^IPtvm%cHR%^1y(+4+ezCw94p`R0fJr%$kbntdbmrPcI13XB4y zz$oy%6%fbD&*Q200r2*G2QYSsCl$vyf^|3&&+!?HosWh1hhd%%V4C0ciE(&`|E^=G zHh6@0`2d)w6zi(1o^#vpSe(UC<6@|>@$p`Y7c;XL``LrTG%z;1nvZko(0pvokuLlP zTe$<8uwPqq(N)IXnpsn8+q-|-@Dc8%)$}_Gi~^&; zDDb=$5D#Jj{@{w-F;>L=;z-{k^F2VnDdQahZ7>*ribXNWc?J8#x3Pcc@E0p_Pdof~ z4&SuHR{Y%jU;E;J$BOIPsEeQZD{R&uX8O$_W8&bw6gPJEu+#k5z&3MsJ)gii_Q;i( z+s^-A_@D1!Uf7TG7?1CY>wF#>>EBq!bW*r@lN3xR+Mb z?>K77NG9~#(!;o{42k|`Hw?#0CB2V7NfB2 z{0$$hi*MSgD~>NVW<&mf{!ZoxKWG53s=+_pC%N z;9goyzoWn?Fba$U&tCyt!7Q;nHerR|j`KeNa9=*)>+gSVvmZ+wYlFRK{EvC~j9+47 z$M|Kx_;z0_&%Lf;nd@RvZPkmH>MF)jkB#vk8?hG~oi9$t!h0!h&KSC%|I7a`yWhlr z=lKeo|NNPY4`4p#D3@VQzxKx;>|DS4`8?W~=brb{$XxSn)KlWWxvOtY;y(5}?suH6 zS$PQS<+qE>1BNC$I4M)6c`0Y0W6n;#|CkD`G4G3{=fh0-@E>nJf7e` zo`^}c!F^1!bq=R??s{}Q{`qFs$Ny}I{f>+Ot*tgRX4ic3M}bjb6c`2GZUw}gc!VvU4fibB|Bb=_fADwy z%4R;6;7a`8JQAO-BK{Ze<56tGE^Krh8?g-^@gIvYu$Xwq$cvBp02qafY~my6o2^)j zt;WS-W4LbrUR=XYeY4$ow#H)vTiE2fxyW~zmpr?3Y~FJ#53uIw94+#f?2FG&{_Dq@ zDEQBhN;Biy*S`1u`hP#()fDq9`D^;8qv!wD!}xFar+#KX3XB4yz$j2WD6YgU{FhJ0 z`r=3|;S2By?5mT{fJNHcidmhcm^>JVPZ;M%&SB_eYj6E?2cW@5()U)ke?6*~4yVx$q z?mS!Z(0C{R-`CLI`~KF2e)rJm?fxs8*^dIFz$ozY z6c8_Cg8VSP$R}e;?~j96Hm^6mP$^(yGoxNN~;@xSrnKmF*Yj=I&Mskq(w=7q)T#Qf{_GR9{5@*il| z_b1bo#+|3VKKWwSrLFze$=X>7FJ3baYX`Qyli~H6{%+HRt&asF6p8dyvYkq5uroT~O6c`0YftRNM zzTgbzh)w+l0Cva|pIiI*k1@D{Z#xdZunC`V49`6i(4T(!09d8q-C3MF*;xEs?w^mK zj`3Vm*KzTzdd4VE?%J(aK%eF$p1-nv&AA*rn=m%}@E!Nfn;(#maI#*X`9-+T2TiQhNLw}(YdemwIA&iT*lWDa<24o@#@}17 zg1O?dG58ugw!iS-JhIRDf9*4$-SIkG`7Xuw>hT}?&1D*yNA>8le;4q*-`u|oV1C-G zrw?=8{9og4&6n@RE}XAer?}smslzU7%O}y_t@WAyMuAaa6c`0wrUIMSi@7lZGvY@% zfR5XGu8f1?|6)^o!b$z%o%8+9kDR%@wl@7H0B&L%E@7iSwZ%j{jIFj9CdTfZu{?9Y ze@yoNqIPV*^(yG|jQ{->f$@xQ4hrsOqx#J)EnG8CF*uu>hpl5i6t4R{And1=Yf8^M z@&VK{XXBLXZ)<%{A3&Y>&tGHDt@WAyMuAaa6c`0wrUDp)Z{>(FBZfT80XW7QtnN8~ zv48v**Ww>;IVYFBW7fqutTUGDVtX+zF7{r4u`x>j>aY#>vHj#f-vTH36PRio``X-k z74(Ura_`0evDme)vyt6O^I$)_%&%g;ifiWT`;g5?-h)0gG$#Kj{_{7COG|yWPOX)# zwNdiZ)KRzG&OP+GwcgX;C@>0)0;9m=D1Zr=BbFD3V+Mx!&OeU$Zdv@S6PSsg+NytR z)$}PJ!Osvw^I^pQ#y1ys=9|QS=e6VCu#5e+=4l`Q^_340=kuM+S$)TQZI*tB@ZH~% z#~8l@fGg_cGhn~>(zTTnz;EnQdVdYajN_VZ*NyAD>5e;(k@)}^XDobGaMCr*Hy#$p zfBU$5>s2rwjvJ@=Uo6h&i2rfl_GCZyvK#ZggRht??Obc#+89SYoX%fx?&QC5@!vVx zSPMRY_W}*^- zR`i3V_u#)i&8uhk_VJX@lYQ~uvBG}#;5ggkK33b;m$~RGA7Hn;0)0{2t^f3OEnae_a9@BQXK?qdpHpx*<; ziS(8TvOPT4}iZ|cgFw5k<%8Fi~D;ve^355 zR{S@n@%S`YP7}pk%ro|zqxUF%uR{Ip53KLt<8pH~2Yu|hu4g2B{;MBap7DSDr@gVn z`T1woD<2L2`2*_7Q&=Bk(eR$1rRjSV7zIXwQQ+k$5NA*RiyeRI^FO)cNL=w8KwjAv zSNI3|JEpfji2@#U;Txxt3G;HK^x=TTA%4}6c`0Yfl=UPDu4;% zbL_=b?7@GrWW{rTvA<*d7mwqKe1U>b`~a~pe&Kh|o7Ka%xQKhk!a;rgKmYR&dh^`8%5p6qL$v7i4_+;6Vz{oj7( zU)b~fKmPt_zN45cpNGc!*6*&n{4Ty1e?Win-@ftbEB2RraE*rECs3@5+>F9clNacj z2|vmACD=;aTWT|XjRK>1VTm|ql4q*kZVG~w7^Z`!(+G4a) zE}~}@*w3!sXT)c5Ki2aB%+*^`54Fe=E*;!3mx#i_y2A4&#aj| z&B=dSX=9w1`$-+kM}bjb6c`0=sQ}jEj5r!wa0k2aA5-u|o*Mhbn$BShp2+)S5;kGK z-?DK&_B)S@#?ar%{UJ=9`!O|NFoCp{vjHIv;>O+UrMurw?Ep=kmAA-@6dS{;f-XfHfQb-}0|y z`WgjBfl=VosQ{kfTl~k4xNob(8h*gZe?EYGIBsF0c=e3?G0l7GC;MY!xp6#<|Mssw zfVLMV>VLC#`2xoAY=O=41LA+z%!99Tt5qsDVjRAPxhc)ln0y1a@f8%lQ}b$`=7ax^ zn`hf|zQ$|5#?yb}8KZakuM*e^Qm;dk;Hmdi~2f)E=uKnTz zICtg%*uef!vSS@aa6epv^6xjoeD(>1Pxe1xA5U;OP{=25j*xA2W*oV@aH8EB4gJ zcguS2?zo)1K6c!{a`-reZLecLR(c;^$rmUWaQXoFieqAaedDohc>uP{0pQ{-zvF(5 z|5q$t&Y#a=Jae`0yA13rzk&VD#r({@Zi~=uT z0c^m{{Vw0y;!Nz9zwdVd+KT@%sNeO&7mO0GVir#0k9u+LWa7CW3*U6k^?U$*_ZvaR z+j)Ss#pa$t+~fKG$$mP?Gw^rb`^v9xU&vh9U%b!WvzS9Z&BJ-V?wG%m4?s))4Q-9h z7Ny_(w`m;bjqGZ+O%fl=U=3Sa}4?)ZQ46no-7w)l;?um9Gs zZq7K5J=)+PCV2-h_T#hmF%jQlVSJ30w%^M?P{(%!^8ql7zabCs@O=P&jF|UU+7$nb zwK3FqSZt2sevIYg_|E;q*q_Y`?)!}c^E8)=`mR097dWq78XDJlw(YaQ*w&);={ErT zou=Xctv&_Q&nPeoi~^rt1wJhP|CKL&Ve{Yb%3+On0L7;`i%Yhi1K=S(=?lC3uOQ6B zw@SSCygwe=;-Fl(tz-PFuC4aC*mn;aOAf&Jd=UG5l3PCikN^5Fj+XQPyTAF5c8ynT{^1vYXvh7009@q1rSNAI^ZoXpeQg&S*mv%%XP<6z z3cd4y{qi#A$Opi5_Vmtwc^Wp9`*-e)|F8U?=l^e7>N!6Oi~^&;Td4qs731299mT$Q z5?{Py);{)VBL|QFewP-T@&S5&&1b+xK0w@m-S%W>47HW>FZLH_>z7@4h-oK>J&TCb zw_3#Ff9%({90PxYMhZJzqlMUCe4ovj&u3{qu3>)cx1~$|L2*C!>yPij$H~8;uXh~G z({l*VV64Z(cmG{)_qL0p$E+fB6m1SIm*F-naCQh2Qd(dpW=VS1#c61ZS7~Kz`_9p^ zcL3PUhv5sDlV=&t**3q(e$V^O6Z`+i-~8RpdB4Yi{rnnwJNElO_URh$&#m>60}%gP zr_(m`xs^84&nPeoi~^&;%U1xmivPva#s9d1Cvm?m_Fz)~lg_?^ReS(3`olZ`{^tX< zkA3)$^B7s&TpVr77B=V;gCDXVgR$Q={J$mR%41+V&Nn{2oWpA4_uYwn0PjBXY0mlJ zzqzIX{-5mEr~W)o5#!U+e(X1# zN&)P_F{}{d#@u56_|otHiYqY)r^KZGzigb62hfl6-d&5KdcM?Z1p zf9&@@n;bS~iTg3^A^RQ2ezus$Epy!2&IW}KU~Alb06Z=a(6b3~d_F*V0CSA}XU^Xo zPxi-o?8k4vvEbb2KL5+t`2Xa;wP{^!@t+SwZ|(UM{Fdy!)n{h<83jgxQD78!`3i`e z#juO_SH#VjX$<50&f3X- z{KYcNHLhdZ7}p|{n*J@agGmQ9{>1@|LNZH2h11yZOi%V zpP%7fKUylk__aUT>*1Q`E3}mN|M9Q<{`Ljpf9%gcvn~FQ|9ppgwoZ`bQ=K+>~pbp0MJ{|UX=HIgb%<`-p zCr|cc7yjAedVR;>_>aFBhl{sfRdd1P#wz}21AB~VYkc}SZ{Kr}I4-Xt$6>zMFE^lH zJ`LX}_R~ua!L@$Rc+Yj|*K+|{djGHI|9rCF`06k0e8Tw~fX@5Q09)wCM(=jqTA%4} z6c`0Yfl=UPDu6+FgKzjHZhT$*kNX(byXCltNn%pW(v}Z_Ggo%496hGto96)D3B;q# zx5Ys3%J&YOI2rr-8T!I3Hu)ce+8B>tqW>6dTy={7@5TS#|2I}++c%GX6WG}7WV>tZ zm!s%A3g+jx6wT2bV&PbSq>Z(G znV-_JdK4H1MuAb_)(VJG@hFDN8RG_qlwTI_W0&8p#TVD{4!7_Kw|?x4zrAB$ed*Kp z3Dm*Dod;N4{G0#NKfeA(5Y8#MrHF|!i$9{jzx;3h$FIcw*d>0|X6GsvH{*Ztzp-zv zkMYa_M{V&KPxE!y#cr{-@zukA_S??~DCXzGVE^@b|I&p%>Ke=Ym-MsMpMLlV-mkFL zAOETxjWv<`w=UMJ!Y2CnY(g70-ddmOZxk2>MuAb_Wh#JQa``wRc8&jX|9k+y0f;R) zCi{QuW~YO!hUVW(%)bE%x8C> zY>mfQs4iatZ*A4R^(yEydp7@of_ToQ(;MV#~f1|)CFba$UFH?c?%s7P;c!nj| zAOG=0j`^29|C6use{t!IP4Nyd#m4%@Dcp(K^8aF8J_8>B3;7$kUfl0_|H*#L(igs} zr+>WM<1U-C8*`0w>s7#6^TP8p{^#?sg=pnbFJ%3^IfB6L1zVkAd{K>=k-2DMm1xA6FtpG;v_3y{>^0u@ zC02jz(oZq9ZTz>@=GLpB&-lM{6D!Aor+weC_}^UFZ_93WvfG^LBInQlp)u}@`(0O$ zX6neP*yl^oz`FR~$}|@L$A9)1!~Xzy9rvx3(ps?BdN{tdKGWYQFba$Uqrl5l0Kfjl zzx>0SOZ&O?C9W*~k0rKPj5j!f|KeCo>e+NLCU)gl=pV0avCh8OAOA4hzL-`XfDeHG zu|KBj%h>vGO}mHjzcKH@H=M<0+TcGM@f63|!e3$=X0umu&Ri9C)y6#8ZO(K^57&+1 zoUMM%nI_hz@#4Sw@!z`e1K4n`m3?*eslBa!U*@NDtR4kMfl*)-xU~YY93#Z4aphtB zU+f?MaSG2csoXSPDdn#D12GM=_zA8%hk;lq7Z9IfKQ3bEoA_@$zQ^v9FL2@8J@~Ir zEH3|VOyik1p7KdtkNxU9Z=U%)^q^JG{`myvs84>7^X9{^@xC8@^rPUvvC>&TbZVV& zzO{K1|K%R^Y0O)Hex|=sU=$byMuC^90LJWG{=t8-B>u+}$1z5%sSTcB78dV!(^h-^ z$YIM{Z}zWTx!>-=eRbnpK0rKlO@Fwl;A#8Dc5KThaNd|_{Ex@Q#J64roRvF2`H#iM zWD6~_vAEy-v{CHiE(Y^?Vn5%&oE7t-h35j^D=-(|pU{q;uAltpCwx@?(=PvL_1VJO%K__x56h@8aP{@BYP=`~dvd2HUmiy);a8Uc4Ini&?P^ z;}qPhsE_&hYKwpRag3pS1-#tP0oE~|=|jDI3Y_-}t?+hwp4NpV-eX zISTV>9_FI1Iu+My>zRsv&8K$_@xQ*2DMm1xA5U;N>ZR37${KP+W;0u_YhCaXiE%EE1FAku6qX7d(t_kOgeNB)#!zLxJ!#(#XbCi!N*quFmXSVQ@N{3`Eu(D~N? zAK}(|Pk*DpC@>0)0{2%yEQkqbo?85m9ez_@Ecws}z!W?y7R7zM)(3`RpL4#mZhtdv zaq7yuV&4k`^98h3_y>FueQc($;~2{iz(Xul_#itrUihnBg{{t=b!SBI$zm;fAK2`q2p6kW;QP*z?TOaRcSgZK&cN(0J|JGTb z*4lG``+u@#gi&A=7zIXw=d3`nEw0EB;}w?qJzl@}#}B|31y3A{IWY-OivO`ttbS$H zVw6}_fA}vxek}u+4^T{Ot1hnXJizM1J8kG#sB$e z)=B*TjX!v2uND5QV-9?P?V~JvZmrSuHwugbqrfQevJ{B_a>MaK{4e&$|Nf_pZMgtE z!4WZk{I`#HShZu+#Vs6k9CM5%PmOubDOkvF$OkCLuO0tF!PQtAXXOW6Ggjkat^Y50 zj}qB%Du&uH(Ntcu!kJKhDYf^Qrg*#-<~m zsQ4fI#sAjL|5UPu@!$I9OBmxG8cm<0z$h>Zi~=u50Sq}=izk?Y^=I+>^6?)(w80=u zDkjA!=W&KVfMJgL3&ptFVxGFj#zN=fzj`sTcLDI$vjetaEyfx<_VWYyF8aFHvu)$b zn~Uq&qlo|6;2N9R=y#9VWA4tGBOk{#Tika}JwAexAD|8`T-V+l0)0;9k^6u_03-EaSt>u+0pS&kXcwGo?Q3MMJ_ zoGJQ*_H>;2BZ4jTmA*s=_mdh8$0orzhV4)a;^D-ZPO@5O)=3jktpv&nS75~4&|BGK`uI8^#bGA-=GrYHTEMKEoGwa2_vM%K- z?(tcgK1YF3U=$byUXB9zfmQE)<<~d6uuKjfH-7GiKfAYa-xgbN7`reC=f$JtmR)lW zx3DH| zu9+JiZ=dAwSH$!*D6bLoZS_SfTgUp~GpI`+8qzp_NIl~z&a zn%Vb`AUmvazX5PBou=PWU=$byMuC^1KwQI9{PpZV{>PAW`;h+_SivvM#;JbWKd!lk zV`6#iQZSA`AQ!G3Mq!%m$$$M}qB{7$WBxU6{AWAW4t0oGsx?)2L~C-cvE5^Jzf8w`*AaS*HU4F9ivE~dpu z%*Rmd)5e(PzwveF051H;O?Ab)xEcSQGw$Z-?I;r8S|24P@1Y`nu3 zF+H~VU0-a+GyKFb4CMo8Qw{)2vC;V2@&m9OH?htbRbP~hP|E-+)kZW zdy*63+lZTu8UKy#yt(_XqH9X?<4N>X^rD4%yGFO- ze|^x@ysZ=dm%BORf4|qr9=0p&Rqxdq&e13^3XB4yz}un#CgBIZ;+PomWQo{OIo|_t zU7HxxvuI3nzIWKfsra^^11yGPevC67w&{cKf%*7};dqHvj&0*V_Fpjl>geA&1^=DH(HLC*;9e^zZjS$a9roa`IpK1AW><6CdMxJi3ozIG*lDijz<1Cd z?<;AQZ)T0O(HA|+wP>s8m);nk4#@=CMt#JpPv> z*kiBU0>i?cvP2Z!yC@>0)0?$_ge8LZLq~FcK z7_9L7F$y0*4#2+Oll2@~9c}QZSkxBlF28w zr^tolX1@uby?!xNF_(KQjhTE5_Q*XnFL?mh%%|MGt+}(yym|(ZHs)tO=F3+wKkfD7 znsHA4SKnOu7x@l+4{O3l;Gg9O$l3V)zw$P&8{_<*=Q}_D?%g%J_nJ)qqrfOI3XB3D zUjb~w8F8ez*1P}j{H=d~^BzC)0lxLkcfaHN<#PX6gCpX49EwF)C&rBBVoZJGwQ*d> zb0uE^(~61p87H0R1Ly;5v0gj#+}IEK-}m6|y(SpT4*aK^VxK*1Q_RcvA9v1TF&x{s zpR?v4+iBFi_x?IIN9Xjfp5v=V7wwwA{0ZHyn{n`8v38!*$lIKLfPHxZIRN&yUdFz+ zX4C&DFba$Uqrmf00GIK^du=#^1^DK|+TZ0RM|Y@#Am*?myWak=J)Dp7cHQ zxQ1Q0kLz*F*7fSR_R9XUAzq62#n3pXALrR?toV<=#@r)T!;#%|}? zWqxea4%eIW=Ke(s`}sfkugxp`U&q)@WBG+N7yq+`Plf;1D1Xhm$^W;-f4-IHJlfc2 z)4esD{zrjPU=$byo|gicgBw^NCyXx`f&0BnZofFvKE}j9{FjR^2aQcTzP+&Qb^OP* z%9VrbT>Jb7tkjSEdYsjl{4yNEq9Uc!anxX?#lh8 zQ(AOx>)`wHoelmGY?<73_{$BTExxBB-x zIyBE2E1C{@`H8!81_}_aP#r)Qe-&V1H)&>9h0qmJ~0Pp>&nf^zCQD78!UJAJP zi?Kb&_xv0`V*a_!C-Ck+{$P#g1=u4GuRSi~Uiodz`Y`^-G;yvr#kTr)t=RuZ{>GR0 zc=~Q^?BcKBs^Zu+<2{DLbfcHC`6lsSE`*(ZSKqa4wB-ZvQ(o}_F0uYYpU69t@!!0# znoj1am_Pl0?2EsBeRsooeD~}I|Hb^)4*TUTY+ct6&Dg}2c?a+@J~cDOC@>0)0?$K% zVm}zw;Q)N5DHVe+&|T#vVM!Z#=`TE9W1?w!6+H=8yf@sXgxLTYRmL z*l!HijCbwkx;vfF%1G{4Ux!<|CrY=ruho|_C=YIPhOFd(7U5R`7E9{N`_Kp9T z48u%zvD4U_|BJsk>^lH#QHR~V&se@7Kf$vBb5>We&kvx}sg-@t4LV<&p23L!`2l=5 z*J#-qVt;Gb{{e8#I(oiBJKM+fou2knKckNVqrfOI3SbU~U>25Qf_KGY$GPtuj;JH< z#f|u{y?*qE>2V7G?BgB|+TToE=hcgQ@m&m$Vd7YRgX{a+g`@WOyZ?*1d=@s>#`tV| ztX1tDK(>m%@t-X;G2gV9O>iaYlhrU=$byo=ySxd@(3)$WIqHKFt5ejo$t9 z-E(a`|KGe`{K1@9y_qk6ec?aOT+2FF{HnfvY{Nu-VNvf9Vq)!LB+la|eri)YEaaa& zrkeDN<=*>Kb}nRXT{E}*9h#K4ci#UG)HXjRZfj@$<@)m<@}bUm06b?XmtZaYPX&Gm zUHcAazFhuWIRL&AJJNA$z1HS2^_#Iqfl*)-7zG|*f!_VY+u}yw9rwO?-xJ3Sza!&a za%}C{KgQr3-pD)S7=GYe%*QkA-ZB5d|8n6Nh2_S_AX{wHhrSdstbQ;MtDGxmZOjUP zz_rJYU$L4N7>@nyq06atFmJZndj7uWzx*c}U_3v@b?^Rf?G}@@Psg_D)U$uj zVf=3;W9u8=vA)Nf*uVV{q1 zYNZyzL6O*OyBd1LAJK z6XQ4kvHvWtVTyO#Fb4mN#j#6&#i>}b*?o!scg(t2mXCm$+F&N$sf$IMjjNu0zJl}d z)484RUhRyJ{R;m>KTp9fHY)7#4xYK#kN-5yesfW`IX36L4(tE^X{(*~bS)2%c4uCN zzWSx7?f(A7d+VKu^$fte_&v0A@#p_sr3pnrlv6xhzyBla_pM19K%Ws$0+0O^Ott6V_J-K9W$N7rt%fW7W?Oa7+>ATQSa4J(lISDn2!^` z*=`Q(Q_{&kyXn>cM%D)7`4Dt+J>Nhd>Z-H-ri)gtr-R=CY;BzH9RR-DuYBnX-}&I% z|K0w7j>Z4{0QU3_0DZN4b%t{^3XB4yz$ox(Q2>*~l^BDij=h(M|KdYFfVdI!^9AGt zut9x{!5pmPKVUe<<2OdN#WK9Ym}{K5#*AP21nO@-uC2P8k(YDD%*N(37?Tag=SLXd zwWrEkmq%ew@BW#$V|MMiEY_Pxb4e@5*e{;Xhw8luzk$HVxoXRQSel&g0F)P@r`&)3 z7+tKd9011Sz4tl%Phft4wXLX=uJRV<^J)2<&pbwfQD77p1zuIaJszX56Jsy{Bd`MV z701PiSfLK4U`sKkI2Gsghh_Nm@ZCRL!>|}*JU)TGwAuc`g>Bm7C4a=e>oE>X#i{#Q z_l5t)XU|hIi(TfEFJyi=%C|BX*S9toAE5bN=e^F`SMn8TWp0Z1E%y1P2Tjzoc9^eU z*Jw#pHEKH(ugo!n9v(~AA=>uWzVU;E-@ z#X0?m`;A}x&wf6^Q}Unf>|;xM(3W3f-q-o8dZ#aAK6~!wzY1N{@4WWD&&LacCINs|F>la8;ou3yr*C-`)+5kzwP zrSA7J0{>%vzJRUg$b5w2(pZCe@#3}oU;Y4=)XtdRP1i=b@*e}2UFu@Ft?PIx7l32= z5as{%mH)!NS7-TnN9XSVvd6Q3@jpAwmF?zWKJ6FNo2Pl>_}1dGHvBB}!+(AgpJ3-i z)^$Es@xM0dBX-Aq_4jtQHy&-ywX|RCZ|j&H{SPR9#Z&rIkGFC&(kL(ri~?_$0+>)7 zk1_agGQa(Es}4qBjAz_2M!cv$Y{Ri)((MbZ*k8&Ux2rc&71w3|Ce}PoKG|SH%D#svE%>6 zfA0X$THzxZpHG1M-T|;RzBc@}b1m^+KA;>x&j9FaEaU3$v42bHDc5ht9tB2$QQ&P* zz`ebA+;d)h=r>}@6JtcokRQf>9LE&T{xR6L+tZ#(p`17_xmMg; ze2eRt#s^U1CjMio=MMOUact3_`8@Tyr78Qdnl9{PE87)w!EOG5>wYiLyqz~^{HKXy zeYpO6fBM1xUr6zv@1!2qD>SCP{I%l~MfrhF3pKDDkh z{wOdCi~^&;Z4|%{tiUCFz+dn6V*ut?V!z{Je+=3TU$G^|*vA+B#eaEkW9S#3Fh#*> z{(`M*7>9kuyy`e+mpc3teLIJ(UGwZ8`?KHnIq)A}`77+f_vXRxX%6N{6MhUoL4Dfg z1KGxLTI)mn?|T3z|IhdT`3>4xBRUwbcQdR{`3KiqTiarPTfYlvz11-$jcNZJbiK`| zetH=NMuAaa6u@2F5$9o$d%k-=4xD^w-?hH?hb6`S#g}osxODUU!hf-;XVb6%%OuhNK{E*_?r(Rk96Fb>QC$YOZIF{?jQvA2ic0Nq}cRoGz zVNQ5&zVud{d-(j{xifEI3}egvUw;Q+^&$Rmovmwee?9>I+gHb$@e4hh(BC^h|L)`f zp8CTzDndwR=1^yovo-f&Z8sm&KG=-uq>74gawSld#OzIPo6`we5ZO z;@Q})fBRx(48u-20Bkgd`uZ^T_74`<%t0GGyMZ*HxC?g5U9b=Tdj?=Wu9;)G0dv8B z^EHR&PDjs6%$=_k|ML-CFaA$sJ{Qf6;r)Pfjr1Wmf$g5-^bEk-`YwRqdhnYM_SMtB zHs+u|$Ddf3>0lHX1xA5U;7Jw03HNmI=g$4Fd%M`aI1m%CK*=ZQ*+2eZ7Va0zW0d}| zNBk~!+_C)X*I4+Z9mbWH#(#XlKG%D99slfOAN$njKjar+sGI{XiJkRQl7ja6YZI;ScZu zdIn%^jX|T+PjkH2aM{PlEA|)j`~MF8-gE2SGl23I^9Br(!(7!;ATK}@ z*UaHcvSyb6#wx{usvY~U`s~FYxd%KlHv8k6YsUR}O5C?Ln`3+Ymy0)F z_A2UNI8K|ZdB|T-QjS1f8uomJ&z0WdfBWTLywAaRprdhVPGe)~!KQ`f2d2zhMx8hsJCogeIpT2*te_K8SMyeZ^u<aFQSkL(1GXQu@e_LE@{J;KFe{VAq*PO>o zTP4ono9mcqT)qb$DQq#0I=9y9llF(9w4w9E=M}M>u4g+H{?{D9y1w55SbcfEU<{fWS3lN`?)*8vgY|FS^8xuT z*4~zXXdG>|GbdwxGzF&CC@>0)0;9lFD^NTt_H-}zJXdVzKCg7|w=V}^iwhWmG1_6r znfrGhM=%_}6daHLF%91;+KA=jpzryKQR~O{+HUo$K89f?p8@-e{pBN`b3Dp6zK-~v zt@$l@Y@X)Ud-l!QmVU0w-CHYjSGQaNEz9$(OTX<89KL~m)MtaW_WuKnZw>Xy548UL zJ8S>Y2eAHf0R8R*``K+Q>+#f|=NW$#7zIXwQQ)H~(0yAB>i&-*Vmp3;d;jSJ#De&b zMVN~nF$9yaB_@dx72`NpE;{bp_G}-s^ry%XXwx(P`rA2$%e#ff#~%Ez9b2&VIkQM? zZC-pG_OspAF|F9XeWk;Havtkx!sk-A=LN3iC(!NTGXOpS-JRb#fYq-tXo~;V9mj3; zX&nAt>zxnSwmbkoAzS2Vtou9feRX_*kM^fGwMKzaU=(;#1>Cdo!@b|VyWH=|eftU? zV1V2-Mrema^8VUmuXEUf>zEXmaI1WPIw${~cdQ+r$R&tz#iGtN)^4-vVx#l@=8&;_ zj?ISZKdG?aV{p3XyPUZTxpZ^GR(wuJ`{qp(8oln>f12XF{d|ay^9@|H9&DgpIRJX< z-+J^p$Oo|Pb70$hfa;nD|B>B38{cEd+f&``)n|$ zCzkem4$nsUcQ%Xv`2aK&hszCEhtp@WAOGpj@1iLkXtVWM8amfAfYX1VuR44Ixd5DQ z?eSlK?2tR5yET5(dw@O*o(0*e#~!*{yO*H-_gtK*Fba$Uqrj(J0qnq)^3RyiJ>UEN zeb3K*zW876+C9H^@gK)?Fz;%qn5`E!Ntj8|>7}q(BWVi9L zzjqI_;khrJ=lh;tWWTwXx02sO3v)Jib5@_Wp0Sv-V{36`|AqgKaa`Nh;jFXwFTMjk ztsVXwn?2UWczlrjzW0Cj2Y1ZxJ0RWx?OhP#tFNu^16Y602cEnBW8Ww+3XB48s{($n z#l0FQ-23H}-S08qz5V>Yzx_Dievb{cJ9GcVqxc@{@x^(}!J^o|k39!i*E)xH`j$&p zybtJ@pQ0X~snap$6t@=t8}B9Lp#5e({n;&-e?9|{hcQR%VJ@_ygSpd0jzCeT>uE?Q zJl;9~i?;F%`pBQMuh5DO{0TllIS3p#p7HYs){$3)XRo`N5NRM=I>c|F~8!o;rAap?iqmo>CZ3J=loBgR(ZCgz$h>ZJTC>@ zqjADL8_UIdzSD*ExbHsizF*-Ni1jc5r!gp2U`OwN@Az|ZJN96Vamqt)POW1;Li^Y4 zg-;kF{^6^pWqP z-#5>Eu8absz$h>ZJcR<-fRkcRtikGk`Jesgc8(wCJ?nLkw-w(N|Hle!z^vZ6w~rMH z7Gad_X8(mrug(3hIw$+>V-b7sJ^r&5{~I5_um&^zehy~gzw;RR6q3yP|z?ls1!-)~es&wN*F zAy4lBtQ-I4_gEX5SUVXh`vm{rCBF{`Nb8S!b2$+c^9KGK;HXo#^VQc z_Q&yfYI23Y8`LMh$32_t@y?BV@VYZ-G46`@6R>{PCw} zWzX%~Gjr};inZWfvh5sA9(*5b$NzYoY{)QKkzsO_U;2UXmmc^6+9qeu>gHP*qi-qt zrlapK_yBCf9RPcfW+S-2djU4o9f0*@51*YCpPr8djs%Vbjs)ID0yqIS&-b;R{e9by z|DEr;=j}ZJe8&Sg1K;9^&fRcdpJLpzx&D^MH`)l&59KQz7y134()0X(<$vQV$Bnp( zA0jyW^JUE8ZDjEj>XIv7?;AktafT-2d>`wc{NEWn{!hm7eld=h?!JHD2ax+sH~V>| zaX;CSp?5mn0g%6OjnDt{H~; zCNnbT`)&E(WL`bx#xdT$dsuf6ecPeTID7#1!7j3seh(1;yAM!D|McU1f$NTvJ;e42`9WKBR`2g;$wO1Cmh~uHnGtQcY8%N=)d<7hF z<$urk11J8bFZ}LLaNy>a#rZhUJe>V|-~4{0`sqjIJJAjPw(G;d;l>&LZ9Z|--MhyfKP8D zr-vhfBY`7R>t^!M&aRox45jbDk|X_uTj-zA45r z@zwrDVDWscL2T<&k|MLs*BEH{e z%az8JeSh#=b<@1bA7^`~(j5nXOPU;&kq;SKzwjW-CI2nUn;vkv`tiN?^rk<7??7kT z(^q=n3wYKp{%;QI)7$hJalgM0@%N$ZB_E(W0DeQhgMM4%8Y_Q%aI{o($8^%+O0kHgg!a25YSzVFuX4z9sF^6JA_ z^7V~3`o>Ma>cxx7%*P#sGVA$#B>CBnLZ0-~cYtJvhsn}9$&IhH{huWRvTFU4|K+Q@ z<@@bl+I^B29grP4>Ko6Kxjy#2!Obo_E9YzR8`L+Zx@?KB!ai`mzZ3n{|NArh_oDE> z-vkhM2Vgz!0<7)a0erUhb9z4#I1)G#m=c(0f7tKaKRAx_VfFkix9)HKzPs}HAOCpo zj}y8R&Zoe=xFa6H*|;Lk@a*i5N1QvqW$_VyQa}FJhagXx_ILy5JNM%b+!Y^L2VTT! z%I12Xb9!_6@`>DQY+q}wlibMyp9|gr#N%YC&BHeUt1X$jCs0qC+{vwX_`ChmXFdSA zH?I2RPo{i>?pn-+tm%VI_0U zBmmom&i>ABxO?({KESX1ukYKx`RCbh0^wtP5%0rsXHz^5%i%lD5R9R&I=I3a9=G6c z{9nGHJ$P40?tGp2o9wKcJbVL4 zHj}^kV)&oz=v*J#^TVS-T%7ZT;pAUfh`HyVIZvbXP z@&tZ>e)tjkF{ZVhJAe-Zcg`x01dasWuLR-~oa#4v@it5jzxe>pa;-*B>s!X*kPVJ!@|c#&wp} zx3eowQ|4~@{Yv@Wj&4oX*mr=|y30!IQz z0)@5jyKbuxHv<>X3c^E*K6<^Lon zvfXl8@*t;&JAfriTuv|kZjK`BAZd`#U-0921OSnXgr#ffiAoca79QRab zbNu49$#r-q9uhkbYio?>qK`M7XTJqtop?Wg}{=;g^f1u}Vfd1V9@Zq#I7GKgG0RHDYy7L$M+tKWbp7;&^_LT1R`=;_Z z^^OFN1darb1l~>pFc$8@Z~PB;JNt*vVz@214}jNjT|4~htSxl*$IbfH*W?-8;Z7P) zmxI7dBcZR37p=@ajCPr+Bgaq8m@{Z1alSudGGtj(F3pOf#?{Rw$(c`we! zr}X1*0?BpiW^*}TV9E6%tY^B@p8V;GpJ6QhZk^uhYp-XGu|9Hq>BoQe4d+PzK= z&$Zk)a@L3YyZe_GaCN*)W_&U{PR98F{I0Dda=*!Y>tLnR3mv7``b@9vMSa|F9(>4j zz~AT&fPUQ@#q-&b=X?Nh?~{Dn!9JSjbJfq8_mRMnz>&aHl>p3keulTs)c63`cJ7DM zSIkzXj^I8RuQ>O2M#L5Ry`KG@E#>17-wCSM_x-pg-qB~gZ$8Sj!y$MKr)$ga=zGZvpdt$RXL0Ic~O$yeVP^gu`2%sT+KBd{xDWM6zt{O{Sg#^H~42f&uzg{)2=M*>Fz zM*>Fz-}FteK7Pa>FxUMn42IF&)p{1fYiZn%k8uia!2JT=)sKEVBZ_fw9N`WcFW`xI z2zTfYe+ckio}e$!`oLXy1*hnzI&qCya0f2d_ND7OJ^Bui&x7~*0CYjVWRUNaoaED! zkPOvJ-qQ5t?9aE-FHTP{``mxKui5F<54~weH{Agk&wLt(-E^;H-fT%MkG=JK0P5j> zerfjf+<&+ErQ6|I-;uzP!1Iv+tcKYz7S`f-xa$s9fX!jGw9wffPvDTw{Wt>73;M+q zoBwYdGx^_{9rycfVC~ES&uAC_%viZIsQUwaB4`&E?Z0tbJ_tW#^UaF!m2uR0J{tMP zXG(Tt?;SvTAOrpx?oZeJC*}EG%{;M88jBfC_ za(#5}-+#}!#?w~*^e?li8T&@iZ%e6{ZL*#IzT+F0&}n%ja3pXfa3nwiaRO}Z?2jX0 z@mGKFJNECiIg8~7$cOKq=h+|M!g%;T&;IJ-kO!`~rC~aba7J`S$3^@IJS2{TaJN3< zeSO9KI849hix=e2^X5JSFCRephoWsVB{O#b&i>>|CVZk~P9AuguJ~>A#XlhX8R$V! zPanxs|Li7TPG37L-IPaX#)gq{a^pZpWMIkGx?tnpdJi|`*D9~N`E^5qj5NX zE~q=xI0TpAALmsZ<2UQ_18@<%?^)d0-dM`aLD*%B>y+a>bHZ2EdDpUgs{Qrb&Cd1K zPY%*?eEuH&;A-5StoRGkrGfmIcW9uOopYfg^#ZE&&({gW)nv?#u>5zMVJmJ$~qX7^m;&#S_L?A3wPV5XTp|32*H9_IGFa$@vlAYug(7 z=5T&*#-C9Bp}jA*W-=mA@*vOT8t*1IoJzj*7|(as*M8s4EFVBQeQK}G)almo(q;Z# zy3P(fn}a?C>Fxk|ed>Gc%{k{WCCgj486Vn0N^R>v3Z$&5g z-dVf*esWfK-@V-Up57mHdP{r8%>sYHT>85b56g>jb=;#r zcrC^U@EV_N-e11QV=Vb#ait36#c34|fa;|INKS2yO6|vEzPRhx^RY_%C0Z zpIjlCkP)uk=l7d$lrPZzIT;G-;#GRwcm6jYKtBbt-1>|6hYsnoGMq16=r;j9>))L6 z0oa}X*_|`L-<9^Qi8--DeTlmRP|sM~2U+uNou6F&c{&m}5;zh#5_n7k;U+GIrJJ7@ zwmN5Z{@TCMy7)g__CA0wfGf1e7tV~%g5kOTluz!D2l4~dF`gie=fwh!(RcR&$~w~< zPhZOMLup)w_wjvq|L(Ezn7OF?m>gbeJ{j@D#N;B7*e#neZ{;sl zmuFo^0!IQz0`E!!@E2yn=5Q3IcIJY)&TL};CtH5N_x|qRy6*wh)pp+j-*`I?$2aja zF3@Kj0q3O)uv=O^{GgrKnO}ds3&8EhQm?+XZ7jaWZiM> zz5(cc)3i%z_4K*eJh6!na&y`X=2I1Jz8e{F<$_E%Tm zFIAWK*45v1;K$^P^ZQ%Cc?VEA-J~CKmQU{c{|dO>8<6d{{+_@3pmVY(+k*D#RUdRj z|I;4Wo;vvpY=>{b4vnc@_BU;>ynF-ojF%6pU+wS7I)C}zOTDy&$vQ8eVK3P zRPE%e)7>_H>TlUA_nY|Yi9Zzm(`joaKiug1i2e6_i_7zo$PI@lU+wa*>O(nQZ$Du9 zV|4Q!-}RN9hqL=X7xY2q^dw!#w&YhP&p7mMe)Q^&V(R*yE#iK6QDS!h_0#(+>->=P z{Gr(MS?7_!k-(>yKLUwvmT*dK<&Z~5?7{dgd}j|=dA z^~9TNZrG1g;(c78OdTO!>V0qh-aGp{=eoN#7w!7K>_d7#OrOb&9OGuParRHnp2<4> zXfxZMiyOYt4RyeHugbO%63WJaG4vS01VP#K-XxA_ncKEUGdd=2&JmVTs-tzAAq zwxNFaM`CuxHk1oj{>SRU)JCYq)cL#!ly#x5pFaP+K9S$cy?*_<6 znEX%nTZXF-{U{Ui&*+Q}_yEe&A^97VzY(9y%ihwVezY^jz5`hOv9J2i|74H;F2LUg zI{%k1)~BGK)@-Z~>AvT~Lb9{kBY`7ce+9 z3#<2e?Z(;qj{9+l=Z)cf zHy*C%;N+Wmigp2lLJ?$R+ z%GIX2>afRt8+h_QeP+MvS#LIO4D*_@Iq4&TBY`7<4@m;ybGQg+VP&{k3|A+%O2bze z3X5TM_^b~c5PnbYS67+yJ=}Mni+|v;GV>7Yw>*8z@9e4nxWBQQxAo|=b1Tm8y?^IE zJb;TDOWYmEOV&M^kq>`|4B}++$G7RpeZB7hHvg}80LhYG=p;Spqk9-KtPlF#db!zw zacd`ET77!bhw-$8hJj%sOoplV_&*GtxC(nWrY;wW8D_(9{TaiV9M(H;;(qUx zJA1-ob(Pl+Uh8j%)xR?Q^9kO+m0L&c)WP|^_m{?B#xxJ}Rd@2gG4PMFm&^y&zt8$N zc{+3B`uwktzyC*mt-k@;e+#(I{=Nb54uuTKh@J#;63C8jis^0U(+9qmryUuK@%f$$ z9jFzFI57t z4?l;8Fj`(5A8y9|;>vKpx-eLP%bWXGI$Tu_zsra1Fy424xL_(!1bJfeqa%S{3smZ;Rj?#={j5E zL+D?*^|8%+yg%(&J#CCHc-FqPpZG}NNZ?4|rAuI9>b?(Mcr7n}pO|^ggX8LMoWGsP z;&?b7#=~xy?VJhI!*(1ke9O0gY4eQn^%pk7=XfK`H)gzIjPk|uwKWIleebTt-uvUN z&i?7tSlXG7djMnU(>YK-#;Wd1h(G$P-?!z9@2r!&$ci6^|NX5bf2y^T4IR2e!TIw& z09o=Ql*jM!zrOWDhROtERWChl`LDYCuf7vy5BOgn#t`_2=1D)s6S6aTeGh0nebQUD zD$R!de-*w76!KsBuI6McYt>e0{U<&WI1)G#c&QQyFJWk$0RP}(ydPfnJmZIZ|An3K z82-aim>QPK+wTMx#^M-%!w=ta4qu@AU-!%ApdEfNr#NHwYtEkYRVowX1)Su!{_qv< z7mV5O*qd|u^qyLM+|LKV1I9I{=2G345R)xA#i!(pZ|Oyz@{d0Lfd~0mvpjn89)K+A zsXG9ACG&Jb@A}W4aIe57tcf=dJ$fhTmZhY)qgtZN~$?W{dA}2hPX+&UEnHy#U;X^?1b`^l46bU~+~rP^Sq`vX!mrl%$kHS98RhnJtLwi9R zx}ryA^4O=j$NT+%mHs~9mwx^$`)>sK1`j^$YOB3|jsGG14d_+Z=lMwBNZ{p5pl`dv z--&y0)9xAfHURJ01GT4^V&l0p@7#jiYb<^!I>bw#}}8;m1DOW!ZDKOa|I(``mRt^>@-o z0!IQz0!aY232`V4_T1SYMs`N>TPni8{TqMu;oT`bhqc;^;iXuB?f3+*I4i<#+>bMy z=Zs|>cns^|_~z`z)B4j_{Gcv8E*~erXt=MfG9iBB#~4R&=ilG^8^ik4(=Itk>r-qD z{MZ~l>)Uv>t=)5q&7DlGBksrZ{4U%oEuZYvN!E1GI`bEu|DF4jv1go|{Y+UV)AZA` zSbhD|2VarQ*$9p|KHG3dkH5{`+>Aq~*$O{E+T7WLcGDL1Ep!L)_rB{7Zr=aJpZjRX z`LxF17Z}Ifk^#91$>79C0!IQz0?%Cna1O4)V3--+<77Ap4`Jiq{e8cAs&2{<9HV5c1H}KVK%IW;o9l{qd)h@_xo3U;UVt@a7vsIKZxUx%>y^Shtu-K z+E`CKVyw8|xnIy$z4{W%GroCwCI{o;M1DZ>QSL5S{pZ97{f+_MScCP&|NJv@$Nd8S zq(?GT7YBA^OSwQNLh{s?c62XKnP>V?-~7m2AA&mW>hU!@VRPEj z6}=cQpOXLKPQtUc-XU0v{`ISWZP~Sc__WUc?74dZ`D{`>dw?yNvw70D{A6(ABY`7< zBZ22CfiMmB!dU^X!Z|UV%m)xV_qz)yU#xC?k1yaYp2zv{xV!hw`yc=4KGPWww)*A@ zt_yHizP9cPV7Pt-_$`>P5U;>yL0(*mW7?UsHZxaRUFgLcu7qHgG zXqY&C?w7Tdc`?l0h*!yBAScx;6LPN5*C+^4S{SMZMae_(d0J;{jZ>OGti=gr_MA^(o{#auJ=uR=d3e&i%-Ncnuk*eh9lI1+f85`YbzHDN`V5tf8E*JoHACW%Xjy*=07bA5+t#g!@7uXFO|`^6V{1J3^N zfB)LA{q!$??dy0SPwR*8fa~G6xHA_lckY6f@ju)*X50~e%EK9P|MUZzJB-KQ`hxp- z2_NuP)ZrUASK>sntxsca-p7U3wL*6oV*TmEJmXU1YbQ_NPsxJJ4d>ud^DUSwA7FF; zTBG+Z&iaD7VtMXt$c=v0=PxLq>y);Bz5+St1CSjXAzOj{n#-2mnwOYO$g7O5^=F>O z{=)D2v)dP>Z@kZ5*ihdC@Nd|TXPm7qeHz=m1@oFZ?3quKp=(})Ut4k`FM7+zd*J_7#t*~)#wSx8&rb3I z#Oz7vK7cKCmZx{TPxt1}r?KYV4P>Ln$ycO%dQ9(P>$7HY&tiGxmVDVO`3UW;Vrwp4 zoD8(j4zqdkBA>6<=*c+}I1+g25`YJj&%$Sz)9;#uBe10)53Y#e2P}dq+G{I>ZLm(d zxcp-If_vD`be*SgzBCMlsp|M`J=nVWe{m$t#{0NFoOb4i(cR_3aODE*H?}$ACG&@a zaYOeI)~fH;ERHvD4g7}v`Xa}Do?r7xo|P-pkH2ke4DSQTOP@F}{@n9g_XT2{B82ng zt-f}GHc!Pq&BdI})jatC0!}SI+pu2pCKvC9tjV)-{3+B%9rar$+2V3?iA%T7u;fmk z$zB~n-{uqlnYM!Fz zFJA(9&fbS5@HQ-h7tUnxLJT{EaHQuMD=UQko+qa1AGQ^Td!7Yne*DfC=nMth^9jP( z-m~%x@I&V__#9443;18?UO-wKV;l3&{H4FS=S>dQGkGEIm#55g{Gz=xC%L)bhvjfS zU&0vj)q%6xi}iso)YF%9>h=ZJvpK}0+LB*Bg*03jYpbuP!v8otu20{d`Bu1Y&zZaz z$6BK`Uw0QhD5DeS`~99^rO9`$Gx_S5{@np|XTna%nOxa+`lLTH*N=Q5JY0fl*?(5Z}i)a3dTI zTVSTpGc1iGalEsC_}x8# zd^ioC;V?e~zv_2#f^=)1Yg3QRl)+8G{NSg4%y-Ll&2@9YinnZUSgo%4>R(@e6aQ*i zWQxD=1KAi$-{#ucO}_c-+08e zpAWzW_yqijzVGXvfIiuPb=WJ?@xM4*pRu%d=G8jP-IxXaH%4h?<{?f7`V#che$Njv zZ~Nmh{ha(Gfg^#JA%S=bKfxAwGPz$~7#V(uVatrK>FS2P`Vl6cJ>cEqu}`FL&+5WD zeZjBrEPU(T0PMs)@qF+5;dGoo@BQJi`uq!b2=E%-$4k~*+Wg5xUa}xFdD_JNI2~`` zA#K7?zCbdtj`|W;=P^r4?r@nba3>#N`d0ZZ@#15BeIEJdiSzM4zLwrHT0RP!l4tJL z{kr*Bulo2{%-4~}PP-@R?@5%oDj7e0n7JbWlwG*=V|`A9L0RyW%V2cRZgh zP5xKL?wtR<3&^(o9|rW7pO9_pPn~>%Y}#B3+C3K9ck0%*{_e%>zP~RN&-P@&rp4Z^ zh{+&%yiP}_{7B$P;Q2}b#=yt;McUqvt0x}a!656KjAic_`iN@^S)xdjHA1=$J^%TIsPXLGJD+|t&M)PkN@S- z3Ayp#y7wU?e623o&L}-L^mho>!p8ds;2!_8F@eqb9zd*3 zJ}I9ddlVOH$3MtE*|~LH_f`9#_*$;rHBa4Zo_Yo4)-RAL{g8t-v!^%l(O##+Q+_0H zB=B@40Q2m9cq#5VY=jM047onv!V1(J`y+*cs>%a-{XIr76yhV zVTSmc?irSphNIHqk{FKYPdcpWIjn>A;U6rF&*yhm^3(|{Yg=773VUI&;8~~~{|j(e z9^Sye=I8A1%+vbGM2IWIg1Q?cS6v(xkudm|xUwqGU_zd-# z-(f5~i{G4i1U0Is1Nq593{e`q|Pw{#O>4i-r9zVELihYvtJ>`;%6l9T(d_ z<|L4Txm!a%jWutMUU}9x-;c2q`>g#~pEI6i#`m0E8;`w`g}gV>)2VYLa3t_NB>-b! zV%XBYmk$>vR=|*Z&+st}iTAaKOE^v6@L7lpVVE-Y9>c4!GrotH(qXVT?8WzCu6pvP z58zoo+*MEC=7m#Wp0u@_kJ#MB*0yL!QeQd@oBvm`o-$HX|U|Er!a;B0LT_u77*dFEg)zVFBP?nLmvJkMfsechbm^ZW>B ze{xM1^X#v#XL2SdZQKFiNbL4(3OeoyC)#HIQLGLFLmQ(3TwXx7)|<-5FbVGSM%))R#Q#ex069`H{ep z!1I*=%(U0-{qP2M?7Z7K0-j6^={fEWXW+%grQ7{sm?TetUEy)(8F+&e^`YPEdB}5^ z8}IiFS36hX^l-NSE2!u2wpbhdZcgzx4zO-<95dr^QeHf4Ez*1lfy}IdHHfuIM(W{s z-z)snAN{GFCVP1T{vrqM>IdItS^7z4xS;pkWZb<29<2WRip{~DJ?>;v&d~V3zgLh) z#&dqYle0dyKn`R~7uG3QqxCA6AKw>~Tk<12{TrWt^_9(ePS3`Z7G^pdAXD#H%$?lv zG8^mMo-NJ$scccq_Oid8wW*GNvh`wP*avLWTFFWvJM**_ex&t?J-5EzbMTY)-N*7v z$xgX76|7b8OjfPk8r!e>S4OT=PbYmOa3t`uBmg(VOgOVKVBu{zJ#j)BK8eE(m|7dS zBdslbD!?x3;+fVSckXtpZy4CO%F>hn<9#^#_kZv2_{13>*1}fY{}W&S;tuMC!P45R z!;iqdFn)(Merv+N=2_f5Kv)SU%^60*R%uwRjXGI}v_AF2uTlq};D3F{7n=v1%@2^) zx3-PR4^U5ieHpX!DY;ogeKr33irEu8!u$9K4`1*9$!gBe`m9xb-=J@~-FP3L;eJ6o z`Y;CW*Dmh&%wFVWn`A?l1#+8qosRXZP3_EuuE^Eg=}ukz&wi#IPEOC>)X5&j**&VgY{65Z=O9{QqD7#h={&XP~sQ>c;?l9f%*o`kQx{t3AFK@PWR?`iTF{8?KYPb&#ia zPr(XtINR_J;L88(iEOU(v_@_A?>K(^>%Z@4jr;c=mz=C!ozDDZ?d%=@r!)O3Q&$@y zuB5Z{W)5Vk9lcA7Bo0~+kaX0*im-?+0=}u9ZGj6#aCsU#q4n2{b%cZYwPj% z0_JV5<|N1MUyZiUMFdu*ak8J+Rrzyt&0-o~@8>bt?JoE$O#jqT>VMBu!R$arQ}G`Xjsam0gozTrVzYlfLDV ztNHX>j&$n#QudU-vMqKN|BKy0vA=)yJ-=o9qSFrJ|L(WMg8Ax~ZLl@-Wq0!D`?r~H ze~Am(rassQUD&&9y}JN`eNB0u^pU`kz{`{XT(jrHKlp+BaaKOSK5H%v zhZ_?+q~T1Q2{*#CdvVwWuVE}sfIYAt-^o{}Gm%)BI6FE2C;#*x*jNjf!`t{D_T~e? zRqbG}_3~rjpV&OCJ^U1R?~kjL;|w7VAtU^LJuB%4PvISBa`mn2AN->q-nfph$i+Iv zt*`Z3yYbCYU1wQ*faB!rJ9*)Mp*1`e>m)CB5&!#t8>GoYKABnDb-vcAE&pN0WI!IB z{hj+K|MTa_=GtF2O&9bf&_{YS4?$bw3G^q{mVG$;<4yBduXh0KDVxOiaert2X^UU| z!SC31sE#)Ae>xY_yRogy`JZi(mpPkb`=b3LzV0vmkVX0CD_FDs+(Y4e@*o3tWZzn^ z{sr}|ovg3&JkLi0M*=TX0`@%Iu>ZqA*s$?(@jH&6Av{$dS57XQcbnmrdSRCO#?S|h zgGtU>ekWHwI0VZkKE~rX9Iy9|Us~S3{?c#U82dke;ScY#|JQ!?AO2dn8}GwkeZoKf zOg@0M!$4z;^JU@(SjiV6i!c+ON^3hULL1m=ZN}N>{DtXw+q%dJNBqK%ee`R;_;Vla zxr%@3=fAS^%o#_hM_zajC-5Q6Pe114odHg=25V6^=kY$%WW%p>=5#OA9X?*i|H{bt zZRTiwo%P8>U}y5!(mj7d9{rG4_Xu<*@N47N>|LA>?iaH!VRAn` zvcaGFp)YN_ZO}LFH*YdzbNK+~V}9+Y_ENFF>W^Fmw$mPJZPsA_S*N`E z^qkFIZTfBWbm|@n90@!>3E1%j z*F2s=On&_h{da!($M^3mA6WpmrF zT{5F{b0t?}h|9yhy#wfXCfW6s|M``1KR=Z2(lPs!*V&&=`4DufuVQNu_T9!>Cwp^V zH&1iUS5c?EByOLH3;Gn;p0R}XX8F~rO|kypMmLYi{p24B90@!h3E20rulvKW1tykO z7JghYrFP*+ZDy>0Sc_A`HD_1+1?%Sdzkb3gXQs|s@Km~c06dRRuiOfU)ysG2?!Wiu z-J4JRH#hTyfq0;^VzINNxhlWnBui$e5ocCV#d+`CK}Cq`P!Y$N8VxAsfu5>9w@|Cs>a)wnzAQ zd?wF=c?tH_+?(0RjO$yB|MLNg+q3#AgafaV=c~%-NXR#{U+C^$uvXKkn`X&-RWwoBr*QRqh#P!Pd?)_}}|g_rdaD z27Fd0EULXR<9~SS8$kE}z5DmfCy?hn-PsEk_kIBW>JR7eIq(uZH#S@i`;AWy=8GEy zb;ufbn4|jYT zfVp4i^1h$pzwH!UOLBV_hfi)-fW$n>yuyQj$E3}D*j zPuMG;iR|cFXg|&U8lRirn}o)lF*zB3%5J9FHo21_%xLduXHJ6jd~VLg*3}xSUt6(0 z&EeBx+MM@E9|=5F3D`?;ti9CUz$c~qCaOKuercawWA)m{;@6$E>}!358xs?x%NI|~ zDgT;hJ@Q(E=g$1*0$ZK?<5sw=K1|dn?yT={62{_Bm@B~7cwfG>FmYHNW&8*D=#BxF zhvzuS*yfR}$$>8DMTjT%oY%ARD>lJG^Y?wfJ6!X}3wQvZn}_*}uOUAG_p2}FH^|R_ z5Yq!);y}TjG?|*?Q?zY1>i&HDT1(FUwlD4{OXck1b#o_I>yH2VJv~?Ux<0g}H?o@g zPUr0}Hfhde>$?SZ(me}b%Y2>x*-2rfj|85w1lV+Yw|&%^#6GZZ+8ca->GC|= zQ!rG1&(5dLRrX_jwr_i$W154#Mo!^lSOOQ|11u>HH{#`cvAX&YjAbqb>vEP7tR-Hx z7IpOpOU3v2AD-cMd>)tL#VemGi%attU@J_8Bc18U&-t|P(>!-JF(0xcAM?ikF^r~+*B5iK@pK!sx-t$>=GatT){mx#e&9=YiJ|rW3 zij8%RjU`{KOiWIKG~cLwu;;Y)@y4CO@AKI{H#hscyvC2}rzbuVcrFrvS?w=2-PxDT7upkIw%>kf{}i`>>@(QK2f$y>2>Wls)_Fl)V|Z4s zjlA%}-fpjp?XB{{3G=-duJ}?NI1yGfS7XD|aCOc-?hpU&@jrh6ZsN}PUb=I>_vX_0 zGRze_gNb2t-)He5=wZ)i-R+VMZgSrHEC1xH+c(G$=q{K{tVL{{S9`-N=8up0QO0n0 z?;Az)>gDW$*1Lu`oHleNk-RNEeqco_oi$JqQQ%3CHpcx;K<3 z_zgOH82759Z+P4t=)?zU_*Pt9|~|4kHXk+7v|zg&v+GIs*8VNYdCByXF21OO>^rmz_)7VOh(pY?PNoTbak~e zXHs$z<0a#nm)JbS<{Q_SwqAL~(+7z6XKa1ylZ!KuF|TuZYR@p5y?6&8_zuADAF(_3 zg4@_J**-RR>wMt|?CkNRh$d;qeuhV9d@`Pw(^lHA-|u~qjfd{;g}{|^=U z7PM!_bFagS@Iq|8`V1qa$w(|H53lO4y&isvmF;lDwuk3iesyZ2eCCmPxWX>NIAiU4 zt6y`mC-VayvzwEDB=9~Z5bnS)w##nYN1m^C9)Btm?8|%cEN}m)D{Y@h*H<_z5AU|0 z!xNYX|HOj*ua3Img}%&{kI>zLy=T0QHw%yW6xza5I0ToR^?HY@PvwmZOUPw%e?EY7 zQkV!M!^`jewr}2ijwj<#u>fP?F3gQ*C;uyl*ZBc(R=@b#8IKQu^ZPE)8strxkbAfT zmthsokBjk*HSkN!(LCY^bKD%T)=;{67R#6BI|#LxuODlZPbTDJ?(fsS-*jyI0FLvo z{4L-Q|M#zLzT#7{OFToKkNE)Xr1L&`&-1^&1#=<)zQfR8fz7gI_D7#_zBJxv!(0DL z-<|i#7*}U6albe_q93|pTY~RV<;^<)`RP%A?1SB9*PZj_={p}Ge<5Al*L?$E&f9NY z_G&ExAAnr#IcfXP-s2bKCy4D+w*C9R|7Rc8Z0-AgX2oHF{n{BJ-e>=l^TVFvaLK+% zFJgN}Opm3-Y(joKubn=`0?fJAk!QScRG;kTF(2?vZS>ST5_neK6vPRxj4S_4}McVu@W}ITO0^i<4fm#-_dvHI?w;k zWAL~0TYMa@8xO|f7x-#D@X)-?xx3)<_%Cpg&bkwzYaAoiSAL8!;|Oy#f9nyOhq2|i z=2@2yVU5kVb>o&e;a%D5=g|*aAvgBp4&bMM`D@#r$dHZZ1CZf$K5X26aF@W>^6rC- z+fVj_{qd)ob;(Yn>em2J@*@%#SN_W<$pMG~zI-BJCu|*+YHGO9T zbSM~)ts6uC)+Jv(&wSzP*)!Hmj^^H(Uu?e>?7#M+yq?Kkkhk~q>LdSwohPrjUrde< z;dWLJXX0k_q9bdWacdOMeLVB8ZR#t03;&A4yNz>eZm?CF{@KXYcFyyWz~?Ce{LL2G zX}r%q+3(e+%NKWUQO6z-?2SSgaE+B~+deYx4DA~+-sd~#7vO$a;=Q7?k$9hn78c;Y z?GxNMA7;ZDF>Dd^BM+9tm_Pqh|9hV+oGoCCy6^^8!B=z>%r z9YAM$T#p;!ti13R@55i;1}Kk9>%SPr3h>sP^4D-eoKHruFsxKYK5+>-k}VnIAR+zf zGt4&+Ybkgp1JCL-Cu_tp%^7#J26q7JliBBK*PnJQ@9pWG?AQsr*gn9r4V+DeWUS8B z2jH8Lr~SkS@HZA>b=fmLuwNnj<+};WD$fsy_xYmT8L+qPksioDeTdlzJ&5CczL=1Y zMqktSWPja9sYA!xRTr`g`vuFO$_D_}_um^Mdw6=QM z9|?RT5`ZOakWKFWv;0#wD`cnQGiSWRXTcL>LPqgRJ^*<+JH<8ASAbRQVXp6* zHr~wJ>$Aoc%nR=q<0R{p=Y0B&*y#IgQQK8-%4o&WV^ z-`H1MKg(XzPkf(GpnpNVxQ%}83A!eKx+mXh7o}%h9d|YC&9|EQX4x4ZK$*Y>yVs$| z>?@mQXCG)qA`Rc)2YteqLxAmz5b8&k(EA}iO-u|~Q|AqbiJuLQK zwli8-9+ryDp=agQF`n`B1FX#&J16l4I&<;^$ZGpfi;Mauz&e}vjJHgdA2ai;%QOF` zxV4&}b#?y7f1j6KzsqsR#XjjbfyMkq_tCK2J1Sgs^#QcO{dCda0C>h#>atfhD$aKK z0d$7b@CKRFhnRfHl&<6S?0|2TJruJa^#o~LpMS~5%9GCqvrBdQI}m-PZ*vf`as8(M z%Gw**Q1f;F(46a28};Z7z7kSEyt1He&fFZ`$Z!#`cue5lk zXIXQbdC~>#i~~ofA5b12zMB*5m_Ugv)25`hm8?|Wve?Un5M-oC0# z+@2|(WtA7#cXh?pZ*Mo=yg#V@Y!{A*^=o}X*wJ%iR$pJnfKA~h%<>$rs0-gb&-r^|vZKoWqSDoj0{%;R;cfWngB`06Ze zU)(z>eVRjh7teWRCzY!!&z=;sXMG6fZ7ws&n{~7)jbB z7TCL(zOF%iI+%ThGx-ZWU*p;&H|6@*Up|0m#q0U!SWx^YuCR-rR%I?a$)t*x^eUa1R^gm4C&Oo@*c1prt=4Bgf_{u?ZFA0*YXfKV0m5QuEqL2`t8>}petnxmbH2uvnOo~tr}-N@dEyr5 zeRlwHf9G5Cu5a^}hR>~8->t_wq?MJ|9e^@zlWph!&)S|p>;97y+4;`Iw4bk~EbZuo-04Ax>&Ta01?Aaa`V-TC{HmOt zWpC2_GCa>0ke+_2eEQT6{buW8Ha^FkW$M<(+_E2bA}BMLg7UfV9!pnGJcEApsc-YR z2J$0gAr8jhbg;1x{@nsD?%Wghg;)9!^k2HTJeWE2ydOw*@*Ce6>SiOxmzMWg+wkfC zNPq;`oITMyD43P)cjjlab3gT*jXxH*AC$uiq5Z_hjbpC~_F-{%e(DI?nWK2lL)w0i z->xwX@q25AIvGE#Lo_WZttaX?J%)=?TrEey^3yIV46nQugHeb))73(uu)n|3Y z@qT&g=L1-$w&w6sb{?B_=kE^X!3VhA1MmUxIh%&*Y}zv}Cu96CEjatL^Suw(e&hq_ z)AtyBH1DvqVNc{ouGxWf@=ov5H>hr0Nw0j)=>ueU^0LKz0RAw&va4)Z+@8-am79mM z>Sd$K*r(Wh3fE_SHP7Pu?^&!b@svShkwNlkF5w3mCx3C+bB(tju+Bm-F`4+J%<%>dND34T@35sia6Yv zSOu@bGI$ft6i+-eN9%8n#p=Q+bzw2Q#qoI3GoB24otHh&`Lw<{mOed)eU;$>>+x(p zFb|jb2H;!1{Y(4qy7OlKl`+l9y6cCm;=dw@OxO~1D8@Kn|5zv$G3cX{H?p*?1 zlH=4b``WT!x~30yFJ>?8i)@;mWoy}6HkS|3{Qw=N*J;D?U-oG1S>9aYo5YklZXzhSVvx3j`i`$*s$lR*2xp2)V@Bim%lY_+(w=U3UgJt2f;_7vO3=eS%N z$G69fTWBwugE7pjeQOWvQ{U~OV*4JZgnMB}{1bkN@lZGtw|c(j%L|Xh^(oe`F|R?s zIhfaD^VCMY`VM1f44=)%JplitdCqy5-_;M%Z@ge0#v(^D^v=4os_&@1x26a9h>z5@ zHrOvVA7jM%()eQXe?CBK5^I;Nq|KfGAZ>2nn5915R`6PI=g$Y|Z%^4b{=nhvS{?TQ z>=>8hcxid`BgRkm37z2l>o)=P*FLZh$=Mwjx$^%6d34WK=&Vp)c9-AjSvs4`C-Cg- z&&JwkVmfBqVtpG=x-w~jEf&-<&UFsjH_zr(-JXkEhi7&4U7Sxn=RrQ^NnYd&OOoBh zCOU#YVxe=0bpC*Qo-j)vmkwVN2$JjMQBU~`U3o4?q+%v0Pv z>IWB?dzeiRxW<{(-}>RF{`P@<>3-U?Id|_+pZEaJ`$my(Am#(eHYGn`j~r_J88WqYi8+Trc&*|{fQxjmFm zt*-qgwom3bGp*db+Pn6$eQw+^Y3_Sz_y9A)k(rhkmWb!wzh`Hj&fDQ>{fPCYf8!WG z{F%?n<(ng!Rd$`PI)yMSY-_9;HxF}wt+PLQ|MCa^+Mb*5jf@NXaD{WfJ7n*Y{XMm_ zKb@29)iRr}dtmY~KQh7J|NB?|&qLq?;D2*!&iKMJxoIO`9ep`R;~Mpnrb{|C2xab33h1_W<9%H zfAuRaGtzX+b9c<>~|QTOj>{&_C2f!+hEMZlkmnJdzd7yo^;>e*GD)M#^}Fs z%}2gx!FuLAn{V~P>+nk(=__8E^IV6tzRAV=e0;C1{^Z9i_`(?!2RZ-aemaIR+CFAe z=4{M-0K9J9zxscFX8&eVegL0)w)N3lMd?_=XVhy2dt_5^!>Y|d;{`TQQh z`5!N|zm&6U{G6`xZ_CREAZv9z>(kv0KaM})U4UnL)^~f7Uv2-f4euDVXB*jW97-?r zJfGzW>`^K)-p&Q7yiHY~8;{axO&UpDVN!v3$k&!=V6lk?}k znrVBiy;z&}nYqcs{m!}ewz}>0@CFvhgAWrgV8#rv#j`r|4gePU7OHabOsgM0hC#+` z9gVGyynFoLoU7a1wb57oiv{y64XXuxJNw~u_)k89yF<_T9#3@Um**S`V_s)N=40O0 ziofG|F&{wi9)PUW5y)u9&i&paz;bh?D|a`q8~dr2<6rW|+u~Qv6FEHPm0Ra{Uzcoxti3?!irgUq&Z%A;89skqakbrnCM7PTnxKv;TA6Bd^*M zr|juUfX%@-HVuCsc%N-9d}6O`S_ogV?P6uw^!5){UvYkWM;x9=x7V&|?cifrSbv^z zKTK%v)}I&#*yr#e9t}6-!5RSu#aGJ18JMFS4#6aU4;@Y!)7b^)>C0H*kaTM^kLDn4 zp31I4S#_JYc=lWW;&{LDJLAE8zd<*D(-7w49h|^Fz(e#4W8TCH-3=sP>*o)J%Xpn1 zKpxWOQ!Kx_d;@aU4_)v}q@UwEfPF4o+?^cXM25A&2kv0_%X|X+Nm@C5#P#yK=gRKI z^k#qZ0sh^8_|Mz-=7ZRG>0SSH?YFG`X0G75|MQ`9E}hZW^e5?t&9z_H+LimK?b@^H zR6p9X<7xk%r!A}3_bl_9L;J4%CC$e2Eu||rZ)yGHKZx5O=6jt-^VAmq!ws^AaX46- z{OMuh)D@G|mp5f#ef{Qde!#<>z|y00kp0JA=*ixs3$|eFjjyX7o%0`zFVOXy*w(3Y zB=D{!5dX7h_=0oUDXhw;b>7Ga5c6xr%Gol!vJcu%{q9Bh&>m`!-HTz1J*h8!hL8Hi zfnWVM|9E4VdfM0b#GJ4vOoJN&tiek#C@z-|TV|N&5quU#!IJt4d&JEl3^cxcar12L zGuBQBza|#Xw7%fBpik>2V>pA~1=tVs=|hYI_y#zKKHtV(%#qy9D;bjyOcuz590i;& zme=`>ytFfKe2>?}`ZVvinalgGi+kB4x%O`NP3FYk*?Vg3A8iG90Q#_B=p;KQmu#J^ z@&mGc{V4Z;2f5Ghtf-%K-TzzRIhzpg^Z(7?pjSGvkJyqpJ7rgs_oq!yo6Vl>18r-g zPWG%XLAiSQ+iZw!@CDj$=25;fz9c)!5AZzOOXG8GjMw~|Z!!Bb*X+|c?hav6{+06z zoMV%%OS{Lyltb&a{^<+Asg0dWU+@#(!%4otKF2Iw;CwnXE*sDn+%<>T#=WFq$$mUJwO8(xP!T$ahpzi?akZ#BZ-;*=D@N5in zDwu=1f&I*j~!6)9JM3?7up6E?vLb zzkOv-@wv5OKl$G6IexXEo^tv50Q>-UroDVNmjCIS(&jzqVJ^)TR`3_pGdH%EUnSnY zmUGUM`PSFkt7N48V?qA~!6bQ|KVS?z;s@Y=WkUW!{TipSjo%!|0_G^2{NK9e-)pB$cpRRP3;B~xydUQ~ z-@*5=UwM3?9XSfdN{3|XSq%TKcBGy*_&RQ?kLKT6XKc;azC0TTCWgKGzgO=m=CMm> zcV}(f?fFgTX`S0=SZBWOgZ1INFtPo{{?!xfTTE|4J~v6z)7f4zJ*&%>mD>m6^0NbZg1u&sw0At) zYx3-)_MJHH7YoYs!}$S%JZ<%(Pa*y{=jPFR$dO#k1^+ucsAE0S?3#?(Cfg=sX?rI; z5@+vXeP83ot8e>P|K?<@DZgY?-fU~G_x9qO+S;jiB=Bh@0GruhHp(`qeU{I5?J0Ji zt&6XFP}}y-Ov{5i_E!7MUXAyQ?M1=7?2Go2`+sAZYkP6dwY{Z|dEru61!v-a+#bf{ z19bL)D`8G~;_!-}5clgpxfGkrl#z5eGUrK#=9t{9MIX%{Hp$!P&xP0h-+j)J-X;25 z{)zRz_3mDnd|{ft8iO3+QrP5KS-dV5$Xa`2t0T-Z?XBl+Y|UEgTYqoc{%yv3mvzYk zfAgvQUZQtl?Cwp+ppW>!cL4ejl;L}Uj^lfrehs)uUVcEadxiXhbgw_Yfp-P`03kns z&F}%(komaB<6{`#9?TzLr`fZZt+FLHL3iyd`O~JWD_`JC$J6b%-o3^9;<(*D6YNR# z+%2^i`Qh^HVRiH^&4!I-?B*giPq8_h?|=M(k9S>p)-r9|x?v6M5$GbB&^OuWN2t#k z^KGZR^e-6K{AMg)+d}hx8@qZ_`}>gU(IMOakk7uP83zOvu8(OzDAyt#?Z&wQFEuI2-TDR9I4{Wv|m>D;_8Mg;cx4Q=WxEit?=!IGpM^>@AbXkccybjhgEc^ zt$C20F~pt=bNtfz1o;JYtsnEz4wp>+hnwd7HnwN|@xSi?^!*&Z1B?^!KiSg{_(79hM?EP^ot4^_fpglhz?qUmqI@wD0(%Bedf z6Q|6TO`8{4uy=Qdp4B5adFua2xH<3WL%_g(Y8OxuxZ2y&~9y>17&a-_*H};S*?5S{V zW82zm>In8?ds3Nx#PO7V>?s%|t^dXnH@~m}|ArU7JAy5^y*mKUd;kF!IcLQE^X%dO zMa>V0{~IG2h?|Q!#{crnRouDWTBU`FIWQX*JKG7)Xku9H9EbCr_0=IyxIw0{$C#7z z;hVgB!Cc9;GIf)29B*Fo)th=D^Ec&hZLPIFwDW9?H?hh0S;w03b>D8sxn%yj`CBjj zXydLQ|4%;x|Jwun3S&rLgSPUDrRmwTxaZo*-+sV~*_H7H`_0&FNANzt9ROc4I}>jo zV6|;L-wWs`pMVXsd3%p-PrH{^#$NEfV2_D$wR?clp5y)a-Ftp%WkUN=yS@c<9}xfR z%XrP9edn2dnyYyV%IJ)(J41-cPd+`-Wr5AJ&-SEpzJSp86ZV^+UgO@2o15`UU+bAi z82LVJ{ke`!Z|z6eB28z{bv^HM-fYpnVXxU~{3>R{<-aPnFVwe3;7@yH?y2@wdo6yU zPib|{M?JhGFAm-J0Jq=txX#NQ;es`UNB9~Jzz#efzrz{NFebd2=l}S>SiSH^Tm2W> z-!q1hy~{UuYu$K$!xK3BSilQ$hIjmecL04i#?JLeKGynJxaR|qWxRf`9UbV`oTb&J zkJ{0Tv0rDa^wxgVpZ4}>eZ8*z`!0w1-qqtyy1>)>9$@8L7jC>aN9$C+b-i@#8^Hc= zAno}B-q&Xf@prL)rOBCnB)iV&VtLt4b=9v;?*%+hU!d<1t%*%_A29t8b@aLKD%k3p zgFe_pdx_moTW`OydEBgCKDOBYlGi>Hx36YwkMRxKYxmv(xI-|`+=uy zvsd#cH+IRU$woV6bXHwyHY(q`*?~N5eb2vTv&!I_KE=jt+~Vd`Jo8JNZ}YlmODFGf z2~57HW+(!wVC|yn}B!)mlWico^d=+@A5atuXNnrnP0ui&E0%Fw+?Az@IB1kJlGaa zvnJ~k=6Lx4?X&h#wm#$R-QK|A_K#ryba!U|wFf)%PySb5-TVZ8K8If%{e8aH1t zd&!2_(fRjg5(p2;j$Y_;@`d!9^>k__0WzJoneArJ*Jt)#VE1u8eb^uNiD2){GCG@k z%>J{_#OhZj&z!{am21nlHz#A;^UYbB9l)YuX_z6v7I+k=i+kTV?*?EJ?#K0ES?ypH zjLQemzYrD`8y`*?7mu2&^LzLjkBAH2w=2ghFj~+?es{*!pRD3{v9Vy9xO8WoS+Bb0 zM^EP4{wXHw%K6#kU77I(GN*H6WItl{4*G~J{<|(Gl5l8O(mvv|E z-W-?XOy^}ff&b}AoQ||prmi-=x6>Yz^#it9WAP zoNH-weTw$~l;=cdFebf->52}d*|s|Jp7J`L+T7SJxn`T$Zn1KKY_svn>-G^`6t^Fg z+bi^f*XcxB9r*>%$_06F$R5&(30oOmkD4#o7#*4QvRigVdTb}ts#)|LP5 zF}}5Zbmf2hDIeROQm$_NKlfwr1nlF+GY9+L-vYM(&DER*w#>fc`u0%!Zeo*q_6<2D zEArX4zkYW~Ouq7zlevDRlkc{N+x}K=zmj2c6o&)mTiIjwck(|e0Xkrp?3Eq__~P$f z{B2megHL3uE}ea{m-Fq_9w*U7_DwgNCzj6K`_i3f_1i8QO$w=fhI8b@9G(tgqh914@f_ECGk*uD=VU{b-mL-+(^I&(~nfmJ<+S+Gb5r<4ml z>$|bwQJ54yDuWa+?Cwsr@j3q7TS3AKt>Wc+^E0>o}JeOC!+L#}G(Aoa&I(D#v{KxF?spZp$J8|6I z9lmeso&WJTec)n&y=J#@vwV5{2L3~~UAgw!O+Lr(Y5F7pIycO_E&o>ZpZKT zQhs;7LHTp9xqqAWl;v|bUbY$rh{FVRq$jUiv%N+})=bXQ;S3puQ|ivZ&XpC^l}E1H z3+?4C>$RV!uOFVVsRG$Pr~U9g_a~W>mpvp+_GHIKVHaDZ8##6`U;Q2L-R2Y&*s2qF^A+D zP9(R^4KRrel*@zbg0!SY31Cr?Cn1@_*RcpW5&Njjimt><4xWbM|-hi^KaKkPpx|8gz!U<6N8)hi{+Y z3xDF*{fFf<(5-s%1wM4`;(PqwHz39l$gs4SFCq3D5X#s`eb!$w{m@J2{rN1dZDrPK z&G`WER31Bj%&(mL&0bKqJre)-F3ldYulhS1drq3KEnm2|FV&H+Z}ys-k>2mzHO}WJIQ9lzi{mY<4dupK0G@1}D60gGH0`XFK((i_4^qPdDM>-WzLwz%u$$ z4!Z<@FQcG$rFJ+s^Jf{jbJKa?le)@>YfVE^U?FY{|=EUnC$pZ}sw^Au~( z2k_37AAqloVXon4vHbQKomh)9dSwI7k2v34>5gr%Gv&`|FWDD-FkFk9owf2DYHCJocnNW3v-&v^5{RW=v)D zKu@?{y`H7%SH61IYd`Y=aHlj5X_o&^c$yY}o>XU^)KG|w|gi+xa z`=Eb31dFPZ-1SSo`V{Czp8a|+mZy#}A6w6J$tR0=I~z+LY%F=fjBHyxWtc76@5=VR zSUA%;pG>p+%JsMFjlEI7`m0ZI7$%PU8{gh-Z`=2H$~@ZJY(TjntxmWUH#?iaAUGz* z=P*JVzIcW;FsJg)E0h1LGv7xxM&o9a%}04>7jsS@VrwOTSl&5=Zsfrx?*PaVkMNt4 z54nQoWKreLEyL=cS&sh?t@e@2ts}ExY`lUbj1E1jikAHOgN4^oX zk9L1c|7@dR-{NAjZ-01}Hb?eD_WZ1T2)+PbH?E*xyhewDGO_%g!wJvy#dhsC@zt)` zjKBusXM083nLc}COP+=H)b)Npdz>-bwHNE#9E@emz0Ys&{j*!KIV*3@<*CmW<8|vK z)Ap0~k|X)Y_44BESys6`b!zLGo!3V`fxNJ_KJ{x3vn@U7L#*7~CSHfxahiU!)2AG> zJ#!cA1O5(q_zeod-=P-l7wcBnzEeLL7hAuzvjzI*PqHWbK^{G;qkgtc)_lDD34ZY& zn{U0w&)0^x{T+<@%>$Ov>r_b{!wlCJcd5LFvZH-0O=G(aDW8Ari?PF(Ydz|i-3G$1T3EGR*kN5F5Oc7vFp}T5nGSr9l z!Aw{SF9mB9tij%Bjpd80t6i9DO)%CR_1pK??%3p$r!muubqVH@pFn?;WB7;opRTlh z>ig&3{OALp^8w%ly@gHmf%m&d7Q+)94?p+-aew|ocl`VbA^o!Z_A4D^+hXtF`LN#K z(~W0ovR1CGw0YX2`XzV1z@GEUhY9BUSHAe?9(3e+`T_GEK)-C3eH(My_MVe@+yaia zAKEYW6MM=BXuo8S%B83MWykWAsWZ91vBYe!eP%AwWX8_es(GuYtbEVeFPpUw?In5H zaCeiQ$x*CaJ-VU$Fiv^6s9sn$<6Y-={(*({Ssi*~Ct6b@j`VbR;UZZ*b43oU&5>S5y!)vxF2TmE5kH#cqUfwicgInCKZQCt;ZV4M}W&> z_Gr(fOLixaY4^WuR5`3CNBwu_-#WzBGT(K07OFFSf&78|0KP$Z>W-wp!J;quY+&nh z*+)J=&uq?|#PYlcux5Mbo*h4zJoATH_%t1*KhJOl=hLBjFwcI3$ziw$vMua#{wUq!1lI3aPtMo-F^_vY462#Ct%LKt7xw53fJ3X*5R2=!b*A8OK+W{ z%_mzft(;xA*Kjr)vro(|ez#ZHR`1os?9g6QS6ZI>T6juMS&RPq0tq3Caa>Ew4J)dSQZo!$N66 zS$)+{{kIOb*4)h1T0Dm@>S^;??>Y9wevFT|aXKCqvooB9Po2Tpqdj2%c-BT}uKH?y zVzMA>dZcf6O6*3EwrA*_Y?GUIpYQ=zpXpNn#?Mcucj<>ax|=V+M{sAS+}ia0S<5kf z8%v-|^A<|aHC8{n@SN;wuburMR_4C2deQ>f74#M7tLIs$+`f@+k8F8f=BXXtQpcEN zDA2QfXT;{&7~*tH&vaU_zxe>|ck7{dadotvSTTJ7{MK26-N2x52>wXJF?Bk($YWn& znONJ2QN}QCbC~lXLtLs3`{^uZ-E`v_Kd>=-LLIR@a>FV14tbL?8~A_R-94-JU3%B? zF7F`43(-c9fTS_tt&Nq9!O9dVC5njP4B74pFO&V zI8yAQ4{<^fzx30ST#aq(7n9+M_z@1LOFj_p(;+Mm&%=0nqlZb;<)rvqgZ9K zga3TnIrJ&+g!cYN-HC0vtM%9jo6eR`$~F{u?VRipP3$Zc%mTskpPcdEx`Ud0yk@xKD9RJv>flVG;fCO>!!Bg-7|UII8epzKnOq#~n|_ z$je`h$I}@evGj_&^`m&L%g@`(ojTXKR{T-t#cM9Tx?`pF;ITdE-kzW9OMJuHY{#0g zpD%b@i);L&+{(Ggnf-+Y<~ozJSj)MSY4>nGvZPBk!k)?jP{kO#!PgqCliaMwH=R{+ zHs`67qd1%Vz;6O#u`=@%a{gR-b(YR(&-65PrO#M=_9UNaC(~B&De1Sn;}Hwkn>yU} zcRtx>{pY&+*>S)1hxysqJacDsKKp80&mP)4=B+$$;#|2wZ(8drd{qoXD{!7}#U*~w zxOxR|@q&L>7Z((<2Cj=oih6O0O)1_Z#>BJw#H$(0$_-k#eL8FBLG^i)z(@Ax+-#6c z_#GLd?5sB-S&^fDGEx`6#Ul2RoY;H#00+d;i672qym+f#A30Xa15o#Lf4>2A{{A+Q zF5QD(!+vsB*owQ-B|dk>_qjguCC#G;_YtSk3yc@T=uBJ?@AT1~_@eH=9{_*7`{@o= zScl%&OuAy*iZ&g|=jaSo^i}ZCVRLuhu-2NC9@rV%axQ-B9P*FO%?9bp-Pn_}IhVd{ z7R{E`={cJSpPhr<@d>uW$J~YQOrKF_U(=`L02OyqM_W6;%9qjeOwQxnD0?2Hg&y}l=f`)p1frDx~r?$+-9>eg&s_v`-lv8OYJ_0G7l`N{*r zF8%K8>|~NW)a_*->!GcmoZ3^H%usuDCbaXStyy2^x3;y?QS}*!r;4e%Q1L`uP{f~^1C$43KfQyCRbgjwtGV(9aj$sQzRs!4v%&w`#btLV z3o>H|Y)>1Our1^B8vwtdw`2@stw}zxA?zrgl9RKe?gGQz&2I+!8rN3vM7tyY>#V-OC6WOr%0Qc!hDF-mdro}v^Z~gK%x-*|#=qz2Kz5D5q z?&!gP=Nj&_t;w@(dgtvoK)2H;n_ZNVY*m5W3n^dmHf)yvlPRdx%*YNd8dI9nSpHFexE0PjTX;s+ofjno_DF|p ziha>H%8tT+V|2}4%yAF%-GiLkL%a32|1OzzuFjt=oc->jIBR2MG280t-d^n&-nug# zIMbx*rL&orOy)Yq@w(&0?Cb+}D{Lei&Q8#5(cf-0Cu&XO$*Ma#M|59LF#E)GHU#hCzM>tbXHVK^nd{6kw%8cm*;{VuTx`j?+(Dl^ zcsH^s`+6(nf9%!%*|NH|J5xTTk6-YIa>uYfztWziH=OvLZ`r?MZKeI9oyVCf&Wo3? z?m0`&osrDV#nU}@Tw1ouhxlHx9$tuZY`A!-&93|JBH;-mqImT0b+4GK&ByJbBx7^x z?;Pa<#o(P6tUc{3HWnW{lm2+c1aWtN&s}x8#%B%l?Cn0qU}rsxF+7##p!^!01s^Pn z-(6?DyIVKe+EZPh@i|`~`?H2~qxuwoI{>HXkFAtjvNdn8-eJXbJb2}m%x7v7d8B`LsG8!P`Bf#qZ{mkv&gZUoxEcOBd~lDtN4K4m~C45K-V1n?84vP#He0+vt&1w+i?>$sN*oIFqv901DmIBvvslCYVih`LRcAu=yAzvp zcKHw=B@gkJoYmQwxC~#|9UT~lIdt0he|2&+hfc`A{=Myc^E+?3OVs-wpBzBE=m1IaXgg;ukGOHiQSiy{uEL z)rKjLSiklZql@juZ85cY-uaq?N9?sHd&S4c^%%(qm^*N z9j(*3P<^QW#?_l^Eq15ib6@9de`~u(x`+Mr$+o;%vLpV(j*N@v^iJPmtu?xrHhEan z9`@}%ook-8^Upg~$9I^ir@@))XciDZ5nkP2T zxewj1we90h_Gf>m4YFf)&Ay$_UBw6YY%l%nwK#}o)7dk-Vtf218zXz?v%mTFQM8@k z9{ik-(j6Vbo&1>%sKZdPBEK&VM2i{EXt9O86noJ5ZedsU(2pwiE%%5P_gb?(v)AIM z*ehoeTg}ZD$d-L7`n><=HvsX3d|*G_^(}x7=#GA@>+WKoxZj!3zA4ZCWau4V4#1Zb z^44E2P#!=Y#>w1WjQtp6Kbz-jhvVpf`YXS)*Z7Zr^LsxzOKYR_sMNCZ&t;>0mOW0Nawa;SHm=Sd*c!WLTk82%z9VMKJ;mnkTi(sq^22P`nyroIPpC6h zw4GbKy~2I89Hbb6*PNY8t(fDUd~D+KjIX_~@Q@uo^=Sj@{oYOAY`^$jtYaHutGVS1 zsJWwTg<3tn^Bvo)N*bGfIz>UWlz z2Xw~H-1mddHK}>C9j3dJJ?V`M)zg7}oq^n)qmmv_JX^0z56#;Y)(<_m7OJqj=GoUd zx*xk@6R1M|aGw1Y%h)6Qfj9c_kb^ayS>0Um&3_lYIJetZ%(JF_*n+#k7<2d8*7>c; z4~#pTbHWVvl|Q4(>A%GnSjWHVxLBaAZr+R^VQ_J)xKi8_H~LLLoDz@V9UBTi#WsA! zIkewC)vZ-2UTND~%*oE#0h?qq_0f^i_W-h|2Xa!36$5+=BQJJE4{Vd%>>*bJzoUPr764(kIZJ7=H9=N;%cKT>x_)LpWBbJO#vK@{`Z*t_sGPD?9aaL zVh?MxUHsvGG@C}VS+av$&E2@a?B2QP#J%wpQ|NiemgUp=F#YD&V#vn-6?-QBKjOmb zFLo41w2NQ$p<=V- zK(^$RtYHs5E9!J_+&b1|xAr0z=M?M7%e@u#`kbq}`}Fq!?g1;Tq4Zk;S-|`9BJ0_! zZvy<~Eb_U&OMFDkpJ(PrWKJi=XFB6c;r}oF%5QFe@%uVH`p7n66M4g86c*EmHtZ)` zayN#Te8c}R9k1e>{{Q|rf4ZsvHdA$D|K*?kht1O*-wF15*P89kzr%jo_s>n5xL-WFacNOFL;*O0gzVShEPamo+c9DtyABgZC%^uXnSn?8|#Y*yJJMg;r z2u%C9)08`rio|n5jNP@INi@2fR6bO9m9RaH-Yeje}s|N zvZg)g(jN0%-3fp9Y8>ruQRh)dr(Cui*BaJIX0tCDG-hslw`S|sk5`W2%yi36*krm# z*#p~9*aBP0&e%@{zAL}}{eQLpze&;h_P^Dy4rw!R#QzMPT#ihJ!bDL>Ih*=pzP zjQXwNoOCkrKmXkRe#M1wXXXInhWJ3&>ASh?qbhY|Y816B0#c`-ph+3^YT7pK|5q}CC?%8%`T;(oH2)Op=C zjECjg`eBhfpzhxrwRlPoWR9ob0o=9xjZWFBA~sJf{b+TvWw-QJtdH^mCEM>kO>bd; zI39k7@nkD@DeA_JvEAP4aQwu4_%E(0@`mdF=YRh2CyH^!ynZLJ-Yo3E`RK`+*^~T} zt;yM7V)iO-sLL1V++4O@9+0oGoBV$}E2Gb3`nG>k*a_w)fz3=h@I)xR^?@WBM_bOZoW5jiJbe6CPHU0w2yoGPD4o_=a zYx6AL=C)S&4+G%=8>0)pri9t%hm-V2=lys8PW(^5_}kYy<-5hDbM4kgJAYJP{oOZ; zXUem6rVQ2HIaxMFo~>;?>$o>Pkq5oONF@wK#eBNn_V?F+ds8;!|7)Bbum^sveHOM9 z=4WqgbKB>ztJ-+&!-mxqIl*}H!MA;W$+J8UuUNo7jG^SVbG^%Nc6?qjZez?Pzhp?J z`<#P1KWy(E?|$Y+$zI)^&K$s8ck~;8-{;^4{ka>eh=cr2{iET2=k;XP@Pj?w4H_gWXLrhOZoeKFa~vM}DBLCY^|4Xwl#JZC@)khUf60qK^&H+Zki%UY~LC#@`yjc>kS| zbp5w~@4xQ0{;)nfxg?zQ+FPX}E(l_&j zVih|Phjy;8A8o(g)A_`HHm77O>TEPR@t$49x9xcGy|AHSliB&5Eq9MCn69;T99w>i@@Kidem;+{cvMU%PK3*?YY(x;oJor_GY%EAPTKok3{w|B z+SmHd;{C@a{1(h-=~bJ}7{ilH*tI(OsrwE~PWt$-ezH=GhyUcJSd-q(>7MQZSAHf3 zSTZb@ikS+TdN*!aUgP@2^^HwSR@PBJa{#h&cUVIXY~LC9D@q>XgFAmT+;?91z)#7U zKC@9Dg zd;Z0a=+y64VLx8yK+U(NJ+$rHe*WFQGw5?R=bYz1>*Ykzb3FN2$KA;;Tlv-NTYWY# zWu6Yuu-f?4WqOnYDAviQqA;g9(Wz&B6}ncp-)VQoc5ZOl?wqsFt$*=6>K7kbX4mTc zM|?t<->CNd|Dsumj{S3>U1C0ixbvC#U*jZdc_ItVhJkN zL}#5%&G=QEWn7>?%vwP;bLU+DMoAKDYnyxxaxb1`Q+q{>P}>#@H3R(ITQVU zv>d=&n9RvJAEq09+G68(zWe>{Lwu1Q*qQsnR`Mi&*c<-CcUVn+Fny^y9`)?ZT=&qnUOt^)IOkuBh$hkYC?6Y?t`|RD8 ze(6)u4zJbeT3b;s-qpqvpK*oU@WFr?GsA=#fA{!`t$XejV;^%?oBYM&2j9h`PfWI! zvEFvY?x^{4fbgW;02N!x4<ZaMJPuG|ZfN#aV~VVj%w$ z`(_TnPQ!k-3e)l0|6IR)t*_o0(Q?1pSAS#fH+7rd(s7tLWnF#Bv-;FQ^~O%xd!GK% z8Tq@b`{36<_q(gtN1xTv&YtZ|U902S_oe$~XD`ZS59E;jqvSOU%r6%dXQuzaSI4UNF6R=^& zK)AnTn2hUBX2r;Otb;d|1{s;`E696eNgrk zkGqNo#f##ETp&9&o=uzQp3bQFt_%OgCOW6*bR30k#j|3ZvFd0%^);?tY<TI2Fw$;xw zXxG2bnM@{KJYgMOvB$pM_syRDiaW6IshnGLt(S~CUw7%QCv6-($KGlux4A}jbJfYO zK9rAjHo8&QAH~lee)-paYv0!%&5vjD>!a`Ftv$=Mh5DyH^v(7o7a&veykxtvZ}}1( zgoC@j`uG+f<7;%azrQWqpws*wRrqZFi+XS7TpqMjhF>3aS zW91Uw4C0Y}#3Fbt4*GZBC_Rw_IsL{z{pmX$ulJO7#9{GS@eM)zA%`;uAUCqI9{f?a zhJJQ#FO+YRA?&eF?``Y5OPGPea`LN8o?_!k;fcGOqi#(y?;8Lek*)W?`-J;_18_gO zrHhY<|Kv}X?6<;pdk@e9zn~ZLcTe^KTgehOhyUSwm`*2j5dO!@MzVX@olW+Z*H;Nk ztz|wNqo>w1j#n;Ve%~SX`Pkt)qjU3%u)lM#7x!Uz^eX1Ew`79)tx?X)*5yiM!!P6w z)+Gz}!5-XIVH0RRrEVPG9oAcqee-W;Bx~n!wrzXM9^HS&2KQo{y&uAV{LN#Rif_jJ z#+uG7&$dVUj_On3JRje8J#v8Ezj%s;ld=pkM-iksr7!prQ;bqmO+=|KY#;!K2+8#@J677=BIap52-J;5)sE zdw#?Bd%kz17;20R!o7Ldc|U97>Dg~^;>5sq3-S}R3 z!8iFXKjqWnV7~##>-`R(k3aKwSR{Uk8~jm$mEwhc_%o`^*iu}wPq8VguYyl$E$i9C zyPn=#ZGg!y{itB&7Vu!J7q3O+a^2S~5o1EpW``$+gN zw<1sS6<4+`!?w$&z5V$Hz0(bwo8O?auQ0zH03|n=OfO_wiKpN2@sVrqc)uA`j8(@^ zALsWT7*EIcDF=Z6*0ZN^g{?Tdx-)bxRH1uzOow#I?!tUB`0n5RCp&ifJ0$)fe$IRV zZkwy9=T9gbN5ghhT&Rc}>N|e$@6}fDIk)?f5vss@@j|`#f7tIHY}-6*%0uK6eS_3T zkNFwBrf;;;cW&b^%8HA%_Zf}Xw`j4{I{37A{KT_LSQ}q)*qAKf)t*#d`K^9B!T1gipUx4iR3F9~=?)!hd#2Z)7zwyEWQ-Qhc>L zV`plw`klG>Uf&&0vT_b}JkRvd{N_X_|E$};ImxSix{L8ytl7NgM%yoHEhXJ&XY5L0 zv%bOXI^NU%uQvU#f4+n#pY>*I$2mgG(A&Qys z13ueZ@lD+Kg>nFOcShX}?VMyOmmu^0KE-(j4< z31pu9=^)(Sv2(>wvL^E|$$9bXhyU)TJ@WwPAxmQ)B?oYRzYo%D_DdHEn||%v|HhPs zrQ`=c!*vw?!s`?NrQ_?I`sLT= zwFbRf%ewqTp1{WBzw&_nR$BJSM)}6y`M3XL(?9(4ulIlZ<*PsY`jHdhQP`>+ncY@u zi+8?vvGL^2cln`xiyh9QIH$sH-DCdyKk_oR?+N=?F^6BUNhLdV4n9YB{k=^wBc1ns z-?`NL4p5wA7sbgP8&{0fe!P)Z+x_;KSSf~HJjK-3(iWGEqqDyleex8?i~qI55H#E{ z7T-ymhnn*YFZ4G)*O+UopZHU|ea^XaPWT*-qxk8B5B4|wVlBDG*SwROTi@LGwffyT z@z;+|Ii#1#(>RL1{nE$eRj)r@ai}?{JK$jp+U~8dG4xzR-#l~m+0V}E&*rkx-Ci=@ z{&3kXne&HiI-e~^&Ug4Ne1f^*Z*PBoCl}z0;Z}IVcV`YzPA^UwlLzqe;z4T{GtlkF zYkx6?FT!FmrXrT{|K9Dr>*2g2mKD#?upghgxK~`WKU;JUZ(ny(?5PxQb`G%q2EaYT zRPjm-7nht>31`?1Sz6m3&c5F*D+W8ag5S3WGFHTDSS+rG`{KU3J!dHokQ?A9S27h> zeWxvkh7I9A>~RNo4gb40nr^M-?jHsJ$ymNh?%6c?XY1-@o?ghE&dDiT^q!vhAMTPF z{3rju*W*+4hwJKWB7A>F+05jlLu<9RbI=hT%O}c5=+c>;!(Mc1o;GS6HOJY_XAADf z4&9ke%LDS0Klqcs+&KZi@ZWXIUr>Hh?3FWaWda@>4HAWiRA&w+Fg4K zuvPB_vQYXvfSntx`_qki&R@K#?z^0O5TeAHp?rUcUsM5K23|w)sH@*J)ijR+& z3jbFTYm2X_HXhXc*J$(N7w?rb_FF@#KR$gESJDkW{f*DL?AzZM`tx0{EjF?V@tq!EVDI3&^USr><3X#(^NdbDXYMZOT&Mo_(Vl&C{q#{EzWScc z3-8&0dEL7;CY}4X-d$h!nLKQ8+wt0moo)NQasc&*jbC}d^q1);uwMxe{QV~U_b!xk z>xYTz;Z`{S|Lx!Y^K0MuwofmA7OUh3aLzpQ#Rp|#zxc7s@?U4nADus&PLAF*VwJax z7$%lgzsm#U58e!7qBDp`&WMJMGY1ggoYU{+eFrH1hMjo)J+?DDD}QrV@*+p$_MP7V z^FQ@&z{48@SmN*3wNx*Ty^*v-oj8N{10Qj{b99sIF2UYiTm`D?Bg|l z^3!?i(^((cUHI!AG&7xWtFW5a$t7 z^25$e_DZ@Elh~Hh8|I8-au}%OUau|>@9ZpE)*}t@GZl&w{fzDS6k+*jtAD5voXQ@=_Tmwa9r+JCVq0vE{NQ48REL}Wdp?*8 zKgktllWV%br!>aSm5Ke~{KV=xP9N#SI{4%kbiKa;TzU=v>DvCz)pvhqfcfU5?G^U- z{&x@evc9$1X!tA_;>Yx!eR}W94V3Jajq-*3f=%<^)`?nAK5sqtL%!_V*_3UU>n`pi z7Y+Nf?`)fnvO{Z#J;fqE?QG@E&LnntW6qc+=B0mh;yha@K1TQWh4b~H>?;1^Y`Ct! zIE+_+rGE76V~^IIJnH&p>@U`ZTXSsITdVo;hi8+TcjDR{Z!CJpKlg6#>}yUrz{dO) zhiiw4@y#`=xBsNo+iUWwi}fc@ym$1DxBR3rwEA2l-Guf0W{#^j7me?3t#jUM?bBvz zv$5=S((FEez{ejZ?yKv=!Di#;LhdSVj^tS-erx60b(hi zHcyPO{){DJh&)7$QJhQcac;4ljnlJl`r-mA9-!itzj3;YPu7KT;Xcft#aR_`319K9 z902}%`-!XWUM%$XSH}m7$e#Y3+n(fUY|C<;lW(e<)8AM)H+hqZ7%zsCRhSc=i{Ip2 z9)OZ1KJpGr^urQowT^qiA9ptf|CQeV_6`U1iQ#nf5&pNoAuU<63o>ULd^5Y(r;V}; zIw7;L2KK9y7ui=%{5L+||1j78r^3YbvyKN&(~mrCj?WwbpY@fE|I1fUXW6*9&Q}g% zJvM3%pG2*1+?vkKUV8WY?-HBi?EZfUjjR9e-}s%)1E2d1iv5uf$~G14`tTZ4;4{17 zzt8MMUclb^mPO9m#e+@7hjm{4#RZf-qT-Evdi(Pm`^uf2&3AuwajSTyUaYH+?q8IJ z)$C)(Nn^9U>L>n-vE~|pcs_@=hCJYI-*e6Q&;HtTyt_Ac zN89rpoA&csecI!Uf$TRwQSWbJ!hU_~c;wQ)r{!NTjIYZB_P^m+I0m!z6%&f7<@jQh z*p_l@CTCKtC0@7}3cq11JS;y^FAq>xoE=t( zLE*n|<1iEU!&UfAX31OI9&!M_qF>$FjD`R6P38RVA+I3|XBW$z5mm_Z@jklZWU;dN zN%rQzm$1Y<^XZ_srf&r1`VQbO?pJXychrUl&tm$Q)-PA2hcKSp<$`E9P;S5uU>UiE zwPdGgPwe*_NpF0z4WD7DLY5QH@9O5oPZ#L{FZ%)h9PFhaITTzey-}&@XSm_m&;VBg21rXK}$?HmJDc zwB>wPT*247-}ipLWj#LQ`wm^sLf4gI8@qT~F3jKKtIl4+ef5f1+n9PhFk5}n;&QlN zJ39Ntcm3rCC+_!#KXE|2TmiM_9Z$G(NAaKiVbkmn183iR>vwzH&3%jS+4$_gJA31k zs?Xv)cjKM2`%j)^e>bn54~@#o{xLSX2Lw>#GhQ?G2OQC@KcPR&N}%I$VRz zVj_GKGsHsk!e?;_58jyv%p5=+pE>Z~8sWdW;*-AO5B$d0`S_$lcFr!Bzytfq&-YYy z|5m|WQ2ov;?up}Kclf_!=fd-1XmXB*6)*tim=80|hYjThsP%ozD3=lM-K9ICcuu{1 zscrT`58*$%C2PKsJ*(@dpN;=ZmgGx*?%H>i@KPQC8^ddqEW>Af?1#Mj1`vhq>PmXV zZ!WtG`%&xavyMGmzi$BAbZc+;Z#{X#TtnS_=W!Rd8AikP@PF2=AMTe2I3quX`{pU|N5uv>qHesnK56+t7!bw7*5?|nt-p7A zm^10bpV<%R8mnKs{%B+Wzo@&~EBfAj<44P*&UGfw=d63q*RHgl_9@rSamTA~&W#66 z$M2yJ+|SOJjc5Pax_=*-4@L8tnG-b67%YRw{T{$a!`N~F{w=QN*R!rqEWp$I;EW^Q z>|(k&fGWN9#dZCB9Tm@=t22m?VkMjt5Anr=nuAxdzqb`$F*W>0wav#D{<|y86d%>C zM>h7yBQBuMYhQN9N5w1{Z_GCUZyHpQ2N;td?A&1GRK;Mp?JnZy#)0sE(Qs?Z7QeV{ z4(j~o=?}-q#~gj`LI&<4PFF|W;nd5Q+Ai*s^|sYz^K`Le_GS0;I~e)GG!RBDtxwPR@zSN@ zev0!~{C^C=b8r9N|Jva{etARq59ggdS!q}7^_o3613Z`8@OLtwwwm0nQ{3S9>~Lbg zIAbkwr@!ea2jF+&7T+m;P1<e*kkadWDp zwZ-@FzL+0QpeKgm>FsZw>T_;5f^IDD_xI~J@^gH))x-QrPaf@wZ?k^K`%U`X?VHSh zZSIuY`CG!Xd7USUuX^;Hn|zGFmxq4i&vvx$`t?ma&5n0pIl!`KzEDiePbTKy^_c_n zdVBXbxG*)J&6iQWt?>2Q6SurU#Rzj}EP=Vc4e)yy*`B?l^@;g?pGURfme?g0ijCgu z)-u21tnF`^ z{PUSz@N4IDxAJ{`_9zw+1+%H~D{I70|?q8Gx_t}eB z`LLU-e%DuwMcGyu-h00O=4w~swNHKGMDabG*Om{kTYce3{V034hPu7cO8k@V9N?>; zzVmne$_L`nSO4sThjXs>BPVEVto0uJv|f9>McwHwp4Y}-+v}UIZQr>@b#(4qf9KRb z`x(_o}du%W}jBZT<>grLCosA2_D$*8$k8G0rs-#X^-ITBp&xi}j4!Y^m``VDV{Em%%)bHD2mix#cT{Ifbj&W;9=vxJ-vsbz+p~W4 zJDcFQ{MUWmi{B{u|BMZELH5pWoc%d>-^h%I|ERor=Kw1PJ@9?J|Bcm;7Qe)_>b-l4 zhtX^XJqw;~Ka0X}?XX<@H8$gLZGCgRw)Lx{Gv?2FF+Oaljl%!R?4S8U^WH;$2Iohv zV19Up!vAuB-5&TK-`umc=Eesg{Noq6`p`Z?#lV<%s_tN&bA zn~lU*J=(aoa@uEh4PUCG`9avvKdSSc@&J6=Vyq$;=Vx*N{wfDh)ZsK=hMW93Uyq7i z{9V~^&=n)Zio3r9&}YnAV!VCzsl!gOz?d_OdFtV#Z?)mS^O&QEZLqL7?i}Xy%^#Hu zc${B(*Ul-o z%r4y>=CikQ06x~4tYO{W?r=W**M|?45AX&0W#{EKsQcrQLzEY2JIiSg*5I?w;Joro z_T{{aakf>d-S-RM!}tSR4Ey0ezekmFX+Ec%n6HnYZMyugn8qH;1H`oAU-+-hK5Cy- zTs0o~W58UR}K7yYA(`M+}3VTMTuN`Sy2S_f+uI7RSZf z#LP1_>$Y?Oosd*yWRHh{lAL$f8Ph-=fp^|VuMP# zK)4wu!@zQ=asZfaZWym#Is53L{2~1Bzwg8D*qdU$b;Ew=F;~AnXLSBBpTDsoh0gdy zXSYsoeAF5f*I~HgZsx#!I(Bw%e*DJCKp*`7@qhcj`?m!B_Bw5Xzp^noGM}!_R-F&! z=h5Opw&ywwB-ZFUf}$N`FydGEtCU9>*t$04z4&k>5P-JUOX+P7LO+t zhvfj}1lrH?f-pOZSL{bCVg88;^+)gc`xel;wXGHIqO;!E?3=m3$uG8@Q_0mL4$1{U3=EdD~!hZ7uI`9oZZp(II6MTeyiaL33nO|>jee}&% z@R0G$0mwBwgOzuMJ>m=dt)*@qw#NqN``;RLy!CpWLtp2Ux3Kr_SZ*pGP>jhJoE6r? zY*=j#IY7VrtM|77#@#y|v&C`<>yQDO4E)<4`2pW*4$6ngm7gf?pbhKsD(p;AXK&eD zb(H<_ak)Kz-@dZWWUTq(ksM(DO&}jEAK3L3A9~B&;eI(lv5!p40mR7a`r$V^ZK`-1 z&S!sNeK8p=H*F4j7vtkS$BO;YiTSf`9v-Fs+LMN@`er?z`ZoRQ`v2RzzVXBH$GlaK zXVN)8UVZ9)8_=F}_Sjte+E0I_HEKs&v-U}6?s1O2w>@S1Y|b4|eNl7o>h+;YHj>TE z{y7$}zPoQvY&py?Zm{ib-z!GuEBQmd!gu&#SjYFu&-uDMyx#-FU$};cpT@_}%@+fT z19QF6dx38i?z;WO&C`$ASU8u1Bk_8Bm6JE z8}BZtd-%6Vatv!L_B192lbO;UVZFBhuQm25K8R1^nmKUZn(pjQ{tY0x>5~(XhkeBU zFh9K4R^R!+!U-|onc+WvxTLRlr8|;yvT+ZkyP;&~EaK{^gD<_k--1j2d@Eb$5BVDG zmjh(uWDE0P@LdkTMv`TiO@43?WjFrb4~6e!Z!NT<|Kz0ybM(XH{@aY~&N=kimtN-? zv|+!(hS)J1f;H;wjSkHTtKqu$x*R~!FDI~;y~+(v{HJT{$PZwDxR1{oiZ$d3(=PZl znYs(xV^7+Z{6Fk>UPT-C}8 z$?Ti;*KDq_>=uPX#l>yQSANSE%8~Prd<0G@`6l1nKDhj`-{{~L9+)8x8OJYv_qZNc4n zX8DO&s9#(+$Jy;^-DDU3ySp>`o=?Z@&bK$b-Z#!5uEBe<^LxPl4zT))o6cVjqpraG zzH7jV@&WNy39}~the6(&_^nBQ?j$C=CrZE0{Sn{)?7;6-VhsDI2mV6##b5uwH`@ zo44B+ZC`!WpV5MP11^gX zO85_l&bR_2=Qn`%6C0e}9;ovu&S8D=2WIwWcMjuXje;jW@k-1N|DDPC@QaVetYba6 ziBHjI4YCt&$ffnkgsj;*J@QH8au{cKFESxB#oft9v5$S>xcV*&@AZl66Z_TS3H*l@ z?mh9}cMTY14R>;8cYyclVAIu3H>VChLYvL;ZSj?F6nmrapAP7W4*CW_X7FudFqxh? z0G^5EazC>4t+IzpN7yjFuE^5PlzQfkpx8k1gDSHe5vk^EAv%`Lr z?Z{)R@Bfb1+K-)29kUVp!+&$!9o3dUocV&ee1=TTi{~&g89s_MNgxj?p{b=A1O%Ik)}0Mn8T;70q4}kW--iL0A7j-3VyLd z926H|;*3Mp?P;D^$M3CYZ*4JApO_f6ueD*J0w2Z2@Xc6pQ%q6tiFI#g8 zlVN84+V+O+OdK=#(BPiH6pat~BKAjT&1k4D)DIrEwPpg64UZvg!Uz}DHOyRymN_%Lqf z0c3mT0Lgm3@8SO}bTsk5?*;YIi**$B@Lx{gEcS%2=@@lR{=u&KD?9T&$vxOpc4wY% z{QYLH?l=FL1E`1R;XhkA_1#)9-`RTq@0{d@-+Ve?WA4SL`0Tc=%h$EpJd9V|XWwb{ z@ks@b_(DI$7yfRZG1xB$h!6gg1Kg(D{w6@(I_Lw-!+vz(`tHB*y&Rr=*-P?B_$ z%rBnS&fcOkCTD|TI3D%d;yIq?oH$|ZT;t@qYlj^(4+x*a+c36%G@PGUSs%JFe#Nxr z&b40jEuKBLsCDOh^*8r!e4c6Y&HlT3`$W&R@8%>wW9pO6dSh?(H6A}Y_00zK)j!+W zhc)Vt;#X&j=(Cc2ZW~_qtzDnFY@N@P=c-rq@g=^)H~ZWEe3vhV`FOOA<-ai4TK3q! zxcpoU!=p^>7bC)X3rz~3oZ8@7tWigtO3b;Ce7 zF6M{9D1LZrEMD4UlOmA|Clus<8; zU$7r0WdCwbZS$?;9O1n4!ft;H&{@&m_OI#O-hC@D#~RM|%r>0adTflXl>_h*e$S7J z1J-8$^rqlplW5-njH{!~liSR{o8d?Fsfagz2jZLR;)M8QY}*9fe^!>guo=F(^Mb`^ z&a|cKcxD`)f8R$BVm(@XR-f^{`s~+d-pm6UuYdkKf$CB7!yR#^J!YSJWn=2{74fM) zG~5jH>(l?3V_xN&{}{X4&Bxc8*1F3P_S`iOt=_)qS+5W6-u1O_b6T&p66Y|AgjA-;}>Kk~bBd~?Jlz7J;3yz7+>6tlC8S4pw8yJ&cqk#n-18ffAeoG z^CgUtX?~YKc88he2B>e~WR2DzA6=-^r+V1${ZEH< z2IJYDam5<@U46a(>8p15&!%A)8xup-!zp&Dzx<)IIA8c*K47nj{dk_~j%_#x{^r}` z8NYryV59EO-uPd!p`25jy(#XuF?z)n7*gpHi+34hHuXD|KcmI_KI7|F@=cKKbUvrF|_4pf$(k)(k&5qKsetm2NWt;J!jqkCAC8zC8UUjyZ4QJc1y}#+_H}Zgd zg3s`ad`E1AUwkc}%WwH5oaeuMtoN}#zQ(7Gi39w0$B~6O{8!sL=6EOcW_T^87!!A# z$r{eZzZG#$TYMA;6nB`^TsYeQC!yG+i0@JL3QWbXIA?GADBaj&$B!$w(k5?bQT)w> zT&I{o_H2+(x`Vse2QIX4=h6==6gX2Z(Az)k4@2Y+a7DX+S03)1|K@Mwzql?3SajzA zt1buA_m&>MAn|1TL8hxjX- zCLgh4`|E}8v%X{C<;V3GJH!8|{+SDC7kl-qi|K5wGTYUQ^LX^l+(5nY*&lDXu08AR zH~Ye#iAl2#A7}fn9?!L(4`C(o=;n>**uHoj@Me1I?bdvm@eUW$d~05G#} zW_(M`;d^|J@A0Ml5{BoOe32i9``Y<&ID@x-xFe>*F|p#Uc+xmt>%jbc+B{)SNI?H+fT7B`IcK5kH;B*@Z+y{%p_}ZfgboJ zpYRQUe4U|h#pM7|ak@O<1^!>}e&>`gxD!5Yv^&Ba-=D?SolC4(zvJ=J;nYbwrN89- zQ7O5z>3pSl%qQyecL3t8+?O7++ljm0yfX&~)9HqMcP_BL+t87|#*Iz+(*Yj1zjL>x zJJ?QF_{@dL>*aq)?w}AcZj%{au?xF1t{J@@a6L0(e1~BZ`Z(VtX zvG?fOS@4p}d-(D2Rr_okUbe^9^F#j0_hw9Rc0N(QgV%U`(@q;h&7pH~OMFvD?LjWv z)>kf0E_nEDaUrbV^mOPAzuEPZ};ERC}xnESV(65 z4zMx*^5g%LT%k_@Cjv zwc~k4oBPNEuJ`;ie*Mi+-#B>X31Rabe{G${UOVUASbMhLTqk*^tJ-&T&O7Vzr#o$H z(uWuX*V8vUWK(#ogD+cq!MElat5~P{9kqu3)d~Z|!QPJ-`jq($PPl*e7 z)Q#~$R4fpiChp_GD>s<)@>~5d3wDW7V#66PUTa&s+{8Bv{_D(g0Qckb#Y$%pA1ioa zy!}yY88ZjfE@n8d_${V8tF^*>yz~~{CtErdkE}t?`*+B{wc^YwbV0xL?EizoZ_sRA z&O(0V;x_<$I^SIm0I&N_5s&kk2k*@>AB97T@BZ%U4&pDJ$ous5%|AWCf!AdJk;dqN zO^`QV3IFLpyh7o>I6zmhfK8J@b_t{5A{&L5T_P0qoVr zuh0C~azJ)!y-%?Pm~U-`EZL$y_E@~&Z!-@lUKpnrK4O0HX7aONbNO%U&AM3EcT3~! zg8$A!ezToVvmH6Wv$p=?>=}oP`}(WH1nuJgtm`vgG3Qwc+b71v+xvdD+51^e3_QnQ zYd5#=+1m9r?`(^A#`IT@H+s&g|1IjSZ}F5{OlnSYLemeuoO(EA-Q2lvYqd_)daa3; zGnNnZ*0!*k}A`mDqL)U(5Q@n^HyFZ&ilwx2DZ;S+w(J9B70k{|IcZ`k~i zAM!zkUn+R>$9&kDFvb|4*U#tk`{Kc;#1XvKvp4MZrk1-aVxM?uUvD|_46hs}{14;B z2BrS+AFUX7Co$TYt+!>pWSCshasae-$k>_s|C`A+;XZr#{U83t&b|Kd&%fSsAq)5s z{+D;yTk&?O-Z$skc;iQV_ghPRE#A_F*qxr}Rb8LIQ6N)y{#1Q@$^7!f{ERQr7oSNV zd`%9(KVSm;VLRmjFge_Y$-BLB0#q(gfwScX^~KZt=2{0oUCABf3Gxi%+Q#rG6Z^gU zoe%cA17FS_!+v%r=Y;EQAFjiHW!un&{npJt@a7Nr)#U(e5)V81raE>Pzd-5Yv$c|iG%^zV1p6z$$t@->6 z55Euh;hVfa+*kKq6h3`wd=b~J%dZu-5C6qK?`gO$hKXOwnFEB=_{#gkeZHT}+(U6z zw0X&MV!n7{9_k$Ihdsc2McuzU`-4CE%U$GD_9s*8!*eo%3zO>i-y)!+{(D35_6-34 zeE-9KYxXyP@&Gzg$^q2LklyG@O#W0oeChmjmM)6%C_j@A{PM5;*5ezEdf$QBHjH4u z;dZuEpMFIfeouPx#HU|=K*!3&e*ND6{2?FNZ~0|YFrDwhes+}4vqLuI`-S{P9PoDm ze3`A<7xuFqrFXygJ3jVnKAYWsvi2e~IYBuDIXDMD{~Ue03qSY&r|Iu*6}Cwh#(X1@ z2l%$dChem*hZxjvR5Pxy*9u+DxU_SDb$@Y9(RK$sY+bxCR}3L9GGr5dOWfGMV!)(3 zz8-zXi?v}zak~EEeK|lh{)y+4*LXM*rr@nV8qZ11XKB8na%jA7l$A8*F>#;jyjkBHXhi&n9 zcGtH`^R`VcK65MCaMXJ0VH-?hJNno>+xPD03;7No;Vb(2hc>>(QSkxI@3x=KTw&Gu zuW|m%U#)rKKL7U)_|t#=tD9dIE@Wl6i*l(V-#a22|SJF+C4&BRH^nHpBJ_0YDgo|Q4jPD&y$NbhCg^pmW(m0)_ zC-$lIdq9+3RX1Kv5H&vMdfU^r-v`vo3+P5JpiLLO`-=l%zjNy2<7{=`X<@${hwZtG zT$qi*Z~KS;upf@I!M@qzSMG8FvSS<8;m_tem;11r_vjxl|7N5A`M1Bb^HF&KJN5ss zDL>5*;C$Z$%2Dl8(bt$P@y zLfAOhs2**NuvxpYXzPSy&VY~IH5Turtu?87W%5>^=Q!u#sc+U>FIgs^WRk2Wtv=^A zfA+OTdasRUC+N%r@McHFB7Nj#ZFRO7&ah8){;FP^4XYOqyb<7IIL`<8Q9iEuOJ?ol-=5+e^Y1;e&ihN!dd!lKwEz~BO7~W z6YPtx^KYG2L0_3jTc|#j=%Ms zBODLw;z#Ei>iXIXHD{Lh_RTr74(Ap3AV)?0*|&hs-oBHnSK4Ea>uWrE*VovjQ%2S4 zt$MV+DMw?;G8#Wh_qD5|{CL_$WBim|vC(jiz2(2^JlH zMx77LT$zvLLtI4mC6 zU#xUa=PTBe7vCf&vT$#H&$q?Ia)A2ulNYKqURzusOZ@g1`;s#qkgvVOP~TMShu^me zZ~e#nX2~S1h5>LMCY)6KoBwv-96b8N{c?lk3io^W!+yMCS7Y1p zqI^J+3$PnDLk9V$G5zcXPUqh!n-v54_UHYt4eQygA{JPWJj!9k6K|IN-dJmP2J83D zVCT8=fz{W!oCz=L&Wcz^kG*yHsy11OALPe(*#jLY`ow#(P{eC;BYXNu5BkCq_NJIi zZ)ol6`r(9FHSwap6SMTk=N#2rN4x#+=4L<9=A*OT8qwB@)<56c#u}egojsxMO?LiP zJKrK#W9N4Od$dmbopkO$$6lNF+L$$xO*EXZ{T4lCiGQw9oh&NZMK;6cx)1weSLDW4 z`88Y3E@6{3lWlqIe)BK8GLPSyOYVFlKgb8zeg2!Dlz00juoeT=D`X%s1wI)^=Y0>s)-6tjGxNif6?y@ta>)!g#WA z|NI>#OMJZtV59l?@D~^8wwP%Sz4#tsf7H3iPy7m}$w7ht^c# zuipj8l01|h7ndBxMsn-zMb62Ryqt~v)XCW$$^IAVe{{D0J@sMIE&c8mf2i! z0*^j1E$q(*VSRdJ57j5d!;i!U^Vq)iD&+xv6L6j_%VjfUVeTVNtUdUpl8w1vxjnm; zpR!Zm`-%r_onQMKNj&;d^TOpJVFXJDziVw&R_8sV{j=I{9Y*Ip^fl&WFSCY=X^Liw%i6Y>Ir`O+S9V zn!OqilQw28SzDi6jgc{4l>LYK;eCEkTTGaKwEgVLtNAvc3e)@z8vlhkVLqSrJ0Jh$ z=X{xOYvbkre7tV}y;<>Dhp*!g%TW79XHL-B#Rxv_{(Mzjba(k7`&Qgr**3R$$^*>f z+uGz@zjef8#ki8LS`&WYv!=DJMaE%+ySQ`T%e$rgF!(MhCdiiX) zZg1E-WcT8NepH`2N`4Anz90v9kqaz)7rQz`G0fS-E55)tEBZTkbv{fl#nvbt zDdZ!r(gzu!J6125kQcqti&#xg^wQrAsNa?&7ob~fS|3#=j@1{PxHjiBFH8)RI&<@* z8rkQy*YEOcv~~sY`a+d)X(3Xskc8_v{!Z~H(*FFVzH#wRJcIe(IsBC0@^?9alK*;pD&e765SGEG$!BeA z*;{c&=U2o4=N50onf%&a`9C}A8$dCPoP7^aHqWv*af=Nq`0%KQ`NoT}^h5shn~GS# ze#3q1dT%?Ab2(!%i=5o4zvJ&)eKK%=W#$B8VeRBp+(h+RlT2X@THM|Aih0gJw)P@Z zI-w)|#mnT$CO!u{zT`RdM1Q@-=vusi`|j`m#|Db)r9e$`g1H9$;ohAR@F=NFF=WxEwv*wt`@4pRQxL2`6 zJ`BrXzi$!FrKpQjWavz6sKQ?rcF*R*{p_7x>(4LPu9#8W$WEKN)7jKwC_Z4d@+TqzrYLR1_G!&Y@zrjPX#IDX9FO_#=zi>+T*7{_TQQbw zr!T;`)@iRvyRW`k*X~T6f8JLe{~R;tu3z6N|KvqS#uf5QXWHuc;+<=3{bvKmymB|^ zVN2%maWc{toBG?+DOWuCYVjpMB;)EY@P6S_SjBJh3wZLtkOTAa!EPAL|M+hB&Oa-B z6uyN2+HwOv9$w|w;z6+ip6R!4xDVIDeY9MKKYOz|lYi69pM7uV@8XsCOeSQ<9>^WG zi(~#K&wTNgFXLr<#ba%SjOmg-$ew=mhxvXJC_|SKRJXQ*hh4!9#oWFd z!vK5P!(R4RiVL;Hh33fZ2#Moz4geCFS!f(ln20nMcX;}mVb9^4qIY(Y>d6K zb=0>2Hmjd+iw7vbm;V+siXSjve{Tvg#ya`InG1+%VnW{q*ne2>JnH_YVdewsyMOtO zvrp{j7j!mbD7})2Sc{Siy^GCaj6S-^hTzSe4(St5c3?i;iZ}Y{beB~RU(jqK9Md+h zx#nlH>a&d}ezbxo9Mz{@d(Lm&XzQ~JecjXf-G^V05BmxG`N5X=(nYe(#&%w{LXMCy&ZGOm5$i~osuVeO;_17*|S;p3-kLsxnhPh_Ra`T^*O6pgs=Ef4iI(ME&C;d z#LY?=Z=4?YUe{TiL%wA1;&6EuTAsDfy?C+{^xMRbFJZ0TWAsng^ht-_ z{p_H8fUm(ZxgHx(`kN&7qs=D5Ki>n`R^J57XJ3lg=UY?0%Px0pST^Sz%KmQ+EX?=s zLgW4K$ADEA6Ds8h&Q-~Gy9ZxoH||OviZ);MowYXz+Y$TycX#?Nj-AOBw?7Sk zp&PNC9*nbdvWNTD=ikuc4$Sx4f_1EUzGLhquAt80 z9>oZ;$N9n)apNsLv5oTNw|HM0&-aQ^e2w3csk_Y_VEe;}`L)?Fn-nX=lwt*1P7vmc zEBK7Td-hw5@okL%_!eNzzBQH$*u%Z~Y2OC;1;5dk&piBQig7PrL^G7>McHB@fk8v&hd3|YElgY>Jg5%w_gH7p6AC+@Vyq#IKPR%Juklo)4? ziRtm!gDq-1&sx<21M;r;&afv(^3jlq?2 zXp|4a3z)3V$M{_s&u5M2hqIsGnv+lCX)XR}Eqf}}%Li&3)W$9!Dh)mtW5sS>5Sw^-aF1+a;KO6`)l;m zJH#FE?K>_?HWj+9*n@o1Uva5rUPKqf>FG zZ?XJZT+rt83cG;4Fc|*x-+cLw8du5-P#Er;k|GyC`|mr3?e^$>AFnpMa|Uao*6R#W z=TLWkF#@fav+FBvi6d|6i`~g-`Ndnj?;U4X?1$|r#V)pGOxbatO%A(cf8o3sQz`C< zFXD!{Qk+4>pz;M{zEPSZpN0L##Glr)&-|T$PwjJDIL|j9adP$X8)xRr==SA{SG+8r z=Tno{y^9N|`xmpwr}4fO(3e6NN^SNzF)!>2YrG$`jryjoifPKmt6?kQe3*#mt{yJ3 zt8i63WP25H(iyYE$v5xh&U}!~Wdm@ZZs<}TKo`dF;3c0a6F6zFS@4pR^VrWj&l%^r zl3TLSzRP!#*GZ>LtCPFZHxd1}7{Brd=XD1V+UQVEW;(qbmy4G(G_Ni!x3F7UJV~e_zGwgW1+IYmz*L3AAVLo0q@EY$o8MC&+ zmd+yPuuD`t=#5{jC?^m{iYMw7u_b(0w}#jxeuyjm8v^SYGY?gYcYK#m_Z@Fz)8)VA z)@T@SoS$sIQm2-PYg3Q@!b0Cq}&8nX`|t@`uUD^AN>j&*fDj*bTWbc^h5olUH(Z zf8)mBy))eP;dh29pXtMQb@Ivg(E0r!*_lU1-toQ-gzxkIo%N(_z+#*r)Mld-3_=1bvaE zebQ5T3b`7m1A0PXHCi8i&?OrFqhU3^`sX}#wm^sEglgBP{pefg(=T?JSMHGwwSKmN z$GN)?`b-udtzWF*r{WfzhQnbn8wg{K!SrlKT3>FET7P4t^T`@ zb3Z(aIdHqZ&8gJC?Q`)syYEqK*xvfZ9{1@^=BkTL&itA!yO(w3$8Y5dKTlnYIbuQ> z0JpV^G2%z@rFerDSBf+Ku8=?YO+Y;HRw-s#OT5t*bMWXBU$*ZoKk=IdUnXNd&i47j z_N5Ew^PzlN{>)!@S$^g>4}J0Rv+{w>d+}S-+QklgRc2m*N7)z#$5x4tJuCEhVvN2D z9y$&OVPSY!4k^@zFr#zh1 zS1*0>3uoM>JPtnd{7X3?dD>R=BAB!!P=?s&(594^8@&q zFUUXO1@H6YdH&?;Q{sMgwD;Q=^2hi7Zf3DW{4eLfIwxQo;`UJ4{@q;$TFxJTrT`Q+kiA_tcmB*Fpl08l$yEP+! zFIf*bPSU2j)`t3gX1o~}T4$ciXdbIZ0fOBSgIc+R{rW&x?Wb(I75)~)C8rAIca zjcfg6!^W$(!l+TjLNFH*M zr#U9KwP#HkvpB#w>S^Cxe&-wpY#Be|95a{3m1CAao`3xDHU-tP|iCcX?8RiC}I zXX7LBDeRp6I`e@s8+2`rz%mYEN7fgc;RCYQxP9C1vN6vkx>Nsbqi%j6`)7~Jw_kZ{ zuWi2FxY_cVD=!rnl;`WJpD&bK2d6D)V=VI&Pr}2x@tuHmCN^b9Fv7LsN!(lvpgoS2 zn`_)pA9RqO=|-HUJWf!yzXy23OCMyHlgFAS54nto|H(s75<4W5^{$RK+L}*(jr~Y_ ze#_U9)w3{?!%;iQb-ur6;dtiNqpNhib$^Nf=(aTyckt`5((Y^{7N~x0T1(`%cGDl( z%#&Z|>-ZIz?AU4PijF+jMzZ#^1K-VbuFuxIJ76pHK{s8i@9)sk*=dK`usizAR@rFr zfHHlhYkewnf7);I+#{zCI+m>S_xj}1VNSo{LZ|U%`~IHyP9An!S8w)dJ!x|tgAATE z4xbR;U-R@Em#e$4mn}3d-CHy6<>Eqe7{?f7cYl@Ryg%#L#{Be6201L0o$Y?dYk0(o z*$KO0Ykze5orR*O@D z`A2@clrQHa)iIC1iovh8v-j^EeLg`MALJ}E-@-?n{zQ5Aa((b!$-|d8|L3nf7fbME zlD5jv`r29NaEB`#>53g}K3N!BEBvPCxXzk_pEj+7d<;8Om(R^s*{Q^y%lT-}OO?xw zT}*zB4LsX6s{LCZ#sjAy#aLt$`{KD0nTn#flIvV= zu%ILJllU}sB=f`d{6ld7T&!*L(2sd!GxGSqzcIsJ*pAql9pU!&|LT8q2B2QCIbBN1 z^dY5ZHt*TC$F&yp`4#`@)*4_-I6d9Vm6uz?>afRcck7ydtS9STKeyz!W^k=oK)>*B z-B=^V0__1>3#}o!af=7EPj>x%Z~R-b>B~IHr!Q-$Gml&CeurmpXAkuB2zmJ@cF3mk zQS8yagb$LuU)cU=eS4ViV!!HJJ8YMnKO>*|))N1mFaG<#{iI z<2#M}GvnQ}E?>jPvwi-+HO`Lv&%J+sgHQ3ixWK(@eD9rc^10VvTrWP*ANvwlTxVq%W)9>b+veLfADn2e=7wk6_xJ6K9KTpoa4SyGm-!cC>l0Vl z=cn)DJvzh^;p*8KT{8;pxpuq#8?W!O<63<>lIyGX+K?$zE7ojGxxUZ5XWB^WtMdq) z^edV7Bl>^kKKT$nG+y9?ip%*f<@B%KJ#b*l62HeE_MV}$2lwor|K_vREz!jC3d!`(I z;x@dp`EU7Mu@-DQm!@ZaS}ykDxA7_5^Xu%seP?Tey~PVBuj88dMtS~69_Pd(?v>-k zYngIMANw3?)wTaOuhu5JCohi0G3I6O?;R72@QMTjYa9P`9?;%gdws&pT8DWYz}HLe z(`$OF+`TnYd;P&pj3KthbJlcn70+f1Fc%Zhk%R;JOgQtS*`v9_=;Y(@k$Wa>PQUPa zJWs~>K|g1*?&z(4iUrudvB^R%bBnKCTNma`Coq-hVspN8{DbqYJ%4Y6F0_@*vvpf; z&U9kU!lUvtr>A0Yc9>nVCAvB5x^{+ha(*`Z9{-E;^`~EUEAath0_{Gs%j=krx~B(w zUb?i`Ze7qHnb}M0#F~z`?VEa?@iV?J^{pNs(K$VzP|BZlF5upEdzR~ba7Vt2e__A+<*&pC*ZS_+KaAdcb}eI* z>c)dOhEIk!++F9lJ#!rw@y*2sd^}&wXQv-IKV3{fUvW%(()c8<;+KjMD#Ja>-Q%6& zguTaITo%9KcYISkLMA+qQ}HO?_kK$m+3-lQOy^zJm>2*rYo`y1FXgx5fBHRnKfPA& zS=ZKxwvxV#iThzG&c*$49=TvhHaWTCOLHKTa#-t!u3d+PF<`v!m(1lb3u`&d!WXvj zM0MhK^VVPT)3-5U9M6*(ru(dL$r#snUTAM`4skz>vuU|!+O~FJbX}*{domf9EZ1l5 z*#=$VX6uLT;Ak;{vw>@y&eDp}vrD#@Zs|0=D%T$!OJWN5%D-~|-@M>MM^bxlI*fyh z*Wjma?Is@to&^DGHGj$1#U;4oS!Colod3o9`~zRWC-6D#Deyl(BIlFvcxM3ekM<1t zCB6mkYp3pcet9n}_yj&Rziy9;2k}#}Kz_WKAfJBTix2P_pH6Ra1747D2resL;P>ek z=jEUHB-|t6qLZtN56;}4hM&iG#t?Hz`ZQK@;(v0Tv5fophuqGe#67NCcl!11-+TNY zKgi>Vc)~j9{NJ3&gTsvnQ)gMu`@=~74X1@8*~46U_Mjih9N|-Z6tABgf0ik4zh6w_ zj1TVmGhh0U8_W1`ICYh*OV=XI#7`HwMlj?|#3&I1R^>1HY+n zj>aaRITi!(m-;oCVf(~t0f=Ky#hZjjSiv5GkuZ|{c}H^K}5CM!&gO*T1s zVd0v5=14w$oOqgdI)aC5m=*sRH!RIDz32l*=Gr&4WK(Xe^kh7-6CKm1`;vR*_2C;z zYl7_cLq2EGpTYT8`(Quu`Ymo|gW?4?=}azLWv_ihC`Mq*&iT`E{I8tt_xC%la?Jf8 zFbKRB0`Y&g&;IiVd;~wjceIz_Q=C=jTll40dlG2*U937^!Tncl;X!*z{v6N5NBsZZ zH!eL{ulFE2Xwaie|@Xbdkyh~KFyUp@qakM z1&-wFx3$TP%gvQs>S#}X_xu0iT5^*eCb-{NaMA|W8^3iOe~Y!?<$DM6DA%@F0;bB~ zBJX`ZUf(jj&Edow*7czuYsGoQbsc^7J=>uVwsdQ3b?ohNzEmtAXS3pP*X;Jn|Ly-D z@ow&x%=2sz7zDls0k+Q9pL;&{d;>p%>+>P!`~LXfe&k2|g+0vI%<%T8_O zocJ0an-4kFjn~Q6+~japN8S3;UaWxc(+#}L&lqB>cz^f3eru>MY}F$R&Odb}-Ut)% z$TeoDy*<8|et`Hk+?cIjOFUYwuJJMU9=>s{Vg+2)Kp2n+&` zLBN?|{GU&-_m2lo|B>(DU;G`eSKcd#2k?Tk=(qxJ;3s=ae1c>A-A5cF*=Kqlzu+Y0 z_P6m5PLAX76Yke8ZomF!LG01DYTDw%VgUSz`|)Yda3C(V-}THHhi~R_IBrO6lJ?SKPU< z7yutw8)62rkZ<%QeLABz7jcI35o5*IWW(3RG3I{GrRT}-UR(XTE(Q=UXa^^ldKRAA z7FWUA80tGS!13wEwKI#4^!cjg_V9G=9FKml_Dt^*Tc>Mz`~O$PWac#p3<7^fz&m{W z&kywd(79)bBkU(|!83fv_vcxBO^Gvc=f`-aJt>aD!}v9v?H{_lOT z_`q7gA-LZ>#S!-Z^^1dzWz6$TLV5C?b7>Cpu06-`=58KvEG`P8{cOz*zT$*%RsX%c zz4?C4YIwd;*{kFm-gJD%er!6Oi}!B*zTo+0Hxdm3gTSvMaPmK1zzMj4pJ?yUo`2pA zejjaT<;4W}sn`I2NqEcNl|ROn;)V9OonL$IT72M{NsixWaxu+|0w-i{zaQd0zP(|NATL$7=LGfDO~Lb;rI-blrK+@c)ltI<*FY zS3w~D=Leks@)7L|+w+fK_%&^}hsIap0bGVhoulKoxD&5BPq#m|&&8d1(fPOJyj`+4 zcK+Vk0&c~b`qa1g-f^sV@5uAJ948_f3Gfp#S&RdB4~JCzBJmi%ZDl z%wNAaz8JtgnaD;)vbvUVJekbN-1H?DGH3IbYcKcQc(B6rWcW1=OzYm|u<3Np&il@j z-p9^ooeTp1UkLcU5bp1r|9k^q;5(w(^FL-i;QsTh+8%qK9jtQS?BhiIXHV?9gdg#H z-^b&AysAHS#QKbQ0-lKl$fs`K-r27!Bb&PBWdH8(BE;>+2<45zdZ*I;JfFt!q~!lSu|LMG=NWmig1obGaf9yz z)Ys1bU-CEi{k=H93yA;i`{~_t0#9)$p#m%I=3Z6CkjUGSsEn||+ufU^VqdhVUio}D4M_uQV^ zJBVU}eh=XPAQA)M14%64|Jc#S{vU_y$93blukUlbuGOnC>fCF*>F4{X^5Eujofk9vpcuoYo0}uoF zF3_34b4oc<4FZF}ATS6F0)xQ45$Nym+`HfDZx9#+27y6f5Eujofk9vp7z74^L0}LV Q1O|aYU=SDto&$mZ0(O5)3IG5A literal 0 HcmV?d00001 diff --git a/img/gude-2026-03-05.log b/img/gude-2026-03-05.log new file mode 100644 index 0000000..b1c716d --- /dev/null +++ b/img/gude-2026-03-05.log @@ -0,0 +1,3 @@ +12:40:26:562 [CRITICAL] SharedConnection - Failed to open WinHTTP Session. 参数错误。 +, last error code = 87 +12:40:26:562 [ERROR] Failed to Configure Secure Protocols. WinHTTP Incorrect Handle Type. last error code = 12018 diff --git a/img/icon.tga b/img/icon.tga new file mode 100644 index 0000000000000000000000000000000000000000..f87382b154053872dceab03b0767a47096816d84 GIT binary patch literal 1048594 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

3Iz9W`>k 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
  • 5VgHd+?KWDIR-aWbtSZ^;|*!u9>9*5a~wcRrt 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 r@Vf(P1Uw)wVG^uAqvHk zk{)at1?@jzYiw*hA1`i?c9-&)VJyCZs$!0ecZ zF~=Npj4{V&&hKwMyKj5j7rgEMe_!ynFL?J)xo>Ti*Is-5*%!a#3!lC6%Bx3tz}-h?Yyn9}Zu>sQMKL=CR$vfAtra<(oG@ z@3!p6*S=ybou23AZ}Iw~eZFY?TR!&DbMM#QTJ!&Z`oRx><6GYUANlAfo_+YkAAV^$ z?EY2@y`PfNIKAR~ksm)l{&@?0E-X;4k{`VbqWWjM{>SLc=rZTNsBZ0ah&JbC)_M_- z_aJ%g|7GYqUipOw|MR)|MRV7@7q9iQeAc78T=AlP{=XRi$Vc9IX}!MXBOg2V@y4@7 z<=QvSebvA6p}y7sX7?kf&bMxUXTMoqd+q%X+H>r4QJ?awqmPxZ`LeG($A0^3U-Rte zz52oP?g+Er${pabwb;a%b>?2_P!2GrJ$ZidYro+^Uos}2J~E?IzP^_$ub+C@KmIox z1C!s`*>!1;Q@5w;FT)>C^eK5?`hlPOoE`8_J=ywmdEUj*L))(yc-Z%H{&B{xdC7VG zyl06mUyG~!el{&wWi{_)f&Ifbs&9vWj$j;|{SH1HSCBJc0q1UA5 z;@7YKR`%Uov9!+9@>e>{wXIcu>!+Y)H|H3uZ`SqIZf|p5vM1l{d;PW7p0fjeR7f)k*95o(&GkeWW^p$7)2JjWHy!+X2{nB?op!)Xy_rALLcDm2i z#`BbnWWV=|e(8gCnltC0`@GZV7rgS0!)C8PxTn5Z9Ps8{F|~dJp~EcJt1VVf9q;<~ zcD#H4-i|N1lRh;z`S^~%$mTz7#a{mC$G`JU#s0)QcX)Osliii-bo-)L-+9-!=∈ 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�aW1dZZFAv#6xv(ucLrZ5KTLk` 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໡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

    p`JDSdJ(F+dPZ{m?TF2~_jA1-X_pVRg@@#<~ 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

    wK=W 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±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 TE%3C!(*jQmJT34yhXwvRDcGv| literal 0 HcmV?d00001 diff --git a/img/icon5.tga b/img/icon5.tga new file mode 100644 index 0000000000000000000000000000000000000000..7c0ea436a4b338da546d7bd3bfc1d2dc6ab06e04 GIT binary patch literal 1048594 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

    =6sPde!<(>wS0|3_p7mb7i=k%S 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 literal 0 HcmV?d00001 diff --git a/img/icon6.tga b/img/icon6.tga new file mode 100644 index 0000000000000000000000000000000000000000..ada7d05b767c868bb9c92b0742ad293d9ad38786 GIT binary patch literal 1048594 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

  • {`9|~JMOJBK6Ak~ zxPQ-kFAVri=l*p7~JEA{)KQD@UVp zAe+X%-%8;CyFRyad*5w~(o-|e`A@oYmS=c`UeDYUGXJn!%x4v&8C zuYPdod&~JAW!?AWgJ8rD>`fkotp-~S4$(nBIwoeWZx|(4)@99>JvzM1E!}!gjq%v6 zeZjiZGG_DShrAahFRE$L?^~$#_(%7|0$+!L`qnYe4&-P$-w{3Q`gd#{47LvGZymdj zPukHh{Mk}J`u6-8=T3lce1YubCA-|jm%c@JYxsck*f+LMKl;&s>p^a7%saRBAoJ44 zdgF_p7|7h__fdcNj*r5ibq_r<@ZHo0Yt*=pbWi=m2X@)}EtD@<_l^cPG;8*pJs*v; zep7Zdezx3i)xVE){AeD}=#S!o9~=@x&-1=E4i?t=H@;b)eyI7qHtW8Jy01k4&usjW z{+ZA3MDQ&((fBaRr^zY5>HEf|=|5YZ<$1gyR z`~XAo!Y_hDbT>AioML{j%QNdd({?{|&-vhN9uG8g#;GegAJsB%J^N*z{PI_9`@Ix) zeIJyks`hKnLfan458@AK}J`jw<^NEA=w44uz z^rKsJ$-2E~&*dz0@A~HA2hlZWWgI^=mJ7b+J;0qRbl%q>%NKs|rT3@>w= zTK61hE@ylT6_@H>{(D&D|5m?#w=VC_F!1;0at}~@oD=HY+_Cpu?hNK&2m8HFe~(-$j+@4Y$e+t2`_BKYk=4E6 zPuJhb_&Kp2{rNWxI`)enz8as5?+2I2Lr(qgp~3RGC-e9@(-__S^&?9tncUre?%gN) zhvqKS-vTP1rQXVCT5SERq<+8TTlnStO=Bk*$amlKt{0u3lppbfycfkL?7?pFi9Oc; zsAbPypSjSS5qp2OcAvu!l27CYIn2-XPY-PxI2^FkySs99n=3B{n}dJ z-TR%psCVnn_{D$7ntR|cgF*C{TM}#0*PWXzp|Mq-dzQIp|1%xF=b5wP2lhFe?rKHy z*!S3b-vj&}eb>WNV~p|4yg2hb)O^SoS5^0d5q|h9@Xq&qzLfl$9I$Dg@xA!pXZ^i*uh0B*Z}_86S;V;9 z#EzA|8H!J0A8&X(ef2p%?-_$z)@Cl_Z=uh#_BnaBss4=X{i*W7FQfN!FAVq{ zZ1;b&{9E++)-}PX?fA$4+T(Zg&UXFVg0eyGH)!_c46>0C4!1g{%SCY{)7M29Qt3a@Q^dz6V1U#9pR_fnnzzA^UPfh zHBLW!n&$`mvS;%ce;NNE>o0TfiOt~ zCtvX^{f}tY?KOMuv-#(`&&G594+MT7@B@J#2>d|c z2LeA3_<_I=1b!g!1A!k1{6OFb0zVM=fxr(0ejxAzfgcF`K;Q=gKM?qVzz+m|An*f$ z9|-(F;0FRf5cq+>4+MT7@B@J#2>d|c2LeA3_<_I=1b!g!R}TXIokRaSgZ1w_UjKcD zf2T3czdz02OrC!WJO3ut^F7YLQ_b2uf3C?qdjC7GIV=CpfqZ}Up!GwN9|-(F;0FRf z5crP+0{J(9{;l0d&3~UX&+_l`jCX&p@o)dL{vFM}z2~{^SMl%u)ZFLax=@4torbv*$Q}s|4NstPg$e%RITr_v_LC zH5q3e`kdSQ^6W|Xe(U4=eedV^%ofFA>+vvUA zTkr4fN9VmS@sODPbx}S*_tx*^Upe@%RFezk%8$+q?&SPcV*ulQzOz2d+nzt$bG`Aq zx$Micj6=<4BS8HH}$ywZc+Jh{+^M)L6E;!q`$}J{at3w-(K{0neum> z_k2J9$N$s4=3oEE|HwuC%}?X~w?Fed{QO;~oc}^g#=dV97O?qM*jz3R&L}J==7uKz z&|uXRF4h)J>-$jsH=y8UZm^p*Gk2cBdaddG#cS3(=QL~9xm(WfwfEPs;_sXPV39jr zYLa}M{$Q1{yIt^Wf30c=)zGj$QD$pZ{w9)>m+WC;pN1OB=)% z==cWvPu$$LYa6zG&9VL6X3X}PD_&QB*57O5KRM5tgL&}#Rr>%ec0HT(w%&KGzwkL& z1e2j;9o?=Nu`V%j`j_s_WAwZCXPom7&nq6r7x-;#_^Y5hAMibR+`5e{GZ(q`^T-(4 z7hQI4y$?QvQ}I~O;{(o}oN)8$c&Pcr0$F|)dT$;uRa=}9J9lntEVkZX_Fw$J*3%_A zbiDL9zW$5;Z>{?8ty&Xm&p-TIe_-}DkK*HO{&UGtvXSrP1oHkWd_hdzx-b3Z;^V*0 z8J#9Z?J?een=pUBFmw5vhQ?~<9-GVGRm^`6A>;hF1<;(c&mKJPy!b8O1QO$HYk%|m z8a=wRQR@7rYIoQCMa`wQqaU^3JNJa}=)dcD&WoD%LF=XY~^Pk1H{@NfM~7CxIANamfpeoh~j zSFXcg{xhw&{FfG7f)%>?;2jzI%;c$}aLBvC_u4({edFUxx$`tFy`7c2M|Ayy zmTZXyH2DCfZ^r5Kjo3Fd`}k0J>C@Y|&pa69E^^J2@nG!RPRuvlj1uHZnwJcR#i3Tkbru zaVY7YfY@1^n` ze}}`1j?O4Qi;ki3!>u>@qAwkH?7r*gzVq(cp2I5`BnHUAPi|kCd%(}dz}=DmTz>Gh zdz}{_4*tezu?-57)V$yk`jPGFyPst}N_RB8(Jf2*WS958*YOmT>~CN3gRd5!`$Dd=Suprz-v7S9VEaP#U-JKc_Q!7=_-W)# z-Ot@8G%6Ea2H%tGldDg<%3*9zL|4H}y ztAFrKj<%;U2o8Mk_@Om)@pHJR-uL}>>^U{|=u&&~J;i=~cZHcd-+_C4_wyWIKmVWc z^u^>WpLsrW;c=gF-Am5Tn<5KJr}$RmTjNl+aA$q$`q|i7eWzxUe zS<~a)zwzzwpJ)Bu&)U%8NzX0E(`Pbf|M(64VfvZA@1F6G+;uNMJAQ;`WV!pt*R3fz zpL@C{*R$`X_+(Fb^6kt$`&qMP_&FFP-|>UZD|(0Gefz|={kHKv|J*m@@USk}W-jAb z9`?1ap@kDHk{3POKJatz0Ai+*l2A3KKpM%-#CEwt8^BVldmk#C~ z6T3hAX7A{j^IP9KgYJLn?;QHi)P5~^k^g({0J|=-{pdJyc5IYyT)*G;QlC=C=s#;x z6GP>fjZI?B`l*|9&eWE>X72Nb_gRPE(bYRbd?C8a33T8K``fs<@UD}+myV|vrv8q; z(d)H7+mq+5UyVo4si)B?I)={Lk-zcaBYiHckIqH24%O^W!<+5@_4;mf$3MHzI#_-b z-+TVDb;n{6c&*-xnOB$MVCHC3tK~*0Fc#b?kK8GJ9^@4z|znS$BLOIyXIYc&5=g z`g@_ekzuWc^y2Q4#zi~YK2h({z{xEz8 zyID_f-%!LoEE4y0v2N@5wf^=ud@i}8@3C>u7w;DwTF0f&(JT6dUOeg8dq$7xzwXaD z*}E|qA2@Yk`9bs_`6usx&-XxQ$(64)|6oDqEpy>AJ~}#(ujN|v3r*pNjzSe-oF6S06Jn;)}HmAQj*s)Oi;}6zoU(+8}azX1}{Kk*Sk{mWP z{LsjtpLOPDt-r1M4ue?j&$^kIYc0Pz)(Lb^_K5gUix6QNHTzVWE zm5$L1Pp!vI$7U_x8qb(&0&v1D2H#Iwg29=BXKPSNpTWzRP^xLQAZqbsU8!*etZZ}yY>`MmnycYvCg!@f1| zrS`R~e7@y4vMhbc7G1B{EP2{qOFl8*@`o0`tEJM(YoQ z#5*1E_?Gv-;QB?*FaDABu5~llGBi$S&9yc*&)(anvF*jP_dnL-6CLY0eS>ArOk4z? z_<--F`8ka<_`tX5FDJ-*UH8beeV{QO9p=31mrT(mGR0=2o9FkMto@SiHQBT07KVLh zJ-cZ9F8N||fp6oN50oCTBV+R3XLMr_9+%9=zO8S`5bAm3vT)jQeB%*aLbsmLeLst? zHAm;uqR)#DG$xY=`G9=5<^NXwVe^s`+lEKB(l0vC*(ZK$K7RP5!6Ee3C!+H^dh_l* zus^M3D7hjFI{2TtvWL2t8ra{3k3U=cwRo7?Klg^I2jshR?mj=ZFt_J-{di*aib3oh zI%mDCp*K6A$IfWygcD=Vh!2uO?#u5JsE2tk^vw4lzw6)f!ll}rH~95@@gEwS-}+xN z^x5Q?{ZAU6ncq6?x!up6PwAGq^nn8#v-e;86Qetw$&dGE@jh$D*3X)kxNe+-$BOmf zjm8$CZ{09Chqw@{mEj@XZm}F_m%gH?}fv`mfuC! zmiyqEcr@3(Qs-TMuV3?Id!^qxckdevPCh7p!6f$OkK}_vV*bv3Biq+7m~S6DXC@}- zRQ(H!#Kp`7kI`}Kmi^yCZ(W1c*17v7!#m%aXM>4%KKDQ^`r9L)eNBJQgQvZ>KBH6H zpDiyr?wlW4?>%4Yb3Yq?_c&{F<{qaXnl-PqeXrz-55^Dj?jwhP>pf^NsPk&i#$m9J z97Xv=;gPtwZIdXQ-|`yMQ|-$$zWkBTU*CCZ-;Lk+ z(&%3@6^?!OgT@z!zS?HXn)~C$f1TBJ*7z$p;%9%q*Zt0K_V0fU-_boe$Qp5#BpWS_%|3CLEn{SD z4CXl}PU1whX`H8`n{f)ja*nPHl z^BF&7g!hX-E6Z{{vuE$7I0&qcpIpSjRrm~pVk{B1Mm!a#0`{^|m~?l`IE z`FMb!?^z+O)_Pk)%F}vnYJoX)+^z)4~ zKkv40@VUQxtquap_w7dVcRe{nQ3)vp4(j zc(gm_$Nu^GA76+q-^IJRr~bq1$Z_(>=x;8vhHiZ`7aCpfdf&Q}{qPAEq1y-eM0^C@ zK0^Qax<0wsOmheD?XNK^{pBKiKhod4=UQ-WIWFCgjx}x>#6!z}>$&CDADIrn8qdFF zKYWh7FShSF>#Vu=wLJElJM-7`S{ohF$Ts$zp9ke<0r;B#3OvZMy}yEx(`Oli9OfxVEypMN3Q>af6afQ^ZsD8WWLt(>yLCh^GA*w+pG`2 zdra=&*K(IV&Gq*nzR=I-UeY?Q{22VB@7TBa6_4oUnR!1y_#geD-|l{6_Phr;XUU>3 zzO=}fx#T{4@z?PFOTRtMyfd;da^3l0_IM7jorx2r{QSt;4=F6n%@7huk-)h z_wV($zlUG!|4wH*Y1VFCd+pA9wMJcPpJ*MY?_6_v7Ha?S8@=ea@eBW8fRFW&ao0xA z?0*;U=J*I1I#(8L9<@Hap8Ai!-p}K|v;OR-FL@5X*0aV#m%eL_{job;`NiM#2mffd z-}(b{7rrqFZnfvcHT`2V=Op*zOUIA&H{Y?4J;9*%wf_hE#^gRDvN(6_6B`X3`z^cR zyIOP|j0UTFkA1Igd~EQ|+4StTFo?a(=ikYB_aWm)?|m?c4ja#j`(x{)|K%6(IWnqc zPkFx_2baNQo}1hA(K&NB%^9I1$I`!Z`LR#MBiZ8ze8D*%A%cJbdpvz`ZU%8%}&X+c~50{r@lDe;UidEEtTPZoc^3^4xYyK2N>-+yB74``vmC z4>(-+;_iEHS9{sTY#tAFgzbzhyfhTijUrz20%qZfLex905Y^XmTKJazwH{crx$7k~Zx z?-JrW@(S{k<3cxBr*_RQE&wxBtkW?!ET)`N5}nj(!Wz*rV2X7JrW~+HXGgCbMU^m%sM- zi9NX+)2(Hwx%k9j{pttSnJ2RrpVyCVV*Awe*5&xN{vL0ix1S8*z3J$A`$6`}+1pll z2OIs*-hIfP^=;2OyLq8+{a~G6IK=1X{L;%@oq3HLd+l$(sIzw*n6tO#su)gxQ`lSA zesSqr{2zU5thJZT(?^Xxk1t$4R`N8S;YGeBH~n)5u;-&(01fB1Otq(NQs+h2oJWSt ziFbeNS^n~#_ff<5qi1aV(X)@{H@_<$a<^{#oOkuommV+>3+<0JezpAT2=B%d1`Es9 zyY!6yeJ3dX*ZJq%_Gog$KmPao4#2+glg*>+=+Iu=SV_M_*k=JPW!=lA{Z=zr@uyvQ~>XFQm|C2`Ac`eKy7>BoN? z12`Oe-MMjOPd@vY(x=WoSYGtPVV+%>AAh}UdiIgmT>Ro`*VeoD2IJ9>9_qi^l{7dU~ub9@4I>4_k~)o#;5LIe5>~Vdw=o&@~Ho}JY)OOgI!vO)@$b2(HuKG zZEZ{!^0Z$xery`M7F~HHXN^A%#@#>q$OW-6OjGw^@-O`M-`(wB{2Tu4PygiK@h3Z{ zqwY;=KP>-u|NMWaeI-1|)i%WcvhCeZK8mke!)CE#+xzS__fCIvZG+m|d9q@p`PO>; zhF6_=#=*w3iG%vieEt?m)B5I2ZuvU$#oi-Ne4K987mLyJPyF?lzVm zIQDLRM|Nw20gB&8?|z;+qw_}T)_N}6U%K?O+XhqT>zvF-m!iQ3Z!P0jdd?#EspIS+ zcGQJG@<;w$*Z#l$7yr;t+TZ<)Km60%?*Mc?ShlPsJ4)}?sh$~s+{*(XUPyV|sD7$U? z?0>W_`>fx4%;%ZC`e^PBjcdy~Iiu}!`S0!9(d9Egkbi<1x^-{92aoB)XWC$Ok9)rM z$KGh{llLUGU)>MYcPD`97yF!pN1Z>sVX zeCqzWKcw!flX&3o9P+nZZM#=nlWpug^YP34{M-0j>wlk7>!11V(!b<}Z=Xk&V;lOg zy=QV3d&_yL_1@wBd%y8FchgUk&-Ja#KK_DN^o@N&$G*W}sAti8bQrwj!{(m8p7F%( zoA>{NL->XUi;-`B*G}!1GyVN8|Ni)Q%BLrn%I76x$@drP-(`%?)?E2r`qo~)QGN6D z_w#ExKfk-u{7>$0S!&(W*EbGrr#^SEAn!-H-?P;Ji)YP6*PE_0>BS$ML6$|$oltUhj2GU{kImmvm|K6{ zfolC=G1UHhJbmYr!@HF@eSYII?z!Ll^Q|i$R}MaQcV_&-yMX%s`@i>FKmGnc@yCAp zH)bMuufo3Lt@e&gLz`F6 z@IZYJLHjvbsx_9UZ{8Wc`>Xe9xdZrFfcnoCt;-u87r)|l<>KncKBzTQ7h=a6t9K{& z;2)hs)&KSZ>+1Kc@$pVIF_l=2@6R2SK5Dyl_M&`D>%aZ^|N7r|J@D-E*%zIX4;S^k z<0EtAu0EYk`v{xCV6bSMO1>+0v-ixsw4o;{a-ojq|m@k%~CVWV!L>Q?$FTWk2j+MeVOwSL$B^!IlFIdbBH&eOKd z=ualLVUN#zfKPmp_Yco6@4|Cd`(>SBU-a~Et)7jp>Nt7G5FCeQJho$ZywrJo?AmNLR z(e>W>@X&Vuc@Iczd&f`R4}JG@0Q;|aD_JJSN~Xvq=Gi`D{g*cSM+f_p6ZzWKTVMT; z4_G&t-nzmv{NdzXKHqKK0o0i^xhD0%TIX5AMi(yE9k}?WpZBCw?{g2x^U%hkd=+i| zi*|qMPkuRq%<la^=&&GKGyyI|K`v4`}zO(-~TtSp9838UAxaW z0e1lPJ@)|jd->J3f?fBGvlsR5Z?D>K9sKB!cgeB$k}Y;QvRm8l|D_*YzE=Omd)u}4 z?>m3b6)$$b>P_QZ>x!}`+%&e9=knf94^3^?Qu{N`^HB4C1`C4?mUa_KXb^U+xE}8B;SMs!dLL;~F*lg;|_`zrOKRK`M+!)@x;F3BTTWnv9+<7+f z^BZ0B)qQ%XW$!3^(}9os9+X=Dj;8+a?*MSV@fewBT>6*X>`J$H`7Sd4=#cgUg41&qF|MZVP6hAWBpZbqS-yiCmn(qktIRGE* zoX|3q9H|4x?_Xt|IDi2eKJoz=$ocU;Ka_#6tKEy?Nq|m-XKH{r+B> zcY8HH_kq+q)SPvx`>5J)F5du9I`N10vyz_>w4L(lm5@r6V2pwAP7 z)PFG}-tmb3gX{2)-h4^@_pYL^&UmKjn~Too(uaYje#n872PY2FPj1Y3@>u!ebx*K< zwS&uz!}8nqg~70KJTlt9>;L8Fwf?RF)t8%VPxC(5$y@64|L_0(Ke>JmpqB0T`28~h zvHY&?@AcWA-vhv3O>7&`4^~B6mdMlbNmu?@^vF(6x|#c|{#%#&Kkw=d6Haeux4r~aS+ zPM|YA$3IkTMb_yb*$+mM=cC+@7yXm-qPw&3wZE|>WAW^I6W(GY{d1SGPgD2)y?^sh z&3pfmUp>>j%fe2cfv0cDyXODVzxQ8$8RuDk4&V;p=LGWP*zm?6Si}e9{?B}XFOb1{ z7-auvv~egM`2#)pzrVwsnvbT@7p7zwI}fJ02X?Nlvpsjd_2J{^V(tU^T>#JG11(?e zi@k38I!Ax@^ZX+pfB{{|m-qkZ|LRlY6W02`qBT`Kpwd7KsT25;~A>YZ}#u;`sd{* z?|0rSJ=*u!eK$FveSy4bdH+4WcW|(u+)oTr{}b=*e(RdLP#DyHILSZqv>Iq{z5&d> z`{w}azP0q>f7Uu*i+;}Bd2r$+@lt1AIdZKlImBMxF)log{*k?D$qN^{Yi;MsJ*j=} z`sVh%@g<&WPxxCWPSt14&*}5K0N&kqP1jfZH{H*>4(@ONRTJ~`19yH{IrDk{cm_5+?*W@*_CYSwfsc)XT5iqp=0WP-v9Ia4W9Y= zN$voi^C`IUC$ZCK9=~^X`*-YdY<=V4`P8Jo^Vd2uK7Bo7I^cKZyjnZFUNPXmTI0hG zB~QM~=MEq@y90P8)<^F6aN$OWx9xR}bJYL%HU8bIX4+4$)~)okmVU|6LkEN4mV3=d zx!-=i(mC(=!G&k+P40vFrtJ&$tmD(#@;ex5evbWr{#WW}7$rY!wCJR7zHM1|F!ukb z=BM_D<~x8pLw+A%>m4k}*7ug8aEi^}QP1HtxXOE_Q~Scfvik)Ny#iK`d+?U`s&jq@nYRO`)3XY zeCEmrwV$qoY2xgzi{cy(yLLbOYJ1l0_xyYV$Xy}NGA2vwb!wk{$cAzjzvBa`qoKE~ z{I=SX9S-iAsCCgf)LjbC&IRZF-+3BdFSK|#lPsP8%m3AN{;1ygmPdATd=5s|rvBSQ zhW6vDwy)UeIGKDhIWsYH$BTJrI#LeSWPU83qS(<=vmo^l9Cz?x)t9%lp56TIO;` z$h`gR>K?$y=+HjUy3;>8zo8{R`;c*R|BScZyB}M^3Kqd{V_;5GAFb==XYz$x-edFb zpZd?QTjtA;j}GOdJrBoctF?5KD?C#>@pDe7^K$P{6X?l~qX*l?ez3XE@cg6P?-`vs z7LG5q-_-u`fueOz?2b-<{8B9(U4{lP^1B1%yS3Uy<}~(U-|wmY`wozA0lovoPsVQJ z7i6RtO2=*YXWxGIhwYB1S3Ji)ex@G%VGp*c$A z>hotb-|;_Nv!7)>s;O1E`;p^mr}5ulaDV?WAAR3ZxT^iZ0A}?4f}Y=FH=p{SZ~3X; z`yP<*03Ut(H~+5ww{C?w%0I{_KWM%Yq@QP=-?1xiO)U6E#-@`K-`|JTYCh2UrF?*H z({BA6=j8*=C7b$}?*Q`5U^ew9KMO$JVdQo3VqN>O`hVrg*IaVlm9OWe$IhGUJ*nr( zcI11t+3^K?>$zv0yS-BtMx8&;Jz;W4e17;%yw6_Gt*1lo0H|*O?f|Lf>RD=j>V2Mt zW{o>TYCj&{{rxN*z8&ZF&TzeBotiv))_m(r-pD*TMeZ~A+53Oj|Bb=%7dq1U)_ZbZ z&lQHwWIMhB2eOi1en$OX1ezM3+WwB_zTlbf2b%hyJ0h%a+a~vpZm+f){n?hBt$)$a za)0wKJjHwG;W}$@ys^yr>KC8cwf?HhwO`*Fm~`A!j_`d;e4tw2;ZGlinMdXI-dFPD zfmis4ssUt8gS|auOst2(hE8q6TJx^{i$y+$pEJ}8{Ok>lFSMVP%=;dA#b?Ll*s1rG zF67rzw@~t$a~{6l<@w3CzWb;CqxOc%!CUXh-1)9#qvN}LpE>whOGfvZ`Mr?a2jUaY zc(BhqJH7V%zj*h1KfC^0+xL-^%er52-F{j*P&_rSQ~&W0SMC65u#3H8kCCZlWt(F= z`ls)^2HA|?`9Ls``}s@z0bV6YBA z_J*ex94=We-A88fHpcDSpVxo7@Xhgq!61GWIyls`gEv{!_hi*=Gop1Kf1n@|Gj9ucd+iv_j z@4B&b^6tHU{AT=W^t|HUIVCfF>EibQ_Z>iAKI?jZ-uYAOa~D8U2lq4kQv22a>u3M@ zKEmIs-p(oxiJC|*&XJ7Vy=j-wL+>7N^u@U^P7_YPK z=ZC&A{k#9#fA)oX$JM;!I#2HG{8{VmOM{gf6soU@@!c2W;gdRvA72Y^^Z7QAdVojt z52XY9s%zwUm;1%4XU|v|9)&e*<7EQGCh3R{8$#UW`X-|CN^uTWco|9Q%}==J$dk?@j41_loa#J`gzU9&IM%Z91vMw z?FaA1`Peo3zN2sz3ow|Uo8g%j3~Ib^P|NZ=0J#IC=A-GSe(&0^c4rN0?72Q2*#z%A zORaxL+1C0U|7^%UVw{iBE&1T7zxp5j#Vc&Th=ZDIzd&Jd>Jk2MP}|i&=a6UL1LT_2 zezEVJ$2a?~@nRs~M)k{PSM7g}J$ts6r{)iR_1%#<`p^5>+=aZ)wS7x|I*hH+*t%%( zw6|NG8(iS{to<3Mu6O-=a}UV#i&l+H{dWiO4G{KhIl3N93iIfA{SJ0yZ94L*WfSxB z^O&ctjroc=XDd8!{YS^>+vm6bM}~s|8``V>lRZuS_x_)H{w>trtW*E#A75$TJ@&qH z@A1Em&10*B1KcjXYM=e@^fwpYzEjH)-g#~uhOf9)>+*A^cl2NWm+s%!C%5=Xjy8rN zyis;(%+H+h_~e}JS!#W#dhguO$dGfMGQ)uV=oH@Xa{sRXc+LBN;ZXZu?*J>d+(-FC z$qyG;=U(o-g`DN;V-v8YL~CjJvI7S z|MOm-_y1kT^LKyEWnFln@; z7KVHdmKQyD0B7e8peA@{u_ku__cqV@nY-I-?JxQI4zS{*#+_SU>VK`1Z!*`pNB)^M zGL2pC9CqwiGSe$Ls{7^dAAR%OyxJG!y?st$^X~oM9l-nhRohSfcbCuHbuUmi&vQ8= z@BjL2G&mid>+FudLofVKTwbwSawV6Uga6ak#$AufK5+0&WcD9g^K@=~i{{(P=s&i% zU%p^#-zn)NAE*Ay2dU}bL!a;eoi`iz!htL;+p%fsxBZNVQ_u)aa{b|L*JW1@`?QbL+i+ufOgPk9Apt_U{0wbEocH z@*I6rw}MA>if=#l-eVZ>88&e2Q>bSP+yn8|R zWzD-i`vIQi zZr@SVQhtBh6$jVc{w`qM`Ms$VD?9geZAxuy`;>pGiI+dP!%Xde(Otqwgg{o#p(^u{5YPof2#`?}pou{KaLgv(z+$+rEhtf}9t|Cj@YuUfY$N%xt+z;Np`>`90#XR}$ zyZ-1M-)jGGMzyxZ@dJGrr>2Qx=WB9k+Ex3{Hvs4C_kXpYUue%e!5-&6u;;w{=l#E9 z=IBl~y3-3zvH3d+gRYZ)7p8O^3>OA?^8dyl^vielysNtp`+ESX|8V4M!D;8S&V41T zGrRtupZ|x~rd|I_jw?6BCMOm;FSP#g-?;=HQHUk_xs)QJA8h3&wR#yE?{rgX1?ou{jQ(+eYY?l{o5apT%8jhGL!9T*N^l! z&kyJiXMR1p2Zu9$_y8RE^Zo{qy6#zOIs4~Zex9fH@A{v)tVx~cGkLbx@1GZR{F1Nq zPAn&X(ML`d5Ab{9p#GarE{N{KXL3{f!^XS%J0I|`$w~8j;cA0#er$t}<_x~p{-dr} zP45_Za~Ih2ckJvlr{BET>)2-GoS2Fai;d(1ejzu>y(3#}d}#PI9lp^se&&AouI{J) zqwWCvy+8MWz8h5C>)L)U3fr*AwH^Pks$_`<>6V(c9r z!7{oB^BZrnsYh}<8>hC*;lBTC$?4xp)qnRR{M0M)2=7aO{&sBhWsVvh*p{!itxG>~ z_w@CQ>3|OmVDW-M@rl1%GyXfZ%^CQbQ;XFGIYYe`Ut%@)3iICAQ~UMJ8PoGw|Lr%2 z7n-x;r^adRiwBSRIhn=}27|o+e^md)t25hQ@T&dI)>}{0pHrcW1*j)e9Rwqeb4)P>UG}# z_nOrA+z;N>_pAw@UH6@#_UGL{xw7rNa4=4u6O;V)-F-Ok|8jx;`2TAS9sLIfcy?Zf z%Z0=Aokv$SFh2_r^BOG3+V_O2AAJ|@+W(s$+yl)$;UnAE38>?f|L#sP$>~rR5udvFCFKICuRE z-xG&@2RM30?@QmQ|LoW{EScZ=e8+pO2?nD-98TQVzQj7cFMFTw5OBal4HGZ<2Jo!^ z&v*UL#%e$R#FPKDU0V0!Ywx~+wBD0L$9A)pedRtp-sx}7Gd`@&%6W9U>>oU%d(rW= z*%QA*?bGyeAWAB%X|HvC$AiX58G+|&Tm|LTyY`}PILAZld)T9$q;|X^P~C? zgS_`OuUfl(VE7L<)+TnvZ<={6V|wr__fS+E>6AKYAG~fq_%ing6Z`Pby++Kc;i>(`>UVNXa6+9C zI_Lf3$|b4!X!>-KzhP@%WJrt~_c#Bdm;DNdybCx3?jPY04EQYny7fQ)aPmy&gyVPC ziBs)a%TurS{O;#@=(}g{=Dh#&GnlrVC6|8J=lK3bCzjYKcKt|y^YWRse01(WiG_oy zGY<|OdvK^mj=cNk9Y62wsogO0EI$WG-M24w9@&7z&+pogFS+@=bsGnB?8x?H zGvJHYUqp9SzkGO(j}$Sb#< zZvbD8<<@h~3(eVOCwAEK>6hLU3nMcb=tn15w6E8?TgS8K@M(VZJi3zE@7bo_|Nfu- zqt{(OzpI=2oi+Oou-#@^*$ z?UQxh6@z43u^wOluJ`}MMb+5b5AYq{ISY;6^Rt*GTgeEAwv&B@jh_R^*QxROHV_*= z?*{HX@lA5Pjg5}6iL>U@b~?Ur;c)B0w(e8-eN_LQllsqBqIcq-Uix%{wb~ZG>8mm7 z=cf9aIAhcJ2udbD6MudK$U8pT|GmHZ9RctEepjHs1J^xZzx(I?KehiQ-<8}jCM!RE z=DR)aSSb0eh3kbuFfCp%#0Oql@-FP?BUVwdtIwBF^&1Ybf|2#cC_l~E-qd^hG}xi` zW-Je|1sTY#kt=te#6#zYlKIN#ANW9U*ch~*M|YI(7Y2!i9=9*fx&8iMwz+C~_47Ud zduYA`h0ixxRD_4%fY|v!LCXTicexw=NgZe%_3(<6V|iGKDx_0Rji=UQUv zOZ^82`X?t&K9rXxH_6%JD1PZ1fPWvz*X5Wra=^TEnLPi}zWmuh^S7qYnX`ItjXQ2H z8^vym79P+Y7MJQZn&0;kr{=8jPM>cAYQMfY&ry5i z3FF-lkK~f%9Wv4V3tgA3=@y@F+tstDt&MlQU%9^aj@|2=V7cS0`nQdLv*UveXW;<5clw+2Ob+G;ulN1< zLQ$9>EUvo0<%!SMT;A8?TllJXxdXV@l8=7Y&4&O@8kRE^v6#}&cu7u zk~{wH%#Z3n48$cHre?%%+AsK4wYGEp%!{qmB{|aX_3J-dYCqaFtuV+p0F;fLss5|; zo%gF|pz4M1`JRa@`^jaTp9NT>_P_kxzx`qC248!~1%t1>|932u{?-l#rE_6+;ZXeG z-Rkl4oj)}lKD&0C-}eN6Ly3Qz z&%1u^47msR9uWTK!kY|yvui)ulDFG#g-cPkXREwpSpUS~i}(Mt4`z2P#P&ti0@y!u zVUOp1z?#X4^Lt`yMCX}W;|@Savb68wSNU=703XrO<9;VJK66KoiGkw}+lLDmwsk%{ z^ffxrZ}dF)(YdjlI~5u8-v6%ltKZ@`RA2ncb>4GPwO_3>ul8G$yMQ~uz6ZDq;Fb7C z{a)G?;|Kdo*JGoO@uQpEM=v-(ZEgG#@7Mlg>!W+e7=Lo!h4aC@>XCV8!l&O~D$nyV zHBa4l=gT*My#HC38W3tv_Nh~3KiaM8 zB!2RuTqysgscoKRKiYm#-vP459_#Y%bLalCA0G+UWRK0?(dcG<$5i1p`F`+?kNZw1 zeo^^AyQ^Q~2b)#QAS_w)GO@@&`Z)P47uzvX}Mf4J_x z>U(N>sC}vXIb&0OYw#TV$6v?xaG*2WCm#6fyPWt@{lBnm{qNlSQujM2$xoA~?>atn zxdX`eeFvz!A~|vgAiEeGe|pyb;_=13AZHyPJhh=?_X~eGSkye<77s8%_Xa*Y-WY*j+$;=N^ze!fxd0+PL*3Z`-->KYH@v z&tkrPy=oLZCg6L$Lo_*xizF*{=3;%`3#^Lxtd?7yWjL+)7*e74^!o8nQweE19 zzh9u1lU=RDJNJOpvz|LOU(MFy@2UBrz8|E<`CVFPX!3$uhZnx6wRq8kpXFVr^G)v? zyHBoS!{KGGCT5c3-%&nCe`^PW;Ss-LM}J40?BY|rr|#x&bVqKo_noKWoXpmz)*GiE z%wUkbVC~Kg-uq#LH{Hp}C*=j_qt-i*zqBtE9+8_Jqt{115Im9(UNL}cVR_%ln=G)beXw&%ftez~+%VfV$Z@(6e*FEz{O}eBsug-12+$eMeys zpWz3o2aRiCncA=3s=KMhyXNbg_j`G$mY?OPt{eM?rT+IFpm0LzW=-n;XSF})~ir2YWTKpWL!*zdkwbb0*mvC-#lL`qkQAM^F0E`P29R z@&&m(Iq$M}_!hlz6>F;wZyT@;nQ{l{9ACQS{a^iuL+%B6j%Mzv{iR3Se*09PTRM_~ zOvevj;~fTLH?=(e#fDE`&$#VdYvpBrdgwog%_)_t%JB>P) z+Aj|K-Szle%Thky?;b_PL+cwq4?VbifkkA#=wJW`yx-M-F;8Z3IR0|`|M*tvSLf-o zuQmByH<+nAXj;bn+Z>uY&(`K*Z_nBf)|&7Mbzb_`(u0jJ|KJB@m)AI;L(P}W_QRR% zvH3d+Yc_nrAUGBuej$IsiyzZ7-|X^tI>`pd+>NZEW8xjv_I<$j{=_}H$6{XW=erdC zV%fR7_QM4xbeQ-*Hf;It_nbU?r@uM+UH4Bm=a&luvDSH_@Mzy_Kb-F`>Q3I@yZ%?5 z&(Hmh(+^eW^xx4vmwxUPsP}*NjNR{Cu;jgDU-iG_g~3Pq2ZP*~=-QYCgW@Sx==!Y7 z@9KZ*awu%ob>B%+^ZQ=pu9Q}|<*tB|CHq5D_urlA4!{riio43lKe*6`fAdj#JaORL zaE<=SrMUxLF?MqA7q#Hz!d(~g?vgtIx#UGL#Barj^Z2!M$j%SjwiVaplp|5HrFGt1 zei(mj89N_Lp6GGe4{v_rEDbKn4e|4>r{`pK=NGf?=c)Or`}ui(-u3gopZDF=yxaji zPY&qZSGggz-!uKt+y|_8o;;9q&5;ilc@Mhvr1xvge_H?Fz5m0tcucHM9=+?|+y^e( zrzRC813STyZRL4(e&Ug5>YOzi`>{P9d?kJ}cS$v9>d;VUk?&Q;D_4=dV!iEKyx8&S z>lu6I_hRn%fB4bATFs-E?w7wsmLsP;Sg{?O;HA-tpPGk>v&`q`0QQ*kOoJWYv+e|UC|iBGhANB8Q-e#v+ABD%1B?kB`Jd3Y2Y@#lU zQ!?wr*h#u&Uf8(^&eLNHM-utKa&)M`+_f!8Hzglm;a{+mye|)#*=uZ~7 zeUuB}A^vg)>N_7FxOg7kSIiy1DBtJf+OE<1&vE{?Pv$dL`#$Qwd;j+{hRzl8e6{4M zq1$fLkN%#Ev#0I%n0>PzmM|NCnmC2C8oO(7>he3PhNr3h_8QaqPyIjt!e;kWhH&$|E$gBShVubw_IYM(qbNYGbwKZ;jk810-=`4HVL>+*XC$q#;~iHy;Yt>J^x z?Q1a)Kk;sD=lip_d29@;ukLoNvFEn&WncELfAe1UWg9-2I=^wDmwGQRqSnM8`)3-( zWBg_L&OVbIk*8&R)gKnA5A^33{N?HE8N-i{`g?n5;^m@OzAOE5uABpduEn>1JC{HD zIe2P3o#L-zI`e9%I&Xa%>~cR~6ZUCcPb|HQv(IWj9pdlw{HXpr|F!;$frB&s;ZnM@ zD}H(ZkME<~k5jYFrKaz`x!At`v-&ZhwT^12W0e4t5&DBKkNTh+wz|K z4RrIcKV$zEgwL`)eTLrpzQ}!YAsdiaj6U_=V;BT4ysf`{;f(YCpL)A%a_V&IcBtB) z`tO@YYQKN`n)aXjm;V2QU*Y(y|KYRw=iJDVyMVp?dE~x*8BSu0&xnVuw?3ba{xFck z>3`u_`(yv$o>~xJ_%biblXp&k)(E*nE^xMI`#S*n$zTrM{k<;rCV7f%EobM0i3Pmm ziMDO!XFBO?`lDxbojBkB#y{WoLzDYb+vI}uL(Qe`qvAaG330B;e~Ev!(4O6LUgoUL zJwQ&Nd&fGR+gC@2+~eu>(Vd^I)x5^w?7wju>Le0rDb0>N|=f?far~aWw|KxwU zTn%E6kLrKwl`|XH#C&1e-&hJCIPf(#<&*q&$AGc=m0E{Bn>G1aK-TdO^P&0u_q~n| zdH*MC$MW(&vR!glKk;miy!0abXZ3$$@ajvie&Csyl3&$)7>Lc>0rqzQ=X<|!4~V{@ zxd+f)OsDp{L!|bTNfYPz%N_0j$pv_K-l}t2|M&qPSiV4i81jjaa)Ef@yK->X|JL*9 z9-r!SPOQlT#$|`pfA8?A(du=+^?yY3ZU3X^xijFIe*Vr=+o)vdd=$M)o~?Ic;nM%; zl-Peqa}R91di})I)CYJ>EIsc4y9TEYr#`FQsoS{+sQ;<^q3S<9t#`*s&ENae$8VqM zUD_P^`ON5^+CP-N+O}n5>z?|n!EDK2^IlBv_*mzZV2r~5P&w(o1C(EM&OY=_UbmLN z$w{dT>}1SG(KPaqTP(|u>V~y^)t!LMc#$P}y5)+j$A9T>pGGIN^^AXq*1BLQHpN@& zaN<2OKWS>6J^G1N>+-Yz+yRp7I{%$Kko9QJ${ZOYhdpHM`cKc&N1Hp})Y0e(i>IxP z6Yth_{)ql4o>yE|4tlZgj8pffUhlu%G&Prf*ebsRAjj*QV^3q09(niwvi`HF^Fpgn zw)VZ!IWo5Xg9F=Ik2l}pAMf-x=WJ`e|M%Tx@fm+V=hZnQ!^m;_dd(kShdq1nQFZ=% zTkZrX?ARx`492fAkSF^0JMd+{#Q(hi!+@UR>4}4wfB*jf;9Z#04W?cH%XaZgRBWcU z#h;D$e4eA-SNq?!@@@5Ad|222uHft;>s|lJSoY|~7ua7L{mqk?e}Aq1%ZI6b_#}>! zN3V0*59bbmC;h~^JfTMC=koaZW~p|=-yJNtgxaIOYro(3BR6|#a-ll`zMA#${<8KD z78eHM;$T64I3$lheIVn`2PbaYw-%Q1v(U~5B_}Gr)I+sv*Xr;7J-^?5{BB_JOWn`C z!kr=Cf+q*S>)3wj+`5;1d?EVN2?o*k9fg5B0I%@_I36sobB2$#>iMq2yPx_Ws&=ba z{eE70r0(Zi0BS8Pt-(8Y0P}vIaP!}N>-e1bXdj^a(La8Wc#sG9?o)rcz&wA28ClzB z;s?$1U|snazn45HHsr#$ZN32{zvFK&4AImA^RZWAH}8o%S7go_`n>9XWIX<`bqH^B z;SV3-2RbacIco@@Nkoj<+~leQ%u@tL;u9a|k^Z2nS<#s90#{kO*C(Y$ZQPH;)z zdl>AE_2aYg4f|75FJIdCkFslO-%IT8_%HdLftNh`^!1EA!^_$)-~YuBOlnQ>>qg&h z_C=0)C*Xs8=I7S`eP19q`?L=peQzux!^m{Ud&!zuJv8w|&yVW=j`{Y3;{($l-JL-m zIPqn7fY9`fpDi)FYk%q=`}2$Eo;}7}b02UvJvvU=1O8-f8`YT3`bT$m5=$_k^<$u16K~a(cUmzj2`#9Ib(A zsCxiDn{WE&tz$c~(s5$q=zn~H4(9o{+(OT-x4z%2bZ+V!`;Y!7rW)(zV_gr%2m0Le z9<+1!ozv%?)U(W?YCm7*mtEs3PTX_EZN@11-qQe?e*T@yy{$j(6(tikYi*Uc`~lK*sgR)&SG1BPCope zIIx9hiM7@fpVqgqLF-&&a-i%c?$X#;oexdT7YAy0YMy!h-QcqKHji_c#@|_5?!be^ z2Q zc;Eg+e?F%Li|QYL6kq-R|GV}6o_BWrYQF71>2q#B-~Ih_f$&u?{S7GgYFUnNUb4|W zjjW}!xTe$C^>aUf!E^oiz=^2~gTWsL^e0c=*LTe~mzr-~-v7;OexA|q?p6DZtW8{9wg z4?dq<*7mD4Pg@(qG3z>azzZL`9XdIs#w}aqKu`bF|JZzNJn!7>=Pt)id`s<5{pSPb z;m@XQcKHXt+I(|XQ?jh{t!)hGf8T$|+j*?c`7HN$t}PzcI{&I6!GYe@_=dH~z3ERq zsvL82Z08xasrEfJKWp7<`QPT}y97HrQ@zo5Zdz>IG&Vdm_Vw(e`j1c6U4Fm^TKCv~ zWZ*N_qng|kImniJh|jM7`wk$+Gj>0KS$Lp$KF`US^yoMs8{1cFf2eVMcIem*j_eA% zcQKGTamy#gBE82C>a6wyXWZxH+&;VPOeXv3MQ1UsX8W5S&F}b)8t>--<}|sWYyA1< zk57JP@T~pr3fZTIUpQQ`am#nfe=wmxjFUs7^OH6PCl*>ax|dAdf{EBWzA zSMA?5{9WHW?;rZF{**sVxi->*VBJ| zKR$q7Ip@T>+MIZRh1yI;zU*0=dHsDyko(N3>8LfCGuAhkhQF4&KQ&^(J=G8BqF=GVv~+=SIfl_S=9y4 z`i#Ca;4!~r?wNd+`+{1+wrubsE7`jZ2J|N*OcGDdHV#ggzei^_=J&}rNB@j3{pvX$ z=2P>;ww*I&p78=`}+OA@H`mfmvwaNTFI~b?D_Wt=JD|E?tS)m{zTR3!a+Z^ z{cBY1=Zmn)+W0HkE`LkE@FE+m(e{PHp!=|>=WIe=@_$tSJ&PYqtSn5~q+0VnanN|{ zzp({AsWYknFmU$`6$hHwrKdRTT(-jf`y@c?%9L|J+UKMJN9CPJeU30A|f6`s0OX`$7Dn=s90}UG@Le ze(&+m=D+FioO_O+Yo254Uw#MhlIfOjeBfYEa(BF5cK!Sw2m@H%elUE-r~f1N?(fyx zuUqK)-?0CH2%aDb41YX9K~fYuYv)F{nMV;J#72{yy0`WabW|N|tyBmze^5|)5Cr;E z8!CthI*3Ax3@Jn;hz^8ENID4OX};!ly+5C^uKW6|weIJKcyNDVGUgm}%rVEWImVpV zTI>FfJ=o)nNp`WWx(?QQucL)i!{MB9cYta>*qA-9cYyeaWpnmJ=e*^IeNM@=ZF0)` z@ZsC@VEr`?)P45?y0ckz@o}c`UHsGgv2QY{IV;~-FK0h$nfWme?;hY>(1Q&hwS28- zZ*y|!*0H)E=2qW)IjwraHsbJ6zpWR$*=hG!4{KL=ZUg+%ih@aDr^eq2%<{vg7 z*Le=eg^pZuU3sAT-}`^Q{he#{_#OA6lix+(V~^)v+Yd{=$6Y)fx6Vh*^C6vHo%tQ> zr@!8w_cM0HxII>W3qIv|%0lmaM6R8imd|IsXNzp&cL0r>=MypTi05<%$NT1XZ@v+e z!-sT6d&J=<-v3L-V*ZGgrLVX-_22b$(Wvd}7J07?etz?(TXh-lIah5Ds{8D>&%x4# zZM5dEd(AN)x6hVy+F{9To-NG1s{hub+xA*(4ja(_X#+g=c*%G8;hF!Z|DEl_Zr|BD z@HyL5`-55yZ^YBH>N-LleO?4EXD1M7<8srT%&0iJu0Q}@St*yEFb`z&1N*3YfI z%jcV2U%d`qYyErU)?E1+SO52UA=hlnPJ28c{WZ2>>#6g#ziqJM&l$t#&6(Q!oczb0 ze4$m-d)rsfy9-qR;iIjt2V0}Y&vng%Xu1QCamM3})kFT{EYSOL#+Q%jdDUHhVAFXH z(tq1@#o2YgV(-ZR&vSd6-?w%DnkTGbH+$|gzwXY?j{WWX(5rf|dO;in{4>oN2_)mbSJ&@^YHQNJ7dP@S$o!{bMDMd=F6w$anKz={r9tf z^|HX6bx^+D7a?37nbU)v|aEBak<>{Osz9RSY&I|Xd{uk?PaO91(_O#idJ6@MP zhb-F$<>XU-`|&5AROh?@+(GpKt$n%&&78mE$e!&Z26j8*fXkt|D0QT~bFs}HpnZGSP_ z-9Pw{fh^))ePcW#`sedIC~xrptP_tK zx@~dTbI1G|A2A3X`vmFE7yPx){L)qZ*LGd~?)i3K{&`dT7fw=kqMs(-~fn zzh_O?ua2wX)$aP${%D$S9a#N0*FB)xA02;cTdp&oOc}q3-!mu517yCQ1Mh$KWH0e@ zy#KHIAF;pd(BikDdUa|094%bu`Ivv6@5c5ckMkmzJ@-9w$v$Ut%i3$!0O!nF`tz-| z_#E&5CD-!H&O`egJayQ)bJzdltlLj~AGD+P@0iEu^fz6duk*Yg`k!)LbHK{!>?_Z8 z2dMr#$JKskdB^Ya-P2B2UEl8Uu=^J=zvO)A@x1HN>s9?1>-l=xYujS;Pxk@OoRb|M zemQ-lmgP^n_p^Vv*~A*3xg%)&Kpy(Nu|>YW`2U%ImtVyG(lZ~jgZUkU3&LMxy>aJ< zFWBPXAzq%o=OeMlpK7~U1*`jDwO>6G+x&mn=D5qL^LXF29ao)|B`+JQ_0@jR-XOgF z$RL(A^4V{n{l^~52Fr(ZA`cq&Pw(LM%pW}HfB3xk4<2^E#3&!-rv=lo`rjF#gU0XG z|K9)BkdyEC&pJ+?Z(>0VJkHwTuR@}4$j}*H?CFJtN-$Lyt+G}jZVLF zPu6^M*uhvFANKIJO)v27{qJ|P@G~z?>CMlFJx_je?Irdf=U|=Rqply&S#o~goZ)q@ zpX1~Gk4|22UhGX)`)*#&z}Y%upm}~zFKfm2t|9a;4i;THI3v6Mul?ZC^SI}rJNDi5 z@i=wGZ`;^e+w#0W78CfF`_zB${aOFB@6MfPzT3R@#~w$2>11zmZ6BQRxb(=+ho1a( z*p6N4^yc2Zd@kN%mw#WwL*MGj}=yVqY*tA zm%fJ$;;GBX@8$Wu{QBS=-}S?N2BO(?f9O}y43wM#}w=APCoSHb%#(rbca2?f{H&3u zO;(H?@4+*URt%Sa4;fE8IG+#wk6K3;wD@0Ry|I1CEH2OJ$FdRm$>W})zKi|7g{yC`-~a58zYm){Vr%im``CNUo&I^qw`ATq zZ^r>Utd{<39sTq99h67eXUEL8!Lfetf8EP?*#Q5?J!s2!=%38&Xy5JtY|-xnfSTV6 za4*nzN6^X*;#S|^48XG?UipYUwoT-tEo1Q1f7sy21&2;|`olSk_Mqhb&NhetkC=EH+n;;?%Lfl$+qS0- z9=2ZRWaTS%P?xLQ)#WR6M-XFbI@)<(sPA?qYw-T#Vau zHL*uV^UkYWVy!&Zd(!&dw%$h!?0pu#`ft6ssP^G$POfV0!KX8|;MV)pVaP@PXAWF@ zFFH7R5Ul>I``$eu-L_1lb{>4*@(Qvk#kHeQo^ZUH7no z9P`*i?YAG@=l=Dt@~<)3*t6dWa%TP9uDU0+^$RZ&(F@} zY0vT$y7Cxb-{}w6`9X_sF(;<>K5LJ82iW&*apkVE)}T}8X1#{D=R^Kwle>DqbsP5E zG)r!ABNlt-$KPJo;Jx$j$|uQ_-eQXXjkgWX_doo5^`Fcd-=Wn{|3{4#3v9l9zxF5w z9`E48ch+m-p3Iv1MW^2VLAu$CK1bfj|0fg!*Sqj3!#)H0OV=$Uxc1E!WK9q8_$mhA z_gPqbk&&J7$Or8Bw1Ie7do14Dzgxbij1S!DS9YM=^$y@2p!r=twZD7P5rc>Q$UN&m zd-nYw-$SlLj)!~?{j$XlS$B2QuJ3#jb`|o$YbMR~APgY&0mk)^l9p~G>O zKXgxzm1dsP8&R+Tyf?_ zGV`DOw{zio`}j9aooRYSchorNxt#ZeWY~9$6L#jGvaS7`&4-_lem-QE&%FQf-8Nn^ zw|Sp_J?weNlPueh4_Qy2KkC@??=yF8AMgI|?fw3aGmM6f4xWpbm|3#Sx_^w%crtgk zhYe2M+2IlEr?1iS^)=QTJCpcqd#$+WobcH`13M0$FMBf?6WN$JbdLH_g@8GgQ@lG$z+ERbI-%?OjpbM_iWYbYk%UJyMuRh;XwP< z${&2k#(b9V=b0$BtA}^~561>G4mRJ@Cfly#OsEs~u0E^dv%#z5&?1_L|a$#BSc*1#=0{g0SMpI&S;^`3okfDhX2_3*zq zz|Z+&*Ln8$_^AK0_VY7d^#8&(*(V)?Ti0jZuojQW*L^_!Ft_C!`X4!u?q}?tuz05z zJ@4Y6Gr#S7p2y99^LX-`@v!Z1`fJDIlHYu>%iiP^>+EsY=w@DHCu_F7*kZS(&)(y} z@BNKOTpm6-*5>y^c78k7r5F9D->-f7*1pAo{j$T}d-2<_`hUW$Gnr0%yw%~ANaNAO8*$2{H*nzTJBI2HMV%jy8Y%X z95KK?Q-5^ndk5(hJ-GE=Jf@wq0i3%!yO9H|&v)kb`V|}HE3RQvk|p#F!mPTMhM z@3kHuJZt21#x~tUzT`aoX3eub<3J2pf7M?Ml8@dR{kHtuma8uh?!8X?w(of^XY7A* z9?snIeAlh`UHQ-ZNQ}|N?}7VH*#6|yjNOBMC#&CGx^uJTWalB@5xWO}@v!sZ+Ryo7 zH@w99UgNB6d#za7_kh!ubWhLA*@vIs0(V@Twn%?6XykW(?a7DD2j?B&i93AXIS)=9 zuetx&?-}#_`RdGzRde0L_S)0O$Gh}+%RltL=vKa;ez%VNc>B5kBOk1Ddv_N=gLd<{ z#)vuqcQ&?buZK*0bJ{pt^WXHX*to`e<8p^MwC2bgN6b9<;m$E<3 zt$oBgJ^Egv=I=fjzP|BscM_LZzTyYpnSUO3fG>W}K3;UvtaDbdqCg4 zz?xh&@59EOo4wDFY0G($eb@h`SNhNV5Iy@ipWa*Y_n|KzAF*`A|Je^GKF&Vg`MQ4p zCMq4BmK!g$zkjqIRk7#mc0+(Ec@CU4PT<^_wvvhKlG{QpZ3ab zJ1({z55FJyr%mk@Z*l1Rf9J6}RlGg(T{aLC+Ozhv1z$|PXI~u9r#LwD`_4WC#ex0H zEicc&j^DNSf`@;~8Ha3S*XYMabBsPa)TiS<2kd^Hug!PKy2s$+MfP;YJ6{z8*4S_A zeC;1{J!_veI}Wy84qM~{KTq3ooN{e{uKx2JEP1wnpE{*m@|DM&(Q-mG!S-PHLzY9= zazpbQo_5%}FPWpq%lT&u`@G5p>>)<1-{k9`pM}9{Tee{nd*1?myXpJzJxnzI}t+HaLBf?KjLO;CTk@ zZ|;D{*}%`4yZbqS`%Uq%W9a0y*Ds#rhY!wui<8d8)8@~7u+Q<@U%X$>fO^{fr?Z0x ze%4hNk2-Pa_2yhY^gQ*wo&hn%F5%ahUeyx*5fAFUyfg2}-IYOShyLivl8qm>So&py z3Hgm4*3uunv8K;2a&3FUN_ z=hb3>E!=OOXCPk$hivEhPVc8L-^NJu8`6KZ&db*8#C_R6_d50MjMKkbV9)f27uQ$4 z=h!?ty4NRKj>`WZO<>|$`+>{(++f7>oog_OYy?)Tkmsj^FG%_KOtKk`&xI( z@WnZJ#zJvjzMMK=`)oia`gb4ZZ+V~p>965=r~8(j&&YqmEiakRmVTRt9mm}4M>nDV zV?1JG``viiRsU$mn5_Fgv(`F8YTQ-tIpz;`*fy|st;0|4PycN2$Oq@%Prt0as{`5M zA@AWcXHGusn?Kmk^EV%Mv1Y)B?q}U>?r|m;eKI|3!y!M~;yU|Gz3a<2_GL5lTZR>1 z>0TUcyHpR8amsu4uQG36EZ+Ire9d0Y1wZk@KEKOf?gRWr9(u8zINfrt^^bF4&z%S9 z{Os?uy2km`-u#Tl9^H@GMXf9EKXl#S0hZtJJkK0j{k@NUH~#SLw%Nu14?8?)m)^VI zTJUI{o#*^>?jgh0?~v*6=MndK(9?M*8-M28E2KADZ~N!(WgB^Z`kNiZ{}FF%&qb3y z+eiD1J@L(Lc|`ec93ZyxkMd6VT~yTNy_Y5yIIr_Njd z!xqJY^>pz4JG)=?ZY);B0sh&}dU22qf^b{jMf=D*Q^uvoaTe0yh>O-dVkkWx@UY1d z-^-4tetTVgaI}2}x9;H=k2TMZ^w8+RzaQoO-agX?yT9JP>E4+D#RvIMzk>hBPo24U>Fo|s z98KNXgKZDpv%vw;Z~Tsf6SwW6pPhmy?PGq@+|AATlgAl*N8Ho>Y%53bQSoeEjK9)5 zeD47^d#qi&eB-;uft=VGc*FvqoceU0-^R!xw{_&{8$jRvw=d7wcwX<%{ZIek7cp@9TnrQk_4jzqH-5zRjZXCGe#}NSHDB%j z!bT&0wjcOl$HB7o?jP^0hd&oCKZEe{B-z9~{n9b$9PfScTXAe3xzIat`(@+veeu2a zJ$>2l34D15p0sb{BwojUdv5Kq@6qp&CE2zPOCNf%8(3`L!R$HXozJiLU3NJ9 zoxID(i>~jO=I*|KPCw5Wc*OFE^*z7F`+Ly#sl95$4sZ_}JZ&-W?fA=gAL-8~(+2E7 z4!TwMCp>(eOox9r{TcJenKw_~TH|~8jE%ML7i%W&!cROn-zU^B4~gf)C&xFSSLeN$ z=q*Z@VnM(A@U#K^vF8E(jL7`H8<6KlhXXg~=yHzvvi^h{f9%m6{!71`KlNVp>_=~n z9^LcP^F7FRY*8d^TJkF&(of|pC99g!lZea7-<>7ZZa?#KE#s}?b4>YH| z(-hJh7+@Rg%Ny2j8?3Xyx9MF@e8{u-J9}u%d9TrX%6-?r!%e;8Kk33f z;F5RuPuO{|e{t~HTv%-EH}K*o2NVN%rT>Izj&pZ>H?VIud&qeD^D#cpNblJGPC(5& zXs+kv)N%0X-Vx8veL3I}2TPCqNC)%py$RV$toRuh`t%pqe0yy>ACgNQUy%Odz&9i7 zcN{F7`D?#5U%^S!VPm;w zwRL~XCh>jBbCq@a^Hu+D%}Fa>=(qNKo^`lGmYo|{-YoWw9gakq4S3!gFk7Jq9;Ho$A^99+2V_XS73BfGQpS^e3C4e+Oj z_37`d&p0s8whtNC{%~l-L-u*hzoY+`w5N`b8kqeqaP3(f1drH1?jz($kFSY?c^<6q zOz875TYyiw54k$;U~|`;J;#qeJx-s3^ZY*i%GTS*Po1xHhYgP0!*5UB-~aj7-Fdji zLA>~O#)AGn59zRc)>$!^9X6Evb{x?6>f^@8Ty()Ve1@%__F)%!;Ax-ECjYUA7;ql$ z^u5Ee0s77XJ@G6K#QOAgGNKnB+Rg<_UV5ZUF#4~8**Umval}lz)6*XAUu4a9^1#>R z0{QbA2Uq>e3HCVh!QsDZ!j6HnCcdX9JKHNB&-eU{3%qZdv$62$zw5w`gXh|ONKU++ z@sI9-Y=!4stKZM%)BVdhIQC^L@lo8&`o3czyIkR&jvwK+zS&@&1GqyTy3?6F?9C3v zJ==HJ@eL5Ie{TyE$IkR4p4VR6)?~8pg6Ot>=U)4Kueq(~iQE5Q(!J*N%a(cdH;)Un zX3w8{tp4F&y4B1Ly2YD+$g<^GV|u0IN04pY`PhYx;&TVLPtSbt=&!MR;~rn`0NXax z&-&N4fFPXCeJH2xZ$kF|0+CqL8562sS zoxxLf^4MD(>~Df+o$uQYC@0ifm+$xgYXGlPuVWtn+Bs)_=YeB<~q)9ln1Ou6P)yKVxU-B5RJLu?6;n6-qaCxv*wb!4*kDA7q9`l zi359WeHZVo+mg??y1+j>7EiyS5d&)FbM8E=>;3l3;S0CNNAAPp7@z!RENtG-eefXH zUbAE2m^;SH7S^uDUg98sRoChF(SOIC39|tVw&%Lty zLvJ?hY@GU&Pb0gz>shGw;ejSyH#~p-wPP)tg5vcYgZQ)cW3Ti6*}fC*zWLSki|Gv) zFL3gn{c<0iGo{75^G-Itqt{11p7Z=F-q~UDWD~r19G&+gecycF%!!TBHvKuSKcRlj zI(fA*-t{MpKi%pF$;=+Up?z)b&kkZ^o_V~B2Yq|6{nb~-Vh zo1Xb&>K;xE^X1o`f$YO(;=tV^{pqg%QA-9edtLj+^NsqZZ*H}Z_G!MjFy4IETDCLJ z4(atZusHBu+VOd*t?hO7_w=tmy7%Cf{yNU@;p2DZdBxMe^ZYe>Pg=U~d~ms2WP5gb z^w0aj9BnG!T z@XGIwHl9=e;)T!XPVTRb@u|DMc*h5vcAqk(ThQF>PukD+vq7+$*BGDKf5n%~?#Rxr zn7Hcq*>Q2euH7@}*xAt6vQfSWUgwPST|DRzpK$SuHh#hQMhEU(vFZ^4*=juW)$CDImV(VtdbhlV#%X zaMdhx*Z2CQzw5W(oSQiPBNrU^zaKRhu*r-m`p>=fKkHMz>`cFczALE*VD#61YbU-q z=`LnWHuiYR|N7rRdF6X}d4%tsv20xoUiHs5%_moH#pE*I+$;O_28=G)p6&GtCIg?9 z%ihz|oO6EM1D-jL&O5HUzg^;94412tWscMDDtGd=<_hPY_UPPnW}5G;cYpav$Ir}* zBXQ#`&G-E-rkwKlMs@j?g~mKs-@kjX*I0MA_RaUN3-9>9f{S0W(VdUgkk9D%5sg?E z_s2cp_-@PIoq=pWA^#cQ!HLVyGe*Kq81Hb6XB@zVKjPrHyRgfTTL0LHJ;ecAurYh^ zE&jD?BzSFT=KOVRE<3ljeXjWUwC{xRf%|dAKrzDS?IniUS=-<7*S&L(y${1LoEl`@ z_nSQqzu@-Sg3SlfnVaL;Z_fw6wFmiF)fB zKAPE|IC{l5NZfy80=A<+zI5L)u+GHH1)W3CdEM}Qzw2MmY~$Ybk2P!U?8i6U z-S|4^ezxDoOUCT~qn-);_^tR)cYNC)ET@rEKY77PXZ)TGT4&95598K?$r7|ypUnB} zYtMr9-J6Q5Y+3w<|4GC4wa@GulSQoi_VJ^h@%PrNCAIC3HU3&?{amBJ$NBihJR1JE zLb&kn$^N6v*;5>_arWnf>4*B^gVEo?yBLZO`j6V&WAY;FkE8DYC^jojuJFq9I{%}L zue^T}WAceNxrCjyyM8!O^DX8LTs7NTXBIvfUA%u7h@Y7KN$5X$<|}*E|54!NGyCzp z!ooHG8T`eJ}@oKb%(CpTzt<%#egon!N@c||+#H$Bs%q(6Qv-TjT% zjNiN1{`v3x?T_9=jlZBf^FU|+ zO4s;3_-f8x`0^8fU1k3^{$_#qEFgZwRy9_B{?~u~&+S}(h1KVv`du9dwg2h&{oXIy z|M4&U%Rl%F|LniL@$W%%c-Gp79P;6mXP(FR^!x0bv(x#^7WSKcdDxg-`gbsyK{A8# z_8t7QKX>Rg=k%|B{PutF2V&g6ivl_ajq8K6k2YNWxi;Qlv6Y{!``TFlh@S5FgRfe7 zV&*94xF(;~C!@YI1`p10IRmc#70$W&Hp^#tex%pe&Wi~?W&<(#_x+mRykX-Y{642= z&Y1B_zQ*0jHVpL5}@g>M`TN2ag! zW%St@&sk%|8{Az(R}+WMAvo^=;=21lFdSI3P9L0Y#=E_myY`LQfgb7f!$4;U4{?<( z=3edp3Z_rG2Hl19yAyTyF?J{V5C8a|*|7VO`PRnsx+l5Po9;jEoR>ZGy}kHj+T)6w zbIA?Tgno+3Bwz zoVK8Q`rkqM3_f1%!4AnqPI3FAh!~m?Kg8mIkDVyr++bOF27AkpZxw2v~K!;^3lKUZ|`D*+;Z9vqxW?U zI}~SXdvWm*oc2OH?Kb^K4`cKBa^m!hJ&=y^N``V4z0F;9_)*3)AAF?0y_0G7yQ7i+ zy=ILTP3zbIU*q&|pL|32uetZ3kB2>H{Df!M`e1jyp!qA!r2ldE*+C=g?C1X<#?P%K zYjy}0Z}zKi-x;UL5tRF`XSK2SO#SHO1h`=HU_56(97yILXUyXzp71Ts=6;{)Cx7~Y zGw&PAYj9}GgRPr6@4fxVSN#1je!p8I*ZrEm?eBcpKpea$!`)oIN}p+m^qsi$&o1(f z`(WevT=$}XHsCk5xYOxtaAG|Fi*fvCteYoCXJL*fo&J2Y>-P-+{HW2nv(h<%!`J?B zv$Y@CdFIQn(S6d&qy64dxxl{c@m@|tn{BTC%8x;QpFY;tnzvs6%I7m~#K*Efz&aPo|I zdzzzfde447%6FfE_7pGKP`tMX_%*Gy6VlN*UE?>$vu}QWD>jzX%5R+=`pbXWfqj0| z?*QzOeDgfB4IQ#kFx-UXAuCuDulmUwKDzX~!-oUoGjaO;Ea5Z${)ndBK}U@pg4yO3 zWQXRmNxB8eYYv?Hhr8-F>F(y>@<+0Nq~oi3@ly;WKbTHeIM3^KZjSLNrYHW|XOD3D zor|D3x*BIs=iz_+y~nqPc^_~d=<-U}_wept?tu2={|S@tGqAT?wAm7zee;d4w0CpS zfW^f1Y_O9#Igu^i)A!XJ{>4LaR$k~#ginq;SiK5X2aWZEceSzk)`E9?TygaNVf~*y zilJ%exzDu0#MhrP)6IC+@cP-K@s+MIzWVXM!eW)~T6$a|y8KE9t(c;-W_+#tlSV%} z{c^#Com;r#JJ?)2CyYn@K{zlR`t+YVe2vei9rP!kx!1KnWz|pKD?VMrUv<8YU-4-@ zDDR1Z&P6qq?C<&f8Uxp{wb>Rgww?RV{#CE$uJ}3r+WzE89(w2R>lrYIp8Qw6zGmFH zDHgyfcQQ?w&$3-Ge6;w)3v51mbm3Za9kYYA>~OU~{u2M>{u;fbwKo3kl`P~;)+?;G zCvR~b#G^iVZFlomT;uk(XFQz&cL3j$^u+_X{keWdlzyLu%W0qW`=qmv_4bWta=^XU$k%+bg5na?rX61O>Ck%o>XXA7Ibh}i^zg|p{-#d# zi*K~}MlVjZ_v(IeUTjZTf9jsxS4bDQ&hT}uxp2|KY00Ti2aWDp^Xd8?%nsIM>(<-5 zeXbBqvgy~t1=B4U-ACirXKVV03-Wv4&$GcF{O+&YGQX$u-JExy??&XCb}(+gWC@zf zFTu~^q7Tk>?H4rX+|;`7+{HfG@VwLUBODvd^KRc-I!~FV?C8uz*LcEsU2*XY&Uv{s ze6T(E>COh$i|dc{z0P+Q*!da*?Fr6yr&F;#q5d3OH^*pKZf(z?x!LbqGW?Wr(#$pK*?i+Gw5EnO8_)gtiJVux;hbqaU-|nEf7Smk z4#<(8r(EHZbB^oZ!Srs1{qp@2T@$pItiV*0nF*>7$QE!!vx4p0gj1nX}-G zXAAck7|#jgPwpA>av(Xs_UE3~(6w{aUU2%sbPYxq%!gOl{2h$;ZVt|TwO@^#u$CcJ`eCjSTpHq;vCq z_qRr4-(rj|*Opw#6m8IaeGor5zn_Oc7>)6yjjs718ZG*GP8r~;{eODV>RZDe>G}~w zYfpBym;PP5&Na^O$u-xSLwBV`6D}B^>o|V!^wpwij_flphzUNt)`C~Im}lW?hpAU_ z(Z0i>30vJE1#z~+0k5eZ#}weo{Jw?YacMVlc_Tqgzt>fLnAX8Yksb# zpN+{k$Jr@4?HeyJpC%W&{FLr^%W1FT8@_XHExz#sHS=UmKF}LExuz}B|2=4rSM$x; z7fmwMFV_Vp-MsJXnF-0efjrFXFTIS9@7TR<2U{MULP%9 z*^^B9F5SV|Z|_NKO?p=A;cCrIIO!(7{mG;s^!J4N&UgK2qw5YZzX5zECW-?(l^gR< zx=+2$UB}Uv$IREKpLy`EHHSXhxpwx^&Unr5?SG94XZtfTQ9i)?nh)X)PQA&MeXcU5 zr#06;TDbRM>w@t&u5WMsWRMTa3E9Q`duO1z^vAz8d4~hD!Gy_Rjd;xelO{WaYmBEp zJZOwhbis*hzt+yX4tWKU-Q|K;Sa)>r#~^>_c^4_>us zT0_TdfM5DeIOQ#OrIWSkdWgK*dJ%z4pAXV2*E z3qN(HrxqPJW1aqdey8&t&U$*ycz_F!7h7rm-Y&TR_HKP!wN@V;*m%;_2e18bSJ=Mz znVXPo*;YT8}H5`8O%@F$N-nj`qAa%_=DmeExPip*u%4R zkNpcgg1J76bUh(aZPqCG*;Fe|R?|XZCk?|VO_i6)IVJOgXvF}eP z;5+$DUne8E-C?Hu)}$-B(29+D)+gWkV7_7^A$QL)?IDX9&E&) z%?IsaE_t%a%zyHg`JIoJtZ(wy7{A0X8tdgC{Ow8K+0Sq0H1uTTQ;m#QonMXF0T1ih zrG41K96P|3^P{&W8o1B4&#Z~}+;j3ThUrbV`~$KZ+E@DC;nCZ(e2K4da@;}t7B3)~ zrVp&Cj^mfC@bR}V`@->QXL9N{_n30nD?Y7nfADK!0ImJ4+p)If%J#)WHUjfuHZayt z$5#-IxDQ6xnc4W0*InN}*A_339Y8Ta4|f1{0FK;uzMr^sWCv#fzi@I9JMn4o+Bcr9 zwfI;+=dS(cue{;$xzb<9*4bw^ddw!)eB+opU;FsXHTV^0Y;Q~+ZOVF;$2gtt=6;+w z`y^ws(ZPA*M}7E@bZ3jsV{5ag^|MYJztSPQfOmcC!rRX{_=@Kpo^0Yg-IJB<8olX{ zcYY=}`sP~$nwzk5{W!DB|IU*259mCfHIE;(>i(}nAgsd>(x|U!k?uWv6t8n>_LRYk%^;fBZZN9lv?! zW`k*mN6lYyy|LYy^Y$BP&26}FAU^v&bJ~?Z-`pood^&+>G=2Mn=?+eRUvo|J&pa1DE*W1_Jgi{v%=E$8ceFHGIe(HSJ z?<}xmcCap=$p1h4v%k2TyjmZebB)V~V7biOMuU3~;y2$x(T4}`_!kSsMX^OE`ib#7 z-NT_lt4&_`)$GmQ)ubth_2~+4P4m`Wo4IrezQV;Ph&~yTHE3Tt%pA{W>G=whADwlR z7k(jS+d+`BY^ekS< zN$z|I(y6juTK;bQ%E!$Y8+4$v+(TFPLL(pd?@$<%1*9wbzJtuVPCj#J zYH+*8y9bTrsn*H$c4*b9V$nW2E ze*XI{Y}Z(xt>3@d()c>}-q@V?THo%1c!fv9u53!iD*jD?<7Yu$KU>b zf8Mx%#}{4g&;PdH`sjxP^HqKeh7Yr7vuo0uXCbVS2O1S^4fd47ZYrBJxB4Q zclm&9_T?*etGY}s@hC>W|A&9m{<~Dr*#6e>S3dS#Tt8^8KG@wtKYVe4S9;TN>TgVU zjr{$)fb`2Q^rVyd;yhh{&|yKC3F&&UD2_4hY{^BzEs`R1?o&-(rw{+0iF%dfW6 zqq{*cTHglH!uK5j|8ylE+0r%n;n_WX(d5%BOviFg<7@yH2WZUmYtVc-yn0R^d%`yt zopJWM*8N`|_r!;-yC}-v4*z!l30L2kY#V=$zlY{Un{;=)CT~2V+5FbN{_bYwx@bgTtA%6JO z_*K8S1Idxy!F*4S`3-8>v+aNc3@X)<$5_@u9ko0sdw9=L0j&6th4sLhVPi)_29fayxJFU`H76= zrT>iKV#1udaMio9`xIT#-<<>Nr#aEdT7}tUGLy4{X1Xjk8d%-Kgpv{CiB&PdGjy+(VzXnfBtX$?u|E}ZrvFs^zNNw zb#;!dwI4ptt-Y>|obm!6&|O^9jn3AHZFqjBM?MA1EsuP&@{n&C?%7~<%%1wzlV#WR z^V_}pt)94bceh1F&nXAG^Q)*?;o88|usVR|v1z$y1;{koT+qY_oNw=S|ynd){qUzgkY0 z`fuRCPZ~CDUviL{e6{4Ax`(^!Jja~{Hq@#k))ot(eTs={x%$Qiva2VLb{^l1C$8LxPQ zX!)B@G;;8>20xqic=rE!Y3=uZ{#QTif3?21e=z(B=N+INOUKT2kc`**@6J4Re$^+t zI3P3L(7ya#}!9U>gmpdCj;Dv{Vr!kou}fN)n5U0>*j4xIxcC2zgZxzeSKHKQIZMBMTz}WT zH8*L{e(Jt(Luai$-tax^Ydp=V4`eJpf^^r!1^wi&tKN;Pe{3dR@epThP&1bQ>;+d} zF5EJnvQ_Wjz%_TR@76@~M#rUhc<`a?X^-|L2cL_7@}@W0^g9oY)AbI@nQUZD`lmN& zk6`=f8+SB5fES0|Y1RHe@yq}4uD@*0PQ^^{VT03l#_^5DTV9CGz7sr_ikKqk$%`f7jmyf=SiHND!e{@1Se zfbI+Mc;XFbzwCdN+n8Q-DhBR+42Or9>747wH%R|STRO`hY?lv%Y%2yqwNl*3=VBHw zYi{5E)%+`5d$GG(g%CF_ZYEb&ygPdTx+w+I1|8$BM8*ZHz@8193f-~2X=~}Oi z;j8tH!E3v&H!s&u7$5g3=Srg=pOKNgV6m=m?v?NF@aW}8zMJR1m|}CXX8ZQ#*Bv7Z zh9leLm0!fBeKfdYwRj=_j+LcPI?;8<&I#M2c@Qshnu}+=?sUE4#EE^ySvumi_g+7L z;d5{P>m8sP+&uu4^WbO0-?-X7VRwOWb6x%B;@#MOV$uDixFR$AvI|>i^rDYgzUqD* zvjf|)1K1hE(;1iFt5I^=o4)bcs#WhnYrWa!&iLNZKWf3^J?Gn7J?OhL9mNBE!TNO3 z%sb;(y&J3lXxI#WJmOQFu~YVtlWXK4&#v2-8urlRtZ~(`3B}5lZtHoj(T}$}M+Qwl z*^)Kc>7n+8PuDxx{l}TK?rKMSv`;ZXXElls)u{IAn?ER?@FvHr`hV4P+C^WpM|d_T zL%O$bdV_SJ3%csRItK4Nf#x*y={NI>`wLp%{@J7YpU>&M>;L+GufA97_q%=Is`1tQ zD{LOb$9nOuZ;yQkSm%YT3YS9WwLe0q^tW&^`EcVpWi@!(N~B2Iej%bC`VuGb$0-B(SgR*`ueR6 z4?0&9lB;hMC7bu|2S9Vi_fRJAgCQyT9)R?gIT@MD|V2bf$yzPAB;be)@Ly)0vN* zhsJcaZtEUA^E%zlu^(UXnLVrh_LaZLfJT#Z#O40>zw7<_eX2L`to0jr*m>4|cF*=~ ze&pn*eB>q*In0SK``h=k^`D&1JNb*HAiiwT`yY+CL9Y%}3*f8k_08$4@y&tZ_3;X} z4ur2o4_1fCOg6f+0eQ>Yp!w@1XZ)YNR|Sr^)AFwFA$22Z&#LnUg!Cfma{!O6=A zHsEvg;wyghtg*%3Z{1hiS=zsP-25E>D1Ccr@txyv^wg3w{rOW%k5{_GcmK&=_{AsQ z`0E!F{OA3j9n=PKSMA^MJRA6%uZFW5{^->qa)Rt%-`G6AiJR840U44j{n8&E54xbm zhmK;zocPxAF=%Z$MV`?|yZdKO>ivSJ`mgofzxV%q`>W-5wSLz9=A#AO9l8tX&z}Ko znU-vHCUZKM!#=A2tzjE$;`4~|j6P~5S9HkO;LXCJxBxBK7ncl^}OJ3Dt* z<4?H%KJ=!4+z)Q<0*g1juXg}4(8pZo_G{|D_3R)P=z^DcV-s_9s{Z4vW}%g9?Wew5 zuO_JFn)&*{aIc`+g7ywpZ^%V|_9t6$0G}W9&58BT{)gVWbSoa>U(L1m#+_#&eCMNk zKs5+Ia|rh2StF*iD?A&?*Sij@{b&7``>M^sYV#dLBX`Q@>VB;nD!<>ZTl>Aj$;U>J!o163c z_-=cjcCR*MOZ)9}dHP+Syq$-1F}~9~T=gHl<_t_;*#oYa;4jU4Hy@h+>;L9&ecXTR zJ2UiYjTpew8R>gL{l2-1e>ic8zqRSj5BAddNy8scEkC-`(T$$g(2Fc$0bOyPf5F{G zo+~%0Z?pER%j$l$AMEX4Jr}ptcy+(pe}&y^tN(cE^Zi}@pSe$;PWg@e`Sl9v%zxF{wKb-^83%9-vPe&o#Wq$xZDkP zo`*YY!9#|nlYJiYtubBbo-A}qj;r2xWAPvkOI&vIB}EC-o{rr>E(NIE0>GsE!*mom#k#B9*wy>U0>nQ<6%92vS)UU|F-#g9{2;Vm+RCX?R($KJgEmnkTb)_e5*Ni1nSd*)Im{t8IDK8oZMg9>1N(myKTOJMrqV z7~ms*=F_d);_YuP$;&R+=H6$nb=Hdc-sshDc;~=+v|9ZM<+-`0y1#MX|D_-NjsNXW z?X}+hfAJT8?L!`N;G_PNU5s{5BVRu=b0((Vcm2*na^^R_a*pL+xp%i0^;oWx*Y0XH zoLq*Nx{r^4UrcV3*X334Zf*7NI=AtQ583c7K9b$od1WJdeCGWxhSQJH70kuq{E%x!#NA{`$s$`@A}0A zf4zGDSJV3zu-}BE{*#?tVjYcGjaEE|hjXUU&-yQ>$&=1%Gk)nxcfKcUKmV`(hZ-O=Ex{S#LE!!<^);W@u6^fLgycE=$jJ;|H? z;#Hi3aQXEL&1v!j8&&_|9{QjC^19q?p8YiSR(+D+$dX<8P`>L9z~|<=19l>~Yk8cI6MX9h{B-jh%yV&%iS;&>Xp z*~h-(SM1JresxX1CXu! zpPV3_`CF3%<=|KPPdt5!6FSgMD>mGXuJwQ40Ty0P@qV#BK5)j58b9s;?X&04wUb_d z*ZdQr=jC$#OMgD#d-W-~r;Z=>@xsG?&IMoR*Y@ZP@Jr`{9g2zW0Q)=7qTy?H z#8XpKjqOFot?Sa$c*lh}JN-Rl%^rK6-^bqMOE!JHL2;=$^B?JLzV|=-S%)VZZ~klV z&eW{6vu{l_yLNy7m-cr6eesVL4d2z=ku~SVHxYRG4;^|rPxC!t^IZLY-VZ-%<`^G( zXBT7pfb9H{J^0cY;4kme_*g5~%fIqlIk-IDSWSMf{?EEDhvF%p2Jxw`PdL|2{NC@p ze^ih7t#~Mo#Tq+_k!XD)*A?gRZ~AAxk?-U;``NeO`>RIt zL*D?vekLG3ul2t>fLdR@4|XT0{yS^>o9DVyu(AD}$A_$|Pj5IrlN z;+(zGd&2T9{pqfu{Q+Nb76gZ%9RIxeHU1A z^#4nMua?h#xJTVr>sNcwjQhf-9b@~E&wj-KIoZYe;1@LHe&zc+{5%uac-Xdf4%Qy} z*}qs|Gcu4TABq?8hi2=w^dlD6i%Tpe5;mP*qivc#e z)AbHV|6(8;ld+%w_wElmWBTk3c8=i1d^Ov+`m28H`;PyA|DS*5(VPwXG>;d$_{fbP z)qeZ*{ule~z$W-;__N`i?i0u6>KPe23wU)F%D=(=_Evvat1i!exK~hZ^nUI8_A9z8 ze%=SR42ut$)FZNri6Hr%FMfjK=c)7TJ451z?!|R+Kl$0G`fuNAy}tacg*VsyT^}u* zM`IsruW+ud{;Lf?srNtqizBgAUmesJE3^L3nof3l1<9@-jFz5w^*456y_lVS=Zrk) zXZc4Z)S;v!ZWV4p9d)t7G_4BLR@9pnBt}eR+bPwPU@yI{sjWzKa ztnLT956s$+$NYxSHwF8$Ia&96YstHF->HM#T`q#3u|4~(Dc5vf!s9Pz)SL-+V<&6W zI1pa`lG8xHv%y#F>+YuyXHGtIzx1=-{hnLj0ek~EzW+={pRi#mh9pACZ>M~1VHPQK~QUR|%=?eSUf{r?t> z+4DdBb?5i~b1oj;0npJ=T~e>emHupEUXDZaHTsJSys{tP(I4;PVV;HV!No#yp{<64 z))X^*qK?}KoxXK=kafq|@H-lFX!^Yey!IaazFKiG<%DB@?Q3j+x4dJ&UH8xZ`IKGw zfDY^n_9mHqdy1ny_xGb!{I&m?4E(n zocj`8(t$kI!hgmd*2;-=5eMu^e|DF5)EfC$z1n&Btozmc;I&@A8sjIY%a`r~ujt;x z+tb?l4laJkUrg|wKD}lxoPFnCjMBgQC%(j@wee*OO--0}xo-ipreABj`hlNybT_Zb z?asVDyoRQ+HE}_AifaD8DS9TVI}0ubho) zfAu{$YxR7q>#O_XxB6b)4~Fl40QS9KY#ZahfB*0NxmmS8x#_IYM}FwcUj5rRozb$z z=Cf=RzXx2l;0wC5p;#*C7^{8GjJyWlT|n;Y+mF5+7wir|-d!(x`}Zy2Q3u91fm06t zAW!mbA1yw{bfyoVeNO1Jr42%+1>0*csBtPrtKBuHOIb zTMXlewtK-xu|QvOG|vK?iZS(W*PK;r)!Ul4iT<0pvnIcHACUj$aIISUs?N)iujZ=% zY9&6M2e6oMzW9w@)R0$pnDt-WrF(p=*SAkHzpDRgTs8g`Bn$hIuevtJ@vt843zgeD3<;iXHOI zmfqy+Ov@#+{yU>H#`!h-?6V`ctcEXs_Nw;x_TROC{hnXH>sPJsn?QGh@alLqe%=Sf zHar|y?FWsm$IE_vO_pTavM%}3IlY{BbFX}j-aH$4A9&Lmho`qZxNGgQgPdZ{?;^`N z^73!{>Em~{z30V?945Dw%j73`{CofRjldn?@w0$_A7Fm(?+&o`-ggA>Y~-AG0AsEC zB^S!)uXMlS(UNh-L$P2^?8qJFjlBuCz0Ur&+3E+;JI|UNQVRzjw1?d85%|sdYTm}3 zcLF&6<(K55cfKMY-QAhVaMkm@F?#mn7ksvSr(L&wm+i$IJX-$GUdHT|OyFLBt`R$U zyT4f1+rRJn-&=29{&Ww(t38bIwTAuau0El;i+}5;4(Q&~dCsAwkA_Dv^}X+$zyG&n zXIo7@)tmz{t{)yGXLVdHH}6dBTK)aA{s-6GuIFpqxp8l{uAc|=wnx`Jpgp?_pi%$H zKI^}@Hb)+QnL6L~t#xMU@#_7r)>n(W15|@IRQu2RAKe|4@8z;;gg$=WMR)YCaLG^| z6bC#07VI30AI(|$=>2bPv0%Me2%5vA`Y$J|N3(X(!+iD2T&)^jjdZ@NXZFz0ny1&C zZx1xB=?=wjujZ?D zXsi(@+0+=G-pQ7JQ+ImP1Frht9k&>#%j3MC{xx>T!Sf;K^7Vd$FG%0|v(AhAS^wvp zT5i7gzIg6lYi`#1eWzZuaNP&!PZqk!mt>oA!^=JNk_U|Q>lLPRajyQL$M3;+?Xm0Z zg1zI|UyPLF`_Ahw0RQLy@_)JWT)9lWmm}>nYrp=RJ3#fmZvlHe-v7o+4tak=vKlW~ zzLw+YZm-Yex@;nbthtK^vBEBLhg^#9zXK()pfe-~FCnvG;h#>#z2> zJJ4a-oetKjbLMwj^`<*Ou=l^ZNe*lBmHpUXU0@G$>Gv7P2G+5G{fdQ0Je;;xlkLx5 z=@Y!~;LszKzC>N1ohu~f9F>X$4f2m z&T*BY_rIV2XAgG?bRfHZ6bs^AeRMYYNPMw5|CNV#ytR818GLZx9 z4uHlPCpTPoT6}Bb&N)E?T2Joo06{o=k*8b$;*;#@LJqiBy2I1o-mO7D`Nh+oJ*$Vyiae7;454Bel zukIy5cYs&#|GRsDcvaKIbv3`bug+`MY4GUXA?%Uux|fi5zJuscuA(2kUisRb^=!aK zo7d8H!*j0uy6f%A(bn|u`KWul_RHNXSD`g$-+spFE+F?gd*aIPc&Pg|dG2TarGIqS zhxqNc{;vJ2o}4xR3%K^;pPi?dOhI|79L#U8bid-&AUW1r^0PtlQ|*#F*lE|RMSr~6 zpWpqv2L#bM?1Y(W?6G;?rduoh07YUZ3dev*r$ffG08H8t2?_^WgFjz8JhK`n#Z zv}^5*S3IoYM=^))>g!iywB*<96<@WKy!?+ZC~h@l@-)}_e%|kGF8&A<8|?r{hB z{_+19aW-1>%d7so2e5_s?ETNjz5DxjRnS!bw_Q(Lba!wcfq$iccr?xcoj|rI2Gkg} zs~Rnb?YqFL+49uxPq_N8>Nnb%S9{y2cdypG!gmLdAIT^##R4C8j`JN|=#{=#DE6(% zm-_K3Ch)M2MhCUO_gZ?vU+WfLaN?Mr#^TNy=x3!tdzjbIRtK%uuNHdK+KVjKbOx-8 z2c75>?yB<~J2zqgz5c9^_>nigon^9s^n^y$Ig?9%%`{hT9b+y41BXstDP(@pDpgxsU;JHY9C^;#T)>UHB;!^KH; zz1nZA^~SdrpLr+fI|EtlOE&p<>w3w7;zz90i~Q5Kv!Bk_IH&*SyP*EA{c8`fI{*B) zd=K0&`#nB)fOQv`zYidf)#NpPWOKQ1-U0kwfS97&uJyD2&;BWg^RneSWmQ+mT>YZI zIyLouuV2o~ZuHJRVpb!wy0q*6y88sZ`>XlYa(0JzF4XecQB&3a!?v4#@d~!ruJ-U2C z8oc$@elk?YqgS7+|FiE7&^w6~S~2LI9b|Gt^V*Bb3Qg z9&V1Uwa(qc83K*j!dm-T)15<(j4!#;5l^yPtI>%JbaW1iaclGG6{as;?XC5u;fLyf z^}bpTR>S+*esj(SdUpY^+8&SY3-eBZ)?R#U|5^L#NN$bJ>OQ|Yx8#52Yjf6=x8gA& z-n0IHQTNZ<-0$y$eedPBz5~dEz6Cgce8CUZe{}j_e;0tqo4wR~d&%|st8Lj%9ppLs z(%l|(;_p|wU-9C>JE=I!26*l|vv|q>13R?~O43va9s7o9!z?Q0IN_K7YWhz4!?=QCsT8h%s9_xkNAcIX>FJlLEp<|bt8 z#`Y6K^PB(Uj`02U&41CV=Nq?R^}hQ+cYq+gbK`8_*>?c{rb^!dHqXV^*!=)+_CDh9 zunn2WZ9N^|vw=A@;($JU!k+nG{!wq#uUUKb@9O*=u61&%oL21z%d^o0uk}8Bu=;O3 z8RbE-5o8nRiM`Eo-}N2{KJ_E#6G6^-Ha@o-Nf3p=yzuKR!V z@BYDm`)7X5Zr?xqe9Cv}(fuku@doWjmd*m$I(>T3%l^i%bcdIR$wo$fwzE#d(_ZW& z-`ut8w>|Hg`MY&+atb-s{qFF|4o?;|(aMeSA|KhvnEoI?YJ8C2i*b0kBNsof}yf!@dsrG*HHb39}`~BbV@SQk0$h+Phpj_q-AfJhOu_a%14*-3iaR=CS z^8C5No4tqL<)nQdSbB&J`Kp}wwYi_&#F|`Bcd-NF!&c4%{^iyKo_BzyYu^AKHGZu{ zBVNfCeX;hWd)@`?)$b9A>+TNruHh9w^bb3%{mAd!h!Oj}^8Fnief9&319ouVvX67) z99EZ&$zWeNav5vv=(~mW(XnIl>qiSG4y_Th@Ydm}!F6Vh?Ppw!CM!C;#1@*bu>sm* z01rIr49|!5B_k-t^n+XW^*4ThdfnaN?%w^?{rT>%U(E;q+F$uyZ|(+o@#*{y;QVw4 z0PWfLf3mYfaX}|EU-SK+|Jjf~_yJG;Qe&LaS^ulSUkl|kwZMC*J3zHe4!q;{-aUX! z){~L`#RR$OARhP$-oAHd08V^ck6yFZnqYnVX!J;Kb)ni2e&Xz_j-waj?qu`b?`|h& zdPjl24LEzfx8(pl+5>EFvh4bF%9;(x&7XA17O!+qf3l&k{^O-t@7$4x9O|#yR6TZ1 ziXAa2ZrL2v;P8zO?X^X3@74w3tnJNjUvj{K^Zie6@>+u@o%oiHbP(J4T3f8-TWith z!))B!AD-U({eFJyuYRldz4@!Oa37 zJbA*Q@pBYsW8MLb>BzTaICwo{fc(X@`KzAqjnUJc?f9m6Qb+2ulRemieeAD^A-PFR zp|J*zyy3`vJ?rtn-(4ZTVja#n9KLuMi;;QO(bn)JBO0>3r*m^?)6Lp+2CqN=XP@Ni z?DWmw+^qfkZNG56@vHaf!Ug9YVD`-$s}uVUaQ;qU^}qG%KU}e~by#Ot{TCDJ|7T)? z9mD}U@E3dH$&b$Ee*d5KS-w)w)ZV`N*Ee@p!{N-yY1RFp91j1r_Y3@H{jbi=nBc2o ziGKP13akJ577zR;FMYPq$g2*cQ75$U^f7ME8DTGVi(TbEe%*Cn%|GjYWA$GX$9VM( zK+UT5XES@^sgV!N4&7@TUv-}2&elBVtt$rXDK_X6oZl%s1M>Oo8}os6uNs=xSv!B9 z9KLn!n+(~3jQLF5(gO{AKmTV>F;K3|UZ94SU;DWZC?~1^@O$q3em`q_H69d`VBhs8 zPQTyvGe5r{?B4@8f2Yv7uvfL8%vyJVSMPs%b!Mk;XP-~$TAY{jwhdO^0AJO9_tx$K zN8LaF4WD%vnD+p80Ch}E^|OF{yK|De?wacxfWIx&cLv2Xy|3^8?j%8RPFM2Eaq08f z+|MR*US~vo-8NYKKz!J$ID6LJeh1)qBhFgxjlb^#Ydv~%$N0Dd>=<46P#O*Uxz9OgNwTWCQjU2V_=rckNpB3!dHBrZx6NBSzuK zi?61SFaN0ZApOkYZBBh;e|+H3h!^_W%bv#Yt$Un>MNeilVhX>{+5r8Gfq53}Lnivz z7i0r{P3@oW{#}pN_tkd2Kl|Bj!|y+T9`Lvmz>TKn8}Il1f^Y5s-+gucU;O6J!Nm@l ziwAx2z;|$J#f<&gmwVX2IbwtIWW0iGQJtqt^%ykPx)11!_3lXam%r3`-}|fkeBJke z=G1>Ol!MsDJz(ysPoDI?)1Cf!n49`u`)VZpJ44PMzVxP>edy&ptNHvFgwveSYwPdE z%cFn&H~#Wo8#lc(c;T_>&ijMCtOwb2z6sKm-Wr|wmcDeTR)}%5^vk#O&40z@ ztp9!Yzt(nd_v(JNzuMlrK78K}=HCv8kA5G(zVqI(Yw>skSNrpI@;mS1ww!(SZ{vK5 zw%CXVp7O`ubH(Xn?@{;tyM4a<@4LWw_s{!4cL9GJD4x2{ff|4EiL=%n0OW6e>GuKL z0n(Q&yY?^n(!G2wR?~-%)Ab`*Jg|fFRvgSaD|eXRHSW8;*Pr!We9b$+9xuAS2^`=3 z)&KKuFzHtx-`@Vd6U0kwcL#8G$fV(~fp;v3jJhuFg1A3&rnYi{t$dXD>K%7~^g4y;giKe6cG&$YMWhrjD=r z)qm^kZ@>7FpPcNf*_-_ONA3Ua9*gH)%h#Ow+OFT{_|gCVs^|XSs0(ho%edd^f7E~L z(Twi^>VukJ-4C+G^c{UP`Hn8HY!IGZojo?8_l~b+Q&7FT*8f*;{P*x`nEWco$#-B4 zUVWSE-}~<09Yn4qpGH%3^K#mR^Zp>$$qm+`uMh5Z=RKh{?M=pM17ot&Lo@FE z-y20P6XW?8w1%Gf71VnB`|e-;SIf0o+l}`d-tYFEKO5*yF!6ZAXX2~>_UzrSCW%>X z*S>WggXASQnKio7OUxTj-_E`{>x%Q4L$kx9)~@|-?*Q%t^ZWlE_y6`epcwZZ;Cct( zPdSsHeFq~moY;Z$-G{!%?*p9spL(Y|IUlmFe&?J|Kb!m61T7o0UGb1T#JkujUeT)I z8=l|ltJSl%_qMnG%lYH}uzj%jbw{}J>^@*`=K>^`T#gp+{138MzL&?Rzd!1Wwd}_Z zZ*0r%YhQcrdbQ3a+G?c>c77YrT4bUvW<8)pRGT#2Rn!(Ipz^@Tz$5$x-Y*~|Mwez)&2eEU*7@vwfgV(K=|DpdFEPs#UEauEY1!2lCg2; zfehwe=?>pnXbs!Z-8%g6uphgq$J(_PJG0L6Y;13gFTb~@_d6V3*ERcWthM41P2UTw z-~DwTa2FA`?3AC98BcqfqZ=L3%AxRL0d2O?PfvE17lZV!W{X?3zSD_B(&!j`#lYT|oaBANPQ}p9RQe+TC}6?vQLyY(MJ$l4I&#zRsugamTyU z`wmw;uto8}KKP0oO-zd=xwUq84?tTz2hl$2|F|!p>-Pg@AJ1bfmY?4Q#J)R#b4T~P zc$e$x?#$ZvPS;mB^mL}Db5h=81AaG$27hPN9%K+>oo(@hhWv2uaN^OJE!ft0*P|6L z)}ohd_wR|WHFSpOOZ(sx-*Eh7?;WpVa?!JiF_R|u^D+k8x!oxPizQU zr{U=wR%@^IS3c|xF#FL3z2&R_^X)Ib)qn3RH7)v&puF3@a%Z`M?%9C+^wH$G-hnd) z>Wdq?@+12A%=!SwPWF<=XFV=|o6|REEvS)I9)XkF)%XAG&;HEzou38pv)Zru2H=k1 z{ID4t#S<_6S^v`)qystA-5E31()A9`_ka46HQxBrU4HEw0J;8u_U`9ZyKPJC`rmN> z03j*CfJDlq8YLJ6rIJpHx+!DXP(%eO5}}}|O1zkc4HdjeKm!3al|&($h9Fdq8W2H5 z5D_J@5fLSXAc&2CctNot$aQ|^v%YJOz0P{}-tRf*UOW4R$(TRJ9CQ30bFJrj_Sf|pT4Wrv$pG>@AHr6el=elG{5Vk?mjr%-@}lJ^$wm@;~3 zAK$~<>@a-`sdof_oTQau>pDgI3efmD0kH7zekJ_yL-pQ-&*3{qGK3ex@oxi&S zSXcXh^ws0L{Kbs?B)nz$s-wD*= zqs?)66ITDll>OJ|e|d1?zt`^$AU~HUk{_%FvMoOmC(q>P3-kn6+xP9YXVTMmPBj6n zzQ;pr#`VQ8**)7tkKfCGy#rAHjn#i^^0a;S*xNbg^zXj+fOh#^pB(&CUwbCI`Q$H# zsw4IlWAsCQcMmyHn>CqT#V$Vu=N*6?SKMf{FZ>`H*4!D|+nGK4=kv)8;u#+K@k}N% z@^Nuto-ZU9sI|9y0Q+g~t7^5{uIBUIS^M|h;J~@oef!x9O^{#g`oHM$|7yQ=b-(ti z&aRp(M_N-)|Kgwco%;?jc`k>MogC!7`Wq~0e8(`<45g( z{XM|GE6^R_`kg@c0Ji4uY$UI-IbSiS@6PTsggz75{2sYKezR%zzLWcIj_>r0mp^o; z;5QooLl>@QPOS&4Yk0DzmVa&Tvi7(q+~6O3&-=g{cP1XX1Gs;09v0nfmkjh_?M~Kb zbMWmWV|hQiTfa-!_>d3SLp~v+eSE{5rZ2wO2|gS?oS*3PUywhT-*tcCJ>cVBQ0`#U z=s43EeB7L~@CM?wJ{kBCoM-aRd9`lVe=;UJ8ua0NN9w$@!E#g2^*{RcU)uK~^}9Cj z0@ZM^8sB>3VDrJ|)&IU5;NH>q0lJTP2S68ij(`4)XEKp-%6->|V-Fq5t#n!qkn`vJ ze|2})`agC2{Xg}8_2spBN0{~7d;RKv&+W7Rd;XUj=N|pHz5{Sq|JBEQ0{`UE%&A*< zvYX>K@@Dwk_eYF1rVEWM``K>YS@127o3G}}_2#PA#^RXl=Hz?6F3))n0IL1w*a1%X z=ubMv^Z7sC$XE?a_MUa&Jd@pgv2c~&xiilA$=y2uysEi;R;(7s`eLT%e>iZf=Y6ja z-fVo_xO#u?S@CENU-V60Et`YMP8NBp`j78?91h%?F`GmOO}6a$z50KBr@wy>INs%l zZ?A@?Gd%7Dn1s`{VpFiINu*dvNxH|w}6$gB0-T~nAyDjhHC!59Rwf^(v zXY$W^G^?HYL$Snf=!)OThdZ~f{QAhT2V7%#bIrK-1arQ7LF>ldBd++>S8_hid;Cps zyy1D%SZnSIaQFy&lEM0v@x4C!=-N-u=%s`7oS%tD@lEgcX>`qgY-Zo)cl*qv{^zrI zu)Bf(2Z;Zoj}|{b=Xx&s=5{_h{4ySsfgJX}C%1LH)1^9Dt&AQTK2vx1sLtX|UQ(aU z(}iYU%cu3tU+Xv>Rmac%nuBL-PwVa7_l&isHh4xfzwNN*JpcC&fKKuYy5QGjGXD{M z*qa}L^uV9cl4sSNS=)F0Uv*!NR@2V=!0KOXcw=~SBG{ZegJ%9qKL2k&T6n7#;1};; z^6&|<^4|M@I)JP7IasuU&e7C%wLqg6kPPWct~bV;el=TOlT+|lZJoK_99%eLQ|FsQ zCt7qBFV^D^te-5-(%y=RVnI!?kL`=U_M=Nj&Xp6Z&0vju{IgiDZywHB$CrHVF&CcL zsSm=L&;RZX&c+A7#v8ukHQD7da=_CkyWE&h1+K-mTXXgFDoVtz|`LWu6t*_O7FdY5l#=BT2ufDUN**agzH_%82)l+bv zxz5-%KX_C3H$T<*wO*|c&ff|o*L)AqI{HMXyw)4r??+a#~hx>}w8k>92c%ju?@Kyb1 zr`6^i2F)qsdwux%&ow5teh)u$K0S!Z>a)G%HmCNn7rg8otj-(HJ|CffpL3wO>*iOF zdjz`l$FHlikGYrnpC5qy6o32#5AVs{dUE9hTjq5(KjIU<@2AG%P3?~tuseXYYJaeM z!mjPdU7*_D`+T2iSU0a#^C#S&|9`cf|JT{o|Gnqn1#i2~Z+$)dfeh}%=E?98eazg* zpXk(HI>gKKO}a}T)gpZ5u8IkV?h{E^=t zJkOe7e3f~Q$gP`w8E= z1CVX4Z`=jxWZnVf&+Y;H`G4ihd`BF3HUjB3nYSE={MnRD?ENM6zuHN*bcwcn$j9?p zIaHkjdv<@!z0~UJz4=---`WHJxDzyfh0CVh0bb78`QgB;{^KznB)_pUroG?m!?%y_ z#B(~B&^p~aXV<@F4?b%ze%Zu$_kZPg9KP}OdqBQ2?*O~M{E1H&hc9P8es>@*@a?U? z19#)-A3l%_NgiW_pP-}4?Nl{oHaM;sQ<=rydQ7}=$#DS$-tk*4WkVB%M^dv=u<%Z+!nf8IB)bQ;^ICgPDFidj5^_|LZHzU29z{94aM z>D4(kyvzU2j|X%5!RtK$UurzP`Akn<1Ie-B(wm$E2c7mC>+gEA&ZHatd(9;WQh zB+Fa5p!<&;zz32)A3(P=#Ehm6!`G_O_I5`WxAn`TYVxe*jVEq<(CT>~tWO?3jmPAj zP``W3wf+|u<+`3b%+nj1_H5gZ-|DH`>V9<|9(%yk^wqVq_OIN89vkxaYzOzmS#@#N z{@E{AZn$X8`n&7@VGn1JH$Tr`pV>N{(XE!B?9UVyoz~GrYu9>t_Ta&I^JzTpEMMA3 zuipmt%p}M119t&Xa}Q`tZ|sh@+2pw7`KHhR{DJKB0Xm1D<+rm2_ZdB$+2B;~!S-}- zc($*aAFa8!IS@T@r$6O)hvDydhx5$#ck}Sc%cf!g-E^?eSa!v{@x%TL?(s42Ts}Y#zPooP>vgW2NA_ZYFFAM1 zb;!#vHSgd-wYvTl-mP8t&prAzdnf&UCs=bqc+n3RKK}Vwwxl0&RR8(RRrc!`4*S!C zoJ_aw7xbyd$YFOix|%*~^{)T!0jpJ~?;t$&?{00=eTPQpRC~p1{zwP>xV%6&9Z!f)Se2YHNp0!^tmv7|uYJRm~)^7dl*jeVfSJ8w1weF*>RsZ$(o}2nlW_0n2 z|Lke3CF>m|KOH5%+HSvwuKhuH^nj;%2k0&!uGH`#+0gBt5FW_a~%{$&Oca?Z+$G$gFQoTqKvha!)kSL4QBvubSUy^}W}pe>9v8j}6_!>_f9U zC_lm7>*F1l=cw@Dz(2?9I|A(o-Rt-FLyyn`qQsyXLNXP#spw;n2~B$C}z@Tur~$@|XL;%X@>l|L%@p-MJe1H~u;|JJAbY$G7!o zw!fQ4lOD+^9`oaTX`iv|1c&dk8C$3gnss}=tuLH@v*@GQy__$wYiB!uw;?~?G&<18 zbSLX|Zu`r^Eq3V7*~z}&Q5|*E9G<=@wD%{`@I(J(-nKgQGG+RRKEzFageHCB*Bqa! zPR%-ht=p|tm(~B>U$tu2^8v$+#vIq*`;R+BbKyr1PVW=ShvHVB3}oRGbn}tte?Czx z*~2gM3-qf0^dcfjPAi)Z7Q~tQk*;*YLnOo_G`IuJ7!b1Cu@8*o)ti z#eVXTl^29?8Sr>^J3otB+POf(BinO-JbPhxz=! zeQwRG(bfN*cUSIxK=UgPulB%wc|Xt`yl2gx)@Fas;aST*_(+EMeoN--+UE1n;r8Fv zKWQ)9oc&`SFYKT$vlsiA%QtUr{f7Ow&y01?vFM|%sX_b$-R--Br~Clqr+mO(dFd+W zvoYS&ANkRulc06_zC!O9+z;*`+`E=d!7EL4vaP>;RloUQ^YIfM{BHdmP>$2wZ=Lr{ z{^rpsj_9$RXs>+R^Z!}X)pl*w^xf(oP@YtuPMq+A?YqM0n6Li^bPuTh$8$a_p38IO z;2X(%h1TGdN6L%Q0@0_Z>b#mzT~G@elN(Q3bsn_8adn|_klw5r*EdE}o8LJ!#>;#T zo<2}5$2(eAnXhBA6${mW^rl{o^9l0eGr62$9PjnfvgU3u*RFGujX)RaOj;~%KO!q`7Xd6fxjm^p71ZnvA1)`maOkVKGa_N;HUWzI_k)L{+~I0 zuOE5-z5d;LbI+i&TASzM+5EH-x$#dI*4~qQuEVEKx~IeB&+bn0O}%!;oO{||{O>hz zv@;%#xyBRcYke|KdTX4Vx919r)pMaAN^CiAuUd+kI-T|m-S2*Wp&9hg2 zY!3XA=6U^!@9b;CTX`Y>r7!U?eS(ia^95`81(TodqDMDqia%$;t=^MSGoE#!`R2fH z(q`@Nxzz6>w{8|c@wnmQE7|h_^Z0)zd-Gy}F3C?1^k*+U14#?+@#vc2ww))=n z*YEob=N<9xPPgXvo&|fi)4QJYUb*P*-5CtF5%c7OuLgL| zP-D@i?`&(&yl03@F-#9|Je%mlF^}%Xk>B7hXnf9_Ykd4IzjJNuQTx?CP5s|Ei`O$R ztbQ^(pS|QS{OTw36`})&e&qXdo-rMO>^<`g`g;!VYYqSDVfLE~Zut*+CmtU5S~cLH zN0-|ktEPC~?=Ap#4-kL+6o2>v(Zjd;ZT%|qvoSrCBkZROw7lPDPrhIM?_6is?63b3 z_@(%0c5Zu(v%6=1I>5W85AT`0ck}S+u={d4r5AD0IDO|Ec=P-V;%D0TmEDI=pS7P) zG{5?%KODY7_h@c858s%6kC#&itN(3$fIjm9d4YUeo&~R;|2k*O89ey?n!g{i(cddw z9Qfv1dj_BFbJl5-*2FCNLF8Ng7yqXN_Ms;^|E|e{=Hck)qx7i% z*4|0)8D8@f&b~A8pHG0Ad_V`};ipsHyFQ%afKQ~)AU!%Ko}H_ntC`(F)I{|V?CxSs z{|dX`G~YOAzIXkzhWfkn>VMDw*%;h9SUlpD-N=Jy{X3cG9Gw;m_Mu_yF0S!~bV~ zjoMx>1{d79;ehpLZqRpja}(b6-AB~qN$a%nkXfvf7i~72Hofa#?aao`>Au0%<$336 zjZe5_*=rZM$uVV#_d7_B;kHhv_!EoP-DTVlYkXNNPvc$Ph6n#6ah^`#qgBoW(*s|} z2Y-UYCyce(Z|rXiC zeZ`w=^}*c^`mfGibNt0zK7e<&_=xOq;Mz}rnpi?JKj^y-?koE}$8p}~Z}o%xkvwQs z)2G}Y>2F$x{-$o42kCsTfzH2a@<8>U?;5|S4}8N-kMh5BJbUm1`Y6WW(NQgb$QEeD zzy4g;?|ye(Gk&YtcU|wy&H#%8GT`~6KEW5@+PCFjw8$YJdLE-kJd_Wr6KaNfVeIVg z1mNte=jzupc(-)vUJBV&M2An)>oy7aWV>~Ah z{JVa0ApIwwv1T8evNK+1W1oHYTE`RK*^#g27tiFr&XW)A^gtK+0-r}W9zbWui@w+c zYw>IxerprHwKnl)-?_%cdOnXweDis9KN9Ct4|h61Ge77Kux-2ay=}UnakgTQ>}amF z*`IUm18dV)UhO;1%;tBnc;^H3LQhl1xBAY7Plv^VIq^XDntQ^T=ij0cI)Y&xyE4mj34Xso44ejYrbP(4?WPOxR`!G7d;1dHdwQF z&o3T9yxxt^`9mkKaM#=%pSX(_`t-He54=tP=#!uQ%@r49U|;i7*1JADG{~-@G5vrp z%;jT0?bL2*rnFY$qL0U7NrCaV4F10R4#2kDyLdJk?cKG-3giLYP% zyh3u=H}{%j_h?z$b8Ft5eo!vJABZoqOk3v*<$MrMe(ssOm^a@!@!)fLxYb*+fBIy; zx#0BMVtn(x)*9bI=bZAvy~vlG=JktLwj!IoQ{KBix#WfRl11x1Nb-|&%eT%6ZoD<$ zZ;qXp4!~FA8-1h~P)i4MzPVEmi!OP|myFILM}7+TOLAR$DTc~G)`tv%Z81oUd**;!c+c5JA8DCCGYyD?akZI*YRvjmgM>pDDUG79qrB+)W2=7 z#nZOW0o6pc53lC&bhWE-E!$3<<|f^A2u^*ZlYQP=n>rBle1J~AM1Fgw{OPoO2i7OA z? z4$=Wx(O}S~!#U_6N^3dN}q6^C`H^MSIF04fy%8{zvly-TBT>d4(RT z|70fr&WVdhy6XOqzSuKYyy}0Kjcn*8;~nfgGUJ^emoq==1MtzIzi7|_xo1wKBerlB zTcoE)d>lTy^tA0e;EbEyUu!|W9)5G#`JBJ#AiY?RU%VSXvpZYmBjn)c_`b?$E}c8a zI31AJT>cpE;I;28^0a18V>I-)eEO@+K7YE-b!IZKGn{Ag-q}9CAUnN@Uv1VtGOBxM zJ5$Tf@b=u|-Fi6Lt+i8T@}qHq>4D7YEuVrP?I1ks>{g7+`)q3MPS&^P(4h-7qDK$O z$==Dj?YMZFeqew6P91D{@PF8L%d+~>Agg}*NG?!I-aE)A?&S9w*;}$cTT2IgAstlH zX6?)8<1alt<{!WP&z?cJ$xhZ+^T&AVDEuJ#^{;VYOn=pCJ}g$hBnHw4`Q`n5pjZHV z_9^boWs_~YB|~{**M`NzY1g%u&u@9g7>!qJV|@C^K`UJZJ3okyJ>-aY<8Pu1d(h(t z`2(8CNDun)C_m7H7%5Kh*}8tsTrzC9_PrXfb6<^*b#l)6bO%nqfD_O7_c=`UEL*<^ z$&ar6d`jcrUyFm4GvM(#=fWvIk`t^?r|=rvJ7v;0*L=|YwavBm;Nuz-&iW=kFzaLa z0A%0t;p7Pq`AG65&xRK}&b{e{552-Y#;@pH^po!46ua^P9>lZ$oxS1n3wZnm9$5Ua zBU$C8^h!qSt;v1qe#)SaE_s6GiSTv~TzL3^gHCcrGuc4Re7u-I#~XcoTlwi{ z``FS!ag+}DfqbtyEB^6=7dFMKKDd2-$TH`WAB|!lcVNX88v4V*YN0s>|{39(ofJDTU*0l^LNnP#JQs>7s8>B*7-p`@lE5x z{wY72#ex`67sxv8fRA)ze&2}}EMJ>TCVlwvKIzmKi#r|{G^cNW>*S5LdCeT&(*d90 z&(@y#{Ihv<>_v0hfA-O*V>o;PoXvV;{$UKyo(Z4z;c59=`=SZjn|(cu&P)!H+AzBO;}^}ffK z=>zO*4vA6zQW4qR}r?I{@wg&S-{qU~zzDxP(i2U@)=jU1RAD2K?TQ~u;>ELY*tQrY2?nf&4)UeOin#>FP+eE80UpMA__NB#EbUz>e%F5GJ7v;EGVa@R+X?ELwg z$e#{&K3Fu+i#EGw`{uxz2j~2=el)=BTOZ_W=I7iqTIT7xTKLgBPkv5MWSo9j|9a;1 z2W#=FKjWjC2F_NUoBQ;y=e#%G@-7?mQ-1JG?Q9=AqeFjuue0$QpA%Y-=PC2VnR}BN zywgkb*7o~u-Cg1TJjPHpv_k2`0b5Can@g`=w|9#sSNd9sH{qi&C zXn0A!VEmDD_FD&=54JYIzHxOieyX2r)?N6!%8TSrpY+f@#o5lgLUy>Dzv9iY{(CK&?dvXvpDpw9eSE_E zQlGakTcgz-u6tOJY|eE?a)NjO-;-gkhku2Ww*EZZIr%t#zbhNlm$T@hn5PG4$%EcO z=*x}9*S_%;w>{5bG}^oOALqQ98|UF^+6vEKYU}s#>6mV{o`vIwE%dwVPoA3tYZJG1 zbIvdZv+o`3{@)%j9kA24ecpYh3w+VD=g9m3zjr*s<-^wU-8okcHOK$2{yt;k+DA_l zbM|X=!VmL*pI}$``@w^LHnbvJ?(D{zSY03J8$COosZ9HoA0_$mweATKdmOVoOOkr z&&Kt?YkBYJ(Sh@v`>e6GwfwUFgmW*vzBAmO;GCcPTaON&z6)Q!lleO5oOrqO!~7JF z);|L6d4?CgAiVluee?8i<@YBsE*6T1JLoq|=6$}6uV;PhbFJS#+0))Dv{q}aeVzMV zJnw%*cXzsom#LRIH~Z-(dE$T0qcdsEwQD~*;7>Xx;)(AS6TxDaf9A7yuo$uSC9QMj zo;j!g)6l_3eB=}7Qv;tG_|(9s20k_Lsew-od}`oR1D_iB)WD|(J~i;Eflm#5YT#1? zpBnhoz^4X2HSno{PYrx(;8O#i8u-+}rv^SX@Tq}M4SZ_gQv;tG_|(9s20k_Lsew-o zd}`oR1D_iB)WD|(J~i;Eflm$m|D^%HvGE&|yXLncbAFER`pvxu(G2IO^&21h?c9D} zyerMwMdB*)tFC5VCP=oq-Z|<&d&i{o8zSaEBJ^lVP>`&M6-S2As_Gb3)#`E_% zKgoW&r<0$gKImcEE!$opoa>zNm$dXf>CF9|0g~I_3iwIN{z>~&1J5*2E}AgEG*^GZ zey?wC&QJW={|FBJpJrWnrjMWYJekS)2Yi;} z{oR=7ZT;V2Pu9_s+gp$RK70MP6fgaTlz)8J@~iLYcaC#6PZxgw#h>{HH;>?-{JG!r zxDQ-#l4IW)##;1}?fRQp^UdA$@t5wuYagJ~?A;mruCsUo>-)Q?Yy_%X!Pz(W7nVL- zn{f8$p4o>(haeqm`32sz{8XL%E`5O>@&h*L-sgNec+2MLDEn{7r)!IbzP}Z7&K>>! zeoXUQW^4A0#y>Q+!rON#`!iZ}GVdebMZe$1zemg2eB*jo{%Pj^uJ|Rz4iwrgiu>oOy10 z+Y^oNfA1w)J2>aU1(P{l1kvV0-zFa7 z(>ZdDyjz|Ydo_QLY4(l%Z6?q&2{`-BUH`V3aevzp)chStu(jxR9)5P-T>O3i@BZG- zfBEURf#rMpyvjaxpx@t{BBOrtg7G`&>ie5k)`Jtjeec1}P6yfl+sNMD>7RTlS+5We z$vye~Yk&Bcw|s2(*MIppUiHnvHJ@$&`akz??>@-pjl+ds>&yx14{z*M?n#z!1L+|@ z$nUaYa$lkK=Gd1EwK?|p^qZf4-rqL0Rt$jQre|m1$$8+EUyk}Va^LMmGkt9TIC3+c z8`tFI`k;Ea?=Y(mcmIFEXaBL!I@}W;{q}7dYYxtpe&hTf&QBum&*vdNws|>n_~!k1 zKJXmSc*}e9+_2XVdEkh#=IR??=O*qI?^+YA-`Vk-%&~nrmQDDYmfsZ{%{2!3=gf1( zkGa;K#YH|Jgs&eB^oxVeEFaPxp22S-^K}m$@G*L(+ZvhmLA(U@XT!6x_zjlR-h$+9 zUBA7Pc6yH&GUN42W#{AV%g)&_{ocXsaR;-Pd`FJ*UeJ1N=0S6fqY?cp59DSS_Wm}p zFVD<7k8`GO`9M0J^YG&B8LTD-lPTGYk>Y}`(0Y$HKL}5LU_Z}BSO5L!n9pcepPuqM z(^%8TV|?Hx-e*4_2CMze(ZOB6Ikan?1x}vQfw}bHF85KnuXy}`9?+ULnCI)){EgbF zgDJayc4q(b-HZXge%IO;L~FJyZ{oI^c$Mj!jA!0MJ9)46h$lAFpSm!Y%*g?oE5^I` zxa-V*I+^?Qoe}Izyk&c_{7vM&+k;j$UtBmR-w$5((HM+B5YN;9jhhd4|9ua_pABEm zOAmbb+v-6KR1?Um(Y-US&Dq5Pm`?=RTN4B1*2DlCvw5}$YjZwdNoUawCVPD0760_` zZR$ca&_R(Jt-|BAeJqSNvd2cT}qj!a!fp_nKzKN~HN%=nc(bbpt=mGs# zZO!lTMHh4vPtRaDS3Nd%X8qu#MF)H#9{EA`VDoQM`|@+LqJ^gZY~)QB!RErtU(nFv zaq{2%Tr-!f?L|{R8%!K~i+%lKAsl-6Cccm!oEa_jr@Z;Wo;&ca_++t9oBig%{J;KO z)3m2>JAU@#4A6V`O<^7ra>syoW!jT*GC!PAyPwwW8 z*-+iOtLI-bhXy~&50jgY^(UPAxbjrqpSi!eyJv#d-h$TfP@7}AFwalbtuK)|+%paq z4RVr6)7SV#^K(4s;g{dDPvhWKSMcPo@UJlZ2`3-s8|$;3c=#qck^Si}`+K(1zc%NE zqu;Zl^VwlSb|RDcJJ{UZ6Ag2kGt33`YwiNAStrALva6fy9c}x{aiF!g;9Qdj_udac zI@`Dh{k_+|H}>N3l~4R*FMjw<;-0P8*qP|21H4VSpY@a7x;^sll>e0Rn2*jY+(XCK zp0%l`aJ9`)#n zm<}&p7$;{j-(G9=+iToh{iz>&$XN}TkpGeWSv|03KV8o68J*`GXHPp>duyC*;FfjK z-g_3@e1mAr@#=>=q5d5&`&Goti1S9ThmGM=O&I9d{!#^VX#OZu|rH6Pvt zTx%d((LwJR=%6|f-bZAI!*A>%zotLW$3v~PY#V>Z)~@iBamu^;@S<_mMKrQG8l4*- zaO6I6_f920pd0vbKca(K7s&6tTIXG%b#q{HOt|yQMb5e2J~XcL(G5Q1g`D0m^ezbR zd_Y~ls|Vf-m={BE!Sob#=CzN%=D^0MKU@E{ZO~00c$p2qe7@Kx|JLL3-}l~m@B^~r z-@fhVhg|0JwJraePY+Y>SN$)Pmp{Cxqx1?+x$Bb^5B;B+%1VG*@qjiZ^^W2A9|{Po_EY=YxA0O>c>;_*3>~Y5dU)Dd=BCtAFYA;0{u;0%(Idi zjF&rTjvnlNOCR|_@N2k>PG@dfL#lDm5VS@At{9+^Jk1Jg(7lK-TG&C@zJS>k8Q zxaPC_)(IQpG1-rPb5p)4bN$ZPG#3r9e)NswA&5SHtAA4maK1zb=%j;UDc#4zhGZLU z^J$#y3!d^G^No}97A{=0Uabwf=I1&dPCcxBWG@cpyJk4{PFvsglOrFP^gHJnoV;y1 z7dhtKwclRzt!+5;VeIVS9Uu8ZdY}U~-F98M;-hr|?P-5wJWe?K){ar@iL9wPXhG`u#tqtq0RVXE@&)Uct_c zU+4CD8adcpJ@|+Y_(glrkLDe8j(ITIXMg%BKEu&(tvTb_k_m)k4Q=Dj)K7lA#!tMO ztNx3BdWc4Lzk_mudxHJ7&W-kjor}lKTm0TYveeQ^`e2{Crv9M2bujifW-m122|oV2 z1CW9I_HzPZliXXL_*<}jR~Wy+^zaebo((%|@xm_n1LF-}n)$msz?bNN z9y{aioUiF3-VPq(3qNQ7uwnL}^1s4C1MUG^O9zdkZ9H4N;aePdCsrKr8GbVDeb=We zxM*njaYnSS@U+3gvxYbPYWCHK*WBzk_ZE!C6^B0WC=i(zhkSBZd=VZRZ zP500rKe6Xd2e0(7@Y5as^c%OAU8c;}@m#y>M<@Bfe2=e_GhJj4^KjgQ2a-+9stb4~3)nc=obhbt=bC#!=XDO5@kuWIc*UQwI{+Kz z%jWxi*nH+mKln{X{psJ%G~Q7E((>vK>cRdR z+gh7CU<0-$6NqnTJd1bd@Q>b+!A*8>_Fw7Z;60pl5N!U`-NGj$-tj0dYw5%~{Ah>; zeLiAd!(V!f-nl=17an=Ct93E|Ob6zjL%wuJugMU!e(lGXdHw7$ZPq&;a+}wx?fQ6~ zc^bbpGU6@#GhWtt=xK1_#ana9?|JsEI7lyeLBl@yo9>Ow&Z3JAuYKd6Lc=Tm$jXoO z@!r|SPb2snC ziw})&nTrp8_e=-ot4@w&v%l`n6Apz_=tZx z#SeVvfbh{y*7&t%uD$BGIlR0jzqRn3?aX|qbAnqB>ufMSf*U8^PPlkF@ylUGA)*AWY8=Fs;@A&{7u!nu@Aci(ii{7+-KCsUj z=WX0WX7(_~uf24O_O{RZPO5e1#G`yT&&n^r^qfEKoUryA+izdAX57QmtkD6P^xx7$ z^7sCXjA$e?UNm^W|9jtivo^~Oo>|Kg_88+^qZ@PAntmOtfoh_rCe{yH*U&*L3HXw5S^ zv-8;&-*B>%wRs0HPWEIdKJsVl+53d+{JjnyEg#?Th+{PKb$n~+^}Wnp`;JNyL zPOo`$n%WQNZ~VsJzx(b5+E@SjAKZC7zXDIcION6qkeD~(B0qS3iAPpE9Ww8|bM9C(|8fs_oVRr|=JAj2JV&4I zoMAtC(c+`~tV0jv;a6|fy{QBEXZ>6B(&?s4ABRp(2c!D}|fqi6i$M4X{5zJqK# z`*5-WJ!fxy=b*3YJ1<+A)9>Dr9>D6Eb#$J^0)CS}eUg(r_F1n!SD&g?6Y9^V?ipt@ zpKYRpMr*<7gKDCB`FsD#zx3mO`q%#5AOF68<-gqR*Z$OB-O!qOd(lFl9@0TJO8?yr z$db(`q!;$GpH1lQt(HB4*?-$+`6OP--TaqKc*V2#0s6_EK9dD*@`#6Q-dUUWvWu~X zPxjUH*^K=9?{y{_&wua{gfZ^?P|W-CeMRE z`t@Jh^RMFMNqo;UXP^A!*>j6WwCKP1!84p`-`S^I`)90?`)jfeV& zwI3hNJ%ezrcLMs-@K3kf&ddHYkLFYO*Vy>vd-28AvG{b7rkwB zW3n!oz4;}Y{05)kZ?8IEz0q$C4;s6RC$KqCeXE`G-5D124&bl+@t@oG0DlXN+<4YD zUwAtjJ;m$hea%NxOh3zc^nqT!U{Cr?4`fG^-1=aAz$cqV2iC;G_Qz?r)yF@5gJ)YZ z>cdAAUfP z9=`bCoet2qc9lO}t5Lg-uev*HuYThzRO@QhII^JQZ_}ye)`L9hb zGkwg@1kx>7?eG7^;NNI&x~q?7bJGW>?a2|(=E*+m0Xg{9_PM2-#`ZmYe8r|dyi0@2 zS9Yu~fAaf6bogxbOP#OgPyg2c-~NSvc{g;>xHdfSQ}dgzaelc@z984;?cg~(%Rq~G3)=cT7Ne`Yrj69qci#;OS$`z8y|Hd+Xtr(>|ryuo^rjV z19+*x#rP;5sYtXuS)mqOuV0hNlem)8EAx*!1;kX0*H-GtO zfBd6A`^)>cj<5V;@rK6M!|KPoIs55?9^b0}*7;TbF#Vm}`9OW=YvlL0N|P%&;h%Sa zwcqnT8=ke_xF(j5bvDI|Mu*8yFWrNj(H#Ik#lz&;oW0e(x8fk*$d}2KPo+!zOn)$j zk1qYrX3pB)L$=knub!}bz)}0x9pH*H@$rz~$(POwmhbUK*5Y{bN)H---uoUT9D0|- z&^z+ZVj$8%YXXpHe2tv%+1fhc6_Wmz>I_96YXq5XY52~_6G6QoW5Aq z%%On~`=8Z+^x2;dw)_W;VqZw~>kqXV*Q`quON3EfB39rA1G52S;}=^CtM z17o(iLO$Jl4?3Vn{H8y0-`4(vRxuIX9rtUEEvG+b|LrG->~f*Fv6k#)$xrD;zdai+ zdCf&T`HbZ@H2IWgd44Wtz@|HdEN_|7S2CWMbRotxjX<7dh1eEKDK zKDv24c(pfq=xW+`_R+N;F4^!>v&Ijujn2aHe|^BC*Xlo>$$N$A<%Fx&|L70=aO(no z_W=9oQBCQbYi?{zX7aJAKKyOd)yLD6Ysx+Q_=m^Ww?7>^%r~}P7rpG@4EX_%o=NT1 z*cI<`*@W4i?F1(L=|c{Y*OQ6$BFc@wu*cA9n+D>K{64 zxq0!Z_V#ob@+aLkRRfYY-CPc#BhrXP>;o6gK zeZGTsuy`*|;M;k-E&B9C9~#=|Y1>B@AN~$hw8?`Pe7_Y3`2#%o_@;k!c1-AReZKH* zjsDS1R{m=*o2w1>qPczQSAX}x<5BN_^?=*An>&2{xWlxc9nceR#bjg987H3y-^Bqw z)8CeF{jJO7y~17p$Fm>(ZC!5J)4@Y8=Gk?xFNn5gPyWw$>8835s`J|a^}qc2uR(J) zbq!wkgB>5s56~tLdHK`kXxxKY!NnL?`Y6)qn2-x)*Gk2Q9py zgJ&&YAT!^jC-Zmmi+yYG=s@mEhy1vliyyI)u6O*6+$?^ZtH0s$?fG3my5YlWKl$kx z?{Mcn{cYa?&7~VTXvf)MuiamA;GO&+zoCO<-)jq>pOVGj&4nwUq_g~c``N;6%-7N5 zkM`?NsISo>NS|=SpY>lJDSm?V4%d0+_PI;m9dknmzn7JChKczyCx5T-T^po--8a^>Nr^azd~!f(MkJO-x+Ap8$PzrE!*-Xw$7)( z;(f}W-SJdI=a~+y(ZP;)_RVLGezehrOILE5e5B8|`fPWTVs0PVOLjaL^+szR2(r zH;=p3&E|h(Ko>ODvbp#+pA2ZD)#o7UiMfC3=f3w61Lz;k8ku@l zeC7kq7Z0Z|xThRCF1Df#;!T{umw!QxKZE=;*~qd#^Is58#=Q^NFKTKe>BO&uK3Td%9Cg{2iA8!9m`qx<3rnTmw)qd zzFXbb_dOP|ymf--r3<<;xBtJph0{IY|NP(o)~3s+^>!`-`!w8;~(`|-LList=p&Vd%_x< zD@TYYJk6S4?QgC#+#jl?tpKDR+Io#olzF>66_aeKyawU@=DjaI(Y0zYjk@ z?z4Mt_4^D!-JiNt_vzUEU_XQG7h;)I{e=X|oZbNx{Z@_^jSfSnUV9AIf>%0r=y-zk9#G=4ZR!1JakX#HR7J{>uyQcfH@; z?}-oJpogi0WcY}$(+64U%eiQsd2{vihvv)maElLo>zj-B^swb#>*>b)&WEG^8~1!9 zo;3V)4`7@9-1KK3cT}GNc>k~dvoAlK_TN17U2UzW2YPw0{)+);)3<&34@gfSS@DK1 zyy8t?owQ&6_FXo2mvF%P_UMx%s9zIbk2}D6re8K^54__`>&*Q*$kK`5MmTTkL7&a= zLk_&lIamL`j`Ib4*}Hvd(b>-hp!>jvFY)IrjokTdzQLc>Z+^3BE!lqPxqsFA9m~7s zKjb7gdCij{b&aT1BFSidIG@@0!1>^Nv z`^Ccc>#rWQ|3CW=|M>Q+@bN6q8`sh${^fT$ME%#?2aM6>f8vfm*kgb8-Zf~A%L#O7 zee#DsJzni^JmoLfqhU|=f7jVno98bi?pmzWhx&y#b|DxdxcS>@1 z2ap5lg`M7d2jEO}@XPnePX_wpLv%xLck z$Y11uduL~J&V+}bneWW=8+k_E7du*afa-s1`IfqGPcf^1t@q_FvcKx9ldDxD$&v5w zTzS}k_t)Ahxf?He&C_W)4;}Knr31b$=cTjL57u7#Ljz6uD*o_4oB8BVuAo@e2jR(M zT6Y28=|f9Qf$UM86@C%(`FgcLu+Nw|QK=WUC;)@?-j8S9*M_{__vIdR70UGtQu!`~wfpk>8xb zHm6^&cUnE~rzbJA?MnWeR(#`CW5e=EaYN6}k}v2N-j36y$4z_in*H!w9;Rb-?{Wfp z^7EY!);_fDIqUy;XU|5pYP#?2SO5R?+ls?j~(^Ze{1Sr&+urP?-}1cm#_0r zGHzMcX8}F?_qjm({T=|n_)Z66h-@G^@8qW!d*EsOknMu@(o1do0{>0-2Rvhzh6)sY}pUUhUyl-F;8~5_~)~7Q}6$aAuvCG zCFh#wb8H}=SO3f1Am1!M)(4&6{Xm@HMaicH9B_4uE*tzOi_lKCt;;yqcp2`|jz*lt_uKsN1=yKCo zw)5QV*~Px{*tu`jeYJny1JJTZO-HAgCP#X)2OgSe_5FcIJ$yX>#|Pd&`uuMXnmeb^ z!J)_Nv%hung_mE-nf##qN$2V|9v;uT$M+q6<#)WwYv`Z>Z@%*vU*5?Ui~MQQ%SI<$ z{O(x5_rZIyAXeV1|MupS_D#C_WG?Tp3!3agUV6)yd*@GncD$|oKRDiflKV9%=?*MxKXG``8f5Kh+_{%y2 zj&Uu%rrq_)uZEFdBL~^dlYy<-eD7PbgXW`Cf6H;4Cr;%eu?}k0vSLBK*S7{%|Mi_I zUf2Px**yDfn~gQRkZOcK-2MDG!u-fl@K0pq3krUJh{py6iw(r9S&sz_N4Anhz=snW`y{9jb z?{D3&ee_G`Xr&i+V{@>&UoCHZy$6U*@|q7ve$+=tLqmM)^NV~2Bq!K2Gd$0}J^#P* z`^A5H0LjEI^!Zl(r=#@1ccyQV-F|t;yNCE>3$`)F8>r#GzIoq6-OuNXhB}J2&%W&s zZ`bqQ0f6gy#~$^3^Ro7mgD%hqyEmXgRy=OmSD#ES#i|)J! z>|C_+fta*j4AY;+=5)@VT9c3U!F^X*cR2Sr^~F3~HUIkTFW&f3wSUWcp8X>C$tOQJ ze1YEbf%ob^y6J%KiUoA@iS7mXHP`cv7^b^E>nA&$ZNqB(9X#s&4-fd~ez49u`p(6Z zTrZcn1Bex8?U-1y&36FXCTq_tJsiB#p++z2Ty~$(-}ECt`;lK<@Ey-0Y({_8>}%a` ztgdNn*zDc?{k`YCqPqi`y90wCg<~E~^?!e!u=KzE zV9AkO>_?|l?)v>JjJ3+r4+ze|bscn;;(w^40v+ zd_Ig9w8Y6Erszc|g391rOHfBimk~^Vk=DcIGR1vL>$NFm;~p>R+LJ1=l{Z z@lUm_c!jUwDX6c(uMc)Me%Olss{i_OKB#tpnp{nX zV4pmU_qXbQdZ07S-buH*&^vb!&-?SgRinY4?a!Ki+y{*JbKSz(e!Ox|_W^eFJ_F8% z%f8(U+#TTUJ!>x?OCK8^`k*T|BEuu5Uw)I2Z@d);(-+7tHo?ccgzDa-#_srEynwZt zi}0{@d3;7I#~I6?_~&Cp8)AuP2^w2u)Cpqts13vkZITcv%Zh#{hs~Lwe`$@nd=@vPQ3G9af5z2 z!};_g{_(VVq??OQ=s#Y`_}=sXj)85P2Q7Qltm><}RlT3ke1EG?f8#Hx-yNX(U+uTw z+?Czvn%?$Z=u?tZ%H92lzMK zbPR4i9P)1755CbCf9A+I?K}JES0~Af{-(2_HDfx{_!%GT`5*MzzBPS(%5To22e=yj z)X=bY!u5W{vx9ZIbe?nBOFhxV>~1U9lS@sYSN-k+WZ3%_etJkQcDFX=o_%X@oey{4 zl@B`nDZfS+E<8C%?JF07v!)x9iJY2oIPzofM$i6{H+!}wpL6mbextviu~&UmEBpRG zKiobsWKRY*70+}*)c0{$EUW4!NDb>pxkJ@wUgBk2mnHRomSaJWK!S?|*N< zQ|J!Rp74B!z}fsCPx(TzL?_P1`{R3q4<9fV13RDDzxGbM-}TwoeE|<>_N<>S8lQ0H zgrm<-@VotL-2vn^ef08WeCg-!*7fCCaiqC7h%Gsi53vKhYX2h-tUJlh0}mg__b0@A z@v^_8xp=yh-5meGJ6_LtSo^`FZ@hAqt6d~$4?yaYkTne^4vCS|Kt6>XZ(FH zJnH_g_iDvC|ANPUbR>>?2jE=i(^{@ojGP>48id+-J}Kd z=SQ8MwZHnSo>lif|LgZ2K>u3*_dQ_I-1UFKKl(raKR@>Q{jC3TsXAY6N2fagyw=eE zhyIKIcb{4P=U3z>6W=2jJKy<1K9H``0UB)IU7)<+nVsI*nx3|Qu%URk)P1o94`1RU z9pSm}0M5?=#O{?wV|I34=jyvNIA8y?|IyF>#U0r<-r}7f$rp1E{QTw-Yllob-qzVG zAEBj=%SD>JQ9PhI8-3=h>>y68^F^^V+q?rf!#=ry&9q0%e_h7-&CX8oPvfHz3u_&8P7ZaA9sPC z@uuC$g9o-l`z;+fXX7rpCk^_`_VkE9@gN7`yIcfn^A14XWVd$K`ek=`*Vgyh<GSZ!(_4C=GiS*W`3}h6_#GYWyUSP0e^>iEf9sF#X0Ey& zob~+L@1CQ^t4V!^V7_+%z6(eX$)A6ci@kOmI$@{nKlojD2KeLv&6EF`?9Ic2?_56R ztf|v-}Sx3CVl18awh*mmwrHYc7`)G`H*jwXWaqhVt&*eV#ogRZgtnW zo`vvm$UXVh$1@!|pTB(c`QM&X=bQF}R`kh+UvYpoc{F}a?_}CM_Iy8U!FY{c3)905rP;=%4MV|MC?5#WyHVIJ^9RmA$dEqZi-N zF;35*Gw7sT$EM;DoULd7Ik)TP%8kLEpXEz){6_uDXYgJhWG8;)ork^T;~()C&lBR` zJ`L}0J^#}Kn)$=_t+gLacI*4zvd+iDyu)m{)?D@9^L^jvH#hG9bKV`m-!=NJ^}D$C zRwJz?JDuzEkypO3bOMj8WO&5=qfUqcJd@pgHh%`)>ES!;QTtweYWv3e&O-VX++TOPy z9aR5|H?pT6vdXQ~U-bFho{DX5Xy;I|f#4U-OtV`7E39Q)Bs)|871PEj-VL zzVXfjt9H)2t~EBg^4l1FcJ}U+z3%L6u6JGdkSC_TqJ;-%?b^L+zuK*qSHowYZ1`2T z=@zW!?>o$Kcc|}9;T*W(SMxzbHoS^eZMpOc%MYCC?^T@6p(1z7XD#CWv!7yrcXJiiz4pZ@k^ZQcdo zo^+1SHm>V*#m;Ji_XTJDUpy2~?Em5euj{{f;oHxApm{nVBU|mW)}Dt>A9Xf;%;$f) zp|=gywbAf{Cf~|8s*$||aaPY`@)*0bzc|{taP8lpp_6?-`*#m`edq8FqMASbfUfue zzk2Wa-`#*u!L^6~OZ50V`l)|B=bz8`Yh10rz7H^u z7dqvi)qj2=-te3K+2g_IVZS9)`JZg)(0O*BkiF0%7dquc^r}hfl)9^C&t^^?1MBzf z-+cA?7GB>0tak*vrmy+=4xsyhIdnWTyLb4`U-t-gP`=83Y)AI)w$E~+cL?+dSF?`} z_$FE)+H}zShY8&Wx*w?d)qVK%M;>SN4xs0MzD@>st?6sdi&o=eM81*(!16bIGGse^ zPx~i(>*Qo}IdkeupZxsbY~paup|7@8|M?-^7S}rm9{Egua|XYaSB%wvIAVp*;fWk* zihb}^?L6)Pd>t+4Yxs)iAX%IxPU&g-_w1|x;a+1Mtzrm&+U94}@OT9Aj&FLlH+`S) z4Ho}r-LJnOozXF$@jY?-x&w5_K)*YHb2NF4&Nb)l9J%1u!O~@N(GT9I+_P^j`{N@Y zAp0KE?`qkf&e@87<#hae2T-g2%O7O7uI~)Ka;^J~`2ty-D^7|5b}_Hsg5LeBQTP_$ z@pb11Xwiel*PrD)`aqBF(I#8|5Pj?B)p)vAOY%Q?zs~}!lcnzhKJxja7U=)EAO0h| zbuXB;zV`y==KP};KkmC{?f*j$AHb)Ezv7wSCkKd6Yt!y`eKid}n?2-zxnpl%SakUU zAL|aV>n{IL*YXp6d18&7tMLoELAyGs&!(Vr`IRP@v0XAfYUo3Uk2}DkecT16Z=SrZ z^EQv0&zE;7^zf1A|NQltPl*w<_;mb}fiLqBYuh*Jp;|xtp%3h<$QGqnC}IC ze(RIp6?@M148Y&;oSpCZHU}Ti_^0D%K7c+vd-5reZK{3h`mFu>v*ufG3>xn?-uurx zKy@Be`K$qv#D-!U(57^kltTWib@&L*zc96z+D`tQB07~qSqnmfR1@)moj{c>aV z9}nuVnx|fPudc=icg-C2lD}Ig@0lMK-S`Ia#m*n8|8xQuZ~6L3Ysp<7pBkMzyP6ED z$N0A4!yPS?zz9(AKW$IsE70^?(vzu_2pAMuseS4eBGR! zPhW7^IC(c*Kv|NA_EOyyB<*ZJQ6f3?0l|JC{qzeFwnfs#)s4+y<%*;U`;rn(vw4`JVmBME86S)U56GgRfct$^RwK|M1!3QU723 zVb}XZ=A9>&JmlZ{*|m7}XB`{;hmL-3*MI)eJ&+HO+j;yYU*)gtan?|N=ZsBr>A|_{ z^OAY?o}=T%i-}9h2w8G%{q_w zaTmZZy<|HO-K{I~t-buM_W;`u);zu7tuxad{Y8&nu6*+oyxI%z*!1CbyWhBb0i0@hbsz8MtK;OrzXsP> zYaMR+(7I-gT`$)hLF?t-88`WQF&@khd;eAaM?);j>E$qW zzq}@gYv$A}`OO+TxJy+3)kU?xTG^Pqn)=^!B{|3-#{(Urh$pWb<(Fg2#9kcg8_7Sp(UN4ncd-klU~Ki)z0$4c~NbkGAvQ!85*- zi{0>?%vWeFzrlAtkv`GgwB@hWmxJM?yL|^(dA#TU>c9Euin(3yN8LBh2lxT~^HIKA z9s&8kwR{OL&W@M-GJ8#k9zAGs-bd=coGb46`L;coSF_)E*N8*kk7xUbeykhMx}WcR z?{95CE3drnIauo+V9(TrePT!~;e-7BO~Gwz=P%!9qwMc>Jfe-;a9kR5Jx@M(|Q zGi&v%|LU`NJ=fRx)jeR|363@E@avA(#9XE7AtApc@}@r53lw~p3Y^KwdZiXZlW)%ft5%MYEU zcJaadu$)&8+vDRMfV$70!Jhl@;Q3z-C4;&+p}tyDEd`Cm%8nC!u7;<0CnNpHS7e{| zo&EX#zkCsmVDh6wr`{{g+Fw0Zw>9x;9gp1suC>2$cK|k|$KF}lA6@WT`+FCTH$35W z^SNL#PY3M7?%8|FUf=%o1vj6G=8hq{U2W!dwFX^!CaX5@0OcqA>zC`*Ikw;9Rp0oB z^YOiXVZ}=EUo7(%cxoA&;ql}JU-(;d(+4*HYc4(5BTkb03h9CTbVerqGX|E=qFwBg zeV;GCuN;jp^_M@!D}L2|b=-Ra@_Oc%`_+hQ;Qowq)l&G^JAlsv(9_7FZ9iS-IEyau z{iypdpZ6J8|LuWG{;SN_alRlQkbmoxtcQMI!8NzX){Z`%%o=^#XwAn1JCmKS& z$uEbbd%W!Pcby;hKK}oJeO5fciI2tagYU)5l9|5f0BtHC?^`T3a~ceA4}A{_B5f=Kyo+rtbv8 zL1(WmI=%nzGjn*+&}T<{vwx6o^DpvT{oj~gu0B8qbcPQ7sKq_|gJkLs0J<;d>yaTukSi?KN6Bkn_=R34T1D$yXs5X0E z?>@ADgSY5B?gEc{wiqA}Jbv=b2b$*#Z0kI-zS5`Xefl-Onst0<6X%{bIdt-P=kbCg zUihfidjLAQejfne#rQsJ(VO>*m;Q0);A!LI^JwBGJ>d1d`VS|3JVYmmcR1ml{4bxT zH_aM8_WPmbCmYg<_y7E6t?^?qA~w9!)Wo&1`vcu>-0==x#qf z`vE4mj;q}a1?JoAuT7TRRs`F}N zwH1^f_TE7gE;+>Sj^U*XknD6oF7o8}6ZZZeu4W${RvSQikehnf-#dwFzco1O_N!dQ z_N#eTuz{Y^;1Sn&$xqa+{ciTA{+~I_+R^;ZNiMtAe|{~O)r>VV_6|UuF*d*LvG~9*UMJuA z?|1e5?<{Ak^EG@_`$5h903Ll-_k(z^KOtO=9@&sAV!1np`d{srBgh7)yq|s8Wa=Ru z@QLg_{k(pk<2YMfDW`~0528n3Q*2LO8y zAhxU9K3}H`x+!k15FI)r5B>9t&IKPa@qqZRj?tU7Z2k=LU9|b*mV52l&jj?Wzv06M z=)v!ME3a(BS5}^b&-XO(A_vj0IMJ88_FZx5%pG9ok|lq2(3$%T=WhR7XOH&*yT8`X z?;z^0JukdJ_$HG^mS=U3PTUPi*+B(U#%R3;l@+ zvWjc@L%%xij9vc^U9zYAPtS1LYfoo;_lRyjTkXQT*nZK&+t2@OL>6?MiH>vCm072s z)&J_g8m{k|-M%^Bdw^^G@7aIe1M0I6I`V|NKWS__?f~mdYk1whuw=(SUm`!f@x5m` zQ9ZUs2U>Oq=@u=vN8fk-)ckq2Icsp8(;Y6`gZ8WSeHV~k%6)j(?~YTx%kO&^fJeT} z|EiD1XlwBr|LiZW$&~D%bw0G?;~2Mx&iKG=Gw<6cZnqDv`rfmDIc$!52jJbc{7c&Ui59zwhO{?duCSxr1nBZ_smlb-8;0p6dJlKAqC@eEyf$ zGci8DXSCF7-wV*!ybq}VsLzkwbILvJV=msy|MZl-@AN>=?JJ1>X`B*($ zwO^Zm1Hiq(eSn^vtxvCL6+3vPKeB1*LhRe;jAVZ+4)P1NZ^}P)IdzOaebEp7^8Yg~ z@#{Hf@eGIW@eMuz55C5he0{zLAX|3;e8?-#O|}=kAJ6^HI`or&K6J2jvG!@-^!Xo; zWQb1CT=L^_`}(p=_1G9sc;37%UA)`_9^VncBfZ!o{(JT>51)0M9+PqP(WJNXg}wGT zldb6+Z=3IR#`fPs5BhM(1&2+t`-EuZ1LXr}syo)y-+c!-p0}%g)#YkDSlzDQ-vDe} z{SNOLY+q-qn{tJ-HJ=5<2O4U)+=1tvGY%b)i_XYyZOUEW8r!5R`?Ec0ESBJ?^Z2Ma zvvbio?{9|<@SCDa+`hPoeca+?ga5) z->VJ8xy5Id>J|mC$YP_0X zAFLJopg9olTJ?U`ezfIhylmSh`vIq)XHz<0yX<|H-%3RGShS`e+zgGdt~P zR(vg7{CLiv@5#iOSV4c+q2qIj?nU`d&lL0kk6dVPTVL$3pZ(2k{+1o^tiO4G=#C!P zm0sR@|8EW7rwX1??jbT=q{d^l1F>_a#ev z=yc`&>|-AtYVhgJnU8%B-zawliv_Z=;al~ezRDeY|KgW@<>p=cSB;(T|J7V|O#Euq zY4d8gXXJC=niJoR)op!qv;N<`2WVgU;Z@x~?jwDNaMx5eI{W}6JGtoMSx&T%?bt+n ziG!DVz{lvNSfCfR8clbDYwZ_P>{s1}>ki{Adwbr|*Wj6x|DuiVj`?v1VDI*T_}+NS zUNZ*BPG2g#0qYy8f-_&D{&ch}m^HTty?-}Y7i^=Iv$cYyuuzx)*J4j>2eT|8Is zgXF5Q0e!;5?<39+e(-byQ4_0?^- z>RZqM^Zkstt^R}TVXk;qBb__zKALJJXbsQ#Lb^x?#X7#r|8TPRl)ZjBpodLw?X|zw z8N1%m^(FtxQN0u5xBLjLp6z$-M{mi74~-mJy2S%u?;b6_yZ>4{>&o(dvYX@YkF`Z> z@s$qZn=ay|8u%>d(FIy)zUf}+J?A_0+zg>49^uHm0fS?)ZL`j-k(1AD*+7c+q6KfslKnfBPAJe8u zH6R_Spl$pG5-Tw(R5K_D@j)}tNf9~_r9~8qBBco8pdbbe4g`5zueJC4y4L49*XMK2 z_rAYR2jSeXS^L^Q)?Vwqe(mcz=X-8{^Z(5q;0M3ja<;tXAN~Hn?}+ohY_Hg-Uut>o z4r1x>weqdt1-s;p?2&`nnQh3}7;QNtzp>yD+r;jZk~#Xv@9-oK{zq-EdYkv}evhxZ zp8B6!9-8;}P<3AY!>ixh>)G1e3FbW@{W-5MKbXsV|5X-if(H!vMD*g9^qG36Zw@~3 z)3$l-4UV3JF={=Z)ASFUB`*}6f3uI=dEd|bea7;fnr~c7t`o!S8$iX`z6Ti7B1>{r z%e3XDJK6Xdz34~ZyuU_sfOO;p2DppS^Mi zz@MDPG&&wK)cMh~>9CJ~CxyS}-}}-rw!Kn($pe!s9~i(CC5OD>4j`Y2yV>SFK&_7d z$O~G2FJ3?OU);<0dG{A<_Nnvvo}fQlY}9#W`&@8{%}~wS?`iqYOMfz@_M@}@>$AO%Cai^QLUtEX>@|kCE@BP-H^A2Dg ze%1vi-x9@l?f|gpZvj78KU;)D`)BQ=OY8xEe$lcv4yP}W#rq5j2R!V3RsY|6|8Jff zZ+NnW7$bMz0V<}QCAN(_kFH1kcSo!SQ~Ry+o&;}=?d^jH8^^D#cNSa1&)VdT;DjIC zPb|*-)iUgRP~^fZcAu18U~QckP7WlGxI1d}sQ;C1zjRP4BU~D=jb!_PTxLuvre1)^`{TO8c!6Se9?3JWcenW zI4AWyd5iq|pb(l zb;s^~_U`@krC&F>Z}(wjU%u6){)=5r&dbjO__cM$lFP)5aeU~Sx*sZcsC|4|JhYDV z+UFm1%Ne=JOD_H^{$Uwiuhh9&+jgzJu))hS>^wW)yT3daznJwu{mkWCxApnmh1>%V&eJ6hXv1`jgpZ<$ekm>7oPRrfsOm9=a;acmrNhFn|y!w>kv zO(Pdv@#VXTb^a|b<$&CO_07lkuW=Bc7YA&RI11mUbymy0WsCfgoo-Ycb?yz&bbHs3JzqMWWi#nUUe1eR8 zJn|hr?EK0bbP5j7V!>JQfv#y=Z|7^N;q&`{>VIMx)x>+~eD@EJS+~2t^F#I|Uu6A! z7Wqbi5%&-yj#yx?sYG5 zrg=Ihzg=naUE6u!Wnb`%uc*yx`24P)JHf2~a+RFdJjy5VPVGnGljb?~oSw;%>byRh ze)1^(cn6ayYxl`sEio*|#@<)`J>z37IcLsqJU8aSyX#H)<&n2Xe~$4-{+hT&XH0i& z?);D(Aucp=V(+BhuQ9Gzruj+=$1VEk@tUV?Xfr5>ifOE)b{B5K*#sp ztb>DhIN$pDJL;QQ?f_y#Jiy)0`aPS=ceBh}qj}cI!)|YNU+IwPf=g`C5)z&v*HkXR%I}V3&6#_QPLJls_~zF0qn3z~XcMz9T;Q z{r}|yCk8nm4r~guSM`6s|64!f0k4jO(2|!P{$8LsPR^6}VkbDsdCOMozQZ2)xc~S) zk^X(zT4#^GI{_S$)9r;By)`%l>)@kiS%<=2b4J%H@>Zh@oiuV=8@o^HEcTBNq~6IP z;w>@#k@|nE9rpn7+vD}_-#@G0-vExEdLS=2Q2xCO`l0JW;w#45B}L z;5+qBA1-ta-pi*JhViGS#e=U}t7gF_Ewwq%@|k><8t!a+`9k)(8(8nzndCsNHI{or zc)KIYi>R^iY-G*%nCrf_M>cQ?;A{t$CTgsiQ(A$ zs=w!8U@gAk5#8y3V6ETzcG2YUN#%3zBK$SAn%}3f2Yo&3J4Zk3)qO2{k9@Inh?qCV z=gHnaN-p{rjr^!FIKUiUuj+qloAp}jTsb=YPkO$$PQ6p})%*FLC(nD%zX=ov;=wcj z7c=B*`D?9tv2lDmt9vt>i?Q4R)Cuw}-#KGr>A&iqdHT{NK6YpSIR*pk`QFn1#FNcn z$hN-e^Ko?ujsJVrSNG^+J>N@gk)!?g=H3WPKPM%F+?VeFaz@v=(mDBye7=J;uhO$+ zoxcOXZgqb9K+VH9KJcpk!^_V=#KIj0&2yi(&Rltcyw^Jb43ZCFO4fYyU?yO z{?~UQXT#V$ABQ_xya!mWlgW zzpleizWn!n zzz+0>|FfK^PO}pX+6T5Dg-_GkA55H)+!cM%)biW`tkakCk~fkojoTv+9yzUSX&qT% zpL>9M|BrqDn>Q`|r+m>HWy@)Q_U2pW5+8HDz8H=#9dygY=kV+M`L6x^osY_4`6j@> z-3Mmf_iUea^wszsN)I%@Uo3Z+gG2lDpe=7bPr1oVAH3xVI>xuJ)H(5qm464X&DWVQ z?HDUw;#|9{|8k!k2p9bDwx2&~cznO?ho@Uxx=i*0#)p7y0RpKHxrbci!FN&!O>GeytxKp^+`W-|if`@no?w25R*a>=^O+xz6K}d$11oyI`cIr4@j&O|pBP&G<;&K=RUG8! zTdDhK*S*Ufz#ei0gDZ_M!P#22N{q=DvsNZIPu)-Z@7mw;*LkG_9LQ_^tNL%w8f!cE z7mv=Tjl=S%oP)xOeeGdC_VVu;b9XV8nyufy(6(QDyz8s^!AnlGPLAh~*26RT0S1k8 z8*?aq)^?)<25{=UN9dYwX2G4iV3(!SlU4eKkz%W=-w^iC;8p z^Zg+8`j+mvKj!Kg59g@=_=jJpweA<@8 z-{^_@w+_JpUe+WZb`GhWFn!;=b#Tl2teez2@B69!ex9Ov{^>vWN1M7gI&0cJajOpS z9T<>Z9tbwZa@T8L;X}11{m}RpnmFNyd|YckE}s;yv*xGYaa{BAo4mr;#5&#d^Ni-5 z*FAtTwr{PV}W0yV8xUd2dbK%J*;b<#*i4>#W3zSV&8Zpz)QKk1XUGEpnsAV_$l{ z_x{hu*@NbJowaP*=WQGgofFgJX8=7{SR_C9&w97-`Ts!>jtwKdcG=Ydk!}Lh&^ZFMGro z4Dz0nJAfL^u4K>sf_~z|oR-|l#@5Pr^m3kB2G{v_5>orkI~zZGs@G_mc^IJPq8C}8 z)qiKh!CLy+%ZHug?ybgkeIM`KslDdZv0meyUA^A*_^9DypD}y$JwQKWy*~AS^J#v& z{*%RX&VJZeeAQsNqGPx)fWzV2h0(K|2p4sCKo#JP^IuS}f)H zsQr6y{Hgs+uB&nW0H5~7@@+J}Kk2Ob__QCDF65*)z4W!&hr9P))LeWVJ(}FPWeg=7 zebg3Xbb6Na@QqI-R;&*W^GxgTvxg31BR+yUlYZ>i`{0z?j~@NXgS&5CaCC$ z1Ge#u##Z)4=EkFB3kE28VL;Ajz77|Bti?Y%9(+o^_Qgr%aL@GHExwv(JhjeymEU|5 zk^j2YGhay#%kR0%fz~@O7{d}D^6MKHORaCMiyU}p_8yoN2A<(XFE#5~&VvKq*1*fU z)_e1~;$bejPTDe*ZS(!VX~`9zat9C_a=xGO_k8gRUVRs+Gp!E>zKLgF;z~@hZEE3h z2Pj^Vm0Zysf4I@})qmnI`{;PYLCF)ojrpFlUad%tR{z+M52vQFxxMshyIt;#SKkSq z)~ZEp5xwI-DBaNHqL#1qpE;pot;VeN&H;z_>OWtzUbB}!EgUxA8f*Kbg)!gqjJI`c zm3u($0Q{P*(5$1Iwc;RmIelxq|6Av5I^q|M`HppPfq!Bkax}(UZkQwAUi`s+nCJeG zxRvYZZthha#5WQT6U)hS`Wb9mzKT~hHMLH?B3JGJ)$V0 z6F-=k@ey{#+r3rJXxVE0Vf(@^WAOoJzgPdAXFb0B01x(uefxYpqZ)rggIDWT^Kh3J z*;fk&c&s%G2hY8x@PQGV+DiuO*i7xueZpG(-~#_XJN~!jB9pzbm%cH2X?Q=2h1}_^ zvj-3R?a4d$tlP8x>#K=f7yrU~_s@6jS?AKn=cw6LN4t(+DL$jA>-gjGuz&KZ{;dC< z!%7c2b^R~Bp5;Wim}7rUZiWFYk`p{TpKg)a|BEnvRQ>lIKs{%#_`95DOtYVy`58j6 zGS@ZSzRI!s?BcyYbstst`HXKv{$HZz?TzjIPI-KQFVh_cQ+GNU<44x&^E0&duCb=k z0j)9qz<-@DHc|V;zP(y%)|b-!?z{Sb_x`{9a_8ew`y;Qre&mOH^4pb)GkRMK2e{G6 zx5l;^-G|=E$RlKBKe3Dm{XGN?Z*^X+GM{|T zUyN&XlLzgE@llgu2(%#vHN+Zn+Jg^SQmc3yITQaFnY{*yB*w`3s@FeH5?b4?)I==tUv1QZvLG(uP zBO7|?Uc8qNl#Kc%Tk;zm$oi`Oo1;r`>)c;D=GcCYbJwryK)Jm?qMA}h+~u`il9 z32vwyZ7%n}#1`38{pe6?S# znD+tm^oq?p2EJMU7FRsa`VrluTl??E3QoyKc(k9JD_Qi7kw?s@?u$cl&R5j3+@JCe zo0@JsW1*>WsdwbGo*ZhOv-;eeAG+mjJ$FCx&d$c^7hSIuUwYDAe8g80PtpC*+qsp) zzNn2_e|!@dJn$xm^Wm0%TOjW94h0vOz?gn~FERy}iGesp!d<$>~=zUvX^LIYx+^)AZ@4l~IkPm)-mohq#l`YM&YcRap{`$5?;dfmKuXU81pz&Q}WWr5iuay(#suW1?i~n22npKiSAH zUh+NwhgbC<9{BJVF-ISK*n+(6_nT*Yz?^j`%&mb3KF-IB%$hzKjLXwxXTy9une`uk zYx%6RQTxKzd5MXf+kRO4;=6~f$Xw&>8h^Np1!K|QI@sX_zr44?uj_x+*wo%h&82>+ zVQkh|mAnT=)u)U3@6w!=?+2lg%{>8c=L82j!IDnKum0~DmSnazK4884-1u%xBELGW z-a9|_-(AEw9N5{ud`~75+0^~N?@#`(P3QLl~51IhV|0hCciXJ|C(7)@xl?Yd@XR)B(Q!VE_0- zVGgU<(Rnb{(x*f0m+uPs**;xhXDvR?$zEgPZ2CJHatAO@-Wj)f4>U$@I`Id*?qVVD z|M<`Wr8jx;QeV`x)L3t1weAm=}-ssKm*oG|g_x_z{j=b#aIjv^<6Zl!Hh9i`0N>^x zo$E~N?6apat+}hro?&E-v+#I^f$`{It!6L(i*GOfD=)vnp=DdXN*?m{`~Qu-+gJ9u zySj6I2XLRa&$&H@=iFad&FA=w_eyxda@Ce)3pR}${N|Mp1Q*|e?tJ0IAaS-S8HZ1# zK9k?s>e+1SHGeQ~?bPS&pW_Rw^Vu3U$$q?2GxPmv`T@D&Nfv%!Uvzy&Va5J=_rp(4 zNG*+D!4vOi4UXo-2|3d8OqR&+n~4@(%vtA7hozCH=Pfp6mYfcl|LJUSdWKee>>LwcpvP{qcG7 zx2=lO2j=+7qjx^w4n+3EfxmSzc?4rrgAIA;?B@ZfmRvpUleOymwf@h$fNuwQCf7H9 zTV}rD4!{|C8VH~KZnFIkjZLaWrnb=@`$+$~ zFVE=g&ohp3vRGF+;FM|hmu%4oCa>=M=EX()Jv^PA-08f=bIaG~SAWXaeeZVG?03BO z@zFp1yX3tcU%JVQVvua!+w}8%;IPk+Uq^0KJ|@S+fSvDr-I#Oc`hyo;s>R3Ase9{6 zj-8{D`%w*F&HsbJw~X8g@?JRK4b`uQJ?vY&GuC?Tv-l<3#6CIykbC&6{5f%WhJo=F zGwWN(gFn={>mD%t%ourgJNv6vkx~7}XW4z}lYV1YJ`f${3U%DiLX5RdX8v=|e$H8I z?^+8#=N)*}`sje-_sR!?OP^bNVWzds2cDhN>p55*nEMu2`?}S9{I=~@az_^LoWXKo zvGtYKBH_Q57HmszTXsId}7nq%ULzn zwnVSbd(M1X^Q&k3$&&i-Judg8yr1J8+z#9CywT?t9^r@o)mCkr%I$JL*``jfaG3f# zKYZ09eYRI`^0V)29d<8J|I}%F+9$TJANLk|z~Msa8QmJQJX^aP`P9CAYX~LBUF~1K zx@qu~$p)?>?VocxVl-Br~2;O9P&dqKYc zHx_$upILo8=){JaGd&w`n^zw_?yDt_8W;QPr~cEQJn=JBT+uQ9n4epnymx#>t~x8S zS+n{pAN0S+t#xl=W9Ro^GwGeq;nQ>WwvM6nUH$kuJ@^vcp4r$q+_ZcbfsJS1Z|R@k zZAfnIbGP2{$4P@j>r>~4o;j_?jE}jaf92acE?ZvD%{dE)v8MLGfd0u)b+xl1&Ov9It>dU8MPwTtD57y6!^UkAYEG(^Gdz$WZ%sJD0E_t+I zm$R;P>hvn-#TTr}9<##;yakabXfa?b{Px!jn3^Ol`RKgA*+rlnc0&+(C6;wAHjg1I4i${#vjPzo;_=VHL-)fb#siqt;e9` zCujfsqVSr(Gmtv~UHHK>UTlK5c{-x0_pv>iKDiRpe8PBib&gyXU$-{(pRTEcY-C^O zJ(NyOSFR2Y(fO+Pe4c&s_wy@SbIljMX;Y@eyLGSpoc?m6Z=Ue9&t1Xx&brY*n8aV?YW6hFzOnTkg@HA}fc)$nUyuHN z=JXKHTh`XM`nObE7cV(kj?Q!e z19I`D?88I869e$bJ)q;D=A3EGvd@ZxjAi_eW-R)WkN(auCP&OQ-KXC^b5eWRj(@KD zy59Ao16e;(_uwE$ikajJn9yg&gS(r%h;tt>e~>MAl`V6vKV?4W=;dy|Xs}$*x$oE) zEIQ8dYAi128|!wC$EOnuu!y~%(JKbY32ZMG5)UZ;&g{4=N>2SHUvwYxZ(X7fdD7UQ z-R*5WHw`bHL2~k#}50K4rG{mbgr+QAOGj?^LM}#GtG`alM9WVN` z1wQO-AN}bQ{iC~Q^Nn-KZx8*wd&!Ue`-t>1ccHCs@$9+W0rr}nyV(;w9_Yql>OK2- zkukckHTy=_XVf};?Cqa9RzG!*-oe6H#n+mt=c~SWAY0yl@t|A$0PTCqwqxT^{nIA9f7I!+ zUCVpc`PBAcuxRT3wsrA5#(Tf<`Cl9Pk5Uv7I&iAm>G9IvQ`;cAp&X0P203XZFe3D{gI9de+`vbJ5d0zP+xfZvxZ) z#_x1b?up;V-^DqfPg5JBD_(wHX$}TCv+0(x^(Rj~2aC*y9`Ui)^>g)G_f3y6Yj&Gs z)<$+zPI}MJV}CwuExq_h_~_3#r{~K1`+m1$LeAIv+^HuF#$+{FA7AM^K?@93S}T-6wdkFTA3^d%(i46o?}e1UHyX7~>q zWxREceuG-0@zXn+`DgUO7vS@x$^B#_ckBv__w;9f{*=9Hp#I%mIJK9q(cikxm0Qne zIJ_D+_t4@8#&;h+w`*!X`7*hH{2IG{A1a8L{51NwAJth2LtcLscew{f}CxG{d; zw%j!Ka)w4GXXyu%U^(~pT&?LjYp<<%^jJ~*A`kmJ|CR3Yggr2dzV^|Vk9S1b}{!ky#9W^7dbwZ7<%SWf$GN>+Vq==q+H&v|&-!(RA= zSM+aN=AEzQTsW9F_a^5>?vk(drSs^|vBt{0J-zNRmtA%C+qr3bZ z8-J80FGcrIIwtq6-&Nf4y>0JozS6nBFr2cs-Abm8?WQLN=kNEd7|6bJkF|-5P&m)N z=jAukZg_m@9SBbHvBnSNKo}%19>2d*y2j7s+GUefH|>j!T91;$v)GA0(DP~Ay4c%m z_TGLrRxSKP@g_&|7}?0}Id$g4K2Sdw#Wy^}xPJ0MYC@k~dbCbO$uM(b%f9_1YwoDA zYqK|F-KTfP=&%0-2kR0KPKCMW%%N@jqUj&B zWF_y^F?wdqUhAj6;Wx*uac<;{{rzoS>!0cFPDEe4$UpsEKN#|**>Ccibx$u(NmC*g2lt&;P{s)55A{%JZg& zto1zCi_^RH?c3%yzZvTp>wPtU@X)t@?+KlF=*Jhn4Gu8qGfKAD1HOrQHe-v(-?DA{ z9D3%tXy1+UOke#;^{WN51IJni`(yuJm%WEwYMnii)p&B()y5xv4hDFp?l}VnuxJ^! z9olZ&F8+T7vB^QF-1>W;-{r)|zYRU;p1T{fk6l)qwSVym2BCPu;oJBCoYV_ABqzY) z+HzLL^Nh}Z=0lSM;c4tj@5W*W`h-7v%}Msov*`hckJ{ckJg@a2d~;^op)gL|UMc)L zHg2f7hjxvLo9FPiuj?Tm{9!&wXFp@^686o# z)`f5UfQ`c=bDlGv{rKUn>6^Dcd-!g2pwFxS?9JNg^Eor}giasUPi{bG-@oOa&-xk5 z+B-UV=B(7qV2JVuaZ2`A`n@;Dr|{s{a%j$qzVkWqT=j~~Qy=%?Jg4veY|Jw(GVUEK zYw^-@E?v_PwYJAgUhl2s|2FrZU}HZlVTv!^b5_ph59IQUT7zah&y$A7l}`O8FYB&6 zbADu+&&E8HJ2;RhdVMK{LE})qfN#!3)1phB*@Dbzo?}ncc%HN7BQ&_qwK>~ZWFx10 zte;`{S?rhUd|gj}xi9)hPtUXEeAIYk3yqAS!O8mQl)hNVn7<0bIiYe&Ajgh`u+XD-^i#OFq<6UIrR9>u-EqZ<}uHk zvP3@h00!cj4X?KS$TJ>(Hw+*B;ESdO`$@?#*T#m=C|%5J~~g? zru=-;b9^-YZ%e~xQoJ-Wgid)Hqw)#zs(o_aEBk(QF8OczfwN-c$P@WO$u5tn^`XXc z=bP*Ji8*6vcqXqI&lnoNN0ta$myBipj^+$hu1D$4USwr6^77$3 zeZFK2ztn=9OUB$w_2ZZ9<$2m!|Gg$o-dl6^g`5={+)#S65gg?6FVXjIEq?R=Rfo5` zfCdxusFru~YyWD;DetSkx}Lqx$=aNQ8birLHnOtYce($@ml99>NrR~|efjpTZ%yVV zO@2n_I3DvkyzgkvL*a2}udgvi|C~h*O@2*3x){?Bjm&vAm$hhg&G@V5@S1e?`Syu^?e15NTrfeui@!hf8TjHI zd&P#|-~XRhdh3(r6$a*K!_zZr_%MVfQ+B^ zH~+PD{p5F#K>YNTO+Gs3_fxIC+We!>b8pTh-@W9Yqn`+TBJhd8Cjy@cd?N6Pz$XHq z2z(;&iNGfUp9p*+@QJ`D0-p$cBJhd8Cjy@cd?N6Pz$XHq2z(;&iNGfUp9p*+@QJ`D z0-p$cBJhd8Cjy@cd?N6Pz$XHq2z(;&iNGfUp9p*+@QJ`D0)J2u$iKVtZ%p#u(_F`&$JkJ;%>IYyM-;*?*q1_N~7GLatYGe~mf+ z29-|!2FIk=zURAUADOSz+Wfs3{ooNE^I1RRQx1QJBaMB&hQ4<^#1{T!aK67W5$b$@ zrvx>Q&bf?bJnOB|pU-n`=H|NeQ7xGG_rr3;o$Oy@?5aQ6B1`1Ij?MYIzOjr?I{U%k z8O_?*Lmd97aS#vFA7g_n&6+FC--EIKI`?cWK^ zI+v`|W?!=(`^$}Kd@%jDG=I;E@2|gAWKH&jzTNkV=kod9vwi4m>4;}+7n%6GKHC4^ zh3aRn$E#L7(sOP8zT4Wn{=R(o@p@=;?(ENVuKxG6?TjD4a!%`0^7*?o9_@AW zT>AH#jf20{>~CR`UH?jr&2hTTu{=j-yib2P??+_&TK|aR_5=S9<+UT{oT{9kN$sHPGt@c1{&-JW@ zPwBqx{55?3wC%z_e*K1SJd&g68@)s0>xb`dpEe%d-ppkUU$55rzbKye1q0{C9{PNM zuX`W*uJO)y;D9H+ouj?Mpym>LiNlEl*>m@azRzfE?*A*R#Xn{r@9>9%vvV%lVmt5b z-vxu@`HsPj!7JT^LF9>?ZU1f0tKQKs{_i>c(CeP|g?Se!o#ShbLp`$@9OUcof`PsG z@TugYU@&vOzs;BN_-On-zB_5_^zZxwZQsQBZS3zg!610yWh~g{%;^Wy7rw?_Xx@P) z7Kw?(N6S)iLKb7wHt~u4?RI)Zmr2u)-gh)u;6GdBi4U;fclCk9LhgRC^_8|yh{^K7 z#6$d`?X~k+`geN8?@{xi*R@B^tXOacY=eWd^;?D!58o9F@pQz(B`3tz&VAN@X7AYY zLC5L)vp?!)*5e!9V}EsoXdez_a;m;%H>71Akowh$P zsXf6Buh`jnp2-kO=I?sfgID``@r7agG}>*|!^i%6V~=~+-?v}9yFbop%=^sOJY$pA zdt;C>xX|Id_&Pri2C-}SHzqaT_rk{H>}M=%V(BAv zGime>%{izs6jtc+iy+js8TI>*+bKiK0F z4|^vLdB!(6AvNb=tYn14cX=;3@51N%(4lK|E}B@0-9xW9uy@;h`+8$h{Uhg%e#SzR zEA7Ff<6`H+oQK8-*oz&%Z7f`Cf9`#W0nbODKWv{s?=VVjj?LollOFwT^J#1S@R+pE zDqnzg`$5T-`C!BkVDW9<4f1#X-}t(7UbNUgG`4U1^Yak{Y#jTxy=xAg{j5hPukgQ8 z@`~Y)d<$S}@BMFV7rQ?F_ORk2?@GPD*A_ONKValtI&D7R_4gPbnr-0RHr;h0I=9c) z`sD79-g&Yv-?w7V$1v@92Oo+3#6YNb0DIdejltG?+ib~q9rL`}5%=|c^o!4%9ALil z!s69^x*y*`mkf)?!fE=D^Wq2emJ??_(6@#z-=+p89_BfHUh$l|_I%qc`oE~!_v#phy%{Oz42LIfh(dcZB&A#N$&)4ngn&0+uj@rG?Eg9O^wvKCjjm>^) zKfSUST`gmIemvumPu8Bb1^$V}mUUw<=IP&ezp`&@m2q2 z`|X!o&zyhM{NQrvc=6*N&)A**k8|+{{JZbm_(0K#GkJr99N>B00luX6;TsGR53$d2 zW-uta#>f`=uXNh}Iyay1`g8B<-{v7UD}0Yw*nV*O!k6d$BPSH!!ym*~?AZF2%Obna<=%5|_w0Sq?^qYUPw2q>z_{eYKQ&PfOg^Ny7W+S|iT8SL88-hTzOT<@A94kc z(DS~2Vl~HBJe_loSl!{U&THSSv*}0QBJ&o%$jYn^lYSlc<{ zt@mEjV@r?a3#(oQTY1axraBAttZ#m+-y?InRjP{XOY&2e8)sd%9-#V*)&Q)>#U;k(S!tq^{U)cZA z_h0M!yy)Mtx#U_npFYrM28W?{*DY4(dJpQKh6DZ|D|*6a_S$sr%qom*1q?M-QioM!^#IspXkN@k(ti_)xY`uhuX&u z*1o5=`SWLBCG!yn)o-0&(?iY&TR!S?*ctC@<1fb;%(N%_TPJf1i{#75DJRU@02jRA z^j==b_m7T&k|%W`^27$GY>{)wOplhm#zz0=|HR*Y>Xf_9o`24F>DlME|F3h-_4T~R z=}B*Kps$htSxq!f&iMK|<2mkpoAYZd^P$R-7veaCfHTuhU&heI`crJO?d%@ucBe$8KzJKkT?=!^0!`aJkmmF{H z6ZwwVA?L7h@I1%1?0v@OH~Xz;&N=lA&f+w+VEX4>44A*(d*+>=&qS|* z9&~Fzk9?1G`SBX-J}h@!EKJATgPs{D&)GlXG5CUFwEa5YxcYAIfBwBceYD^GQ{V6YZ~XKx^n7D|@ICk9_l7qNwTqtC zx&!1p$g<_~;j3?7pL2#id1r)cj}O}VHQpPOmU-DHb~@?O>$?%n-kP39&|fAgue zE$gOucOE2L$!sou01tET#X|DH#CY*^CcY=mZ!kHqh@6`qIxQTKUMTSS3m~C43o(Ecc8q>XZ`PUf_*S!n3@LxFg z{>WRHwESDPu771`zK*xK_kIWLUVr*-|E@C(`GRKMFEzk9~3_mE?^`CR?z9y_o6RBN{%v@h?NpaVPH>7B986}8Sjank4V z`5MdJqA_|C18dEabNK0&clr0?m;RN$(KR~X(wwpB#v(EwIF#J5>3dN9Z2@P9`{;W| z<3Ek*fq`?XZ7hN>y4GLhv9{z6p7DQYTkpH4-)mBr|HFUj@9E!vCS%Xp+qj+iAlM`? z9R9G+@!WG82mOV?k`LCo2hIF!sEzI5{C$f9;!GXnF+o#4iZC#eHHilcq)?xJ9 zANKRq<2xE*_IPjX(L9e=O!^UP)M_T3s^emml}WK9id z+O}D;uV-iCx2bzV>$`b)j=oQ5+ZtcZGX3ip7HOcGky1% z^Ga^MXe~O|biZ|3-?s2q|J8i$&wulWnz{$5|Hk6m>x`Ur(%UoY+{m3gx$s=MAoe8V z)c3C6I>T~f&{&q;dwk<@`qZg!Y`o&}v|-}2zj1B5W(^vjcs5U8_^)@uWslxpW0R6s zZX<8Y$`<6^y1+pHJq(-$%jC+oAwJcXA8Z+%-}WBVS;mSk*_Q0l!G3)*r2k0Qys>9% z)|th>&wixw0a%!C96DxqOmCYSe{~l&9}L1Pez54)xz_b_%QA5Ayki}iIf^=a+4{8c)i2D`{ahD6dEA4ay%YQFZR|=ndXn3CzNhd_V{`7= zd#~IOKY-QpgOYF8fYgPSqi~q#pK`I`YS!_CS@UPDSMTrI^)BFf-UISIfZmC@_)p|s zvcs#|mfskg!oxoDKh1|5xA?&FskMhre3l$|T+FoC^wu~%q* z$K%;^#?h?(!#}pZksHIab(^~P`CFc?{{s$t-WXq?6FlF``+la<7}UPjHMTDdp87%7 zHeLQo5AQR0`M1ic`{MF9``^P7dE8iS@^fhbnbWWdfiHX*&ZA)O=@c*v{L@{#|3q zwAN<*qG#+s%5nI1?_1}^MzPyRd>saDYd%rADm>`(=;JHD!{4|)ZJ+9Uw>R!tGsidc zJAV20ukQa=txNrPA8;?o&j9BB^zrpO0{#0)`*#MHTx`DE#^87^*&FY=&xmvRgPza+ zix0H@+t;^0@qyx%yYs<+oR>W3yu(&q*K1$b{)-*QT=rPke2UVIyuJ~qW{`nBI>!5) zb=H!n_?OHp&QqsXzQtdx+s7u)^fx|zz`j23jqW9bu`BL-eQefuiCUv3Xt6sR#{Q_e zJZBC~GuL;}`gd6It3JEVLs!jNeR7ezF|}_u&#@~VU)4SHog3YO!lT9(uNQR7W52wd zy3c;GA$zWWr_5gU9isBhQU7Z{ygU9oH>@?SPe0SE&TsuTWruz4lJ%7D#33=faB*h) zL+yQq10TdgK3MD7Ve=1lzI9uUbtWBZ?Z|obk`vj$zsY#k+`G(KCokw5;|sm z8Apwy^G@Jd!z1?q{NXZx9uS`(Z`;e*2-Z?H~M2|b>8{L{>MMFen#L7&*u63-5nsdM`7HyE3$wqKSF<*~fmtUSBoy6b=Wg7^RAKHvWB@0!_iuC<*rj%V|9*!nc~t8d@3%So4? zY9@FwJY~aEV|Hi-dXZqh``JMbU_SJWm zeyIBYKmE#29`}V6^9zS%^R53rfBI%)1*6Mc^oRGWoJjxp!NKEV|6@F7v`yB}=G_6i zHjkg_r`D&Yd;Z1$<^Sz_06LrdK<2E^ogn?(0sMYI?f^#|Y&qIj*_52>PB0J` zy}$M(UQWIX>y=;D8Ep?Xc(9@8Y1dlo9sgm?nm67#ymBX8)%w(i#Mfi}r|UX<>3r&% zXL8e-FRwG7$9XX6^(EgC@BHcTfnd9JuDP6HAGzZb>~z%m+ygfCKJT4wQtOTNzOh&R zR|D`;7qpx;?Z4tR^1&wkl6A`;KM<$S>R$4IwT%J&`OyOg^_+2Z*Isgo_h0+@AM5Xz z@>gt#pWK+gQKs)*Bl(Zdk*njpeTH8=`p)4ubQ?8x`r(6ICELpTOJ2U6_aEn}=O3wm za$@I%TA!FWV`2H%lxO9l8b9J;$>DtWBmDlx4}SHBzxQAK>JNYafBO%Pma)+M?E>rh zfc^Zd&mI`Gt(|48?Na^Fy>8+HNAZo{tA7u}9&mC#{n)qpgx3CpZ=b_1D<;V4dw<^f z)o%4%y;r|e+f(0jFF;f0Gd9;|K5Nk21Ka`JIUc?Pw0|yaf)BmPeb}dDrdx8rq{iU| zgX~{AulIjBDc|b7tMljf^YY#JJPeI_)~v}~_89AU^ZPOTdxH2e&JHbe*}%I|$D4d9 zmx{fSQ#+5=vvu|zHXF90hx1W<=_?wm^n z$9|2&jDN#Vt(LP>n?qCcQ_IzNH9XCDYJI4=tPh>{ihL_D=3d|(lN?>2OP2P_Q1Wjq z8kfSD9q9S&KR)n?!SaD+*YF$u&^D;?rrSb&;*b*{6!(Rcd=9C~ePR;_6aioS;dUCG}uQ1opKME}zd*dUEf)acZH&+2^NL5ljF z&#t9p>$dnAUvod+)O!1JM{p0w9Y8H`9$DQ1(qA~7^0hy-53Di%N;eq1SN{_S_M9~@ zyf^JRxGyZ&PQ1#8sr|XT$#ZO&ctqtkjh)Q}`^T7{{*(Tu?0xt`^~rPiz6&q?6~zSyy=}>c+COJe&k%TqQ>Y?4z==GJ|HW*bS%`K)_?GsnC4vktjl|U zzV)ly>b{nD{8`I?=Fk4s$5j^iSU?r0P(PVVPT&B6${VoYo5$^ zI2gAM1~8lXz}&3=YP{Ofcvatec0t{H=e>ZB_q;uYv3F*1V2xN2Kbn4ij+U`!l%I+> zP2c}Zl#E>;%GRN=zu4dd^p+3w$=>&n>c6os-!aao`2kwkwC`;U?cu*^WYH&wywko4 zmp3hVm@B>yZIA7OWnlzxVlPu9Jt=>AbV4 z&uX)0-}Y~7zPi6_|3keW@BP^qUg4YikH0&E?+&MZqdQENjETu$Z7n^Y{U;~!XL!M3 z>JGp4j6WYJyu0l_>^;A+>$cr7&bD)GJ?ERh^YdOP7E=F>FI}Ct&OGUs>9EzxvE;Rf zuSTx-Ffh+&Rt&?S&f2~d{oC(~XXlw(pZf0GJfBei^M2oF*ILhM>bP~2I#bIy8<@`> z0A+W)-TiX5F>{^|83n6m@Rj+sZDp_RD8o+bbug z)<;iv)ldBw@8oKqs+_lEoxU>rv1g6d`DBehqU{&-K74lL(9dU1c!h%);S1tG{_31i z&&vlUtv(t0Ty)EXmR#Lh#`76o8XM;hfcm+Bp8+IiCKt=wscDN}oq61Q=Go3$=iFnk z3-yeE%#ksqz}Acz$aG?rEk86tXj>_bH~+>|E{_e+fTo) zvG$d9FW_Hdf&EZEpw6>1KgHA7m0rg(Z(MVCfW`FN88h^w_wD)86v&+mL-`uN0P-2vBm3wJhg&JFc%Da=()j~tWoZ!xvr zZC1T+TbJ$p{9lZC{`LB%><%Dq=^-XM7Hht3g0{`*y_&V%FW=w?$xqMpH*Sx$iTCBx z;T^jC$y{un8l3uXT&(1sJ+Xjh%^Z8y7dIUPgO@rn>%VUU?kMCrV<0$?dC48zU)8VIMs&m$)s_kh!fmya!9;yc|+ zhR70ouQ)yBo_QM%IghQM`2#%7dp9G~eD{lw;YF90x#Z}0*!k(`*P1hbEnV!Fn_;Qu ztN(r;z}|c>HTSsJ(NWDWUdex<$%E#|0r$ugTRrGsyy(RbUgbpkH@`Ra|HQR%FI~L% zJ45a5f73sH$M2W^!tWm6`%~BRexLe2$IWS(L(|VbJo7EUeIR#$`8$E+Y5#>?^^?1o z?aGJD7iPxceCG!+;48@o3(uv$InVKXzTCK%--gP2UDpRS*8WiR@aOXTz7O!78W%IG z{;!;e$87lLdG>QwVlVGar|!<#HMS@n=q>K`<9qp8fBXk+yc)~JBX`~Ay?KcdKAe1} z?s?A71Ynup3tamO!_MJX$}Yy<(q+>ngL!hqri<2|l2>ycUzeX=`Fix1^AdX}ujM1_ ztkvgRYL+~&7Uw&F+MHV7bpI|u-uW}ub$`F}XKqq_uFv@%V6XY(F4Z=n^J7c>TRG$X zZ{H8!faE*;%APBCY>c-}V*8FCd5InPZsC2>#MiO~c^+DQ@AusAjzzmB6#wQ`&wNmv z@MTR*X!>%Y{M9koKCS96IUv4bZp_?q#%`tM%o{N&?9-rASGSbzoDKl1%w99X~nYTLhkY+))M z_y#+O8~G}ECpG_X|IJ@)EOQ@#ZR$UHlEduF{mz=xhw7}(lgobbWn*mXY>n>eA3o5s zKgtb@7X?ysKv z)}Pv(clFeH-}Uv;H?@8L4nS&s=I`zSzy7;_t80JG$#(~G^m{K18iy+ug0iLc-k)? zl9?>}p~m=({l=W9vDuRI)Ia%<{?U8pe)~>;DW1in_2zG7@6HLe*Z#zy_{%wRR_*|k z>hn!<+Lt}{@%1YW@5FWHjcd+tT{b;s-tv~L!OHsg>c2H`e$0E1xaG`X2anWybwE=S zjHRj9S)=d1@W213|K36MQ`2Y7*Z&!3s`nZ#3S z3qOT{CQeTMWB=1%e-z3fBoBk_E_iKd`nROTkraLL+%9mU62)@r@YGtHV&m1+tBe@-JADd7_=?R9^upa zd)__}?5)k+j9v8Qu+;zm?ys%y0qkgAOYUMom+m3SIb-dm5+*Mtm%60b@IM3dQ@`; z-my9V2|rkPuReK&Z|FX^a(-h_eC4~NR?)v>H+0F}GS*sWzsiZ`*~|Y+i%h}qUrwEHL2_RsrA`|W^AsVcL3w~;qU!F_YM1egCI}KI{jc^0*Ck= zUGMTi?2~*jF)+u^%%xr@NAYjt@%4Z5Fa1;9pYzvyf!~`oW=-xCe3bn=M#{Eo{%oCh z%kS8nF6N9`?|kw-#zM`P-tEst&Cxq?kB@yv&2L{{d&GXfYd40ge)Cc9N&J?tB)28M z$zk%9aab7ty&u%SX({Tg`2DMA>(ZRT2Eo4lo;)p6$=C8)Q!-bhXWO{?uY8^UtxI7{ z|1;j#c`%!2<=ML{{nY`r-@DqIx<6{ZT7PY7yx#%Jo#1%)_p^Z7+pYS>-5v1H-Kq61 z*;Za&vL-&;?uC_{Kp*J-!KhhC^z-=dOMAZ%d82 zC&JCxJq8PpSy!Iby%`5EfZ4=SKN#r4o;~HO*j4;!^Pc9}JYUck$NFvCZBx&D)ZKQ~ z$K^Zcd(x`?u(yu?;W^LJhk-Rm-aGtZ`ElojI?I}8IPeYgWb$qfi~JtNfx*B6Cf!CH z1n*IH{*%Jhc)7}%C7wcWVB_jdI>`_%Hh%V%xsJ*st`uf5rqy`JrT_y%xbv2Y3Q z;tYP|f0hs61%qB2Un+aU)V|zxtw{_dH+i0Y&+Y=JPnQiZ-vY#vX1weFz7y~pO%6oK zrLXBHmh6ih;V-i8TmB~;_uPb>_N z4l2ha_7ek*Me)Lq4C<3yl^hpa8{;zBosE?AT?O8TsLphDV&A9H`wtXyT@~^z# z;FbHJzV8gqCD-8-ZNJlo&Up_9eqq0L@=e$O;RlH={d2#)KF zoTb)kYH!}d)&A>y{QTaZ8jfn#&X)1(y4)quIhWr7K%L_ofc)&+#BE+EoZ7BM+4`Cb z;sY=~G1xf3xbWnw{F~47qoLqtd&PO=T|T+&cGhnGA&y~n=i?cR4_MzmK<{86 zcQg)XzJuvqgGtBC_H8~Y&nMrb8H=By#{8b2yTF-i*tO2A^YaY={`|39@y$J%EJvKn zg=DU=_%uIw7U#hLM)=#K1S|TJ0|xfk0l>DyM3$H;2nQB>{vEqL-N7byUXkwQ`d6_Di5Ms z?jE@V*n9j8xP5`#>z={3uW*2g^Z4=c{vRIgXNwnHS8iBq+c#^EeU0DjA9Z~Ff0*#s ztm7yAMhpZSb7buAA^05o_gR~_v)rG~+F$c6*BJw={(D~W;2c=L_w#?e+n0+Tv2f_T zbkDbc{;l?_zw=!@^*ZnIdFS_RUG53?%@!W$tn;b+xgUgY*5hF=e-{Xjox65ENS|(e z618T=LHfo!c52;2KG+yE@49pGb$-tGlC|XG|Lhw7zEZI? z?*VeGyq!33Mq*&yIXYah;$K@mbk-DB5FGnR; zr6ziw{j4$O{Xf*WSU`<8-S7Ttr#pc9Z%yOhwSX_i&Zq4BoUVNRqwoJPh^_|)>|MHx zBfRALu5*aF(hlj?-a+JKAJAi%Gs{i=p`@cJY`eHu$KKFp* zem~@F+3T4;8vDkt?`Z0O`#|~Dijx!5l~b1NaHoHAG+m521LdoHQ_b!?A6hS%R*`$vJ-G90vfb&PG4mbob#D7X zpSf%wp60Fd{?9&s_MhLsPyOc$VuVcI{pBK!y^M>;P(M4+PqSVwP5oyFXC%(pANG0w zSO1-F%-X)Ild1YGbLl{4aR7t&-v41~eb*IyCI*Es{`9gAKlv*8jm_kpjG>;B?`FPY zTee&Bu5X=P!|G1aIq0B%R$lA8i*EjC`r#icH}w0#{;ms$(i~zKo-}6R7Fg zi>80n|N1up`SxIs_y7B!0W2Ll-pYSrN7v+lN#g^{S0@H5zp$mo7x}u{l)vY|2i*g% zv5>WB@*MxpIDhlI0O4zmu}Q6ELo_jkhjroWIp2`ZT(Er7UV77yzRCUKj_Sk)EbJYFBb)I2O7Ba=(=XVQza?%NwuY4T_ zc%}9=zr;=HZa*y3terVIznew>=oc(nr+UAWzgL~&JIjAMH`P0hacAcap#H-JkK6D0hnyxRl@ac2h1*-23kUN1hQ~&)Oz&Ktr)|{o` z&kx)MJoBg2q_bWv**jkp_H_K{`~T9v@UL^0KW)D)9Nqn3pZpfP@FtApt0dI9QZXW_voa}FTmkf2@S^G~rk((~DAzbjs?^RAT|CkFl z4>oH*ThzLI`&W0>U^P7TI(7P5vs2^q{-5{xNmKt(Ej;h2dw}!jT5=^Wd^-vTXy0wx zZ_YZ%?(@H3(Edf|j)V9ty7saQf9H>U&mG|U9UyUGjXvMb?*+!sjmvj@#F?r2_V5=p zEqkofl0WsW5ufB|tEo5tVShP3`A{5KD>lt7J>xTLfBXB^S1y|MKeg@^<=dH0KUA$Z z=Q(wM_I(F%2M{M+|Lc2zXSst8iOHqwk~{UEKGwYQ_0&F?z;Efg_~Z@_6Fwss!wCjx z-u*pCzj=S5hnVgdlq>2zrek*NU3&?^D%Jezzt*8-A0{IWdtr z<7pYg(^=$OI4_y`hjD&GCq91Fdp?_Idu#3M+SFLCIO_af^VWG!XRrDGo%jFLYwsAo zkNS@PE5G75ff#Xnb+7u?#WoFnrz%WT=@!rAm8%OC3Y=EdZ~159qk4`J5?6 z{QQ9(SN&i1IAfIj>;0cjAFcnL_xVKdDr&EMi;q04<$eEJ`^h(Jf1X$T6pokL&t5Cv z{X>0@bLE6IykHWn;NqRrxqco%mSCk0tb7++FaK=67`BdYUuo_@k=eil&jkgebkV;u;ee9%O3IuU*ONL-h1)2&N(X%k_(nUCGW{oYAD><2UUBWqn{>!C5N#U zd$I|f@k%|Pw(T_~L+UB|Jv{T!twrZj4qw~8;^CKv)PNS-@}27aBzNO zS@^~m*r{9j??WA~J$Y6i$>6NS54qZImBZACz5|rc#Fp_Pz7W5c`^k*g(rMWu=cr+A z_onn*y2k!&E+5XEsQ>Dnh`fAHE_n2V@L%*N_TT$Ujm|wF^?%mp)N3^TIY0Z^pL(8e z3f5%rq}J!`{2UpWLfexG?DeOSYt&Dvk%N3h)XM`IJ~;_Lc}3w`mB zvG{VRIX)(y@G@?#yyaU$;>y_MmHjCH&pv$G-`WpKXL47pu{r;zH|o13UByA4TjPz% zL;hHM`8qz<@r&fIySjg^S+joeb9>ONL-U+CKywEOb*9$87f{&Hr+quNIP|O-tU0=9 z*1Ym{wXg4Rd;Roxd-+G7UH>mGwSU(AP=!O{!V{! z6hFArJ!3Gko~>8BFARfabWF^P1!HOq?DPK5C*WvY?(zNKJ3Tz{HJ3H+z2E!4 zJ^1GvfHiFGEO!7tO@{UEzhoiX`EJTKp4Ytt2Jm^W?j>&QYu$@S`vPjL8h?NnKaQQ{ zsn{Bg?L*}*>)X!w)X#N{v2EME{E9vGjaiGPIVU+VH2D_Q$e^y$VdcPK!;+t0vGGT6 z5CeR{J2M=P@4qGciE;I7-E8oYPuPVF){>`lNbw_IVqCn-9jW{J)_Kl)`nv=4cZlL0 z>^s)UB337r>+5;N0NI!Pbck*3eU%gWSY)R6xkNMmIvep_gklLT~j5~jQ|6lSfJ$L>q8^qtE&wIYE z{=*{cJ9ai7d&L4-oSocF2C@c=)OvDFnaREK(8@hKkTRwRDI9!}1-_($vwizWZ^Nj@x}bxxC;%a{7S-dO1*x6>zU_-b-9 znz}IiiHk{_=jJ6on&*DDZjR~WtFc$`mhb4(@Bc;P?^oUPEN);W#vbB*`+w_{Twi0( zlKGLPG zKh5ugth~Q5DQwk4ew2844+lQr3^9LvTiiIqpEzM(k&QpUb7tQG>ivKDLUb-l@3MJlavVQ+RsY41wdA3v^@|4_SA#GA zSHtuEkEV{#+CFQ3?gGa6dFp-E&zg_lv)>U2A2d9s9M|{%_J@rJ+qN$jeU=xDTLXiY z4>ktle%0}?akn0B-tm&l1ck8}{x&P%`<$KPfZ_#P3MChWAKp&`8IpAhd73* zT&Dh`n(z9)@B2AFI-8oM_WQXgYW-jSi@)7#;`jWc-?`-dwoly`zy3MY+_z;p z{bBn;oktILb&j?4efIv(-p_vipFF4T%$A>xr-r9)rG{mk@2g|{ey)*2vnF>1XJw6j zp4CM-Y0-1pWclfre*ed(agm$Kw>xJPg%STq%sN}&9X>T)e3Iw52h?1z`Q@K!S?R+z z{DYmY_WmHJZh!6obk|q=)qA+hPwf7_?)nGddh)tBL`)~JuU7i2wI@OBr7U*FvYlGo$g)8FyH&v_YlUY^;J9; z)pO_4Cf6Pj~@2lca%eqlAS-W?U&U5 z_PN%7VTxb3_Jf6kXXnDV{k-r9=JaK|wJDT^GfbN#?)7Jmyf6RdQNRu>r=PW&-;36{FSEe z-@W%=d4*@riwtP$KY3gJ;8MEtU09oYmKTgCANWppV2RI;v#TFChi^51HX1E?%2?a2 zc<>o(J@ZY}nSNf(M)HjH*S#6D-kSJcasnDVMeg>^I)mQ)%d`9^AJCPp&9zQ7cf@?@ zWQ?C#CkOFi^;usn(pRVQ-j8N1wI4OcpV8}lYJA5<{hk|Y%vttoi3v52ER9jyWB7YL z|NrdW-^+I2x6t*!;rjd@lL9d@2owv@W*Zp&VYBGCi#`Q1%ST@topY-8?@Po|-&4=4L`41l*Uu7eDS+G1!Ze!=s zHN5xqKqh)ECmz1QCk`K=heQ8|PT-3l_}!oQ5PzgkcV6G=kstVD`GGyHcMhm!Z?V0v z@pI?&yNTBD_4W?HcMpE^VKR{4d1$s#d$Ns=I2j_N-R- z><`-0y`jCm3-JDH$9+Ysd9ecD`5L-={m1Xz0r)T*F56B#toc`Y!8{x~hCeHP5L<9$+l?dN08!4n*^#m5B~KZg&T zvAb}G#zt+&kIvCPMe^q9riwKl@8#2r2gBV4-6ePUo9WJ=kaneU#64s z^Wf>{dmM~!pXDob ziN5zg)&IHc4^Qm0<)p>W!w-)6?8*;b)xA9q;O{gZ@qixs3ohB&uewVQ*Aa#t+%&682)>6 zaQ5f_?h^OU{|_HHWFZszvfn)yU@8r?q0vE+sy~7_d)Y$G=2r)$&sCpm$}m|-i~LTrTOZ;l)qb+817y2&aPpcCz{Bs3yW}$;Z!R5-Z!J9>G!FUYHu9E}gZx)M%EyEGXStfs z%Fm#?LU&)|@n=5lZ~2|EQGEybDLV3e^qN2DF27xL;^nxbg_DKU(&7 zww!z1$>{A->)32~9e$S%PXARe^6ih*fBeC}d|;hD@`H=kan6G0*`tSbCLi%UQ+;ML zzS6ipJ3edSWpDNJipNEle^|@^(1*jf(#K(w(`F~H!}F;>^yrf>e69ZT0lqUl(BN8$Lisx%Ej+`5fVDaW`c;x{2axq)U>39~m$*-@mwPqdM z=hS^?YO}WNk3O96`L?q=AD;Vx^ZADL?4SMcEVk%?k9_p`A06^!iyf-3J_EQv%fG7s z>UQ68RsS{h+WmO1?e-h@c|dF6Ui*N7JdpUIT1pZU4DLkEY>4jrI# z=8#46IP>`Xs`>Hw;?fr%EhmHWa(REp4bL2(&A02Dub~qj-;aL&-x!Xw%!`>T@11&J ztMT{6r?pq|n-}kI>;I`s`doW2A6T@fzw}Qp8lCe8eYKj+Jj<))avR8I&+NX>p$q?B z|9w~Hu)*SGo#CvvcYu8KjP;TKupgS^2P@`3^89~)?yG(jS99M$KmR*pqIx}cShG=vs2GX{cWG@-Cg3adAuxnPo9pLJ>;LbSh~OTAjX$H-^&Sf{qFPs zl9@f>dG3}6#IQ3aPp&n*lpm5`e&CN9d<~Aa(=o69$Aj2M10KCP$Nj?jY$`9HDHiy- z`6C~kko>E4HXh%Te`?>-6MQi=akc1PIp(y#dg^_Yn%*72`*$^2tKRQ5TMhpU|J#2( zwZA(+?*Q!SE>P`vKhWRr0DIq_&hOdZI=-gf<5gpm1<9^1l;`N`Sza(-{hyp~|EYuh z`5#Sw$lm-@F4D?tV14WS+Zaw`wnXRPNq%3?>L-n{*-5jU+1&8A*34ga-(ujB`{W&c zd#j7&?%qE%*V=s#Uu%v|dM;I$)oK4{9q75gxw#i?wSTYY^@Hu%>-@bB7fthGL47>p z?2(rzFO8gUW1U{!^L6sWnH)K};j}Ya?my%|b;=KpcsOE0oL2J(F5d7rZQTdzUu*6N z-4)LJz*XzdwZ`28$gM^g%gsK2nD<(noi7{V^`--MCEqh2Z*JEC{E>O={)qXWXXF@u zD>w7eayZBjt=;F;aBI!y`*4ea)`I5Y+1Gu-_)g0jUM2=NUnMhJ{YJA5HuyPo~em^f^`#hcmLV_Wv5Xs6_e%N;&Ru;6}wC3;eY9*82?)RqX%-*+vwt= zaq4!h!Qlg99G<2Yo16XX{RKaWUw!hEORMg)dt?1*u>*fM=ZxyVeRv`}Iq2CQc+PMS z>u#7IRJW4<(8uxj-}3(*qOC@tJGo$d>hyyp-^`s*o#o%ve^C83r#A1kT7T{YtDdX< zeGbq)z`YlOL=F}6>q)IFTa8KYwh|@;QlUP?IX+JEq&6dX0HC+q1K%W6x%g6p1gPR6MwtC zs|#$+=5(OO=i7JqOb6wR=sK5=m&5t6e!1B=U(|1&A2;6|p7z>c-k$tjzj1pS!$A+- zbk6SSB!08|u7kVW`*`Hr?hBXvXYSj5jLtnIiRwQdIuF0&|JC2c(;<8H?ucDEtX%Ql^FLkC;guuMTYhu2gBJR8A6hXmeg}5` zz~v(g!o%Oxre!Oi8?j^dV!Lb(8nbV<-f^3=w_1wF?EUuqb#}ZB{|7H(8NbO!ruT9} zzCiEx(DRY|7esfpx%;g(an64H3{O7i0gcsaJj;>bE?4q^_QMT!Hvsv2_1{_H(Ji0C zD_^tMx^q1vl)r}GP5$Khn*8uI`W^XCxs!k3(ltH&#^3SxPTf|=)$3>P0QP%;dhVIN zx_`e1bO)H)|KizS{qKH(R?q&Ee|$M7Id!9|Cg-QME=nGjP5gJ-Jk!*-t27O zDev|Cv*zeTOvrDZ`>XxIc^7cL2iR+VbsntkwS8aT_l4u{prBpt2i3T#bNJorKHlHN z`dWX_*T1NJ*%{5Deb6h-7q8h4zkFBY``=vuPuYj=@<%lI>7K*+E?>_t`C{wk?P8&|#^S}k z9gqL<>u~HTUUuBha~52DUGa_Y#j7zLpsBrz^F7}A%_H8AI2ivI52KGobHO7Y9N)L* z2i1ReDL&Y#XL+?;U3jnlM+2_s8qj@!-Mt(3&Yx|o|HjGqsCkROjn|2VO$YG#dotf4 z9nlpXjJyj!e;Qh6OdL8m^gFs({sCTXJzwBSZD1QT*(u-1ZoB{NexP3*wXd~-jDa@m?sHhJT{oInrxf<5KJd;nx?Yt>}A6<_QE@=z@`O$w?|Jjl)f_om*-`DI%2VX}_KYmM-O+mKb;rR2)k>>jTlNk6yW^ylo8GQGd z6`#pn{gcP6&)(vmtZVPY)PnZFQ-5FG0iMiBns-JivhbLB+5jDIg4iWW)nty&C(A?Y!&UgOR_r3PZ z^Tz4A`VZpokpJW@9>KBok&E}|m-p&_cfiXB$U5>L^yyQa%XxAF+4%MD)7?YMY1a4F zyMy+^H%E8P<=@798V)<^qZOWUF~r}$(8c1Nj>Nb9n(@8f?PD~`d0;v7(8KbBMRWXY z=|Y{86Xn^x{_o$9L1TaZSO4jb&%A2r_csINF@DQ;*xY+cwY~H3OQxgdZhksGu;v#o z-z^rzygc)&{uc+A4-B3B>7+k8SpB8*(FN$cfP3xV`tZ~ze#6%J!)`~mthJu4;Z;9D zb|k~~`PZWP#o0?vb64Ch9p%gUg0=T@0^Op)UY9RybnM3mdev*V@nW9c$Wd-+e3!|3 z&w6OtW6Vc_=>QFL-YGi6dHufQ$`1?YxDT`4Znq;R+Q)C+lb>IcyE862eB$1gjp6&Q z>;AdETHO12cL060ym$F~UEl8kb9eB5;C$!5c6JwS8Ste)BL^ZR(mY2OZ8 z7X#+S2;Uu@FJ2}O#pl@Pk@Luk-}ijI`%ia5_?N9uUw4LBv&L5HYVY-nZ}p#Eif?@0 zn;4zBv+f(a6ZQPBujZ@$;(w=2c5C)KUrzlZ7Ek%7R-O5aP1*Xr`hV%*^nowvp7QfA z@_Qa7r)dk)Xvi|;!u zcJO)R{3B-ex_{7LbWgvy*MELPH{_wyYPsBJZ~nkf>Icp7Q+ZA9v)9-<+w(o|1H32T zALKDdMzS9~J@S3AZ=FmU8Q-h_){BFwnY%yL=L=_>b31=QXT7-(tojTGul%*|NN2`R8jjz=uy z2jqD#C+>bguOmNNFIw*a`0oA=KwphEe}50qX8=>fm%qcMllD~WgP!-hL!f2e|Mj;& z`}dpwd_g_c=OdRcmJIa3w${jc&jrTjtN-2u@Zl>aHa$dxUzP*;13T_E&gb*;)!(5GT)Xd4t^NfJEo4mvK^4m-9rI+Ns-}@(zOx&>d@|)9-_ME3*UQ(Z* zH94!=9o*;izqRpgwNKt1dz^N-cs^s3yvYjhJzu}yf2#eLy|eY?vE#iT9@wPZO%A+) z%@y0m`uPGJv0Ba7H)pKA%kLA*=e&JdbLe?SW4|xr@~jEu=d<3G(gRuEtN(W$Ow3$9 z@QC|9`#_IO$ynavht2Q)j)%tiGXLM}|4zd^TD$M>{c!m_UM6<36S#Oc-!n`)coyf) z$(i9Ne?E_1aWFA4`QUi|=L_uNZ(qYPW-n)|;qsikMR)lL9px80bRJx}&R+bWCBNgr zIT{~1?0?F>_>tcZe&6OPb9m9n__g|f>EP6(bFcO$AFQ*Txz2u5^YOA`<(NO$-2)ab zp4rSDj}7H7wO_r?KjdY$kLRoIFMFa3ck=pK|2wBMXJ7SyojEbWeyeW{eKG!CPLN;F zeboO$r+jL3v1rjHdc{CCC0BJ?UkgXScs94sTT|1k{d@h7o_dcbYjk8@<3mBdg13Xu zliy8#Jd@)+`PnHy*lP(}JiP-fyQn?hyZih-8P#%QKCNbJ`FC}_=X~z~YOMu(?;i~i zu6GR8f4I)S-VO1~>i@FWRsWYR@&h&|YdK(t>43iJ;woK33hyRGRX z|F#|uJJPAM4xc_gHyhvDVuGKbfoA)iRU=Q&gJgQx=wW~UAa=+DhdkunbHBCpgtlDs zpmoGDI^qNL93rRv|Iy@C{F74-!PlF7S8iH-c|V_x#s7Q0p8S{o*;JgPzus+L@-I8< zvz10y;;z^${=m79pK)oOeu@eGd+o2b_w4^nuY0&f~|=>OWfW(bKo@-pupgiOI$5 z@EByfCBHTNqNU+^kMDcmdNo44>$BzPgHA`sXU$uEe#H*_Qa#q##y zll9s@c1Q56q}kgZXT$G|NBuwSJhcyh8eWIrLl5b|emZ%t{#%DfU(phC=H~u$>R~=- z>pXEM=g|LxM?2=&_nKR|7!Ez}x$>yzkIx3&uRQ;Vz5ZUbJ@`3r*E8Ktx3lrH^Dw$N zbWl8#i#^lp-3J{iZ8seUC^4n{FV>N^L$oc69=F3>zTBDq#wY0Y-j?3Y`R;@F z@7)2^e@&fMpL-AB4qzPA?;fDPf3{!0+Hbv@AGBBP_dUenjUQC|_3?Z9u61%H8(Hu2 z8=I#qc0`K~#{c-+>ZgNZp=Xh7UA`-KvGu*7H+Qw&Zx?+w+}{C2%l>LUD2IaZht861 zWF_y4qbnDj`GCy%baJZ;ep8%I_=$ZpUi|HPOJ>l1XM%^%ow$n^@nzq`7sGiAkG%&i zxW@P93{BnF;5mQzlzVnr_0O}D2maUUKODBO$9+uhQNzuR9-TMm7(Zl(!#3Rm_{+{e zKT#jL19T4n)p|9(yMVDA+kWR*hZ}vgp4R^1?XY*cr=Phqk!kVq%*UJC>pvYh+g`r4 z%bhN)XBTt!Mo;)4=iv*7ZOk3McjW8* z{cAcvkNxlzJ$ny*EI;E{Xp5_XNByTe{OxxDHejdYJ9^ju<2o_Yq&$(_OQ`F!vF zs|)TKclp`rvemM8abRv_S~-l(-mCw+4o0_YFCF9ulj}}B^c(2ToV7ELy{W_1>JwUH zKRK0Oco)Fl5MGd*N` zkWaw{AMLO`or_z(q1Nv{eDACM3}TO>?;rM&^$kbM;Gb9-ou~H^XTHFExz~`zhz@K4eIX=ZE=9s?$7bdzU~0dZ(sGk zSjir8M6!1uDQ1p5uy|ePJd?ZUUu)W&&u_A`cp5)?u6_Glc(ZoW zowMf5hc5TM*ZxJ9A3OhzobAQ)>hHczkMH?<^0NW?=N`ZIu=zvIY#n^mX?uE4B6knp zXUyQ6AE~A4c=dno|EspE89n>kH~zC=`|QPs{qiW9GXpC-8dZU9w_tiXlWh*kWtvuf|IvUn%e1ji)FQ9Lp zugR5YplL09dDQuQi;t)QyRW48vDN8s$$dck-}-?)@6~@g>K;5YF23kPyYj*Cdg$TM z`&*sh=XpDLQS0qv%j$cd{~P1M{&F6_82hcfiZ}hCzuhN{uR1h#y4h~gbS62DocaDc z!E_7vjW5vilK;xBn-A_XCj;I!{?UCnXs#Ac_|L|zxl@n>k9_5dN4zW<^UXIo_0(y$ zGE6%@>B>lV?6e7x2is=Yjg>$zBd+_lIsz{~G#dEbxsrwvTVqS9LmHo@dH+ zF8`40;SaB;FYE6zgg4KmC(pz8>YGC&IEW%d>Cj&J+&N=|ct34w9Q<_sEgIEVcbJZ|<{vc^9gGVupGd{zI`!P`7=(nNdFe4_{F z(|_%E-7KIsAdXpK(Ee72GQl+j$WI`OVHdU+o`XyZ~gOJ z{t^Awt}hvJUZpj^mzHe((7UWO&_NY*q@I1 zGFUT4*LZl&-lu(?xAU&A&f8O5u)8sc4j!&O>^*Il_pm>{v;WXtdy^ZzSzB?$Hit??Y*4$EbmQ?S@fp< zqj~Bzd$Y+E7p=XJYizw}sSjH9zZ#)VIA?5mqakNFTRg?X7jTpN(7~aHJ%7*L${53~+>a}yct5LV%nByzm6VUTFAJlt$M(5{u z`ke{Cd}a+#(UV7`Gya*c3_quje&Gu%u1}kykLG(iuudjANVZG8 zoVqDT44pGy=-0BXv$`X?^RYJ_usPeQ|LWqz$DS|G+Rx84bgr1hE4}RcSYtRE{n5uO zU3i{kt1I`fzIQX1F3^6`lC3;Zz7NuG{ot#)eV$H=1G=#`=P$jEp7BD*;KadNUoz6! z@VxFQ(XI|%=a^cn7 z$=C3@#>3k=Uw@z+aIPos>^bR7f7`$B8GJOYgZUv|M_zLeU$=Lc^O>E^iAA{NCvW=W zUo$4#dDi2dz>zECFW!vb$hG+NIgUE-v;N)#%za?Zna`i1wZnw3qqotbWuSuEijfuXx(9=~^%w#H+Z z)!%(=bbp?+$Hm3dX|s_>fAMgS4R+=W?f}()``HV>&OTzVcsn3|+#U0!gTJ@AZ}u(z z#)sC~aL^;?d(Q-ijK^m$vj^Xc4tpBUSxcU&Ka1Do9sfM@@91sq3*PwG%B&Ryf_KY{S8*Phw^ zEw|nWfFEh@4n8O7_kCjRlASK-XoLC}Z}Q9H{nE>lD_u1AOb_i5_nI@z$%lN7AHC5* zb$8J}{NOE5@fe>IQ!CFj57xp7Uh`<*WSzBj_I2jM8QD*n4<9(z^IdXi$$i;-@k2Lr z#-c-R_iumKL44--={CI1-r>R5sRKN*&&k_k-^us6_LzU*d#`EV1Fki)(f7!>!NGgn zWAOR4oJR*^>xDb|k^5IaJ9{?mcXWHar-L0PbCAr|_q^YGfO-C3b%4Ip|LkMmwI^Nd z^!NVoJo2CV*maRCD}M3JPqXzaIKI4S3{i2-_;=lbMb zYvY&VR)34%Yh44Pd#0EU~GESW&!2=cGHi@QE*EaTEUT zUx(c4VKs5>Kl|)XZcu*R@4x!ytc^a;=O1xj?%QQPWIFun>c{Kpqlf%k{F^^{zjDOv z*>M)%cAcBy=Lfs2ulnUZd&dtJ?_xaJ z`GD~w<{q++Z!i30-r>H+e)3p%p5v}_*uFi3PcNGeueD1rYh53nHvX{qx#HpRoI{p- z%s@5z0bTB^4@8n{xEz$baU{0jN_jV)xSeL z?sJXDzfYZHqx^LAblU!~4WBsda^>~q*YNn@F6+I|57@)Lp}%|pEDn;LUaou;Und-X zRv(}Fu{re;Z86|3@Lp5*tNCaQKYNTVp71dD{CRFm=SxPP(JncMzYQi2dhUVmy$2Da z&g?ltzZl2|+>0OiAb*XIVDk^izWFr0Tw~v1;p-#k8H@Yevwh~Y)BfdxL-vCQywept z`oG)UoPBWMhM%poJ-O)+?(n?m!F3lG3uEs!cdQ*gp08hWUhCln4_+Vod@(-#8V}`* z;YUt5`KQB=#Cduc`4?YuNN4ai?Z}+tK30(UJ zcj&DC7w|X_|HIGX<6Cq97tQ1W_vc?eF#b-?cp>W=!&NWd$g<}7!QsmvgZAfF4_c=l z%kK-PxGu+CaINLL;ua0K+4(()e||9hE*+vnm+7EbnD+pi{P6icyuROVZe-curHjSW z7i;0Q_5@xu&$ZDHKJIO;r-Si>wf-#TpXowQjJM>!$AR%t_s+A2pK{e<=b^F5P(C>3 zA91nA`q*@n?YK9Dd(S1!)8*=Cj|-mb%V&xQ^3Vf2Ka+i*>n^m%g8lhI`G8M&hJDC! z@WWR8&)HwBeW90p{*ZC}B%Qv|2ilL8Kg`_e1M&{S?g81pxR`u!$#TR&I^S!>TR(W%ap!&dH{F=qb7KAA+xWlR|8b8y%o)pKJNS0S{RYUG9B4SmV*f&CgH$ z;3dA(LGpbB(wP<=w6t^}2IgMjJTffk9P(dlWI7w1WP7il&K~}g+~+yxS)F;oQ||o3 z{LVYxzV^O**GqXZ8f>lB=i@tcSAN*zaR-{ZcglU(eaUj#I{6;&1dYa)O*4FALIvwWBs1{3kP-&;0zFLuYis zcar@MPaWKA-N=8$272)f;*Wjblex8?)7g*i(!tX^z`{B5!SO!bS@0%K*yXD&+1}!g zKDHcz&Y`2Xctd}5mQD^hJe@N0zsnC+Urfkz$@>Z(K5*!fJY)ll_dVwE;Y|AC6L9Fy z+;z8!&#&s_iH!F>XiYop{kZ!b^UhA@!~REZdnK!SDL(QWdwgb;%zSz1>~=WiA+xn- z_G#`lJnY~49!JwB_a4`$-0(Fr=AVbYe>mSgeI@6sd3K^hG{_Rop6#wU$Iscw&DZJ1 zv)}mKwVq#}@YL1F0_Pf^^yd8f8!dRPeE~b;k@xXU4)0T6$@*#@|KkHo2mE~Zc`{Bu zlj}|y$FJ9zj^K*3%hxYG9CpgS+3hjT{tJ?|eflHsIlp8Y{a)}`ho8;zRXPy6ABpk1 zF39g3G?E|PntA7;J+iF+<^QXH@qh9ae{?f-5dOWLxaIrnw`_E=>%@3#=tLi1cr0eE zd58I}IymHieEzM@(*r-R_OUma-|(`=@Fo^^9=HDRx{sG^`N2->A#*+vq>t4{V~6P| zc%G5X;FIek&%XHsTs|b0q7(GH4Em50%pHDuK}WH_lfya9&^?wSDbbjd%fwOHoVO} zm;D*;lG)z#%pG2O$Ul}XCT5o$Ah~?5@DUyC&&A}*{-7Ah#*+)qnAW!re`0=@@yw56 zlg{?|9eLLJl~Yc7aKigikEb5aGxojN9xwKNKEG%^J>!gpVq)yR=D^AAtN$v;Hy^z0%I2G` z*=p$Rextwe?)Hb59@3Tk^R2PI>q7j{1D>)+aJNhSU^yaw?r`vypMdwZ#%j&zViQ+%&Xjey;_4 z|Hy-E&+hR%ak}RCGaAYGQHWOg@Qr=*)1`;vuCu`!9qE%f{|$dWYg}ssSKjcQ25aEp zu6}!hXkGn9`|6+b#`%bTb|S-jpLM^|NBJ;XLA21mP=Z3qERpddu$gAFW-!`1lr>9Cw&p_xaBK8pN+$&9-XSD_{QTeD#kH zy*fL&_jPmSZJ!AmgX9Crr?2U^rf=WA$KIWGad(IOJ3RdUq_saC$(3pVUF>Ic7MKo# z``q1@jdxq`K3;!^(Y@;;9-0r*4Sx9npGcPP3NJrcG}F5{>%8QRpB=(^*0QxVy70Xj z&~xNIzUyhHwVzWTe_B2uet!}j$azOR9rr-zX@;vBRC``s|zR&E*@7gJ|jR zG^;z!;ZuLNPiyAnuOpXz_q^cDD<7^H>#WWJ<8z1izVY7DMKGHO;kLH#(|>m6&JRCj zr|%;lT(WPqU_VPgJM8^xlDVB{{c_!I`{dps`NK^Y@14EdX7|(l;9G0|o;&D4bLY78 zu*>&M-sa%F*XV=%dtQ(mv~tI;vuNG z7)XBk?fdir^sYEKW8j`^^7U7~-F!YCl;`xt0oZtl?FBn$htGI1Cobp&|3Aq+X!i*= zzI2iPmrf=pfy)+nr~U+LiW z8SI=p>|FXh*1oUUzRTPgeV-MjPdeTE#y)4?p}ywt{*dtwpUpkP$!B)_LuU_~c+tMk zoS*DFq=#(SnIL|4c<=AH_kOkIKEKnr(@*|=9$&xGen1z_C=T*JknW#BxaNc5H5R+| zTiao4@b-B$HF96{7tTlD@9lQ|NZ%bu3}mlKimg3Sl{(8Tlx+4t}*_I}%c*#1~M#s?33zC@G$=tG=*tBpT` zFD~erA5N@(M_8QS;U42xobNHe`u9D?c>0yf1s~DN-!3?G{43S?7TRBff4k`VQ_f!< z8ptQ*m{+a5_-ft!M{wTT|7s20UmcqITc3-3fzE$5w!if)@G0S^20k_Lsew-od}`oR z1D_iB)WD|(J~i;Eflm#5YT#1?pBnhoz^4X2HSno{PYrx(;8O#i8u-+}rv^SX@Tq}M z4SZ_gQv;tG_|(9s20k_Lsew-od}`oR1D_grUjx6IzVC^b_qqLC{nWsx20k_Lsew-o zd}`pkXuxke{@_pjmLLE057uuefADL5{LlXIAH1Ocy}|k2Km0onybYRrulb$kte^Ye z!@aNh{i(kt;P*h^MaHk~`Gw#63!?*ixHso&=0W-hr?ud#`PM%I(TA7b>!bY#e)jWs zPhYd;=lZ7xzAp{PjdH`k^;>_>{Ps=!nKSOUiS>8*C;o}wKCx;}e{c3RMsLTp79DH# z!N$SwOU6$+e|u_xAE`0w`M>O9 zkN@f)`uVHeO_)&1l9kbkEkugO2o#CN&K_*u?^qlHfXk@6+mUX|ccmlfL^mC_nCFwkQsR zaO5XzKU%Qs`{(}M8UJ7Z(!ciOTJ>Jd|3ClZfBVP3{Gb1e^Z#Umnt9D#z#U+3?f~5j z{-?FnZ&IXU+4syY_R#xx+mVTl>D^ zA1!}F>?1tDg%|D}-g$m++}>9>cb!#Zve&Of?&nj{PtK1*`{3?;?&F;f+3suhn~zTT z-UrU#pgZ3;ns=}KNqqmlmoFtZdx$el+|hIK2R6UY?fv4nc$ORL-{E^}JDr_=Jm52) zy{EX#^j*ih51{|bKflX-`RmnQzVmABzPEhveaFE)FQ#K~{`TU6``mZw-{~}d1z(*( zSKsnH5FPvOb)SA~bgLh1KF9|>qvy}{|MKtp*|`s>**)XC4;Tm4czB@y2dlnke{+A~ zk38n|tN;7mz%!DZ@U1@1SAOl^@oO$0BM({leEoZ@HQwW~xD8g%z58$va_<4j9E76} zr+VMM^ysY4>0B`0cF2};;kW7lKKt`E`-`_|@8>@2-}7NO;zmDTFix)e!RGJK{%7)c z1{l9TiTrdx4myY)NC#?5x(Mjgz|7>ioGj^WolsrGlzjD6% ztKr2vH}G4V_cs1^xx4z;8r*R9esj(?9}nWbdja?@x$l*J_<`qvbefLM*Uw(B;N6eQ z3(XhjVDTT66ZZA{-e>U;U-8V3@%u`~kIeHUxlvr9yZc+`CI8M-GFq$OdgEQD`gizV zZrIO_cKlV-J|g3LIL=3F_l4?0Fg+MMzxjP^o-O$7KEIEx!!!2`w$EB;?ogkNl3o8j z*{p?YuU7rnSLbW+>hBQVAN{FcH+!Rje|>x=M|0lWTa!oZ)9ROJF1T>4Y4(Z#?gMJ* zFaN2Zz3u_-0~*|KxdYJop6`>P7z&!#Pxs09$|mH!xBc@AYsPn+#^~1v5Y@ABUJogbgUcu($K2XI;s z?sL%qJ8$os+sEuwPJbmo`MmR|C#~9FeWyFkIH+F?v@hR`hn?5GpIq?7aQi_t-37`w z^#`u})4aRB8t)#!M|^hB_Xm0>@QdsJfFOH*{2tu>8y|Fnm#?*W4yF_Sp&!IA{X}oi zBj&8{G#aK;Umb3Rc{p?yl*gRWn^0yccn!Cq#cBny$#?NZt{PtSyARZ_#)IzaU~|=SbzI-OFn$2uTl1g>zxvM>-KXxCVo@X$AgS)?*D=u0OMr%K3$M232PvrkrU-12g{D5vd z3)IR7&WNua7Ry0CtPk>OIWfq$8(ZJ|&+ZE8B|W@?_!I})vpnFQoLqbDZ%?qApP%kJ zXn(TfC0e_$wg(ii;p@|-d37DU;$n^U&0lk8yd3jCoZA1(zx31B_XgYrJQMurr+)ZV zo0HG?dYt)Q-IoiK#plxc#b}TW)olFggW*0Kx7S+z_O`EcpFw=vOPBm)_XGGJ@q2jm z0JcBhj{Xj<)ta{#AIAF4?_+z6cewZOYv{Co@58OZ!8aXD}b-aI6{#`%zP3>Pk zuU~Cdca49N=1vezF^aaiYI<{xTeGLV_w(H^b{*-%A%nKd_K|*mKzI3&zE&Q%!`APx zmtnaSbSFdlH<>^=9o;YB zmPhyXod^7peQ#nzErRzg@~f5AetVOjO`P+!R-6XQ2RqDX?{LS_@BWOIzO$oy=c9SB zHN2C7Jo_DxEOcVMdhJ;|UkTdF9?{vMerH9acL&CM3ol!!&-RnCHDf%0&g>n4{+Dh2 zKaey3xC6LH?VkgPv;6rE-3Q5tAG&g;eytdPHl{oCpj@+$tKaCg4u^lY25RQP)^LAj2-qepfPoo9V>>XCIdta??gtgbbND|Wx7*()}p0me%( zIpO^$|IVMAmJiSgynOtb+|TCdA)ni8e)Q-Q-Mg;#F`Q^T!{6u7Di+W%w%2((O=J7+ zbMWa#9xa#lIUwJI|4hzjbNf9o-8!>e5ZveVYj1q~)ML2f%zjP3{2I-C5RJXr|Ay`s zJDq!n@@YAh9M;h%-!r-IbN$wV&NVdB|NX3IV>&k<+;N%DMPUUz`? zz4Y|(Epd>o&`kC_biTP_p}z66M$YD+^_%+$#237vzVpd?$-Z)7vRflRAIR3m;=`K# zT0Z&gdB3yBu%Bl?d~@o(^Z&-5`5)eG|Igq2YlDa8kA8UE1Mpgoqg(VQ4#bhR{9YdQ zeBb+i@A=&$v|sw;ziqw`(7Nvs?(!yg(Ami(E*gWyWc|kA{NL*fTFXbvU&izUn!C4s zjf~d!J$rv&H@~0P*xbyY{IEs&Ump!Nef92(eyoQJUms0mxA)=f zc>44aPS8BsJKX#5tb@txtmg3SJ%e}Y?gPmH_dOrj^#Pa8ozcBqU(1%xyPt0i$6E5Y z@7dV*0Idi0?|8F*>gm~EaZBX3zHwMUH*JJ9emf{Jth9Sl z*}wJgV{-B>?-BQ0h<|dab)FUa+@Ef&@f+)4yr8WmJE-wJdTrlc_nrC6zvUO_Y_Mj2 zzZbXzXx>RU&$GUmbqA0a(58!lYu&tesA626^UmM9RCfU1_Y*JuE@18e>vw|YU)fu{ zk&P^LmaJfY2x{omzr+0YKL2bS9k2%P-f!+1jc0Q^@9fJqT0Sps^6y~pxZu?2dZ(pd z%;uM!|K|5sOP0tdvQ+=}4cW2i(C$4w7(QXWH);FAJL=O($#I!nZf40ar<&dEGMCX~j_c?k(lg{#i z{C$VcO8$EvKN_Av&kJgN^qiqDA8Pi$Szk6tUc98c=mzbxUfb;xPsy>LeV6$@?(d)2 z!-w*_Xug8@!fWfs`av?aMwj%Uu@4-5F>h_(XRWb25_K^XexN}B)f^XzI^#W30W>;WEr;91x50W$HK!1~jjaXEr!#bG&4FZcZhiZ;=6BxcB0oTzop-tKeY}=K(9}=n zXOOJ%*19?U)*8c0r+CGWHBG-caSyk(`a!hyv$uW8-#i@a$qyPk=Pq+&d#tBV&|K$b zOFGi0=c|$99M4+gXYkpaz2^6|v;Wk;!avX4znA8Ga*#Q{+I@hIJm*(S)m`{K`)6~! zq{no<)7k63JBIeE_V4rd;j8`K1Dxj^aVrn7E8g(w+27fkbIgf7Jgv1MoM3 z+yRWqntgXzOlIrs?6WUx^ik}golf=LEy}T;lU_C7NARw~9R)wZz5m`^YoJEX_;M$r zA3Wxd`97Gg=o9a|?E2`Cnf!3=G0x^Y9NAY)?)BIlUF>uEdxJAPRtMC;TYv5XONRRy z2mQx;7xxNt(Znwq@QMF&eg5j)bU;S9cO7`vp`UaB<_GBl{d6J5(4p^I^5Tary6-r@ zxi^pw7T%k=C*z^D=CkpRZ;t<~fn=1^jmeVy$z(nG_wWDQb%7?`cE3oU&Q1PZ7y3JI z`q$i&aqpvvFS_Ex*&O7@aIKMf*4F&c-gMPjgL9ruetgEAigu5WBVdF|EEH&-*a z`@pmBf$zG&YkTaA&NGNNXV>th4>!K!*&JPx3tcj&Tl@6m(=)iSz3DcYquV*=JFoq4 z(!(x`{3Ovsv=uuReGm+nfKT2jlwSdu^v(Jq%hS=Z>R~Z!q1CuGe#O z@{mK5yXB1X2ECY1Z}rhK7j5{Sd(lb8?HnPgITx zx(Dq2?g_n*0QcH|jsN7|KlA_HpZm2J)ZZK2Up&9l;7&xg{w4zc@?A1yE4(DzF1tQ_ zYjg?PSIg%?a_`Ud##(i6f3MNJeXZ+{kFOlfHsyEU^)~K|@WJ%m9J}uCMx0|W|4(kR zk~{gqS4U&Z`*UX3qk<-u%iE#0DL91q6zoyQmWo0fmd zTWJ2~AN*kE%>VS?{ev0r=l1+z4vzE5PNwv&@65(<&9OIV9FNXSCi8UoN(bimyl9_2 z&)R;zGi&BG`q1!bO&}6-QSUgPj>S=o#^dza63aE&(1Ix-^mX?%LD17 z&tdG3hO^Mg7GwlV*zk@q8O`~dC_?aO~&(FkW^Yxx?8H!%!a$9p;fjp5O|F}rN+;61Z0o)U;slRHX zy8&5hJ_9JHupJ-DzB{B_cj0tHc8$*H$KKJ)%8BZbIcw(A+Yayj#$>>wrskFZ{{4UD z@4EWt8voL|3*2$cHP1)za@g>P*Z+fn$7JC9{1*=(++B8kvV_B??Ja(d>D1n8a(V#i zA)f#AkCwic-uHETjrsNDgO$U|=@(oy;0)fX@zzkkTB`ZEI`N+K1W*pq~VE-H39e?$& z_4b0R%^3^M`U%M)F3hC^bM8E3quclDKY7>+yw`s^-gVRY7cU#%@hoO{+1QMah}rx* zICu3$o$P2NBMUc9){=&WjK{l`nPTF+;j1D$h!4#*d* z?YQ_w2gD0r@zEH5_cid|H}*Fa_J)Qrdi=dycId%#&cla(=WqIZ1`i$UJN?Gy@S&j@ z&*Fvd&5>zu_Nr}kt)(Y>&4bN>WQJEB0oDJW`~T+8{bSdA|LLz9uimTsKBNDlncveHF$-5-@ob?_pV>F)Jt%!SL(9hG zW)J$o!_kg$`lSnerH^Rr(E7dMf6sk#9zLt>#y+>0@#;7Kr+@JupZe!rfPQ}1cMs-{ zvSi$CPmbM>$&>8C`~u%__qev-*uH!;y@2ZR{%)ead~f~m;RCiGy}cgj@ATDr*C~?$A8>B+ulCHD)(5XxRnrd)%8NJ6ply2hMMQIzihS z`qh174NY_U@Z8Vro9F)}<6Y*)@Y5APZT_m8&7BZ_xej!Oxp*u_XYQ2W9J$07UA&k3 z_N4>RnVpv|oKwSF@4be*?HAu_zFJ-T8-MNh zPX4~`0_zTdhBogE&d&?b7SGNtekZpqUO@WMn#=d5R}HK>won(T+P`0{vM#39xe1I zpD(!6?YonGmhg+~IiD`n{Qv$h|JJKH&zv>5=#KptB#&|Ovm3e6gSBV%pZpqI?f#E$ z@zdVwys`5%IOfR}zW>)cS--dkEd5#YtSweG^uDNbi(b0AL+9}Gk$pjZbL7?Z*&QT5 z*&5&dpmF&Ito}#WUj4?-c*$>kpOC-6Wp8)7x#upQcXux)#6UPh_uTX9jN~6a7GGdF zBR!CV+}8L)a=wCO)Wq~XCekN;qc`W1@6@|_zQC42bn?CC^O;w0uRraF%RlgzpHyR= z|H=obK{5`kB13d_CAbz%!0H_?r6v`~Qu<1H4u(kSH0yI^L)8@!H=9;{onHh8^#yCvF$zY!G}X0kRHh&j6PWZkNxxy zuDajz_|BjDj92;TsO5)!CI_5%iLuxD{Eq)V*N5YNq4uMJ{(t%Bf9usZ$A2_y^k{#) z=^y$yY)2L?J-v8Mg8t|RB@2_utxBvM2I-iVh?7#7h)*b`=^DcYiXV3p+P6vF! zS#+PScOM)ZEu3s+FTbNJxw4!|9(`-GzV?v2^`JWdeZm>tpZ3?kpKq+;)q3_LzkWKP z!+Rbe|1;UsX?&tjUSoB)`mgTSZ{Bb0->d)s{LlSEc+uDekKh%D%O?8fhu=S_KyI(lNiFD|6u57i@}0YwEW50QTYadRD*DJnjgO z&kL&k=%9ywcK~B8-|}9d&jEHm$0w3wot+-YdyjkkS!X|bAbawoBL?Z)KKa3%ylsAJ z)2eOmI&kRyy1%b@F-N{?*yO~s7TWJ@dC5a4m@S! z#@YW4)rI}@f4++*8l6-8O+3cqk_q3#JNZ_ddab|7L>K1yi@)2^XMJMhP5nP*L*ZY1@t4{8)J5hBnSj|%h)jP1~|B;`} zXTw{5Nsj!TpP9ew06rXi=j-;RLwo2UsMg{iANZTv-}e<3U-8=g0FFC=ypQHl>kpb} z9rH)+caHD(*%NK_YrQKmb|1*U`h3A%5e;qlU%Y3}^g!NM^`E`yA=yEC1KY@ly zrtU3z;aY>U&sWEHeDu+_rf&_6olZR9?QSP?*4x|u_n!ah0)2AOgFWd1opca%=I$4x z`(-1(YF<1h6Poj$cj-c({KW`*ojYsp32R-mhtA=$B_EhGH(%&n^Vv&3`OV=&qtkmH zAoqUv!2?|K*_+K9<3&B*>wfiDy;hg;uGUw_tKa7AQ}dgHgV*R8@9W`3FB(1nd;cJ| zXW#M{{NWo-dIghz?6T&_GPQR-Z|kcg{Br7v@oL8OEhlK!ruMHr>c6_x=lf{w@BV$x zr*?`#HByfDY%h0LE9U&Que-$5|3z0`z>_oiVKELC^Wy_2pW}~l%8qv<5yASOB`}042>@@YYITwFhyXt;?pEbXEki9i=>9ha69XdJgZX@??|D~JgpJ$^r zalXcMNoG(ppH2D4F6*;C{b=yG(m+p{hI)55jC=3M?` zJ=}b%dHEfFboANPdUhhWK6?19Ia9OuTk3y)gHAN*A-ei==4lT;VVsYMhnllTzgulL zC%>Qv&w1%Y-ZHnJo6n)|>|!9>klp#{*>B!{eY7=aKKuNiPtYYCenVgOqKTe0v^9Ne z>TY%4bGSKBUG@&3dfi>2yFlL)2*39Q_IYoBX1MlN|IJ0S=l{L~0LL2M=xy|H>fbr} zKzb#Y`m5G@FGnxpB-_GEpVeXYue-Zirk;C`r^)y319HC_AwS>izx;l$|8r+pe0YE0 z^MdXqc9No#s&c=^>0Gb;4)%dCZ zEB^HD9bEWZ!-KqskDxkMT?@XNYn~p}JI~$fKOV?Rw{(p2hC~fKA0}_yF=iu zw#$*>Fwa};FIo*=}P`}_eG-|U|xe~T^}FD?4iHcKy|LV?imT~ z@?Ut9po9kM%mc;aiu6Z4BExiw?*$!BE6i0CykRo+3A5U%N=|Mo;~Kv!F<6zARpQHRO9@Hsy;jId)qg3wmU}mjedWH@14ip zfANJsv^BUNt^fFv&(J_K`$s>01V`_uZ)7KX;5%2_b&yY5w|8H2wsY;Vo_*29fAqoO zYe6*Pv2)STtg%;l;F%73{&zM!IMIxEvYInii>vEuzUTF7^8VR>_1oHB$Bor)P2K-v zfAN368r$|>e?Moh|KfGOXY9U%KYXS`kp0P(AMlI5o36&eq3e4NM2G(E^$aiO`W(M! zwrc-g|2_YEp6@wXy@IbMR3pIN8}#`>cM{L;e5Bll2hDi$=;D<<@Vqzs;5c9ZS?tT< z{EaT00Ve<0ddXQWryDwPmYh!h{rNwsfU@sE*YS?sIfRZ&P!ZO!DQ_ z{>2a2dDZ`XpS{S2cQW1cp1cA_{^aY)UksI(?WIFw-~a0!&d%d?2l$igGmh;u0k-bG z_ak@AMZ=v1J8s70$e?i~nNG7%-Z{y(58Qf#NlpEbWf%jE<3d+!cNH*nzNjV^}Pq95GP86RW!wVqGh z{iDyV?AO$TXp<`%^pj56t-Lkyv(5-Q#~JKeKR*rP(f-baOP2D$D;9{%uxPX2>e zeP`>#t^TY1p6RES|40ApJj1i$Ub}z&KlLA8&-BiR>skNzFMMsU|1-Dl1olUxyF+xl zH@HWbtKp5@@r_S9CJ)&_x~8kX!#B8Vj?dUT_B>^`rpYy+HSYj=?=LTF>QnjNnmo=1 z{xZ7Kwy+CK%=l&r!?lG?pcO8%=pAZ*hPk$g<>MK|?mVfcXPUNENWMn^eTuV-TYo6aHcROd@ z1?)pdgKIpr&ihc~=E9rz086L*17Cc0=N0c`%Qerg^q|qfz5d&muHfjmfA=T;23I~t z!?Qy8^r*QP_->3mNE}Hm2XMBF~altiz#le~{Hg_3z z`SJfM@9~Z5KVRV2#d~z|ah-kgG4|A7d{2MDH+6eG%lq7B*Cxd&sIp^H{|2~!{_)RhKM((vnuVd3?TlUr9sug~(md)X4 z@^O8T4~R|pS~Xn1y0qip`<>Z-w3_Q|awl(o3{Ng|1|MMOyX^ZIt#kk$HhRiM5sY^&)%(?RbM!=VH6Pb`Vu)u#t-KC|Z+r*3>+lsxJ&8P)vc?H*vvzT_jfes=>p zK%@HtxYzvp?iT5xdjj9eud^3E^MN4Q*@lep?s3lt$jg?+dwy`~g6)?+G&DTdsiXV= zJ!jC1X8<-A|7gJ#lju1kKIw9vSvmpyzE-}o|?SEsI?e8f+%xWF^tn4GoX z?gx1MTK%UFF`mxyGxX5XoH^&k%bVK&c;+XQx;-^}$vSs{wP)pG@f>{Tg?^+N>_C#kHQt)#d8HXMgqH-2R?Gji36z_Inpl>)9U7?iuK!XKdYf z1oZC>pJF|}>5mS`Ob6tnL;4}3cL4hKkT+^VZ)hUb`slY_Z$qu zom%)yuj_xcV(t%%hJ9$p!<*bQ=Rb1Y@P5wO<1D=Kk?b3!3wogojjrscC%UnQe@*?@ z_@eq>Udf-r1D&hI_f^AIZQJV{IbSt(abN4M;Jt}j==ndLvlZT)&F=Uni*K7im19b0WGdkbp>>fZK_1`_9djn{`x=*(B6|@FV z{YP63d9U{Gypx4|*@+JBabLXi0Xm#KbIMJ2^rkJJuGX5TYc*c2cMtGBfGwP%-}?b$ z4Ij=%W8!ns=pDc>{^&QZTDIb7)ik=r3%X#qSFKa`PF{+Mf%shW&PfLTYK%2uw0sQC{;uFH-AC<* zA0O!_sJ$;Qm*hPJ+RfEmn>o2q>}ec3=P#FP1} z_TQfU@hc9Vz5_V#0AygB^0G1BoaGF>CHK%d$MFopF`AU!s_@g7T>(dz@po5-G z*s?k`{<84kYsTrc`~qrXvN{*Ma@q0+IL!y0)APTazd!%?>|4!K=kCw{&Ky1#{o?+D zC%+f(3rGDp>i_Ha|8gB2(F+@Q@5#^1Yt?@`*`NREQVS1%`n&wqF|g0}!M$I-yw5eh z*MB_VrG`IenrCZv=p0HU;TeC_gfq&d*%nL<>0)xT{5Zt;}_@Wefr{K z-UlrDL+89VMB|{{{ooitSMB#+IDE9r`Md4)`4YRyOYqQs&j-}O@&Y~BJGt?s#ji9v zsb=eU{>XX0XSc7`d^*4f|Hcb{2GtPfSra>O?bG6e-kRg1bI&;A1V8YS8N@4_nukv& z^zV7#RsD|^yOR+ezNN3R%ih%Gp40VT*8kh*{q6$23wU!cSa_cGow3({4J{(rTm8c^l8m|k-q`oU?a1F#FRV-HRjV zYP+8pdln;`J6rbve&G%|k|V19&L@wv$zVKoK5d=f z-s9e$d)&(f#F_w=lMH7_1SrH^P-Ku+{4MIbI3nBU1xyws>Z{smVusc`4Ruw?*Q!Hv$|Mpk6e$2bE@O5MUPL_(1GiW=!I{s zIKZEFj{$qh1^1)%KOH3Z=;5TD&O!5H0RDWp?|jDZdw$p4IS)U6Cyusw!W%olp%;Gp zW|Ld85`<~yk`tQBHXZ`B@ z4!!?Z@B3aL9q4zLK(F&&-2w1LhkS(|^!a6Zz`Q(Vt(<(X|GOW-yT_WC6jz{Do!()6 zaVQUp?>+-o7xtRJ_ovRC`M|!;P-o-?IYX_%yS4b+dG7t9-<_Gi$NFCX-ILh0yAR#a znR$(FH0SUSJgM#c3H1HzeO%s2x1bu9?4Wu-^=<3ZL7#Kefo2TXn(_Vfe>~w0pV^(f z`8!_Oi9B~5z)!}Jf9vW6$M&b5=|&q}FPZ}ves_R=8$dR4j~(0tR^Q)vNGEi( z_u=su^Xh^9WT!VaRu|MoaZZ+qnDL) zdKSW$_;L<9)q8x?H@!N`8hNho#-USN^sfGS-m5zR+ur5Re#y@VI`h5UZw-%d`7_8b zoB`tfi}Mz*>0w~?`h?zLRnOvUx8wl!tNw!OQ1c)?x(AqlR^RPuUH=)5GrCLYqpRKV z;oyDraPn9j@Bw{%kjeh{e1J~y9)2~%`RHh)lTGK&wvN8qyx(*7zISBkqAwostNzn1 zm>;2!CVJ^*?g2|r1JC-87W!&5xzNjAL3|Yl_G<1b_dJjo-7kAsUD;+sMKbbqzqHUZ% z&F28iHe}ZJTECCYw-#h?y5S?BGu6qd9qSx&I3MrM-2F1XXMU}LbU_d7Z0|kpcO5vp zd=ag?4xERlKCf4o)bOd-YYjcm_w$Uu&WlfH<0syy_KTrq&-PmLnTkB4Ke8>HAe%a^WlXIrK zXLjzsFIRXrq9W@fD=WXV>{adKPcbl$6c*{ynJ4;sD8-#GQ*L`#j|^sI?% zxNxSPF5BZX-pNs(<5#~@|KXzz7oBv0ZoXhGpBY}%<+G=nADrj)Yo3n%|5frIw9VlQ zEw*B3@|foz@+!LQ3GPPc+Sb9u#Mz&{;@^I9q5JON|Dj_zaPgSD_BbQo$}YcB|L48^ z`u*RxfYp5d@ZbN>|9y_tdUMvR|N4Ccu)q21+mQQR0B`t})A<@=GWvA{kd}-=x_1VYc){Y&-}X&M^5m*07Sz%>WX`T zv3bwJaMAboWKX{T{kQLn@Jg0@tg8e5y<;miAfzfrJFe3QXAdy|bn+;sq-d{6n$ zzU-dgXX|QI`F4J*J-UED?b4lfwLD$i>wW&Ve*>uY2lLuswd*XhpclO@n5pH$^(cFF@zCY!DYj}`P<=y-OPqpD^=_4I% z$Zj*f>b`dX#`Mq~5&aswi)T3dUexn{(E89_aO+_DM`pa@lTDprp1*Fpzv}Zdd&!;b zbT~Ra^zsQhs`gf+`4PSG9q~DKU-iGbuXcHUQ}>&*caN)YX!rczna+hT=Z6Pp>OZ?2 ze)qcyJew=d$@s4Jr4#hYPj|&cvZvep06mSakK9B1k{=Dc!Mi^PB)c^@8rjpIc{U(F-t@J;(O{3B z(LMj`SF_cB@ATDued}uauKU$|^}jnneK49q=V^GjLv#FL>imItrw20Kpa11qIeF^; z!OhN-_s%#w2PgiHpB0PMV06?jHL-dPYUqQ`sMh_g{`dSZFN{B&oZ<|3jcPxd@t>Ur zo^z@*_%@e)gY3U;t-dEa{aIswt=d2SaPkNrP@DO*I@cXQznV?XYI*&C3UmkP-M>7J zCpPN$f4tqF|Jj?*iy`tPdyt%B30}EV&Uxzc=q|g1<=*0Rp34v2C;sWtOFo(0JJ6amTOWs%ANt@I(Mb>ED~Eo(f8+1R=YMO-O%`?)zv$QU0k}PvbZ6+_19+Tu z(LZ=IPUZvSDPE1yb%wrtnBTvHY(+=;3tIUA`%V8qwh||55BzF$(7IL~tww?3&Afi~ zznZ@B^x;JdM89{u|KT70<Ib|HE)zV{A;dw9m*@O_{;ynXupUp^}DvuSdh*XU1EYvqvo__EGl=_{T6tUv3X z{f1Z1u$~KdBZG19TVJj9ZrHhMes_}n{9pa&_v9fPd*hwG@BYqDde;jFUprgMLt7%r<8pK3sPw^Z23XO?%Ee=bC%g!Hchl z&dwTMFC02R2YpS>xIh2XL2*G}?VU3^YwYomKOLl#r#>#d*oP)sT6ZsVa^IsCUhl=z z<$>14Dkwhj$rg`&#}CN4@W10D{tkWfn|C@$ezwBT-47bWr6YOI9{ig_6V%2}&Ukzv zc=45Nvv!{S!G8be>+C59YzWFadJ5)9Sxo1&#lujn(*i*IrRDH#K}3g*fH<^ z;CF;-S7*q1YB?PAhgbX^`WieulOvzT+q?R2jqGr@?07;S?|e(Y#ui$&A5{B2^Urht zdj1c`y4nxcx(iIrKl9!*YiPWx|GVbv#}7yjx}pz#dQC2RRY%ksHFDSgZEH3jJzn-U zo_M^VzUOo`z2B%oF)oLI>af^$mU_MGzrK23>-TSCbksZh<%Q_kv)hCA_c_m5=J(n? z=H=IXmtNFUvTNy&o%{a(c?Y=OwbRSgr_t>rw>9o=@POSFegap0CwH|z7%k`GW$bc6 zeu~%XKOeQ8y^Z<6T?gb0Ctpto_U~B#uKt|0e2QP~esShG{$BfyYx1(TYrxe1^|t|d z7}^I8U*{}(&_@2_f8(RU3vbr0KG{FTJsr>;J@7O5&O&40@%1_5g4_RhJ>E6RT@BxS zOrFt<+2^_Es*n5IfpQF7d+@{tWBbF87uzU}WFQT~TUbcSyFy6yl^J#L;( zAFnm^oJVi`G&$cvdZ#=7!WYPyEkRAg)dueZjPYO2j^BKlEj4=h)%x%L^th8f^cpQ^j1L^>Ob!3p&Uo~* zz6Ypo$5%S(+kj+O$D>vKw|DCQkr!V2BFprTO`02f9lkmzp2Rr2YHawf{yUqV$UgCQ z#gnt>KHtg?)m>0yTQ*VC{Z?P??)ks^?>89vflt8mOh5O4^RB;pfq2y10sPxy_Vyb> z=iwtBcApK%Onx$n-+W+ne01b1IGtN#1;&-%Oi zul9Q{09N1SjOek2Gvx$xot3|XJ^SgynS0I27i77|Jp1zlI@x(2EBdGPz%qv`vQMyy?$%v>Dc%Q5AWZN_u7SPJskYv1)un4cfRke?5%J9t^@dFftRn~ z1I^-S^m}*$Cl8-BxYIIdXBYVR9zQ+ti&p1tI6idaZ_AJ$-~;VX@Bhh7A84|J^T~{c)>*-)Pb@w3 zcZ|FK)6L`Czwhh6+{gBK)11k#-Jc%%eCQ}z_vim~kB`k$yyi>R=x^KoRiEtXYh*ur z@&!80HfoL9trp3pyH>N^y~)2?&-U$Yj81d<=-p}Vv3zd~SDSmAGmg*EMLgqI+cM?v zujFqI|KuOvy>e7E@9~h&&~G&uq!+xQ!N%dS1s>FNbuAgdfBZN9b>^%k3tAc)?h5F^ z?JTrvWF`Obc*(5~*SYqR3;x^se{={(vu9`?8uri&U6yOJbG4XFeA`d1>b;t-wz~)H z+O3xN{|gG*3%~aOJ@dOCOzl5(x+`>MzX$C*0KV``kNDT8gKV09z4QO+^MCpTul9_) zEAESVwb>e2{dbR2i`9R1-Lrk~|Eu%We)D_H{RBPx_n8kq9=;w=+3Dc}KY#vbe|ovw zI(_j!cGmciyrj;0rqHUnLB0YP-2MCo+-r^Zp4O+fA6*;k-&_0y{hb2bp8w6GpKSVM zExv<0&gqxzo=ehYx&>RO7qs5hesx>kEw9%H@3kKee6S`)%iGZ+&zyPSwhvy0*X5h# zsbnDgr?{sBHh}Zf`hRqkE}rnr(M>hE7_g2%aVH;$Iq!1d6))f5W54^0Jj#yhKObd7 zJbtT*-_CNz&|C7;RXPCqMSg%6bhG~*TEjCvq!0V)P{W_GbHQTr6-*C7{M(Zc1le63 zbe;w$S?#^o{`CBV+!s&riVnH?l0JX9%X=Ts9qZt2+4Cd1)MpE}+;vOL?E0+M!>bw7 z{oX@nHD8_V9?+azf2R>G&{_7j58d8Fu+iA+@QPo}I3Ey4pL~E$oDH8I=H1Dm!LOda zbB$)Ox-_qTkWrQSIgZC)Obzphg%aQ^-}5h7*%l3U z_IycyTJ^X3PbcPrt)ua)%^tXW@4er;bFDcq`r+cweZ-o&!B5GdS>wz4{NbMO$XTw3 z`_SJbcIH`HES-k7HGYJS+CT8jf#}P#>UDYCxz+UFfzjy>kPQ45FY$n<_#U3EokmZf zeQ4naulMJFaV#Igss8W%qwh-(<9Dae5A(r%a^}uFn6JXYA3dx6!=JsL^{@BYTjOvSF^V+Jpa@0 zz3%55^k1!}v%NQ6ML+n1{D)6`v3YSphIDcF|NEHE=^%d@8y}kHq9MoLYp>e1f3MGu zpjy_muzFCPGiT4f7qkw?y0v|;;1}NYS6kpkZ|C{==2Q7HJptK^OM6IJUDRq?AFnf{&f$ar|t{G-xUY=jb}O_ zJO6`^{=53m_wc|6_T9%GdLc)$7;AijovPpJbMNrgZ1$Ske|`U7{bvVtfBw$zJoo$E zzxq!v#%Nma4&WZ4@676baQ{w(UwSF8&o z`q1Q!kbev z;Jkad-bvuo9(+%Hp7s2_7`^8^a+1CK!&86h5j=XO7re`7=!;4B4A5Efwip*PwZ`Rl z_hS9xJ=l7AVvnPxW;nxr-}%GCsVCs@b$H8X?+}047{B+pr-R~ReEi5|Pjn`aTt3g& z^7DNE2iWh_2TpA-X0CX7KJ$-WA9qzW$buLAmCww{edhD`@$-w1nT!6#K-!>({X-2v&uIa_yV?A&nIIefCEhxiJzb9L8VH3g6M z!6_H$kkS`=V{~upJvg0S)qpdlQ{i?%ix_9?# z^Zbr~`qg>Q?(^>ds@>1|Gv4p}tNnM_JAm#H&OoEH^P~L4Sgs>0-o-R%%&zn~&;LKX z|Nk+M%1!F;#NDyS*j~;#&D?IqDJT!9{r2|mUrq1*{(k=N9e{8Cx*x#R{6FHoe~1U? zm4k*CzIo)(pWhf~{5aeF0Y2Mh-yr+5A$`a>Y?_br0Xc}is<+nl&C~6(ojEnyziohr z?mlSNzr)rx#3!HM`b5)t_)_b^_%Zh0-&meTtNPE@aEsymHQ9sw#J--p;1%o9Fs3Jb zfYp6{IAVK0_gAyci%+mtoZn&Vdrx~oG`j;N3;o9n-o`G6*X}FX5`KEX^F8j_nhu^h zAC1%OPY2^?`F`-&s~EV$;(#rCcAaPbH5Pvpr{^4U6vO!Idjb45Ke|70+#TPZiGxG) zyLb=>cs%PG`N>BIboMFtlb0UT2WWqE_Bs07SM|5t`Za6h<)_tuKESqM_UA{=#KWdX zcdvf?-~5yd@M~TZzv$urRSqZ)f^-Zwe@S+8bb|(a+-se&oT||=oN5~x=h<9NSq+Y7 zMmc-W*SAkYGhF@7Y8|A*=kxz%d%VU!-syop@b~EsNEgXS53^^{diqvza3H-oKbywe z9^*Sac}~M4c|99w`uv(Lt?Q$^zl})V&H&+z?Jn7q8%z)6Adfk?_dJjf@I83)fmmUC z%^rHOKN`mDr+L0t%gN!neb;#P-?}>9Hvr~5*H`Q3oB#Fv-#pm8!k%b6&pkZE2Uw#! zeC8MKK;%gWYL<89YP34p-~Z89ZDb!iKWZDhh|4FO_y6C%(Xm$Cs(EU5^USCnmDSN$Di{wcbpCBcaK{)*ILk=dJMXQ&in3TEBP!QzCgDYWqG}rl@E4KXx!YZ`X3Fj+QFxb z`S`)p*yixX9vU9W&c@}Rd)(83xWIF@!k%<7v@SnmgYEzM`?LO^IyHIi;E&z#amB

    !*^h6lU*^>B_No2t-SqU$_Zx%p{tci$xa*=l#eRH~ zTb$sXO^X3`ey0QTXyt?U@i{c2m7bkL@7BpqzG6B#H>6v%-66UI;MrXKqh~EY-@4hf z^qu8QdxyuxPxgxE`HcefnVaf9@Wa&&3N!MzWSC>7)B2T~#OjKCgDM<;2OUx8=TpXMX%Cc*UUmxV`>f zyE<;%Z-3Q)HQe)m&-iew_h5Ug`NsZzUH1|1!ae`9g?d;%m{>o2|Igf!(>$5_ z_JADOH^~0wBzi*gA^#&cr@viuz5BOk>b`SMv&VD#$a~#6@VeWs_sv)D)tviWWA^~} zG-u+`dHAXR@4oe(|H)q-Q`g8wo@5X5lkPv!pEx>aILjVqgVkAMK80@edg9XWaebR} zVspo8IRO+~Vj8{jVe5O(z27}RjX)!QeuR&@nr%S&j(l+MaW8jRd*=Lu&!+Te?>8TN z^yQ}N-mXdY#T9*N^oth1Rr5DAZ{0cgqYE%yySHiPqsKOyIX1ALJ%-2P^T2IG^t=C% z|5NUViyj%f51G^QDUd&H9q9A_=IWETm_>Kr;n{~4XzLFuCl6}`}zJ^A30{v*g zv!~zuqZzaY2VeNi7w{T?@ot?=<;i;<$S3$-y82G`qc?iVzw(2*o1Z$4C(r5X@jUxq z@A{v=`(O26{hql~&%Mt#?%Dqd51rk2cZlY_{^u9>djS5}g750n2j0p3u;s}cXHA_{ zpT-7fEPv72tM@#`qkk$zb1CkSO47us_}PdpBm2>oUe|l{gZ#sSbcXM z8u5^=hwtMv-enBm2f90`p?HFCKKlmcRyl!B$PsknJdjV(nfL3)-2v2p^Y+0N-wz%i zzc+NIywks5-@j*P{G8K2_on21=={id_K_1EeL9)7C;S*4 zeqcV?gZDU37W(2Z_J{{?w`xDA=F{Phaq+t6$^-a7o8HD&hpst$cT8_utp&RWkPRJt zu}8e(mmKJW^j18>xyL;n$cN>8d&(W@gO8yDvROVD6c6gVGtt8rKG89T*ZcqJ8=sbL z@#MWBKFR5CgYn8on;-cuzhrkj(;fQBJTXD;iHCNx2J!QVp~r75`TaXc z$7r!bIe|^l8-F^qiwnApf4RBma`vdnBl&l@#`pSf4epK^eRI*;&{@$45AXQY@?Sj1 ze=#6dKD`5?8|TuWJ<%KaFM4#8KE~JB>i9#?@_5?utiNsUTLov}IsWjh71Q9>2O8VI{A-UFQaZ4B>U z|Cj$Yu$ta8y)}(5?OJcnJ>k3G5YFA9df)GX@sgk551;8XzRAW1ANG5ETc_U8ow;fe z*jzR)<~*OP*}Y?Tf6&|oX8zQCv8$oo9l$-H{8?OMRrf*qaW@e|`eM);8StmptKZI*$Kv6;`D?xU z@0^F;AG$JM{YS&|zs7!ez+?5lKL2NHwnq=HMlN|=-+VqEgrEFq-~%o=x;T5%h5h z*Cu!HFLRflO$=PMNS{Ai>-T&-RkP`fF83aF41RNP@UZvMlR5b`TKG0c26LJ@dNn_1 zUA%6-$)9X^`IP(F9-a1-|IE_?Xf6K9;P#)Z&glHqiu_aE=nkN7UE6c|8k^ZC zf7EXexM@YF^L+oWKG@G^%#&?+yL>c$*_$tAPjZQqPj^7NK@V;C+5VXmF8MoS+rT;9 z0q|F>zKZMe0a@{w++cT`eB@5Y7!E$kQVc$Mxp<@#v_Ua04}kpZo(J*?YuTSX$w_{? zrVq{8*`~U0Twh)94iHq!J=b>!P}kWKZvCnKr@r4|zaPN0);XJp`XK)37~gb?=j3X> zx}|o}-J|yZt9k!!?%g{8HQu{*b*g6U4$%Ma#^3u*?4M_Lbla0@d5%b9&TWOjrj4xh4K@{Zi6 zkA8I8(;2TI9KK>L-hz0}Cg9F}aPDzW2i1SNu&11nKkzYh$}jqStQut=ZTiNWGvs-> z@QLgH{d4d}r-w&t-DUOJZpUw9cBtO7V>ozpjwYVXv(LzW&dH9+KfZK${FM8x;jcZr z{*O-`KGOvpeR`<=zw0MAo2l`yY-*0~_&r@lI~|X{&w0=J(~k#s(#K=XxcaY8uKfNT zbgsBAPwsfopIUIvt;VrIeDisEncd~)YJK+FkiGajdwCYFzj5lLqaQtIZ2h&4_i9zV z@&%1fx&!0+lMm31^NI<3qZ345A7l@Wj5cqB>#arO4$-7Lyzvj` z#>dPZzS2cJlP4XBt$QBGC&-@tw@hqq4Slr8XsogK?i;hyuKU&e=imCBcl@({)q41v z`mWY{-mk&y{eZdqd7FpUb<@4 ziaepFc^}|6eb2z+)%_oix@YW6_W(^EfT!N+vuQ0K$?necd=;-~l@I2Qa`FDCFOT02 ztN&AD&$-z*$o}xtNj?P9m)7_7k7xV`|8#91|LP7vKh^a8{$4IKKlS{N>$!fx&U*Oh z<8LH?c>X`MJ^!=i{rSH;fM+l^#T!4xPxj{Xos;ZA`1ktXUNAjuC|1=Y@CSSK9^lI5 z*5S!H58FI+h#o$lb7u@^)8vEMAH3%TJeZ%FclK`{=@b7T*^7HP_qaEguJ}T+0kScO zR`~@z{qb-8EB};J@IVH15b%Aa=0N*ut1N@*X&a40I%Rjbljqy3UxpbU5K zzB+U0@u$n?_7cW~^iNls{rF8MU@aNI9n-JI8@GNm zlf!w=-!_UzJhK5Pf4UEniN5c7AfFJ&+y3^ZPy6&WGG@1GF1VXoO%Lj~Zv(mmm~#)% z)cdLVSH0J7k9)wrLs;ANJO35ThIox{a`A)YQSYa2pBn8q%*XTppOt_?!otiUwu4! z7vT;7haA~ASiYnab%!501Fv!g|Kc;+=-|*W$3M{HSLxCEv;LoaGxh$!dH%n~-2=XR z{y)626MAUdx1axwtCRSv{_DF#S&v7&3~z^yzLvekvU8F>$S?AB_{phm=-WdVpoV_A zjlI~V#%}Zo?pU{vY-E%(pR|shMmDlvXTd{5ZI4EEqPXAm;YQD1{iz*?9{$m#t7No( zk9#^O*Rg;5?A522`uQ80`XFD^r?cYFIWvFOz;N)Ed~!Cr;Z^6{ujvI1d^?}sqK$^L z>_r1E{(UQeHaz(8j>mGp`A@mu8v5xB)aV5t`9-o@OTIhY?*!nXOP=of`3<{P2dwcc zGB^Xx-jNtL*ZIwD-__Tg+4Da<`poa&K{)p2FKEaIau$6iKb_NkvA`#H%U6A$r*_NR zJ*Q{K4dwJbj<&shAi8nBykd{NbTYAV^k{$0c{OxMbZ%?-!zcUetNvT}8$rJnsE5`6?gIOr zK<^Bl!)|EDZ}I=|$H#l$>VLma!0}v_eS^FH(+mBuJK5+;Gfz@%-;O-yHy6`BQ$xC;r$TZ(<;O z=f`A9_TW9v#qQ|z&_K_gbWtC_#i_WAkDkYiRkbMDhQ^_XxBBR_r(8OC*P6b)&e-(3 z2Q+Vu{x^T!0nz~|c8hzs_qaD#t}Dm!FM6dzd4yRl(@0~)&nw1x-z8XaCRnrNl}_`uuF`{vZP$wcMOF@{&=$ zPA~0!?m2kVKM-GRLRLKEJsac48rU40XvTD6o!-$SKlz;h>DiAS@Yf#xfQ~VkUxD!n zYRSH#eq;QjK_0xY<^TBK|8vIMckl`~eMX}(*qQowzKk_EXt@Kx<7fH(J2>Ya+42`O z?A>jA;X2nj#`!nhvB8$7zPeuPe!zd_5qtFe|M=;*56s`$&KVOchfn8@{CM2`Gq$ER zpGFTWv%b4P z?*-KR+T0OV-S3Q`bG6QF9AsyF(i?f%F}e5~`F($8#GPkF0yY zv$CbmhvBUG$V>&TMH;*`Y z#KW#dQ!kEu-_?yXhEHZN{)Wb-3w^p6oNGTk_Q5ZiLGq{}$;u9J%*(NGjOj7{xBT>U zmp@+s)qnc1hfna0=saal2f@QT{A{{mGFc}NzTF$iQ`=+qhJ*k1Mh^{o3XcBHc2&mf3b#la&1{(_466B^9TAsr!&x*b8m2XI&;~AJ=C52Hz+o|&uYb|1?hjU_O&vWMBvNU%j4sdA{9y z=u?4ctH2V&)E= z={xh-1kVrnsQ>-Wpw{}k0dfB>=g}Wq(u==i&(8Uq+~GMz3={|a!pP=3tkxQf#qzgUMWY-Q-t0X#5U-P)j@`Duq;qx}S@_t&)lY8upuFKsYtM5IuDzOl zwR|Hz&;@zD&)#}Ki=5?r{qzux^k7^YS+0D?FYn_$x7SAYgCFc&LH^!6AE&cyM1FqE zmgZ{oV2)hY-4C)KNPcVNC+oXdpp&Wp$FBHIANWcqWOr6NXnxD5uaP5I>^fhowsZy` zGDlwP=(qn)d-QbHXa2x=5{LMySr;eWVbI-nf7K^jK39B=j7JA_)7i=Woo)^eeLIJ3 z*hM^4(>AQusrh~T(A>t;rx&p%#?wtaCF_%)OD|+kKV&Kf@PmfC;w$-^!+$oi2MzMj z_4cjCbf!P;@|SE0AAk5USKcU|<$5i-tNqDs|HyLa;sgKam>*uwd}mvaC;f7>{?-Bc zlJyRE{pSOnL4NzlLMP^pH8H0i?`QE>eK^0`(1knn&-;YNy<0HeXBgM$IC=3+XZYSe zt**(Le7HI!<~(1ES2n30)i-Z_;(*>Yb@)Jgwfg%$fd0huxobpIy>tJ-L(jc_3us-< zpXcOLSGzx;A)Y(uVe6gu&$CPSnRDmB1NwIxH>R)roNo9T`fN*Q@)JGDBkC?4n&(gY z8XvO{UiDqwCr4w@+$$K)ece3yefu9TitC8V{M?U#Q-Ig1{bU{x3tGaT_%43=P<&f+R=DqA z=XNH3^lP2RuXjAZl6lXO9}i?yk3cyD4YF%+?&s%k*$zKs(%4R1)T(nER{Pno=j8D1 zAH5u!TQ{9GI=bXf4}3|y(+A#)0TA6S^Q*q|?9F#N1I>p%`N$(q>B704J>z4;;qT1H zCx{My(8mXPtN+~xKrsnt^cpQNdK<2@@gO$h2Yx=WWnq_Ba+|XTw_J;7G|;k!FFr83 zJh5VKH#NEO?l<>Wz;|@{3i|ZMcj;Gr$&LEyfIMV<+@rpIQ>V^mH#NDsua?yp5B$(` z_O@;P@;O+me#1cvZGX?lmo(oY^d7*vK7IS1u;*iV^X~vGf5^@c_~0k}k>${E4q0FQ zH?`{E6z^<`H|O(Dwlbv-9EuFB*B{ zuli*!p6EGSv-_*MM<3|gLw-%4zw6sS@psWhAHH+RA72|5x6Q%jWAv7PY&d!4vS+yg zukCkcG&?gs!U-Sm@f&n*da#b4yC2ADXpvdW!_%@wbU|mM8GOoRo*V~mne5r}{%SuO zbIzelhxa>xXE;3fUVv<3-yY4`8Xto9$q%+p=+l0FRu0rxqsjs3$+IK>byodgGHgiK z#`t2RVEocg_}}U3oH6qUqHmu)`p>=B{FYfP&NIugFT5@1yFMMFL3WM)dOq3m$H&Nf z__k+wzW8FZd=z9KzNqfg9eY&w`M9w)eYp0Zp(X2_f&Mv|rlW zpM39RZ@!o-cASNtn2?{{gY@yyd7yoxkJEQnYs1^6qwG&Ea$2K@tqZcFGj-;`XeOia z?mMTt-RZGoSIz%hnrb z_ru+D_0@O%od@y8cFog6IxtUnlchEZqaitbI%N>AUIS1YLbcgW$z?1gjFW+z{fD7*0k0zb4+ug={oV~?5 z-H0hXkcVxp*XT1lvtj+7VfJ^K^{svCe_F@CGr-PpZoX9vu!sJPkM8*8ulT!sj22w- z^AY!z@|=Eow|MSsy2vlVX@?K#10g7sUc8*@YJK=P*x zbL1-)qOomXpG?IEe075_(gVmZ%0Zpw9Q|NyOI^~8oY`G1|2UYs}fyw=Rm_>zMx#?94l zoc^L0eCqGeHD|nYzBvsY{IVgRrVBF3bz9DN{qdoLpWe_QYq?3Cddh!f+2`ty9m#&J z8H-;&#%9G2Tk@;svMt@i$H&lHdXw{-Bc~h(cCJ00-~Rl%v&_Gfeb3_)-Sprb{o*1& zplfI5cjT#mx7kxCM-KF?I|om4mj2|7Gavt(_NJSh=4$(F>(0=~j(56nhP<$4-F@ex z<2Na`?|CkH=_FgBhjtL%&f2-B_(_)=T5C^u!EA?CeX#cr_U$vH1BaaW#IM#GC?1lT zzSZ99Z8h{ipL)CR0CJ(G&ZcknOfR6CKk<9!)ouOiH<{4h_W@^W{XXDXeg3`M1H+Bp zH|X8d!{+#Nhk)DP`#t$TIAlxCcaW{=W9vuVBM*7q1DsP{6rc9cySzZR#?G=vH`8Bm z_MS1=T65{L{otl&47b+0bNOmFmAbZlpQ{NdSe9Bl1Cdx!SPgV6-(x3P72@uW`|#l3klv8x9Eoe$8dS^{6p!@ocC z@qu)(q5NX}oxEq9obd#wxjXDGYkug^1$=bZoHg>Z+1wk?`#x}V1NXG_k^E%h2XKCN z7p5P69X+zqhbDf(;sSIA9_bE*W1i2%|KJ=M%EgVzI=Ulk?avfB@`Z}*^dVa#Xxy8t}V0o?pL-iF_^4w4s7 zV7k$_w(*+-@zY-8a&diY;h^oi?RdvOpZOIXz=6--!Jcu+EH65v-(}{U<7aGAKgj>+ z24o93_qjdRZ|^H;u694KdAg8)>6AXq=Lck=TWj0qa$|oBxa+7|&4%nr2W(o7Dle(G z^aAG@$K&^p=XEqZyLS%|BlSTx0?~FCs6X!^uJ{?c=T1PL-QfC-K(6-t`R4IczTdLz zv-jQCx1W%~=Y9Z|f7m)Zfa!nwN0!#gamK}JbHQ+fuki4qb?&w^zb}UG^6s(s z$Z}9|!sp3OwjJZipZ<&4Absn12ipAVj}6(A4ZpMNHEw=EG@~25pMl=cx9{rHS@M8* z`dJO&1LAMT{q_OhW8hm3L7&a}?9=D2^W$OUG`D0Ho6VOSXS{HX2k*=UXYRr==X{XQ zg2@lo$ej-GEGKNcf9h`?laWuTr|K&G=!5ve3+N0!(ptW0ZR3T1hj5ZZf6Hl{tnD+W z8Eb5ZzwWSjR+Gr`N!C|u?nz<-%pcI(b%1ZkWzH@(@|W(4+xElvv0<>ak@-G<#%RI` z&b~|DE%(-gK6-HRo&Dtn{{1WWzpW2@qDB7bC1=kFcx12PVI}~5d zRSTQ5-y9t@2e-a;t?`ETqzlj*pWn8A)eo<|^x$to*q<(vwX>Zg$5@|x@!>CdKEfkc z{IY-jAh}2Wi=O#%YdAsk`n%bi3?Luj+n?S6z0wDN=q^WA`Y4~0m+TwrYhpsH-~6lb zUfb*KH+MhB7(eO1b#-6;_wR3jY(R!Tn+MVbo!UR=o!<_U-F;t+w|Jp4Uf%O{cY#;^p1*_h@A;g3>3RHJqd#lGJ03lE zRuDhpu5ah?RQ(6}937J3&)#$M12*R;+kdwG%K_%-E8V_>@XHrsMIZdsw}!U8pgr&C zznbUkpX{8hcSv^mp6-%!cs;go&W>UJCI6Yv*LDntYps6kd;BZ?O=IW&&JCi)ZrKjB zCV%~^Kd?Rju{Ry`%v-+41G*cE(Ji0#Uy<#1akk9$!7V%6@CEY!nY@=@&>3BH2S7iY z^9%X`oda4kM_v{&#cduKyhC*RFgrV|2m`p1EjksITE!F4*}%9E*wU`VM*)^iAM=t9L!mcNgd$ z0IJJsaed?6x(9&w`u=Jhel$93*Z6y1&39MfoAd3!f$!w{)%mFbSI*3*^3!1c*cjaX z{5Kdrn2+b%8{YA^-{sfAZCiadpZm{m=6m|-{*&CD^(&D4@W_xp$lJI+XdT@B_O#X* zP5pS-a+`ZKHs=oXJ9k0;|LU0s57obT*)Sf#WVT-aE^p(Ye3d@XsJ~(7ZJG6J*6Yi6 zzgzovtcVA#dw_f;ztIIh0Y9~Hd#1m`z4z5x`!{s1=3e0)4Y`fyH|TR`!SA2V_gm)O zcMnPjaw~qFm%XzuSk1ZH&sui=61vWx8??(-}|lU|F?hl58pxG z70$jJ47Yt74*o?iUYe7y@%puY?S zZs&4t%Im|oI>dI9ea;cC$eHfOx$Z_HlF&v*Z-nBWs? zNqVg>2F-!y$`yBLy|{%Je*OL(5aZq6&HF|;yxlh^A8cFxRee4|)^bAkp^3qBCb;|J zwN|{+qZo$=Hr}v3FX8C=+g)tVGk2Q)=I?jj_y0^+=^#HC9h|epNHQfWNUqlI&>Ecf zrGxvp`5-!UW3PTRp87ic#GgGslj&#cVyNdL`9-W1k6<|~=$=-5mjfEVg1z&4wPvp8 z0{!Tf2ZFD1LAj8>{!?Ru4m9`k`me@&?Nfi#+5Jy@UahIqKeOLovCi-B4L{A*4>td2 zV0(WC(cC!te}#;98e*q7D%S<&E=}wei_MA2-M7BS`o-`o+~&#y_Is{-j!%5gxmV6J zkFWmS6u$mf>4dJ!smVU@oR?gnh9|P=4^R3RUO3_H@qKRZ{nRh-!O@Z*zkikdcb^b% z`JXfXmhE@Wx%2zC8q)*W0CrPYv8-*t5kwj`!T|!@H07-dAgT?p=S=(Eoe*IX%?Mb?N3l4zKkfUhDrZ zyvzRglK-ElcYbm8rGdY%2Gm{mf!)+vW6vKOn!nHOvHl+Kz4!TjUj1+ymtX$A8u>cy zO9NjT_|m|a2EH`#rGYOEd}-iI178~W(!iGnzBKTqfiDewY2Zr(UmEz*z?TNTH1MT? bFAaQY;7bEv8u-${mj=Ex@TGzO9~$_7ccr8r literal 0 HcmV?d00001 diff --git a/img/icon7.tga b/img/icon7.tga new file mode 100644 index 0000000000000000000000000000000000000000..f44d9c2d51cb4ecabc89d582d93529c6cf198bf7 GIT binary patch literal 1048594 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%0D3>-x8@ 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

    WwvDA*Z&mo?q0(2U_Xb8u&Edcy;ne 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%0ACu8O@?1_XPxm}& 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 z z)Zl#SC%$>@Wn1U7b9Dl5c+6Jx!I!7};wXEYXJ^e``^Z}kMtio-3Gz2B|8IN-(ROxs zfa?Ez55PaQ?)#mMUj1Nvf_SG3dQDbxpZU5uw%z@G`i?WQ^X!v5dEw77`O4Rx|M{hy z?(YQ1*~apFHYu-*2Yh#)b!Vbozj3^<@$5SrK0ESZ=Zg1xInNp#{*DKGorji2ug;Kb zKrK6f`}|zfKWk_A0(j1HzF6m*WZ{F((Dc;{J`*o|q`M)U`~V%cb>}Ca@s%IQ!Rk#l z2h0b9{7QYGQ#R8)gJ(bdTIbtpAHDLuaP8Bo_rd0)3!;N}vN@kUjN3nHvKhVLuNoQ8 z_(+x|-|@YgD;>y@`2lF`T>8ug)ArLIXtOEVHRprzPZ#V9vL9YSV|&4xGsqDwGE7?V zy94r1yyXi)JZt!8_k5cUopYswazFnImk*+aHaOqOtK)pfT7C|{zVqwT*Ixh4&HK;Z zw@$D2?RNm*4OH_%>v(Zj@HY|Scjg26kgt%7ea>`XuXT8QO&+5^^vVUG97U&Uty)(t zR@-Zy)8#tr`hE6q499-;S|47qwEH%^$IlXudxUuI-2#YL&yi^015JESe)EIA|Ig0+ zYS#h1gvCYO}N`5jnua6d4(;a#mdgwIXp|kVz=b*jl zJKr6EZ>aq>@m>CcBi7}^>SAZloRn?gkb!QEUS8M$pL40a(?TbEI(NAV;^*gKlhgW>V;TO&!6Z_KN?(2=^ zLpX3XzCwrjKss2t=-??BAMC9^;q-yl=G;|ZE_EKcpeg5^z5jO}e(^((a;drUS^140%+|U&bTz#4eYp-j zV>S#o=nlbe=!nhmDt_>xpPqbXZQgU^E_-A9>8X2j^*=wjvO9fiotM7wudx&R@U!M7 zpVr%hM|^ zBU$S+gZ4B=(;cCE2Hu=~#uwSMm6#$I8_6&F;t9X}!M#Wy9=Wo0F~)cG`Q<$8xqkTh zbI?9#utDDkSlBC7t9XE=@9I<0sKjS>G^=hnmCis+dpYWI~Wi7-ozz4p5c;1e33~WyPNZlybOm9 z_=mmX1uZnS?BDrxZq8bB)7Iv)^_-t`_xk9P13&oE-~Es8&>3GrD<0#C9O@t%VxDhj z_Z`Z+Y7Rd`uYNwLM$sXfa!j?nI;_5kf9LU6H279E`|Q5Z-kp|tK7xkd0g%(#Vz&4F z?d^L4^u6X8lJSt@2FY$q%aC#b>^5Tt7eOpK7>T?OA^R z{NK997v0l9d+81j-8<~nJnw7nA)wliXY+EeJ_xyC1-I#8z(}BFir|m7Dp-1<| ze4d`vZ&0o=CtlAQn%3c!Yi2!1$Gd>;1K_^i+?=o9T|j)|IbK0yO}>@u#3f(abwDrV z7hfx1AO0}q&+pWQsb}`)v#T9@+yT^|vv&a1{t2t|^Lf91Q0*scpBwO1zTxcrFP`F) z?5hSHyzzTBl?%xzHqoFDvXT@3Xr(*;h-Ud-Kfms*9q#dnMlsOdpmW^m=N+KW1@KwU zz$@HnlTRPqo0wnq|7L4Gz1z95HRsTadzHO=?PF^?>}-8HG6oxGgP?gl<3;{2mgtEl7}#}~UKzq83z&5IAv8lLDGj=dnA?6Nmr_5Y}i=y?z2O#SK?KQyM> z>cjlK9{)kVI#taskIH*+_O{b#jFz+IsAw%4-RMkuYzrTc8XoG4tz^Ofz32b@0FUxB zf8`7GnXT!!md(>S=!|$)ukh|nHPSqp@T2K#aGGz-|5^v_)zIe?@c`mu@)y7G=tbiL z>JC4+SO2Za{b~tZKE&o|qQ_6va81oshsin5-+jN&rp&jm=XG}g4Gpa^yy}1Pz^C2c zI^Ws)L3+kV=fgKHAJ752%KiK!-=DC2$ZzE)K2Sa+KYG!$uGU`Fa&irZ0u1_!3fAs9(Kgo@z{`7hJH3ppnU;U>$G_LLd z)%-K4=J(8R9S!dXdhW-U*wl)J>QuD>%w}w8kJv5-#MSh7e8WSpeSFARjMeYFD;Qp| z{o&`&AYD33&Ruo?_Wa*{K)kaFTcI~~pG|`3un!s7ke@7DKU4qVz@-~DW5Z|$=~7Fk z{2<#Kldo|QKEBuqPoDqPeeZdCj)c4KpS04O^Yz1RY)&7q&O(nZSN%U?-ktVt&b!rr z_n+!4e$h()ptEM*xH=FtR}RY7``pzy{2)B%Eqi|Y;d62F(<>ZukxxG#O$X|tHTUr6 z>c9PbP5x6et2KOYeg(fJiBgehA{__Dk;M?gyA5FCl&FXt~7_1iW zYjU1B^<2N!-hJLWS~dB}naKj0i`6(aa|IVJV9j$UL z$UZX<(@XlMH+=LS;3fBfp7pyE^cjNtP_^IPV##yJ#Kv+(w$A=|jZgC9MLwdd-v5)| ze9y}ACA#QkYjn`$PsLWgWqj3-k6?R^^W|V?^d3O%_kSUF2VfJt7XR>_3(kgTvd;S7 z9X|W+5KaC-FX|tCXy~AgCZ6@p(P@xO>E0Z?VDskCpnKl~kcZsk__;BBZQ|Qgi{3q$ zo#QwE@8=@8#qI>yu9H#dDFzVnO5AbZmp*f^LkoUOyb2fo;e zT=}Ru`5cZm`LovD?z#Fe*H$0-A%ELz>OQVUftuK{Z{1^$I{>}nhiv+MAl%Mc^VW{m zn*L79n0#U(yr8+-I1H>%8s*;i7}*$**zs-}@c0$j_$i`t*W-zJi`T+L;ej3#QKF zi_X`x5HJ8PcJMza=VGm!jbMyvWy zezIjR^yPgG-Sj8!joBSE&i7ht9&9bxT)1=I8vjPyd1PY)IoPw0T-rSVzi{lyw}a+2 zdci+g$SR-k>D|tat*!ch_&Z->D|2{7FZ#jsi-+_L8aD?{+gLZIcYYAZV`k=n61!=HXK?=U}bXQX3(K!CXAtk590CK>qGPd}Fu2 zF;#WEcD*6EH7HL;uy=q9`G5Krjz zoC<2@+1!EA;tSE~T<4wf*PMOv zV$VzJKb@-o`GGhfL%I#pb9T%2&4IJQ!&CKNET6U3@r_^m@;iMroi)#ipVr~m_%HtX zGkN#{f56Lb|HgDq2kz){2O9iHY(+QOoO!S1=V1Nzg2^`L>Z|=z*7omko*(|C&30P( zfNXL<{U-B-^ktpwbT(sY@=G6kOFvUr%}v<)+>dAD;Kbki;U(w3Zfs4XpK`&f|A$O; zzz@XRlwF@*&KaCOc(%UJMIWps zQ)|hy?=^0XPKtH%`5viyPM>0$tY`o1Av4{3Zv>{R8TXxa#zTAt!!eehK>V>+%^W?q z2JX$?bb)5;(Fe(oCYas$iX2V{?8@Ko=DeE@_<_%v=*%4oJ-Ud#Gv?X&WAFIVZw$`$ zxfVV+@%M4LZsLcN9>uV_7GL=R+p#+zU{ii??#u_w(GNOmj~Wej=adt!nmTSR$e+X; zK0WWXulqxIa}ODetN-EP3BBrec+rFhr*Y8SQ6Q*#b^_^g3e0TAbgD-*Z>VpO~(^xKB(W=T=?e5k$!@7;M{c99V8op%LfjhMx#1MzUn`D z>0;eI4xeXpwohi~k|(*Z;Bz>wPpJReHf4(!^5c`N`FXXRY-GHOck^)Ax|j#kJvigO zGq2#3C!a7k`}wlmHu3fI>wSKX(?N5_d;+iR%+GzlFdf{x|D>1c1NNx{^ob@ob%D=!)qXYBJtBLbLAYXn#)2_@@*)2p2YcoF z_iShFB{tuEd8avjU|*Z#=oAa;K7YW!cdgw6pNj?lBmU(>jV|^(z&y8pz8*A>_r}5e znD6R?tp%Ukn@&1=ADb^0)DqaWFXs>o#(u~z|ZYNL!aE`k$C9becb#G zCtm#>+SASKyjOj6)L#1V{4XE&4xKMmd-qy@HimCLSbd*&12wu9 zjqoS*E}?OFlXiW4tNrngf6tuH)&BH>7x|wLxC6?A@}D^12Ym3#4?n6+-{(GlDjq{O?K>Nnx6~50q=W9k zbifa%ynCMyz;h4kogiJJ=MI4W`|yFC_j_``W({3Dig`TCW9fiQ>`TU7?#A%R3s)_n zJNiJg76~P@Y7O?cIaq40=FYBU}9m z)5DapKD_!tXOu_k2jR4~p8?1E#4$%l_GoOka^0Z=a?rtZa?f=!5gj^||9uY#FXkst zdq2MR`PYo|{|TSl4;KzyEFB#((?RwVw{$e+e6BCQ^9Qwb-UW=!(-Rm@{pKg0x$1S# z=f?W(;MMIQpS@~u@MAq%`t6;yzt1kz{g>AM^rAlSofQkWT%b?a_w3vn$QHZp_>eWt zTK(`_5AOS)8>7S4_+)oEUkn!uY>|x5L1&?1Z*?#qvsRAXdCDJyt@Ek+6PD{e=h}nr zRkL23G}32t<<0WG=YD$dJoH@cPcM9P`ha+v_dqs^mwPa|!oj0{yw;yET(JG=#JGMC zo__nX6CP(yl+)C>m*_xT(O315{OF>oIZy44hwAQ}+i~JC7{3!nZ^E5+H6Kpr@uT*j z7oXKd^;|x8ADqwr*&C#r{SH8WcL$&EU{h&g>*K@sO8F=o zNw$|ld+cR*xzGJSA8<~x2l1fEIeehc3DGcLZlC%{pVph#HxIvkVEyo};KDm<7MrC9 zevYS?${rpa_^ez#)znhWdw|(D-rHPne>57Suc_r~Qf-c{Hy>_v+CRtfXRUL*^H+D0 z>opJ^am1H2I_)l)?LjunPR91o`IVil*Wl=fJAJ3QXoK_I`ppN;tJ^al@XgoM{`7=q zcL08+<-5rp#4mi%dC3w?9&pZ8tIZcHdkh#iH|bpU@l@VtH}+$b*Xp1i1F4{h>0>x?&_ zrO-1S#Ha6$*gG5f=@hKZ_4>XOT7SZ5n@g9i=gYfXFCDLE>Z5*EW2@`c z*2X&wzt0TVp_&Z0_253Y&l~S^?V0m)&b;>no(Wzm?-?E)=GW|AF6DQ8u6SJITRg%S zgXY*KUjg|)pU7rlIM$o59}KT`z7d_drte(O{qlqTe3Bez^1WoPJc>5oq62=JPX;}M zXn3Oo^Tzs~Bh9y7zdhFV!TLUrrAN)2F=!0exIG}6ep}Ss%v;vP%}eCnal`=`*p9u? zrF*|$Eptvz`L_PN={TuoI_@` z<8T_OK$ zazZi3cKY;FURdyUzIkoc?AzSzw?1Jx#yOAm{2hza1^4yF)}7UO!nuYI_h+_#t;{>VxTk~ip1)ZbpHl}*|Hrxfg8Ujh zJWl-j!6}1&-%Z-*qZ4#?G{A}PE@sRYc;97u?O5!4cdoXo;l}i$UtO=ZgX)ZRYt`l* z&N@B&@Fwo;!+S~VbALR1+}fY6)T&Hyr6jv4n97v z4)}n)!nVoN8DMeO`S8@|=>x5SJN~3qA71?(T1$Tu*0;_+AYRD-ah?h7l~3F!oq->; zryS-rbLy2^>}+$@E`9s7HGj)x&4JUm!wcF|EANIM3^yL}pfvc-7_^of~en8iVjZ&huXRE{GPo)%9d>H_(iOt;JVkd)0)XdE*K7 zt)tah6T-(wd&E@q+GoxFWs8sT%$w{%IzY2CgURGfyagve`r+$0b}#Qauz6$c48J)t zrUU!*qZtl}xA#%|(}7y=gi-v{Ie={ws8v*Co+ve%ry>SsUe^}*S!MYFTxX{T$SwfE%*?qZ&+ z>$5cv7CZAyxSiiVbwdAr=>Q$F;a45( z9N(2%;{)Oe4v5d}6W@5WX77}H^@ko>>x}dsG>=ZSjGc!UXXrbV4&TIV_06I4xsZAH zgKU-kvc2(cA9qCd*Z?Xqw4jdyy+?U{6Y76H+C-+DlIJ!c$np0)b7yK?jK)gI%^ zy$3z(?R|ukX8j-@X8(jIG~cHV=sn(g&$z}HeB6^aI^aw3=APH|-zel< z@b$sjUMu@N*ZYNZ(EOy`9Gv$h{~Mh*4ZLaKO#^Qlc+hz?%l%H1MW@Hx0aL;7tQ>8hF#dn+D!A@TP$`4ZLaK zO#^Qlc+8A95&zI9rpXks|Lp! z7=Cm8edosEozV)%?>V*prndR_@f*+G0%($P=Vj-k^WoXk`W%~YtY2$yW4|3g>znf% z^BO$;aD%%HA9w6GFUj8-={?vyekT9TPx##W#69b`KiPxfzVF{W(VySGt>4!lzpbYa ze^+a7BH`o}z^X~~X4<|jgZm&L?ogZ}Wszmx3qQO$j-MbMywA8-d);@d!62Th&1#;e2G)#Qhp(ACgXY2w zr?L7n`xDnZKJ1wd5BLS|+4ePSbenJK*YfXd1&V|9+wfbSY%ZH+V{rD-3$D;j&9Hz{N(4C?e~A@JSW#n*Q4p&`d2VsuHf0eaINW+ zE8Qi(v+IWwjHdPaZ1z(5;8pjcfwtz{8QcB+2Y+WkY=&cgZ~cD{<`@6BST3f6owdWM zZ);>T*O~f@?oIC3$a{vXeiZN7!ddZ|93Y+0!5KgCHQ~wlk*72>cPKQ7H&7HyUf@e5$4qmvRv+>hiAimG!dd(cV-qEH1V0Ho7e#OE8 z^=F*q7x2utHevG_T06TBPF+l%^&8g*qdoN#p0nv9n)|qUIk~>Q#;@`D zGu&)2>89^se8SPMS+AdbbFTe!4t{>nx;g!L2}V1-pmpcHG#7ej#@FQ&G{vsJVd(EE z`g?}{wxhAX@nudEU;f^8f1}sj{2P$rok28f_SDdy{myQF--9-tlUKw0nGIh$M+a!| z?{wgAOU8$HQSlIT2Pg+N7sPk{9ZtO@^Mv&6Jab^7ayj0#Dj~~eSbcr6> zoEz`X)}}qk0gt{wxcB6?ZcjANAh|kYLjMn)alY8!+5*{)9@y~Xya$-IUtLvuXML^C zwnpFLruq-=_1YNDS!=C5XE@RC?9Rf2waFhk-T{ESeP243H)kxcE1P7iX_Mxx^8vM- zeb{*J2`^|}Y=Qml*499Kwa#jM2HD@4&gKJr0sk+R_Y5!j(L>i6&W^X@5P#;#K~He$ zp;*CJ{u-QeB_B9r3$8Kf?D}W()}1R4;rD&S0i9Gw=u;~vBwIYC1A2%Txa7RYf9vT3 zu7+NHIzX`M#b-RXuRX~Nwg)6r z``Z(Z=F^G!Gaq>F^RQ}vHbyT#=<}?>QTJOj){G}?K8Q#CWU1d6Oy&vs2YGiWf0$!y zI!}f(TRt~eyraQ~_%a^wl$^SffZyvmA$=d%FLN0X;tU0%4Zt9}G{npAmQwJ}- z_f4JT2l+1ki)TD1+mw6ncNg4cZ$Fs)c%S_#=j z`pyR?Jey~W-3N@r1#9SM$Gs1yIMKHr-1p#-zq-4K1+|MDFOhl2aewN0O+1J(G3tzb zkUaXyk-Wu3^3o@qaN9p&>vL}JlUH8W@DYS(&3St+AU~hl<$K9EKcGu-g-2)7ae9dF z#^tee0YAOrF&Uam2K%GCLu<2HKWpL80lvzIA5{n9&))JOnw^X9-9E-}$es_RpVqQf zkUruY+{fme)qJq|_J#xczX9;TW_Z6B1AN0eT>g&le5k$hAsh`3SbTuS6DQm`S3fvu zg&*t;P>Z+5LHv<3UF4_Xzr@GG={+af=w?TCz4Pwz9PdGUCjQyD?>|QWB`})dy6>d} zFrTLbwoJa~V16KHqJgd$r3ZA-OE%DFYjgZj`pK}v><8`*Zgbf?9f%G6*75Y3+$Z1h z&uS>>xmqoi3-9%Z{H_I&Eajr9d94QZ_ixA_iE#Qpaymac+Gq8ay}i> zHJ`#Sh^D#cY+Z~8f87`T`n9LA{q@mn-MoHh1ot`fwfN)<{IvY&{b`>^vCVV-Ki8uP zqAS0kO9yg;`Iokx&q@0wG#=ye7MJ*`wci=~R}c+xJ0bp!d#+kza~BQXqH(O_l@37sJNKjH0&=Hod5|BJ50fSN zC$y%qU483&f9^^C=F+8ca_K+LA9Bul{dML6r~Lfl>K@D|&6D91xFSO^w&D z*6)4e_MmSJn!5+%1wNlh2m1MZ{(B{N^J)n?>5WeLP%WN1^L@hPjOIQzf2N=CLHvmg z{IVVXliiwJmaJEh4xHmTdOl0rYYm)j)?a;hh2|#S-jCK5-0`o*`+j)hS*%AJ}=WMN<62w<~+dq9kpUwG!Jk1Z>0m#B1?7y=8oTn>v ziUo1SujEE^`d|ZOV>k zb71|6!>+aDyMoa@TW@aaM*d^7?m>Ln99(fS?S0mVL;mU_`KycQbXI(Uv)?-C%rm&- zHxB=~@jPSi^MUFC-q|eq=d*ybtZCw#->m!9;V+$!Hs3MU*vz;_Pw1Ej%?ImSs}4@Q zXq?e(Er@13#7BB9_jgYxYqrDRnT?ynS9PD>y5rG@Go3Ndo&9(MYt?y>-)VTLzeBnY zr@hgd(7DDF>Zb$zW^;EJbjjoF=X@UB^hI}k9WA~<|Mzq-_30=JPwPtF#yVk$!|R4VCmt&|6D*Za7A~| zm1O3-;FP~R09_T2PkiI%AN*nEQ6=Y9UyJXwc}m;Ek)Cj1H0@01@7 zIq)v;Wpi`%d8LE=0Kag{dG;?p>Gqai@X(oP>YLMw=h=r-TQ%YshiAV2+%x;_1)UX~ zJiu>E_sPJY^^?oml@8F|Yvp{G|D?`twOc-Yu5PzJVf%LItnjYReGW%{LxW7@fKNv7 zN(X$qy2tkP#~0*-^vhSu*J8)tL2$-|)?1TbtZDUw@b-Cgt%KS=7d_B9;jpi`z$;m- zks&`I2mY^gU_Sq$2l+nv?L$-JZ*-~YJ5%4e&9(l%V6^wRPgbyoM{z3`;$J=#2O6DN zyYc}#uui8dFWmeKEeqc}hVt>~9?$k^G*-8g8^sSXY~(h-Q}9M69H(KH|JGnnkw@ZU3G zGSNY8`NZKTecsP!=-A$5-OreM*M|qjBgihC{M669neoS=UMeZjm;kBKKzWYzK18Dh%HS_%FWL5-a);GTR(_z z%^B%{yq&9`AL?fZGEbj3CeM`)tdW@>+#B@q>l`#YXZmQq8q8POrkHJRj^Q_+elh!V zUB7Yk!o^pOzoY{^lbIYd_ubP0+Vg$+Rqd}X2eau*V0+G>x!KSQ&wB_yQ5_F2oH>pU zbKL>V&AZK&AMmk!M=a2vMsMsUM|+2`>hCAM`NQy-`?|mQ2j6|^0e}0S|GL$_;*+0x zGS?con!CY9%bD|D;QvtH&m>d(CO+TD5BRVA=T6@pKz^|IOb6!4Z;u#F2j*rjD5i_I zISvoZH}SOeH()-@?^`0=z6io|ZgT27YtHZM#%P1l^4Z~^PPuB27CNZpUZ}#0`zU_T^{=x3?fPQrK&DY`;oX`3Ca6ta_sXz1`?|$Hi z{{FkqeDBY^`;PDbw+kBA{`z%Ml+9H?}7Ovy6Gq$TFd_6jN#^+Yd!kS2cwS{IL*gLu=A%5_y8OCT${{0#6$J} zs`j&GHCexL-vMmy47LyK{x|#43Wm=I$QO(^cU&@tBVtnqy@AQs5Oujw|KC!{y{@O*z-9xxVjXz{OyxPGX2`p$#{vWGmYkvX3u z58N7B`oVp^F=%fM@9V5v&UU6Xe1iGEJc_nv-X6TkiTdbFxo1E6pjFZ=R7ZlD{>$*3c7kY}NkwPETi$zRcI!1BTyR zXYR1`@|*mV?CeX=e20wL+Fbi4Jv!_>5RUl!wjcUe@4oDtzW1FvtzJ(*;d^jFJfN-V z*IEPZ)%4N(&7b&d?|%2U{NTH9{LX*0=Hh{^ExxQz-^skg`~W^bNN35N9{63gHeWD?hd!P_{F&#&HTWwB9I$>k z(E_J$I~Q#YO|W?qv|>d*DZ{_Wj6Ue?@g z{AB%ht{i24)$9Y(51W6HC)UMhA>m^XBZwUw3@`;k8!Wz;UKVZ}fa7zd8CMla|ixK?~g(XT@re&hry^ z+FDbqk0!>J{~Wdg&9PavU;XzUz`S+5gx7u$U9{#|$(-FAXRCBTxB6&b)qm^70o^8l zI*4{qOt#i}_~2*G5pzHOlRvY@*3-=n>1yW4-VPa zf7Mt2{F8Zi1MdjBHVD9ay6Sxr+|qJ0m|pGoN!- zerO(E`6)=|c+8(C)NdT!#zE&eA00BFE$@pZ^X-GDpAPVrFOkE(m*hR?(gFJT-|MNd zMyK`Jss4oaqvgGQdSJr`9=~ewn=Q?0?AZ4W?Kf8Mzwo#I&_nyRe`~?$#N&Rh`NwwL zE2{t9ZJw+D;)R~&iDD=FWSuT-_)n0lA>Bc@V8uvDsJXMSMax#c%|=(e`UqQ^u_Sa*$-;X|AsI6hIeS#U+w>W-}|%gzU`-fd5zO+eAuTSfAI@1 z`(y-}Bb?<>|51&PU>VVwzJ^hf*?eX`QzVXvP`0lU% z@J}ts_ci;&&#$vzu=yRLjW2XOi-C9p$u?>4e8o4p;p34^=w0c+`PE49v4$Qsg)L@7 z(>OT$v)bUIG_J(zV*Rh)c@%_$Jo69&OBEi&%yYQA9cHSr33mA3u=s9 zksq){_9_p{$*Udse5d+GC)sJv6=T&)e(v2KsFrE$MOXG^bN%vG5Pxji-9znPaeVNk z4)EP-HD8&rZA?dJI-s+12O02eoIlZl*i!GwVO@;l$L9rjCKG7<2fqDB7u5F-bG0K* z9>+%?j@VfZj{d-%G|<&rcb2p9^T^Yef9oT^_{J|8vT4sZXY!jX7oazFP=2L@C;o7Z z^NFCkJ^Ma)GXAsw_~H4!b?=Zo`+NWI4lp77>VLFWjX&nA_2wV@__(!r4W{fP z#`e>1Jm3R8G6vyjd(7Ln+qp4aXw|;r1D*7T-|BvH%fEOjpTp-nKGSD^IlHmOIIX4%}qkA^q?J{=w(NPkxZT`Cxrx zGCM;)`@VnqAJ#n=T<<=P`z}7?7GX|*xu?te_%^?ES6`jZ{D07VjK(~jb(=;AG5LdT6ANBvHbN+=U9E}gS_hu(hGv{8|J)1Af z3G%S|CH6s$4%m#1?U^*9)g0Y-Ha=F3xbeo8{FEQ??cPnmN1u+e`-FHz3%-09K05h5 z`^al>$bok2+kvu2$PqzdEkId%xd%fS&uS`_}5a8_4Tx z?{UAg=DQ{4qWc8iY>%hv0iJ7gKqh)frhD~&-hcQ+x{O{>?m`C+-HEaJ9?x3-2x?*q zk4u)@xV0UoW6)WRcRb_P*eU+<12u8VPao#8^;!MrN9e?-GsuX4&APwYt^R9jHvg;j z9B(XV*&9FVzWYKoKL}UfeZt*BgX^q$HeP0K!e_KsZaQK)TiZ9|eD>LmKg?%@_)LfN z>3pqzb$>#+PVJV*s{K!%-ER52{2mO)9`^w6e7gfgpRKe9nV&xY#}oeWYz((NPB#0d z+_P_uAIJ~|YJYVb)T(Rh zJv=s{6LGF~_3XcL#IX*C@8nPIul_ZL16OXq3%{9piVyG+Jo4?H<>UssnsV2tGyIhc z^fk2dGy3q1-u;CPc>A88{gqYMgR{e#P^EB!|r6t5BY)E*yR@=(+BvNIr^M_pl?px|HuFGtBV%h zm1o=o_!D1~AFZ{&SZ$m>%YAc9=gkMp$Kg$AjqK*4UmTDhze_%K@6bW@pC6mYXTFpE zqR;m=e1P!8EkD%U0r;ait@i=lQO&vkgXY{9s{5dMu(}VzaTXi0cRa*XJm&Lc=C9L# z$+X+Ku~?^rVxGOzLHYyH?`$<$zuIh#Ugf~@z5M-H-;Z4Vn9s)@z`DBdNB`6>Jg(38 z0O-lZ=yz6Uv$4Ll+1SLGZSCdnWV@#WYviu}mm|<3d%D)oH|)U!T)9|2lAC_!=l=D| z`}6@94u8pa>)(UUvsWz1+iE`A&Y%;vW#jPR#v_=$_;a-^nX>y1?NcM2IqQEhT+EV7 zKREliJmKdh&;RzI!x#9( zgP(uk1L>KLt$9v@rzWaB`JBFHUcF*Re%SNBdL;*d;@;-~))uX!p83qwUhft7mo{k{ z(;GirJb4B^Y*@=z`3ai6*Wwdwx7*(sfAmBqIQGHkU+AIDrp|O<^SJ{V@Tg{YH#vjd zUp@*%uYLOSEcw#;_$WW&G5Ph$z@F7U{GZ8hPTru0nLo|V7)uxFx;ovnd-dB`?LMp9 zv)+dXHyWVYkGB12HtsxdZ|Z^E0^%<{&_VStyPnm5al;4bpgW^+J}_mkFDH37i5}d1 zQXf6@?g02Pr!PlXLnB@v^*Q|5T)DIUz4{NwI=VHyT9iudxqyL7g0FaMc* zp)>sq4Yl9%y85p#o;CHqR&D36)%`hVzBTXt;h<>_4;tRmEgtX{j9;==|HZIaw&%*< z>46TWzr&yQcD6bOCcE0(=koe|z%#qNzUS$l>C5AwT;Kgb{hxP$RU3}ne)bLkZ`}dn zCHVSW<^F2SnNA+>me{p)%s;xnI_{9?%OJ869t&gAWJl22r z!EqPp^Zea!8iTVx{RkcYpgFg^vUs?S*WAHR&m>oVAa2TgQ)l#bds-e8k<@yqK*1%MadVv+>G52aZ^J9N%g%+M4}rujawW!=68l**_n`U%3Dc z`Z&`8omuBseArpW=*%;s&F|C*^5A#2KBMmr(>oDk?vwrs-`?N{BcPs7$eUAdq z@rgh7G1g~SI%8A1xEBZ3_WExQz1oxdGitDB|LVG0zPIiH>Uem;a2u=l=IGr%{k_&- zji;^j=|SGgu5`ez;&%4~vgf1ufZUPnU@-uqEw1>i+y@%d8E9{DsqU96+G7n(_>->w zUiatR6B``3b8l<$j7RjzFAm6uFFK%$^kNJTetVZ$>(?|->Uy| zHyzIU-?QD5Jbl#s#?}6y`JVgr?XUSRAiH!X7%#!@CUj84rOUPk z$oav0&wNx~(&VJ_bh$}hGAC~MH65}~evC%;+UtIJ&D)D_w9qf-={uu*8qfC813J#3 z2YRCe4J|V5vNyI*%@&u%s5&v5*l8S2bB#f=^C>*A=Y0NOb$rx+{-Ztm%&~S>@0;r$ zkS{HG>>)efz@PKa8rjSz^A7U^HBGJH2mEH*E&Ita@ZqR`>?DTRqwn%eYS`V@D;b$m3^C7Ve&tAO1XR}>)eN^8>cmeV{u59QeLlXfE7%OAquz zF1nTr$SGELJ%|r7Px+0>k5+Uiv{pTL2S8W+n*-4-Z}2^1Im{fIVrgR8C!k3dZUyna)>;Y=##ejGIeFo4S!1H^xe}`)N*&RT= zSN|vUxe|Ulv-9IANcLpShs6(>*?zZkV|t(i@j(yp>BX5E`Ou|LXUVa60X^SXcdt{Y z)sM$#{Uay;h422QC%L?wUEQD1+S+?Sef7ZeQr{<3BYNKuAMu0-^2aMkW-@8d#XNb) zU7ih}{KYyQ(2IN}pZhG{J9%~4v$;Osx5mfi8g!=~>j&{U`;&h*@$5vm&OqDqPWJ$3 z;-UKn-td?opv4dHK?mf+Pj=s-cq(S+J-xV{kbJY=TQe7q_+~3Suwi#QHq}?d^?mn` zT|v+B`A7X(^Q-%FZsMciymAewbsy1xY5n&udHPLyEx$bY-v{-dt<(xJ%|`wffEun( ze$V%-mK=S)Wsa|D_T+cHFJM!4mN(FlU+mX+M^Nv?Hd<^v`NLyAz_-K!{+!`H!N%;g z+uxXu&?LKD5Pfu_7l(7EOueAzeaIli^-%#A_*{rLU=Ltn=8eZjtk2bdb8x}#2i5$EUrmQI zX@|Q*cK^NR&ubh9Knt+ssF{Sy;?CpYpj}24U%tEpl)LvkK=ZvHM%(8AbkMmVdy`wkqxA=zhnT0Mm)1VG^i^J+ zevn`BC-mV|@2kc9ebxV?9?Q{ioGstP7k@LRH%;I7WStwY`tYsuNxAS(|D}Jr&g;I> zImQ|u=!hQjSvEn(nfS=((LKxi=Gb-B$KwvCJ`}IBwpaJ%jlKR?`>VHT;UQmG_qp49 ze0`1W_h)~0-)sCFcMo{T^2<}T>|&PMKy@K!xJcom!Cf8GJA|MuB~2lUYHdv5Xp-(XX;idFF+fBJOK z57?Yv;i>cKw7-<-UTZaPTE=uI6bzgo-JLA6>f)~fkCob?}GwOsv& z+c*fnJv&bLoeA%;{<{YpdPo=35BP)eRsAP(_qgQePiH>R8J*)9useV{&!?Pcp6<&J zJ1sWkOOxK-Zyl_@!)bovTUQsHGvh$q;0G`Kf~~vn8uJbKyRFS@)qPN-7cuU;s_MS? z027LFwZD5n<7&S(?+PAk{_zf=&;CJraYko%ZZVhdgUJe~m|uD97+?8&dVt60+1q|P zK+oCT0Uply;Q#gMdHh55|Mu+fd!aq=%^bex?yIpHq5jEN_~5hhdwkGIysjjbXGoO@0knMdADcnYP8y0-3Ha?YPY`n-ME?!&wRDL znrE^jm5^U2W$Dv^4Y^z>4W@daj@$j4nJ}SkPksV zZI18JJ-hIi{00riS(s-|Ksl$8Wj5xvTo`STZ?-`mM*87;_eS^NX<5X+; zC_dP>&;Rp{S^urC`hQm2y9;b<-3^}j&4DxPKe<0j{m&27Kz86);$ZrLyraJGMK*z3 zP5!RW{-5<-boI|Ofi?Ayt;B~IW*76`7X-^caH{{-(Ll?)Sbe@%tm2QI=sEuI#TRBS zz$1S`&mHAn{YMio)jquL{?%DQ`k*I1U)?7|K8%)kp~i4(bP|5w={MJUki78R3B*qC z2d3QdGGRI(1H1AGx}dW?2Q=olJriaV`_Xz*|BqVl`@8U~(ZTBSUh}K}?f~I{-4noC z>)kEp{UADU;d%Gp9Q^8k^^u~TQXoiY2)^Stlb#T@{o zcXZ?zv}V4VduKntGFR)o9k#y1e1QCXUoMLmcHM2g$CEMNrc-^5&1+<_Ufp*OQ2W(y zQ1cu=-~a1Z`+MI%-vP8APV_qu&-(G<>>61$Yy3T1!_U4uWRqP7@YyhX$HPNj`Je`? z|JLZ#=l}A!+^(+w@Mr$}s{if*Gw)yZy9>0wJ_9~-y7!6h0Ql*B1NpiGBs<>prw+ug zMi=(%vNt9#p9q&u;5##a;&1t!Gsvx_Be=$LoLVhsp=l13%j7PxAdh*D55ku(FY`S6kyF?#2H8{LjAm z2OI16?!S3=#r&Yp0l?`K*5}&t6Yl`r5sunPCwTcN^}jm7hUzju$fxoHexa`x$SLqN zcXf~*#kYEG4o_^zmguty9v|pF{C?G(#_n*c|NicmzS=34_0?y-ghzcmuy@br`6Fl^ zzxaZ${_`*Kn(t3YZ*qY+n7Mz_PY<2fm`wb%+Pv;ON6l8ZS3Bf?>^FBnGHIUsHU03( z+4lp?ix+g^S#xIR$4_x!Y#s07TRkHe`Jc-LyAIeSy*h85u|4}&!_|pub@0!9;`puP z?LB_5`VLmRLAaoKG7jfc4EMcQK!>lNG-+&S#(e8lOl9&dA>6 ztG1e#qtFL?-lA9a-+N5CT8{SJKkxrFcL2G)JRVLE{#>iC?yEO=Tjw3$DeG*!kUie& z<5z>%9rn4}N0)GF{QW`J51#w@*lhXVoTGnyIG2CnqcJ(u0l5oQ|G}F4CPw6Fd+;xx z%GKyNZ~k5of0KvC=Ge|2c2@`a0UM(^Z9n_bk~=iHK~vMU`fTkEufA*gYy+}|KInXW zct-F4ddRL|^-~ZC^)Bhaf2{xN{?XvtlRw6@d=uaLa&J_a?j>nmgoEl>o?!H zeZ3cG+#LXq$xY_7RzA#5WU`M;$-F~rd^{c4YYr_o*Q%{*ZuNKn{(W`+3|7;t{pz_n zxYhRV6Jq|1hPj^q_3e+I{^K3s&<)#=AwS?tk#{HMl;V**o6@ zps&es(bS*zGmb{E^~O7FeTVq~A0<;Y5nrp_eBC@*;o)o9`OqC+H2PaKZqOXP(y4p? z7yQY8ziM`Wv$xvsJwWdUdhQ3S^|SU@^TBX@X5buc@_`q22IG;e8eY5eXY1Y0joE^) zcR!vwK&x}Bv(A&_d;hQReD&XF0P?Ur-SfZtuP=|w(^s{A)`seXx}he{Go2@=f#$V% z!w1{p8_sL$KOOLal_L({csTRvJHP33`g@~y{+G_=5j9+0P#?sB+^z3<(Au0Qt9p%Z zb|V8?XwKTt?wyU#GoPmuwj_@`1bX<(?mI+d)yLcSbgKFG>Vxj{==$Cs{hu}KT5IZa z_S|jU_y7H$&}x6JIuBppdFbqSfS&#Pe8Kw!JjOHMp8eNK>i%-0eiw@A*b-@3`o3r$-^V?bf@xFZh_MGpz-uSsj?)@H+F3{A_O73YJ zycpAk28Rq}A~$$14%}nuC>_`fpL~z+|Bv_+gXY!VKFindT)4((&0h1>>-L4~4xk^N z*w=47`{AMW-T&sN*572ZKI=c;<&tt7*~oQO|C65|!c!;Zq1^}4dph5tb^7O5-2uc2 zKQY&Obb`?_o<7z(2q(N?>yuCY;^3_Q^LO#5?eXMnZROZQry!ftg{Jmu<2Z$&9#3R|simzgx{pgwv&*I%2TeB~pP6SkJNRxf?v5$N9kH_^8wC`Te$L zovrtK9~>=uv-WpS;3wS?;GyLXpiLb9<37qSx~qWXhJi(jQ?q`}=hs>H*m{nujpo(9e%lef3E}V|KCb2S*}Z#!u{gyenU)V6Hl&*~ zKcFMH@X%*hK9s!aV8Z;8KJ2YN2Yn90|D4}lc=mn1m%oG7?Ct(D<&Gxk{^QIuUYfH` z2V@}AOX5I&mkY#RccAJ&y;ggx#noTq)_X2jlWRTCf8w`2{2$Vf`;Xu3`Mdu9mSVJ{ z*|YynZ_&EphZ|1gAYHH@8N_dXKqpuAzdImYHWdf-m|o8yKQJGxFMjOhTk1pK36vkr zWg~d^=(axTpW*Lw#fI4K{RcgeF`ZQZ=>%S~cBZ)+ezj`9TD{kO?*h#CPQbc)?>&Iu z^m!-H9(d|}H6NV!32VkaW9aO7;V)z`#%pnEj=$UYlKP*$>46T=q674*s~?>4@Z6^s z_YOc`?p5cy1Mn@jo_7H62Q=?BL9yQ)eEz2H;~frqJxg}hto^-v#&3;|@GbAn+K2zM zoM$dSkn`-}^YHV7d~QPh+1SF^*?1v~`%5)lu9wT`M;~oxSeMVp8jimGavU5!J)i&Q zx%$?F`e@SwTZ%KZ=#-pSIszvoD{WK;S9=@m}T3jBi?4e7U$|~ zHMY91j{7d2);odff3ST)d+17&>)iv;6Yt&wRM*=dUC>;g9dviVKic4$J9NW-#??Q% zpp!E{-~;MGaX=Sv%Z2xRz?$c!Yyj4`A5FQfI{-eMH)9Nq_FSE{$}04dqC@KUfb^g?Y9npz6Zbup4c@W z`AxQ_TX{dZuJS(l-S6PbVe%S!bU=6LMc;YyY_OW#I{?p*Y|F;%s{YOTZ>`!7TG#Zo za<=}WanQqubGl=IY&rRG55VKYUE#srY)kfPAD*vtK!^0;*}pqKpCW%gIDJh2s)b)Y zP{Ws>9Xgg%m=DQ8|KL zGh_&)I!P0MBBk z22b91*A@@@bakc!IzlTQprt*?_(3f2l_%|}iTR!UL4Lf~s`+zV&9AK80qB=o`aNu6m|Lz%`*ZYHb>kPV~2QrX_fA-my*x3DG_krYp&Ii)@4zrDUe8_Y2 zJ%IDX4ZU0Md2^>@%-+pUy7kXsK0y9?|G|e^BJZ)8cfSMAzU~3wybI`?3nyMc{Ngd$*@-UM*t@s&ncpGn zZs*3c{-*=<$VzwUWfSMgby_ue)#f87gK*se*mu4M$lhvtH9t6Ozq|xTlc$}7Zml!B z3*ZwDzG`^Z;F9Mx^&fuq|AF=gIgj7vdlNRl=5EghbjPRVLHZTX{Ec0-^x+;r4|q4v zmUL*Z8X#w(^^#}*c;W~4@ILN z*Bzl6?|pyI`)a=Vy}2upk52K1$C`2clATZ0y5H=wH@;W@#Q>jBf8F`}oJf9TKm26J z6;p@Z{o~E)zIQ6&g#5y@uQKwxa9|UhJ$bZ&4zH2c|y6k z+9z(NPnKUML#OXaDXQk9Ggxaq)Yz4Lk84_TWq85;IeF{WBkc%f4iu_CM>Fhju77%;l4E zyk|ps&Y5DA%;m0VN2f7puGV<2&px|#rZ}q}uraylMBK1z+LAIT7NRMO{Q?IH2@`4^*?`%)Y(n;b)E4z2Nq|ul8GGdvy?wIl6a7G(qR>&;H2`;?X{Qvlm+y!~7l2?(2<< z`TRg#Ne5^CmG7NF_|8{z<-PQY9}S=ClII)sUp_Kt4Q_kc4&UTCJI7qS)z9zq3-n&9 z1AEo~)sA?qhGri&5-a=j|E%}b_X+2EwZ8T43(fC!-q>36?giZq*cwmxtKqr6HBD}L zY=?aEV|L#mebKp^Q;uYtmHQ9<&?`IjSv`O8T?n}Zo`#0|UXAbSgR90L`1Y)te*)or zXwNa{Ty*jw@u4ri@gcACEB=GenfK5n6JOB3SO2Z^$?AVTnGW)?3HhIO{?Yq+HCkT` zsMWm#knd~e;Y_H%xAhyq+xIKF1Bef@;v@gxA)YickSQI|+iv^DasfGt8@T42rT)1? zs;la_y07i^e%=Fm_V*mG^?WYhtNq>u%lq0_{@njspA*aRe5^Y|G=k2XXLSDAJ)nCK z8Q8Y^r!Q8LJ1ADH@&9~4KIBu==4bs~|I;?%%d6Q<&UXip_t}Tu=@-uQH{#P6s4lsS7djNmv zbAs*z&eX&@DBr~El%3DYFZR(ZduHDq(u4fP-gICuTIkXp`MV3rIo3dpzCig(?eA}} zsS)<@uj)M;v$b*0{?>ioZ_S+A<2*Fc)6ib@Z{IPPcK~?!DfjXLe4{}QcFo@KcG(-l z%@5?#bTEAoZN9d*ecsslWRu6})mV#9c}Naa|K;Mjrtc0U{^j$@!+v(-cmTD0f_>0< zi4M@>3)M>etDn`>HGkNL&eh}I|9eKS##hHDoNLwn;Ep%P_2D|NcL5+j!w1>$8IM8w zHBTP-Hkn@f{4Z|K>VLX*wlmZv^;fL%8TPeS4WV~+3SKpgf7#8WR5ygQ@XH~lbw<1^Fe@L7HK z9HZYm{T+Ij-)H<2`u;=j{=xP|w|fNMCQrq}wU#x*K{C8rtJFp031G`cI>*&<`bs(9ZsD3e3)H~rI__3hdF?iun(_W=G$7vuxU3X*}Wa!+#Yc5Y05{?6X=DV@+in#Iop?T5d)Z%vM? z_N&L$XwbXaYB$}@`d4>rd)I>kJDlMQY%?~uOa z-uyt_fWQ3aHy!W&Hvi&lR}HT7ovZ%yZLuEBYQK5)A7leMrhDu1p8F6QX!V_%&WxXY ze$J-@^rjBTN6uaL#`g96FBaJalp{2Kelnl`-2tlq!D>5LJ6luV!>!hz!Jhrs9pHHW z_w3BS=tZuo=ErAa{9B)Qn&;|2{nJzLUS=%NPc0u4f8vqf;0r#z^Br{9PraJ84z4_G zpBgWx@DtFyI@jmi_VOKZN%zH}d^Bsny90fwQFs)$#V%gpmkadSGP_SmU)Ib0opv0zYECu zv;MnF%>7sWXm`ipJLt$E-V5gIWG93AFULIR@97(!7*R8-eQ44{^;O-UeR$^P9YAjO zeAY7>U9+p!yPj3|kLP|+owL?=`R!Bhql+JHj`cg6kJPd?yYY86m4oqs#*FjXr!P48 z>Ar-YJ;(6b=UO^*u6!eRdFR3I>biOl8rRnNzzNEG_VV+1C|<74pFVF7osbI+ys$5w zO}S^^{#7fFXMC~P{Y;La7jy0hv;J4ZtMlNj^>f^OdnVlb#+sTR>>l9#zdI&A#Q$FR z8-v{e;Q701>OUE$+_Rq_&^>=Je(;7afE2`*;U9a;n^E-aa{o?y6hr8~^eh zA~n9}d^y6M-d?zT25x-d8BI17UuwVSdC&dMuoiDU`-6Do_i)g1Pmo*jH07>OPjK zl;?baj^I}lN?+kUh=kDrn^|<=1M$dNv_Nni3y4D>4l-J2z&7b#&`a!k6 z=4|u!J=XqP{ilc5)PJ>u{P{rsm)-BdYyfBW_dVhx`|uliQ5_IZ#w*_({%EXk4nH#= z@qzHlllwW&utxr#iS6U(Ao<1hT1eR=hc6IC#c-ac5<}2Xv%NvdH;a!6=!uHE}r72I|&%i?nG=S$Fi|K<+&Zw7o48| zjp3u!vp3!H=X|<;-_5fQ*B-o;-{kSV-mCj`!5{Q{7oZQf{D&v>H1yp`_VeQ-+k^1& z&$japBnEcb8{60OadxSe{$KX)_T}0yE$H}v(2KB;3W*v=YCxz)6r`ahwTYmR#>8IO zlhv3ONKQ#XNJa`0B5D@%Dl{ljqz5Mgv4~!2z6i}Ah!7$o(CSrG#IN(SuKnG=4^O4I@|EG>mA^uPk$F+9~+<} zZ}9{1ioW`7k9&Z=XMgdk!K?Pm!EESEG3I_SYd`+thaWf-Z*qZ#KRDtWf6mlr&s}!o z=jwlQgVPU-6>?Vh??L(Wxwh}G{;U1g+!e?-{eSUvsd?#ve&~QMgpTN{ z`cFRkRJW_G{HXWyJ*TU|HML)Du2xt7?U5(k8^|<2KbFho{rO#f`@2ufe)O+(|M)&( z{NOD<>46Sr{a=1?_?6h$^^gzbw{)fDXVVAH`qMAY*3agg$tT6DTnIYT93G8pjjJi_ z36IP(PCKU+v|kIz@sSGC%AFZbtswYs~V+F$LK z%lKiu%TH-P5(h33rO6RK}`iZ^{enyty@9!V~FW4Ci-`9)se{hi#=LwnZP zr+9e(8C;E?cYxjjxCgMU`p$l!JGlDNy{_l~YJGQzXrdeK;5;91wQ?REz^Mkax4p@{ zLw2PvJS}}4Il%tu2j!XkTMRo7tPg+Prw*N>*Sk$NKWpv)KC5eu@5}vk!cWmC|D(+Y z`E_vTD;?mUTynC8)+6=bdF)f{1?i^ee}8x1@Ace*)$3~bd>5cUTla}GTG46E+5C!) z%Nue+dW8bZ0cq59oE}|LqQd54Pbq-2v8}`^YbR*nYb24xq-% zH}ZvZ#B_alYQnsKpf5JWsM_z2>e-(^TgwlE=I|L`Y~Hf~9-YCy$vh!F$&qZ02WQxS zc203H&!zk7bMLUoEe{#*HQl&-fIi=cS8HF;Jo>HEZRf{N@nD|KR*W8YBzw7^U8mf$ zPuF|>r-Nz#YHRhj_xi@_yxOcTSGU2Q&Ea@v=+0nF2kHY~2oFwpaH{?86x}gE=ULa# z>|PR&^dN7LnOtw^9|9KYPj3-aUL9(y7J?uNb^RwHzF+FH>E-%@Oo^!Gb z|4B}3PkMfO{-1sMuKF!U8_Qd4+^&9LGzydpK9$M%7XFVmt5M)i*U8M1ODVS^t># zt{$EmKI{G7_l}_N^#{@P4k@VLm@m)+e(+bGh}R$;@-28;xiOh{NMH2ij>;d5`IocO zGd*e5Sbb}7=y~1&x_AEhCf?$woM5aU zPxg~TenX#J^tH=wOh?X!i&y)!=yeuY?heASkNo_XY|h&ox@U9d-EHWn_iz*HM;Fw@ zMZDzy@nfD2@I?l4I|GmW{7imxaMJ-k(*as?!J>cE*;$*_V0F0~Ts;Qo-N3kg_EhWj zHMq4&Ltj0QUO3IUU-W%}Yu!Ka@ybW!DRRgsWTJz6^`HFwEgz`<)4}wCTm5N+TR7(9 z4`e4bx?1k}UhGa^*M|${-(npupXNK_aGq(bCI8h24jIky3;NK+DjwkDCpym4r%UTW z^P2H&_PPtG`P~D0{x`1fd-t!e{_CS*Z?tB=vz)IF;;DIi=!C7Uv9ITgmr~XqO zHkS9QpLD?1w{&2Q?`Y+H^3egh+LOFb`GidH+B2d2t%gU-Gfnj$tlrN%fO*gU>vMwR zdjN79`sF!3>r65w|B~&C$ejB z&~<(dKX}BehL$~O;|CA7>OUUh5q^7hF=~dmgVI&sts`@BaXV z^DSTbk@aq%x*v|ZZqB_xA8z~1&-!m{9rXU$9l*M|544MKl8YbmZ$3yLVr0(;VqC6) z!w1N(kw3lOg7k0g7HnVZ6PN##bNHvYl`HXR%^r4+hCZJ7V0Q)k;f4dkS^4phA^EF` zbRyow1$ohwBjHCoTF%MOz}f6U8>B01@YQv7-?ROE{+A!bvv>d1fA9638y&Q2oyD&8 zjDz;B=l0{-*St3KFq>-4@iooZ zyff^nenbQPS~#6acKkfef3W_Oiw~2FE_YvV%n#VV{Fn{XfiuLtF`9ChTsK?s;=6w8 zzyJRLuK8PcfO#+I*&i;Ow8yid_b2QVJ?G+qZ2IKKTkk6L&5^_T@)&5G%sUic*#i_y zTK00zoNpa$Uwu#xVZVFN|J?`F|31?P?ROqXZhcKZ-yBB*6^bb z&c?RkL}SM@#v2`w8y|dl))qR@_&t3(W95QFA5-qxhf4?H8b9TlCt6G9QDZ&#tG}MV ztIz6pHC!EU9`yWgO}(DAzGr%{{qns%8r<37w5E>-<7z)Wuu*m*hnmj@a>2d&Pkwr$ z13qUj``+{aeBluoPjJ&MD1M9U#^$1Fu6__-aN28r@~O{%#Q|CP4cW+8{m=LK6TIo~ zofFUC;^R__;Tx|wJNiL<@rhagdk3KAy90o|1Hc>F_S1K5((jyj*lir&ly#@yx(&_+}>f45C8D3cQ5cfWv=sP&5(DKpT9bjy~vCQxYd>^_w4hf zYn{B*|6;Lvsy@u--1gMBZjP?#&2zBN?mh2U?|b%dPW|_8pA6p7qftF4^K5i&T+D}O zTt9wi{YMjRyiK`hUrr=Bdh5NOb+{pRt=|KlYXf87Jj!?PDJc*2MCrrh<>E%#Snomoun@}f`v zAlfzgr#_y^S8Lw5{tkECm9Gz*&<%OghqG(hAsF9ufIk1A1M!~BJ7gQU@YDrkjSqCc zUiXd59YC(A?t<0sYCBkM_uPLEr}~aYpC@#Gu&?!K!|RS_tBv6kFK=A97Uu=)(s!&u<_)a#vbIOwhK5ggE6p*d$2FHbgj`uryykeN()X5)K05MN@@`$qA^ z79jeXu{Qe?2d;+3f|tJ)tp0lsFzbG`AKah+JF9wLtq19ZuW0%jd~5C7A)d77>OVWM zfA=N&;#>Iv|LR#YI|bP*8?w1Q>WI3lhI^J*v&4pVXR!%=@`?6W`|X*v-+Hwl9piip z5BM@J2NVnC0&ze#Jh9In1IFg@0*~(PrGw;8RuFwYhn{%lXPP^U{hA!4;g?)BG&T9M zGxVDe55$lC-6!ZQ`gCUxy}-ri)QK@(@o8VrLv(*8zd37UDsJLw+McdgJ-XZhs=M>q zU2RsAo11mK?*oPd?)_Q+?XAt)Z;yHTs+zz0hs^lPSLwt&UFHY+^tbCloRFWsoBbk_F(d*Jwj9&hnS2l~z+k6g~)#>u?Ha|I@`TyD{HKTO81VnAXrE3qN&6W3=TN@nX*-t=b)=Z~Y)1jNK#7 z=*iPs_YC@#zwjMjc*JWqtj)7to3FuD z+q(kfA>!D{7IP`2EolKvK?sKr1 zxCgDVlNeVkobH&i~OBEVZ4Fn@r(u?uxa(59(P}F zT+H)#d(t;rS~0)+2VFJS_c*Kj_Q{t$|GNj!E1vl7qm4ho#Vc9(CYtV1&g8q!(bwDw z+?)75-uOa(pih6rF&p300en1r{s+Y)d&mc1@wM02#`vla-@T6f_n!Z|53IYv;S+qx z=TX)CS@-qP56<)Sn~w(&A7laJ3C!+0cWXqsFS@(v1_k-ovhwr!p&=-597ktwXUd58>Wk~}Ky-Tkwrcp!*-6eUmx)2=wXay3 z`|@x6mKXH1d3=V)hU@-w#6fo)Iv}feBK*%enmzXCM^m172^XwJgR@1e?*a7rzrW@0 z`5z9S-RT(5`$c$gRU(49yI3r|M@+Ga3&A-)Xd`<9(%8xbmR{;(0KRt#>G4xz@-B^o;ol_ z-&yeGPdz=rd1}$#;0svJ)N9O>y8J!M^w6pj?m+;HHD@9bEQS{|_6e!Lv@Q z&6+w7R{Q02&+*lNd)gOl4bAQg(F4P4@2vmmPd~(K`EdFHeVxUExZwkQk-psZ=!8z` zlW*<$W}bJiFCMH1>!T}neI^X@PqAU0?ZSVmG4IEp+5lfJAPYL3pN&BCY$&Gr7vIs> z^xX?J^ouL|v|V278r&NG@M#RrKE1*39e~dOJo~!?^qqg}b5C?8gp+JLoc@kyal34N z)S+ZOi+6ME4M*)`Z+r1VXBv9t7w068IXr>#wpPE~Zw?K-l;39E*VotvU1#_G0eg+X zc}~1E7f(-TKiS%vJRpYqyvrH4bilvU0hnE<4!Zk;&4bk>wcm4k?*#ZIT)vV2PT2e{ zNbhQ}y5FSh@Abbs z0~~A7hwFR)=<^wPSH2E^z#qQpgA8mYf6#&2cNPm`g%6}JK4&i<%O}y@eSbf9>E^=2 zy}rDKKX&T#VmSvN`8Sv>1+2C2 z44QMk-}UMHf4=jl(QUecchsh>;qX+t~{^Kd0qscxs zexMJ=SN(Yh(67yBf4QUlXI}FxfhK(UuKNS}<~j%5`DmP-@QnXi|H;SxH+692NH}sY zeRW>)qb=^qnZ5M+ARVjEeFsop(idCy!QX3qb2|*rJh{~S`FX$h3jCDM<89*Gqv6vU z8Po~*a@lh_KugTc_y5jO6DBO)_Ig|01*^6G{$Kt7q0j!e4>W%d(44;C2XGH$YyMc> z4zdfn-L;yZu=AZ=-+KIf+o%5Es)g3?`2qX82jhbu(J6hh`u;s2TW5zI!bb;v z_VBp~nfd;zHOC#zJ&oP6A0J~kcyhMi&@y&UVFy0lx$zT3Lm!U3ul|cWxt&hVbbzMy znG58SXo4D_=T~A`?FZHDS=0BrUkx|E_l;}a1B~^>(taQ4EYSJxO&UEK$M4huy~6>Y z%LQ~zK01S&o~QlwS53IofBvFAd(Q7!zvuF5zB&!Z7*zkeBdGn=cJpw<2i5lI*xNe* zxW;%9!}(qO#dChZcJ6HWJ@bR=KVM1y=>zET%j%)?=(}@Y3h|uJC*vdapYFs29f%z~$8%(ACyC$LIb07H{pxOFT^-@MrfG#%jIaLr~{;Xbz6&fB5Akdfn@N=i$wIt$8s1z}CrS?YY1I zcQ!w8&r&ms$>|65EBAr)p5KAZTWj82{cOX>+>5#gRR85!XXRV^Y)xJ|B7-<}4={&6 zIQ(m#**VUgd7o_Pp>yU3?iT!H<^s7S`IE)Dd~50I$fxRw=W@?9`}4V2(3%JN@f_=i zcMEoB0Npd%@9rU|)1kN}vxZlE>yv>!U)2uucqr)^Ly^^oq&3;M)Xbr9sXf{w(bOEU-K89@D{Jr56DCZd|iC( zdJrpop!!e#>OXy=ncwH96FO^-AL-K{{?Ydx0Cxbq;R8QxqQMc@eOKIgtzGUi`e+mn z&c<)@`^=*|Ao^rxySTV)}dwK`Jf1PEny+Qc;!RYJ| z&HN2-XZHU zkh}VCF1jGvXr8rn0Kz4QJa+Z>!#8$cZ_ID#03Z0Wf95?jH9E(`thM-+i{&kT$#3~{ z`1XXaZwC3&$Io%hWW4}53;xD~`c%?&pzyqDX+rBZ~UTeao{<95v_m-W4?0k*yOP#J} ztK+NoAG%Pd)$QH^_}eh`U+wRGesvv=y~eZdU;A=NcY;e^nSAmC{B;Mq>fn%5>?C)v z`tM!^Hy@x&w9rmoFrDl3S8&If`1ktRt2+Sbd*O0Xt=eC%WnVnYNnrBE1DYE7#X-Kp zU)Y*I@Go_u+Q(-07eo4JL^By?tk$2fKL4}F*xlDX0PWT%oc*(NnwvbK6|c_9)?^~* zz56bmr33Ml4$vTTv^y_-2CK;vl0glxiBWk@-KT5KSnIv-lYZadgT|!UdAA_`(kUH~ z1ATXX@q9Ptk9fw|(L8JL;-z!IaLWbNNHWQJbd}5#vL(LYmHXuZbnudFQw}<#BRKk? z7H{o|PkZAv`O@87YYr4|Y*2IFx&s}utaA@&t=ik!pg14{U!-sLrH?81?2}=y|M|d_ zCH~R{IAb|ps?F{|dkyyvK+W$RK=1Oa{dl(@Uj0S)mUhZp`YC?tm<(!}+~ygCozLVqXHER`1Mg{lw&8qq z(B02+X0aGFhsSsYy9Wfj3wXZw{NFvmJRas9pxWPF^!Mhx@&i7y2j0mKlEpg|^4+=z z<^xOq%R3``@kFQ7{yPuPjqQgM-23fM&(3OYo^2kET+*`w{=!doFy7g(@5GVc9e}<2 zZVcbx^WtMk4K4C5zK?uD4vo)? z{d;+z{@jJUmryJ0v*%XapXq`v@;%V_RY38fz)#7Syu)16ge*|{!bGXic1HbdY_4(?BKjUh@I}BV+ z3|YIS1NxyS`YIOY9bm>Fo1}Me_UBr*YcE)vcyq2jFM*wJj~L*${DC|^Gw-`M=5NVQ zukxb2q1opyz@OyTJs)=F4sY?D?}FqFCVOzz%VRwlUJ(7+@4Wa}v2n;rR=ktNcdq0( z^-sLt(m}Z(9f%<{qMAUbofE(DvP0|1&~y5P?xM!-06rI<-}5uy`gPBwcl0|y=zO{` zmJiu0ySdk~C%O2y`7<4e54jMY7?2C?rAKuHP4cIMX^Z5KpGV+TKPU2J*K+<2<0BY8 zIOWGX8P@kk51GiH5Ab<$zux^G^X#3x#ZdH%<8+X3usa>t%kRN6zHiOZ{h18S@B5N}pFg9q zV#yqxw`Q*S`V%^<@$5GjoHX$ieK5YdmsI=FgKNB=p$;7->n$iRiW@#4hWNp}1C;;Y zmA!Z0-^VXG$6hf&R(?y4^?kV`p2fD>PG7fVH&2J~$Zn7Pk50bz(p+$l|0!#Ia5nqr z+S#}>;K?!M7YB4e4lacz%VGjL$(i zl;67_vwL>{bmI&Edy9`?`~{l_&-U(f_r|wqn4dbpyZlWDV)i-NTNe}d&|kja9l+X@ zW$&xMc$XV?8RFa8+4_!uZ#>V1=Uj9A03zhY zHfwWpL2EmXIp@rMxBB+t<&1_s)&6(}-CgMEIoVqm2k7$yx^xGSALy1Y>G}~H!J*Fy z^OL#%o?lFVnR}x<>EMl@idlZ!^By_eVaSw>_aGaq0mVW2AKl`>x$zeN!FZbM6aU_N zH15G@!J(6I_1OlG-rdP%p84c+@%%{bPcLlk-jfc{FsEhz&fVo{3{IO(e${qs`*Z%f z511d#zU~b5L3K{;s}I`8H}V61D;KaK9k4AKlJgd{|0@5XM{$4_AG3ejz`3)vhL^MX zIk)%8)Li{p=dGDPlRbRr;}NgLfoCD|lc{I_DZAWZPcoC&^B_N>&l=j*#LnSY_CD9> z^f{bc>$mpe#h&U_HpbhO?~%T|j@En!N(X4w=z(5AXX}dx@160;N6M98pGD8P*`IsN zw`M+>>xUbR_S6CS#VkL^<0EoU9Jb^$^B&Y4fNt{t?36AV2kB(TJ==f9KV+|e52lN7 zoI}ohQJ&(vZ{r8vsdNVr7j)@aT5VNN)x!yAt?e1!^TS@#(G+{=sYTr*g3X=Perx8{ zCFh0X3}yCSOXYYA9Xj`}MOmd)t?7-UgoePW0v(#XxIf zLCp5NgMVxE@QB>uz~}cqFBc2yhtE&(6>qcO`SAwMesPUoeQ~B=gKNI^=z*O#=b}C5 z>eGQdP6y(EFIr2sN1-$LQP09?m1~v^7hA`BkPP|@9&+l>7N7iP_U9PBwf2Q~3)(yP z(-|J+0*w!|C!B}nKX~U$$&ZG231>XS?_5hq^w9i{w~x>8vcGuC=YsH~5j4k6*Y}|E z;o-yNKdb%egU>soxG#_TPJlQ7)keNWFJenRB4=~vZ#B5q(C{|^ji1BEH@(AekNwWn zvax4gwBMxm?>a!Iyyr8(&I0{Sc|05Ai4K}GmMa>2m!grwoc@G69$EK>zBx3~L(p70 zz>k<^$7Fgbl$*4f`=|VLAJ2H8EBx_0XY)He1@)r|8rPBuY^{E4bFV(SptI2ls>}4i zUVK=Lyj1q^-LutL^_5KE`W=GHcj|i14m!L3gw1zfP^b0bv~~vJw5NX1-q|;v-x0Rv z9Q?mY?N0~t3EA@lHLx7O=HdX%7x;+0lTFNL!*K3Falw|wM|RCujM3Bd!v)a=+1_)1 z_h2%-wDu>zT*=SK$gk8>=kPx~!Uki>($K0U^TbA-WZ&C`f%7` z>cCtwy%ds%{?maR8&91V59z>|PFgpwiO2dN+H*YTrmW_To7?-*s3xN8eEuqj^ItOX zg_p{2PdPslIM?IfTrxBlY;E7Grdd1F**v3u^7Gr5$WK^*4%3EBd~h^2(B|aXTs*2qZ9OQL2GYY`|}yT_*pg-#A+a`HWoKGjn@dpK#jk(Z2n+Y#$9cp4sFj`7Bx91eX8#75cqbm~zCEbvZx| zhTnH6TF-COUt{~&vhj0p(uO;EF`l1$$mMUF59IR?dIVc_uQ4tt%o1YxAF5Szdju--5&nbdCtlAtm$WOYy81D zKF!(7N5Sj(uos_gJ{T@MG-`aH^PJf{yl_GG@(lGZ`~VGi0Ctr_y#tu<+pFzh>&;c~ z=eRyN`{BMT=y})si`|}YI(DZ{&sSX^{>>g&J7321Z=N4`XV|`MKgVpY(Bc_cQt#aJaayJ^BHT-bxw29+41A!C7*fZ4|0fmQ&8XgFfvW3ueI*JZOs2$ zJKNKG_(8bcxtjy`esfpccUb$U4i-O`^RH(%_HJml=0Wpw{6PP6&YCo4f6_YUultU^ zx)T5I0+NAkud>7kc-G=AyvA<|FLXRl?B|K=#aCxt_<0w#f9ftj2Jzr;1)aO#F&1CG zw`^^})`AzlcK+x1O8XK|>zvNJ%uSrRuJ2qeUMBzVqJQ-PvasbXXzkMCxAAq)z`3rC zIl19%{yKNj=kkfMZ?21pcOiE)uCy=b<&Re$4xZ{en+(ZOd>YTS#%Jq0p7WzOd1(%u z4bHo&{Z}0vGU97CXYS*(xp3SI=DP7*tG~nc+`>0MoBC_~E^7Z({zIobU&fQC*2PQw zG#6g;!PbM}8P^Z@Y-}!h>l*@T!4V4ZLdLU1^|qS@XGL&dvTy&zyVp zd-v9RxE;FpH&_3qXTAhKo;q`fttW@|vwm|Ef8x&h`kj@WLG!c!5_w*6Up4TmfmaQ@ zYT#7^uNrvOz^evcHSnr|R}H*s;8g>!8hF*fs|H>*@T!4V4ZLdLRRgaYc-6qG23|Gr zs)1JxylUW81Fsr*)xfI;UN!KlfmaQ@YT#7^uNwIOTLb=9r{5v=x1U??p1sdC2B)0H{r@}@r+zf&zWUKg?r?)U zjplF3@}~3n*lp7s9;Pjg@nJoF=D4}=k|BCKoa^mD<6iSOaBnK>**@Q;o$}*j@)?g4 zCTB3-C)7s=%tspU5FK;T3r>2?;q^?8x1Do-woV_xxfW0OshQJ~t8tM0(U>^)8z)=z z{GVyf)ekqC{`T-~WuE)d>$m2Ud&)HVHXncS1Md23E_!D$oam&3GYF@1{TBS2{_f$F zd+*bOya?{i-yAmgIsN`-_SmPkzzeSa*c**^0mbhw!`qDe``Y!ltcM);V1FOH3^r?qJ8aMGQzv(t!{Gte*=3-9W8 z5YVMlP-D;d&JVJGc8K3yra8uEvNRtZ^OLr5w8I6b?07TQ+*!|Td23G2b03d}^R#}K zI_Q4aZ!+lPvERQi-dp>^G1d=uPS8D|elR^5lX>ExWlp;#+oSW{f6`&+?=qwVdeC2d zU1VCg;^Y{wco{G{LF*GgI@#G+zj1m9#-B0y+3rzUZ{g+V=^(iDe39kK|HT)K+rGspc zocMtU&bjdSxrx`>4wLZ~3?HBOV!XB8*ZHI0y>x%l^!=s~xPII7^822CbBMk9y7|_@ zz4<*xt>5!(y?u@Q{UX1utM3fIspJe}^LUD%{4KjA(@Wv51F;)V!Oonr;E&Dm2QM6b zc)|AU&^md-HP(`~zHz@TrJr5woA!Rx=4blhr}9Sroz9(=&Zm6w3J(u(*msvD89+Gc zp#A1rYYuc)=YjbGAE*zHt?-No{J+if-;|$kIVaiUsd0R>3tayfM00TY6#q^i$sL5F z%{}Ct^qrp`^fmH3Gk-vX>~z3}?(t{#eRQtpJv24v;HmTKPhPFD13l;`8=U%6&U6r@ ztNQTu+n4-1OgA80XUmEC@uTwYc%Gf}gQe4hZoGqdbzXD&?Cf`M<<4?}`Q!&D{_H0! zSo}1HM(u3QT6VFX4)E=>iCwmrjLE6?@d0`z8yh<>d1gO8;pI2k3|@ZQTr@y?>7+II z?O|VideztT<0aU7I>5u*+yQzXq)YOnufZJ#DD#1dwY_3!f@y=W!msu_S6}Py**Hkg`goE1zQAl{;B=m zou)%NNawpeQzre|8D48aIOGnRPmbhk95hb{_(>O_b#y>Fn0~;gpR@VddUqhY)X=Y1 zrH{!=Ji;Rjm>lsM|3P%{tLabr=F0oUeXu>{|2f}%n-0o}ZxRb^Q$8R+`I0-i(s}xC z-dI0A>n9I=q?2@*4%#!v$(MeTd&2gq2WaBCSibdrkZc?tdF%(}H1`6rP&1~J`JESI z`Qi+kd#<(D`y2g7n>fcOx#@wuwPZQ->9e_X;4>Y2`K~)So6$l1(}6yi9*ocW^wV1S z?VtGb`%klPzh-XgW9r>J{_vaa**qPP)}^_=+|6nMF-qvjW_&g#vmQ2J#@ey%+muNUUCPBcQolxtc#;`V4XZQI;ejO z&OPCiSD$=Z{V8*6kIXF{9I;RwOdp_|Gkf2fLkrI!I(&dHqyutJnHrnJGkCAP6rcRF zIb)9TX`Bx5Dt5(0da%cDr{0oz&d=J9F1hJIKBr5zO8$Ft=HnCUYjm*p(P|F7cLu(! zPd(JKqP z4aaZ%lV#6^#(Xhe(3bP~kGbiO@b;FE78Bs!r>ExN@6CF?yszCF$Cq{T_5bfCZ}Py) zp0{An{q3R0?s)X>40NXKoj>Pif8svUZ*O$%ss9M112z})bdWD3(=FMX=WF}}K6^w9 zG`I5*e<1y^ul<_2p#F0W?H#B6Xzy#`?~u&#&5y}JFKDo1vfhI5oSV+XfS3o(r-S&J z=g&S}g!7@_@V@-bgEi}OzI{84zWMs#Y2~J3O=Ljx)#6oU&SPzP>TqY)=Q(KYHNb_!sL_-o0NgfUD76wO@bdp|dByFX>PJ zXkY$dJp0DUJo(uB@aTZ=(gXSP0Y0+Jd^Yy1NPc?b3uvIl4`xo>&)&z=*4C0?$9t18 z+PC&C-VYs=50l@#eP=Syxmo+kFRrTnbaLxl^Haw9!F&7OW^JcWPPXbf-k1)^KJNg= z>4uHzi=Ejxe$eJOV68F8M?uXwL4CRdd#*39nDbsH9P7p!oOo&@uZTCJJ)6eN3KPTJNL+8=Mp1ae*gyERe2hnUEM60>_6YAe<@s|$rdG^%EPrhC5 z#{9wg>5H$gJN^ObJo;cdPY-kLk^Yq9QT&NF&qXVK;21AiFL6(fWGBb1_h0ld<+q3Z zd(N>I{mK8C?Xq)t+12M!`XHPM_0L+g@|9?w!E}W8a#eA__I%^HI}je|35|4shUX6B zbU+R~;E(=6)7xg7uGCr^3qO!nrgePpJK?h;}Goz4Mk&eNYT8RIwH z_-%cTvol=tjl*por1SPhJ4g?Fxp#u}K>lot&*a_V{N4-ve2M(@H+9^3AezZ~#(OeM zIQJ*ZTtDmEQ;c-(q!WL5$Fmp)r|fKOOrHL}0A4wdEa*(S_3>n#e)YjxXMpCw^j>`r z{@M?H?R%g9;Xie4#@5W$w^wryh<0b;!TIUH`mg&PAAJ5{JNUbe8>*P@rLy2s@==4ap7dHIU{OWz00&TwAmf||8>i&u2gf%WVwuCx1u z-V3J#xSi*G^XR7MV74)?4{GpdKbxA%FJ`^B-aMRq3p_hJ9?l?qJSV^VKU*4`pK|Yg z>vY$C`n4}V=sY~?=ZB!V;KVckT${3=;fjZ|`SfJXnL#?h3qKUkbU+S1B|hf!&(wiu zf3m~l2jsWkUi8q_;-@or-l|Lc{7c52aki&($zQHW7uMo)@p{N2ZsdaU7kf^*_r5df zi5@hcJBtZ((RNOJ%>M2JQ*ZjU_Bx9U$ui|NXFO%I4~@<|gZ7xmD_Oh0$Xo2HnWv9k zcDVq3axa|2_PhLO$7knvX7dv!hq+t*iGS9A&L8;P)C<}1Mh>=H_CI8ihm$|~_;UvYgW zfR??{b|zke_#?mb*}FPU9&@{$8>|1-nfA~b+WEROD$j|e4hjj zzL0H$_M6X7Kzq@^kNxf}@z6f&`e!_)gKSE7kN5yR*h5e91-+ zA6tF3AUg3Gw0G~%IrQdwx-?gRo^PHG$U+DC0eR%fT?g)f#R3241IZsB(a&Df9?olh z;y1tZ*f?Lv*lT{;h}p)*_e zi)uD|tM}@<8b90Tf5X3hZ?@Ll33?A;|GYn-%a@#=4e*L@ypi`&f1mZ=cSiZiyyv2M zt^G$nUcPYX%sUfn&W(rQ92lWZ`u4R3_v`-J-(26-`jdbDA6@(A z?v4*0#3g@555F3IYj|c$_XZIES~5?FUp5yD@ImzQspoW_eJ12HbP2|j^;&i|X6x+F z-tG+iQnTOr@QT6b_;FrwKu`GqJ5RayzIAfr+nzHW-~;XCID^TS@1Ef_m)ybTCyY*X z=bC=&=_&ot0~yNW#Wua}vK!0&{6M_$&0?LrXmwWfn+I#@ey%0k#DO*Xf1K@Y*-!bq|Q|;w|}{ji#1es@K(h^;~UN z>w_Qvp8xpX@A>R6U)zU%@V~xiPU}u!U+)9vJ-|8HJ-+aptnwGzks0n;yql9>`2xIj zK<85j*3^i9|DS$oLHN!|Kjow1e23P{U31M`Vb%J-@b`Z9J^iz0ZMMJkL;qxrgL6-Gg7?bo)PMHC-?SN? z`LY;ZdHk9BUwnA(gKvCG$7l2GS6o=^<@aWi$0AM9r)3n(5yIQkR!*8YjJ_uDh!PIup9JauC)nabs$ z*uGW&={rB*H~k%d=SCY%xW!kH-oy~yff_%wA20g$X>c@lsWrF5=#np)?BVzLC6_+P z=5XRQd^Bf%yOj&_1N7jh1N0`{bl*G~>4pE|L0^-jtN-o*=*i>iU2=ozqF8Qj*To#u zZ}{mtzJhqx$_HffUGZDb18l=b(7oo4gTLgAE@-ZK=X4S21CKt%5PInV zq+hkhb1q-@E{pxbo4$}wOc*VA<^1aUgtKpdWBqb}XHDD8emWpCyA~t#bV~=;=m{>J z*;~#^4r^+y8cY|S_xD53%eQ|@2Z~n}`c(U_R-_!Hd0eR@* zR=m@R=RPvi0UyX`re0^iI%h7s(3AOWCJ*v0@vr{#73+8l53Xjc$%)+?KK%#2V|`bB z`T?BI>uk{c`Hbz;IHE1mJgVR&;Qwa>Hw{1>Oa!*pKu$WL36X&b2e^%!srL> zOBd#ni4MqCte@$Dz4!rL{jP8P;PXG4YyqOdm-(OfRN(Lbw!gce{%rDX{OZp=_2>I8 z@7J_Rqdxng)xPF~;&YydSNb56nnwrhs=l4c-yEG)pH}_fo(IZd<%Z<5Pje<-HGW_H zN6Q^R4mWQdez+iBXTygv+f6w8WI`K1**}Ok&3X0|-}yo^2l)U#tixTo`{XA( zJ;6=S+1Y%x&suw;Mb`2c*jOJ8&^~qlR_*V3-t+z+|Aqg)p7GW6FZ`;%c>Vkzj`|<2 zK3sdud2irOvEKpQKgeGrD|;;8J!HG*@A54lqXW8SH}Yg_kd4WwISW30rHgR$iD3Gp zBlL~M4tj7Voc+1B#~K>e!Lz(?9zV{cgGcK>nc%u-%5Ui)S&YrAzjB`(6`c7eAElof zn)(yUMa|8Ad!iFGuPzA_?=IUM2tWGz`1b5!&HPt> z>)*OIwMQJ1Gx^g6`R%1oeqiibCb@T5zJg!=AbWK6XEQI}?0bsEk1cue!awl5-v55| zo0d+E>7%>>dcRuDo8$W7uFn>$l?OzB+4YbQA2TMhTl|rmOmsmHe0i5WAFv+(=%>qa zK<1a{d zjcv#QmmV~JOc(gXi*-4mJ<%W|dD(V0G&OtFec#t}*YnPQ+57Uozqq1$5uY@6rLe=6#o}yPX^JLw-OH?p}0YKOH20`Un;i z^yWVBYCw4j%wNeq z`NaDp@lF@jf3_zJ`S}E&C-bCjjxE61&sN#entG46`Y+z)F8M`0=QGhTXU*KgJ8Hji z_lRib7v!`zIPG5_-`O=EpsU^Xb8Ma5>6iZUry%{vS=nfZ_?DN{m%hUR+GDOYuz737 z;M#Lp)4$TWtiuTp?EL2FB%9F%old)o1@@S7*XR3Wp1GedlvnaEdc`mQTt2(;hL>tN zm~8r*dhZ?`)bCx|oYQX)$SzuQ@!%dH_CV|8k5_#%$%kx5Hu>$j`VTKZ(5HjwmW!N` zzUjG~!H>i#J@)>#~fApfC?8(nh@W&t2X8X;l|Fib%f7_=HA3SmcUf3A)-8*~e2gK_f>ucfZ z(;>alK|UIvL9%OXV~<=wSDHDp*^h^H#;AR0l8Ljubx}; z4rqVRZ~SFH^FKfE{6F`*JHRowzCSSjMz9);Uri1r6aQrcvS!~McHe`q#?VLgKfg(K zkY1hPp5yrd?0opv)3>wH)8s{dVQ;l!hrj-#UwFL>l=C}#k2(3@S@D#;=lN3yY`x3g z*jjl%ow0HB;{i0!S61G=)cHMj#X&g=ERWrTt+lUM2hrEM50vxq5ufpz{L4m%FDK8s z7e@0Ptc?{{b+&FuV%AHH8|U3Gmx&-Z+7=APsi~2o5m;9p`P=jYt5W}=BoM8 zo<5UZ;Kg6O=7afw^X|m~J;>Ye=qw%3V}7kKfAHgJpEvEZd3)=#zq!WxKlquyeZ||? zx>N8Ee9?3KrUQA6UFGuS2S;3zcmJnWtvk@Mo*#%|a!>s_qq;vKzf^m=juN_q1Cevdg(R43#Mo1h)0m0 z&_{RoV9y4g3wmBYgKM3f@P@prKkfqfV%CD=U=Z~E-- zPC!O{kw4kvIr|g`&L+D$C*H+6`|R}}9rDp#%^Ccsv3tsVk6-QYJAUf5y6z4DPpj5f z??LbR!M(wCuQ1=|0Nw%gIe_!?JMwDeW8?hYc(-$7_Fnope25P0%a@XW&+na6{RiCv z%+oc!(rLPt%ZJAHDKKi!HA@>iGeSdKPd-+XmkUDuybAOG@O&wb)y;y zdHb*zUgNuZhBm*J@9x!q^6^XYR{f7wddTlUdUl3A<>GP=8h8T5mOkC;SEBGbJ(|>osGH&;2VErA~%}(!C75+uKpMM5dNAIJ@hc>nvxid%#6^y?YP~Y|U5ci4D*!hocwW31>f? z>|m`vXgxnf+uXEwF^CsDB=Zif!O0Klf}Nw;nPfJ{H_JmHovj!>^rt@SH(t*r7r)J~ z7rZrRz9tSX{c=Gu=3Kg^S31Z(cr}Mtc2xU{_gnQ}T*9RT_N2Fb0Il>q&(LR&Tg@Gy z_Sx_Isa4nc2447u)^k1|ggfsA#^kz1-+Z=@uj~bC*_Axb6&Jhh=h%9FF!O#orqh*s z54*54JE~u70zTU0yt%LaV9h;X(sL)6?*Y`WaQT`(pCAK%rw-(`^1lA9`p+ip4hKzo zqmTTaZ>cNB)@KYjACEOM>Vw)|_y77&{^H`fcc(oY$)WNI{PsixJ!gW+4p#rw*yP7+ zd{4WQhm3rF+J5%MK0L9*5BLsR>9u?iG|$)II!k-XA5Wi++WW-I)7a+$#^JQKL+jyq zzVfW6IjcT6pS|LV{ksF;4;^yTQSo3r<<_tMlRqEe5BXCu*E!-4{SVatBQES`$KL-3 zJ^wo+pJZFUDeu^0jUV=|z_`}m4&a|0aw}gT2OjVgpA%*u`HxKOS^dWcdgk?e_l*{N zfY~9Kjq}}VKOa`Bd-ku!tJ}ZvlYja8+~0h4|GR$qf3Lb9>|H>20sFf@c#jZ$@80C9X-=b32pz4EPmM1Etw?9N)v z2dy{1YWbmKkl$+h_Vhdh7p?BT=F4~Ov94ABCx3K>$Ksv*+2pzUPY21*hU7;p9S3*& zsnye7jjQ2mm0FJ`sQ#dZZ#>O4a*KcKXii%5jQUgd`o(^Bt(KqVyW#*0pAPJi5BN77 zps7#iY)b#xQ=MkFS+Ae#hmY17F8XtRzDua~dk4j5ZLpYm;faPRq_&iJZ0&v($H)ATSQ{WwP+kn_;j)aAX2OLO$B>AM#<)^8ka z4eqK@N8YD5^{4kHARcxe^8@_iY1aRsjcOcMbSH5Y#?*zby^V6UGp4HmZKKBSb+T#xHOtvaU@r2KKHLn#1`2g8hydTin z=E+P)@XJqd^w~|nJ3#j?uzNtC|MO?h=+$}8{EgLeb-&slRO{9M{SIIZXa0SlyF_;Y zXXhX6uaSYjlZ)+)XP%q=>ObFQH#(r3=}WWzvUhfOzoaYYvq5!+UB!Vsqwb?8r)QgT z_YOO!`F%XkMr*cg4rXt%(*fStZpuCTY>IdOl+NJiL-QQ8(VcnE-g1#V#5Y%MIBL7G zd`Gw43ugW2cgA1)hoAm_N<7#TE*NdTUQN)aWBlMR-RL*R?$v+&vv{Y6p8v_gcI4v+ z{2nb(V-GOANk?sH+26czwL{zbm~WYKN~%~ zf%$@S$ig0c;9eZiL-_olye|&Yfj(W$I#(_F(VzIKWoPzb@9Z>THOw5F7ANi$#^&Kn zIQO^DS$JT7`)cOMh~KFLbLBmHc&`4Fy&TRDqL*&z0lm%zmrjoR2;bF=$wC)F{hInO z*5pd>GUc<6ef(!v^IU_b`rrO&fa|P-J{)nN#S0(CFJAGf$xrzK_?#ce2k^+4A0#`t zH|N>o95!_iBbzz;7K3Pk>K?oC$y*Sf^}Wf_bo+b1@28gzz^QM%CVM=JiTKM8=m=kD z`9K_|FS5X;i~K3NL2-z_v)O@d_>O(}?YST99-tpD>`7M|zf|Y>clH0Le&%1TzWiaX z_XqH+|MP)46r_@;m{bZ|wHo z^KIj$=i_|7j0UKw`x<{z`$2Yq-`-oWx-aL$X*?m@Sj!LD-a7iup_BMwclMIw&;HRJ zx%ohO(i~dR57IHbJ?F?jd|5ow`(FQ>SLfCA@>X~t95m#QS^vWY)c{b(5rrDWVh=54y)CmeeU(uf4-rHs`;()LHw3%HKOPG@IZST>pMf7?)4WAp3sWlbU+UH;z9qp`cDVb575!3Z;`=y`6k|K)%a@n z99PrHLCmtkJtP+-=+idi;H{D|MERu z@yBAvTskNYg3c@6)B?VvsSoV2^nS?6=KAKy-Ml`XH>VHR7?e-Y)Ax+|y+8e*S6z`K z)D?9=?(lhdvd0@}4*%p93(gheXZgT7eZgTLyuc;jnf&4peR}F%(mwpE^|k818ZQ3% z5Sykierc_D06y>fxgY=f>wAOV0l>4TJc`#TH$K(=c(x|C*&c7?(Kp8y`~tmvW748O zc-;Z$hFw85rsw}z`+L?`x7o*6U$}<%{mg_x`P) z<@(7-K3>iTqmM6sK?m&3hG+7dvj!(W2>;CA(dR>QPdUdq#(WtRi&`~Z&NH4hUA~sX z%()YYaX4sz#@6z2^Ro^(n_cmfPSS@ted}amTQZ%+JNem*4$>D}!bJlucBWf!+P{8v z8T{mLdHSqJe>VBnv%R?I2lDNHqot`|9QXio8J3^U-eg?a>M0aF5Ng6 z9r)1+xCCmwk>oIQrr4kbcOmc`vNS$Qk?sFL=eL8VEL5 zK0xnQKB)drpMgvE5}`k@Cl*T+MA;gdb?J^z!h{J@v_JpJ_ij|M%aOAtQ3HFY24uj)G+^iE!_ zuderQtGQYC!y;S0r~NFE8gWhd7lp0QVyXjH5m=GR&G1!W&^gV7T5NcXxuuZ+MlnWqfaMzpLf9Le4xBfSH%H8m^#pBdp2bg{>~;rK0$wcpUuq& zi&^0+}-5{HBar6L#+8e51r6gbe(}_^gA2GOL+Qh$7XZ@vTL~@KVWC_?*DoZ z#AnE9U-YJrMVCzc)A@MuK9;=rln?N2tj&6^?pObxV3S ziA?H_T;U!-zIfd26@Sm=1NnRA0%!08zE79YE#^RH;*H(u3_r$nhn_n?H65(x;Dz0i zQ;n#`@Ady*{@`z4_W|>J{mp?*Qndoe{0zzxqF)|Kaz{?;fE3qbGm3e|T$1AN*X!N^!PD=aM{1-{`R7chGwp_;v>H3p_nHF+U5O6 zp8v^C2g?t}9SBYOFrOXHU^QBev##+$b=~v6T(0)7Xa8d?e%1Z%1EAcJPub5W_?O%o zO}{D95aolNY2Uph+WGbnc8;oSjn~}ww*mghA`mTSl`-3q&^vNMt+MCUL z=Mj(j>K+I7l=tz87FlQgr!#cmY3>UeyNcUd&;8YYHM-|^pV?QhtNp=n)cUj9-#Vz? z`aiP?&o}g4#<=I^A3Pt^}l?Z z|ALzO|NDO8+u!@GfA$kAN0raSCtqFl|H$LzM|-S^8*Anl&gC6|J3#rhJ)MnDJkrP1 z10Ksq&&4|(sQ+}p?(jiAan zjx#2Xe!RJ-#5bAfh+nhoy*QwUJ#OqRzoV%yPh=1G+gX3~)nfLP3)Lz1b>C6%)%NPW zd~RGTm$=i5ZF~5c*g``e?at`$0nF*=6Lib|_yzgBSWO3Hy7&BV|I7vUrq5z5|0)iq z4rZOM?pO2G@*2GQ-W9l~(ivLS{2fl(^UV5mKtB9UUim>fAloB;Ko8z+z(+H`if;Z! zH~gl&>m0sjFWsY4tww9F-;(Qy zaehDl^$v)R$^~TDePHGsXQJ0{|J#SpWUD_R-o+Bz+p7;g*X)CnpSly9+vR4j-T_!+ zBQg~SXwbL4^l?`I)1STc2Vd>i*hb7&`>Xlg0cP!XKU2S}`$0J2^%+3#{96Oz%L()M zgPq&&X5dRBGe6X)YqFB_p1<$)pTEuAPY2W1#?Hxp{!c*obgcQlrkd}b#+Q6&(^w5K z*7iHVUhi-H4q!1i`KdO88Xov6naQ5L@96;l%C=h{os|_Eq1Hx<1##v0t6{4nXW0hv&Tq9^je>yF<+W zq#s>)lQ(@lYw|w1<)iGH%x93z!>0>;&iYTM?yhW=2#ytzKa2H);@KF58SK&){7go!mJT5!-UCgCTib@<%{ z^x+5fwbu376m2}j*AA`m0q4lU?awdpU=E#0i_Xx3SB(W%411S%)L^w)ZP(broV!?c z-MyeYLUlhlYkcqf=bXEM{b+lSVBC4-3cjJ?3$J_-zv%`fQ}*4VT5LUhI!XuGJ3E8s z#1B95{G+zhZ?)I+oI8Lfr+XI=o}7K_4p3}4LqqSZPsX_pues{g;^&ZwUHON2x~GHu zfZx&s9hk#Y^qrxhjb^z`{zAW8EDqK4-UIk7ptb71z2@8%dRO4??0zSgsU7Nn_keP! zHT3N@CtlK9{AGvo5?;j`xo+h>HtAVeZXmzUl#+MaqM99K(`r9xT$?oV(6X6qH8~ly-dbctNCDY z3^rdKZ{3|h?XFp$_kj7_uiw~ydyTsbM3X!q7ogSx+XMf!V$DN;!?0@p> z_n$4R#o1gAk@M2A^>pnS$-Th3JAiiUJpjDkTiHKr4ceU>Y`wL{V7x6lhYV!T-^n!P zo_#jv2mC$XVsmuRjCSQ;vy9yVzW(Rme-BW;vPbQ=);+=4I|Dhc_s4R8 zd}`mG_tD2I9_a>eHU7&N$V~q3HDYecU0=+r_txR&1JzM5{a2SkHTYIt?hX)ykB<7^ zJ;B)inlb!pdwYZXJ!A5MKV!C{6OCQ-f$W;hXAnLel=tMAa!d58XVs)^Gsn%rt-g8o zSKH-meXw``Gk?r=@hxA?cm4T6u(Lqt;h+8S3(5`b$!E*EV*X72z5b(RZ~Ek4`eMUb zYP{y`8ou^t_G)z2SX7moAB@b9vSHc4{)kmV0v*@wT#W$ zZ?A@D>u6ZlhvR%OTi|ie+3?YKf9L;bnIorh^&idj$j__&op-&^aIi zfO6}E;sM|B6~r$djp;znBNuvvypM)e=A z`$x3PgTZ+pn0J8igZT=&_$Cv%^MQMDz&FHDd9T{X5AsWK#WvNS3H58;1>w?t&;8MPd2o09=%s_s2Hl(47?1oP)Us=Lphx^5zX9oiK4&iA zYb(Ys@kS@=D!qKyXMSn%QeB+&zgo=~^w~v?iUyb1VQzyg*zV_#Tc7^9Wa=EAW9UVT) zU$yyn06pWY-R=YGdbPc^c?W22LhFnEL8IDly=Q-C;z!=Zn}%1i>ywY2yVvY?ZY&p& z8-6ig46*r{&+{+y^xJx{HDfiTJAiuc?>UXxa((aX@@`c%+F_hHNSTP?gH}Mj$^M_QTshdM0-Lp zm7UU0eBx2xdO0t-vipSe-}65m*r!!T(dvw9Em$pAlhtZ-;9jGv<8$3!XZGwLUAWcz z=)j4_*_rJH@ma27!~FW5{OMx)fqiP9n4(W{Wu4xuJ+t;!r&{A5E1r%V*E{{|^Z$`I z#CFgB>ke?46W6WDg=jc4+jnN;&I6r^@9YoC1>!qD@b^8B)PH`k^5L;JdifV!;K_OT z0lj~BXBBTXcNabkhkmNvVEyDJ^LlnV?t1^PZdV)8tA^7JTk!Yl{uy)!kS}`|U_Uz5JhYvW z-0_&b@J%K$O}CnOID7uza{+y-tHl(Wbm1)Xo-?b#LHyy3-K+Zx9{vF0z55S5`#?Sb z+V5OG20wq&H%GUf(V5XOpB|FmnEdvk#Ru>pHk>1W(+B;``Y-m;u$OJ|oWFuKwZC@( z>T`9vezjj6uT30yv-S4^=6Y`selgN}7BbYb4H;hg{7?Q_|LKg)tHo%a_4Bpj0j$|S z?*Qzl_Rl*2e{(kgy&nKOJ32u;)ZclrrnQ$X>43en?OCjwW8diq{F?3YA6@6_o8w32 zWO+wC&3r5u*W@j0-2uD{&^K331KkC}aYr!M9U$5hiY-1&UcAu<{=omk-u=Da{%v&~ z{|~x|Q%He?`GXV$Ni&cRBwB_m9YrXM!N6DJp z>&n2?;fyn-4*lt9009uj=6pZ z4-fH>|K@M)J$=Es(VtJ0tH?|zGL-+>_>ufyEPw%@pJxI8-b;`}v3D}b(e;N(`99jY z5L3JV6hrB~KmX5l@kGo0kK})`0G^Nf0SxkkFf9%g7tqcdzVeS;Y+d=^p4zB9C3f>M z{Q0zJ{m=dC_a5&6#@q?I1K`c3V%zesiyxkH8abw1)!EKjAYbvo+FSYGJmc;g_R&uN zc-o7uEB{{pwdj*9`sv0e_^l%L^BMJZ2fOBmhqa!o(fa5qSFoA<5Ow}q-=5)s_6{I9 z=}y-4$A^D82XI93(?`$pKYj6dn+M+h&TskNzUDr+pWgfPUwOJ*EsvM`=X?G6Zhz)| zb!)75PdLqUR@QU>g)#Yi{->X~M{YX6!hQFp+$R>m%zQSZm$IMv{Jy+f8=ZaH6@SN# z588VGHti0;C-`7@0CqNZ?+!5cV;^m_{KwYz41?@Vr{erhVaE@g4S0!p`u6i=FW-MQ zX08|~?l>pKz8RaUi(Tb+IbMIczd7Qa^I=?3*SE)g^V_#GAKv*qx%n*&*p#g7dphs1 zDF2&-C;j179*uuFR?L#G%EL2%*H>;XkIy;k=9!~tS7zHjlb<S6+BTfir?&eYLh!zvsw08wz+u7^~|MbX{lV>NB6M!_VKRkkJ`kf6I66?GD#jmbdxt%-=KbSC7i?>ZlxFfA0pmE9`dz zZJ4o-I~EzptngX#(mneTHx} zvIm=$lf){qSZq@_CeO(SbnW-L#0_!50XTF%=6PE==CU{ck)!R$C+Ot4jSUs{ z;I}>By94Yw-`$|x-#Y-diyt}dr)@uSkZG5Z?O-4#_BZo5kH?-yY+NPm}WD+QqWklez=U?+ltNwwu$w zd;U-VJ^#~*5AX+PIlE6f^FJSuLlivs{9mpuC(GaE-o0pZShH7SHunZ zUg>Y&^)+7X+kHyxSHwU2w|BmQI?KfYl+5}%2Yle(`+sx8K;3+N=%0^i^Qq23xfk6_ z{u*8=Oyqx-E`F9w85TJGaGx^0{Yjy3uR;|6Yd~`?F^Gul&y!&$0q89519-_tu)~YrbY8Pj zvSly*$w#MR!YLkz1^Ch1Jl_|gS3V`aq%&T8vAnG=f1_-&V*Pdp(8sp!3C(Xks!twg z+tb}aUv~z3wbnWXuGv4EY15zGol`zQzwGS&EnKyg&b#%_fA?~^*B!3>zkK!bUH31C@q0O$A9Uu! zARDtc9HM+nJs(5&dVQ1j9-uow-vMy9;}defxD@4w^A13s_$5m;Ki4)-fd?BG_vp2s z^V;Fn=Ux22xF7FybPkGpVjDkqPWW{3I$C^sSBh760RCz}?*sg80A9xJE4J{}WFu>K zBR`!x@9cXz?=XP1vjH#jSKPnuKzNk@%kj7J@1DEOpMAAw?w|JsbGskZf7**YldrkS zhK7ZCz0cKwo#KY%H_^Ap%B<)Lzq`TRh9lD8`Cr7qw3ETH%%c8GK3 zeD&g<`T2}`&p-O?Lq<9!NB+i7$V^_oz&GgByYCeXUdaE}hXFrO=pIjewaGzud$&LN z!eyuF(;RrI;th=LDc;xzesYj?^1nPS-|H`Dul#@6j~{!kpLc*g_Z#ay0P4)k1Lbgh?WK@~ z&dC@K-oP}V2@$}Uijn(_M#u3mCGyTWPV=$7VDQEKiviROY_+-9#J^) zlg`pk=i2H~x%uP+<^S>lyowL>RM=U0tJ~-AyYfHG-PQ52M}6h*ayvT9ya&u@f9v@A zEb)q#`%&1qd$5Q6&)4!fRAC#s8{=c{NzS}Ar+BAN&gDbq@ry9P3l8FFe#GC)xlz8> zS*RX0r#k8mppW12iM|ui9bmo(AXoPR`6-*kGfFn~WHe8K2Oodr%)^U6@By^*j?d(6 z5BSdf&zIrGUyFss!|05C_v+1eR^S%m!t!ck|`+&* zlwK&GXs$87J7YB8Ub*jz1?H=}=bqw$ezBrhQ0(XP@#I(VFlXj}n2<$ZC7hBkTJHAj zO7~O#cW&uCbA9V4wHLkRHM-4sm8>xE94j8mpZDS+TwuulZ0qi%jaL|mW!egCj2DZ` z^VZ9csC>5k>C#v1E;c(8^SS?2m-7|(0`s$d-vNs+$}Us3WYo`(&@fu^n*dTg+sm+w(zaYzSD2_ zHZO|jd=DW1^9%0*n*w)%|9e(YN>NgGpcsTRV7~FaGGdDlTFJL-#Z!f&X z5wWfKXAkXJ#Hd^GZ^o}#Z$7{0=jH!?C&-;ZKOa`e+L=#2GIs{}N9P#5XMFK6CqCMh_BW5$fKRYJo53Gn=ghe&P8nlAMZBwC9z*NPUuIwHqs^Uj>?J?SO=2Zk%)^hq z$;%Juq>xo%<9qpEEZ{42vW|XyKAxyHUip9i2sh7jV!yg^cp0Zpg)U?j&%`=$uUNY1 z75DJyt~A$GNAa+Sk_<5EOpsNbPV|sBUW$kOpmS6Hx87L@gBf%98ceN$i+#%X@&uf; z*`;^&&MkTQTF>^q1Moh;|96Wj{$^V4cQ)*kUGT#PPkFCcK(@V*+gX@?0Ec(U|GWOR z=}f7rPi&cD8Y@cU=uQqQ|YZRDup1Lnsqwd}u|K_9o#rY%;*@}nm?RaH*G~*F@M_HTDC;(!Ee0}$Y;y(MGD#ohM@z$JZK0^+1pYQQovDSQkTnyv~e84@JyliXyR{rM)&PlOA z9VY1yQ#fds-}$=pKpt4|PgI|J=OVe&(>n3Z^WS{_SNF_A-W{LGLmiLy`1VhJcFEA0 zNY?Dep574{SHI^6{02^BfPoUfdDi$DEbtR+dN$-2*2o!bWKX_So~HM@CtY_W{N(uZ z|8M=~r`{<39#C-?@H<-O$$j#i?|b3ZeImZaf+=Hi^8@mcg&&~z@<08}+kIgA0^ar{ z$IQj$^gaV%$MSfz_h04mXu15B@6Ts{bGv)MfNW%%`m?_>_2=IT-%d|>u)BG5vIZ|a zi>1bT_LrmO|2_AY!@C>Q?oOcJ+LiO4p6}<}`uPYyLdg|PMzSbmBd0=UZTX8oK62k( z&;OVIcINT#9Y{EYgy!p(Neaq>nyju?5?*#I@IZF9lU!U)rZ@sbdetmc< z@ob;H&swGY-+p9;f#Ur?dp_a=a1iTY3IpedAFy{m1y8v9TY53C=NoopyJFUS){)dFah5+=sWeQ))8%MW%HKI_?k z{oT&>-fGYP{uZITf%=}?XMV?Pz2m?5bWhOMukfF!x>DYcCReu5=Cky2KIo=B{d?BS z|KY+%!T@e?nE5qacY4bA<>o&3FON)$e|G@Sgnbu4edd03#d`ps2jq{*k&O6>Px2QG zoO!xElK)}l{F)2j(|N*M{O|r=42n9VGbU9>#k^vbx;S==mQ##dEB7yY*;L(r^de)} z!$MsjKj6>e26>B3)ArTZ=l_@9@G^godF)kwjk4LEt39XGH-G!LTs?FBscubo0{e)2 z?hSbAZ}08|^>tS;PF6l3UgrbwddUZ1QGDPt{6M?>zi__V#>87Z#i;D0z8A4e-a?CG zGmo9>&D(kHZEN+p5Aci5JGsfs7vR8;*>mQ;d(Z#Y!-~()UtYlvuZlK)<$q_v8dQ<{ z#bt8kwVZ|>taAuETAv_$*n&14} z{9hiA<~Qb>+d34s#(TfecW7a8Pj~Xko%EnPy;eND`~ua-XJ_t9PkhDF=*rhm&+R?a zm%ID>fbxI2pPYPp=Jx9AK5*rK`qxK}mvTRu*dVG-PwjloSuCez-<`_;`6wL1fd2TQ zVUf*u$_FatqT2g2fBk54?IXAMPI%Jp0Q|B$K<@#Pk34vV0eRV)Ud|4mc`5&Q-q)GB z;w2n+y|tY)z5-VTX3o8RD&ma%z{ktgt55%-@atL1`NfjO<0+=tuhR2>y3?PGa8W0# zx#V5`emL*^0j}bHXFyLEJs*GryE=Ok^+w1#y>vrDt<3HaC zXv-n|few5iKOnQdVgbD#$^S60PAs82e)*TSasFBEE$_p|xzO%@5KV9L(#1S^!yUj` zS$BXd4(fyL#HG6fUi`W9;yfh-N-pwES=pU`8?&c6d*AxUZ(!+Mo2wl^RO!sY_b8ZEVt6%YAH zC{N7XKKt(V+sm{4%>C8nesc0nXGEJXO_{{}+U!J!e*cG!VY2&rZF9?gsCWTuGEE)B z*ZFgf74yXkdx$L+{`69T_nae!&%1=N_~EbE&;ANIvr%%ggFb%1mhrIeblzbAPd;Lf z`LM$KUjApxa=rXqp7$7>8&1urpGp5O=N|NIQL_?Ls_EwNc1_P$d;3M2i-)obeuBXs%Ol^c8Zfx9*3jOND6 zm_5j7pFRIOL*yf81t$1D5)a{0Jb;;V0fX=?&S>*B?R>*$!}2i@I(wSVvgXErm06#J7lo!N;seiGcbAbQk9R|kJNlufW z70>GXbG-J<<@3&fM`tVFt__Rknpb`1!ISRnLnpcv3t*?O^Ue?5Vf5weVTZa4*azO_ z{+|2wSzG?suE^)c;IHV1OYZ~1Nk9KFzqwKSmiyJyHwyb?)kg>TIKyJX$YSQuP< zviqdPeKM?geCdR5{Ic83v*qz}vAEHA&+YqX{xi?FzCQ0c)n`B6JCE)h-3i(gC1*0D z`9Np>-Z_8=jKcu-e4w}oQ|slU@~?OAiX6Sydp<`i=FI-qo^t%;8E>DXS|4p4nbgI} z>9=Ht0li=#-_YUS^FROMFSqi4zJ;HhE=T$99jeI3<$G=Q`pRwOtzModySd?uR?LkT zs@?bfl0m;hZZ<1^sl$Lh$xJu(>HmA(eCNe{cxgLN3(xC*UA&3f1MbdDYvCxKqhhi9 zK=o5T*C!{)aea2aJ}0>Pt>26Jcv>U>!{hCqUnrk*KyLDpO^k;TKR=y^J^!!xbLkbP zaFq-3rN1+W+9MhHnL4VJzr}2IHs=$~iI&gvA5`2&t&4B_pm4DFlqI{M`2pP(?^4+o zR^9jIh&}(~+4Dc!(|`R|m%q!qp4a=HihQk~tx;_@Ay;|7y8#=}QO@svVD2gB<7fUX zuqF$=$TRiKKE|DQSg|#FvU5H^^FN%!Dcn#cEZg(cC;uAXX+DC^y1Clj70Tb<@AvFK z>AVA&qfGhmV>ejPgN@mhyCXI5AlIp_kCE%|9k{LF;85vHh%N0vsXD+y?iWJ z_l~}tK52P<=K1c-f=`v$+&Hw$^ln$0}FrxQxA-S)FhXE?!tefR(j@&j#n zv-^p{x+0E>HDpG$jj0#U%6Y{(F|l|TZ49m8V}E7(8XJ-~d#S^K@8b;vbF7#0NgW{`^3^t3Ii{YUeL#rLj3rANkPAY)?MMTibcBuRSKk z$9zRU4Co~mz<^%&-v7gkznE{GVn4j%%ioN@ROB((!_nU5ZF#z!J^S=~2aa~HK+Q#+ z6V$$q$48&KGZLl~1NqXNFxX?jY?l|v4lfvn`5xQ&oH4Q6JVk!CPX3qo%jJA)w(EZv zim%TY${C*hd;X^*ou`caf$i9UY~ta)cu@ZD+~8?l_bL3<@ogXamv`j1{3a^TDg0(q z%-%vJHY-KfHm2U4)p5G!(^WES?33EqQ5oP!X7U? z)nUkIJfE1S^ek5_iWa|$bG40EpH$qMbBlM)Xkcr#_a}GvT>lb{U-t#=>L>oqk9Pi(8Qp#0 z-Z_9p@c;(!V)u3apZp*kP*}|KILA))u*>%+-Rt|@6Te%1SKWT=)`AW2yc4qxU-c#6uI3qDU8*{Qg!)&4nFhNuPx`J zjn{YUEt9y4z%f9 z+;hhHw>(VW{U1M&f5bzv)jB?ePx|u*?UxFCnlsnV_0`deHPufvp7`&jSgXH1;X#M| zAPjchXPe&UIXCW3#e>Onw+C7K?jIk5qkK?47mxL$_09ZGzWR4+jk$6QUzYRbe$S&~ zHtPS5W7}OWGLwxg<$rqF&-|&kx@Q6XWVP3tcli+9(_cNGYd?L~luOlTkz;C?Z%%XJ zK8rcC7;BxFC#KPlY{?Q$cd~U3&GqW%oUE8xx04?VhkU;%KPbhvU7Hq|6u`F_U7xI`S_y6R@9#MimLBzWBd4? z>+zx&YOHp;qRBwc{e6J8LTB@mL)#gq7oD7+dlzP&&H-^%~J2jVX<>)B6C+A+{>uSaO|eN_6$UdKgti{z3agS?I+&IalQZNQ*ydz|MI`_Suf|;A2rAOJNchYoPW9g`+n&+ z-o6WbqT&O&$wxMH#)NQ?>)6-1IK=}#Ku-GG&phXX52Sm%CkFcRk>3eAW!d$I0~@Y* zc%AL?KRum=bfu>`#eO==|LllIc^7|UGhc-dy2~>AW<5Up{MwVhzKQ?DyE+-!S#d99 zKYn$xbAC_%e9iNuv*E572HA4oyLOnI+Q#(Lqw(~ZcY&#A^=R|0CyTZ`+~@!Dpu0hG z8YjQ9V)=FE(R&zl-eKm*8%r^_^y`^oIex=!CwQ|F3hm{NO296c0KJ?YGOR9Y(NGUTQb* zCCUfI7Pj&E4C*(+$tm8T(ajL-t5dK2d#i;4kVQqS*Ju zCz+Bl9QXo#JTJP_+{^zx{}&5jXFe?P=^X67Xz$L!q{RjDnv=gL|1Dh_N9US3zdAZg zvN;#U0?+==0pI51_nrm#fpwm_!-4LK{xFz(rr(rXoeY!CI=`4$;WyjG7;E&SblXev zOug~aHl~oB4Z}e!DF4xS{_|V~pJD+YC?DhlQ}lA;XS+H1!A_0O zGlq9qs29WN@7}}@=r8BdySP{EXY*_=UcfKecRKem*4*emKUq;@FVW`Eueti{JBu;C zMsE7Bna_ymGIgDHo^`$;Mwnl`?96BLx!=?)45D-FUF+G_I`z}~xzCho#=HDn%l@E|t?xM$v{a4&$WAQzm zciNeE4q)c{2Az9xuRW3(y;aC*%=v9j^?gi#W2k**yL$J6$v0k6Yx%1}_H;+(|9d_F z598+X0T{p!Zt;Zg^gsCT?Q9YyZ}pv$TVIs?doiYO@=_I@g|e8?m#{R;?LFo8LG(?cR8Lpy@pOtgGmc-@Ic?ThQNkiJV{Y-DfBH!Hfkn_8I3R`Fr-JC*FIx z)xXdCVzli|N3xQ$n8$A7I2*I&Jm0tKI|iPEIzyfN{QjiN?-UMXA}2jje$IyZIlI&C zmfrRA2c_6&{k#Lf`JUdt-TK?FLN@l#57@o$2hxWgx6XR{qcD{JJo`BFin~;2-M=piWEk8K<#_S7|+4rIA z@NiZYzTkOZ%!9=vxj#(k%MV~s9;82v#nSi1;6v+s;y2F%S!XN|(;kTha4^r=fkClk zy$iaqg~PpAc#`W8`*()!(axVePV@Ae6Amz-i#+ao1MJDRFX7;`asESpYpuge;ahy| zr02WzoiI7|y$ers@koERk^_o|^l-=BzXLw0MpU?d@pWgf)2HgSdoBZt^B|}(D*&2UWikCIf zxgP(D{;(96$tPE_Z|Bu_XI}F2bVua~xe^Ajl>fBtmHzD?Chc9@xO#N<>kF&s)K5MB z=^u?>`=RyOqkiA_Aa}k%e&3Indfuz!<-9lxr#nD0PWjVo*X4cM*%YnJc!sBU0Xv-- z(48Nk>;CtS=U{#=h);e%=c#wHrY9V#pJ?;bYp2%CIq|5kHkur0<6)rB9k6pCjvKpY z_kD~%O+SDG9+fFe_4Lm#>)&bPQwM$8``p=XJQ>i&!(htL8O{&P-}SuL7CXcO_|15j z9QJ&)@L@&XoOJJ>W6iZkb$4)e^t8ABFd?VBz<-zg*LhgagqL3T^lq%2*d1Wc2lgj# zwC4lu&IeN-C;sGLA|7|3gEdh1z;&vyqfzdHb4-37vQ z`k?2d#`T+1ne%47XDWTS>diMki~jbbqc$H`_^SI2nX}`gbba=7VLlI=^k~~ zjGR&8sf4Z`(ch=$*+4=dS&wLY~?g0D%AN;~IKRD^acbpev<>IJ5_|%TZ z=ZM`kKVI41I(7ThXHLFGXMW2M__}u??~?n&!9I9-4?uqfzR7!w{(pKM?0?er7Qa)! zJro$s{qjk=!yq3pC%xW<@&nHZ{2x!gC6?p^_EVp2@=lpf^6LwOId|6gb@#^hxy}RM zE#C73bMAfia|;*yb_bY#kiSLopY2d1U2S2{u83@m5ljLPPzD$l= zdfw{~gYE$EB%8gaeCCk@Ri=Mx&$%zvciwaUI=3!be>^6&S7*|9_C5R1eSH>w zonw34%Kh|qM)0uCx$g|Iz2doAkso1#dS8gIGpCQQDZZPjz`W8}wC`_PH`f~1Zd_aJ zX)Zbd)>*$WhPszlNkLtY7TRwQ5De}M;@9Yi-b$jp$l&_GD&ud#(feHCf zK2RT;F4lQ(f!3G4&9A>b$T9u3v;IE!pRjO_?3aJRVV(hc=5NX2ET&78ZzyDD!}_D? z7WKPT)y=8s3**My7bTA~z*gkst8_@8_o3`*f4uX9#rryQQTWVw;2fO%01t)iQ}@n_ z{;7}p>@%-Ezw_Ey)EIm4gU+mT`%=t%2^Z&xy!7mhsoMwTYp65WxsVH{E@YhFS=X+Z zmu~reYnx-dvGC#x^`Y^wmLITJaqFY{0l&sKKcG8bE+&yho!#?MxWf%q+*cHHy1U@p z_@s@`zFBYF`V$Z1?C*NQ~%}})31$J zMW4EUbK+IIJL2qb%o!moA5idmBp!NRf+@VL<4aNXS@JPBuyx;+Xny0Z(VnIAgjV{y zPHp^9{9322{yhJx<1gMhFCW#{#RC|?F%0;SJ$9O2Qxc1VxI~2RFn0o1F|MZ_arKdAtKFr89=Tx6^SD*Bj?vvj>f40?~ zQ+E#j{*sO_jq@e^Cidxq>Q8@dbLDzm$P&A#f!rvCL$YCpM(KfX`S+x3?N!+;+o`z=Zq7}!62qQ+WR zU+oiZ{?xC&d+W`C6?vUQIc?YL(Y9x1>%}-WznD5(H`~_E z^?1q!?Vq1G2kh`j?hg-h#ZT+@A{OY&zNnb5uX}xMed@Dx4~C`wo+nX0t1mj&O*!^{ zZE}1FUk?NN)0LdbYM~Ej;m^c_q&g>cnY%+1PPFu;}vw!V5 zMmKBR@53ZI-^c002gT<@`$5kG=}%{JX@^BPq;uy(e`U^}dgj0N;el_uT36j1MIXNE z6N~m@xA*znki)IIP@+ops`D)Q|FD@5Gjqmln?-sAwzht_2 z+5bbtMEdh7cL{pKc-L3Ees%VT2f4IoS@)7BU8jCicm2(qy2TI84n1p_pD!iD`@}o8ed&>{QTypv-}@Vzw0Z8< z;z+c$<|?z@zKykC>rXuOeH2}9t=(nNPM+k9Hh0p-qOG5E(r3~+-`vI~e&OM+R=>Ho zba~(YDeJ5!W0Z`IS2vdIr+Ljs=Xmw#oOi0vdGD*|t#!^8jKkae744|{ENs!3HO;LL ztskAGxzXlXGx-{C-Od-@#&7BKuKn~+4t!rK``jtt)FJs%bDDSJZ_Zq6PV3Ox>P!C* z@GkgWaeAHqioh!ZuL!&%@QT1I0T{*e0Pg?G9{ z{l@hEyVS<|?P+wjr_So}MCVxiPkr%gPSo6reewKaU|^43XMOg3N#Ep~GN+HRy{<2e z8lP*YUo;o3@RJXXK{~d_lt*9fozAhn9)9 zG**AQX%`nJH4f)}pZFM8pZcHn(}%~0`rH4BBffM085`4Yr*za;KOU7`{`k#3_BoHV z|eao(#2%+dG~5v}W$3-hT12@A{qA>+k!b^+m0jwtJU4 zo3*dsPf+Z0s@E5_@0_pgoYs$T=N4@YwXS*bi?%=gCja!u_e0sc^M2ZAm#21g*H@c= zptEj%ebpz8ADZsw&pGwiCw{z(o$t+^vL%bYX)o>UIb~~3de8NHeXditraAGcZLe9( zpX(dDr`NlT@h7or$GLry4^75Nlg)hn$=iJGcriWa@re8^b9KllOOdm)d$Nvo$5yU~{qN6krx*6Z6#V>@kqd&H~t z=9BqD`9bGk+O0jKyNt6v>-+rL_h{?sR}M5^3E$R-4Zpp2wohZ}8PD)sJTL$1|6f`E zcfs}h1AecdF*5SO{$B&M(pY*#;W_u%>-gz2?=-h@{656F_d5^HPJ1SgeH6d3K&R^c z?t*!3A(HwNGzo_x*w`el#blTgPHv66I`YwIbrn3A=cNgSC6TKK<#I{dZsJx3HV{Auy2p@!9vX$J*x!lj`(r49(8r@T~I_2Ij9h z7lmade#Rz0b+U9Wqq}@-pUV&I`z|&=&9z6qFl9-Xozf}$=POhHbl%6bvvc~-{fyU6 z-{|bGj*0~z_4lBx_y4Nx7%X`&UDF3u{O)UZGpFBj(bt^0wm!7qc(2dAHTSY(Yig(G z#H>Elc_8!q#Q&2YbpM%qkVSjx)){@0ISiVAl5?(W-o8%%T+8PAvi+o;hj_JC|3`fn zA|K$>9?`kite^CljZ8`+qIe^_$mtwBOc5$!G6!fd2#eea}5VnYQNR zQ;uC9^5`Rjxl^Y(cdwhLFWPwR_%x?B8V0B~49H0TeBq;SHT1C?DkK z-u-TGb+pp_c+B?fi$9E#jjSIc7VrzYS718Nce*4`Z9XX;IS=G2rW@DZb=lkTnSAM1 zF>xc^{G3# zlCOM7_ebJD_r?4jUwg)nE!ENXslAUGzg4Uu_dZ@bS-jjpe?oy~S`_(5d=IJ9_YohuaudlW7+$lbl>|Wd4uwirZEAR6ROdkFMLuL8^ zoymDDSDxWx3fxxx*4)t_mXq$fPps2944P|>F>M%>yWZyxz;E&c|Bq()eu3WUJ9OD~ zPVT8&eaXGk^xOMem)^~r?c~%~{^JMadL+)xIo>b!EWi)=7ryo&3oIt(H~N zx!SYn$1iFu{%EB&wNd&{-Lt(uvA}aUx#2*M_j&#kL&|%_0Ym&~!Cdy&M^>- zT|WCU-&!SGvy1qdtmY)sq~swpJ(~M_zx?;DwtjQbO6?O33sk{-VleB*=n4b&he7Aw z82;1F_v(A@=fC_3g+ct%5AWocFX50bf|{OXlc3 zz313`?#G+%aK)QXq)+nJM(f-0Ne{F+(Wyte%=y)g%|b6_u3x%dauyGqdv<$Q48#I^ zwFiD;2`oBS_HFNUL96G(6Cb*0Ppq0h*Y0)e?6p%eCIeZuy?1bCJwv+#%-H|v^T7TN z5Rdeq=OEd`V#=q!m$1;k*W(_yLZ=be|WJqs;@J<(|m8I zY+D~6k_WZzKWS$GZT?Q%Q-AfH+K=Az4gg288++sqU|#yeikq64rT%P- zI%9aFr46=k5}}x#=geU zdpOXayf7gDeg}X-Hs7iHk?}CV!@DJZ69(zO(`1_cWSQ+Se1x`c@>P##{n7ec=e|aM z`A^&y`<#6~uYcFQws-&o^Wb1jabI7uw-3s1rtPZl_L^&EJ)S5%+}n#&{E+NXpC_}2 zadmbv79}$t%EUnYTNqqA(C^+mKr;9Tz{`p=V`C(;EHa}7No5$ue7T_1}WVl7=^Nu>3*jK?ns(!DSXKnm$ z?MJT0k`Z4rvwwGhbi((fdwu@)uDNhy|8gI`?P1SpTYQtXI{G1seeBoX(TVNc$6Re^ zUM%!kfV0E4igmaCk8Eq{U7@?;d|GGksr$sBedl;K?!4lwFWKQuR&53LY-e8mD4y}x zt}j~L2^;I#PAo+2Nd~kypx$1^O%z7)Y2OpI_tZbRlF1r;(#`(LH+nqdz^|W3-if7!(Wa*BL^!v&WR1>=XNN zDF>umYj!O5{+FwTbSgw6u2#E?@gn0w87zB+S0Ov#BV z_(#>1&O)^Q)IfA2Qm z+r_=vzuUPz>8^was%^Zn_>e;%nTv<~fKPN5PB}pzzI0dIo%n!t?Ul~2pP7W~!-triIUc$hBOYduLYv8f# ztWAgMyX5Dy&Y5?Luv6D(zVV5{UJsL7bk0v6G+&r~?FR??7yr~@Bo^lTlgfQCf`Po} z9hfyRC4YS9UiHsD`&y&eufmq_MD@A*sz=@Vnq%KNH-6zT_dC_erC5g#eZ;pgn0n8; z=OKOohvGCm@Yr>2k9Vc%fF}Dr9_c`KMILoVl=^1O=uE}mdiv0xUt2?;Q%=xlOrgJg zU@dzkBbn{N_vT*qvse0AQ=hYlA3Km=9j@kBv(BD4eD!rVK%FDw`Bc15lwA6qA@$^? z3!V9Ww!}NT>!T-Z%-wa3SNta}*4RruIolI<*$NfA@+*7lqhC1Uy_aV_p7h$sYd4Q> z*?Qr5>3*^`{TC(|#$<9|=!~Qn-Y|`-v-^(!DPLQYOcS3l3a>dQUD!~GZ*g(%TkMO* z2VeLs@UwS83`_~Sq^b^b0nY?mUXVWumajoZCZT%Jd6?6E6y7iswxsSd1 z%an~=)9?8d+voFiv`0R_Q{(o_H?>daApOy76Yia3I;kh$TvI)N*KS^X=p1%v_^CTT zf98jNcIAI}0Bw2}qwE`2sD9_nob0^oUVFuxYo0i;$AbKitjRlN*Y^#7_^aN0>eK&X zea7xyEtjBw;OoC)ofrD0e>A?eU!v_#Pxh(3(}^XU!hrp)Ay+z2D*u}UE3v>j_=P8) z`###nlbc-0W-plX^;y{MEB?gaee<>7^~pEh=O}E7cDL&;z~*GK9>4f^=IuRYO2+gz zUOdbPw5Q&)Uj8p0qGYgdyzMvnr!T)HtNBWC9}jhu40K6uxTVw7&$vB03)Z`j!RgQc z=+8eFZ8#d2SCi9vyu*fE_U8vnz6*m>P6#8^8Nk=t@SK5l={e){!ITc>L_-znMX zZY^x_oA$Ra+Z9*%zCH!M+3d8BvC2uN)OB&&gQM2@gDGp2&}q!(Pdj-IJLu@U;h9kb}ObfBD+X|GN*g zPdL-fUT^pN_*>gwag9C2H+wqg;+Qk6E|00tK5fOlp?TJxit+YMj_{dSkO_t}_bs2i z6Zc>cX1C74X|H^rZcFc{oSdxrMK-%fKd;-z*Lx6{;RB2A0M1T%LS4RCIm4Xm-3hzJ z2eqCLbnfYS@&SGHcMf`Q1hZRyK#yHFxO?{ZxvD(k%*p?X&sVb1jzN5)JMY<_ZOK}k zN#A?|HBTWwo#r`sB>#)eFtZ2#lXrFfyDs*tkdY0QWy32^{q?`|Z{K|TCqMh<`+xk` z-+c2={I56P_z(ZxYJbPi{f{?)>NB5v6P4rSwU7Pr?|WX4pHe)ucjrEtqUldYYn<(` z{={E-i`kuX02}jR*5@Yb6N793A4M$VGsSoQ`K^EZpRadSXgM2I%*78M>&0DbyxUU3 z9%kZ+F?hfVzY1R8^OL{$=I{OVzhC3!6ZmHvc&O{cPrOIzc*+SY7GC=&GZa=*3f658PfvG?I@S0~p zOjNRewusu#n7`L^KBC6$0i$rT7k|@lFVueV$IH7lblw5*pJy*w*h-zebjK^3b`Q1> zdoNtB{mH_H_6{?Ay6Ae5Te&pzUOdp6Z{j-ZTYz;3ljz7#iZ@irS zd^fn}H9yL}{A1?-a$f7h1%LC&iGTh;rfig~`40Wf=MQYO>s~v*hPShTKiuKkIc$%& zzVZ3{3jO$VxmX=GVz#;De7okYjp7rXer29A@l;pfWH0-Omtvi|y%aK=m+kP;M}HW; zgn_m6=L0Y>KVIRA(kI!ofp-20v+e*r|H~`)-T_!YahUb?Bny4Q8_x7fzhtq$qTQO# z0Usb!cAs?5|DC^SyLh8vU=MuRr?T#AmwkH1FSke8PFIHq zA;*+!)?ttjz=?hDor6>U=Lcb6Ke#xD`4s+qN1x(s^B=jq{4Ix9Nj3)a-L_ds&1b7ay_5HXBK1l*iYTvApbFsJkvJ$KHq^sehmw9 z@4D9x1N$t@E^tG<@6b9^S90um3^G@>_ehD{iyvRhpu+{FFUVl2}mz@dm)%kMwR?m;8 z&Qo{%8&i)T{^aOBNM|t~-uaocN8iqYHLasZu}%Hf^Z)$(9|kZJ8{aYFQo1gsb|6WvEzw#IU+OMwMZ~ZD4FXQU? zI}7$z$Uv6loHQSx3!A>=1MG#Td13JO+`Wyp#`u%Ie2zSwQJ=vZ({_&j;3xk6vQy9J zs9ZnWv%dWKS`RB{iQV|xKmG2Hul(N~AnHEw-+tk{);+)-;7|U*KVJCZL$2Kq*q%+D zlhZRHy^Yh2{`6qiFopA}@YVbkE$>&K`JcV)!yd4-53KC#jPNCPv(}xtweuYS8H_8{ zldGJdo&NN-XXn5k&Odvym;UTZKI`&veCV&e;^f5#w)u(m+C8_?18!`9XS! zPl~o8_eINtY_HDd&UWp_*V>CGeq^1+Ug23Tgb}^S$X0YuR(;y!414-%pY+!U1LORW zPuLR%cy`9{Bp2D!Rh>-av6d{x(yttaxAS3K3ESyg^`rKIg>w}a>hTs=?a>+1Z(ipx zT@& z=lsWWCH)mLn-iAF(^|IV2V|w=>A8;&l>hN_ZeXSk13cw@^%)oW2+YZseNONBo%NaX z%lmSF<;Onvf8Qv^WcYrrud_aK>8-;=TDJQJ_cKI&Z#lqz?Pkh4o7Uj3MN;%v(|FM7P5-zaQ z$KOykv_{T%2T;^^{$$ZNsk-$j-T45!(Fvw-p(p$6rz2TlW302}{NYi-$6SSvSj*1& z0=bRZM`1^N#U{M#cV?%r;Dfhf@9J|ue6u5YrfhW8M$N&4e)g~@Oi#9^KYvN?>F;>O z56^JK+j*MBnEi?|VUT_4P8P);72hxM&Vj!gGar?I$c@j!@7gbU(mR@M_*9?OkZ0;d zfA*s9>0driPO|X<`r%_=dv&j16a3667o+^3e8lc-jym^pRnI=o<$NYGu9(|8vh%6( z8UFUeA132%Ux9}L2b4Yc_sUU)iVc+xXj(~n%<0eIg} zCi1TMGcX`89lGC4pLZ|dSNfFBfPON~djKBrn)s4q&S`xZ@F6AaZecL>4>P=$KRv~Q z{7?>6#AjyeW2JkQKN#jR{e2t!e?l1oAdM<`99N5*I_D()+ zh5YnNAHGAT69(ip7f(LG)^x!?KOk3yt@x=mDErIPa#zobpY?5s7v+Huq6}ne%KXlpfDGsIUq~z<&!!rKidOGuBLH2I`9#i1Icw9W=m0ZTi#h#1T zB`2MVxhTG0kn^v5r8C6Gqvn`v9<1e)7~s`8laI-{SBpG=H>(HihYz7_b%J!1281h$q&dF27Ca2nC*Mm zOU%OCd^oYWcmDDYJD02FZ_o1j<@?@`qxkQIP0e!`kPoeOcfiNHfOvZkKqvbvWKqa9 zzY`RO{5lNGJL#_v1~4jikWW2a@rR9^C3mZn7X~QXkeh$zcizdHrx(hnYfGvUR2=PkfeqPqEZmSmH$&Yn>NoQ@=iSYf%26U!862r;d;P@ZXEI z)}Y4HFYIdzN$JJla$5wP!vYC3mgs1uZ{iMIX?xOZ1C%c(Hd4`Am*jS#i2b*V4 zXP;f2;p*CAR&h(aqEEehfi>1D;vn8)zkJp{X#U1lWX#vuL7l9qdCt2+=6e|M0fmo} z!#;2cQ|G|?DRXttq&@S|h3xV+3QP7=4~z7JTctjEWX-+wUOb-g)dz>}7S`z_>%#w< z-<`bsf_-5?CvzV413qI-xo`Q?)4dxG+Rlx2)o6Zy)p5nf9(DQ$>pqPfw+{YQf7cYJScea(c@@Kia+%K1# zQ_f$$b*;r|K4djUr!XKpeNX?`ie7xB z*rASBJoU?2Klrcy%X5*-YdZ_D<3r{u@_F|F7+F7`{jHU==}R|jtmi-MQhxUizNheMnxgk25FkI3L#H+uF%fpVGeeOdc{?kLJ7C6h7=pfA(MJ<7$%w-h3&{(lx$h zwpQWKiZyt{OWT+;DxT?6=L>vKU0%C>HcAq|do5-$z@gZ9PB9Z`uo`hkPIhsw-sT>(e*%mH%NGM)%@gJ`x6km_pa|4IBMGv}+9`^)={^I0*>dd2yj_W*T! zDRi(uJJ1(S=}X3B!ehpPc*keOx9e=MEBv*|b;3X{u`jHg*>w&s8H!6`AihlhCs(%5 z*Z15{7ll36xw-7X7JD(q7rO`W19yS$0P8!2*WF^BtBbmGkR{&ukuN(H3tOcK;>oW^}-(A4^WN{|wD+iDZ*6};#ef-=Z@R~BrdUAH2V1Osx;A#*1cjlcj zx*Fq0Y@ELM#!o*U;fJR+c=3~bT%Wdi)tzB&{p#%CO!E=`%SPm^*k9cmB_E_y_$OD? znrv;py{#o5xp!M@iv`Bb<1cHkYi_*Ql8w^axVA!e`Pg3On6DJ;tn@GsX0uG}T9@wdvDUf6-yNcR1T4afy%t7S zpR-I(xL5$p`54QvSDxGiz@?@fQ2H{>2t};sYzZ#f^Nt z=W_YK=YD+5FV`=bF6>Y`=tt|C|McANo+^)vW6lA2V9uAy|6-dm^Sm_`n5QRM<$rnqbHDn%&y;WJ zci-|i5`XlY{^hb~`Jc~`nG7@klN%0SkP|N3?l@TM4Do+4oF06D?)g}Lhwi24a`{=F z_BjQg*KUko!q6V@p+DW}Y;UsSYt1b9`OKsD0PQVCDYeO2-0qw$-@E*%b3iA$+l$Wn zhzEJdA;^_ioN(v^+O!z($9H>g53^X)~}lMT|hb8jyF z@^}2%V7Ik)`QJY5Z7(*!lT2_kN54WJe8Wo{?_}$J)G7b7vGd{gsyZv`&$<8U{Q%zj z@t_lX+e5M6Ug#?SlatKJO(*_EZWx^O*Jr)CY(cjbb1uE{DgVJEe2dNIS;LOyF0^>q z-!OFtFi+i_N^!HCZ%*;PK0fn&2e|f>`|N9fGUn^~Msm{&R`8_Xy|`yCyPFFG^E(I5 z72UPTMnAES?CR_%w<~1U7ar-bosBc{{2yG7?hn=P#; zi?!IGpkUc-XUZurRuK z>X#c}-{MBw)o;vEOQRTGSB|SH1@I%<}?4#=YKM{);h&AFdv2=UFD;h z|9|T@Keg_fe9D+J7l>fzFdw0jk4`4!%eA`*4YK$hkMS)%RQp+Jai|(D>+cQvXOf7>a!mo#G6e} zdeWVbu%~;OG4u3gYkcUXuesL4gr8WW4kv5T?2j7P*BW!{XA9$OlbmGDX6n|F&m1-< zxAEkfXGfp0-PZQRXScPsc;w8Gg-_ed9`=R-{>}tjB@3A=WHKhEt@rfTKKv6e{?4YI z6?tO!dA8Tr9l%_LxlKIyNIz6u{OA71vxtN09C zc<9Ry#6GrlPUIm)4l9?HALT-GP<{2I&aW}&-kCu6x_!v>dcW99x!R`zGN zeA`_>{_2_B-mOW-Nvlu2s<#dg`u912cMJS)?R)Jfcf!j&@>+*4+vNjnPp_AJfQ_t& zksJyG`7j^A501w8iM_?J@;}^+lb7F#C;Rh1%=S2lk3Q=f!^b_+`=xTf`v9L3W7$i* z6hrt__X0d%1CRWGZ)=Bvx_G(A1Nw?H{9(|U8zcISm({HFM=FB^R^TBTB;7K?8pmd@;Tld`4`G8gS&KFVr z)|v-D&oAPWdVQ!qxG8*qZ>Cdo#YnQ4+xvg|&|9hAe)fhNzr(}$>HOFJAJmIf{MBV4gyL#Xk7UnQ&u6e(QX!cV18VfnVp_otb%Vx(gb^ z4=)tIN;;84AIg@CUbZ2#LKe1guSDrc-_t+q74z_+Ck*i+!^BxzKfAz6PAk_rhjO~J zrT|!|HHd%n?*W{hK5HP8{j7thGS2}F`1ie7z&6&i zKMeNw-}u3?XPWZYjAO-p>&yS_NX%PS6J*`#$IYYi`ffs64x#MXvMtrN8GNJr_22F3sWB z^0c|@Gk}Y-GdY}Pc#wnsa)SNfDraOPvRi{!Jn$^Xqxg46XpVMzhXI|~5=Ju)WNUrx z%WtgjT;-qo%~SBQmJTr2hh}?JpK$IpniOJhXqhkuMqb zk&7(m!u6J|#Q=EVZ;tt7Za)|(;)Q#$Ib=w7vB??*AM<)&(qw;w=pEDjr4og#Kc+`~wGZ$g_{LS3H#C z#BlcNE?~TR)I5G+|NKP$7YDu|$6Ypc#>^q(^iguvCSSf2PI$A;Demiop%Mn_FoW;a>jlyzLZD_3;^UI2XMKaE`?5`7VH6tg}Dc@+Urnk_V6Y z;u-&)8e=cT8U^oSLHavKCqGzce8d9lI#aMrMi?6NJf07uY%4djH$B$8r`&ICWtV$z z&v`IO2RxmLTb}{+d4u`Z;o}^TgFX2Hdd~-7z_;=P)O>vK>shkr|6&#@jb(&+0NO=e)pC8ukRmz{F|@6zTrQt;x6z5fA)tLR%|K{%g^FC-z0;xMK{>6 z1zEM1-k06T2dnH9?(#l93LBLB<$UGe{H34y0!j|^!hj9wmJiU$86Z=(Zcn~W*Xf7q z`pu!gHR6vttWfx8d$_49=J8v_Tm=qfu@2wPD}A-2){-5Kx9``%s5=1JIzy*3PuA02 zkN#o-Ea>%o-@DrMFMe5D%t~&u?}c1q9UIXBZ?;v)i@#!Bx!hgQIRAGqu$R5p_dKt< zdCj#}KA${bLO*ky`*5U_e*De3cjlYxjzK?j`2}7u$PcRPXCIi!Q|u})dG3|d%5!3( z^XLvxe|H1z>S76A&H|j|Kk-8x#a~>L*Z6>3m(P$VyH6R(r%eyK!v_C*7{J{e^Vx@w z!k}|tAADgdo~bMRy!`Ij-n#(LW1ffTPhN!{=D`Dnm3d;EHQL6^YfbB5L7u(~AU=yx z@bDZ055*jIAy?;zZSz_BY4iKjzdaV1%a38O;~d_zzxt$|q5TdZezS{yh411?H~RA1 zrSqkWemqa5vE)I?n|;ciY|6HH%5f+Co$<~>J}_m#8$W)epMB)~az8sNY?!~L*Dhxm zO}S5fY?2OqZT}3QJNNQ6GAWmg))hy!$rA?m&HD}HJ7 zL;fa4@n?1C+umY?SO+8PDy{9FP%hW+e2A;$(C;3pkW;)=7q^@R`;dkIu>ZQNTrom@ z;do&qev*lPr<|bAUQ>T(jqdoV&)hHn%lq8{_=GzGyz*Cj!wd#+3s3v}@K62srHAux zPxI(w9$C%N$Cmh!LFv7MyzjRW`+daj0qb*zOBcF34|w2JEF^<7KsNm_DNl6f*SZm7 z^^?(Deg^aE`t@ahZS{Os%oFpw16T(S6yMIPz6u}m4u~JY0#%Ho{Dth+c8;d4t;gRS zx}DCv*aHjlns09Q$=~7aJtqHyU;9V-UG_4r@FRNRM|S($16B0Twl&$={^W`mx$x+G z*h|rm7k?4cCXRUF4?h@apY+#fKl0#1CvAQK%W{4+A2jAHu(9H7m-kWr%;t)*;*>E( z?nlKfb@RkccI8K{b)NW;JyvYH+GyvCjgoEp0GrVxonY}U7?>Ld_!gU;34Bon4&4Fh zDYm5}o#7xJ^?Z+t;i$9VI|O3ZTxSg|l=QX_o#lJBTDjlnepj0vVB(Inp4~3_%;yjK z*;L^x=HBuHdBV84@CxVu$KL(DYTs>j9sdtHvXBA^+bSstmR1l6mD&!e5VwUL*e@&1 zT@YwWK}d$X=paN*#X~)?P$bPAK~zLXyF6-V5JVkx5P?s1Bqnh;U-Mq?<=E5jb*;7T z``J{m9+-^zbNu*>F~^wKwbs2Jc1{e+Yvx)z*Nx{KeZ*+r1Gr0CzZdAfkWXjW(*y5h zopk=qfGNkB-W+7|VHmgv`uFNT+1*)t`5GTG@Y3voKmYMt_1}BWn197YF;wh?N&2$2 zH5Bi;r+sjtOS!ba4>;pY4iZ!L*^d|gVul|4$*)i4g7Q%NVSy)H{VWteyyYLYTn$&J zHDfxGL6-aAvp(JQdoNV?C&f>G!vmGu@Uq9x0?d~;>7@Dmr+FW^LmJuc0o#ks;vm1; z!@jHfFYk&yveKdZ?rzCPe&0~eQv0L&y#??l-?<$_OILSVyys*7w%&IkY?iC&NREBw zcJt}n9Z~<)eD&VnM40b@`34||&zz$dn^3al0dmNUzgQ7>Fq1=PJhF*S_Oi$aU=Jm)^D};z>ogUruW8v%~c<*^XpaKoAGY{ z_SeD&X84s$eE%YE@S%Mg-J;cG^%hUKh%fkVj2BOOz}}i>yy=5HdOPDhpQHHuEF?bm zeOfeGsC8@hh9L@Lyr1*=-(I>@D`AjN&e}RLVHZEDQ~V*u%SouY){Mo#dFp@J$x}=I5AR z>OsHLP~5VaJ-);6`5m<n(mW__siCeexqe$ zc9CbD%;G`)_tr>mF-Kpv+Up$Obr0kM7@*c~#QGuU_3(`)jlQyN56nLvkW}@S;P%6W}{yd*}n7ay+?o z>)zQ%Zn zUf$t{u%RCe*q;66F1`?#nwlam`BmdbekRjexfcHTv(ucnDmt4rI<~hpeDK3ptNurm z>AO_^O=lRe0pBn%zOvsO{lqxA{9?@4`0#s;e)Y)`SM=t4b&NmCNotv~c{PmA=KB3N zeNF90t^54KkM^sje6H^fx<_*P#-Te5y-6M_Ti}zXk_;swwSvrnrT@n4`11V2`^{ zzB_RcfA(cROsoHRc$fRWUmmOW&+h>IPC&l{z^|L%qWsu*_I@v*IH1q2|BJf6#$-Fk zcm15-ehp7^YP%YL)_;E|(cee%od7-D6ScH;*qLX=2%YP5xA8jrGr_MuIR#GM0OHJkwR?{jMq-?u_E*ngXAk|I>HB_n_U%1ge;ax2=^nA0 zZm4y3!GKNn7~jIceTG4~;8$gQW*%T`_h5f+U-chfGGT8$e4_b8Y}w}y^|OH90OmAz z_0}68-o<77qt@|Hmt8*>Ztl{K?bRpa3Ip@}4r}|%1?i5rdtr~3U&XU`03T~=bn!-h zy77m;xp;_ynz^m-TKD}xd$Ym4kW0x>`^oJ7xKH%mZJnnleXIX!r}%m*7leU*Fc1%T zcJJWI4tcnDY@f%wyKpXF!>G?m*6p3&`x~2=H~+#v{K1{mT7t%}oW(=??=y>+Gh#xcL*M^<1E~2v_tVLE z{`|ifU_W2rO-FYiTwrFM4)&8<-XpJADwl`}*ozZ=xuv%spW9asH(&m-mwbEp%6ahw zTMZUsSsoPIv)-2&Y>_Me~syMtkXrxpfqk(IHuVP;g(_n|foV{A_ zA2@{vf5T~y?OPb_{fpwEg$;e1V@DXcclYXlxj;Pb{IhtAgX~7hkk9(QUY-%Fa+G=B z1K87fFM`R?657j$7 z?GZ<_{_pp|`Yi11u8R+6$)vaQ&hqP1xgZSevmbWO=TnsLtkGL7C%-yQe)kyFHKs<+<{tbLB#@1~>fVMOeEVe&4pw(R34Q=`0R5mMfl}qZ7NXYJxd_ zD`xbwA3rhf-Rdr?`|h^;UhP+x%9Zie}5wZ?K^?q(Akea-ZKyEcwFzcElKH0Ai z13JJRZ#MGlRn9YKjsAQIFJt!NQw&6tGw}#>7?P>Ju}{t8V{<;knwKlB>09e9AaB5D z$IEf( zzL4E=x6cgvVy$-oTYa`S2P@Q@C_G@`_n@40AHvlcxsLo92gdYgGreHIKld=e$DVQo z9q_=nx-O<`@{tW$(M3Ym= zh2_@$L4W%-ek8NEhV#a9fwRfuH?4axKmX%UoZWO3 zv*{{7YxJx3?(vG}ayz^6vPWK}VqyhYhf4%_4&`dXX0*naiCe^00{ z{!x1P+~4PaZw|7>4_?kr`?K9T+u6cbas->%+MO@&b=S<7OY9SG&Q$l|=3dKv)qk{D z5EtSJrAPIj4s_(N;)^V;m_}hGZ)$$`Lo7H)KRl+d>DQf?`(bOWiQz2jW0k7m9Ypa+@w#S?#R$G&qb-isBwoVvj zfH;83uK5cC^_;JaVFnA$m>qKCW8Pdm#e$egSNhSXyM$L5*mo}u;MF}q-Dmv7m?qZU z7d5`xFaLO_n(r=Ia}FjNJIIyq*jl3(Y~?F&2eQ@PNKBAAdKew*4y??9Y&WNL}_d1vU z=JE6yh&*!rzCmve^<9pnFL~h*2F|OYPsKp>A663s@q{OSFt8@JtNrxhS90J|z7n(K z?wY@1RlI6@ykcM77SG~ZO|SmXH-NqLLW^bVn*8BzbtmvP2L~~b&agL!2c6&`zRp~* zbNSlG2lnN!c&YEj7M|isGrw#9!{>7Kn9jRqFF8KHlP^}qyuRAN2It|q{l3=S-`)W9 zfxWp||J8n<@6Ee6-mZP$kngS0)%k7zvWXnFlg0Mt*;?H3uXE?U!Uz8R94_SvdiD;$ zt2?e=y?54qFy)jbPe^6(c^*7#QZtNrq{IkvJ>o4zIozS#w%)7Qr4?WMoH z`o#`C;u|$5zlj|>IH!-oPv1HW`JZ39E7g4Qsu}aYzB=tbRoC5NjV^e`8#Pal^vizK z9Ne6P9iA}euPgh_Z8?jtecMNie?BQ*i-jvXv2hND8b8xP?t=%tG-Gt{T{TbMBA2fE z@!$`+#F%f%p0ZB=&$YdO+1z(1^tgusykJX@9W!f8XEL(6SVPagF`L*euGM~bz*|6H z?VrE<$W~3>R|DLK`FS5k{v9!@e&X%Bg5FW&h&gd1hS1^y4)mr!o3rUD44lVPyrN`; zftYqzG@oU}bv3(rajFkX`{}@U@|)Zs9$*qS#^TjJZvdZT_)FhAfQ7UDyX_~Gd-ua5J* z?+?U*8mh+cJHGb7(O!JSh8pktquv{xF=yXy4|kWIeP=^9--}CrrN@>1=3rnQRxpUK z_zPS1yCdRP{qGHcKV8Y9FB{cct-3#{m{qqmxzPFQf4>XxH9zpJkMD(iNH=z%WcP;9 zj}JZ4ng8g_7BcBhN4fUILA=>#-9A`o`QP2D*2BYCtZQoWZV&fB-)DboeHV{U@#x;_ z^E18ltviP=AF|Ur8_f6JzqbIsbg_5Fe>$T0IqPnVSs1d7EVi466-{_wP~ zdnEqxg4do~cN~?=%6;uO=f3wgG|%7m!M8g`-*l!&x{@t6eE;bl*dPA(rK5Si#xq~D zRbDxLZCrkVb9dfZ^5~I_ur!wEG-oCy$C$s|J$FeiqX%D$Pqn_7Z9Lxsc#wey+sV+x zD!a|+A3DwE9G&Ujd3V%VHeK0o&R)LfJI!8kkWY#O{Lg;4N1Y)bk3PTBSAWvC_`aRf z7ejR5JNB|&Un4g=$!8<};m|s&S+~Xpe&<)XK81lj>=&Dp|Fk(-=CV26tg)Xh@{o8} z>*PXIu9vfY?nkxW1nPx5!e6ke&ci|dghSZEtA3OZdpk}H*pW^9F0FmH;=o?m!^>WF zWRrWMiSItI_dEN|ldr$)=)zups`l`0^`D*izm0*npELL@zP&HJ0pd+AetgPS{qTo@ zHvNR(o?ABYtDiZ*flc(g!eHyY*2BQw?g3q4QCz`_P5lmlnygj-_0@9u4j=o`#$rs} z?%jYogQvD-ul@Ssr_cW07RlPNw8mmhE`|$zyE8D@cWceTTOQ&A`>yOa=e`s(Y6X48 zA6~@*-NXpFJBO`z3tIiBGYr`{>;JCh>x?&m`YsO2hu%J79}nyD<$Nnt`|;H9=TCBb zL-dYdCwt}KbcPANXH5`OCk|p5KF-g2AeQhFb1+ti#b8ZsE-v-WSFgj44)(BxZTeys zKYHyPwZ{FdpFF;xi@m-RAYaWVzm^W=p(uI9z?S`R4`7F1wv($4Z~04Jd3D|=x|oN3 zHJfhY39fu0R#1Lz-=y}6jq(70TgRt6oW90lciX=7)8Ck_zBRgJXMRDgWykA@TM@}K-)KA=0^ zd}_{j+WWKN!k-V!*+p_9;`UW=d|6}e7T_7=RCgng)L0X`%c4t-$~B8JnOTZ$dBr`z4=sK z?0bX0#}^a!iIvV&`+b%^Wf*Hd7vQ~hT6m}D#2~+-_FdT@2G;FUi{%BpvmX}b#FX4p z?XCW2uk-Wse|7y2|J-+PUpT9k1D!7yy06uLI90R7u=`9l{`~1opa1FNoc-3t7%b?_ zXY3%;dH9N-6Nl=77_|=;TCwGhSAWHJ@oSDO>*WE|T(wtB(aSmdc%Rr~ozCuyTt+W% z;CRZL^l=V9zOb)0W!lpioiV^~VdG9@J1oM4tzlMPHP+~CpH{qWy%w%~(RX~-y%Efz z-Fs*3fq}fp7knDN`~~MIdG?ZV)}w4px2W^>;#sUX&#&1#sd>2AlP=D}t(YeZf8*YH z&S-oSCi?0U|JjeqWxltl{)^G-zkV@qUF`CoIAAw^?hyX4#Jjp@4;gghr|_U7{H*h< zd*{6Iw0rigv4sqK*+22d|E&9D&-j>n&|%xLc;Z#8MCsM?uE@mG8Jo-eN&U&-e% zvOew4PtN1ZCVcIE4hCUO|8$sk;-BqdZmb{O_ODpyTlkAB_n`Lx+Rp>5xf7@ua3{op z7!e=Nc@Md-bW<7vA2Oe)kXDOUtC!4=lJb+5A3PoO>cW^y)XPd zHT+>qm#x#%i;jKwF9zUGCY$*6UJUS`SSt>k6Bqcv0JTOZu`0&dfQnW6Tlc+)J$?7z z_xSFu__ikA%Yo6p2e2*)UvGEPsv(Cigg&f+Dm_IW2{;CS!ftecI)(DS31qUIp_HuPv7~`l{|5sy^~h|$?!g-pR?hX9Mqhj=j=1f zSJ~>ExP)zakT2;bm-&4K_e1kml`DGp_AW5ShwiYYH-4J=a2EsS#A&*P0ZKO)FgIgGJ`=}svNsbQvz?4|m=q?~!~x9M(>=I{0h{rL7dkP( zQ(mbytCjA7co&QM)nZh=uI;+|5D)m|v#^>po5=C=fXSCEbwB>7_4d%O^I;%v#1orf zpzqxDeSP{`XFK2N!vIhGCdT+$li#Z6>T$K%8=#*B@MoXv`CY&I-&>*jU)@(f?NdL0 z=7azISo^&J>?O<3Ldm8BUEH~J6syI6d3(AC_Ga@*VPjp)&=Ce&esd>^C$U*hlfUdI z$GY4zKmV)AHT%T9GwQwC-5X-}*P45v-t(F7iFaKe^*aZ^ddcKz8+Z#z0t{F%j-_zP)t7R~*0sUvbdSw#A0Ax<*%i3V$)-EPdQ5 zHe1)&O*e9~8?A4iJo3d3+?<;+f95@F?yUV}l8?v4AX`tG>`CnrLwK@@532F}?kynK zmp|DL4|hXOliS6H99SP7u%aJ4;7GqyA7k_6%X@6^9La% z55zcqjBC|?R4sQ#-VD=p4zoE9^J+bw_#4Ns_klNpdFy02OV4x_dt!|J+Xt(UUp7x# z{b#%S&wlMH7qDaB*Ts+T)M0m6U9Lv=7BH5J<{Ln+XkTvtbza>U7uA0;5KsGS=F~WH z#aOu`9P=05t=Z!qi0^y%0588T7UIr#d485RDLdiTIdxyX zuJ-$EudlY_lMnH>CZ@IC3-;mVZJ_3BzEjcsOr>{#JX}4%%b8+8tUSiRva#3~?|elE z_r;m+5u0IX4u;Mb7xs3hno<6SHNIkHHgc-}+n=NUCzouE-u&Qv@3~oL@H<{Ulw ztvGaEZphwA`7eL>7I9zbqQx7<+k4C%!OvN-w%@fYPov_GUGfLrowIlTt!njOPDeFo zy1(5!=jWS3+>&J;{$z^@I*}1B>CJxkgHG&cH$efjwR+OOE~#+K*Y6S1O}iKq5EUo(dn9n#5X^3(t6kZku4PT~Nr_wt@K7_nb{ zrArv}`5%9}xDUxf(__;5_S1(R{9KLaTlc_N-%-T16KA_nZs{u!@ub}#Udztnxdzxk0L`XBpud%R)Hx!-iKzxrQ2-=F{2 zn;@Ub59zD^_Z>iQ1a>&1RrAmK?+qaTYWQm6fbL?T`p>o*1MGm8bvkrr#=O3@@E7yO z_;kng@nW|a(60LC#0S6fsT@Ve?pb}Yi%0hn=JWp5kIoq7w{(RqzvkmfZZMqwp7!h0!CvtWC-#^3tMBZd7&NvHchubU9lxq))p>sR8F)5vAm>&8 z#Z|Ji1wMG!(kYvx-6i|*5c6z;C;PlPPTL#9(jNFb<7|4|l9ybx`<4#pm<{5C4`HI# zvz6V}@)gOALi_FI(?0uG|3CQj`kN{1v%hBU{0_jG zVu1a0feYK`6+uRHBVnMig#F%1v@P{@fRcVkvt-=WS98U#9!Y9 z;1!Q-iyvApb0_hmD_^j;*oN2Ux%k41U2>H;!Miw0Kf05<-^btk^ymNLJ>T-{^vTpS zeWP=YeQ#}i`#1Yx4;#&05DV4*`hIR^&AeJDkM29O?kYR*n|R&o!$1oI`m>|=6d&Kq zd)0p!hz0jvyifV`>9hZ=x9OB0(q)eM2~YV_ec&6m%C+>wn{4qzXIR*8UZX$X_p>AM z*S&Lo>Pa7C`s2YK7^C+vDDR8C6N6$nTaC#OgKBTJnqFt!pY`9m`{P`Cq9<1POb1Pa%T5~9@T%J8Pr$&yCcaCKYD2}nlZpGd1dGBJ8wX-hqpX5^I>?x1U`7l zOVxi=vnE!_k+a-=_}kCs@>tY*dGi)^t{j378SHU~#Hw>-qvcBTj<@PR z-qyv8GcXnd_=GdRTla5y)ck&i<2~0Kz}o;XIY~Vio0@tqj=G;Pt&zij_VwAnx57ui zef_@)9=`YgrceLi8_gR4oj(I82FlUd&#!c58@;N7`tYj$(@pF+H+is`Up4y5J9s)* zK10?1azEb{8~K;-@gNrlVM|`E*yU?`>1S`YT~TM9qh~SatXS5vchXt^-L>K*`;#;C zJ~_@+|JlRNKL4X^ew)XC?PnaAYQ++M`tlE+VjNGg9A^46w(X5iI->N}@{M?hAwNyK zXTSSSF1(zD;lv=noRmy+$rTrPkg0}=2iW*s53xs|{hj}+_i~(jt?hib&WfA;J;CbF z`#Wu9_Z-&`Pr4KXbSVbz)jk-Mx9oTR#2`81wRmVQN{95ARG(gK5*uPfOsct>9AjPI zo04offX>|y@h_&F?dJjX*4jgl{84`4i}L1E7})C`z=E#$(kpvW`GE}l>4~S>d)9t2 zdN%QGpEK->KfUuS-p28CruPM1!a8cd9BB`njWv7W%8p`Ee8OU_0r$_|@ShkY zHwuI5uroDp0lxMQ(7&qx)plN2{dXKJ49bVamsqnVM$1n=$CcyVZ}*oh_nKVTIq!@-E*5M2BHpa!BRY~{%vWf0 z_^BJ)H%k{XcHJM}|I0Vz(3NaBZ2v5~%;Sg0)jM$G^I)UBg4SInv2pS|MP`d zp7GuNi%vc1CKkzN-<7Y~Z=MasyK{UKuXsmc+gfh`@!LD6@Almz`!s%VKC0gxHK)&J z?@{^EU4R>&-LWtwOP+Iwok_2FnuD7f&MvsI?cSXy*B*Gemsj;4|Li#_nS29hze9nl z{TiRAhxjN)*r&N8-UejbFHY!e-+ogrUnKjqb&hABeqxm`#U-2Qa1R4(^tRWTD-7V8 zoY`;g9?kd8!K#=cvp0bG{1<<*h_CZ%FWcN*vEdCMR*czOJlK;@!a%OtaWL+E_dgm2 z{9-TJ^uPA74;t53|21*fU5lr?&>a)!n)9e!U|)OFC)!$+-uR0t zKHWC0K0UH|QuE@(UKo`7VGvJwxwlYqQTX#8c{_(JInIk=HNC#tK0p8a&fmYO>^lH! zz6}AOEu9swT|(Z*O>qC!Fbmx_fe0 zb$?R754i8e!jisz_fKUCHbo!3@7*fbFm=_Ko3)=IiX8)S5ifeTS(&oNCn@@lG!M&vtA6 z+-EEfwd#Mi6;pGp?@V{l8NO!stvA1UcH0Mo{GE<4Bx}lPY>q53gO7OF@w0r;IeWXC zSG2kK<3n%lyk9;8ln28q9MZ`=-RZ?Hb(Q`6k-twW7U<1>KU?5e@q$-+p|_fSaC6>S z^4(8$&Cj}f2b^yLZyR^kTUlSOOMmwRKa?)%5w6i`zrJ}qoS~EW)L`IloVGWHfj#Ya z{={I)>T_^4d9FRxXA2$qN8S=Q;pJ?$o_vZG^K>gd_zu>1cK*cRvHst|K#aI+_`-rt zavfe8y{5g!d@WYlz#jkBMT}PK(X;g)K>bV;&9?kXo^$wF_y07**M2guFmkr}^xgM) z*+oCLu@T?=KB@U~0Suhg$ctZo&o}U?pI?f-&bt%js_AOG8m~T8^U*&4+q3tr{my9H zhIOCa>EbfHrtH~=gGN7bFTe3q`Dxlc`!FCARGQExA1~{ZI?FD;ViURPAdk?&Jr=((;5+Bp#U@y|@6W0K;UAvqYb;mG zQ9iTxJDi0Rl~h;vvYp-m*+n3OMZ0Mef57f?*MCT6VH7I02A+Jcfe<9t`V_ue&T3+%c_#yd6_uJ~#45DK^E z@U0(h9To4*PwE_5u%zF4*JduFb3RHhu|Z!kf8}d&Z=M|cig#Fb=ZoX0`T9}VgcsU; zerWs@O@Dr-yL!LB>s{Zip0(fJD}LnDkzd3ao3_92@JrjM72h zUVLE5r?V9k*7U8BAup2aI|KMzH}9Q*9~;CgzNfq^+s%nrdy4^i0RN}*9vSX|I!PDj zCkCgysZSVO(eqs6Fk>U%W+$2LL2t#7^RSZpoM#`urx*OndES8h3Tt-Gd_Vj1b01&O zrF#%xI_ZlCed`+i`PF9?HQRRqYKf+P*N^slg1r?cPc|2C*5f6g_6C^xOuXtByYOW* z4A@UcI!wFk)6-rtI7k;5xLYWU)L60CcmL||Zma$}f9C32`ttQv^Y7WudA69t z3xED(6Fp`V>-N%>U%Cq$_qE?0XTw!ZIO_rX`7d5%rxzW>BpuvA{v+F*u{_>>Jo@*q z`)8f&JAdC1sQqYtW8VSD+0It~QDe2=-9goT|Idu>MSH@?e)iLye0Q3D@*Mk%dpOGd z>IIBo*Zt|9q1MEYea_>D)~7RGnwqWIuQfkud#K8$B413P`yQ>_CwA(i-T*bZksjuYDSen{ z*Ol$&vOitu!3K4ynD_RWzMp;a=xx8)qtm=TQp{rhvmTHE*FAqL7p_{4YG0W&dLZ0>jD!pt5upRU;iM>)~weE&wEy5AcB_4@#` z{`Z{-3VXh$J2{&CozKZhH*@xr$$od*-9GbxFT^Z0J}^IN zxX-)T+)F7L$q#>X)4!AF)D2Gj*ysP#-)GFb3-<7t@Bi5^W~bcl)RZ&()g5!4L(RKO z;u*Gn9)SLuwrW2=g+EG%__0-g(yP8bbafU6WU~uzdF-^kF%0Yx*D!GYlwTZ7-0Ps2sJ-rHV>pRbaZZosZ_(llA7|wN=er+az>k{y2ZJ34_b^y%<-O`Z9i~6=&e!Re zKG|-+HJ?+|c)3xlKi>xS;Tf-J`O+9a_td%0`k8rouQMoKnlr_LSbDU7;rmqmFBgR0 zjDz?mYts5B9{gerpK_D$JpHav-~FTg?5+FfOuSCsjnS)qdXlG}m*d%X?;gMgUiOJc zx;PI@4d3M1XAe7k_Em?wYjdyt(~fkWG=HDeo^oE)9J}`2Uf=DJ>CM5eV$b~&r^a-a z3)mvZ-~0Su{VxW3k7ZA|raPTxUYK{o8a+{s|E=?d&-j1*&whH>e}5BH-A6TR^dL*k zpFHp}&#u|hCkpTOi9fdQ`oHX#=k&{c#&U$(?Ymcd@tOSbf&rh)Q8j$DcsBNyXx^H} z?kM{j+Z(@0`?;lW50MOQ+*Q4baq}WkrxKx8YNeM z(l9qaW1=%JrL#tKwpcQrvi0ejui*ecHo^Jcoww$F!fB2F!8$IZmF6kUK z4@bDVQ)KW7yfwOM*6a!MD;Z?Lb@C2}xu5M~7{%B3|9C(3`Cm-VdoK>~n7s3=xok&k z&9^W8CT%YocI=iv`Js9-_r-VeX^xKS|J%5K>x(degL~k9?>Jbo-n~Dmz4q8Iw-!tJ zq*x#~*;B{*Vw7F>!@=F_4bW#KZ-e-C4t4e%n=AhG#jEc+&CR{(72hxr&+KQD{Pk4* zhk<(|PGM3kr9*Pa)}Qx2T%xeE4hMMBNj}HZ{Z#WcIgXz6v!@tH))h_uN$E*0KCmK7 zTxZk0TmYNi3+2Ob#B=IlyzN_hyI=CC@s(eupI*}MuFo^Y2#mC3hB>UKp7yvK@a;1p zeXnZ5uKx=&F(4Q6hjTEPa*{Mz@BX}Jy$8(w zu|M$>+izra-dQbq(R0pxw&w@&h7ViZ?QP@81Kv*J!}m9I6E9-K89ZwE*1t!?DSB_O zwYjhUl`M1F7oEK6tML~*+2hV@SH7LsFbwCpe(FI+7~tm)_nD;62ibg57}x^`aYHW{gy$*iYJ5-ctF<{tcQWAuhq-q4 z!ywF^r8`}%g@JJxh;8qndvRdDS`-GpKZ1dK(7hyU+Ag1+`sH`?`p#Un*3a|jxcE1p z>|}&RYsrDZnG56uvG!E`_f~+H*pUy*2V}%QJ<$BnT>7V5{+w?BSi^QUb9APA_QdlZ zJ@?WPAAZA=4Q%lA9)kqvOoROCu+Vvf21qyzT@k^XMg_jZ~px3 zkAM99Q|*VnSm|u%qVY{`G`vx^qvWz5WsA6$6J`vMSM6gnf3wvan;!W#o|FICH-49v z&z^fWUDAzxy>sL*c(TP^b`Q>cKgY0Ozn0Ho76!?9j&AU3AHV3M**E8Af9^A1J9)Kl z&eKoM=yL_V`8r$tU0>goPMgoZ91#YvgCU-9K*J!K{7JJNWp8xu>3p<&VvqgPZvDxp zwJW~Phk;mN5Bt4mF&9>BoZ-G?Wh=}eaXr25Zo^tYEivrk5~Hrt=#*?D)? zc^J@_-^%-J5f5^kmc1vn#_uqI8~pI9Wq-Ec(v9x7*3S8Sn!R&eUkucrG~2sd=>-S& z`?tn&o1YCA2XH#=o@2SdTMAyzsF^;ehe7cg7TJ?*B)Dl z&3-XJXKy%u6a#E|Dh6P&^WnNPGaurm1{R-FUj3;z-!wk`WWII%)4z@9p7zZ-a?NY$ zfQAzsstN8g42pwU|EB*R?SH5T&WMNV0UU~fDKlNtJ-trq_W{z;8^ho76l=Z*@EsXF z&oj>%<9X{Ih%q^^-;rRC+>qUBgL|S@7WeK6o8bq?bcXH!Ypr-k``(5f;`gcA9|q!q z{e5o$uW~;O#ND*J7-;SsH~-nD{KCKNEJv~1{})uOv*$S&c=wCPKKsZSu#7is*^-@C z@o+WwT>CqF(&wH}Pqd$Vhym@^TR-1NeJ*4(%$#%gdjr5Q44$jgOZTxIzG3j(^PQs~ zJ#h2`71AnsL z&mXe&7PSvvVc_h{hg0U2eoxJ1r+xah#!sDZ{YsBwfY0bmcNnPs?0M>QK$w&d;^HTO%KJ;DIpckKZadnY#OZ0?Fr>*zfUT5I1t zM}DzBbC&P(`Sm%r+v84%dptB47?X9&E^A>?Ki#H}(*KIuU(D*;V?6i9bJ8i7ewxoH z;&=bQC6^6i_}*PVvGE271AKY|OyALK>Txxmy3c<0ooC`V_v*_JVG*5Yi?wnye~Sfq zj{i`f`NZ~V>#ec9&WM4T3+NaQQ-^fFMNgZq#+|)dV>cY;TKiARcKi4+``KasIki7b z$^||b!9Zg>-lxps@T7C!T*JqhPAK2mtKXUW+1z~lI(s!Q2Jocw&SNVddIP^C2H;?S zxnRBl$WCr}T+O*SMT@wPsEZziQU-_q%@d_Ga;B^E+lR;KS3# zdt>{_VL!ja4b9$ZM>eLjbM>RQFuL07%oPrN62B`-kMt9#{00MWIcM+Ld$s2CLAj6Z zV!%BhBl}_7I2`DnUDJ-vp!8{c+TzUQajxGR<0;n3r!V{I&W`7P-kDf<19(gN42YLF z@cUWfjNR-fGn>q%Ul=rQPva|k%g3EfR%a)^&Cww}U?2{}gE+8%+V`BkGv^zC9?3}V zN!fp5aPCQeRI~qzp670jlSj9i^VlyAoO@|5fDxTw0K=IN$sntHFymqBXb<1EcdqHD z_x$-nbLU<>=G-~9mK;39KzCuk|CTM!@%y<4ul>1j;piU7jmar4i{I$9ZR&jX;cG5> zt~YLdQhIsoPrUL2|7gzVH~09Z`9L0UhW)((`aG1Zc}J(d^wQF~wdc}l*E}=%>Cdr! z^veFe|EeC)_4MyKcDBzyu;X*T52mJS`+KqVj(|yT1-j~M&RT0-?6vk>+F74p_3_l4 zk9Sl&`kd~4M$i2GoHyQSyD^``alQfEBet6hhx#bJoJrSH&(m)E=3KVSxwG%*c;>=E zzjJi*_Mzt^2Jd*^VW4L6Dci)opBq(6rrlzJ4yb$L41dqx>-YZ5fA!T?`WsKGKO5fm z`27WZJ7FD#!&Xd^S4$83*{@|U{q*V0fA!&`KXGcW zd3|TD8vb~Bk7Pf5x-0H0ecb~(%E|0`m;aoFzuz02xq!{EI599U$FQN6j@dWIFX`il zzc`z5fQR_EhF;|YzIhk>oskcd0b7k6wu>{^h>@_Mr}{`AeP{KpqsH}(!%_ci{{G21 zXY9QY->7+dxd(Eg7{Hrua?`uo@0^&UvzXevSH2~;Cie8jrN%$bpv^U3OdGRGz4_u@J`0owUHEzy)``VL@)Asgt z&RTq;?TOOSou&7#i7%)JVxGU%6ZYbxkNO^=K0Nf@1Nd5>&AK+{xu2j+BLh$C>2bA}9_qkz-uq9*hB%N5$ep^(e!82J zcl>>`sbA~q+SvZdr+)KM@z9xjeA{oYxb;SQ-(28(1D~nN|M>tt8@cA>0{>6z#&ci( z%bs+84($wn^(V!nF*$tkKJUL`V}37MZcB%3n{w&V+sFL5XX@EG^lIMRRg3SWlSjO~ ziQM7$$%*QLT;LwCAMb3s!U6X3fcKt~|B3JT#v4tZJ7e6xeSYcZ zVfxD>;jeSFB$^qX&=Iek9+FmhfvRR6>!{^72l zo#|yRJoMWWR?V@oINx{pVch=qopfS(Z?ApsZ#KLyJ##^JPkkl^?!57dnb@T_`*&`7 z!07b(X?NpfB)7PqSj@ZlVdaAPJun@zFFjCmV&6J^x)aT@-P*j*#c=jF4yWv%l&o-w zPCe$_hj|a=L$>6%Gp5s>F7&l83_6pY);}Zu*Is*e8?jNGm{%*$J&o}y)}rD--)8~u zxA(mR>OWp&vb{EaqhI{lCl{q-nC$U`jji3Iy&0l&@8-F9q1lbnEqQc!*Eg`ZpN;*R zw?zGudTUunYmMzS*O}Ih+Y@cCJdGFpU`_sR*^iSvXMYXH>?26Y@ zd)lAv$!OgA)c?ci(I3F*`B`9^IY@sm^|}!d!l%}YpmbH3g2u`Pn6sm z{pi(t^TxIGM9=f)oJV_mqQ>W(eeG#|($5A4`8ga;n%()!c&U-r}Q0V{TGdmjFchco^y#^u=yd#~&>cdMOzKWq%h z%~#W>_0jr|wh#Ze-kwQYbMBmP?rP7JQ|z=K9v?Oa{tZ@grk=^1RR6i{idS;BUms%1 z-09~T57vy^L*EY@gULTRkMu#m?0&Ri%s=iOG5?Z#adkeOPHOLmZ9jhgJ-z>b8>;bN zv^b5zV(#;A(Az(Gn741vO`cbMyz#oiyEW%N8yLWrjOpWKPO4u^*X*BT{d2x^C+!}X zFCOYg)333Av-n}+klcIpR$M>MU)<-D-;8Pfmp1&Ic~{&04Zva(^|!>d`r=F9--wyb zyfJG39M8FUo2!4)&-VlDW2xSO#dl7{C^7qZ|v_XI3;Qkp;YR|0}-;-xJr$^_Tk6O1T4#<2Ld#}#OAK`lHm@boM zvpN0NX1}>~o-`Rzd*}L940KmfjlS=5_fH(;l6a@rq*KS~?`)1{cRq_wULQt33{E@V zXYBvIj_=ej{n^FFn!lH%4~ts1Ur{{GpR~OvevMB$b<-CI?_=|MR-MN8l-qdvzW-Nn zbJ=o>#v^)b--)?>r`>bx|Bd&O|L@aj^Bnts_~6}LIOD-u`kj=Xz44}v&OBwqv}gA5 zYfKmQuQ6&4?`gwx`uvQSv+U5~+Zbg>RNvoYZg2B=Og`ot<7w=iIkdUt&2hXZ?)uJ= zZ?Aj$92=k7b0t4r=rJ4FVbOehC)GbOGB;Z`#%I!#S8M*iH0j{Z^WRhUJ++y|8%fwTVG|nnU9`Y5V4!e)G}Ri%au#Fz^3` z_8cESwP)6T{HN^Xk(uw+zHl&?t(}dw2c10We#VAzt-bAO92UlS!sNsHOynM)v7fx` z%MLbw=@)%;>p;i!LC+Qj@xXKLH{YJln!|UVNte#Y!&!CvDIY(zKI1D{WSsJ*-1MDu z*^=(Y`tg~(PyTaHYv=xC7K{Ai0UVk{4janm{&iGbv%7x=t&Rl**XDc3>YmEB;h{P-2$wJwv z&9&yu!GjMp{(Ilgz-nms3l?P6icvIwqW=FI?M=_<)fsEe$9vLjHdlYffVmk5`sw_> zpMB(lFo35xn0n~by~c;;C>{7i983&aKj}QnUhCz9#^DlHWRjz0KT4)K|38v)*!$E3XR|-Q zk}+k51-rwYovnOhezvwFlp7R}u*e=$^4t>}|xAgA+ z^_0El$x7GuUD0@*6tDQ5Ycnpyk!Fwid3Wf=*4|R@`aM9Ocks!7WTj&?`;6%W1K3}! zw>R1z_%?UaWM+SMhk^OloHfq}{6=>^=g+6^_SJehL;T>GZuF*eaThgL?7_gix$L~6 z*=KF?Z!b(|-*`4_bB}Qtbm!UelDF@~qI;lzxXV{MvT@p}Z?85nFyDFf9Miq|`X|lb zY}AkHJ6khPzBtg{^?LxgowYxokww3&#%{4t-1xir{FHw6vv1;Ou5mP3?sqoh5guq` z=hLwmfWf=w{=Nqd%XDI!zE*$wTYrvEyW$g%xjy^Z9-X#c_1hPfzkF_Y58n0jfE?ny zT%b*i^{2j#(c%D|dv4im4?mv1Y?>szvlceuS z!=Bx8VZOF6pV>ptXgnKF8vo9s+04FdM$bKT=pL})p1nRRb>G?A{oQ_CF%%!QML!y@ z#`^N*q^-XT?fsJMTa=FZ-5%%Y@zQ%=tkbnv=ZiCjvUS=tb#1;yd)pOt{8wT z-sGmw*5yIJ^hD<#V-27B=sa7$b>nzUnw{phF7&BA%&}eG;wyZ#Tb~8^x!TWG{L3L^ zz`(k^s2{!RTbr#t=Hd};F8=1@DVecT~7ihDLa_h$k0!;8r?c59hl+J)=Y59<9HQ<>_rzI! z>+xx?{hg_QHJ)p;@6H;t3C}rh-kQ5gXSU5ZKzd~F6@>vF=?(*Y@N<6p0#=&+(eyy8 zPuAyr{m#TE>aN*Si~rUBxt4C`_PcQD?w+!t_qjFkaAkXQ_OM^$ci%}B@9Fpw3J0y) z-dLRIqt?8!^=JFomwo=5ulVg>^aeHGo_Q{Qc!U|<+0Ac#_ooiA-JYku2Y_W5_?=4k z00#37%ujH@Z{jii*L=Q-ny-(Z<8v-PXm;vP*~LP9^EJK20bkBHK>og>-bnbvK-@c9 zE^xn+kzRDtZ?E`+y(aeXA=~Z|nA?Bj1&evNPW%v-vrmeLCWa7yId-EP7~H zwl}9fI?rB|Exm({PYkB)vkxEgvSCv5d^Ou#uOG(o&fkqsntpH>18N@%<7(GaxquJc zFZOOMmfy;U&XRG;onyKiX9MaUH)gy0lCJSMvGx_##3Lw9k&e{d+y z!akp$G(DZSx17RuSci|j z&Nv&Ed}kl(d{qA&x5gH0&b6oh9GkQEik@@fYMySbr)O^fcb?DL%MS9g_w==~^UmTY zhdIyZ=JNH#diMFt`CGBj{PasaC(X7i>MS{UopkC#4?gVPvmFNJ*mh;RxiEs0{k@@J z;2b@t96HSL*>7F$(w|gcj70S{wO;P6_E-N=t$pZ;5gF#9;x`O>`)1=U41C^Uf6aL< z46-rV#L&wsWTVYRlV2S71`q=<&~9Ns4>4cNRQsJN zR>>hddCuV7XDxEoTRim5SNo0a{lYK*woN;0&VE?;7EjK^c=oNk58=|?Fs3Ws_{jtO zm`>*J<$`_g;og)x%ZK=;SN2aDE|b=`FAUQWy=wNgXYzke-??PLmF;2xHHHZrZ^eLl zJkET$@4~_*-q{6rbKz>+*BmU^n!U5%`R35hb+3)%5k2=erXyS9fo8ikKl|W2pNHJP?shS- z<9)@1wZ}K!8aqqZ_}XU<)x?Kf+`N7D&9}FH>y7Q5ee0d6Z+z9Pw+Cf!4PW_+ulbE# zbiH-weJ3g=>~l9dbLPD8o^-}wdZgQ=aHQA1LrccaCyUCB8XM>Svwy~Xa`QW##11*; zvPaCbiEZScvEG=i_Br>M^VirJJhPcz;*l)0v3{+!bDw$suJxI|IzH~`edWZ$sUg^T8?CASXad4IM!h+o5z!~_Nn=+>?df{oGrp9W; zb#&MNRrBpJ=Zrb_gcUi~$M#-JyX@C8BANT`*vcxnT$bjRmTmT0#!WVRLf3{A` zPk2wg>YtR3=EQ&ZwAi3e7~P|E4kL1lzhuR?@ubP`TyfnS0ACp7^DAoIK4;4z`V#{( zla)TxKlSaSe;DA+4>dTbQPbvZhgWuVK3vTwBidZlymQ5=n!ui9U)=?Ewk{T(F-Pz0 zNM5u%K{xiIHF<9K%X`g*531o+tVhYI-#&BtD0?;I*{3fI*&&W+9w-;GD?7s`-0`-q z>Hp?0|ANgAZH~Nf(eKRO@65^LVN3=dsN6l})Nj5$D1PYdCpSI#E1Sd;f8M(D)qne| zefCeg!W=Eu!y3(2Yy4`gkFtSY^pJy4IgmVkn4|X0bNVN5bIrFlsXjh*X9Ic3gz42? zH@ES6z$|_2#|ux5U1Bi%(xbREZjU~@pK7zN>;J`%ebt+P^FzPq%};;#@80zvHRlcB zo#6X{^Sgj#B>xfbhdloHrd{?G^H(?&GyKv$2!n|Od&4AZ-QH?AT3th}-D>B0vE6>_ z@xs@9v6=jQ(HKo9v9)v9L%gx`%6@ZrcW=Vrl*N8?_R8Jzibii^pY6r>7ktfM-SjIy z`kgzzKj-&;e2=Z|eM_%tn|F{{r61kdbk&NtGY(G-@CbuG1Gy7oKup}izbYKJd?sd)=dG0|%*7WkPHIo%cyFCo+$1kv@w2YstLbO2J?;&?6AO?<856(8vcAtUf*ZH@rgE%%4dz+W6WRvX3Du{4}O|8I+{y%`ek?2yuMgtkNd69 zu3H%Fys-F-NzHzKPDXh>n_#8+U5TBiSM7JkocdpD&irrs$lG^s=d6Xvj=klhbfi`u8ny051H{%`%^ZKHaB)xPc@{QEb%EiBmo2fpKPzxm>i z{plT3a1bX`53;nWi`b;2xrqat__1_$yTUS5GHO{6<$*GQ4*RQBt=Wfq6 z<7z)T$K5%y$e8h-%~9*@bSAr-L-Bw`G2mYBd;X9I;KINBtXV6+kYQb}HRp4`zPY{w zz~4FVSwCZ#?|^i)KR)&29gT1M#7=XwpDtUUrC&5z^ufcO&wp&X_2!ogHXaXo&pG3; zhvBW3OzSX4i@ENCc})&bk5RFO`fS7>=Iu%5}>l z_i~sxx{JZ`Jq&vHi>--4Io&*b-5dRCKY8Su>u)mRm!DC(@V_%+AU^t<{WYJ7@v3E$ zv-qQA7CX~N^mfiVpC*@|Z(%?e@n1|jiw9o$o~-tOSiCNX@ftudg=({@G53 zW=*W(UtD(&o3Y##=F<{`0BWDsJ@4FHw3VFP)6(N~T(^u}LlW z#+fzWd&gXFpU2wY8{mO@AK5FH;pc9kk8&Q~9CRplw){2U*xv3=H31G+ccJ`W%%EZh z4~>m{an}9ndsH1%@4w^gzvr>G&-!0~*8ScA*1Q?WN$%{>N8NMeT{2Ge*Ugd9u|0Z}`q1-ZdA-V#YjPo#`A}i%+z71>Ra`n{SM! zCt9COyz?J_vgzLE|CxWh_l%2Wv{vkgHAnBO%J$hbeOa~+s6;N90vH@y7Ta9zZ|SD7UM;R7^;y6|7yNEtgqFNR;ShRYJ2ru zov&G|-kUS_vw+qo?K~NpF?}?7QDZMV*uyt45Ks3o5VPG8eq!guK%Y;nY3j3DsE=x5 z03{PIHJ^`B&Aji($ud8A?fzQpJ9K;PVGF(}-t02&ESjElPH%hc6?{Y|&XMXR2-URUpFLB5Y`txD7JeQ_t6tCidO;65E$~qPKk><5*q{IZ%rE@Xu5YtG`kbt8!W+gDi`h?ZI-qC2 z96~mqK9vjR=l>Zu_?-O7FBhROqBC3NwrcyV``HPDtLA4R_N)6f7=;u3_Gj{SpVMjT zV2)l1)?jhw19iK&?9J%T;89&h<+^G(`dIf@f7gEXe>HUnweBtOxYoYo zYG4_f9G0pxN@8wBr@!(7ML0+A7eh*-c4Cnk@%UjPo zztxw4 zrpQ9+Cidt=hq>lX81q57U5<2CPBcf?Fe_fIYxt2#pJKlLjQ2gaVx7PF73Kdk)*D;z zK5QG792h2RzaJm+F+XVH6jghx`?DU;8m-^=`RJ_W`s)0rKKXYazxOxiEui@s!2CHt z=fC(5ec9%NH@V)+=|*4u{0?t*&7N#NY4-C0td0303}C7cN4)sLdgF42v6$O?RxQU* zJ58akATEOviZ-%-PGQTaU$0e4e&9=5w-(QD?hT z;>%bg)0qDHk8SBrfAt>^xtdM#wRv;JxwGMjCm+!l#`0RZZT7RRwX3mvQNF~BP56_| zHoD&WEC2`ih5^jP0b5~9?!-9xx2PCw%{lhLLT!hQ&$Vitde^%^O@s}Z^zZyVo70Po zvlX*!Di^>cpP$t4Llp=4%GtBN&?_uZa_G#yY^&DyvyE&-XPfT;STyb}p!R>?r~cd9 zpAD?<1R!yXc*ie_Cs}OBxB6GD^=W_S*dV7|)qnS}JI`)d;Z;5r5Bihp}uW<~#rX&p*Bc;B60nopJ6~gRORJ9S^!Z%3eQ{Am2Q_>7mb$JC85w{y$a! z^LMckZuFk9uOIgI!i_KCs;|Kr^*xAKwq}oJ-o0wCIr-Atz&xGP!Jf{T!;dZLR;-In zdZnjz`(S`aF@45*CV7F&V&Dx7%ZFZfphmBuP{KvRjl;g zyuR9ox<}Rj=EVY@`5)bDYrj4nowLVYEq?8@NBuv?d}K`{mwsYG({~@Ni2)dp<4k@( zsWmd#4>xDyl`QLY!8?6W`tR{W{g>axGs+%z8M9e^JKqk@ljXjl;;ov;59ZKw&irii zzQQ2A$>v`+-O2^0RG!@Gthe2;4 zYc*%%(;2)z@xiC|d+85;@`GJpoaN6jqmMqyH}&b(U7&|p+wc90`mf&N$?x(l+rgunEZPWn3K=oOqV{FuyNnPrCW3M=jq# zG5%0nwQ4T+X7NJff68mV_%q(RJ^ap;u{8}J z`3XKg|5x{X1`ub{?re>3<7s!Yr=GJ91Ga~OxR`#Qef7UM;5#wx>=|3-9Qtbfsjl~# zf7bqLxpg%=drzwF-)hd<@4e(5;P(Z{m~VjTpZewT?m{(T$J~m)X}i9d)Xw_BMm5=I z4OIS{HM$yJeMiYc?N$Hv;oF|x0O+p$D-S>N9PbLY^=We|GV?B+3~*ilZjU?S>%&tFW&Z-D^PQqT<89%@sscN(F6W;)bfjc z&c!3%_|AED(SdI1rQe;TyEy1P{xCXiZ(I!7PY3Z}KU?{|Ry?46=Ps_*-#&-ms`>LX zyS|$5bAPq{toitKW>Wk6KAbb=W@_2ZS?DQEU?>1t2|F*=UMC3Yhz7ctybULTdntbzPErm zbzOaL9gUB(zF+S50j#kt?Bu|W@1kPDI34+(U&X=Bc`N3!J6epu$vtR{ha9tOb+s9- zW-nSjSKrl@pZSwNzUS!SI{@qF8=$uUddYvu;KOn>efWZnX!C5#Cb?hZ=VD>6ue0oD zo4stdhks{|z_+-;$5<0Tau(`yRZTt8N9X5%_5UY-?w{@NYMj%=m(Rhdu``{IN9*R( z8_sN(N60s(8^5qYEB^KKpZLYYnS4AcnfTzHzhM)v8Sl-JDfij$%}xgV%+?0E<)9%?XhG2`gc%Tp4#cnyL9M)%l z^;SD;zPEtdtXBKX?mPQ_pU>Q_+V5O--`%kfjb9XR-vQv=8Rxu3=tE!jvWxxfdJ2Pl z#E1DUJmJ9Sc)JWXzHh-GKgG_tHX=kjFrMZ9RJL5fI z9$&U@KFi)2uVD~xcYE35yHBH~#!~p-!;Hf`pa?-!*6OlrMmUQRUb?Ch7L#BBG6&gQ$ruz)Rl&;MX-z5Vj5oCc9Ry47PtB?#IU9;qJhI{q7L|_E{aj>Mx(DX=)bs}y z6C>i;n%J|qpOaTx)lM;{cJ}#SOgLjM`POy}FCWuaOrY)q-t;D0{~iYR+sFQLia9ok zTa8SztkY%lTz2pNqQ-2LqxzWB4B-1y$2Q&)S8qxy~UqO-bL``j=5^BW^NccwT#$8+AAF`ABO zjqdPLA7RklKJ9MY=YKv413sc}{K*Pye&y%tGr!OJuCG3`bJqX)PUvi(`8(fywDZQ~ z?E3%ka{yzy&?`Ojn>qT6gBja=o83|P6yNqX##0_p{~v4gswvfMbLx5&W@@)N=jzLw z?WyiJ#w#A}bJm?LKZ$v^X#BuW`yMR4>8jb!27UY3-&hQYg={b0Pqlu258!-q^m|v#^WG$Mqc1#RxZhU`1Nxt~H)b!KU|rnsNx1~R#`eJ%MleO; zrinAZ7bqX1#{5>xkH%sk%1`>Jc|1|)@wLY9?K5X=oj&#HRV|n~kKFF|y*Nk)%-U}b zFTC~1BbP3kzPP7j_Mp{&IosH0e|k9M9(c3hr_Wx#B4@_i?DK<0zWv|utv|B;g%2I# zk-qlgC$_C8+j;pmzn_$kVc*?zHrexzoqf8_x;%B)x4%8Gbm!GYzt{dpzUwD8UgXlB zy!M}bl98X&qcNJk(eC$*>(lPW>OTzlNj^l~3v$$=_G?P^f#t6I%s$1 z@v=vaLtkS{_-b@D88lYAHMM^B?`r=!U+wQc&>dj%(ckrc)%}t@2HERqSiC=GIrwtNotOXT9#; zU=BXmX90aaV6HvztM%}lkJcwYcYyYo@BM^YPcJ^L{l|crHV{W_kX^+Q z8;KWv(AlX*v!VEr&-vDT@4)pxwnc+XJ^#l`jNvD4+%@p!_v!$-$xqH=k512QfM&Ii zo@`{4 zJs?|}laHL?_L^%yTy>~BfU&+aK_4=aRcz1rCYM-tuAB!oW#>BhtC`DBXc^OAZM07J zO@Gn$+|DliZjQcUQDaNIs>y0}HUBUClYjT>^L{wN?f}u~9?=~DA3U^p27B%g(uusu zNp9mW#P8CTT~1#cv%9_4)e3%R8#Bujv)?T&dS=$)@)fV=`$<23a%W^5Blc9 zBQsg}T0@6S*2!g$bv`|1YD_lyg}>0S2QC!!m#?k`~H z41{Y>`+e7t44okmf3`x8%+86vJ$zc;zk3#77kuOb`DLHMwHJRa+n%smZ@xO;xoNIi zO)he3yCfYjMjuxrsM_l9o^YL42k2r80h&QuCqW+c0eZ{*%pqv zt5v(}SO3d>;enpnedkYK&Eh+a{`OVt+tYUd;?W%dv`77KkNB(R%@|@+G3G3=1$(Qr zryb0pArDp$*lXMI5tDG_G4)$c`B2+G+z;eT@ul{=7Z}4SpW0&$j@Y-Z?YqFDTkQw= zPi`hFANaqEY+ihu>uifzz6H&*D;jK}(Y+Y3Uj0YQ7~STludTBkC@-kP>U1^yglCOE z*UxdZx&!n+V7>=9?*Y|*@{l?C#OFNo)nvNgoq6_?SJ(zVdd?+US7+W_@g>*Py65)Z=l4Fo`d_UF&GntVc_*lzN4qin?gIMi{W;ft1B@nKcklmSvjN-Y z3o*l=*%{paT{wKoUgAbG7C&+~8r5-d`}zU(eRg&>abPao_MS277 zRUC)`^3o%nc5FY%{b<4|7ubuAhQGWBN8TcXyj1;9F7xonuBrc8?*`~%oopJ~Xx67g zIjc2t;E%SZkIwF|`v-aPPfxU>qYodBJ!m=eXWnnjrrE$gjT~fR*Q?e!v8E>PdVPH7 zFQ3TK&T`+I)US01U^jBo0WIe*y1|pDF&;sCvjJLcl?~{az9;ONm95~@Uw&YN^eg|V z$JJ;#P7Ut97o0V_@9U}mzQ5lcz+QO4YI(F9gK*5VS$kSHZ+-eJ8;CJ>5F>P>m-=|> zZw?;a<=q_v>&&2&eRsWHcxv{n-)fBeljcrf%^g544U)sY@I2=m!`IL-#;aN)9_3~A zUu_^C9mNtE=~V6S9w5f;%U5XSQ*hS*?c;?DKicR!JDQjyw_K!#oi+SpYyP=^j(Z0H z_RQa1VBQ0&on$8)dx8AanP(ezf#bUtr>~98vjv=R<#u%PIokT=B~T6%BjQc`*^e*# zu{Hbg3mlES#@5K0efd=0cjm)IQ-8~|@bzbYn{rGUlM`)n@N;ose5JoR`tv=#XZ`2* zp8KoI)p#|(XY^n-e%9jd06nj}188ts)3+C_#jiE%6UW|glgXTYJ^wpLVt`I;;e0)_ z0sYxw`)T=;{_N`Mv(?|}z@ zpf0fi-h9c%@&ljH2Sk%y#UVT(eh;j`{8abI!bR zGM?}M>BR@d!Cn2Qd-^*E;*jq7Tb~Uy@vv+7<31qg;BQ{*+21@nvRm``tM|3`@HM>h zG8sCP-ltf@qgoHn2G>1-zRAhw^zIzU7vg>MS@dUY;7?aPtjACNuRizgzS zA5JjbI~cF-0^I}L3)EA&onB-mV{xy~f7O3>yu0(WeYSz`Y?e#&IXh@_AKdbeT*Gec zg5UPnKJ?V4VuF9n*-IbvsxRo4gT-uqLlbSX%pBThbLeTs&ZNWNSO3Bl zL*bKAo*}QAs?F#3YPb37?yS}N&4b3i8&Ffr?QM^F^xYHM7vJ`uG}~{_{2aiYh5Y>J z9MEf@`DO1b{mt$&W73!k1hI6pSV?%%m|L1s0q`pzcb_PhS=i*2$M8)|feG2R@|da5JBT@Yu_4{q^RE8W4NmnyOr(1@W&`zF{SZ(3{N8ha zwcH&4;NLTTIE}6K*?;@Y?VPl1&;DeW$K)oyD8|TYjbE*UaP-Mo48Vaq&w&`AoB8qs zyP!>9GH7%Ld;V9`XI;Ol-_O>o|G}&Ma}KTU0KF4%J~eugH#zC6PY?cM5B<9{Zyt^O zojp5e*@4~INL=fKa!@gc27i%7{K0W9)OC3T9W|+E)9wKvUgYe|pec9oyOwO?oeXH# z=t$<`6Wp>tbb`0zeaUur<~N^3L(IT;SFQf5rRuDDU5%{{SEs>R^&Ip)!Eo(Y<9mj0 z%~;(BJ;#I5nve|S3R;Uc7!B*$*7+7Aodu+iJ+Us0u#-O?Qw8mf2G&f~+4#cAU^wG%j%m(Q~$Iby7(X#(rHSxpW z{ACMqZa(?Qq+XYwi)-udOYDfQb7{_bxoT*5-iJeeboB8=Ta9$S$kk_)#^fh+xquDK z<%_#qAU5FA9lkSYOx|p(_ErPHYO%gN53(aU*oB_ea&<~`zGv-(r#06dA^WkJzULpZ z#OsQ;HI2MAI?%m*Xnc1L%*$i!?A(B224Br{2D_4nyqZ3p(xcD(=}liWK-2v*$x9(nOva=Y1tBFIt(9F+#v*y)-9~4shNB$j(Om0@9bPa*No=*LP=r)_?xCFMsnn zU!W_-%0XhS=6S=p5_5RLK}W-195&cB+g{#L`qY_;0D8m`q3&Utgq&vydN zgVp%@)qW5yHD5nEWHj#ipC0trcFeEwmHy_kmzv5B_KKsVR)Bofxf6)OAI`Nk=U9bMl&;Q}t=PZ<8Kr*m%^3$!{MP7Q!S@v3k2Wsi( zo&Wv~zsKhQlh%GWu;$yxHvON0z6;oI2I3oS`0_2jWXuNoVwK*`BfZ4IUH#{OvBF;P z#Qo`ibzAL~`_MO@&72y~c5v_ljjQ<+Uw^&>VCV9Px=S8$ZBA}3KZQePd*~?U(;qYs zKb`1r%>U&*=R?fW7a#hft%)me*8ggMaMtZv%g=tbJ~;R3pYz6kLomEq|H(t%;CcY$o@(+p?87)_UH6W4|2Knm%0iKkL6S+k+aLcZNXk%lJqm zKRRTn$${eDm|yYe^Dcd~&F9x=XMXcp@uObBHx^^+s5a|%b>2I7^>_YXKx^tRSbc79 zcZXTu_0g#Q_kO@0|L=c(7U1ll9gKc=17r0cZ!)u~dg)G`4d`{1^UPU;pUv1y%=3SF zRgO1iU(GtaYO%5TU1yg)ok@L7J<~p%t#3j2=7Z>w!Cs9|&_DUXGxuTNw`5FKa^eNA z*g@C$&Ia(wn!VtnlMUn&vdFLS;OmQb&*|lNwMsu|-B=ux7qrir5y$X?&X^|W_x(xd z2##1s2d;HIot57Ech@H8nG5Jd|7W>?UFb|UXPJ)1cQ(eOx*tEbNb3n>&;R(%+V338Tk(`z&)SdXzE3Qg*7(fX@63{)9DGqj z$2{MV7rt@2qoa>DdhAZ8&Vd-{JliYor?2HRjn1B3#836U&*H1g*2If*<~*v~tyS0U zRkPuM%}=N=w$LJLwCuIkdjRv!JO9v+oFG5xn-?GH`quhyUpD9rnIkj%Ig9$vHTtvu zyBnBq-I_gQ;wv>N$d}cAkPo{%pv#~6x#$065bNm5gCHH}`P4@r4SPW2yEDJ}JZcTQ z8;f6lS98_YYO(rS-8OIC9YEiF^3)r^~y zBf>$`9!(z(dYyI9*x4pWG9@Eu4IX)l8+45CY~b9$p+9-xiluCTra3y*=#IWx>}<%< z)pK!bUQR~S9x{nry28`omA{=I=SD+M?4#jqbPs@IpL2qrdHDeC@*SD==`?M?o_D!` zUEs0-o%rdr!L)I9j~D*-&_xZSBiX8pivjgtY!wID04>iK;(=YsOD?b)pWfAU^JM13{Y<}fHRu0snuDM2 z*1!7W|NW(|vw^v6GVR0f-J#%RFZ1x|NJcW>orPVKSFJtmpr%`+zr4Zj>=CW}Z!8a; z?*Q;scjft)n!oV&^Z$dkd2!htz#i*zoxE#p=Yy5A*?W&4Ia!|!pcXzF_H3EgKI2n& zcB%fC3+ZN`cn8Ib*rFf$V#^r5e5MZ1rY5WXaupgNKGp4c55Rlk!MDE#w-~jiOX<7p#vj9I(7Y2Is{-c-EZP;yu}> zTx7aB_x6$p&2&ED%mu~YRsAQAc+W<3l-K29@edl4S&XV<^tA^M^K_N}&BL)r&G%ek z4iB+7&lwzR_UiY}A5Su55Bl?uv2$e&t^9G93)q8BcyAxBcrcze$i8Ro7dv=t`4&HW z*qr=qQLU>ss#9v%%RBH@>)_DKn!XyDUCB-#Hnb)mST|QJCR?yvKnL=9KB1fO>HEg& zzg&_1*-k8H0}xNSO|Bv<8THAv>-^G-p7f&+nc-B=$w7AWv%c@W4?CbY*YK&KIlnW2 z9^S2chmc*0180WbodfnzbJII$t~)ne`m;wicGmdbSdN6>I{-Y@3-f4LQ|sfk;o~mg zd77WP1IU~3joG`n6Tj7X_|*!KPUeF6v#b1Jj*J?gO`moS=#0LzZck@Ede$^D+2fq4 z!OmUJ|DMO46>(o}M@!CA&ueNndpaXEG|kUDg0<-A+auPh{b2VG@~|m+vj-cHnf+eg zcP$^@oq4jd_tlwaTlPaAuUgM1$s1^) zNk?VPV%CazwNV5H$02+6UKwxHDfVHMm1Jl)vCejxEkKLnyy}}zvjhr z-w&vctKaDKzQ22bx$X(U?f_^xUvu1N4%Rel?ZaOz?6bMfnm81nY(%e9_r|9U_>M%7naA&r#t>+ zqL=%PdCi$6do`S_^Y7MKQ?txF&*7PCADdaDd$pHN*$8Yt-Gk&V7to13Vt|gt{RzdM z7%6wCCwzxi^ypR&BrCbmCMT$l|M0(9zvuq=`#k9b*6i__MB|?Qd#*<-`-Bt318vY8 zJdGW->OVV>IX}_6d`U0$_SD}TefeH((6TKacq-h8&fGk<4OG|?|7$T{R82k0Dt_OTzI!0&umb9TwaAJ(h=zi|CV2>Q-= zw9s!a$WNVJ_7LYFn%y(-MH?-U>}+73PWJQj8S9OATrFI+AHLWUpPr-DQ=i>eU#sQS z_G&q3Zr0>*?VWYHXa3$Bbe}M;+2al|>wdJmi;yk3%)vD`pZ}}>bfZ@~pD-JU7xrZ@ ze&jcH?ab>>JF~UVsqK^hs{vw)U!8SOeV9#tGY;BkEROK*E}`!`hSudIy!6S2cYaT< zWFt2ma-@?uFg|r}j8}0U?iG*D7=HZ1ar`ThyI5!sK zAUyX8`@0(UFt9}L5&id%G7roKaN4qmlA2ud~^KNb0A-r^AtGCqu@cDu5oQ-J%eAL)v zB_}!12fN46(|u>&1MKm<9*({ARrjrVt~Xb+HXHgHn&@OJbG!C0e6>AW6bGFJIynz= z<6Zr?#-H%$FNV;WIY3=BCr?)2)#93(zH`d5-M$ClxAKoUFg(zH_1_-;ldIH8Ha8~w z&!D&HpoKrY{KI$R!9Mb7*77Nv(M^64?{uSYHYxAfFQ#f}u!Vf8_NrITVb9~)mE7mE zzuK+Y)3XR2jjQY7pdBqT(Z%=w!ov?=4X$`5D?LDdCo_HJj`X@a^XBQrCV1)F%Wmk^ z=#O>{T{%n4fnsj^cKMRO&=b#c6j{qt`6+t#SudB_(_Mi4bivDh^#LCHl$-EMMlgS~ zM>_2sy~g}~^^e?e`2_9a$~|S)*y?sQdDd!m*gV+h^u}<^&H5j%_4b%+9&Dd=GE6yI zGuM0n?gVPTv)Os6{)-cOUFmNw8+1Pv1MJD)&Zz!8|NO`Hn%t~zv0=4NU*kJ5Wq#KG ztNz}*o|T==?X%TK!`NCh_^9|f2!@ReEr?08$&X0JPzs-qr^I{)=^s|MU;jHXDvhuvMK<4wTl9Sx#t&=qwNOp;f8VTCuj;dbI%uA}_Vxb& zjL}3}eCHRu;jz~#=a~!OycPrA|7Qa+!(Q5?O@`_}S;7`rD(Sf!53c`qgi= zW=*dz5A8d`s`=IT*3dLJ-~GewxeZ@-FPF(tXLFaJ8(MJXFFsD*GX}&g{mX^UBYt!R z@kEb|pz{O5ukJg4nzPvRyZUThtCmj~9@yS$dN3U0Xf+4c@YUduJ2~?;ndu?_Y+aXL z&+0$j_8SkC@Ae)M@>OZ-hEpu#$p1yfFVlrF7^WFUgyq^xR+lR-4V8 zJX(o6mSeSiDMwr=pu?X|V;*}v!d>U?$xnvZYy0&{Gsq4nWhe%rQ_bIT^q zGQFLJYQk&vAD%s8h^@0b*m*NAU-tgK+8%_fev_#=&_2z+xwl-*U*&px&F{6v>kIwm z2XRM7vhvy1b;Tjxc<`OGEmk`R{3iyQr>pa1oSx|5ZH%WgH=Fvau2tvf`~K!W2C8}C zpR`&7weA_cCrM8F>Wf>SLC{P8S^c-pHey4czu7E1TtW6`OZtmPGO?+~59*Hj-5xos z{PpMl(SQ7=X0JJoUDY0Z`2iiiAQL_00{qH(bewswe*W(HU+tqCneNU!-@>W>8>|1C znySvKu|1#n?!R&MUcFYAn^)_r;S)z6&F%=*|LS~oeXe)MAP2hDd^pDTkX7w>2XN-d z&kxRovqZ1A*nrL1o{jmLO*`+!f_dxwB`>QLY^cr^PsZZUeE@%W&suxce0w!?d;T}J zA6{p3pZmvIPd4%7(vj zr;B+s#J@4yu`38LKMUGjkX-#cq{Z`S|nmpz&~hQ9sY0qC;<+UZGeV>()A7w0~^keRQn=PS_o z?i|d||D7AS+O&Z?rX~mP`n`1Nj#5pg1DWRc0DATZ*<;uLrDtP0r$0Mo2M}HKKzsGG zAKvz&CqC$3tdi5X`Y#`dGrqm5|7x*#VJBxsOgk5BSqx13qpkjQ*8@btjz5~Ed3~Khlv6sx%!(>e6&bAnWM}INExBAWo2rr&u zyBtRzG0*2#CCZDyue&qvUcd%yBHq>4 z>VLM&mJ_l!TscWRl7&sOr`lfgzOVJ>#4G$DTIiEiJn*etDW1!r;*qZ8D(9uQy{(lK z(n;Q@)7_cJ3s2{Q4aAft=G0SlRgKlu;reQ?cLHj>dK@&brWu z-scH;xnIDycith$NamjX$<7zfJG+S!dOouOJHgf1l|A{{nVr7ZH;=x0=j>?qt8qR5 zHx`Tat9hUXzXr!%_}wQ!<7y|_#7OVbw;VV1pZv~qI-&o}2IUAb0GEEnlsr0ZfUh{C zw>u^tWF(uMNpA5ielx6Z+oP2U;O_|e&_ z{-b%93(ALd7dQCgL!NR0y}OS)U#I=UOXuqUu6^swvlqR!>R+{s4d83lQGNEbW{y4Z zq@x_58KY}m-E5sKWOw%IVhtXh?#@B=pAD-2;*bB+Eg8_O{_CeJIW#hB-F-m1YCC8C z^oP$xnrDyfqHizy-fK)+Xj@nR&5I#@bUZhwe=%W9W_rI?|K$nyZT8Am#o9ar?iXy& zCUVWobNtGq)%Yt&7W1Gzo_XXkG|b6iV$?aM3uvAn_u3kp(~Rk5ZLcpo*$cn=Pz-do zozq$W&GWT+I*S!Fvt4-*ziPhtuMbv>)i||1IO}}aH)oJ;zv>0(cvmuJ{d9Fd>QVh&wA*bbhy&%jz|e|y+C z-;fEeSQpruTb3=Y3$_3EBttEZdHd&G0T1&%`&a*+4LZ~RW8eSV<6N+@vvk(~ zY|KaEfbFW!AYYpciW7Zn)%^+0w+~4vOW(#&RcD~TiJmZSd z^h@^>l35c2=*R=*g16Lv=T6?3HlQP` zvrpe$-E^wgTyp{j7B-vUl5M)j2kL!EvWpc-G60Q%?3W zPrl-Sex7;GvtX|GZ(@(`^rV096rv59=L5A|9hbMzz|)zr9@ICl$+2u5emK4pZok;7 zv9-M*p4GZ&o2MUtSu)gZnXV(Ao4sh1- z#$N{7+p}}fITXvun%vuGD{j?Hd4=rH>c1Fg6E@J7&)7{vQ_G%>@f1tRBKEw~cOKMj zvF84^pF0l04;LMM_|B7i2YPr$BWNBj z*|gsKJEvr4D|at3|CZswdMg<>-Qla*Y~E*b3+LuftA{lyG>l?%|H=V0=(Mh>{* zeKu>x;!k~-GeA1X=W=~|i*svgTyiHHQe6s;RWM?v;^`G8v$pz>0Ki<;@=?aoz*MucIeR>DLU-DIrer&nx_o~%! z^*z_yLr-n?r(L=~*k>ND`$YEzwLkvZ<&=}J=plwQ_K*$HaXwvb8=E9|yb@RoAJ>?3t#E4wz zOcd|pHJiwp@X@8WhNiu0mAZ9R|65b1Ydya^!}agrc{k|UIa+sci_9wHmrj9sM zY|JNgAeY>wk1zkwIUi3sixKqF$zJ1P{Dfk)7{E*Iul}p4n)=#1fS%#I2UN4G;nn}@ z_8iYU!mQ(HbT`m%51jfzeDOldoHIl|cNMMrPiJ|Y9bc>e?)>Zpm!F(_cJADrHns+b zA9^l#w)jr%mTTp~#`5~_{zHH7CBK_*j<4(Qz3aUeKX`A!cWNG5*2w2QIllA*`J8<7 z`Mi80rqHmDes8J&WET&e1N7yCNk4m7Llb?idy8|#Mn2D=3;oz9TZ!e~1BiL`%@__{ z;j@vxb@b>$uXL;K2a^dTm*y_3evpkFp5=m>4`=;HC%*QROYNawcHxKa3)a*q`lwfQ z@toW9zrK2X#KW^~u+VvZepzcBy5fOUJb72fDB|6$6_1R%g>YxbwuaZMnc1*RJ$OTMo8{mORuu{e1^`)OG9pLk{a|zq-?X zL9R`1kZ-l_0c4?@{m}yXIQ`&gGbUOC>FylObCAw#;f#ur>OcB;&ib!rY2yE?wcayv zH5;s+SO1%99Bh6;9ahkC;^7w?9{oJpC$f%4r&!aM`u9p{=>a-JIc$ZcqL`VX=lj z8&v=4Tutp6TRm2HXN_*GCeIpOzq)Q5ZfofI48eS@yFkzUaM5Uf(nv0Hx~Gu&tpDm~ z=layWaWRmsoq6`;@9dhL%{eE|hQ7W0CKvt5ANyB3zZr{FF@eASpZWTK-FN5>SL{rv z4+k#)yH9K6Q3Kr_%0kP0MkPXP! z9f*z^{`{i;Bokg_Br{#Csb%VuzGwNn`roswJR*Lo|Gf)PE7>nv=$R7>=GlVYpfxna zI$6o3M(_b$_~*44IO{(iVg`LQr;YW^xmVCn6Yutrkq!8>JZ4TUSI6l?XL($o?{_V? z{;(a~?nTzkvzNX*(H<`xe9=tj>;cZRzz&^ne!Qyx=B$ZbxZ+w2prf7oX9N4x_UgZS zQ=Ml!bleHd`7BiJ_dEr^yIOY%_OAAqm+~ncH8j&r9MT`|DI;7m(xG#ka^(YmJk^Sf5SF>HOszes-4;cYMg7uhoAx zfp2f|9=!?Kf*tV|pX3n7YCUM4{Po4A|I1+B@4>0@YB+m?@=Ub?y{p>KxA5^5`}(J! zlhHhT(1Xv=r<-y9K4CG|`+vCJpYwg+15jss&Q`Ol$7*za^?BX_^v$X7`WpO+*Ykb2 z^A2FGW}jB=hi@&Jx~EkC#XCLNN|XDa)jl?G#>x-kNh_z!8Y2eO3G4dKHXn)~kiF5- z_>ECXMDzhIr7QH$s!(}*?_&+0B`m%re8LQ z{uP9y$szb?^v1vU73SE+oaPR|FYwd=a`w){diFJMFWT~nc{1da;FQZb(CE;)L5E(? z>VIc}4e+xco%CZL=TxngW183Jqw2KU)bqcZB@dj>|KIh`|JOIwH&ENpx}JAeQ~%@B z^FN*%x?+Qk;;%3M%(HR&^B*0^=Nwq0*O>zvvyF9l>N>i`0h;JdJL{8S=jZi(K6#Lj z?31_1!xr+Ed`Es`cY*E$aM;Z}8}3@a_R5*<-FJg!7h|;HuoL^?M+UNx5uER;tce+V z&`BJq34ER2!Rjvk*$Xe{EPF^`2apVfbMDc<4(>$=dI6o0%%qL!CLPKKs>?j4(k3{`+NR(o<92X|HB6I zg;rjf_7!jJtFGb2-fX8<_l(I`Y^jd$gEjfN=JWshL3_O)cSqcN*E6fyWj-9f!mk)0 zV{u9ravIN^=j@V4dlm=oG;pf_@(@1J&jxbq&M6BvH~Hf2w*cfEb%zd`F}s1zr zsu~B%4QKsF!@Ra@{et}lF1Vk2*BshvWA}>2o9?=Y(9QdPV=|y;%tl%^AQv0F76Y^X zvjO{w8FbFGV2-Upb}GlwRbJ*#J|-9Wl97FyqmO%zu|6Ay8>EwYw9rgXHu5>bJOeWh zlCQI1uRDmdRei1Q2Ydc!C-$0o;5-MDmwwOl)ql_VYW;utv6cTCTW0XZ=rJ@vqHh$n>oKTPybHfHr<;P5RIJ z*$1zwEB>1Eg(iEqPDl46JlU}t40qp+ANL_=2=BMZLk@g){aU=r1+Ufr;sCxJVt@9; z*WJe%RlnywUky{E@l>ZYOP1U+2pG2 zrW~a_*P;Iw|jG!6-m(9`DoMUSm`=WWuL6+I9Pk)OU{(UX) z7h`-$56{o(+4FzT+(C6%eOAkB#?|<_);j=r>UnEm^}Rm2?gLu5-5;v`?jXt4`-_(?oYu~ax8#q^d;T+^+c3^uDZL#KAIUfhT4=4u2kvzhun)%lC&xW5|V^8^q zJm#$NY46eFM-FtvO0osbS+}45;`=olRCk>NGN6qfTCc?&yjn4culUy7Y4)9B*+ndp zi=8!m@OB37ti z`q=<2HW0hz{u8o|^=!``_J4@K5A@KU@7MDO{rOg2R{!av@7a{B>Nh>;qp9WH0lEi( z>}DRWJ@jK!HmUai(E6-_&Uj9F<~uO+`O6uii&*m9c31z!UgwVtba#%5DKLG(GX~`% zwPwBpnD740w;s)CfO3v`c2rxc|7<9iIR|QDt^7vLQ#SHtAM4fm&OyF6rmH*Uw{pz~ zJ?XBABM=>}crzz9!mAI54(C0FeQWXqTYxn>>x1D1*<$Cgb%ygF9pkM}PJG1-oy0MJ z-kteuj3@l!9i9Ax?p=#tXAd6RX!`7rrt|I|<81SxSjNvekOSdq=!pUJj6pJjSN_FA z%y%B)!2KEiUN*_!Csd!<*x7K;v{xJ#k9`Ng{Z>xQ0*s6cK|j^UiKifIG_{X(vO~}?v1T^F31MXfw(FLvM+m^XCuC<8H-8# zw6j+8iAJ{5kLJ*6Z@9^TpBN_Jq?;V#gj`zknrof@&cQzSPvStF!V{PHiD7b~38Ej2 zAG?^F_DK%&bfE{@@jt{#0 ze3uKvLUACkR{!abcYdQ&cBW%}&|P2sa;8CNeb>1~4}Z0%XZ)V$tB2LZ>Z1Lcu{HQ= zIJ;yIJZFE}#u`~)Y_McFbARz4WE(ap4!UEYgHL`w;~;;)(PxM50PX?uof_72Jm@Zy z4T9z-4qMr~??mgl-~9<~{NojG`X*n{99*%iCa@pf*x~B=-<*5s)c?bI{&1&6Pm51B?MT1!4Ko#p*`=AYGnzF@yu z|LsSM?Z9cz{1c?7esVN6R~@(J9?Wn19o^&EUyk4p^5Hf2Mj!7p&RYZ70ggUdHTD^T)-aF26(dpI@uum z;!mgK0O6IR=^_W=uZC*q&8E(&dp#4M_kwC->(1wXZdfs$J?7ab1HF?`f5+bPIe%sY zI-b67JnO%^%Z}rWWUjMKff;y~Q9J^EscJ?`qiH8IKF{N^0R6TNi3g3dHtYy1BKtoxMOulX)O zwI5Ege8OZWGaK&O^vGj;qVc6zbEfEi$~FDqoQY#OkWObVob|sNls);~9KFETTJ=Bp z8va|>+2abYc`|Crj5lAiliWwYyE}jNA0C^sQ};bS(yr`__gkC&VqQFpYkc^jc<1NS ze{ZE7UU5%ew#wgliJxa@-kLb8_Svi6t3w*!*Q))X8Vjn&>TvZLobT|}eD#0Uc71mM z^?lw2^x?ZdqkFcV`QwGZmVD%8lb8Cx^rsj7p4wpfK%8WQ;=UN*pU$a18_N-D@_tTT zPz-5uzqNfoc*GChjiWiC7*U&wJ!A5yfp~})b-@1t;8Sz*6dIlN;DP*;il8W$$M-0lxLAZ+$v=FQ(3rFP+e55Av8ZF4lweoP5Jce?D}! z(4iArZ>|4wha7?iddVBlcqK~^p8Ug>0XIrt94baKwCzL1oo~^Qh7@{w}(dPGQ`{YP2c<|w%sdoF_!#?8( z_FP|$-|q@m%?HErxi9_EPWSAOPrQ@I+_VE(>A()oQD;F;IQ1_E>Cac{e>P9|c&6(W z3|GGDJOAz*+0dTyN${kTuKeZB+}+aq4}EtgIGsWJlP&%r`ROkP?316IgLL2XOINVG z2WI2u&__$Fe|0aIbF**Xc`umj_(b;(qR}3(J!GY;vAoA`;@#Py*R%T17VyNo7)f8Y z&0k>gMYh?i=tTAok-2m(0%5w1L<&#XCRnPc_-O!hh%Y7&03%awnefW}N+5nGaAxHh-lp$FrL`y@P zf3))Aw)w-xlV|(!m~m*FJYWsJKH6f9-qrt^`%nGZrZ|A_4pa?HZglCL9LD4@7yoPl zlEq&2il6%&)Vut?zc~Bu3f>#=nLX&D5x-z^#6RA_Y>=JlfugzCN14lMflpB?~(^18P6}vMaxPc2Ga)_sj>?J*!Q@NM^aH<4Lr-2~3-_aGJ9=273*PKO zmMh-Ywf2+SetH+z=%4XF$JIX1h-^^pE8nI&KFRS+ck)_qU*|SiC%n?By;nTqpDbW8 zpilSC0^4fzdUg)x^FRIN4>mw28%&v}49TB7#&bQ{%%P>W^M_}9@$c-&i`Li+es)WL zh?Qy{iA_oHg%e>Cax-@yrAGB-ezU%Q-i3uhu8-Ro@==NVk(- zV{qc6e|Mki0Ue8bImtYIuvuwf39Sm#e|>g0In?G@~6Pn`Vrj zGq0BOvv=)udKT|&AnxeR2IUF#*Z?eUvwt=YUiqsz`!zD=ml@Z|9{w|U#(4ab51%vV zrI);xzfb7Qt9#+Hf%x!$+~nQre^4xH)!yC%1iK5U-RFH^*7WLqICCu;Xht`F!DJwp zK0J9!Bfl7+i{@Or>z%qcwk{_)3*yEexrqK+{>$cIzQTX{_AXAQpOTZm&~6VsChf_u zetf~^!00;%WOk0_{Oq8PK06E6oB?q_fBl*J;{nDS6qjreobu_@@0^?C=x&=V8R*fv zwa!m-Cxlb8H~m3pyZ3H#0iWjcE64_(0kmuoy;+y=NoTytG+}-W2b?&k4j(&allaBU zc*X#E%ln?G%kMMy-`SvCAa4fnM2dquJ)~D^7dn>f}q-ifb7U%oB27mgC zzMgu|J{x&XVgq*5*i`)ZEFIlsAY*dY7wh`fW>7uuvw>i>Tz#+KT6-o9{b-*s-s}Lc znkok9U%q?oxi>p_58~{52JY_Y-oyrH?w>w7`}t)0r@7Z)drq2n<9ren1H}O!s(m}I z-xvq0uJ*M9HoZ~Cr#Q@lQ(5=Vv>1(w=o5&&MLuZNYrVXz6 zzGZIel|Cn&IA{MY`lCm8{vxyZmDA}#r`Pg}lrl?UX)Dc69)@hyK}+9nsOMiH+gZoW16Q=Un^2T67!B>-xdw zqd6ho)qdxeukst6ZhA9sYBxtiKuGglvO zbsuaE-DeG+br4@rtM>a|xwFoHGgm=DeZ}2r6 zh6j=%A33|u@O~CrcG&O0-jEOE0Q#oCoFXRX9Uvco`Jn!kC!NK4u@0JVJaMk(TSs^H z&w{fi-n|Ev`{>L@^eyJov)BrXC(S-~u5a90bHTZ$-#7@5@7iA07@T@4eyPKr}VD z_0KVx=61?F1Ls-le0>4`h$Zwj zvWWxwYka3h;Q1Ea;mBR~h<*F%FP73Fovw7fn!|hU(VydUz40ARc8X5A8|#Z*GLv0C z7e9BkKbx?dXFxi)m(J_}s)xR}Q6EItym#houHQIlZMHct#%gft2hr5GW*?q4W4g)t z>b}}%jqlRwV_-bIa=me)haV zcJpt2?mz8wWdq-x76Uc)QNKFrY_j>TxyufGpx@l=yOZRj=K0aQ@oeVN0Qb2cwBt|D zVm-gH2mDjFw~n13cF3;I0)FHmyFO?v7WDI{vHl5L2dAIwgLpQsA07MhO*FzWhBxnR zY$6Wcs`JEi2e6m^&eeX7Ugym3v(VX@@P8B2A0#)sC2x9=ZMLgBl=WhH;%1ZPu5eld z$x*&9=YN?vAS)YaVgPOT0pBYY1I~r-iWLj|p%#MVNq#ob$Tw}K-`;a=?x`Q$#`f^T zj7N7Ba+VMIWcv1F`tAVqpno+1U3@zaWDyVM(wE)Hn!k#L)*DY7nM2FI6JG5@8y_?@ z{pga79muK~e@yMqM&+LJih9uRQsjeRx`63TruxY_*RR$lo_;#Qoo%k2G>g|_z!~7n z^tyx2y?C*|JCCzp6Ia^K2ksTC@w*si8}ohkZY|siqcP{Ae+AJ|*UvTQQR`W!xcoBb zon7pw6Q1!1l3~iNFE;o{UYP68`ll|9Cm;Rh>4sM}O@`LlUhVh(Ml5{nbN?9+V!)Zf zFCIa>`+U4Pb%)*j|F`CX@SR0}8y7S`$Ftwsg!)tW#$fiMzdm1xUFYP~>0`(4!tNq$ zkACqTUvRdaW0vhtn~}XX@n7rb|8#^;zxJK$#?FGcB{TUyR_BTDUd4{|;&1eQwiJIl z)h{l^p0ks_LF?h1bLUz#gXs^3Yt8t?@&C!ur@x%^WojQ=$eC===KzyudIZ^BKO4X` zzRHKm9h`J$|4PqnF!A&oivc*!ftvT0yg&VZ_QipkEVt07&li(D{fzO2Q%%%QUj6pW zesj;@)DNEh)dc-X4{kOfv-V};KwfhO#6UKlJmcM*d$$+>&82^~nRDqfX=I1!H4Yc7 zKF_)E(%%{Ie}>8O+H?Q(dHzmrcGmv_T=^dTo;TS?lb_&$_2*vw*1-9^vipnf%iQWu z+|7T@B}eiFdpdpSRAy;wunv+$RF4#*DTfM1jM zB@P!Kb7V?KkUqu1i*5tgp60>&bH4t$9zS|deTxTkH9q(pH9=0{OT42E(tG-t|C?72 z^pm%J_9UydmzJ-CbM5ShbHaywXtJBQ<-7d&Rw$2?zlO%HEvvrNk9Ig99P9Os!wXJ2 zbIzV=?6BKFT(|`W%uxc za~_}Y=l;)m2V@8KM4xW)!8?C!eIH}%b3S>mVDZu(V|q^7(F(>3Y~O_S`7IxQ4j6y* zr+ibMIS+5+t~f|mP<2Zh?0Tyj$Si0`C@hx4^pv-YxKMfp-hMTj1RS?-qEsz`F(BE%0uE zcMH5*;N1f67I?S7y9M4Y@c)Vh`dw=Oukh^q{a15f&3NLTd*+({Nh5j_uemGQ^S816 zruOHyYrpT^Z-6%Lx44sy9_f=U-U_2J_csUD{I*5?;Ivcy_wT=d?kISt_illA3%pz4 z|1S%uU)9&@%@wTf%$hj=zJ+z;=Fn(QbN1@{f9ogDa8H;l_EeY6eJ(Gdi5~j#O2)=; zrrzdHIUCQl`fMDnE7;!Yi#ZpaWCY>*|HYrn4)1jS|FMAI%@SY5lYXsOYYeCUGiV=N z=LBB+K+PFC=fdl3wH|K!;C*iI_|5)PA7{#(J9z!l+}8ATB{FQi(b&&fp|C~ABGbG-8MJD~AKAxZ^mTU0!gUz?6F^Jw3?ztC^ z{gZ!uCk^M;-p}>?%iieGl?hh^$en}rtyNmBBSAF=&IbrKyvNso>_B!M3ooh3Onr91V!1z;jKKHSK zztI)H6XMmJ{`7ZprDN+;?>qeVPTc5R*&}?gJ*O_8I>wid@tFEH2g0LIt-0j2-W;6t z2~JvPKN{!!9HR*jB;)701IWeVN-S1WPFTHFgT&0aUXJT;U|HY&N1dMd&7&1waM#$e zC%*0f1HbuKzwn2vwtTAJ+lMwf6OxVX;~Oty{pR`h?3>em;n#lg7wS14HS6`O>*n;q z(--XUV&lbMA0FNynbPM|px=M09$dxZoGS*4NBs5Kt3I5wZ(IvEy5Se^%{K;{o4C%w zr|A2sd(=&~XRGW*_kIVd-!20C4W#~NgWu36FZ|DSc0W}QIsddRyK3aC(aYbyF;=hX z{vE&UTYt-I|IMm3XTCjtk6C}twKkzxAj3JAf0L)bF<}h(vw3`stqfeJfx3wvYJ{)pcH^wVnJ{9&HGG#br!B0%5Z*otaXFnU*S8LCtU7t>~nQuI8 zVBT2((dD}@`%IzU^qi@$j>t{mANl^@vVUhWs79#2)^=O*6TUqY4{pux^tBeW7N2N@ zZ@#tq!Dw|a2!5*n@$UY^=GAxebd4|B*asxQm-(?Ih-p1&E zs{h}*kNurRjqLvZL%&Jb--4j4R=o#X^Y^3tUbNrsb}xX37X3ceZ*P_T#LL&&kX+7{ z-;(zG&Y-b=zj?3DkvSY|XNyLA=Xml!!|ykm1JAMfejBoVcoh?TF5XYQ-a6(>xiflV zH(AM3Kgb4T?2gxb`dilzTG!IA->RgOek~oJ&07;^_Mj*Ki+8fiRd3b##FJBsgJL?l z>6(u5rJw%hzhVK7Ik1*JPB`h!e*Eaw{InT<(?)QT!MPzfU!Jhe{xw*SN+Bl>Z1uSn@*U%GX|_{t>IrE9p|t+u{eIKz9*jN&uZVSd-`IGZC_gT z=?(DZjxcK*TIYDuKl|Yx^W>@?c3&Z{{;A(Q&@niorGum^qd$OhXE4_VBK88+{o z=*u(FdN$J6+!MfPfbH$MK0NfykpVBQ+SnL8@0a9c2m7MQm*!s6`&=&%kOl8zwb&Mm z=bT(92E&h(Fs?8)EwIQunqU48$` zuloJF#`_zY{${4Xm*ejx{E9#E4>r^{Z`~aL)cSj~=&>W)e-3$Hqd^z;%Gd0jZ9(z` zr>@oiYTy-wZ@zt#)}&dVFa51aWBq)4!q&-}t;qi=cL4qr@Ak8UvxV-I`Kq73VlEw< zgFojQr)ThrZgY1y=?*VnmHX*W{?~kduFHGH0ULDxNuOKz$V1s+;-v?eE+?EgSN(}! zf8yb19^^lb9&+KS<7;Di(_S>>V)=x9r%pekzx1d3slPlBuDqb1+*6PG@<8|#w>@CE zS99{Bd_?y2cun7PUF>}I7k%5VOJKEGJgHS`ispMEckMTS=LZ_r(NIh4gVrb1*TQRT z@5EDw@$UV2&|LQs&rJGc4Wjeb`e%U-|IP%-;H~ zHx8Odqw(xpYyO1MyMyU0X36XBBM!`eY)&|9Kbm5%_?!LWveGM#?n@2%^E3)Qqb=H38zy2S)?{62n z8+0dNlk}8}@tZPy&c4{F_Iuu;6C29^!L#Mae$XOv*dWm29^Fc90*5s={;nYPxJ+tk(9C!nH`ENF(F!Nk0!`pt?AFaVO%pGF8c9qZ#+SBWUU@JyYR~cY;dRZoF`v&@sGB7 zcOuX^Ltm47f63Q=VApNW^gY*mel?H3v&eU3)Yt5DS8zZ0-kPiHcq5sXiB=C$yHlh$i}``v-~-+NW|a2Dh} zYtM4N{7rw)i#6X-6Bo{hCa%c^s?C4!*ZlI!_FCP>3yylMsjsi?IoI(v7mOZSWFm9=ym{;D_ILftzqaQl{Kdca zkM23RHQ$$t&g{1yj3)>$Tzl1rU+{DO)QeosZ!&`#o#wj$eoXfXvqSMo=a~!5qtB-K zaYFutBla}$2(m5PpvSIah^;lg1Ebk|@zGv%^1=4QBM0C|KQ!UWS2GtH+XoNtsqa-E zzC7Cb2hq15o#xdXw(oi0Gd~|YbL7)H$H8>!ETzZRVc7}|cY)pscweCQ#|v+`c+gRv zGe=%${w;ZK>P*)fzseoxp@R>5COg}`wejH{?z6SKJ#(H78qcpAsMI3>HY;ylou?45lz;ncfv@tzIn zUfwf@{*JRp?8WyAPC40AL!-u)`X|iy_LF<+cg4qCa@9wJE^-DN&>b&!v6j9khMe5{pDZ(=J$NxPwqNU{qH_d?KZAe zx959<`JAsGZghUZ;(=DY-6^zled6#rJCMCQfIdAzv31(OSUian4UO_Zci`x<`SeBi zFt!tG&R%E8IJ)H}czk9bImty%_Gt~|PqLB+o#NP-KQwt?-2%oVn zkv=;gEt$-d<@^5dPiz~c$7|3#GBRgZzRr&3(J!y)*T`sI(+{sX~QGoo#uN9pp@Lq@V0yF<5*B(bkH&@c6#9`r#Pcf9^957xer! z=b~-zi60f8%$4(B)BM=qKNvHYkpR^sauAl}&dXeC5MC|5=02`m7FD z!>jX+tJz?+zWVR^ON|e=_4f3hf8Hz1g-;Is?g`E_-=|0Zb*|aScl)Outc$^N;Y%J^ zG|bxvM{KD78oPHFz(@SzDZV|2$U|(Wp=(~Bul#?H?WeU*9H?!bLF?j0T$JzjIa&M3 zqU94bomcXbkq`MQ{nKMVGp}{$VCsGLt^c|o{Ik2R;)xa>>aJR={^O_VCkuJ2ep8mmvIyZSF*@ugg@ zF6fh2{vrdr%TKfB>YHmmIOkgj(Lq=4QX9~g2gzi-&)$R2-1n?M<(YQ?yu{?rvx_Ib zGbf*Cfv&|dT=IxR^K7~8`jub3YisZHtGm^Ebyv-9+_OGB^VM^(I^Vq7k5@FJJt2D5 z(XZB@w5@edfGY;kt)-)wI&DC2aiXa^>SpJ_K7P`i54F4c-yMKI;j80vul$1s+p(co zcP7!Y7c~Cef9UVM)PHhTGufXX?Jb_Gx5mz-Mqc%L=kK-O{e-Xab)KyMwm|gxpo1YNfb8L=Z!LuKJ zYjcdwoTry@JoTg7T(G@r0lCf7qn!Gh4f3x&&b`=D`}iMieEEz2dhW*uKlz|Jbj;Z^ zo7z#`KH zk@#ohYOq|dRpW!!XFvQP`sg`h;w8Fhn=fb3zdauVlS^H(4_!Rzqotd^TzlGpzUDzV zWF!m!vS)Q!ZBu)z<<;j|)2sj1<{iL1I$}$!_JhWJ#ix^Y`=dG6nwxik-bI+hi~K%g z$p-R@KKq|GU?VZ3i5c?f!?h-M=JnPT;KmA?) zU^{*GqMxQu7Iwf-y}&#Evu5kx&0ACV=Urg#jpl^eijS+0D?Z8BJRGg~fmeN|mwtKKTI=XEhNpkR*53m0XFq=Jyow2W+}U93 z`M|fQI8Vpm6@O>dy};VkC7&(`(BUtd0+kU|GxjP59l7?e&6#yS;&9IYtm1q z6VhJ{#Mc?kr+jr~1H9x+wG&Rhq#IwDug0qLSGE3Xj=$|i?tZmyeux zvdn!Gul~s^ndaRDA9}EZxYeiQRUD*m`0Bs=K<8R5Rc}4}&$?Ybp3mmp31)pZr*3)9 zS6lSataghPJjrIhwP*#S88lx%S^92(F@AWVn+@nFX3jXUzR$@xH}>&|`YtZi{~!PQ zU;gIz|LEV}ePi{XUD;Wzsh6Hd<#YBE%hk~jdF{J*EU5eTgKT0SI&jJreAs^H8BWi< zbP(%en>=a>9muNAlDk}JpL2}{9Z%ioc=KO4e4@T;?&t1)`sVQ#vzq>|`2HW<^^7lk z2M}(}m|gHClRa#uj(e83UNfFF=+72-(4{*72-h8eZfKKH3{730^_{n!qn1tF#iD~x zwq@Uqv*JJ;r2~J>dR>1$)Aw9IVf`!o=D_N{KHF*JU_ZY8V}IozZolvIvSc)$jmStB zI{Cc8zB@bcL-=@vUk*iAJfOjE#y*!f7e6vMQ|9c0V@|UNv_BeWAC9?+m)*&SHlJvC zgpW@&%_kFRU$vZm@SfSAv&FCC2tIy26VX)@i|L4ebI!3=el@>swQ%fFAIYuXeEZ>| zDb~%wJ6rSZJ?S(LqIKGUU)lH02F11`@MhlAMaZ4 zJ)XJ`YM%ey0oa|d?CkGkB;ScdkCoMV5opE4|y*AFmtrqjKTCA4# zY^^_=8VpAa&3Zg*Hheg0RkYP+IM(=`jC42OTF?K{3g4cqIrCFabkYsqY%8|ddfEa1 z88h7(`Nf+3^0Ix-`ZxakPkr;Bed9-Vyx1pqI6L0O`@igRusED&OCOz{`$6|YwGuv_ z{8mh}zq9NtS%af*uJdSq*Z+0rpsR*Y>*aT{(cgILefHytSG6BB#+PhtB0j~MKKVK6~`rV;{c8zHjJx0iJW+bE`Eq@6_jRJnMh= zFZSWH>|Y+~*@WC|z?S=+%hHSOHQ!g%s?WjZ)$DL5+@D=M=+sA>j$*01Kz=9d-}w7K z^@TcB{$+#wUH!A~&Ia^lL%x+K#S(maqg4(Di$lJ!#zvhd{?~5}L`T!t;GEFhoG-q> zlQtRfjV_p6@LO+h`m+bzXExa1%UHS>OJuUgS#{rWriu%EwDe*JV>v6 zA05RkpH@qwJK^M6A4FTe0GlT#+38ImzU5;&-Ps`ga+tkroz9&HJjgj~eR{?pBzwM9 z*EP@m>b#l{YTW~TCg3jLIot9qou*!szWHQ2VKUQ!-rZ~2`dR(wWA#?8FZR%uukLDm zwKkl_)o#9Zro<7MTR$QC=HTo)xc1m9&#>i*Z+s;a*`vi?bfOEIbOX^l;{Z-~-SCb1 zq540ctJT@Fowd5>@@h7Jus?ffYI8KKu@T$`xn*5lK@IX~y{_B{YRibM3- zLt~rE`tO`PVuptEkKUj;8adj~pRR8z=X4x>EPso<^ zuKpY6kIn;#NAUl&clWHicH2S6zr^_@Rsq3MQrX(YK8002fFK+LVwXU`QUnV@lAs`n zg>5P|mSXH|a>P=#3>qND}JAj&@|Fe7NqJ!3^-~B@@kYf*iN+)s6w`jjtAMg-gM!%nm zKYX5gZ9O))`?EU7mU@V9c-6{{x7W$xjGRQ{YiFkn=I#LKq9rEN>we!ja@l|K|HVDe z%QfrXBlS}Kpk7|Dolwv14q)!zY<{;$T! z`KilCbN(lXx~C4)lYQ`{D`?;~2Y-m+dN{i}4>tHh-LVe(jbyIFeGihS{tsSRkA9#* zrsNgR>}A+@7G1Fc_dPo}FDBu;V}ws{dKze>F?l#wT>)qA%87jE9G~zZ$cLc2K+o>_ z@W2xfw9$y}q%98MBon$*Mt-wqgYGltAKBpA@z{wC_^tj=9~&YC$nW4spiT>^koN?4w?)o8^uFcAZ|#cZT>A*XW^5PqD!c z&XUcrZ_f}n*G|V@(cuU82)T@=eKAfy`Rbbk9o>iNK~6bzWsrl1SN(vWr`~f8kDR^x zcLtr}32meJV+YTDtJeE{)6>i69YC)pD;eSUKH$C(o^#z5^z|>X_oXJ@*gf`emK^wz z(Z5r0?_d|Q;^AFt>h#{6|M6f?XVKtqwAryb!d`6Bz=My}v%b6Vxf&KU=aVP+wC6Vh zXQOw&7ySG$z9rQE$wy{`Jjq)vB)k3YBm4>XJsUVrZ}|0p@ksYsXXzXd_Ta~vQ)14& zSdR59e9#$#?N0uT$3OYa$wkIJ>^qA$+ScLPpZN8*_QLCo9^*`SWMh-!nhnTj zyk`UWegDX2=%aU!6(cX^+XvzIA$o zeGee_rSt0le2e~j@BiYEpN;$XTnF+a9@YN(YIW}k>bJLcpYy?L*Tj$R+%u;$8TbRN zXQ8$45c{n4?*GN&)$N1+&sG=r;D{6W_>n_z)k}MquP58nZ+kDVFT-nIZ&z#kmL|XG zQ_qHDPfbnd=ANN7c{HEz{PPZwtj^k}8=c62zPY&Bx!~EYsYjOC|8K83@xi`u*!afw zi7kCi-4xsEx_5sx#NYj9d~ozB{iPa1cXRLha?RiV`ySvofxrFx|LzX;-yS^t`2jtA z*vcLr^&-6{AF7*brT*`EIwgbk*1a{lWWp!8(Pc03KzDUe|F;%1a>u#;zDG~j$Lr_j z2Kk*aeCvZZan1X02Zt}G+1i=%$ecWQx+m~~zZJN3?%0OB>GKg3k9r+@vJIHMt0`>E zUURUicX|C^&+a$>e&+|pLU)1I_Uiro)d)8_eOKsrfxG_sA6!|F^Vz%R z98R`{>zTFvIq)ZY^2}%O4LF@oUT4tlUh6JEw)bps@sHl{#ex`MPde}+x_Gg;bDjjd zWBklsbgi#G_1pH~IpbYj@9G?S`i>DUsFvMWJ9aUj&+vyYuIOrzTc5!rT(wvp&9%9G zkiBl*JZI3l_vbUWzvF_Z_pWS^5_TAPym~ra*}OQ8zt}dXKb(FCP+Q2%KTrDYJ+>8RXykA6YuEAqpUtivU-2;C z|99W7&revd|9k)9KmO0(`&a+|{(l_!R%BS)55GG_u>Q|CWGVj4`IWqUz*gqute=aw zkL=O?M~-F#dtw+(zGr_l&^DLD)h98thx?~ICZC#u2HDUs?8(Js2Cps$A1!Ca*`{mF zXP!HcCKz4N9)4^5%+nzd3Q_vv0sR>Q&A>jc9!I zj1J;0{U)yS(V)A5FI+mv2j}TT&UD@oKAdtME<2)yrhZ?X;b$Fh@|e@L`IM253^dg) zag3Mw9O02=o;TmLvuiNjgV**izlsCCWe+~wx?A&EG56W`f3(yg@`3U~uGWvAAUtsl zPtUk_{4<~R^y!@E>Wq9xgWlaaCcfT3`#-(Pspe|%wt;6o=O<^Zzr@^^@Bj64eYM^U z+OHSS{yg!W(eu;|wAspDIG**+-+d$6aOQ}YJ@c>ie{m&V`6=D#wQWEyF(Ou~h2;Tw zYvqA_;Ev!szI@Tky!Wfu;!d8(9Wg%ftn2;kQ2*Ead++!6gx39iAUolUCWr?9H(y^l zg|AptcN^{ieg99Va@%_AZjFapL4S7^_;Quq#KP|VVp1%5uJ_ja^>Te&|8H)MCcBWm zZv{Q~t-$&EzdL|C2z$m~oa1SbM-GsgAKU?wnT^EKla6zb&B(%@efu^?bJh_xip|gk z>3}{zHQd3P2l>T3*jygl3+nsL!OjPxT@59JAtsZzT1^;q6};k34EszC;IYHU{DFr*reH^K%_fGCPZoS_qPltoA`P z`SdgWA3b>~*Vurc?U6SblNTQ{k=GFa@W|>8?in2X?HjX4nS0(Se_Bt7Cpq|%9^Ngj zqv1LHWFxDACmV+DrG~wL6+e4>q6^9%5+gZq1j)vDz$-$%?kRV_jdhwr`JZ)g!oix)|zAeYu|8 zd3bVLtuvSNe%}lK3DS%I4ZO&T7Z`qgT9c!^(id*+JoxOmZ2*t`(T=`7aZx|kZ_Q`_ zxA)Yi=RLr@9?kybmM7?V=6gN=_}vz7JdD}%%_mLt8lL%<-Z}e|C%y7-`aRizEyW0* z@`rq|W&`rI*3;pDdSvf*YH!0C&kel^p1LXz>-+P2fA9OAc^7L~lj}=Q`tsj0Ajj3? zC7=GF-`D#=v8lG){CMdk5Adhc_P;eAi=k~ zBl(@ptBdlmzRs@kX1_T+V;j(ZbL%}k+h@B2fMg{D*qm%+tPYadGx3T(C>E#QbAIU@ z8u-FTkL}Pw({LWN4|*mh*{}P2-xlr5?dzj6x8^r;JDaRQ`!|*jUhmM(J2wYj?p$!4 zB@=nThPV=oAid}#7Vv;G^`3Kd=*GYiLkt?|lhbbj>Q%An{i6M=$169|GdgOr zJusTx0fP2D$BX>(o1NJJoq5*W9^3}{Y(Q^1-F!HG(0b}U=V}uh$b(z!4lWvK?RWol z0h1MMz31$EZG33*3;TMnXxtb)&+=#A|IwNBr{3{+(w`m3efb_LLJTwE2i z#i1I5zJBUieKm+raf7}b?b(L)ezC3JtBrGb2N3Vhg&T|(dGK&&5~pY-UpVs&8{XwxSGzy6=Z(9A@0@45@7s?@cL0!F z$?A+bT34rIyL1Ad>VbVRLbm#W*n}&G%*8CIXTZ|~41Cl@xF9_5#QM1Y@4P#To=<LAu+AQ~!5YkkevI z{G)wyge}jo&$e<+fA{`w=5xe3!YpLhr!ZQ$U{Xd_{-R^+%8-9CW-})!)yZ_vqbI;N1 zTLJ%&g&gKL4$hja>;RJ8bGp>e>G+-v)W~9k4Z0uJL(skB{Jw(@d~1C8fDQFQ^N$9Z z3^d5ehG>Z&HDL~Ps>Si}yjbh3SU^vFfZ4!v_No8#ndhIeLH!>-8>D}I#@ar4)T@Sk zurIg&<)8fP3#-56tOm(Rb2dN|jxl?`x#!-KvTbMZ?@aS#b0+z+fm|r>+500KsA=N5 zTF1xJ259d=mgF#>Iwfa*E(UJ?pBf>y-EH`Xzu+02o3xt8YsxY8X9I)W<%>8F6b&dBz*`&4ylhs@>$3PvUFa0A4nL;|yQOgW2!vv9sSl-38`zb9JBn(Umiung2#m z&x>z;+}Sxg_XLy8+4{dddeI&2Vvx30or>+b{mCW{9d>ERhU>irW|XXFW)!+o#+qf1^g z$bZltJBcyzV-$<_46#JtzxGf6)?5GA(+$1cH-Xk*_agg!CxF-8q5Fb<&Tec=hQ2|7 zH%WF*XTa7xlXVcmL<#2s}!+z`c`;gua zHt*To-_PA0x&!cI{%dYcPBJBP{;uwcovHVn-Yo^%duVr0OD4Rp+^>F-Y+{8CKzh)JkL48nsrQ^`OE&NghOe^$ zdTc8OgZ7d|9(vZEeR<+e4|K%%d%a?Saklf|o&Mj5<7``@8mUk&pSr_GXC{{eCdHE8-R2a@7o6U^$k98&w?w4 z%5~4#g%A8&H-1N7z2OgM(Y1C?FRG8h)yHT5*Zb9XfAi;^0qi~i{`J4{kM3|cKr3Fw zHF^5(FJ|liVz~Ez{(~>?s_*pLx|3PYho@fPN0*xyClAoSd2#0QLcEAiIP|W6>*e~q zcY4sip6>7Zt^GFz*yMgE7`UBR6FfJ%FVLa*6yxS}oc9m%x&x4%t?A4@ThFbV&19zT0NfBIX#`5s?S_xGXALACFrwfg~j23~aPPD&ngI*QL^ z79;S;EKb3vSkDe(0WJ2cPdJZGzxg_^p76u0(f08sgS<7^#d`K|^ZI(dfDboLYcQH} zk&NYF{Q<<^AXhS$Bm6}F{0cvvH_QfX#Rl|;k7qp^4>nMPXHVMCJ0rIGji5M{OZE-= z8EB#HSv9+PJoh@hA z+&$kKE%~8V-0%Od9C4;vBFD|~*gV^VujkVVPkqX|=kw0c`@b{Zxo^!pbFyq3*b}FG zKsPqv2YEI7aQ$`mo zKivE7__8w{*@IuV4ea0Cf8{|jtERAz-=*M$M<@2u`^y*hss_79>tkX>{OM19*LM$a z|EvG&8S`)d!wb4Q;1_MOv6Z?iX8-E%o&UeLGjH%Ud7U8}{?$S?dxC!-;J5SN`qSTkyF+;19Y9U$4vu$2ypus~ zl=JYMNeA|M(sSx9#`8D(@Ru`ej3%i5xf9v1MzNK?RNwC#9w>*6p3QlC;CuTM$GrQ5 zIa!Oz=Hw=4^{@Egzv`ZtoO;hWy{@f}z1YrN?$txkt+xiN&(#M!(NW*n)R4nsroKPx zs&7-(n4ViVmtX1xdg#`J6@dq}Tc_4PI>4H}A zWjzNu@JyZ{oaXc>#^jH@*YoAQ8qsfmYQXiw@NYE0$!F4^@|b_r|LMdh)A!B!rTQ_$4= zvrl|Md+b3kJm_|HI&*vJ9kj>(;lRgFF4cc~_YU@5zP_suIxk)fy%>~BXsZjp0o4EX z=tkcF{6;SK#VeUMt>V}|zWp6QcYtKIj=y@r*7&ERy>t(fy*eOo@G1|)F?rN3e-C5M zM(PC|I_~#>zoYwx%~x_tzeZP2*Z+IhukVANc@Jk7y6OAA1K7W|JNd}YWUJSM)!O#- zWHR1bcx+!k0NEg&K{){rUwK#`5I^jO_RWb`Y}>nc$pht^ey#r-Vq0E=X!)M%J$LqW z&)gO4iFr0Rw|8lrcZB-C?*)9F{qYvxAb**YlTFwbPd=e1ou;09E*|&}t~?@#!N0SP zu!nuPAi8p}9_~4w;QaeO^J)b8hHuOp-rw|I`<|g4PCP*IRZNmYJ;hgzuJ*ANIqkCt z_!R5e!n0xnKDuHV9W?2xme_Nj1g)Lp6VMudIWC^q)=`fm=Ij{F z4WFLHFWf1cxJ8rvY>-Z0vjKa;VY6xkJEE0d6XI>149PShnwRd&zT(xt_t*c`i2mE) z*7Cjkb?4BY^!9qnV@`MY*+BfDDF^fGXZpXG2`` zZ@+*2&7b<`eNS%U#U}RpCUSpEc-6URpc8%f)Ntw6`%yAFlilbbhO9w)=?gmt@{{M} zHOhB=w7&Y(`|XJpXKya?_ZZif=b8RDdw=i!U~~T#fKL2$>7AG)FZrTlee?6kg?IN5 z{Sy85>i_)VEL)Sy9KCG=I`bpHkU{K-A-d`N4K_6|PUH=F47h5LbNZ?NZ^$X@egoiR z{a?@T8-TSwfBXH3E&g`KUBMt9+Vy{Os+&*m{>dsY=q&!<`oYn0>P`>61y22w{La!9 z4};yUjp`eD=DWN1eX%LG^=>xQ|I2ZCF4nE}e1o6p&^H9n;dut)QBIM;5bL0Qac?H)0>`f`J3!qtYQr$tGO5;Z}rdI^I{l$iuG)9^Zw8g8?*mc_tm*#+Z?_+ z0=DJ{ICz(5-f!7g+)QZR=$SjKbK+afdrpV?82a(T8?T^w{s+lmkA3(^|Knddkj@)= z21ooG-Q)4sOVCw6gJdxW8}nH<04EKxN^WP+HO$)s@#&1`_Ie&KaPoIX4@k!B#)f=K zr?1(7Kg$D<{lqz1Gk(8}Rdc{hzG-RjpG$)wz1>?8DU_cX{vN^3z>F+^HYo2H~lR_x=C% z-#lUmb%kv10@mFF&=a@#M1w5ejp^jhp)RPC&L`uXHYy>kx$;qepuB+r#y?>Ri8-JK+w;O_r$ z(oJ1)77a1BZGe~fQ!}fD@a2KK5MR_+cmIc@Zm2(aiUToM|F@=({=VP)Xa85{_4>XE zz_0(C>-~7C{pzN^DQ0``H}~#u&>OCpNhgp_Q+IYDyWUS;IL^o?afhaUFTM=(`oD9% z`}gkN-PAMu>+AJ%acd5*{;oFkHvqH$lLrm?E|%~olR1BYp21;nI)skJI&>`NzvTQEnsl{hV^B<0pTX8a{KXgB*2~R58uHG#Ie%i>c{L5s z$z$?0pK`%v1N_O1hMG(#{uL+bydhjT@{=9d1nv4Tx<)k>uZI0O$A{k4t9%1TJq6jy z=v;ef!581oqeX^^XFhvi{HJ`*ke?pk+W)f`o3JBVXzxLecyF1eeEcN747sTm==ar( z?g8q-jm5*)nS7n@(VTG0)SAo&dUB=yZ~k8YXKOL2*1^dK_|3jr4dhF`A8ox&e)7As z>QVz8`KzYYy}!Tx((Ahufcm{Sfa^?q?BO24C+MkHblUI#dOu(H{f2*L|Ca~T|7h5gpUF;d z`NUqc|Ial!@G6)4reA;0Ci8Cq@bH{n92qH-~97?2T&8bE4b_8BcAc*OZLBh ze62mhOYP3qd}wd#x##p|8@TeAO|8k(JC8aderNwDPyJsW^V7ZCpF9WouKNJkeV}gx zPcR&34QprbJI0F#AKm-gk&~>3HF^1}`%3<%ljr2!y0^YLb?Att{`MU{TI`1|``Qyv z;=&p<ztN*Jt?0~i!y8Um>*5Xgy6p!kA{;U7iV?lLD??rR&hg<(gQ$E-K>91bgnsIu5 zcLBNH`#)S~$P%5&gPrLo$IxMqo`;_=>i_jp^4Qxppg(#B95t`^fA7@#sdx2yZP2q@ zi_bYc)J5mZ|De9uncn%Gm22G#+IJW5483T9a)Mm#iDzd!k3Ko$gN7KU8(j22GKsNm z12vF8#Xmj7qgtvLpdlvMu6sb=EuF)M9C+y8-X-h*>af1uyZ`V0{Xc*EyKlYUJpj}@ zde?`eep%1E0r}J>aK7_5ulJKt&X9`^;-60C_SBtS^*8ycf67(wjB-gl(Mc?dhw?*? zsI|V^)&J|;z1QO{HqrHtE3Wl>y&WHr|Kae5=V(_HAus=w%b*-K>fsye>Fw=#{XYnA(iTJfF4oAx z|NXrhIjei*PN(Xgb6fY;@&T>-gtK2_`7ipv^G1G>3-oVoZio+Zs7>Wr`OntkNZf$d zM)v}E{ECkA`0=fE{6PCbbF$)T4$|M89-r?2M}P6cw(Q_68sx~fXsfB9LHDQO8M*u0 zf3l+Cta)e5TThtn)Hrqmo$uU)QBb8U{M zQLKu`-T&qK?R)2UL-qFN+3Oq{_(gZ}FgK<==47S6K?gL|J$5j6AKkiJ^O+b_-`Kqx zgGW8R9$Wv=|M{o=@anL7$sq5ljq&XJ8NJ}i zwe+*MZE*ec>Ww!Sk1fQdp4L0{+dKN}@Amaq{Z>zAGx-Cb?ZpzFcpGr%d%qqH7cV)C z#~b}~&#=}rlN%Jjohdi?80~ugg!bX*+w0fE51l6)kVUNO+v@F&pA(B}ie6gZ2iYe5 zoPpzv9#40&i#dJ85ZCqp`QER_`)~g0|9%Im|BHqBw*t<3Ms~Fc4|cEb2gR>D02%4X zwtTDaljEuXvx`3LTfAP^cW`+puIl;VoYVQY|M1J-?aS+a``7>d?IXTqaG$8J>;L!| zL`p{zJRE=NzBYOC3>n#WFiz zo1Eux*^s@^$JZQeSR3?5ul)%-+n)Ot+&SzSaNyI=NEUV_3mH8pFWJ!`r~U_@98>Q( z7f*2E(bHM9(5bfK&;IBH&E>#^o{_~~HAHN&bA8`>4$m55mOSbiI`~ie=6KBS5XnYn z&&X|$9-r?2!v^e-4amTz*&vm^JbUqu%XFBmQ+fLulc`>7giK%G=wtcz-;6H6*J!RuBJmr;G)%U6cU_-vU z`>T=nZhOw;>&@edAD(lt6&s)-zrCZd0a@Pb|7@>Msc+&_EUGW~*K^ezYj|v=_sW_1 zy#DL|8@{<1a0l=Xq^`S#kqn zVaQeT(_0Q0===Z001bO==)Nj{<+8K-wZHw7$8f|R8G5(Z)7=5s1@sIaUUDH??gG94 z_iq5|`(U)ixU+0hom1-!w6~sf&Gz(!D<|27t;DYyVwkgAJ(phmz@A3DCPb&ve)ydU zdd}WK=gd0~#uH!iT1VHOTE_;-o4?tZO{}Nhb6$NG?*?3ULkmrFwl!woy|q<+J%c~s z)pyVogS*eSR)fvO5g!E0PqB+0+mitgu^dl6H_z{I?U9k(AU)JazPt83GEKeboV;+@ z3cj=G(Db!bB}$UgL`BA*wA^l+~=LcD_N4S^W=AT z)K~cRYc`-W9QupL;sD=hZ(0tLM7|_~tJr z;OP}`*n*GPK~CMcIsCf=fZ~^Y$p{y1xlInV=(zpQ&-HIL!x{M`Zso%4{q$xB`8x0L z@>`$x{_j3P7P#!U{|10v*jJpw!yn)3ff~^_0#Hox8Cm22=$sl#PV%bX?iA_BcU#Z7 zmJ{`VzF-%0@KQ%X_0Qd){tvPxh!37Y^QU$DLG{=?*!~ktm-v&>AcJROfShbVW+Pju zO>nHI-g7RV&?5^Qz!fvmM3-;)DafwY{9z8~_KA}ta>!6;4gRn12ibkk+XJH!U3}ve zUwt5X$ZHOt+~)M4|7Ut18?a~gcNPsgu_wB--;lu`_}=i`S$BGM2d!}FV$8MqCB#6i^_Prud4DZ3EBLLh)ZM_$~-#cX9MveC&Z7~oxY!QxMB-FXw8;vaNmCp?cxES_$E)V zeLgVCFR|M2LS+v@+$;6X=x`#r!jIN_^{Pxk=N^+f&OyOy5A9(Xsh z8~WsvXXuG|oD%bk%cz*IaE@6ZDtzx9|1Nqr*1k6F;**TrsZy_wB#?1X;-m zCz|dNdcQ$`F@0n7*q%()Mlr!QZ0F7ZqQySx_XNctAG3`doc*7EY9HEivicdsuVD|4 z-x<{f5WNjOn}hx4dY(5&bJlMB_$A1f?qKBPr|KTv#W32R>Hp}#!;78yJ({z(vVS$9 zynuK8a(v9svyYprbM3LW_u+Uqua{HX&?dZ|NnM28*qn(CtGY~20U8F=`|*ZipmqLmHgqBy!X zIC{Qk1NMSbtXs1wTJPE5BU_N0{A`Qv?*HZagko6^y5HXTIyEF+C)_$G2PkjJD-P&@ zR`+1E#p9C=$jcw%5DvenFSGxvReG;j>A(A+Y=Niylsmw^2OL_-5YBx^J8`5x;Fo@4YumscUy%tO{`SO?9(sG~!{7hw z*Y$oryLLM?)Lt~ubY7qCySyHz29OC3e%=YxGqm6u=E;K|Jhn&g)`auCUf-GI1f3Vd z>4jJFk#*a^GxY0~;>Wo6-&g+^C;BVfh!1^VzxTI#cv|zNnAaE76S1Pc8r>D(8Q%BB zCA|8+-f!NTuiYIC@{viN(ud8+&Bx@LcK~&g{&dAVIoMW){RZGU+lb@a$B+DIk{3=i$#zu3NaZ*x92JQp+7Tr}n&-(0gbUK65c zul?}pgEqc!*bPr}&u-3~8cpBib=EWfcJ?XOvjrK@<8L|U{huD{K6|4J+B5hJJ$rDh z%c=VIhU{GY^zN_5Huv199?bL6?mo8VuqI=&)&J?`9!sxlud`0)4dJpATy~pxAU36I zL%h-1u=g}??>&enz34CQt0(QV4SRW}-mvo?$(0;rsV~B16LH`kTK~s$>)skJJB4d~ zYwV$gS8-r3TLh<`_Ga%Fw{l0$>wES4`TpOYJSxt`m=W#lo{m#*JjKV%TQ=ZF`BMLv zGw=2P>J=NQSzz^L_EmFzNUfuf;dgs|o4?ei*{{`ZbsY3u-6|i@GKzgXt;vh7Gn*b7 z_Wf3%{x-2Uim#}FI=?Xv%kF3NA)(NJ{$B*KR57cl+$dkU-w?` z4&aQM+izp?0KR>6@qzCgdfg?u1K1-g|31lBMZ}$H$HvRG~j&6n+_k9?@?nh{|vA9jQ_n?>)xB2_M{?A8jG5fDIzRucL zd-%lQr>A*)LA7}g&+r5JmmXks5ic={KR%wRb!wnGO%ArTk2d+N-?M=@Mvu+##qZ|) zizc5KY~8b-gZySx!}7OyYIr6uSU+eb7QT@OE?wsf1oKLJh>l=Y}^(C6*GUB8D>9d{b_kU}>6%Ehn;Y{*4 z_hbV&;#I8lKFB6F{$KsyIp0;t-F`2 zHfc```1gTueLEnZT&|bXg-v?*r-Qjc_UZuMbb|k09Z);TsfX*sJ9KZ(; z^$S0PEZq^*IyEqP;d)-(v);P5miOqx#UDQ-TIgD{HOSuaV`Fuv{FGl$b9GUEz>h8( zc=xPxV01t>1-sLdC;s9)dC5ga{<800mv7k%uXNtfGqKJFMl|suZ~Y~Rk2%AZz1A385 zUNpBhrf#kIz$kCZYq?$T54NZFh;gIyllD{3PlgGTnGOd14YIK7_P;egeBrs8#lC6` zo_g}^t?IwLy?yuKdA@PN7r$yAebCgq{q3K;xjuYBd*ujRwDCZv{vV8=eC<2I=1(6s z!6&^y@kFm}1A7LU!Y7AZ&`0avy<6+m_VirO%U?B#4e4#5Cua5GdVl@e9$fcr&l>gZ z&XUJKyM8BM`gecz`_8+kkkkD{tkR3`$w(Hoo@`K#h!wF|{D}G9|3T+_-_(=IqK48( z?-RfHfoQ2I=z;K@>AhZmH+;|W?*GyIzwZs|8o%ou)irvlkMsSXeqwXZ0k58vwQ{cwB#zy1Hj4Lo_oHr)a6rK?_!7kYD$*B#;Z{@1rH zxb9DSyLu$f$wEJCy72`(IPMB)Kk2vkZaf_Q_^A7yv*;S?C`ecRlt1~;95ncVZN=v7 z-OcOo^?GYV9Vot>H{2QNPZso?A)x7A!i7KIed(@- zkijso_ukrda+{y!IVhLsVBdNhd}q;lt1Az8fG0ZWqg6e~FUclul99~l%M7PJg4?mftr-2aebiTh6lOv_bKJ&(p{zApU5|88Iz~>ht=3{~s9U_6>EU z+DTs{Tj3Y|&HL8pArt+{N{3&ndnbR`ZR>8``+v5*{rS`xJZEp!gRS}G{=NResn<_f zuZE|$%X#+zb9pSctNr4|o;4ib7R;Tk|3@!qU%bH&&z^b;W;Ze7Ilbl9&7&jpwn6a= zW&`nd^WbNH@%~@`*Z1{TYkkiUtIk#f@KpcNj7~i|sMj|K-6{Ca8ABeCzrIiB`mMA0 zCli=V(IOWcI7coJJ+!wCJX0&=3;&28_3-BXc>nLWd-}oGd*wZRwZoowQn81Y{&oAn zxdZr{KsnYO!27?uK=1zZz2Cfh0(^Y&Ae%wn`(AXQIp5ROo*_@_|75BjinXn~HT%G? z|ATUut1@zUOL3^&@)VyboBzHOMz*BcqrgBiii55A1X8 z`;hN%HaO4Ni4BS$^k(nFYmVwGNEWq#kLXLz^mS(9HlO>>!;fEUIOwvAT%kAH*~bGf zxnQp|^WRJGJD<{tkDX8F4dIf%Uc`oMNv7_W_!a~BSvR&`&ZAkbh{gK9->o*f6CRcpno7&LCYo&L`re6AOxVJ-Lc+H2PnU+~2*I-q``FZFkt?5JPW|Mhn< z)O&w$_I^D>?^mPLHL-(VeI6uxYq}Y}Rgm2sMh#R4%7d+YYyK8fzAG8#Y{w^P(pMj@ zM}zJO-oM=g^lCQH^Y#CRyyDaNlXv!ibM!CmL+{=}4sCwu-%+ro+-7%mj$G^sNB@>f zY|c07^ATi2b|F*!U(He5)Q_MVir4J@=K0w(v03jIBXXOcZ=VFG>t>3c)KhPhZ!OuqeiwE{bA0PbKjg3J=jyA0Mx_*v+ z@~M05Ylx%jyXWwn>6>@-z<7Z2pM9c>MlzF?+~Qr0qYpcf`Kjh*6ZU`V|LkdqwOa#@ z4Z!TtcK|r(lZ~(Q!^Ue38l6Y;zGJ*-J1-aHi+yz2g)P#X&Dg^lE<5BS=dJlYztWGM z>AWHN#etX+*E0stW7lE=eCoSXzxbnN$j!d@@Av=i0O}1~a*`d5XiocQ-}m-BH!h8n zV{*H?!-iXTYjzaVv;VU{{`K4qJyVVx=iu!5b6)Spryean>1M4~;oBXcdw_axZvU-U zA6ej|WfbT3%;EX|(C-ND0s9URJ+%N|{v}6#rth`^yQ&p84^I77pT%IYu4cipSKkjN z<2`fEMMIwu`}Kcwd-AMz!TC1;{CfNS;ooz(?hI&?&puo5m%h3Czcsna4|(96K6dlq zLHBGy4>>3o^>)yECVQbL4(j!KbU95gec0axu($rNX4U`sk*sXzdA(n(naedXE8g5A zjNTWzU*L|~&!eyFkLegB{R-#KgXAdmS&&)56; zXZC*eq23?t{l9t_ZMDyNy&t3}9{kqe%i$<&C=8ynX!SW_N(-O(=go$6tKY6)m!X_}H@+uX03# z&*7ofP_y(1-~H8^%?Cbu_Q|2HIzuP=nbT|PZf;K;sWst?AvR=BLyw<5-(2tQJ=|K~ zb)GGv(;WchS2@K$27G?Q%aDsR=gq})lcWt$noZ`}V0KG!3x0ZwApB&;9M8n)& z30=K`ZT0!x`^nPq{!f2;p!3!bPEKy!=h_)O#C5SPkL{B|pVz zHvn-dCdH_D1RLVD_y1^uYK6N18};7;)^qz^fL?5kH$O~WKAN*3z1UP9yHkqyFLC+h z9l~6mu^;-qPl5)2i6u1XT>qba-kiOR?gjS53I2N&51=}XN4(6*0vcjz)@ZrKhHyS} z-@_Xn`qKeFc~}iqPx+-`tcc~H0;i)I!oWrXg z)89P0$pqh={n(7HK>NbvsP6WFPr00bB1%I^EuHF^u z{lS^%Y7Ja@R*cYR($02sFPYj)Ui{Sw^@@MVB5t?t*6hgEYLXaZtNH#v`?VSd&vX7% zm*koplCuU{@QmHtt)KQMk9h{I=<;(lMz1EPnisxW+MU7syZ+!jz3cx^xnM6^=o!wl z>6e)M^7ni00P1A-0RNqx`akGh9v%G9hhWF=qu;5;69iWzyZb)Rc~!S{aKKi>fKUiPq$ zj=5MTi*ExHl99c{+Ef3x->C0{>_%Sn&^P3*fxf|>=<9E6r{~-A{tr)_il3>=M{}`- z9=q@fI~moJ>WJLtPrCE1Gv@4Q4T>Ey%gu6i_WkYy!QTI!odaDsYKozj;?W?7_#gv5 z^rd$)gK`QEn}JWUo?Y-36Z}cf+5hQp@H^j-#jwX;vrqG>^;7S6Mm&;BJ>RhBAYG!} zH*fX0-cOfwM9Y~VIX$z-kNo-;^AGvHZ9sqi%LeIR9@YQt-&$~N5`;5*ReimEXUHz* z=x-f97#(vqkk52huhi^zp-S4Y;beMGGb?>;Zf1l%dvhY6~GTWmAT51E` z=%sdU-L2WXx|AL5v2%5*9t-OIXc@Cd$t8IwzvV0%;`yoHPkM6>_twP2!&!EdpK1(V zjd;(q=JkK}OHMk`&sj2U8zd+B;ixO(jvWoX_33y2+57AN?p)3%uR4XlJwseK#|z%H zrM=c5nb<-8c&{hR?fa)$+ zm#hZgqoqgbExrMu%a8UAJxqM6`PE96u&>ps`zzFsVE^?yTL7Z2qadx$eO#@Ap+yFR+}NkWbi~%tkei9_6)r z5PPu^+v@%7Yu~*;cB)2$*5cNgVvT(7*+E|MGhF`Vdp1b-x7a^Es2+o! zJ6k@>>H1ajz$-pLbSIQQm*xw4mOf~sCx$?AL=Uu`LCd)3hirUjj}7P~kL1ipHt>wS zXb4GOM+;cj^wa*^O(>c%{+J?M?zilAz zuMIxPdp5XvaO4w@Y@09eC?~+=Ah&t)PndtIZ(>@{?|WYTzdiNEGjT32_%Gj1y7IFA zKlx8Nl20tl)84n_7au(3g8IpJYLnW<-s%xvYE(US_F8><54Bk>koV%R{71Vxz&^8S zI`3Nun~@!~$G@F*CVKO{xq1tV4|SQ&Vu@~Q-cv5vqca``J=k9i=%ae9p1R-vcQ5vS z4i8VGx*(6+OCHb2W3bO0;||6l*kzy6;rU~~9vKtJ^2@ni!!*^z814k>lQ_ZCbGfRobqDC);Jn=6n|eKH%-)+k z4&sHs!KYZy9(ac99^kB)L5qL! zK%X5zzVJL8e&JuaEH;zJ^KkQ@J#pDHXE%;Le9#dWPrbi0=#UFcM)F$IBmHm8A6uvM zhHSup;)*Tw4d-{S%ND%@cL$izyfv9xvn9Fc#EyL2M)oPF4-#g5EJy-oQZrytMm_6mY+Nmz^ zvFBTOc?L>dX5&o^gKCAKXZCb-ObgAWWkS2&a-LX z+oQ#4u?g90F z(4GND4A%F>Yx7{SOi%fMK6%t6HuO6RyU@iQfIeb`er)tp`agR5sd~ZRH|9tGqc1+} zkw5V=zqS0Fb1xF7aM3c@Z4R}-8uV{>;#KX!SM0-yhG+GE{M)a_Rd3-{2jv@k)c-!} z|LjaRu?OE-_KrT8CJ%h_i8(xa80I}g<7-2GK?8&vG)D(LvRjj5(+eMNa=|m_%k*bI z@iSw5&OKuCC~V6@e4L)})-(TENl zvO1$qv6nepWrOmbuczK~&IalW8^|*@$iL~0e(|s&oaDvdSu&7E+^QFHqxXJyfcm~Y z?-~2szw_B5dw2KBC!SAP$iO!CX8-43`8su;^ZKOvbZvcXWlyiJuc~2B-vO#wLA8vn z4K{U`FSgjg+HW1@wYfdD%ex3%zrCtU(NPPd{{%h9mwcdjGU$*_ARbTk03Kd?mp-cw z(VZO)y;N`QUAx}`_C3H_&lNv&XUmRtwb)J`l6;imzhv=IZMXpyyi8JAgSG;wc6VwB!}~Vxr!z&x%d; z*Iq-;+J|qDtvi|Ck4OD}&eekCBX4y84Y37&R14(<-{Gyd$t8CHG5U9Y@#VjHEpPQO z_Z#+!=lmAXJz&G`1AOlppVa%+w`v@nuJ2xbfA;?FNpyijzHB9aW?p|Z$6HNswz|h& z{9Qexzns;R!n?>n)j`sW$G?hQeEY-^bFA=-GM2e;Z^ zJhDOZPJ6Hu-JW7SyVU!{M!K*89tL{&d<~W(&KhE{d2sF(n?0LwK1)Z>#Tgi#EfX0G zIDEpUbYi=YVxE1G3tV&!A0T?@MZ@nxaC{Y-^-Hx!EIK&C_Mhd+r$-_>6tgcMtF#KpfZq{l2L8 z%WpOEj+dX=JHFjL*c`vs$rMa~=jg9Si354?t^HpuVpBfRbM@BVt)F_ZJ$=|v3+Y_# zAcK0twr}tD$2W4+TEACc;8Zu9N0U?(gx@LAN`ATCJXe_HXp3CkDkI z{qSj6ZyS&S|N4P=RY!`g;*nj%MZG`Ro_Nu}@YSp3fSw`tGo^+qKU^6z5JKl%L!4~?F-tQZLyMR7+e-C)wljxak^mMT| z;k*l&_gowo{%byo1SsuN<)7d_r@h=inUZ^cBHuf9Iv(|qDa2Y)qN4OcJOLGIg^bG>Ugo2=x| z26SVGkMh3$FTddCqhc#r@F*UF_Kb;R9gXe))l;zC_Rdevo{7C|k4Co6?(v9s&_3M_ zb2RY9N1n35NBy5Y>y_S7`o79$?9I=!&zc+c;0fDT(+qb3G{~iv`}ce9_j*3)-Cxdo zh7a7%_HH!k?|FUSK0Tc89QoB+HAuZP(BAa`o*V(|%lT03@umK2bO)H<0PO3#d+5!5 zi}ws3KXeBWyWIicdG3sX{)Fa}zV+nWfA`lOdFexTde93`{g-~$+Xn2f*Qo=1B6h^1 zI1*>Y9(o2lH|8CH53CJ*=y+?;sWa%yuZF+p5}W0yeYo|0=jnhCy3wA{oQ&-y9~;=0 zUwViB?+zl@x9)Qdzk9lGbNUjQ+|BhNeZSuW+y~s@$&W6Z+6pdJ}|8K|b~{rGvGCJPzJ#b)H3x_mU33(klMcX0i-{x^MIT@eG-*FCrXULzjy zoe&THy>JZhJEq9z#RsK&t2FWG?nVmlkq@1wl;?B>C%7sDxqyEp9{bt#3(|RbIv#%b`XX=*ydTzab_vE>6 zZq$F#B%^pEpBPsYJ$DBQf75(#O%`X+QB%n$M%-c0)A#_C>jhImni%s&*IAjxpADe^hKZls%2ek3LJyM@MqaH6Vjn)_MCI6=R_I^Kp ze~4f5$Q^Swki+PzYxJp4Z~xD=-08jAy+Q66Y$4C|U-bGtpdLK)46b-F%6&4Km!H*x zi+g&On#2BN>|KBMelpO_=-oRx>85^tRO6Bh4W1E*rPwck-Ofnwz9=Xb)WufoqMBLbMN*RG0sKzBvJ_G42Ck*=Vu{ulNr~i3A?}5&_@6+FiKlrt=V}frRWZT2D z_KJh_-@M-2X9Kp44yZ<`Nq%1t3-ox>-Jbr-uJiXvy+SWlzvYlS03Q0Vp1bb=da!4~ zIj^TrSf8GI&Fl5nn@;PVwN_uriLOC@y`N6a^+A1c+oAphPn=ly9YBqAM!d1BerxE_ z_4e7X>*4cRdwmOVUZ3{6zPUaQXTIOtcaP|~x#x4Q{vQ;3Q&v8u6I~2*HlWM4fwekt z-;>YZmZ=5BO?|9f6PNN;Jb>kHJ-9wCU+=TiuagTz4{VP-_8RCI^>*|w?FGZT&rZ!C zA0LTzP+pekabxn?AVc`I|m5Q@t~;N4!RL7DC48YCi79rSW7ef& zV!}Cx+xorvd_HmPzc=93``AYgh*y4QOLw>T;(XeGU-^OF1{-t-5JPN$S0j6X$(oF< zJ?r_N!)Y)3R`*+XmVV*Rxx8zijC{psuWS89y{=>oF`lMWP@vq)3^E1xHhd5BR+paCdSCC>Ne=Fy)#$v=1gKQ(#A-j(aMXTKqy z4ZdmKI-j-Ar-n7y8SsA7d->Qp`oU_UJRplY;N7Kn0Chlr`zi0oGd}j5Ez}3S-rw`| zo51{U2Hf{hf8TO&)Dw_hvu$htUBp|fUjLq--N`I(=_3X=|L?UHAAH_#B>D&c_x{KC zbe*F;u=#v$&X?`+OY^zk-p1cJd)+xPY4AgR3nc$%dVe;Q-|D~r24&yBdIv@)J%fBw zzj23e-aB}B@7X5#!HN5sIbQW7utDc~|JDEK!?)@9HAqiAUmWNe-kZAv;Q6gGr`r>p zw3_GR;NEWy%K6r8mi_rqo{0g255FZ2;O;wsJV3wthwt=Lyyspx8%`X4LwoMcdHQ_@ zb`HH62lak+{cHaBy!U5u)88oRpM3|=SE|nwnm>)+-+E@<{4=mVv2oGq?+QG#*3-zT zR@VD__jiB!OfJyB-lT zntUKV$UJpOx39&4SdmBSfSy@DK=;<#QGdjKxdD==JJFg()b~G|x8ExF z#uqDmtKO>_Y)1~U#h&>^{AFkOazd<_=lk%%=KMULH+QaqZulFK`R3cg=k#jcxnTSJw$Jq}n2lNo<9}^= zayC42^A~x|`Oh=+Z?S{ekptZ){XLqPFBiz(ym(Xxyi2y;u=t(1(_V0%vDd(_XYB>; z&-q&|eDzbd`WD@P3N9XUQ1ABLzi;~b{p|nU0ebiM`@7!=oTCF@eQVDC6nUS{h($fm zd+@Cz$A0t>2ViqJYR$c;oO8SM28yyNWarJno$y9n>%zRt{fXWFBa z;a+334;t=0MmXgERql=I1RCg(n+=k=7?^QDhTH#M_lErEJRjvZ{)50ZJW;n)vmgNf&v zLBI5m9{kRDPByZt)BK~xekSIhaKumV)W7*VU;c*Po_=e;9%SCVz~1b~PxJQPgM8L- z2Z49#pZ)ne#6ItgJ@5Oy`*&w~((f~SY9af|2Y%I0^*8(C15fqdpu4^7V&1UljM2Pj z?R5_Tjp)IfXFC@p1DUL^-Ol}p%zoq7L-@=-**~N6#t}o}Pmk(-x*QPy&F|lko%oZd zYKM3<Oj>XSXUZvGLB_J+OF*Gu1{=ed|*&#BK( znU_=PLPz!h=TL{mn7w)&IjrkL?6Uj$+g|qr@ZiNmOrr~;Q{0zJ*711b^WrP!zV)8} zWFvIs8QHhr@{woxgG}&S2lv^%Mr-fswee^UCw|cmXVQSf7xL>#uW#9N7w3og-Fy6z zWB$9fWQXID*>nyxE@7#u+eS&n$2F@kVq=5%ts53vc=4T^u@4xNoyFCY6hda+rygkRy-|hPyqJF<=O`73HM;@okPlft0JJdt*BLnD}-mk}6 z8|u}>fjfs9Z?qR~`#oz7uRZhdCrmzaz-0$=nAiV*s{Ud~EQ!0BXT{u(!SYY<4o6Ie z_n92%9Qc?Ar&dNMIAt>@hko!q>cCI6-T$lS#5&vQF<`@cMeioPw{%}q_u#3Q;hP)o zhVa1lo}hER+XbTqZr+myS;gu1viZH|pL@-{Tf1MsM(??A&rhE;*ZcI$i}!+X@BVr2 z-OaqgUPkNaciuOTH+tv%8{b3wZT^y}v-ZD7@6U$p$;SFg{+>RXK4E`8h6m=id{hh+ zFKG4*gb$~4V$FQ=weF00_pfNX3)%l3cff4Gw(e!y3_e&zlGF z={}*C>2=Qf4xyhV2Y%+0j`fzRCeHC$<}NUktV{Ugxu7wfKhjG`Htmbb|If(;f&nKIOsp><86@UneN` z4E_hjn0c|*I=qQH_r7&L=|?kO@dw2=*!=$o-&66X4h&zn!(&C@@~ zXUYDnLbSa9>#MWx*4HP5YaJAyb6roeH+%L+>v+O94@NuKK3e)enSWK?JMSHmPI#1a zd~I&OJ@bY=_=Y{c>lx_$hQ-f&5RKv>Xb=8gC!70Qdi<&|nWr9m{u!KoX0M|Gel+hn z-S-^LUsc~9=YLq>hXsCE;Md&(YHNRk_Xy8#&h8#P({tw9{{4Qx@Gj0cx6iyiA2?`V z`h(Ul(T01*_pblGDdFob(6IK6Zo~WCZtTPNH-ejnbJ3i0fA8STeAXI`{d}(d9$}qa xzwWX7L;oKZ_+fz`7WiR-9~Sswfgcw5VSyhO_+fz`7WiR-9~SswfnQ$>{4a9u$2tH2 literal 0 HcmV?d00001 diff --git a/img/lr.tga b/img/lr.tga new file mode 100644 index 0000000000000000000000000000000000000000..d89bf515424f51ef215ee9297d9aea2642df6cda GIT binary patch literal 1048594 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

    CHy~aD{Y^`|I-wNPZ{Eth02k;a= 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ν~(kGdhriV7W2ICd4Jm3^Dl9=@yzuly=nJw?DWRT9}gT491k21e33oi@5sIO z`EV-kf35zfttakqXZ~r=5Owca6E84 za6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84 za6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84a6E84 Na6E84@LBi3{{uPc<8S}~ literal 0 HcmV?d00001 diff --git a/img/map.tga b/img/map.tga new file mode 100644 index 0000000000000000000000000000000000000000..43f1950ab7e8a07005ccddda9bcc9f6bfdf83e79 GIT binary patch literal 1048594 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 literal 0 HcmV?d00001 diff --git a/img/ms.tga b/img/ms.tga new file mode 100644 index 0000000000000000000000000000000000000000..97b8861f2c4730db48eed6600fa0579011514a9a GIT binary patch literal 1048594 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ͣ|F~}}DNFVAofdd2&cS|R)2L4|0Co-S*ih^( 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 z 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 DdG-MN)wArp{k?+qjJ&uKQ*sm- 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 literal 0 HcmV?d00001 diff --git a/img/qxz.tga b/img/qxz.tga new file mode 100644 index 0000000000000000000000000000000000000000..b80a448400e63cc1328b20ec1c06e058c071e6ff GIT binary patch literal 1048594 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⁢4w3`qa+u?~3Dp_oc}rRHxXz_mpkE`QAHo zdKbMz=k%4Qy**{>gY!3ZaQ!t_@3i0JVDo$Llo!YW@2|jDc!|~A4+4Y0<3S*M-uvo( zPX{0ay!&i_Hg);D`>wNx$VEB;UEnA$aYNGHR|w&bil`emH1@5=xBr7xE= zUtfm*FOhk9_tuB?(3&<+)`D2Do~$uz=cZoC(az*X?d-^W6%#lU9H*j z(UtX)E{S{T$pvZjfOG-xmeBiHU%X@Xn&Nub-Z}Ns0epW$H&CB3>4X0HuHQ5LQYXIG z2R=O^9o*QI6W@f>qzwXtz~e-~dn@3594K~P0QYyU&U@{eEOZtic}afkz4yg&cv4Uo z8AP6t6=c)q=~Wj0A8mi~20xNTuGL4@sH1&^Ynwu{BwW*2($*Q8Eeiu!L8PZ`*c&+ zm#v#$>9+~iRO>FCAg)%gYtO~r7wcMI;{D^9TklTqPkMk@8RJt2T|yr3q(HwmX5;jZ z;&_2x(73EmHi5pXXX_fP4{U$$hIOk?jeq?8mn&rM2Z5)7!0{a>7jS*PK<_`kmo6rI z$PKc{GlBoKJ%92hIkWkB*%$8F3d-SDvWYyBMy^OBV+3+Xf7Hp|7x*CkpFn5lIv>C` z(YAi5XUn7I6L2Pgd~@%)y2Qy<{nMU6E+&VyT|e}Jj7t{YW){`UwuhVctAjq^+W54W zF4gmiUmgPKX4Xqwchp1E&CF4~%3ot$wRY&3uC15!Xltk--TNWPCx2_Rch9|Geacf@ zn)R6;ppV`k{VR9}q~T=m-BAay&aE|T+E@ke4}U=KsCSGGppM=d{V)b?>knN;ALtCy z>brfD@R@iJ7zCak0=>&O#bglq$etx%;&C$Jm|s3Jh8)?Pyspy)$Q3e(?C4qbkR=83 zhP+ZQzQ_N*H71{&1t7Q50o0|t8ZepUGqGiIcPLjj?{H)3x%q znN4+*(`+jBX#dz3_b?g$zYV(gSH_&QzO6g+f#b}NIXupP^C#U}wqAsIUhI2Wap~@b z@)pzo1kcoWTp#sG+A$p0u0HOyzH|WZ(++FB?{{mZZC&8t2RQ2h>zQ}bJL;XH3n){X zbp1MxRas-|-RPNE-us)4sc8@x1Re?jdOUf=#?c3UcJFw8eeXZHLtc@YM>#-7kR#*= z?rpCz9;O$RjJQs(`2RNO-fx+FSJs|6!D-D|Ep=~= zm`7_^Y>lw_Tff$rd+|*n|A6mr`OKZO;cv6&=AM4g`_?)UYrpkt?OO9bficlk3`}r{psh!$BY5=q!bH<$E<&%hMf2^MFgO1M|~p zta10!>9N+95dV8#NEe9b>C@>0V*GxYrmS?|+gLXOU4V|DU&nXOb?epob#1-wcW|wH z@0xeRIx9%C_N=?!0ev?XdA(C~0Pl)89l&#APIu6@@_YZ`^sS$BLg6&=ATS8LS_qI$ z-g}&!+;L3?;7DAX%xOL+8=NhYzq1o_he@FX1o->W;DMSIft z1oTlo?Jw{J*ar~EwSK#ZZAA`}on&h=R4iT4C+8g0x5s`S)}{3-pK|fL>+Yp_-d?|V2Y1q=tuN2TLgk9n6RcT! zfS7)8se`Le8SMzYmw20>$@?LA53M!tBHQ1(w%)yi%1EQXr#HxZ)&*91b$Je(-gWIA zF$$}R2Z2H0)k45~?tS}3xu30CO_mMhqCvRH)M|x-{Zsrxf<__$)&z4 z#-nrq_I~>S=>gK?QtfGXx4-(j{QxVLmo8u|$xZSv{^w6kmd5}3D6cYfkQbd*9IveU z)MK3NC2{i8^B1jm^4~uK=H6Ub-_|D%)=Kjv&Ds*1PwDZs7&piHp1GEW_pNIouJ_Ef zfY%HB0@6Ge)T_MfOI_e{k09M#d3tude%1p{obEmGu1Y`Z0{X0se#Y}#Z&-QbeDAtv za1#7)ko%vBsc{e(1RfIt>{IVM4kI77y|DN_n;|`bydW!l8;n~8@>0NgFUDg+SuO&>f;Lge+V!8#Ww_<`BoqK z8vmygNFzV>BmPeZxQ)ES_w^qJxyU;u9+B*f4)@<#J&+1yMaq1le9v=evu)Y6e6n-REwynLm zl`cS5;LhX@nYrc1$sRx25p)Lfs6a;MW9%D4@<(0T(=K`HOk(^`2PoJF5Xf+4=m5B1 zpbPk&VD&5iTR-u}SzeN<=>TG71^w24?Yd6~xXsL@Karv2u0E3Wx2fxOECVa^aE-Aa z?P&9i>u{m=T61w?Yr~p3a&p(6cP)>)>3-(lH!R+vqn$2q{9l|7!0$x|=KmLebpg7l^(c4`x30X_z5JCkrZX1HpE3LW*I0#9=OFMj z5Fn3|2V?_IBUjk`;$#e265ns1BfsNiSiVJRbOCwECiRiG0+~n_xmIr+%qKtx@J&Gc zFU~h0pK|**%IGF19e^L;3m^T+voC+;t^GTJje|_a{ROfc_iI-kGWlr#yy#42Upj-u z=F&eh`$g+{9rK6XHS{H%XMXX$xu=)WYt#EYv&O9@al!g{o(_Q1`Tf-=k851cRyPJ~ zO&)cLk2-+o`2ocH8yy*hU&<*_0E?9Y{-PSfeK>zo9db08TcBXqe z?op5Tj#=~a?{|6StDe_!?ai16fkEJA1dmjv8NhSC9WY5d=r06Ktl@>l-duT?J}fZ#j;T|*vz0CgFQddX@W zP+8?YbMHGRV|7nv-;B!5sr?4l0B*uH{LSfoY<`^CJmY3Jz(h(_?BE2$Y5d1sMS`onGXPux0gwW=(mAze0I$4*QzHSz&SvDv!Aa& zGkXXDE~GA&2nxSuQP(#{ZrxUm%xpyZ!z@{pMFUhtmOYIX%NS0-lwh-jHrW2his3 z-_is8zaV8V|8G#|7|1|!R-5Fa@P6$gehlRc#^L+{`CA=i`eT{T$J7s;_30n@{_QWh z77wX6{}SHB$<2${x^AuQxnJLN;Mf9w=6g4XuBGE`L0xgYdJ5V}2f+10`MU2p`#=7# zopb>8)rM>OsP~aBfcw>@AJPQ(twS+A!27|E=G_&%Q;i?~k7+$jUj~6e;PD|q29YQ1 zV)7)uKJ)tGJiLc*@h}-vAcM%)W9*u&C6A6aihK2o$t-QM_xbzT)bF_HY1*s;pqX!!#}Y(XQj_? z|J{sUdL^vP4ZLs8dAHQ&$2^-SwTY!$Yv#@U-iKeYYXO(W(XR16{>QudN3<9qL0?AA=h1?>OHvjW0o@{ztz3uuX&v9`+eX@t_5|kBiFMUE9 zzOF2poDQIz_OkWyzP$i}AAm04%(eXLIr<&)J>ZsoMsUUa^yDwD(RO`EPU@HI%Rq+S zG>2rey2w&}P>u|a|Fr=RdC26O>Udq#U}bLX@0bVtdJQbJV;!1X^Q8?snK?aj_2ryD z@7`SE^!5gW{uCtNru><1kih(KWx+HE^Cf2Z2H0)kc6UB1@8uWJ=tMzt86Ym!0mK zP0lBfUC$07!wUGF>?c!Q;{ySgvj3IWmO9QpfW`Zr2hb+2(_z~}LPye^g|kMCHlZ|{!&>ASV4E^9R1!x-rjf;4#qeQB)v z|GKWZ8TTMC2;3h6|Um%)K>WO;mTWI^tyZx%G$po!!IZo~chiwTZX+5A;F*)G4+e%+b zbAyXNrSmi3fA&7#LgxVRf8Phnn`~Ex-&Z~K6Tb_<{*R-{>SQZ9O%Ldqd$Kiugu0UD zM+DWO4efeQ)QuPEk>=Z)wbrDY@AlTE3G&3l ztq0uiTA%~SqrACSuh_HdaE*iI6OMiZCGMU5zqtV#o_FHx&gk|pY##; z`3$U4I%fP|`{@GOwvQ11zYgnb#yAKJ0xuTqxkiq(!y@unZDJKmtkip8R zqx#6w&@Es46r~rdlg%~ue~5hG128dvZ~pX8Zof8NPTF^K-0u}mJoE5sr+JhX_p|$3 zfB4j#;ZS+?4d9mCZF&IS)_3cT z9w1nc^Z)_($NRbgu<9V{T>-sN^%+z->Tb;>! z^~l$pljFupW*^ggPCpp?KQ!L{Es1RZ&wS*=`&=iS&DnQz-S1U%V_jKm&0*_7`__dR zkFu|`m*s6e;?%hRQ{VSD&U;0>%TPSD}U?%rnPy$C{JyJz##CtBS6jwWKnW1`AG({_3%EM zT5yfi$-_98990Idl9%znI@OKmefP(g?{@&~0|@w@?T>Svm!bo722omlOWt>XjLA}c z+5KN<|Fn<)^^Ke+hs$rS=?7%2e9|xHUmAHn{{Od;fd_rfoYDi$5nQkN8%g=z?f>{D z)VgdQtqXIGM+I|*|KsFr{vZ0D?>+CSTMPJKkdOXIS8ct=?ZwuT=beLfe|+Yi-fLaf zt~%965BTD5zP&%7pY#LzjPz{#_+PAVf@kjGZTy$(a_$F#L0}NL1_ES`K%TLq$TxgW zwn@YLc$xg~ntwdrB@2}iw*PksvzW851mDd+}=_K;H#vSUz8SFCmIK(r40q3?o*Iz;UHSm5ab>g&7{MG+v z&(Wv;`d{06fbTl5i3^@oe|9@=G>6vZ(Wiq~&7E~4k22=dTzBqIew^>Q??MFS=YsdW4a|Q2!Jjdtu%sjK+_0Mzl3V57;Z$AQf(9r~3%8w&RzkRLmUa~o`*I*su$hg;>m@9K6Sa0~Vd)%JgufNt5 z&i{iqKL6~uKk@0U3%HkGJ9G+bO1`*V?A|)w{J++)Hq$db_ikA8=RJa@2k5I{?W$Wy z5AY3cdJ67$?YD#|Z zf1T~OS6e-F1iC}z>`NF6`F$OvAAha!s`|OeqeH%DkV+7g$){}W{{o!@KAM>?! zfTahdyR|kwGiR5!KYifapZ)b`|K<0-x&N=!+g}eGN>f&Ou-h7zExA0>^Iy$uIH^uan38<7BNg z+)vht$wzs}L}ldNw*8Wa?CxxDWpO+Hrw0_Iu`kuHPUir~NOD-2?N!WU{N@(_<3n?5e}@0Yyj)|< z+Eh1P!<^y$csCt@9)Pbs_pCDJP0&}IZ#}T}UH`ogeeBtHzVx*nT+;#gj+C`_@Vv6t zuizU08^34PHv3fOJcvC{Kpc@OMqS-;Z6f;DEHYDd8FbO7tlc&zi%uYu>(IS32_ zgTRX*Kt3g}$gXX3FMdxCARBQ(GLGzH|HS{~=jQ(<``G;KZ}r6EVtJemu=h_7paYPv zrQrZ)1qJ)3e$$5>#`OaK|Ndri)lGiW9qO}~Y}IeF8egcd=k?<#fAPO@B;Vte7s2gS z%G(;i{rJoo0P~Ii&9(Ww@A2YubA-RG8SBhE2(Han_hNIa3=TEFf_&2V{4egu|3@8w z4}dS==mW4GHczj*l#l=Q!J4y{t$k~(zPOjZ&#|1oX|;ZOC&c_o=>qbq+xYaEe(B7j zd+YPQv7Gt_fk9vpxGe%Wcgv4(`2dN10bjA0m)TzR9^C2`FP$qlC#w%E?rFTAiwps^xI3X=$hy*Q{BONVv*zdm)~&F|zt+F?edhm@?Juvj@4EqhGHY5WU3>cM zzBPECI8I%Iz#uRP+y?@DmEo-<^zyUu9A7u$WOWgndzCb zyPj3wnYUN{>`Jyi&Q?y0`+ZBzf6HFWr;GdX4L>tmdeOqZ@6?RbU@+E)hUsKX@Pi+Y9h49T8XKWV(m-+j@=v=|D&Rmml|AtMsDQx^(NkpqzI{tk12t;@5e9 z=_$V-)AvE(bwI#xnvqrHWV}tD3G5^?6HkzZWM%wMH`p?9J->Z4x*&dAmulpQR`|#%8`mrvWGd>+_ulwS3y5>+i9{@j&{B!^upRI2Vbq26> zYl==_JnG@EXS-+r@AbXbv~;}Q{=b-h8~^We>wdoG);y|Kbh%4*KTa`K)W<`Pl1)>CgSGzq$F% zxqtRQ9gpqL2LPY@8bdxN>%n{;=goW;%#(Fke4J;#9QU5Pwy(bPu5o1VA8meV*3(~n z<4^YY0IeZ=0Cb;p)A+xAtoYxWwXWIyxZj#r#vTd2$NM*NzrNiUZd1=7FbE6+FAIS< znoLXwz`=9?G7#63lXzbqve135SR@d`Nr)(%Apf?E}as@ICQkS))h(m!@9+ zD(TiX{+A9PI0dRxAcal5C^{WXI#qd;sJjJ4qfgGM#|z zB;PCJo*d8ia!rP7!!x!x{wHJid4jd)PY)ow<85)@f#Ct=$k{jnFSu8C>D?bzn0zq0l1MKF5mc{}%SKELqMk8C}TEo&~E{Yxjik8#2s#`qM^Qf?*rZ! zOS6uuQy=dGuc>1Y7z74^heRNmoen_u#r4Taayc96$p7*Qo|DhweO!KJixVN!8!8J6Rj z0KBgZ9YCksrA^QAz&;zk+Nv+)yu6Kt-HZRFOOucNc>H~!YhwCX>Na+B$p4Se%q1Pp zzQ1oY?(4Vz%nhuqp?o;zh@NN8^h3P!t$7nSpUthFl2})}?XQt~F=f;_}ut4CLe6+G&gbrCI;hx@X41_SYY636Eu7ryqmBATS8r z2Lk;@ARjuJM<$AKHkrsLKqj)C$jUgCJj{3BHCgF7nXO)&k85yo=g^a-nPt!bFuk);q5nZ=>h3x+VafYOA|{oSA0XxCAc?7t%KHv{CyY54{+20*#GYN1gzEO z*!Y#Vj_m=&|8!gH`pEzEBzC{@g1vun>-DY}P5D7!5Euj=BLaAsoFkhBb`*I?Zt{te zgJdWEB%j$yLV3wsWyo{salRPG$fy4F1+tvaIJ+P3v+L;%e^Yt!KOMk6O#E+7&D&ku?Eg*ec`-LD zm?v|&{Q%3yqn+l*TohVQbVTb*9(k1&3+A(RL8q`+WPH_$_g#z4w>s6M4cEqLJ#YT! z>t6x?%d1WIV(VNz^j|?8!hGL%*A+752Z2H0F(Z&HCAYU+TrxAeDgI|yJ2Qpj*=n5) z#IXUjdu&&g0RS?o*~d#}A*vfTdsKHI-|f)1cB1$`mM#h1E(w76Y<_u7g7 z-K&qTpbq`iM`LjRnCIiJeKU{!=AUo=@LgyB_+|M2%_H3J+LrP#g}s=c0lx0dfjQ0( zU=4UCG@tQx`ORhgFBbOtSbBhGbVYU2AI-mV&42gSY#eTFviWhmHI46$-97=mVDtZ4 z@9{sKw|cCl`@m=F7z74^LEteXK#mIJF|LUJ$xpTu{>Pv4u^4)doY6M>VM30ao4`V z8@KWI82I^Ksig8sl;A-**6X0Xmy`qpPvi>0`HTqjKud z9zDapIm~gXSlIKi)`0mi$L0&SHjm{KA9=rPI-xRx`Bsm0WIfRX-0wMFZK#*8!Jdcu z_^3Ryp7{W*>7%{B`G2LSFX)r}LgSlw5Eujof!6_n_Ko>Y`C?kE3UlgEC)1xIAtZ&|+NcQzpzF0e)Al}@H--;?8UyKCj?3}Wfp&{iRvFWLXL z{_*zz1j>K$D$ix#!!IW%^WvR z($e=_3+BJH&G&1rcf87(d(Y?+pMK*Pw;$kW`&$>*pEcY%v?lqi=s?yrJy0LT?&$~V zwfg!hua6nqATS6F0?$K${3AExf1JrqVn2)B<9%{ExsHd)b27AaX=Jo-0Lkp5Tqnzu z=knlvTp=#6{OVH=`A)90FWG>#SNmem=@9Bwj@_vaK7Tf!Gk?m-`@FHg3hBn&-oNkO z=xg|&p7y8T{OZ~N4~M(*Kg`v`M-+$RRqa_Xz5$I_&4;|^z+9VmY4kVqYu>W?FJtYT z!$}8FMm<0O3%|N`fa>3CW%WURdso`DHmzMcK>XjC2>JKkR?M{g40IO_hSl8(+uJaS<*Q>lXW^9ANATS8L8v^7j8O?TNGvN<5 zQ+5-MB};LyJ!IEptXMe#_b1=gCnV3~efQ)#IWFV}pa;13t$=dsp;si^)vsN$KRcfe z;9e{*9YuZWa_(PxeG|Xi_@DYS&#)lYwOz#IzjvYcf}!l8_zoTXD;xln7&BQ zaIKx@THbU3<;^X7I~{<2XHCeXjJ49W^wyH~rJQ?ugM9$H%!hyQ6T7|Ef%)%DinM$H zV%P|Dm)6HqpZn?mATS6F0(V7#%qA0YJ^M%?)4M;~`O=fI%8}Xa_q%4R@!6B($@2Js zOwYC_(*<^%d}8vOd{=LM661^bAIIpcm=8K$D!*rVrF8l3iqB&%Z`^p^UN?U8-M{(6 z|I+S*|M~T`150i20pNaf!Z)N1++H5MZ_NnwMDyzzosRv^S7VN(d4|`;>55%jM|8vV zOS~_yvi1S=OBwZ;clFW*-3!(S437NYZwbBXXF?zInw`E40)xQgL4ZG%yd>X`cE4+! z%>E`{`E_x4wm&(oEZdtLKA!o<2h!xh|KjX9I)Z@f#bmiy8~Ty2|Ezbc^rH@df8u$% z2b)gcaZ;R9S$%&zNZ)TyU=IiU|K?BsG(&e*$ti#r&y!zUj z)kiu&-z#X}+6=>q2Z2Fg5EukL@By-vd=&Um$xd>dEG5Uu@cioJH*O$?i zeP>@^9owc`dF3ag*>KK`d9FS3Upclsejv}4!!6pDN832QAPv`Ri>|VHf9Wg5`YX?? zYVXmZ`k#NepAG;kd-3;W|HF@t;amtj)laX|wr@b~2U#EHCLPTD$Y&mo!E@!BOFkcK z&iXM&=9?}U|Hu7)>z7`mUghyO&gTzs27oW09;zR$3G2sw=UL#Ryyx?-4+4Y0ATS8r zi~t!a@bi=73AyZHaeUUW3dz+ByU6t?Qe!MH#D0JgZ_e8677^J006l@~l~ z?##8dV(myv2e5Vo&+)o37?-x>$N$BA0PdXy$iE<;{_7V#NW1QxXL(T^CjTHX2n+(R z8v^8|kSukLx5-`H@7f-|`vN)6FUv*~lil)?`>|Q%JZttA6|t8+dLZ=-{DFAf9E1@YyX>1n6dp~2vfGc zd4x0m4|~t{T&>u(J~RjB%sk{1kS@>*(gAS3bz}am5o0p%xLS6c=G-LHSGGuL!X z<@ufHsQNBw$9Dj(weza2ff>&rFbE6+*Fu22C6CF^Y_;Stj;8~N$zU>EOeY|(1@fD0 zj>nVDc%B{D`NHfz>HGuywfq9|NaF|K2gV)sB^^NjJn!3u%{eD~6*p=_nOE)iUd)Ga z<>SWF@WTHBp1!U9uU`B9`TcRa{UAC8?&lMb#~gS@HxT3bPyfL8@7URdANro}-Dea& z^?h&e$>3vin2wNcW{z<;Zl?oS59Zq%!t>UUwPuacDXlrrTuV<+P=|DVQ%4xlHLmrJ zOud7^ATS8LstDkF@)RGF#boN{eSEz5T{<}&|C7JuH5n~E-5^=N%P-p%58#XTkhMWh z+vg?6ok7GGxIwxQ|H~^~o!Oyme>%X=e)JPNU-jd#_6}Z^IqIw?{OC&f82<~nA4l^E z@B{ci0PuRhV`q2EukQRQ&R6=bK)v=GI(reu`~>C^=i`6hBYxvI{_eAX^VXO4KEyA7 zaQ#N#s!vcxpaV3&+Qa+K_S64dTPN0%&>9lk7ie8sd)9z@tke7e)`~hkf4}3Ne1pIs zFbE6+??fP*o$Mu-@$R<8Pux!jNFLJx=m_$PrIYFSoIOS+^IK;#vJ3yDtVeJI3h%%CT4NN#jF2qYYvE0G3^>9%bJ-x~F+Z|2lvBx5kY3jZ>WO z9}ceh0F3?pj|gHi|Nh_q z>$7jY`Gx)4#B_v9{#S?k&7(STIR3Y0tUGIlUq7F}^+g|`TMBqSe^k1FwdtAq)b)PH zJ^2QKL0}LV1m1}NIg0nmSNtg!*j(%_F`g%<@jh9dAD6uLeO5k%Y1)sa?5*G5*V@A6>LKUJfBE>e^+7pY5ntd4&-wqAr7!foH*RsyKaRJ`^Ul#d%{%kZ z|NUY63vBf`-xSot9chdvdqhu}}Apb2t?U%pu*3PdEfsD`hE5;vu!~f)m zf8-ha5x2;v9XpKBN^{r-|_+2H^5!-zjoNNLVb96RPWXUstr-oxk%V&wltX z{pGzEU{1Ggvit{Z|4aM-xE7o*$k#-#)Sh{7J@i`v{7UURSts$oYwOY4+299GC6snflzTQ*f^?{G|hPv2O`aRz3hMZz1zstneA_G z;0agrt)9N4GuP&f?&hqYV2|IvzyC$Z|KI+Ru<>eLLZM^er5EujofkEKC5x}YBDS4ZZH5rT_*#5^oe|8%m zt}@#uTQZs4b}bDrvjg#fwDv?0H^g&<{7z74^7ejzdCI87=@)!4}1KXWDT$@;AWtaE_!;`-`Wk9&DsSyaZtA2L$Rizh!#`WzIRt!<=jj3X zpHF~ZU=JYQz@LBnkDmSEXV(9TSn2!$&A*uLqJHbd+;1IY&AT*#{zs>5zFP}%zkXRK zFp%GReBM|meGnJ~27y7~#Sp;jWb5YBC2Pst_=1mFh=a*#!E-hp4kFvtlMevL z;FF^dfKGt(agw~a%pNpd0w3WB{SefrAM&-|P(RhF9kG1r0M+|q2t1D5#>PIk$DjWn zhQ{dkdEmp=-@bu`8~)$et~tAD1f9{q=k`Z%sQJ(a-9nw_Q^2v>%AbO}aXp^5_s`$Y z&ZkHCZDKl{vw(C2-0wRNd3^Wbw}H|D)U7@9ySabqlGaW0YHf9%#2nK#(*e^*-NQz> zX`GWb2n+&)z#wpY1jv8#m0TuwaRuN1wiTC5_T5%~fASmOv+2?U#JHRvm(0fxH~^=l z2gEJef!dQ#S^LmzLFEN9UyL)9Oa2$@r=XvkS5`aD0pL1$)OmX}9;T#z<5T>fKjX;% z_?rJ;fIa?)`SZSoQ=hrO+06sYV5_dqOl%!u;U`^yHyqjX&iS+dodKW^=$~f=^M~&} zqX#$>u;*m?E%3fR(DwxMq~F$B>&ElG3BdhZ2VHUfl;1j#?_p+TS{(!ifkEKaMxCh@5WOf_22q(9svKJ*WX%S&9}Ao)aG;gI|vK{gTPZkfPbGXCUbFw zm@j}__IoTnBh%UI_F_HXw%utDfNs#9FFB6~aLYMfb|D_XZR}6}`naC{fD>?%I@G0p z?W%*V%WsV%q^U<=cKz#Gd+cUyd2S3(1$*`|9B@281|2E>k1zQJ@V{ry&f5<#PJWZi zab`1bJQg-EidS)e=QX5xw$ExTjupeN_Vt18z!!k~-Fvq4ta^96@;BGr(=Ck0xNtt* zjo$~4(<`^{V$G%g3;Ih3aF%5I0OVUi9iCr~Z|(dVPs?+>* zM$rEbY zD_8nWW1O@>U=SDt27&uSpzpKTW8^WPK=yVv9ByEr<01T$-=2KO{p5Rlzj)@T1IW8| zhQ$s1$W5NCQ2E@MmH(ukvsYmfw7D*?eEKc@rZG<1ATS6F0)xQ) zBake1X1njlaRpAoDfkIbk?ni{dKM^s~SC#-Hr- zZt~&+wy8Ys!fjm89P_!$!{j0rZYoysJ)UHQ%d}<<@#~mO*}FqH|hD_}{&7ImWpk1O|aYU=X+t0?A#RgWKJ+^YBkTXuOdRfWJPu zecT7Y3CfD)C*yHCPGJ%$>P_nYr+7pYwa2`PY8B zz}fe|`~c<=#&Ny+g|Md=nwzb!tU2j?XnO#--x|`s@#Lcr>$h(i_zl$Qe!lm=oaMP6 z1O|aY;Ccw)39^?R*51GK_W7X6?f4c)_zgGq-9F>J`~ZB$$$wn1_jwm@qzB**{~!3@ z{^l2-efzV&zHN0pr%iG{8@KPgRv3Pl3Pk0X#JhfrGxYkKtlm z^dD*I0rDJI0N#`rMsPXeh5O+`cW~y?bKH;1%}u}Q=lgx%`#bZ0)C2ee(gC(VV3lhw z;(oEv9GVlhKYcLUzjGb>X)NZbK-W>$IaBl1`NiWH=Xwwr1O|aY;Q9!V#W;lyAa+lV z$Nh8xHXCko4uDPSJ8t=L6}gX-@eIC^4?o}yyd(Inn7D;aYX4td?0(^2{qZ-quUK37 zqH^k1Cms>=5y+1>w1@xk32wn}`hI=H?xzL+TS0&0TbSW*@gD!ugXmVq-Pyn92X_4C zp2-XA_R(R1e_;j_n90ND$N9eR@BjSxoquU`fb;-*o;isB^8x7B*1J|)aklVDF#(kNf?muiyN0?f?Gx ze}9+$0A=VF=@(-C()QL3*IZ~@yL>^`16_{(Az$BYw3e(1Wv#WRqNhFf_jdX>2n+&) zzMw8WS@#H)^PFm*x*nOMdS1cW8=L6t(#ud_WQQYqu|I;Pdi=Jysz!%c+7mlN2 zNW)|7T3n_*9PfUAd$9V{GaRIy>J#I}`^4oob=4o^FkZMA%icR#oC#lcva#da&Dkg3 zE}uNGg$w^n`hdCwdI0{%xAMUsPU?dR{%6y(@7ex%-v9WKP7e^+|LFnp@cHyRf7*b( zU_58rUq77#IjseA*O~upe|@J9SU<|rFK>h6lok&>-V0xRA6C-vdbT?q0FOKKC&*_k$GrnKv@{$qwr2nz<%}7A?l*4qvV|W$ zhJF5i_CLPQ=J)$deHSR7XM6z8ZqmWht<-HTY`@Ezcl$Tmr?XfS#!II&F8R^}VBvR( z9%?S8-9caw7z74^_lH0}05Y5p07tvVCHR0nYOj}^C;#ySF2Kt;A4lVY?Eh?0JRRTT zi2}~?oglkYOb=kM(hG!ifOtq>@W1x(zy9KX?cz%La1`FL-~9eYeZRT1jfeTg`@J4% z1$v799z)MAV|hvoZ(|mWlm0+gkZ0q5(6>6*CuZ;CeEfdq|Mh==VQvo04SmJDsV5&! zx|BIK=k7fd^auCT6|If9UtQLYdi3jl(Vf}`fk9vp7zD0`0GUmmcMc#OKpK8(v7;{m+h_XL~Mmyeq7fIW(X{`}j2wEqvS|3&Nn%x;@> z{f2-#(*e}Y-^`|FFXKOagbU+Rx`1E|^nq((^ltTP8zkVxE3D~l z?ZvSD=^6Ab`13vJlR4-6-@3xe@BSE!(>UG@t9dpE3<86|An;>Qm{IvbhD^E70eQ17WypC(!;~jP<{`VU}bO4;>j2hiS{%yZ59l&qe z&?D#{Y-c`ac6Izo|JeM${NvikIepLY5UAok;d%N;{Le>V40s=}8e{x#9MX%)1F%i;J$*pyJsCBKY;y$_=vuN|8XJyjO*h{G49mIenaQ( zh`j$A@H79!^Ge`OeS=YBXy0P%F$-V!+pn>7nmxu7=H>T{za1x6monk)_ZRc~<9&Jn z|3968?$voe*XH!h{p|jA&-QnoPk*cd{tRuZpKhXUwm+YMH21ha`(K}o^LZFd`XDd} z3<86|<3s?@km2NhcBa@FaQxs5V0rL?e1d&>dP6>dxCPe<_?<4m*3a(8PxJs>7= z1K1P5Q@CvN(`r|rvPbzTw2hiVe9^dlGw`kY?iKAx3^|HImN z1iX)HDyrP|we0)1$Dki{Jw6{k8s{)N7pO1! ziz++c`ak3XXgXRwv$E|=o}tC?mRyJ$36H>zIX}0$miL%FBebY zdwu}+KOW+XrW;77A4nJY4eV*-bh?GQ{SKjh^>`6~ZhLt>i~r-s+aqwDlJ!}PQ*pUH z4%aZ(f9C<>{qo^`&y8!_;wRhRbC|-qa~JRy+S|_`;2Z|-Z~vd}1@EmpWc#nW!nwJ( zzvHYQo8P<(_JeT!)(b!R_IHieh&~F}L2qgu1O|aYU=X-A0(h1jkN4Z#?M%P@UxD2p z|I14UPhZF|Ak@w)qmGQd0aO><^3 z<0(Fabb#v3Ce{XC%=X8P_)DM5E6-z^GyI9q=_vSJ|KKJ~|JnY=XI!PZH%8Cpm#!W` z9RjSg|BLZ8-3#`|fUoTf_$I^NfPDhE!K^;fZ`f+ zd&GPNdn_GV}P^7qpPa6S&g^R97z-~1^n;5B}3eCJ$x{MSBs+#erqU-q(F#pQijn7vm! z`V&v;>Qt zdjM?0Bmc8C_g?XemCYW-JK6Yq|M@wb&)>h#39j;&+>c}Of!qJaPk2(An4OHn@T-0t z&jH}s$ACCY^cQCPcYhYA>zg!uAOAO2X#&3I190}Svw-r@i;UUzJNW;^_s#&CE4tOb z&Nr~q;8ajHY;iioiS zf~|9`^7<_%43N z^YEo-NyGj2`nTSO|I-0h3}bl72Uq?Tw*THMSlmw+;HT)^zxiwpsE_S$EhszR{M~(h zObvs;ATS6#76iWhmAAHRXZPg;Aop=Vwji$9`vA*MWRnZ_0B{A4!VheD`HvjG(@tF9 z^)bdtNBdS?cn06IOK~Mmj347w_w)z+kGsUmJqAqmL*MjWe_=&$GPZ2}W8C-}t7q(S z7^urVoCLfMKi9aQf5vYq`tHx1o$Y^^uenIa!vE=3`eW}u{@?zA<#S;B(^cf#dY}EE zPrm*85Y5YDz<2sE2n+&)z#wpc2;dnq{^$e1C(Z!ipZvvaZNG7kPwWfGqbv^Dyw2{# zJtv-$R>0A&(-k(SuQu&9yT+C3+II8$-#&N>H)i|mhkLR7>eCO;^8xUi-ybS3UK9J+ z7;x+MUo5=zclUjb)!1CK!Hr?3pT>m$jYS^6edIS6!vx>M&UYEUt#F>wZ~gcUC3`M@ zThUzb0fh09|CO&U9B)49S1{HGx}39~`ee?n1NG4dJNL)`^Wun1i9uix7z74^$Bclz zU%a(tKYloz2h1Mq902}jbK?lUVR}Qq-*e_3dcX|<_wx_nBR1ouKFH(w{$76d+%zx8WQ7pAK-0J&XJCKQ8l)03PGR z*0!Kt+`sv9*~Q}Qf1DV9#``#wAKP17NGCQ<*Ee*WQO&G5){w{p*ju=>t7rpZh!I#r*|-0{zyP z>#Vw|br2W?27y7~p%GwDllA$3Y9AMg@r`!k|Lp$wQjEI<{s{N#cxVjiF8YCU=_>I*yrdgzV~Fz`hjeMi zFQfzf#M%qt-%uWp!w$AM8t)6P`RV=sLf3Qv{YXF4w*KLC{W5?0=r{j;=jplM1Mu9O z(j(|>+MRQM552Oc{Xt+57zD1109lVOa7g@5A7E>CK74cT;t%#eKH)FM9nSILc=jm1 z@Babft2oQE&aKO%UTwDDjrZE~$A8+2FVh9wOJ_^VPiLr(>!S1Cwc}KM;a}HZ0Y0T4 z^_a$&9&jAzO*(-60CfxLRDAt(0rW!-ak*EI^63Gd*$YSqP**s@)*g!cqu)RKU)}m-u5fyL|LXJ|0KZOt0&~58_wS_t zDMwd$%4>T1J_rl~gTNs0-UzhU%#LIO?(fW3%>R$$@juSMOL&1T=^k(33VHba_a5E#bLgMG#OKZc;O+V-j{lACrZGy3 z`^EGdV^#JOAOFey`vBUY1HjUmKspv5zHb9?dA7g#pu5S7`{{7}Hgo}X=hNX!G3WgM zV)@kbSa7}m%uNe}z#uRP3N;xcs!kKupP83zmm{0ST9|MF27k1^4_UU=SDt27%WDfqr`yAK?CU0Q~Pv7|z%>m8u zuEu3J2)||byN=_IvHA+~#GBf7jl0zQ(BJ-B9r~fKVS%UdzkYj$-y5@Q<1_}rb!qC5 zuW{1_)MbqFUFrbvZGXiXLG`5rXxDtDP{qD9)zVPwlAtp=VDY>W@BUdmD#m?mgH4^d8R&#t4tb+O=32Aq<_p>>iHJT^xT) zQTx&b_B`It{#U>6Ir($+$=sRa&HpQ}IeZLwKJqw) z2fz+Je>1l7#&NhuING3|;T?O}`0U8zccNHC{_4U1>{gtG4<8CU?HjK?r31hrOr+6W z?74dD1HCI7UOVOn{|m~p{qeu~)JJnmU$IBvtfzV& z63d60!)bRA7z74^*ByauS-xtV&^Z9Mr8N7-eE#?cr{I6QkHoUor1R1{ZMnKf4Gy)Z*0ax-+`s`5&CCr=>x8D zvpyS_F^YvS@Lc-V9hUwO2GZqIr}$HU=jZmGO1PwVC})27{`E;e?CIOX@tgmi>ofk} zzW=rNudI3>3dd=85EujofkEJ55x@cXJpQKx2<*z^cL1C3PJD#7aEh`5Zez>Z?|050 zSK%S|Z2z5q<%!pDUEEh3FRBZlN>?{K7Prv>{N7Ev$3vlJ4Dl^YoRRpy{?9+$T#K*u zS>HQb=UzHJ!B`qE{)LlqdydmRSI)h5? z(~h~!e`0UIb!8t4$7y#E7z74^LEvE#h-dl#+XE2e3^5-vdlE0j+qfqFz*%?<*T+?^ z`2p~_=gzC)Z(M{s=?FM3F05WW#)j?p38c4|?OcNXh_(F?sP%vUjLA3zW5B!l;q|S4 zXJZ=|UOwsoFjMw8cD!x;@+qqwIEAhDq|pKR?Oity>VmO3(3a=)H}%*j!1?X-w2xwb z9s`nn?pFpcW&gLot_*)fK7fbdulywXg#YOQ_#dazQU2Y( z{^Rp^_Hi!$m*1Ge7@zZ}7%QKLvAc$A z>yLUL-%6Yw4FZF}ATS8LOa$-^POt}n|Kn)f6c^(rXZ$+nhjZAU0{fpnfYX9eQARJ_55XGq%D2It89Nd0RHDAaYh3FyO&3r zJbq(|?JW&gcXko3Fq1|HfCHa^`}72QQ#c)CJWqFmwQF_3u(`nb+Jm#Y%%#4H=`8L2 zfAKfp9R7dV3uxLK1O|aY;1ME#GjIgH$|moOIWECb_{rJxxQ1`rJ?_H$o0pb<8(*ad zK6QO^t$*y-IP7KrFTl;$3k&wXGZJ`S>>GRjjmApP z;j4H4K0cl@vr zK0d-FI9(b927y6f5O@Ft@C9zdvA8KaRJ_mTEk26(am>&E!msXoyk!5IJ?k1jr3W0j z3-5QIZyR4J6Ic0ddmKpzNMFFAeCY8%?$3vfV_!B@`pUMa1HcOJ`~ELKe>xOyhLdp! z_`hfQRNyQh9MXsA1McZn_NTYsdf61e}lGg>-=UzI)vE4(?yPmfrDOKk>#h z0ng*9eC2+BNWfq0>dvxN?q#EileJAxv8TcI_nm??W1}1Rt)1iEKMd(V^crL1GdSXn zyXgV+EVe&vVFoYz^hfURI^6NSYkMr}FlYQL=198xu%d6cmhWZbHth`pgTNp#2s};% zI^TvL;xc@Jo7l0NipT41-};+p z{?AX%#&-r_`w!MRfc@KhYacuP;33cqBWM2q(ck}{HeS;BCh#>Kh2Mg|UAnP2!@&N> z|8$3=FCH#1fhU~kI&g{W!_$2}0eItg<;3(d^P;Ra=@E1Q>FFBv`ynu!HV1)0U=SDt z9w!2QZ-ygqk3D1@k6*U$cySNTaew4~+!GhMj;q9-UB_EEu5)T}KR*MT{}0~y{QkeT z>|<@=M_j2d>Tm`CU*b;O>KvPE&mRg+wt9XNv3?2qZ$AY0;$VH;e*fjW(C7GH%nuM> z%SV4=`#VdCv*`k`g%>>l zzzaAUZ?Ls-JkG!&Vtj-9g*e9^H9lgaON;;ISBEmVsPhACQR&(e{1(6$KDz#A&1ugc zPi7#d|d9ym=F2nhnacd-%+PI*4E=%ebbvkU=SDt27!k_fNhBr@QrKS zk2mN7IL@^gr{Ej*qk#YM6@I}vcnTNBQ@Bf=o*(UD{)P7P#keu<*H$`!Zvpjz|KEAL z{OJ8gfj;ZkLtv&&c<2KTr;q6S=Ks}K{q;=$={NEJF)p3%;5vT-+&W*84iKN4AKah5 z)%E9o>CHVSus-g`m=k^Adog$Q%k@LyHth}qgTNp#2s{o1@RZ>H{Ne?CVSgPD;WY6j z|Fb!94PL@G+5BSn_(nPTaFc6o;C@^e_Z|7r^^yO5UxyQqX8`4)WB6Y{_4}bv)V}`t z9)ZqM-<=19f#>vr%dw{47zk9S;VYOY&)bV>uYc=dt8Fn| zLH+urUVSxZuGRTaxJ|o*z#uRP3<8e>fp`p;;2k`HGjJE)-u!>!9Cm-agoDxn@*7Bt zuW*w5>Wm9<_x2Isap(CD`{MZU=m*fga=45?U7vPeRzCdiynyEqg<@mMhp&ImDd?+l zcrMMj8k_j24|Hv;+mEpD2`@a2^WjLJ!u#o6uFV(S%Jb#~R_1_S=FB0y!c801{g8f> zhnlZxcMuo^27y7~oe1EExQgA6Cj{w*qs@tH@H#HSPhtV5;C|eLllZ3T66(f>`N{dp zP6@ zZ$xo+dioI@l^5{&=YQ=VZ!VV}=F;Krya2pi!`_~ZxxoF}GMBFH1yrvxF9)e}z{r|G@n)U{PL0}LV1Rf^> z@qb()&If=)aJZ1oiFe{79L+yX7r@2Ny;ooSxNZK$`*HqfKJwwM3;fXceDB%sO*gpY zOLYruYTT+{{Mzd2cK{#4mu-Cd#oxdCed2$=`_maazLdtZIem=}$K(A^ec#{My#HT* z@0-tl`xBo&fA5d~(*gRw2l!rlF!r0r_+FZMaqVn>wm<%d2b|<@KItFkPd#+C$GHlp zSA)PHFbE6+FB<{8Am9{Sfj97kAPs-v5B!4T+5FO#;gA0ESKiubaTVPG58<+1j?I7K zf83A1{ob$d|3CHD|JrU-zU<`sz+T0(cvYMDbJw@H)Edg)hAe-uT_UGZ=ILx|umq z&ipAOhNX1Z>Y%&5OuVM8L0}LV1O|b}i$MPD_(F{P#Ra^AYxchW>HpTT`Ee2Mi5KOU zm(EaN%i@1FyR&;Z?;F4IclZCg|JIvd*g61imq)A)ycO@+SEmD1w`cgj=h}W5=pNhC z&%XONzV`lcExp8Z<5%XFKlq`uy^r_5^QEtCT>uV#2ciFcfd4D!dg}mmr=%4F!Mkc(Ps0eKSJeS22Rt)ATS6F0)xQQK!9Hvui%Y1EB=>;hwT4nbGpVq z>`wXOerE`j$Io&9=CEb2=d)-3^MC)@TfhJ8KYi<;?f6f>`PHoxD8rwQ1J!}U)ZMxI zqh5h~J!|ezT}gD3trYI{lNeB{(EjLI2^~b`SCuxANTY5ONWE8ijTH`*Tvc} zPVL0w_W8|$(7Z^)|Chf1bQ1o8YhyI^4+4Y0ATS6#Ed+2|{Ed@v&DICjxiM$T@eZzM zbJ7>soAJKi4p7ED-fr(Y9RR1}GTdMM=imOL&Hw-QH^2DIH9vsg{E>I>sh{+Scn`PI z1JW&UuipsJFW1_>CgN;vZ5W#vHpY^@jsNZa%FVrTThmEgo_uBFe;Mf1f*U$Se+E!LS(*yKz_kH~)z%?COb;=4@1Yz$O3VN%lYAKW_iS&-~oxe82zuyTA6i z?E|0#y!q2Vx%bKC!SiBm2)NZZ0Q#maZDecXUi{{az_pNX%s5zE`lKH?T3_p*XY?53 zHE#SbNHbpikMo`TzeyjE=9xTke|%5>fdR~2YfJF^3;Y1|vTS|*)j#v-xqNhoYvD8X z4g!O~ATS6#O$6-i;|P3#L!1eSOO9vE;+*sYIs)#?2FF!L{>R~+{c~RK(?9V2&;I>a ze|OvaKm3>e^1kN-_^;pj*472^B#u>|a%_BdF5WwS1IVVOvk2PPFZ#f>&<`8BP8i^Q z0nhS*)F&7icY6To0XW@R0OQX8pMSufKzc#`0cpl0Xw&}|611Z|dVqQG%y$=bGkO4? zhuNNs#r@g;z8Sn0K2z@?FbE6+gTT{8AdbWRcm?nHw#@&zW&e9F4Zq+ab|wFS@7QrR zF2>hKyLj{e;zIx5*Y!X7;UC#t&*$A)0CutS0Q3TB{NMPW4UNOpyY+z+-^IK7<2yUw z2e$ukE%dde53tZ?Sm1bA;aIW0#{b5P`}Hl`AE)Q{{4Ny@S9YFbE6+PaA=T2fhGxJnhvvy&nVyfk9vpxE2C9B2KlJ zF1QzbZH|z*K{x1s{^~RC zP6y!oi0kP+LjC~ha8aK$I)ZzApI^ZEjT`@`cjW_c#?Nzl0Sx5RFS-cdK;L%Km#(#L zrrtqd5Eujofv1f?oW{n-8}T{bi~n&8KE(NP5njfNxX^PPB;bB_Ebhm7?E36`-^1DS z?;hu~edWvVjsMi4U+QLe^8@r7gX~?uxr6umpMcjm18AJar5*jj|Hdp$2nTox^b`CK z13YeAeEP=K*t&KW07lvU_6MASkY@bpI`|#NoA;N#p>B45b4J&2zT&6@$eRuav!}f} zr}u-vATS6F0@p$yK4aI%Wqz}VzgZl=d&cI)fqf%@cjBsi^f(Zo<23vG_`ZGq_@2#+ z>-Jv2+7GZ-u>V)k;#pja196RQ|lMdo{fpB5|2b_1`_-Gp^YeQ_Tbb$6C_~G?M zzhGnhh4?@Je&--yV^4tnUx3BY?l&&^)NAb8H-0$d`*7AL_vR=aK;PsuKgwT2FS>7> zr@ld85EujofrmkWe>o1rdH5cmu(|OvE|QL;#Q1;j0W8~;&j1H0k9*`5*tIwx$Jytn z3(yJL`^Ww2F5r9t_o+|N7GA}>IIlKvFyDlJe*UL_YRC4v?;Abs8H;m{#->l&j`Ot% zi*zP^luy508>8{0&(LqA;rqVzqaWlOpz~-?3~Tk`efg-(s$v$ zF`4=Xfk9vp7zAD|1lZ4UhI4;7h3^?>;Uu;un|t%p@+r&DCdEyaRW92V-{UxZhu?5N zuFDRN@8f*s3h}@CaA5W8ACA)xdF02fHP5>$iGwy5M(voja&aeB3#^Oa6zI zH2B5q`8Yg-OX)a2{#UnpjeYA{OApKb*C*rmzma$Umd=Fx&6m9zeUWaj=G9uEGnzqQ z5Eujofomebw!|NsQx^AcJz#N+G-u%LySv6~=>RwqSFzV|GH%0@d;s_#=c(_=`L5$| zW$>W*m=*`dX>4Hjw|xoi%a8N4uTS@li#qjP!2R0OF5BA~d*hTxpsRQ$)^FFvu8q%_ z)fLyL`xvvaRlmI9Nx#DV>d=ll|BwIee|h#l|NPtYaJKyqIPmA(Hx^UhATS6F0)xP- zjexV`cm}811K9k(evd~QUpwx>U+!@hZjv{y##8Yfdp|xG7cO~TJ@gLguB!v*YDd6_ z>|Wek{diIz`%S$2o*C_?yXaRutzG=DKl&vf-ABLTe|>Kp#l{D_bb#;>%agyrwK~Q2 z8er>QyYwG((7DGW|Eotnb9moaOnrmEATS6F0k8cXB3>Hd=Q0o%@nT+(4&L}GLxL4QoZV(s*27y7~u_Ay&@DTpTGXi@y?!kNiAA5HbYU`37 z_FW(}NQg{3*hW~5nvh71qXg9McI)|27`qkb4L*1ow&fVwiwfEWQ>}OEa z`_@~ZPt|(<&r@%$wXy-QP=5A-kPm!vFRr~TmcKG5`_;eMzuqx;?miBy51ZK~`rtbW z*OIC4HK-GNak~FDsBQL&{@BaM=Drh`=p%=bbUV0h7hY?omd;|Fj0HT?L3Q#7#RP3 zAK_Xu&{u8XD?6hzju@-Y>;f`zZ6BUp()q-`Lm{s^E@jb}&saYB1$F21@3xn(?~J4N zocqWBJ^q`$595#j*W3fSmMo{9k-$h`Brpp%W$pYNUj zFI_*|2ha!k<+B%{@A@lW;}W|U)T6)3^jx~Jv3UgL1>7%a$N39$pq%l?{`h~*GZ5F3 z<v1oKmN&ww`>zUy_SU4ua9gSZRnGG?dy-{`p56rZ`YNnFZv^RF7{kV zCXE~S**wPB*tdLdY=GkNfy7&+gx1G{(nq@#gr7jhjrA7d&GVD6cN{H^$1dqwJ~3qs&Ks`)}13|NXDB z`MK8kr=F3(NMIx|5_p;tz!EIF^#Ae59`xqdVjX+H@BBHl7PBxee;&K>(DU~8V_<%- zy0nFpc&MK8;G(`{3)u5lPQCb_|1S-*uQglR#DC0Icm6-_3!aPPxIX9G$A7kv^xof# z{cq9k_exi`^2V+m<7E3NN7n!RYrp=%|M9>5gPkT1|DV4vAD=(|lY>58Yy4BsNMIx| z5*P_QO$lHLpZ1df_Vh6buW^b$>VETo?N#R&i!sdJJci%$YvR!%XJFp$d8}s$SyMH!-eEK;2zt-$eJtKjUz)0ZfN&sIl8vpse?f>H) z{~wER4Zpk(;H%=6Gz`PC&HKfDc{Z!P17CJSoR?P{f;7*tG~XXD-K$HQdyLaJ`L&t< zudMWI&6v8hXWZH_CT$zz9@mW>qup%>EDpO?Mp=1Z6slXDo%_oU(3bIL&u9<(wTbii zkNIq`)BjI4*BbxSGZGjHj08pkPg4RIg)w~0_%98!@E`MHGFHVY?Aq+V;l6j*Yz1t@ zF?9&fW25x!hyAW#*$X(2ZT7y^%O0qX{BM1{Hvjd{xY#=}y?uEsmZmSbjp5}{uJN&J zJo9@1(u~FU8oTH2wPP&XMp|`y$Dv$f^-jcd_748D5%#-@We2bU*l7Bu-lw@*XVfEs zk-$h`BycSWeBu*-eDfs!V=u;I75+=dK}?g5RX8ukr@jY>%bw$0Tom^^dGh0%JaJKs zr^>cR?q1v8owGZtOWNkuqsov}x<8MEJTw}iaJxiv}0vNMCV1Ii6#%|88HU6n*Brp;f35*1urUY;dpYVnM zkAwVo+`)g$b&Wf?|@T%uhai_rLVzAK7KuO4=Z2 zb!JDY$Fu!?!PO>tc%~g^Eu9D8`|I20|LTkL0P2$OTH~L3Mgk*&k-$jcX-XjexA%X^ zfBrw_Y+fzS@lWO9ueaZ=4$rIW{r5h%c`uK1?bvT$-}!;g#BY|b{ebF@t5}Dn{9-l) zM&hb`d~f+&Uu(A1g}Lh1NBqZJT*vBY}~?NZ^S|z;FBE8P2o^5YM+CzBq-4d|O<` zDqM=$@?w~{vjluxtj9t&02X2+uC>ptKE8AORbD&FVlEcSYfm2gUB^;ot}$KS>#Iw< z_=?NM7Q17AV{|Vlv-c*}ckY*e;$2XRro^5Q-lK%Mxk%r$=hUOns!Y*jxyK>yUOKgO;P z^3=~_eIyrs!fNbi?-;YQd!3yy#^j#vvT$d zj0fj2-!o~h`Rh2I4WR59+cg`4%=Ljyp!>=_>JbMK3D_6f8X6HnISp8U#c zTii7sYR}oa*O@_Q3zWB)&~FOZd&mdZ4}GgYY!&Ajj7z$9^-r*W;<+)nS1)!OI~#}` zFy2_i^F8<@J=gQ)#y?57a5oP5Qd*+&- ztuN}>?*SGYdk^qBGoe3%v1vCxW3I8_vNU=0L)!vBpZ$XW&P}piq_Jm`hkXUUzp+b~ zpKRn+w_yCI4I_>0vTyc2$I4S5$m--j`{i}UJ!M7$BY}~?NMIz81ls?{8vMuoxQ9dA zCtduPj#05v9_-A=#W2sXPOMz#{+_XMu^i*ERDRzR?EeHd|5tt5)Rr>x#A1Fn77N}( zD5npv`d>i$ryM&1hxHYA`Q`4lrwwD(2kGn|JokRTvw`}PUEsQUU3>p8ulF9V1@A%r z@8AB-{kwkZ6SSrO$xR)b{mcKyd)N9ZpS^$c<9_(x>YaEbFcKIEj09d+0`VX7@HSRs zl6~iF0O_&aH74OO9~T?_<_*qaUhn&*OT&5G;v3_?cKF)%$a_a1FScTEe!o7&Myz#R z8h-Mr)%%(6{_L&%;rBlK{?4zQ^7^4pp>by8s8?I;4DaRT=lAPBTc!N~{=YpAHiR_(zc!PrwzSRHXH#u^WX1ZZ-fg3-c3uDcFMQ=z<9*#V zG37=ABY}~?NZ{R;>-RNTw|RYpBniJ8jU z8@ErOE-dt38*A}TJKAImur)AOe(6}KZ+<7Q{(Rh-IDWZ4V81qu&$YVri@z<_R^!EE z{nY37B;?noXM%pnW1PS7kAGuxUtiRrJ!25MW)qNEHibGGlYHvm=LT23{C#!nQ}PoJ z|KI)3<&1D7FcKIE+_wa<3R7Z?IQH{FaT%YmDek%6XVjKYjAfYC{&%cXCuXt%_`LY2 zt^8>Dl!>SE_s)QCtsn8VeFx9=0dw(H-<(hE`+0x&?|t>TesN=zPkw#Je)Yuv#;L8w zsZV@<4Az&P8JBBk5R5|||Kgv0ZI9DV&$cI<~Nb?Uz+mu!?owe*%;XZWagRj zg8ha2UKdmUNMIx|5*P`*+Y;bQ#ubd=2jf1zVk8#fS8T#3*Vu(ie13b@>cDJ4ez7$9 z@#+tL?{~KiP+gvTR!|>~dM_YNS)7fH()J#}VzxAG%I_TnrpL$2*^2$1f922rz|J50 zjWPbKTe|*f>*Td($~QLsiv9ZO8J=rPzv_#a&7m&Ay~N1M(9s9PO^XWHC* zEz4$+U-0|Dm*brKk-$h`Brp;f3A~B~-hc0ln<==&FOE6*B;Zgy$0)%)4q>Ogag0+Q zs|xPr5%Xc$3G&7;`SPRHxB0lv2k^DEA)oXZEzNZ?W(v~qlnqebjlb{ted$mBiS2W@ z=f8jFU@=`?)yK}MerfgJ7~{V_>UYoN>;1o2KCJexLEp+JZjZv4*iFjnuQmnks9$>Q z7w`X4xUsYBv&gGlW1M&-FcKIEj08pkuOopN)LFIjJAhc^9a-89oa@@eM(xIX*Ukl~$C&`>m}+0Wz9kFwuw#txSN`f> z+`ps4R&Xz{9h~u#rXJ-RkFwJA*|lI?@~~6bG~R32-{^Y*Y@E`JU0;={JR3oq>XqKO zjM2R@vmu;|>@1~z{+r+Y<^6tv9M#qMCLRfl1V#cQfsw%LNB~Rt!_M&ihkyBxHgmkw zk3G1yxwm|CtisY*?H+e=y)+ENPkiKmW1)BA^4TMIk8S+gOExN-AMLujyn|P#cJ${w zXV^Kq|M@3=c=uVICm(yi!7ec-Ho&$OR-g2XZGy+@yVYzH_W|JrWoRj08pkBZ1pW08<29!WzD`-VWNFMQ&U z?flLH@~72j|AQTY!E6L=smmC(x!YdP?dRh^+enDfV&f8$1BM%Cc0l_9_V(3Fw&M7& zjpRz^C;RO|=ub8P8{)QeJNZTeBY}~?NMI!JJPG6*V>!m)D4xcCOv5N_!l*bUKc-9P zx8pg+#r=Hz_#P`eABU3|%4Wb`9QO=^ozv5f{)pKGVl0*ygXI(KfK(JpR9mCl#rTmD3m3WcIwdoV1a^NMIx|5*P{GRsvXpDSY94Xq>|_F-GH}JQ$46*oa3M z#$U$&7$?R#` zcl+h%|92kHIMm7RIQgHAqiucDPiGPAJIJrk##GP;W5;@ZGv;LA8rS*qY!_|XcR2a4 zU+N|=eN%@tdFKEBZo8r<-$-C2FcKIE+(rWZ{x8A80BRKI+O@it>Ek21oq z{`imVI*i*`)y@83(~tvuNIKcD0rXRlMsD8u8x!W^ys`Gazj1pePyAPp{%?6L8;bnc z78ox`?>vKc_V|{Z*b1Hh({^K-cqA|q7zvC7Mgp%Rf%E_WFeYE$H4fn{e&G;4@qe8K zz%l&A$ozM90G~DXdG~(?XYuogaSq3v=~Eut)rtS?0t~J_F=pB~m(RYx^7@3+uR3l_ zR#xBn*~TiUSAW!LjM~NEEtj?buMcPYm~Kq`edB!I`wupd_QdvD*gNVZJ7dLvvHsZG zXir0IF35pA^dbI}^Q(?|@{a^Y0waNuz)0YffZvkC9(>{F+SiZ0c*q9uE!L?YzrY!2XyY55~n0b!nRj%1F z#_c_T`i#Bv1@-{2Ke-qm_WPe9{BPf1|JfnN+_?w8bJ(>plSMX>{Pq}>X|Kf?$_xc-P;@YOg_Fd4*K04<=Ftv*s&+H5&zjD+vi^G6l+ua@?VbURqoZH ze!SH_|5|_i9*}f>5VKLVz5Vc;vkLY_FgoA<9Ir9EFOVO$t0$SN8{gSF`oSI|8~YLR zlaIF92j=GFKU?fo#yNRM0waNuz(`;ua4CU)|9A6$`I&sp_>YA+hmZW&a}R)Do{fP0 z0v^hT^ZCGM>=|ChP0Uk{Kg++~KK708pA8_54Z>f>Wi|tDV&>&oUiCiP$M*+}ai0TN zjMkp^jZr%oEKU2~53pByFJdfsZExcoYxYjxgOFbx`pe3go$^XCP zzu!Z6)v-?gk-$h`Brp;f37is$>3sQYfVjk0#UlaJ1!wUwu{{8s#5C^-_^degBK~_O zkG%u|fBD4vfb-7QVJ^Sd{yXlfdw)l7u@^sk2d?Znj@P|57C}F%U(7Bsw%!AfiF7s* zxyYXlz@|w?YyjiOedBGfqx}wJ%BE-!fDM8D%DMI~f_${k7BgmZ<2wM#_zuJCj(5t9 z1V#cQfsw#SfCS<={`39C`Ty99bHG z_fFg%0Nz!vYrNGypPTRP{k-Sezt-%jOJH|kI$Og&0RP)PAH014a?vNYj_0no?X!IQ z#%^rcH`4H2kgt7+Je$$$O1*7&EMk-$h`Brp1NC!k!=>nr%*>BKaT(|#keElwg{_ef`wO_K|Pptm#zOM1NhhQH+US~gO!}lNT zi{L*QVZAox?fVq$0rMd({_9UR(6z=t^^62Y0waNuz|)if9$}Mr%h-d1m?Lfbugf>> zyc!nr?fI*00Pni_$LhfF>;UoR*kY)>eBk!XG2dBx?2L_KW%$Ig-#Y=SY69zx#9lL7Uku`s10t)^~P*;QlhLXJYjlJGo)McPZqH^U`ZKn@74nsk3pL zqhxWd@lQP?fsw#SU?lJ~C4f7avi<+Xe|y__#dozg&G*G}`2;M)E${F7uUPhX|K3;k znKaKYnJ10k+@8Yu+_h(XdJMGheR5w~Ox}5xEzocMUu(AX4__O9W5xLP9z1u=j?pK5 zv~Q75Zye7XyE+;h-gg#)+&W8PuRuL~dt;TKow4nL)uy`5i9QVfuQlsa&q!b-FcKIE z;1=e@zxag&FQD$rfMo2r~Vh4&4q+?;I-j=tn;OKHIPu%?9v203lmIY`n%z7QIX9i~xBX z4|!|1JiYIipUkzp&t+}1?`O@~-@m{-v`s^8CZT`Q#dA7oR`2U!?S-i$> zyqND@hko@x0p5Y&Kifc`^o_kj4tq>DcEBFz;<~;H_6?LJ!#$RDFAdAZ+GPvqgM8*e zon**PQjVOBKO2pV%-z#ktuxw@z(`;uFcP?y1Wx|r55{0SzT~^&6Xtr3cb;$Vt?#Of zy$4VZr#7pW|I9bV#JxAZxad3o`Tgty{xjcNIZRXz^YgW_75_0f{%aRozx1a+^nb4< z17pQkb&K^)Kd>JE^-bHG)BNw%=lX50fDI$Be&*Y&Q#oQpy5WFPIiZfpe)o7UPn@lt>;OKn{<(K8UyRnywWcb*R=2ja+4~3m#^m^0 z-@WU%Ct~c48~<@$dHL8eg6r%YdHMb1tGqoDdjaID4_m&=uBd)>D!b=s^+n!fdo3AE zJtKjUz(`;u@U$e*o_qVx7=tzTxb6LW{~Ysi3G?GV{}iJ<$0I>G>=W=>EG<6DgOAPz zIu~!BKpvduYqJ6D8N~hS(Y7?tvQMrxQ~&9I@}GV1g-`skT{r(fyF*{uMA**;z+JM@ zN8BbKW0a2^UGII1l{Z^w+f+Au_tNAc4`l@7sV?j{58Ah{;B0|s$*?){9f0I{Eg4Kb zBY}~?NMI!Jv?PE*Sb}Z6W9DySEcWp4@d)$01Mr)-@#>QM*v8NGK0w?x?%C^)eeIFk zH)jLjsJu8QU;6;rCYY)Z%Ht&ldv>jvVvp$4>HkY}&SCrF%Ld3UVhcFG&+dug`rY2i zey6c`-}uj%e7AkD>XRPBmA4mAy}Pc(e{K0Lg?o9o|G%#76Oe)SuO)-2XCyEZ7zvC7 zo|XhK1WWo}8OBJ%9Gtf|%@@UR{ytuNf1MADlUNqxPxj+=Ho@lL&HH|SeC%`G_v6_U z>QmRY0hZ4%pE~eg9r({zm+x9L<$RxZ*f!h$UwiZRBD~Mg7wwY~9{V1jKE!^{+TT~! z_`BcdB5rH}X{8&pa%AjUUD{`Bsh^ycWqaVicLnmqfA?e|?OHOJdPV{xfsw#S;Au$! zL-_ie|BFX_d@OPfjZca*_MO=R{8Q=52-t;_C-b|;RAt3jC%7-h!u)&f*#p2noX2+0 z+jn4p#9}_W{O`Z_#jCNeGmv;|A4KRHqwNj2*FWtWyS^JwV`|)`#e1=5`Tp+Z$p#=l z`wYp{n8`WWlY4ElMf9h+QpS6fr?p~dv?GC$z(`;ua90WVtv(FFrkLVd8s70k-DC6K zhrW4+&;0+*vgOmqyyBCEc#n1QPQ3T|v2&GmANw%RZ{&3*0Qd1wU-rKG;@>kC-UI*D zoo~H;?bROJ2zT?#_0@R+V?6De#x6eDPkxv!O&r6;<+Zm!CcRIQ*Pe*|05a(}fRty8 zZ5w69`ZC`Eyz8f6%8vv_0waN^CjtMviy?ge_>W1_un_<8hY!lC4w=S12zJ-=7`eUfsrKT>2tES!nke|5yF( zPdEc8A30u24pYxaU?eaS7zsQL3Gk^gWc!rMpUfwf<~wceL&rVu$NR1upH+UGiu-X- ztj@UD9stgr{Lco^56`qKU>+L)3#Ho!&<-|x2QQER8@lE!sZ;$Jtl!wIZT1h}-+1Mb z_H6IthWm|EAIapIzkeg2owlyY#PyH<7vH{Z1#Pfx$Vc6-$yd62?>MyGSws2QX>0)R zVZ4`+@0xO$x<&#cfsw#S;N6!%T*s95yJHdG|KuJP^ONnzV~%_{75h)d;oRobirE7A zD1Yq7P=Rl~ZGfBi0QCoJwapIj99Pw`e=Be?`aYPaPJ91;yBNRqxAT7OIj~bYD;V>| z^)LR51!K?uCtq^G{$Ks^AKAh9F<%|p_uLrCINQu`E0BZd^7H%27XRJfhb-Rxl|LgK z35*0r0#924*ujUy6a2;~yp`_#^Rxd3SpGNu^G)%}b9}=q{KvSH`L3}^?6(540We?v zLf1H}F3jgwOILsA;JgEuhP&9Puby9f=G1BY`}+d^*SJJHPPrAM$_6T|RZPfqb{nIY9Q# z-Uqm`0gPXp*x&aP)T?jv9e~I6xtiXL1V#cQfyXQXzsHXq&aB}`{Kps^j$@zs?hk*b zpFi5Ue5}I0Yyh11oBY52<)8WB-~RHieDM2U{k0wc{V)9JPRBs})0TYhF*2s{|M|HB z9~L*{AB!CL+1P!<$u=G;$z^3xv(o@XCmo!=AoP5>7Lc7T9y+Q$C;Vf||lKz}+1&o{od9QzFb z{M9D@>z_X8AD&8&jK_4m7rg8LrO$uw2mj=6{EyGL|L?#454U`_ z&9!*G?V`nbW7n25mY8o}h3vI!+`S{wR(6K-isU9-TOL#2NMIx|5*P_wPXhMPuUFgM zYU0!44GwJv-R%Fzc0RW~0N=mEAn)F>Ng2L!?B~z_+-Lvn_V=-lEr9!cf5Ejh;qQF^ zm-oK6vdZCV`wSSSUi`w%dvD@q zuU`M884K?7&B=lN5bwP|_z(Z`AANxNf^>Gl=fC+|cK+-x^&7kPw2$}d&IV(5N%MZd zT*ZH96{RWnM@RJVDfS`mV{RUPB-7$ZU?eaSxUK{qi=H+reZh|X?tk$o|DS(vuN&+6 zp!m;jvG>paRSviL@EDGL-}uE}{ordq{$u-|ub(~eAAjqg?tN~11D<;~;F^z&o0y4x zSc;1lHh%9-GU_< zulBkzWWR@AJi#(PDDK(&$D9xS|1WOl*?;y7`!ENGdgqVne10MR<0JM7uKEA?=(#}iXYb$FK7>7aW$u$Pe%DuD@z*&0F28gC+s|M9#QuJl&~x1P%y{BF z{$sU!??cG<-249{{9pBM{;yb_0$K0x0o|JREnC1mkSCcqEAS@Q zRlg-^pXg2YW7-}Gj08pkk5K~jG@tfO_YG(D1@mK@*gm{HX8gfDOyQH$?RbPuSZ!}w zUfj3u-I;%U7u@rCodv`v9OVDI=L1U<;vVLzo6RBE|Ia?aJALw>gYseYeaWxi0p@et z2eCimnrzr3uDy%zeTC?~OAVs9(M2 z#lHT22e7!$=J2~j?xmCe-ZNP3s>dEccEf$i(x;uC*-_ni!HlYjDz1V#cQfu|yY z*h0U*=`qKP?fWl|U=UjXYx$b^kNxZfG3H^PzGE@|%g;Zzm!I#Cbr^5IpB>;`_!*=- z56E8@+H=q!?87?k$He}N$2)lE>a>5~|97JeeZg6L)+haB59u3O*cZ`fGdtmPaEM{RImSL%SoH^Y45p0qboVOFRIix>??ApiHmcEgP zw)IsY8}^Uq?1XKrtiDUbcxU{KF&jYa+`qkmQ{J23%MMVU90jsfFBy^>_OrX#9j>K$ zrd_s#_Ye5r+`P$kuixg8ZS*GlF>Q|oMgk*&$0h;3H2p|VzG)vxAMn<`_2$rGEcW1v zeP(<8xNk3>4IquZusMChtbBCb!bNpqQNf-7KH0N(Z9jk?>^(r=6U0?*s#jZBTfO*( zwdzi8zAN|;^GZGf*5a4&lElQhqr4~YNz+j{`xHCF5wjMv^k{6BsF_^*EH#;V@- z`^kk3Ab1C2zRq_5zK22P`lDYDA)m`Oyz|$-cP92QE}zf+NMIx|5_rlI;1|)`^yHiL zk@9aZ_oA_mzl$-L!(I`*x8VQdlKx|0j6UOC-`W$vI6U%x-@deSfBa$of85uW{K{iS z{KqeLi8ioQyLd-t!b7f~c$WXIKl;lyvM=GeeoNatU;X5VduM_5_CMG>o%{F9m>YMp z%YG6IWUSuy`}6(P>pz+F$MfnTZ)y7Df0Q3mMzzIO)TeFBt#bgSPdpMB35*0r0^jsa z{3801eiz=9OfUi~@Ca+;mp z1IU3q*hDe=lo`LjK!#*&y!Jxu0pNcD|2qSaoXn&4$o5Uh$-G!o);3wZsXjdP`k3}c z0waNuz-=Xvj`S}3P3lN(+mq+d(${=fK^m_4?i(KApI|>gUgb9H7Ng|HDjX}$zm?ay zH|!UF_P_q*W}xTU2H73)!hSdY+joeK_=k1ceG}hp^Pf7}-uz#E!*yeIkIOjCZZV&` z&&zH(Z2-LIn=9v9y!n5VPhHYtzgQaCYS%OG`|ZJyi+k;|0oX*^RiB_w& zK7n%d`=#%XS%PO+lt1c>U;6;~r#;WNuY9w|?>&He`HtFihAzJr``G}Vzp3w(XP%@=Tr5i<4vZ?lXXk?f7pGz`F;(O@#fapMl9c5*P`L1RhcXzV}aO)A#h{L$+O8U;3dR+imB6)7b+4VllSZ z1K@M={axcf+kmf&PtW7OF~v1LJ`P~N7?(DuZtMg6*QWgB5j*&>*%0!xLt z$i+DXj1~0TeeVazhD^?P0P+}1%opQ#_paFyabKMLl(QE@-r5o5-}?|tM*M$eJ&*t5 zWObjvkMJV-laoFehwJ$bpchGM(nkU#fu|?|zmI~mbT=LOCVsCK8`9N$egTUy44eFR z`+g6VGy(b`^OTcf3Di^*k?-?UvE{y(N1^#(kav*!v^P4#0nN zqHTTIZ7w?UM?NYe|+dZYPWsk zlmGhG-ZBo`_wU_*d+_<}C-?Dc^B)&)u5l0lH!D|Kw!vmwyt>J&UFYbuMJ}8FD-V`o zTz>FF%c=JA@wZL1fsw#dmjIo}U!%ue z)0+<|lfV5p|JH7|b7S$}Jr3i{-dkR*!GFwiPp|L3FTXVQV_j_9+*#x5{$yXg+-zKB z*bqWCfqL;mTPOeD^x41WC7EHjKJBqB-#)*bpPOCx%oo3rMLs^h}=q zCgeNiMKFRVTLHnpp)pxi_KP69bOn@I+H{%`hy^dT8eJQ5fQj0B## z1n5Nm5zg_!A9|0}zP&!QUyT3wg1`F1r{r^E5!UqX-!q)aH^o5LSfebx?>hdAu}mn< zb2b3>5h<1vS1<-ZX;Cx_GjH}=!t z=jRL9kNJKR;Ddkn8#}oE%Afy%4`sOcNxt6qlRF<@J9}Q(NX!5C--71KoXE3fyZT3N z`bVbvbdKRZui3HMY)y!@KW6~$Q|eRqNMI!Jwn*UnzwZaPPQ*A|uy6a&{{uuP)6;l? z`}zOUFb7lG_verM9w6V-bG8a5$!AX*!?DKi{bQZ`m~VXAh=DQllK+^gZVc7#$xmnA zlzT{yy=X1z0}kUq{^FZ}$=(kbgXi_1e2l&C|Hpj40qj2k;=Wj#=kh8?zQ&EI=11GU zdte^e9QJ7Z4`MdiGyngF|N3QZJ*3?FJ*nOAHSfkjChWQw$#l|30waNuz*CU`eJIe4 zIGWG>kmJV$+{fm8{}{vn#(zFH_S5P1{&873eAjP$!9a}Rw+dKC_e;lqZOG3bJ#B!^ z$F&FG8P4_YTzlHl7thp%dD!-l9DC7ReCE49yZgaMCm-X~M>dK*lIGU<$X38}%s!d# z_khU@@7V#a{U?CD>vF8|M|?^KOUWNIy?(U<_sdFSS5*P`*4H9VYfBQv?`?2sL zzo$(X;{>)~M*Qy#IbRgZ{Ej;oyJi!3j?wm`*#P0Y(*!!<-?BqxDb;(4?$9_opeB7Msi$2@)H~t-#Oz@w* z(q0A`;kfbouOr;Yf9E9FNaWJqziYB%E7${2XSRiU+{aM+A$Tt)AA2+E6?YaO{wv!a zz(btD>pK$qp8wC*wPwi0?_PYIeCPQ{U?eaSc-JJ**{IEY{@LOi{rr&p@BJ*@EadyM z0qAGGzBA<~|FK3taSwy||M7_rifdSeVXm=WaE)o_9ymtXN5I9+_+2Qqoq%h0n^@ahhBtcv&D}$=*KZBzqkijy^@aau|Micp_pW`uXFMZ;k-$jcMG{DN z?|0ryH;Nyc|DCg=ld*$-7WlJ#d;YrbljANOj>q`#x&C7s|J*Zd%eQZTyZvnc@fY** zZ9T&~d*a(aT{6h0#mvqc)GxBp5AA;HQ{VMyc#$24wfd)@0$J^M085_wjDOO}i7ePd z7|$NSc`|dKoY(;5zUVVM=_7%Wz)0Y(5}@-0I&ibk{y+XNy@(I=;a%IfO?mBL zLj2bk48{z)8q;D6_F#;A<@7&4&NG1@kMF#;%*W0D#k)WJ#@F}$wmx7K zn}a{dzQ9jB(+@U4dl1@wh`sCE$ge#5q<`dNPBB{F@xSlD$6hk_4uEXPAilTvpU+QD z(%1oH?o5Ds*<1Ke_P$4_ZS%w~i~rcKKlT8~)t-rUMULj$T2qeg(irX|?tEnY*M93= z|H(=)=jQ%C`Y?5l1V#cQfj2Dyx;A}H-#G`heShp$Ib7Y{)mG zqp=;Y?8Eard%s+)9DS|7^f)ec-VfXIZ{t7qpLPJ>AJ;tJ{{PMRajN~`-lyxIK4BUg z;~`}8s@t z_d4s{2*$_%>`e1*ZjD1f?t3qyxte$+FcKIEJhTMTgzh~>gr32$Goo=60eBXN6 z*tNlDrGND$zYHtvzhjO4XUxa6zGJ4GJncdEpMG?_&^`cuxo$t3|BCy+|J7gHY->+i z`&gh4>c%tt(q61+Z{739_}g*qb7L+B8#h_7S=a!WZ(JC-ZM-%A*#Ov1F1`q9zU8(Rpx+YQD%@zh5+_yQUkf`uCb&?Y0N8*ZaCR4(t9t z`*7DWO!<+(NMIyzR|&*_I(whNTDmwtXxjlx57P5=@_qkD8-1%C`d1%z`>Q|F=xE>h z!?D=U4#1Xd6U;G=_5iX0@QSX-eJrzoz_)E*TRMgrr!sWEI)u)$tApPv#w(m-59sS- z=7hfSvGo=AvjNBvi^|1&- zKZs7;{{PbT_pJ;2O_t4q)dy|w_Lo1VZT!OR?LXf5|F|Mx2-fiX^Zl~{a0$C`&px*O zes$U3j{BZrKOW$DWsSYM`S}=z3v3Z(+|3yx$OE6rz#f1xlAUpT=HBz{ zA^ZDX$98eN7u#nMlV5u--oKbXbEj=~8X3la^X46ZJmkmLBiHz=+JLW{BOOH zf&Se0nt!ZoX8JV}7zsQb3D9#V|D6G(|F9Sf>HGWEh4!JfLI2ak0v=$KxbuE|N8G{^ zOlj|5f3Zh@1$(?F$M~>-E~x?+>Q;iZsFu+%=bK0o#|V)|&Dm@76` z{dbSs#wU1|{Kx?xn>t_Gox@+CDg{-HC{Jrb@80XYE5*P`L1U^mz{I8S$eBAhp0rWC``Em8!<+=Jh zixvlJ7bE!onD07QlkM;qKo!sL88OQqKWLh46wsx&A^6MQy zXAhj^(1-fhn#%^1{{B7u{*FB&ecEHa;lH-yzp=Z28|Jn-o_HiM5_ozNxW@m@&~tP) zeaP>j|8R~Dq|@oj`_zSG!`oUL%C zWdo3dfQk9VIEDZA4(vH--}C#F%e7W>XYuskc-cJUxX)59pWIw`27p}5zYzDy<&@Lu z=VwniS3%b5F6=#&btZ$1+ON5^;hY0tZ(3ve(Yn+AeXTqH(Wp;*tT+2jY>vJ5SKRpD zhPl1g8ku@V0waO9PXcu0U3%Sbq0;YL?=4;2J8rS``__Z%H;&jJ2c%&wPHmrcv5Ma+ z4UeTMi`Ds{nC0x6cm1y8KV5$^>||QpH-33Gx0X$T@A?$GFrQ5HfiJD?`|wZiGM~>Y z+t~_skv(|hV#ko7kgbD(?5J!&@=GS!0@zNbWN#kC(#%=!RoDXBQWsg8N6*cpy&Ljm zw~FzfJj>JEYu7ayU;Dci{D1YDYd*g@7S8j3WFpUF`%TB^&F`d*1V#c+PXhVPcNsao zN6*oBbUfWJ(7kcNyV$$5@v^e9iJx7&F#r?r3ZwR(|GM^_HN3!*_6P6?XK*MU;XgY- zn!NzAK<5{q_5j{w2dJyPf7iYH$A8RnkA39!vavm;XZmVP#z01{?Xi$8dD>@@=9zgX z58>oKIeL!mWQh09QR2P#A-+>#ug10Kdk<#W0N;7@J4D(RoZ-+WS(-<|Txj3iTa#=N z?d!L_iEGL-|KB^WZR4!AUc~>~eCNgakH>xn2E3g4~@Is7P&;0L|r}x(J$r(Qk68P)N#G|++uaFIZ z{o2F6>>hn#Z)i_GZQ_^M@7|NmIhMzK?Z1ii7k35r3)zUh3&3dW$(*yN$fErpG9yFj zWMb@WEAqvAzY*YflYO^>-6j9CGK>FYt8L}m17Oby?(G4nU!K;17@OI6*Oqg3^D{e# zt+4{uxA);0o9H&5Fa1;JW1j!%+ely}@NP+f-l4Z&cU1PS)49)d;bOwpfh)$mYwO<2 zzN(+!hc)pZW9VM}zzn>?UHo^A8Q7pK|6IVWn655t^4mWA(^wRjJma&hIV>09Cv&r)H$pi0C z?tA7pgOas6w9z{NKD_$bQk~&wF3l%d%M<^%|G(1A$+czOJ1=wJcL21<_7yjFebM&I z=Iq&LX#OksWn!9VBY}~?6(!JbyV9w5sg{1D+qWLP(YN#-y(|5$^}nody@%Bvoh!y! zv34;5FYpF4_~Pv$>o?yJW7sZY%n{-gM)618^K*TdeY0!%tC%NUId+cm>Vvx2BZ6lb zC9iv|w8#Cn?fo|gWX7(E_r{0&?)l<;U2>PkzOs)Z*zbSl>*M|k?#WVUKR~|hs%QMa zX~Udq-yGt-nEhcsarirz9qTug%AM_2ZQsk@ALc<-MRhjrE}vx9UOnLA1iRe zdjPR}+)|c)roS;l8s=b^*#0z5@z-%)z`0AGmA`7N&d8_x$&_t@^U8?#Ucj;i>?yE| zw12I+e5iWtSLioR_gw(;%ElpkV<%5c{`@z8%eKGBk=|O7u)!}><|6( zKK*sa{wB-qxn5(%f8!@N<7|J$*v&t=biR)a`yT+ZB;Q~9{P%vimvXZgz`l~MPJ0H~ z0I}a3_AX!B{sxEkI@GS19i&aR;q%({ z`#}0@ZOHc`JK=d{Cv7A!5*P`*t_0{Cx>fAm?p^Ak@6&s(>EDm@eO|Y{%ISBU)pkMK z{4&hJdd#3-`Tp+3%JLQI=ac>N3315#XpC{bjNgjiI3;EalyCFjzV8b9WKTlfIK>VT zs~7v(0(X^pGI$fQz6>uf#x3_=prI0H*e*G&yx8)l9F`ul=6WNj> zwyI0WrZmU$bOz8h`-3fDKgt|*4t3iAYhJ7m{l4aY)H54k)o;DG2H6Cztq1E&yU&{| z>Ffq$b3NYyc%GCdZ6q)fxTXZ!v!`3>%8%1K-m5-OhuKe+p1(uq(aqxc|03V#F5~I^ zm3G>9buH)*eaiR8ANTr#O*oMcNjFOu@SCq{PdXNfF^%8qf9%;4d`M|*0r&Of@>R?B-M3gRCU4^<8}hWK$iy=N@AvzZn{)ozQRG3Ep0g*| z5$r8?fouF%Z~nb&XZ*~mw#=vZIymecfZqeQFVOoRbBx9MBIuX0uR7+J<^QRl_{nE$ z%>1|hTaVc+m%p=hmTQ0FJD08SvbN^gNMIx|61b}b=s-Sdd#WFI4*f;vlhl*1bLu|! z0NouA@7mwX^67EG9Y+a7?}{kHpV?9y|6=m)z@*-IAR zRaWX`SLz#vX9I{^7nlD9(Dxav!TniT?+Da$*S<{ok-$h`B=8~$0~0%_u8lb zabG|3{oAXq@3$G}W6sm>-xwb|haH5~LVE)C0L+bbgL9bfIhpbI*;~B_Xz$-#2=ZdJ zbZy}1X%i%C&)9XiZ?3%yU<){B!L}vu&HdwjJp0T%$$u>w`=4Rz&@Xfoy`0{WX0QCr*EL;5kJ6`fGaXLfV`sh< z{g%%oJ^s^&u>qs8v3g%8&iChU)uvdW*XdpC-~SJ{`iV^fMi{Sg>ZftnPwZ}7e9!j& zUt|aH{qz6ZJ5Y!A>2zb}vkLeWqi|9CA9vQ`b>#9U$`}iOKHeKAIkL6L++4H!te5@$ zxWzg0axW+=w2zYCkBL~%X2>ouzv|v$&12t}Q@^>5{n};kNwZe0Tl1ZL*jmwd;aYNQ zFW=`O_8Y&@=R(`ooIY>6WL;;27W=H|m(OQ?dso&=$t$Wt} zPJhmSrS9~ltK`Kwy16p(pN^y7wywS5KV2uE{Mw>}G4d`Wr#JN{oqER7>HqEfFTU^t z`QdBnG14rzxVzR8vt9i zukCXW0RPSXZ~Wum*lX6j#C_{Uzs!@e*V+SU|6e=$h2QbtwRY=+_}ThfGU;*wpt*<&ozITCgb=93vauQ9tPZ}X1H>UsOPoA1kax#TeY zmp&_xm@d~YcE9cn(1ZG;uj$&ZrQ=Y(Ki=aLKal?~zdZVzuGKGkHs;`eHUPfxKlNL^ zuFv-Z{CWG<eXd%Q@(ll9S7S`Mk-$jcQUaabqL1lSdM90!FH0{9(og-A zo|0}4K^%kWV%O=hbeVhY@Xs;wvOl-EzkKgchigwzCmo4FSWkE2zko$JVJ!49n?}D1 z=~*%Mi}h6?AAwB7>d6i`eSdP$zVWdYVn25Ag|W~xeYnk7-=;j-h}dha?4F#B z-ETD517JV42jE#O7k4jaQ?QxXSZo1h1hN)fXH$@?^{~$!tob(Y+QMaNtsV1ky6ObJ$?Tzn+qF29>FubN>0Y5etl~18@mLyfV9ns z=bWv0ysPB)Ju^0(#(eB&CmFZk8VA{Eo{^vR(R-J;AK%T3Yj&3J2e{4_@ZF2Q@afO( zwxnBE%9~$(U~jSi*aha_xjF6oE@1BptWj$y9_yR3cR6FHygpc8V)Y9r|D|htufdDh zIQq4c_qO>b-$-C2@bn}=XVHmtCH+G;@#Xk2bTGZ+dUL+`MmKrB z^;G4QU4f4CT>;PNXZfV7hu+74*WrKu8_w1a-RinM+?a1XxPQjRD!+cw%VK@QZ=vzJ z&ga7TST7dR$Cbx0V^hDe#l6_?eYE!kSSHWAy2|iL$kxGmHjlB}f3dzg2S`TAFS(Pe z^^$z8BP_>%-^nCD_2K{5e*DLFy8Rb*T2IPp-yC=LqxrYS{Z{0;hO7Z?#AIdfGC#_y z(|SDXKKY-$aq>UgSsIxn7qK+*5%ll2YscsB+P`gd+qNg)NMI!Jc1VEEqBrSDx`r+i z7w91RtWbJf-}-9l^>o;&Pt#*`SLLx4BQJjg?KaZVS2|E1YKNYsQ$3^O`T5xG-3G>F z53m{J(HCW^C-$HGe;)hW|BwIbNe1Lc$E#C(p8L!9$3*SF&bV(Qo5zrc&uNUt?5u-# z@UHRSo(!3p2Qo4@>?U(*ow)YAYpmz*W4}EG*V3@RARYg)U%PBD>&&$|(YAGM4YVHg z%ifPX^2TYliR)d@EB-bWyP`9Y>a;f1RXF+YS{~yrzP#>pBR;QRW&ht=WCJ{gbuoPy z35*0Drv&H;9OLJvhhllQ06q1Qu=WSi+u}1{x=;R7cUAZ6@;|m`mhamocrUa;*VfITr3Y( zJkFJHon9FuU%mJK#?AI&1K_avB7gHjo~e8I7zsQ*3D7BY4c4W9(#hgeKb4-2rDN!(vmD)4kni$2KE96s zuba%KbF*2d6dmoaIY*z7`uQgm=uRF#{M&&^ELOg)qi79 zZ-GssZ}@M|8((5SJAls_qu%uu_Wox+{Qo*KzRbQw%^Lge^gI63>)Mx3S?2>f zBS1H5-#G9F`>_Gvm5VR-p8x&V|Ka|h8rPU3Pd>l;U1w8hOCKHeFmgUb1yDP zKR*}Bl-B2_IQ}bZ4d13;t@Yd53%99r@{9yV0`Hat=uW;DF4I9<58dqVr;pB!UcoyZ7z5kK^=eW73ZDbf?(+cke|@vxkiL z0_Nmb{?0G_{0G1P)nD73`H#Q#PxpB<&)Wm&thTXLmwkbJfA1l153A&r=iOR4FCI<4 zr?HcVJrun4TS?^7{F}qQ2XOlTONQnm+lzmX@oWLMn4n(4{(w0#$M1di{SW@^_k8i$ z95>&s#l7Efd>3H<9>Cf&GB4I?>(|;5q~B)F*mUx>_O;s@Ri~g2m;9Hf=hkEQd+o0N zV7{PlVxJqfleXA0FP8p?PwGE==i~Cu^O3+v;Au*Lo}h>5m~>b=Fu$mKe!e`)BrVtJ z*kXBvm+_y^Tpcfq)u|2j>1TDjruT6kTlTrXrR&_w!>1Q3%NNp~>p%19&um}OHJ=jW zf9t3I`Uiji3qQIUkNbGfzvO$$<6fTU@!wvye&7qX*{|mN_a4B#ww}^itj^ez0dCs| zVF&mhC39u&aFX2Y&9j@N@&E1pfBu`lW#_~AeshsMz^T@%?o+0v#hS zeM66>%al>Rdc<@+eS2H}YfoNf)vJ#}J|y2CTeKyQkls{Q-`Wf1`(s4@KR@#uzxb=0 z?-=je_sZI9#vZ<>XZf1@9l?@S?P-Hf=i}Sw=kxPv`MmbKjaQzhwz`sidjRc)Boi`| z$9%B?*lqYPkUP5p-}(Q7G`_zy^TswaHz)tU@ZJyXJpl8p?&jUPvA*3~qs}Pcw(rNE z{MHw1Yp>a5>#9R|+1y!A^0YRMt7~=T+sA#ewJT5S)wO*|8H-~+&TwfkH@@_JzGF9XVyoowXW?0?EQ#U zR{mIRU9sn^Wp&8=qB+s7Jn9vc>AKI5`lMfm*0T64qo3sAvvS6+$?D_Il6nuOPxcFp zOCMj<|4APSj0B#p1n3FA7u`Y!rHjNdJbgr$(CeqP@LwJB;XO9tojnPh%lEg>d^x_Sa8Ewg3|ZhT{+lz`I7V*r zmw|gnE?ir!b9N{jz?xRa zxqkIc-qz2H=BwWlP^a?kG1P`S)TMpFbD?!3pSIoCerHRpW5H*p&mh~jwfCYvb-tBM zwNC~w$~);Jfsw$|l>pt4ZlR~rTj{^k|EH&%cRr<+{;I5ddd$6g=^u5Z2XD*&^tSra zo%IdZu@(E(ed<#BQTxiLyX^&F0$q&}?G5N7zff=vu=mQ&1pLA8{q8frpWlf;@^ofh zo9XR*TwLSl7VCp>%IhgzleO{VzC8f!cP4cGYcMA3Zq_qaj6_#2z)=_(0)=IxiU|m@g=C-vae%U;p?+@fX*Q$H#UMSso zvjO^?s9*p3jF3w~pIsOG{0Pcu`+4ihGd6^=lB@gY<(ssTz)0ZTlK_8{Uw)gBr7P%{ zQ|G0-(nItJpWAow&U)!rI<2y&?o9Wk*XY*x|FS)C`cc2sl|I&nd*#I58K+n2a_w*Z zzF1C|ruWr_1p+qk|Kq>%*pDTACBG@(I|2Ls_>&!A|CzqVfBChcZv4SAK5l#5_-}vO z7%uIlQ+7|`nheYx`Pd`DfA#CbTYr6@;d%S$?NiC8&eo~&(uCHj_2RkDkyw6h`YwWcTJp$==!@IPfgX`J{wtd<6H6E9 z6FQB*eb%dd`czqYaME>pOkACG82v;io%M8m{+^mL>XTn^tsMT^%XP1v`s}xSr0J7z z`u(_%2e=Ub)sOq?%LZ`1j~!qy;HN+N>FtN|MKOo1pk3wkL(Cq)wch))0oVhc>qFyu zs&Vg!yc2QukDLl@0DQtjVZQ@dek)SlKW;dEwYpV6-zBP3@kBzVT*cjSSwtB?wFZthEtxj#o+vnzz|9uww z9^j=dt~^;7i!u7l+MBBV+L?GHFcNroB|r~ca{76r?Ti*ZLAS)w^d3D#kEBcJWqP{0 z_(k-cw$hi%p5@h%9;DCdGP>Hzy_c<`)z=e{qpO-`d#B%Jj<`;NQ!g-`WEpTY+!iSwM4Z z{;=J=hy}bakay{^U#zV8z<)NLb(uY2{_($beev9S*N(N5U){R0remgcCZGD070!9I zhtRr|*V?$W0jf(MJ#YQUf7aKYmHsHB-E08;^*MC!^Xl1Iw%^FY{?@ed#DC?^e$Vwt zU?lKvN`PLVgFbF_?OoCn^g}Ea(@oOSJ9LlhQ|Gu&hgL?pf@kzt^`_IX;H;;9($mt} z3Duk5Pj~taApKAueXJeV>=Jb=D|qI8Ki%(4xLBI{`Gx9|&-k|8u*QWeoBxY3V!kLl zz@CD8I#;Y6`d+&@f9`4b?q5IE-?*N7%;qAG&P9?Nn~A+desP!Ftg&Zozu5;cH|_bm ze)fE^-|zcf^50yWWAWwux0mm^wyZPutGIg{Zf%`w*=Nc)&UZSVOS3Lqt3SqDyVgn1 zv>E%wl|9#ox}+vU)~fqU1+PhQ%0&3E;?LpUb1zpXFy?#Idh zDLp3>^G-(Wq-=n$&8<1Mme_Nf@!}gBpqL$S$$wlH*csV+rww3Vz`RSdKK_Ueu)ZH> zEwsMWr7zZ3>(6z4JU?6c>@hy}*C%6EPCcIa&Vkq(YTcgep!0;at=`T4C5QbvB$Krs z*`s8oFW#Azf3MvexyfT48cV;|dA2pzBY}~?yCs44^y!7uPkG)b<-xV{dr|2Tx+#4~ z?>PHJx6nt*3F*9aKr8- z;N(9$${MpS%(XRn+5r20`T8gKts_C2bw%ddi2u?~8^CW?_1h0@0MC>$pRH~4yVv@P z_j+8uy!F?*_T1ciro6ed=G?a~&3{4Nt}AbRrJejg&++y7RiB`J?VkR>`)q*5t`DVW zFR<(F|9dw71MpNoc{A>(B!Twy=^eV}MPsMu=mqRg=Us9)ed0NtVxN@GO)sU_#OX6U zc7K_tbg{hJu5a?XSGP8+H{FW~()GbJv3u#t@#kVcKkqyT7W=i)Z^I}t^<&G1-uzbARk5?*P~V_5gZMZBEVm$$ZzH z)5Lpw0Dc$1IZgNGQr+2iC-=>J_w5N;D{KHkIkuzqWSx5^)(6j8*Xn8QwSMiXvmNB~ zOnU4uj`yCIRxC}~b8o)$gnbsZ>$>&dXR-deS5NOO*agHcA z0`Hmx_&{_hcKO`DXngq@C;#c1^jvy}K1rw0IcJ_&PXC-C*30XM6>HIJK(2s2!Kplc-UDK)bJR2eYYlk0+@pPy--k;prY0ECi4#6d7*1Y$}et|#h z{l9*_=r>v3^>ugK@sSZ(k{Q3hGivq&$k4o4GuFeU4Upf@_ZR$613SRAdaajB{#ygt z0OsDcHDiy4Jz|{*oe9vseAb)Kg}yZRtxeAaZ3_9`eI}F<&il*jJ`?IxhklY_>3trh zckMG+D1FcMl@)_gXA`t+-H>Y2J*lhU;>$a{HRn)oub*8A>&`#z6nZ2jf`yO!@v>vN-DuDz%7 z`wIFv{Qu}WoV$_0yC?yAhhCsN>42@D*8A~utn$!hxKE$(A?OU{=skgsav%TGEj>%0 zo%hl%?=N*-Iy7F=we+}h+7q;;k7D|*yv9POd&fbaJI~dbuJk-Teg^5v(DD4e{Jj0$ z{`Gsl+Vh)#;;lzK@&mrL8s`tTmd?*dsr>NLmZ-#o{EYvo)MT}zjrJ)HfhTzgXLGw(v5ht{uk z<+D+{`YVsM>bfB9yzX8sD6h`yIn#_!(3apjn}keC%O-GNf90hE$kRAxU+U#+a-NO^ z-USKJHGTH!2-iOU=h)n1Zn{KFchE!WC9yQm)IqPD&$V;recAPyH(ja^bmghD)bCzh zp3#XX``y#&^s|_+#}-iLc{*OY5dZD}E2~cLj{Bcqv3JVO0~qV(%(98_U!Rhx_tf_N z=~aF!?%TIccb_tz>laI)@3=XCx%U8;9mTF<1Mpb|>%=@^n>~QmvY72=j_h-JC*b!P zy(_S$`pqXCS4V3g=8Nr#b#HCBw-;aywYFMk>J-eewV+PHy|to0?E6 zebp;IKSSMXOFM$GXz%2`H2wEEt#6f)Z}|V>bvRE(0`Hmx=omVJ4i%@LaI&$|SMi_T zpg-sg`X{|3mPWsbOQ+k?U#GshygqeZ&(tBPLm$#pwdG#$?DWCpr?2^H`Dyw^M?1@9 z|37_x#`L)$FZL^|Ztsiz#}97!oqz1_zvi^R`M-20ohv^*ov+`Xsu=sF%QN4vZgt%* zCNqIeh5hlLJlR&}!5Siac9?Z+%@*_f&7(Q={{ZgQXHA@E0L=ZlCS2S1$_DUUur|83 zR;)>NopykAc&=5~`qP@#ersLd`wSF&)^)KuvI8nBt!uG+V?S+x-q~qeAL@tu#$jL2 zdn)}J|NnODa&nCX-ew8lCSAZs#rE_99bjDj&Q3Zb{?kF}C%VZ!U2^In>4nnMWBje2 zopE)F>9N@Fnx4`|!M*3(M_={n^B&K7*KeP{-}1rq>;P@qzhws~pI%Sr)8DRpFRV^y z$Z;P(>>bms0>6@6+Go}m{g#GP-u>@A)i1uk_W_&(R9~`vo7c@l_uco=$<2Fw?*P0< zA!Gh3TYw#4U6_OB#2lGpW!P-7-k|(yb?H%KgMo{_HcG zviAsLb?cAMhJFw#|Rr2fIznDzDS7BR`x4AZFd|7j2 z&ma5!Co{j_*$tuJ0%(olxjp^tzt%(cp>=`%_Qk}V1CZY{>j^VEUt&$^ul`ue!uh#T zrZuY%t$X>;Al>uJwDOD3>-c}h+V%O-X8kxnOY(X~X7;Jbc=-QzeKw}IBZ1eE0LIY| zr~gkE&=2&0KzGD`*K`rRO7FN%2Njo=&MIH`FN!NqN2TlKjs2d}g+jX3b$V4_|Kk7j zmF~d?Y%F*3II{u7}-80|!R)(L5^_}s{*OwOiwXbdcBPZWY-{;g9_pyKP zSubBz9=i5*=4r}&C;>7gdn_kccB?%A{3mnsC(mBf>s+R_)V{y-1J*6}EAK2oHl8)Y z=3^r&+nR{~?|I|FQ+NDJX-Rf9)6k*KH>>-+gARCus$1Asg1SnBC{4 zxX+9G(z-4_%S!A1jE&2^;QBHQ|L0RS5_nn?pbO~4lmC}`0q5v2!LxJ_oz=CNE)!o~ zpZcro;_?^kk7w#mCrYC;vDBe|<3r`-`(l$VOiMBOCq`4)tAXdjZ&#J@vF!*Y!thUdfv8zxPy@&+5!So6A{C z^NacNv}W`9``$+Ofccfry0CW4zwaAb6Ric;Yykef&xrQf0@@Mm2ec<3pR}L(tN+W+ zuWoDEx^OLMN7{K`y4YGOoSzZb)^NcXUH7>u?s?COJwKnh?sM+ic-gMTs2}tG|N3ip zY8(kXHVM!HbW8lF2ht1T?(xfgdM4c@KGV`O;`7<%eb3H%T*uN=C(@bp?ir-XLwChi zY54CvmVWn+mJX+v-HT7=pV#(ml@+VoJOBUpfB(%Ld)FWPvjgxY*66!_;5~-$``H5C z12_kuzVl4wV_OGrQ-8>k&AQK1E?djm6}$(C-!ZhgvUbfM8^At*^PJ|la{#S7>!W>u z){V7fZMnAw#cTlcDK2COcn8H^(9bhitM(Vzmtt$?eBO0yyL++zNmr)NoBD)o0oUi} z@4PQ>&((95C7`zzK#U$E&)1#E}%d2@1@ZPr_M;nq<_ShA-z;wnPTb6q?=Fu zc6m+L@yqC2`d5t0bSFP69jPw;R9-&(kMS?!z4F4zer4%zWz>ZgKmEy1?{oh40K7xS ziuV7pULJY%!5H)X#rt~M0?w%!vwU}-t*LaQCJ-AS+m-Fb1~9kgQy%Nsx;9q@ zen0m64hOqVK5J<6esLL__w_2LF6(Kp*|i?!Q+LewuIRj$7yJ9pVs)$2_fD)&@2JG` zSZ~&cdR=SRwKQwIpnY|nL7M0C3b9>$ety;0XVUd~U)#xvEVbb*#H_ZFz)0ZTmO#3| z=RO}_+R5y6MtbIqPrcH0y6DW8t~&Ks4438_?`sS1U5n{OI-kz8w<^v@udJAk^^6YP zdVAf+`4`3V7L-?ye#Z=azzO`v5B%?$@yaiD4$Z#*K103E{E?^k)Apw2ne$ZF{Tz|0 z;JX0iZ0(Y{_X73+FxvW&$9!e4nL}qe*mmvd$YYJ+Hl8bshpmfjfYy~YiSxLBxd*Uq zfyGYi)tXnve!$6mZ1ulA(*4dpyFlB@*nhGPwW%Fz(Kz}n^{yhjAUT||cFS*Vo}Xp+ z)u}G`V&l#KSKj!pJ7ZJZNMI!J*d#y~&<}KHdM^gk4d-=wBOQ{CiS6Q354rAH>2%G> zcKVU-#dGNe>3n^B{OAd+#rQ`kD?aNE6cG#hz=M&NWtgHT~O}Kb#Qq z{l)ZUK>qJ>;g6r0i*cz4QyK*1l|6)3>TLac=>(`pZ_H(bm8vD>z_}qTxd27)c zFKEa5bgysw9m6WybN%bH)A}`@GgyCpR^{>ejr;CBi~suM-HLYK_BAs79|?>EUM>N8 z!e^h~Dy9$85nYSf2Ld=`FfWP+mISMHi+M-GA=A_cy=OnfOj`@|8T3 zhptnPSXp`8Yg@bS)mwY?xN`KWGKK7b?#0TK-njD>PdflVq|=|;C71S{`A_txm>(*i zJTIStdHT8%Fi+%5{?1uoxw-NVKpKW+r|mU^-;_cMf2$$F&CY`?npi*0naYE%;1nPdnMb=jW&YqSn8HdZi0pd!`-&Gn_U%{+Z)Y!Kn)d+SzgVyKvg`riuyw)i zG@s_i+%=cQo?)VOho#C0t*bq+Yi_L**ZKUewP8(eJ7BHH&HtO&TDBkHx%8g7S5E!A zZ)?5Po^@yp*8cf<%qEpC$S;;(J#qhewt?sJUfKfgv&pSx?HQB0$@T4A5!36Dz)0Y> z5{OZB;i+%vgM5B@1p0y=N>`<8#CV$yqHpM>bdGYEDqW!e=+d~azVw+g=_Gm5waRS0 zd81oh$9Ve$*uVEsS3fG#Ug@d7wXfbnebT=A)TLj>pRb?482dfL3@pL^{)=8azW3*S zv@whhz3nP|{e0$}oc-p%vzEQbVvjjrXJ5+|{6-OG+p-_~*Ya_c_5$cE5XGQoy?#A1FV|G)qC<=br?zTThsoORI(#>oO?z4abof8pgxw8pZ--u|^a1IYC=@6USq zACKPt)!EnbtHWNLG4N%F+4;16b@GMl?47^1&LF#t7R=`+Zsvb=ec{-@Gk`+2=DB^p zdR_axal2{YsT$}$BFDJ9_+6Pe;y%%xV%3kgPJQk(#RLBQlzCRX8|R4Pow&4O!_g-e z%vdyI%C$P#E9>lV;Ui9I*VlOSnq$rbCpId@O;D^AOXd5!;%~0+eh)xDa&K+0bAWMT zTRe)vbfxa@FUHdexy)OBAQwEj>De2?=D|I^%)x?VrB^aTbJQAM!rin0ddPAJn(Xu*Lk8eJmb_{dS%J@n>7*>uLYw zOP=8JrR^>cr@x%ecJn#*nvdz%o^rDgiM+5)tpZ?ADPWPbAPcI-re8bQr|;8=^}nqK*ol2`PP13?tUUtdV{ZZW5siGb8iH6ZWjNB&JMaY+0SYxw5=zNXFBr{D73zA1zKCP!Q;))c$MDsiW`fQK}U zPxFvbKJ4DV?hi*SDn>j6$rm5vD#qYft}WlLJNOY}w4F7IJ@LS=I3-Ri@j%}_3|ukz zh>7L?ng6TPQTLi+xUs7ox+V{ux$ludt}pkeS9rSjH)e8(eI%1uzJ3FKy#J#i&qF%D z^?e!*WJ~`4zJ8~<^5@|j{{Oc2&-a>s^UvPwvprvD-^;z*{yGDIqZ{*~PDY?ckn^&sAO@TvTUY<|m+cAg!KS0)Z`Yi+I_MvK4v z4;u4ncI-CGO#`2o2KXrdaYuJAci&%e;fMudLU)kvmifN6KDoTuv)=bFIp$1Da&F_n z=Ki%`|Bb8u>#Wfju|h5r6X5XMihW1yD)$HB(P%ff`R82w z83KQ?w|J_K2i?l!Vx{*0@$xQi`aW>?Z?KgAL1UJF4;lQsfyKMd9P&YXa$c-o=d%chLC?`*DozvqAF zz;zbv?*K1;ZtTkcmz-bzXM5(%*0Z4{<6*n~J4EGjbmZ-PJ$){JV#Dk@pE8H>#-h*P z)$`kl=hyKv4*i$2d$(C{8u)r@puef(tMY}s@At@Jjyq(24(9)2kvnB^rd;N(B2TY) zb;OS|e{{BhH{Lx4&*GX`a!rfdv*-QUX6O7zS+;igNH*`R$~N^SKN+V#)eaXgc=aGYPe;02O+%)jj*FZ7Eon0RH8*wp2aTWmO5&d$z9Pe#FzL$@CBM=Yr`=GIWS|6X5 z=lcDiyoOF(bMM8=8$@pk{dPdVZ~h>9ywH^E@fQ!o0!6*}0veMX;)Hn8?~sZq#i1ac z6>_NG^E}qHcpkj1$$a>r3Ex=!$UV!_gE)NXf)2WukxMBaue^`u60_Ic?3hOkmiw*2 ze9j}i`FA$4UOMV;$D4o6ee9)vW54>=`F5{je!EZ4NMd)8@P7;rxzV`Odxn9DXzXBcB8Ll6B=* zU^$*|C8o$j#i?jPIB}yq@BZ)n;mpzB4T6n9-`T+2#kt~&SRnosBS5ml%g^$uI|>=m z>8pRnkz!L2|K@;89Nu%Jidf6XI!nzR6Gd zF3A4*8Gq>9j-PqJDG$B9Y)5aSZyNZ#HNZ#ujh|dC5A&t7RrBp~3&`I=KDX0HD;9OG za5wONAm*(5#WCKyrn;Pj7C*6qEO?khpLX-x{#@Jav{197a zj1lADW(-mnPb%8@FZ?kdIo0DO9*IlxdTY>MF?Qx*v8}U`Gr(Pb|M34`>m1M-V8uJ} z_=tmY|NMJDYsO!(cJss0TW98n}JmUefk{PnOub#s%+Jm$^boh_Wz z<$u1$H_V$1i|+8L#^oDl5Pv>`N9Ta*{JC@R^iN~bRde>v_;t3co9s6Yyp;y{q@2vZ z)$`G_`MQhnUvGtc3;h`_T)!oZZ@FCjk=qq~K<^4uhQ{!7criylQ+GxY=gNB^f9Lxv z4vxI7Z{mwJ#fm+a)i17855gsvx_G2dZeFqTkWYLh8@k4U<`c)vSD_DQ0QrB7KcM_R zb3R?+uh50OFTPGW#QAyOGe137e0^YJ$>JTLZ%SupfOXDx&O8d9V1@s&DYk6>{0e{mfS=zb zvS&6b_jd*WlOvxzI|sxwo7Gl~pLK0>R?zF$P9D%&KPUUTt>vbH*V2I8%SVFcjqZnY z9zKhf&pI#o?%$jJq`Ovkc96@&AUyChAAjBBB_7^Ui(UL$3?dgC7!NWj76*>HoF(K6U=DDqS{fzh=%$PxjtED*am+PhE?Bw7+a> z`Of8>*}mWV)PaXX)4W0FOnb-9*jwjsd0$)ZW{>XjEAL;Vr+nqed zhvD2?yy@ms-X6scxu37XzqP)|V4m_?xwCt$82a!2_3tbiabU)dVhC7_n7C{8$)mhR z2Ke&6y7(r}tGoBFZ>vY_!#A1d9AeQd)*{}@@e5YJyw8^V#-KVdg#dzL<*vL~G_8Ux}v`P%2% zA5Ff&R>@^P`Mx4|t7pT#wepUC}+w|lzKKjpNB>7#g` zmFZ9VlcRd;)mF#zbG5VEx^5bHsRovh95F-AUw7E!+%E?Bw@32N&Ia;+X9j&Qo%^Zd zJA;UA`9GP&jChbod&VcUGp025A&7p)Q+2Uq=6!KYP8QqZB@c?3&QNHRr?`YpoqXbB zW!ZsqOc{;#f2VVC86u)==LZEfxVoj1_q!~XSG*alfTE0e8rK(>o^w^41p zoiCJZ8f^aTUB7xfz|JM=bZWhz_~o2K59$itC}?JxdnFL%v%h|x2GKWesKrv zJ+X11I1wyvG)5brXy9kwm+!<<@k|_xk9ovJ`G5U=-VrOvi`SF^KY8EVMfu;kL2S8u z2e|vzfBz=XyTAd(tGn~SUA=QazXjA5ugECwlTUsTV_QQyBAb$acUXV<3D1hP!#=nFYtIk;v3Y&=7R;`VoB!qo`+%c&bo5?+Z~U|eej(Q@ z`57FalB3C{4*K0qZQlUy&!LAco433VYR~-N-is4r2i|-DelKj$8Q>Rw>0f@=dw?~u z)y@UkDj&=rt-S(|HyG|3>}+za|D|~T__^8bZ9VTp1LXpKEC2Id-}Rjb_?=kb@BF;2 zyZ7@IKKC5$bfy+Jn(t$MP8=(7vgeD|M>clf8{%9eADV@oIs+)` z)>QsSm+uAVSaZ>Zbyqi+`6rz7lQUgUsJ<6-!A)qcDT6vak0+#N!6PsDWu;_J9pdo1xbVeYfZ6+7FOz>$89P5PJK)?>V1V zGyUx5He=s@OGa0gRHqdx9@NfznB&YQ#Y>y4~ZsknP z&p>w7nSlNECeYY?7vF3zp5~bIz-RmBt2o4<$ZA}UoU1PE1jCh z-OJpqS?-s^wedZh*O@9EtlWQz;npHHmjmz-XTsr47fR=Z)qlkKARen6Jn>eF+ty(0 zS)3v(JU+&&Cu3{1C(cFsTiZ3;xZyu&Ap2q`_Llzq&0hOL&+6HQoME5Xo<6qEjW|5=I{qXl^fFl;%`Ptp~|C#@LR{+UU-Y4%om-~)jUUrkstMg@c zXKXPbU&_aQr*Iws=XpR~(Z}wZFMZMnJcuW_mpRuw52%xA#*OMh@+;N~hrW^zbk9#F zba-3qF0VcPU=_F8O#^SMfo#&h?^8a4Te<&;F>Ke_v@^j|q>=Nx)8J(+|5$nKh)w)W z4yo{y>1Q+VmVYO1#tyz@JRiqHAHU+0d<=ds)BnkWu3~Jy2^MqEr7JRtg<=uj#>DeS z|Hj?_bFWxn-Ngg?)s~~hRrRHxgI_U|{H?EXGyl7( z*iU8o`A_jbjGIBcI}9^uZUq|Lf}=K!4|hnNRtz^SN>H3es18Zcc?9?7BiWat5o{ z4z`vZ;$!{k!2ULuxyb^eGq(LNCfxkurh&KA06TM!|K>M-eEnPg&h&D1F~E2IfBVmW z?cOdQlZ8J_8x{vv96J1&e=F0^roW)&yYAQJobn*L>cMc)YKwE`GlzJSujS9$vgrlQ&;4X0{&f#x5O-wMR@8zpbHr zzP%Fn!S4L+pSCjqda$^F6>jj-?M?4Z;5r{1wgYx&Uw8k*j@S~Mw|_QMj_-Sb+z%&jXH)At z!7&bxa=&@H`;#-@1iLq&$BUfPhx6NPk{wmgNBI}q;-{5zKO0AnRv&(JXb%1hmrWNB zc1Wki2+$fpyk==_?L~cO_;}3oNb`~n-gxuCTQ{h!KRY1X7p>%mxoO~K8t6=#kBbj% zj-T>%xnJSGa`Hp7HP(2vY(HCPzu7s+w)espCN94M#WsD_>&xeAgM25yt#1DO8%^W% zC!_o(eiUztE#eNGwpd&|$#=EU_I zfA?13-QT{6hjMji0(EkM)$xK`aTedBkTdx}MNBFl&;HgGE*;ThaqA&_x%EA)fplnp z*p|JdYrc>@XwQ96ufKcvvYE^NR_EX9EARVOI2Kpw? zC;3mm-($D@ynipJv-?AT)0%yI$2#9?W0#RS$-nZMb|(eHQpizD*u- zkx#u+Zqv^9(D6Y| zD_&n>c6YM7{Qu#5|9l6iUj8@U8dv^5^1#x~$p6i=>v+n5CfTf8tOc`$r(5EU@|p(H zC0)}mdvlKD2kiyFtq$s!+rjpC=6yK(&;HcGb)Ua{Ct^?9<$QLn-u>S>VZHw!-}&YI zO80*2jdqK8K2J7c@d{6$*2jTTA>{}n7b)Hs-Hy7V7r{??g zVqSi!kUhEP8p7@I2Och3ZT0B)c62**2B04@cTON9e^S)DtBKp!?B#~PY2c|E;FEq^ z?y|=dq6Rz^8kM=29;m&G*?9|RwqkxxjTu4;%&a&IwwSL z58~Cm&RoU@)w}N(GeP~G4b<(mxUatA?GXdZ7b{O3`*%OrB|g@kuvkc6)(>V2yPe$H zAFqLF8}^Z|*)O}W2lj-0^qaty_m8~XIiTDR%Ju8se#!sU%lGAH_ML6Y``YYFtXOA- zW4y8Dd{8kbS+Za9sk006#uIIR5VVeRK3ig=3O}@FB_EXgXa3j6AK7~}d<}m3GyZfJ zBriHLCkJ`evv2KLpKC*RMjy?DGya{`!*vd@@5YNIbYLCkqf4>*<1Olajbsz{*B(~r zRekP{HhX&ye}h3E?1(=r>iip2y7Pnn7J$#I@0Np>ozfdSRK4m(76u9PAuWA6xJKk0xID z-QWL@x;dx+u@nADb~468J-@7OEc?qg`C_>*Un}ni`6FHESJ=2Vyz%LYooXxjrn%;M zJbA#@P^`(eufY}X#{CA5{1=a6Q}tl6>x>o-9p2 z3d&2f`1fmPyD?wy)nAvsJG4$A*yKI~d$$$QiT~YUU?fxB`-nRHd<3Asbd{_y)apw8?Z~n~v-Ty=H zhZ;Km*l+*m_kZ@PKYQd0d?4G-janXhc&7r89V-~SSI~ZU5)|kUb;O3Zo zh}_+siwhu}Gr)`&#gOh5Vvo2}E(H~FN)Ddq32|oS)|=Y$HrXQEvmfmn8?eXrjNNpmEBD*?^1iy9ugw-a2dK-X^BfQzKIQ$Ox%aax zdn2oON(MZ$_xv)S$T#_+b!DRA_fSI>>kN$j|vcy@2LSj`Dx{ zE#}Z4dh!<|@XOcK=^hPUGj6T5AF(Sx)>p1q-^--aH`{oT*Ic0X=l&f)PG)oVpx?RJ zr^oz@ZrG(gW7ljP4}af|ADd<);xD@9VZ&(IC?3uR56y+gluI1M>!C4UW?%o0JUVga z;g@IcNaYLXC3JL=-0`5#e27iU1?)AuoiIB`6K!>U_dans*Opg6ekCXIJ+@ylcV)%5 zOZ-Ehe~_D;`FJwlk2}WT%ZG~*%{6hw6;K@7^FKQfYZT+j2%1NI!NV5Gl|1f1<$pFu zR{N39PiTyFRgA^gIB><|V?Hs7eS^hCG26kpfx0FHKcT?`OI_%=D=@Xp?ipFWviSWAA#m#SOWy#JT~`QeJ=M}N@y)L3gY zKL0L$n4^-+$x__WX5-`plMlYSvFiHi*<7Fkm(S%Vc*CWi8Tanv-=VK!Wps^M`+f8$ zd+oQiv`@=jEMZSeA4e<{57qtuWZB?P{_qd3y0x>1GwJAFe>~I`dc;3{+7Ek(58CL= z*}rRt_G}I~^k~^M+5YBV`M&S^f8pulTW9(88qc@JTbH#uqwp7N*yj{S;Q6b6+gE*_ zGxL$`kWZk2&vw^$mcv%*FFQA{g08y0_{Ae%)W^U0aXwfd*giH#^xc871N<9jzv0Qw zw?S>iJmQ8}1Bw^oD8CLbw$PgxTPg0KDc<0<7jqOl$U_!77GK#AozTHtS9P?>zGOXQ zC%-w^n0b>`{K1oaQzmOgV|~en*7(|Z!Woy0)+g`xTk5%AyY1ZCpH2gP$IEZ*FZ*O4 za0*4x${4LN^2-iS~`ha<2-<_ z{_d;skbme89`E+-+6tE5k9_U-@a9(3<#0SfcHWr-e{bkwBYDUwr|JjUI-f`$(7t`y zX905XJu>b(Pd8}1lh8Xl?fO7%C3~l5Z91aoY#)w1pgNnE-x0Zv&o8pdGU>>~9Z630K zEAAe4Ef#0PbfiAl8@(~fx$^(9#t-@bh|QOLPLARunUk07)<-tu(3ktw$%r1LPsKcN zWDl1gOuM+%KfMO*2Vc$p!RqX&9F(mD%l~XZ5x?YS_2LJ9Od`es1@AtR6eMi4T{3>jH`g}2gEMf_LT8n~?4&kgr zT|o!(&)~%2sn43k0e+>PF7hGqGQRPO-}HUB#-t|@4&A4>y4Rbrwb6x~%l69YVhr1p zuh?3))$jG#JslXUZoD(8y+f~b-u&rr{P3b>d%N`P93QmhZgXlcKRN1nuRHC?S8LCY zwmo1!Y`ph>_hrRe@cdifclU4Vna7^*GJLAG`Td)|@se@GF+&o56g7&Fsbe@k3v1!3*A4_M?y7&1JswpSnIY>U2fNOvD)_&cWOFlQZ7)wra zfz}{yl95dM6>^c!`pf_m;XD5=Z}p+o3G;4Sij3*>*kuio=>rB^5zrCm%gn@+@a$$*xF|w-sa+8 z=Ek#m;+u}(XPN!##^Pli>2{CJuVZ1KhD+=7wlB|@FV)#_{r0OEM90}6o4wD`M?ACt z;#~h$y%^<37&v37DfkMKiv>#;^U*AC~MqB!z_!(9zMIyRUu*%R$E+m7!J z(eD1Cy_e}%`4-*ghx(frBokke>zupHYux0U-25s3EIw$LYuS{Tqlh!w;z{*l4+t-I z%-EwH-~68(WH!f&qn9^Sdy$T!Y3-wKqmUIc6Gin@BhY% zOX%^!w=;_|+UCn%$;u{bC+lt>xAxm=fZqSX4}AZ3e)0$Z+VWd5M|=~f?2&fol;o=9P1+5h? za#$bU@aC&De-J)i=*bT%`p~_trM(?@`$m5GapmXBccttHZq6>|up{=!mb$~TdHMPe z|I;6S=YRh3fBDY;{$GE*pxiHq;nTg{-b|jej=y4lcYS<~#|Q6d)%D4t{VfZb*#6uP zWBC@Gf@ksBxaNxQr-EeR&*`&uvd`pnPH@%BW-|E?YKC(l;f(AXCR*E6n zdoX*zL)};~p6dAmnTjcN?K~+)8KaN=BpW%+Um-)j$v>w|Xyi??2khR#hG!8o$%CF=SkHj78AuE`ytrwj!ighY01|PDswQ@PxJFnnXu?}Ydg{!mn|NCAttdQw#R-t3$R;d#pMeg4Lbn4`-9=l$xbV5myens4cXj%qR)o;AsP4x zIhRczc1ccWRdwODfA!fP9T<&o3u|8oAN_dup1=pIo0o0tM@NQ%lNga-^1EUZ|5flS|L<_F6_5DPx00{7 zKJl_TdECvWFIZ=?>aQdVxy#*P@f$Rs^;=VW4J!DOz4&Qg#2Gl}0>6<;r=WYKT=Oq} z`JXHq_z!zm`nwSRcg;?2_}A3{JKzs;zu!VDKk--p@`_(NXpP5f@-x5nzOHqBI&S1=C-SaRTw^ot&buV^K(B1uxZS?-vln7f`3q0& z-nToif}LTrV{Q8MZvvn%KR4c-=1|CJE;xQ6=7RcmxwXlTo;=oy&RVX~pYeE2T=Tmt z$p79itcib$>-ry)tuu{vvCnK?J-_DD=#Ykt|*2TWa zItx0o1dGLZn^W8Z#dPb!%RG1$kHvQ~l3lSLv6O7l7-x)pBLDYhWM03ErCWUu+5KzU z?0e*8pXa*8Mf>9IQ%-d@Q;Lc0m-9e(9XNZIO|d2RICDN5$bLKfiHm#(tmFgcQ@8io z*0fPL?QBm>5nJ*_{bb7T*{NKYpJ=P+XXSamC7!^00|41^CEuI=mmlJvp9jg2EMfzB zt% z+diB#HNIzedA#*yALJqEz%<3amf9YmuT%g)JA$#1mttzuBI&(Gx0{7&2{W)xS7C;6#ggufxlGOgHt>;)%onYLuJS|Unj?QUp57|>6vse1 zK{Lx4jywuIqfM_nFKu(t&j)My@@mN=UeKHUW~a`2@_cpx!l7Z4_EesC_m&g&p`mN> zgRP{~AbfZBV$M@nE}zTIV8y)Q^_{&Vobm5%K`bPXHs4B4&|18!leu;ABXf9X0Ik8D z&D!_z?0_vU|2cTfetgd4dJ2wgbWApDPR~ynyVHmh`0ci;J#D}KpguAL!|zZ(-KAG` zH2j2bg8WdN;FtUcUwziqIg>BPXZn^pJu7^>^S!%k@gsjXNAra1o-G!!XYEN->>^`+ zou8A@{1xjWv;F2Ht$Ei;?Z)BL8py4P-DIQ-eE25&K?~vmPbcCPJRK=)QH)0;hj?dZ zhiLWt7U1_H`1BsIegkvZXfmViJJN15xAx;2pnJLezx~FqE07}O4rk9y}r zWAKHWw#)Cz&&~ne-B(;Zd@dgf=4WI|zT{%_>Ycawf_3b7|MI^zC(Fv)Z2XAFD=r^8 zC98Fz;Y(wI^~a zJ=nYCv=089e;Gpu_7J@`-GJ$^vH0*EYo!Z5U0?47PhE|(jGP7$=oJtA^hXbtJLO(+p>qJAX5;y| zc`9-||1SoW|BFqt-Wmhx1tPqUNASJn&*S z=|wv}d{x_7sqe{bu=irJXrt@5X7W8hlvm(EabD?;DtG;*@BK4tp510{?T0mB&wlTh ze(pQJ`LoBrDRtc4-68(rkN?=(pY$yzI*ZBs&IXD-^G4(B)mwnOmVLAT`o-AxoR27Q z#Q}3y*bn<+x7j|MS7*naX|pB1i$1$EH`&RQt?O53pT_szhF`fGe|2`PUY-ZpIoLV7 zI{IW(SMXHKVJ_>)&&feA%rfUuM`tdu zG4XlWg5IuI&PoP0MPK%$ywrNh&$j4WpBOAYi5=Y=<0F2^W#u^UhVIne_5CfrICM|{ z6?yyc-dRp(L-Ol?{`ddp{(djNvVXQ@{njwoVLjH3&pHPjdY~(@7%XSqulwM^?%mP& zFueI6I}17w#{*C2iFGEsoMB#KE%CMA_8$Mrnf+$t?7liWW7B2pf-hE}7c+_%ow@Ui z{HWZ<-`N#iu~Bp3+q}^ihs1_i%;Pt>Gp>}^*=cczEsH_L0eJP|WaG&zMl^?clOdU` zm94N5dqiHkw5HaX&KgTj=Z}iJe`DJlDuRgOHA z{kl`iJ^pRz&Iao{^O0xdDf<5XZ+&y+FfzQvzTVqd`ue+n?)%o=zkOKm_lN#h?mwX4 zFO~bf0jTFYVy^v_>y3{Gobif!F~&H>{ww;~T(%SBp9;InhO=kBmObZZc!+(@BJ3x7 z1@k%M@ZcNlI9~z9C;1%YU-=my)GqI%=`5gbtb%8JleaTKvRZF)Str@EaWeDA{B4KE z@kucMryqRa(^q_>k7m&wde@%5jc(4RZx-W>`7->XJVHMC%--;IGAZ&kJbQv?i|h=Y zLZ8vfch&&HvB~njGXi?^MDM=+WvuzBbF$C;#`>*YZl{ypEz14uPR^fkTHZjR`I6PCw;;eaYDvJk-Spa}^&tW7v!C6zkk|#GZ0HSk5gTbtWht zpn;1=@yNNNwV6M8Kr-_kwvs(XLnm}WUNYjL4W{E2D~^4&w+bHC-hCcUo4@((je4}| z=9a_d4Q=@VZ@P1*lxz5>JEi*a`HLO0dGk0skl!1C+-2-j?dd(!^*-0#KV8zNeV|Kc zE_(MnKi^?~DPIV?${}PqqUFr2_JiD|M2QPz`mo^KhFnZHu~km7dt{XOTNoC zvO#vqR?(5Cw}18BhV!-jI-djcHGaf@%Kh5<^1*zIU&&47{_;Ow%FO@y40-bZ?7KKC z_t1g1zO&ML^z|Dc>rOA}3Z41sXcqWlV6?&Fp#C|xHX7^x)P6#z=4K~yu{>XVn(|~* z;+PyG*Mu|Pz5Yyg_9mBQb7DzngfsfDGR_+5$KF{FJy@Uhv(sI6_NLFivkNv#Z*mvi z!8gX67+SpXG7nufJ~|N2c>9B&Hva0h$v4M5x9-f6JY-t=XV`6R^H|5U1#QK+a+_F@ zkLEA@hmXUPze1dQ)l-Q z^O3Q&v<~x=+1;sqr3Y~gG)6&BcXVH&TY6UXTQh%6PsZs(2Pa3k^Q*%t=;aOX$?o}h zXS2p@%Rla&@(Ab*K-QIC4xYy8yS)KC&ztD>@BPI;zs^nTyZw=?L3)*=-TUQy`_mp6 zBR@8iy@LDJkNnW0v&Z7<+M6RLm;2cPI_HWRpU~RN>_$KP0C)d2zEZBrCY}G>{l&0s z9Av}!+Vrz>HE0diR9>Av#m72V=a17*=NSMm=L^tW%?;*n`I2>zi_GGM*g*%;ok8n? zcMl*d9(-uQBL}T!w<-B)x4zdq?*xAANHMUCE>C!h7ZN80W<>7<3{9>&AVY_JNxW+#R z8lV5K{PKt`o0l!{gPC)+ixp_p*%Fw~)GsEfM;8pQ&sweDZ`jO7&gj7E=1|B|an71? zr8|6glg9uog?rRlZr>=BwK4C|H}VI93nTnNVnNYd$#(H{?=k_aohgl zJKu=3#s6aen(N33a*R5@@`N*i{4W-ogKn}1aT%RF)EU5U0etr|w{QOLnBEWMDQ^IB zmo>!W2G2D>ukQZt^mImtpgocM=^4(w8lBuOPE2mv_5crO0C}4&*mniLx&QdtuWSpn zkJ*v&?8cdZjo>xyjO}HQLG;eA&H!vDKV#$h{LIb#A%Bzm`BwSg{i1VqKDI;SXWp-F zj&lF>@q8`0T7#Tl{ud*6+0o50_|PREFaOg4d}ji%7$7dFizUSXw0z?l)VFfMu`lVD z4(Z_9U3%KXYt*}+I?IWv*^0fn#y?rbGVg`j-6O7zdCz#ZMn`nbf6|}3)tO$pce4#T zc4jq(-=S}xdaKdLZ?kKA$mZk+eP?q#1vh^WlFUJ}E!#b8IKMGxF(4nXb~rTbJ%6AF zGHdHsjGsk+yw&xA3LVI0bfZqLcsB;bmkjePB5v&YzZ^c#0_A&tEpC zI^47c^2#H9hZZyY-3xgX@6+;)->}J5JCDilR=@iwoB1-h-b^e8q0$=VAm!I)*{%!7jEq@ae$Sy{l<^SmBIP29m z7GL>aT_G>|$)gXQk_^dD_T(=XqEY6UiA&aWJ)tpj>}#J3#0>MW0rn*Zsl#bc`;(XI z7sK3L#WS>%?pFV94fO4g@Aw@ATjXbFcYk(IpKK6~Jt$9fCaWJmH0{;gH}%eT-!09< zEoXDKhNoh`mF$0q*)LyU=h;0!&_|AG@9Oy~-y=V|d^g%48oHQ%s*PU$V~5!wUdBZm zY(B8kous&u-xg!6qu8{+2ZS$Xp>2F|Pi(TT){$KFL1um@hPHRD)7sF0Vl#-&TSxI3 zl!L|W_6bBQ#);kG;hd8?1IRgYP4|0r(<12A-O}0A+1^<}F7da#@|5v%4;pV6avB_& zC!bsWg9hkW&UWT<2mVjecrxj-MDN_b=0DBkSBev1X{T3uo9`4{`=3;apm;veNs`EwTd znfvp%{EDyQk#B-{Hy4{#@;7qk`{h)z!W?|bxrV%xF8`eV+WN?0zI@!gldgJm))o(~ z&G^>acMmvx$Xqe5IpZPr&i$Kpv|{{A?%u}YDbLV}SZaUi2tNDMugzB2fLtVw!O0oX z-Qc+f=t*IJ;%a#wZtkD9^TFEJBfs;{#?rGAjr~`8FUbDv75lNDXwM}&$2M1Xm`?@q zWw$fev+Z(Xc8xB1_-4L3A)4$CjrN>p`X@c;4~k9QrMn07l{xRV`HM}(Cw^UQfm5tw zuE~DEf#HM21+eim|J#SP)?=^8w7y#$KIROdP3NGsRm5QNTm0pZ;yPU^#rVdyXCS>e zV}jxFlrQj-yZNtN;v;=MQ%KwVoM8C%P|8IE{B7?kxpB(nD{`Sv&fzRam-s^Nq zPfKTq{^{4*i9Xjk?AROMT;zRvZr^sj!Q+9K{X?5w=u@{}*K$7^dnX355B2W-Yy_UI z!fT_E2ePwe2Zzmq@&G)$R?1=gJ0Aec|M`>n#c#@owfR+kB>$@$lTUSC2k{ht_?Ti& z@q_I7f3lI&y4{ud5ok?29eQhSJ=%B%%{OCH>kVh_>hYLR-;688Olwr1=K^zC(-}YV zbSJZ}S$2Eb+wzJxWB}xpZZ2`?k+>YoBYNz2bB9Cda2o zeRM1D!tpU}dx5@Ok50e6RNvna{Qex?et`-*Y#-T__lR=|@9r3AD(sLw^27X=t@gL* zaQd=Wwq!oz8_VwTsKE0rG;9n#9Ju>%{H$4jMVo%ut75&1eq$=y=Bk)SDV~(~L2`;G z){}ph@A+vltTl&2Ux^Q1=CQ_oP4=@l0Bf*E^k7Z-owoQZPp}2&0qcWze-z8w-yNKI`$BFq*11*Aa&B>dHQv2eKEmg*zg6Amc@J&z zw!6N!dwcrhfBH|Yd%yP-`CQ)jy~Q5UC^>n{XbG``JDm@-Vlx;bES5!d2)_sU1zY=CHTw=%P`#hT={C z@532e$xs|IZl9;NJ$lHW%zb7H@KYD$hO=f+5u@xKm~H8QXuezDxdytw+Y7psyXe-L zRGgT)r*A%#jnlbti{>~dsCS+dGvMLSv3bS00dCVe^^iTd~-tjkw^J1GBA(V^4A+TDHa}?5DOkqz$i4CS&=K zZ%*PB+U%HJmxI_kzsmpfhkT8#87C(38+m`8v!@R=7S4GAk4mw`eEDGU1OH?rC)u@& z6a0?vwuWef(@*g>KOO3)gVuTtrjJQ$d_0UxW-va@3uk@SZ*KaTu?S8PThPSMI>n|l z`^g6A-8|hTlPfrFgx#_MwCM(XXr8mVZ@6;}h_C6F53^r3!!GRy{VUby-aJ%i4|wf% zm7Rdu06ubG5@rYNPtO09U;o{E+shw8ZwxcX!PTC1IJ}hXIvDPnykwkqM=x*_@?*JQ zT*@{ZGsml&mtM--#ggO(;mBW1;%8!1uzL!A?T@;+hOe=FFdbMUp5{hZA)^@U+$R^? zcY6VEee6PvmixtHXMtrahdr_Q1WLzUYrGyZ57U=Y5Kf*f4r~hgW%@U9b^-6*Sc+ zwEy;t4XU#fbv7aAt7nJC;p-eIce2&#W5pSA<=gT#AL#B<-p9*${P*s&3vvs%h~w=&%NMfPmQG$G0(krzfbP6+}a;B zKv(U}u3tW>4{X1(pJ4lDFXE$5+Zd3qC~T#BJE$Fos@l z1uOc`ihgp=@yUM%C-24t^{I<3^hJN#_*kp=;5;rHum&`W*p>X@TI*wwJ!BK{ehi|g zPjcCF-xR@X-?)%1c-2HRn#UuBB zd*Gg&4kk@H&8Ozv`F3j&W73VaDEuow)2D5}>DqU2zqRZ9)jIGsrZbba`I7~-E-_)f zUmS7Kd3woziNEmHA%7P?wY#^qXV>7K59DdT0VK1#Xutg<k290IKRx+=;@(e>^vPx()6x7pT>Gy$AKFv)vD-lQxZ`J=ecuKbg&;PmH5;d7+pdr0?p*c>I$UY|n!;_k^2t`ju&OPp!|qnBKD| zd+9vpJmGza?42u|E#PKby*6kZ9&|!({K;v~3Y$-dPn9{k>C5aAK3z;`ZtZjj(qB5a zZ{?-zL|=G&ZqMw$Vmz7Q{QE%VF@44;#^7mh)zN5^gPh6G?@!PekEePi8+i!oOYY{+ zmUq~?!F+D&MSc3FJyT}>cdoYvI*3QM)4J^YoSV;A2o_)NRKRwsuw z%U$lTav6EZE_SRbfyJK_e#;ZHyUifPC@4wvPB0@zcj9Pe2W=q=e*%tf4Z1*?YL-- zZ7r>t7z9pN8)&LWd~$MM;0-tci(i{_~Kjn0_^SxhM#ef9IYMy>J!4( zSADkWA$o%th?;m`p9&5&ba%#N_bl(YLth3?T2hv%|F}^Ps~| zJsSy<(HTZubT1c!jTfK9U&X$_TfbP{I|sVQim_)j_{t&p$xY=V|KEzo@)3Ui-vaW# z`@dXsZ?xXWc)XW>cHpg^p8efEeaZiwyB^bn`wV@1w~_nhYr2-x&i3`WICe!g z{GAQ)WeeuW7R4^M$;YM-vSD@#vTZhQy>JRy_=eoCcr(gp`A@#o8JXR{;bAPk`pSdu z|HU%C*%=!>KPn~!i^b&c?(a8`^Bgm2)r%Ry)<+g|HVsb-FReey95>zk2!!kKVl2L~d;|#XH#C@kOT?SG{()3C*WHWoVDWX`k(n z{e`F7Vvss|KHWEf-a^q%x_F`&H_XQm_R>1gi-qW|n}4-_`l!&iIO(?>?nt2f1w9(8 zn1jyDnQh^pO@i(wVr==^+VBO*;eOUP{FlW3eXKa|JAm_x+(Pcha*}>@-aO>K{I3g7Wvg1@kj>0{<#lVnx0 zS@xSPXXES}UfVdde8O*Y{r`;B;l0m_SLOTZTk<{sBtty-4j-E5@)K_-FmC6^#O~%yp_;t9hDtt{tutO?294rT$`(wl#{6!D3N&lGYD83xzM{ib;Hr z{N}_9j(*YL3&v;XQD1x~v;-<(p4G_nlV_5`GZ z*;a3l&>J7`=1d-Pw+_%^>jd9xIO>tkN=ten}huAO)&YI6P#-cpP#gU);bGct(~76BQD8} zawuP=`<*u5MxW1-nNKKW0Qp2b#6tAe+x~!bq2yQQbBA*O2j#`?=*C-5I;-727Ju+^ zp2y3)a=)V9n?2rr<3RT@#r`%&GC_%pfrrd(u>au<2b*PO+JAo+^J&QHA$ z%Khr*&_C&mE&8fkU&UPdYJ&bI*ZbkE7PjiXaEc#Ajo zOWPdj4&E3rnsD|&y>mf(0yq06USIv;L9ztfYp@(UVR^8;yPq3oyPP|5)#KCL)W$YoZC6{~)Xz59E<18RDxW4>FrC#-m+6)K*%-Lno;DhL48{+{ zW9Hy#YqM?~I%CMI&l-{`m`rHnYwRq0A70VUIj_}Q>-51{7nAZ?(Azm50r@o_qjz~M zA4XRl|K@g9Ri zNOm~mK(gQ?KNkb1Fn~2=% z-M_!{f6ChX&7VDy!|cnxZ{c1Fn2w=^Vhf)D=F0kNLbwb>4;NC&dypmEwaj74u~8eAyczI(0H7YxI1~m*35B1j5J>MSaclVDDH2;(bF1)^Eg0m+xzpC47(B7MKhsgrcw|?~5S8(!0V_tpi zIyqWvaL$z+lTY>LY~EmVpTX?a{P{FkJ>Q&X0Qp{w=#1anyBLO^uY&nE-sWyD@t}HV z2kVl*-4Be@Zcl>g#~$H{PK@)7(>DMz$*1BW8Cowrm`}l1|P+^{8L>&s1$R+)(R@oSa-M?Q`FN-FdbcktqT+*#Ltja3hC?-YI6Nc&qK+Um0}KE__d zCl4Ajg0nv5XdWTH2cu~q)d z51fbj1sopyj4$Oo>U>5FQ^(6#y!emt+V~b%(B!xJW;~caZ$9ny?`I!2YF+rkdCTCF z)~Q{=E8i3c@i$j_9;}@V;po8nCQL`yU~#iC)+RR@YARGRldj%)$>pOs_ks=4&VE~n1MFmZ+!l(ZI1GB^MPUv=-tsdLaZe&Vx;6KGHam8D>*heODPYgFdKKZh>*?(_T@Z>drXApIBi~Hi|Yu)|LLsoDv z?(Wac|1uapa+`0w?u^#@cxHPa6zt6Y(~sW)K36yF!2a*~AAaAzm$u2tUcCdUo1^`d zC*#kLdt2oT{5GF+9`C&ByAXeHE(DEtRxG|6D~5|Lpdw!IQFEg;*7}X*Ct^x*f)CAj zpiaMQ{N>ETZ_F)D$p5ViFY`s)IBmsx@Snw)S@e-5sIJ)a>NDnbHqfW86c5hY1oIFZ9u#bZ$$p;*~Q)Z>VD5`t9>Y9{sJ!7~_2>qEGWG=0c~4x8z>2 z^b-G~drdgc0>1rrPkT;wCM&%=^N`(MJZJppOe@yPp>$*4p1W3K{C0pXyym`N<0bdY zx8}2#@+G_MTR`LZzB7O~PBxs~@*lLmdHUNBXG-5bJm)<1H5Z=shtpQC?DK{P8w+-CEPn)@0Vds~jmPAv z-r6VLxZ1N0*WPBIAX}*DR|n_V@X^g2j|aPN9N2k4U$k@1Yju3|S4ZGhh&-_mZbVx5s`>5_6&Ump#ta1nP9`5&B?rn0T zellC1xG6r;Rq@pNx|@hi>fQbOh7j#*!r~;JEB{~48XuFVynEo|zV+PkpDVrJb;^g% zg>>`Wbs8fdia?VFGi7{?XxvG$yu7;=$ko+ zkMU=;PmtApghhwnK<%k_K=F8=)6d~#+yz)G>lI`=|`aO%aa zVq3VNI5_jZx>BrEx3)@p*&!W;Lp$r88|b&(A1*quyMH)5;ez%>(LRH4@|~hCF4nfM z)r0lxJFAC_J_tYgX;;vwn?D(9gR>ux<_d`m%-cHWOf%!`Ha{q+& zffc-}gYkX{UZb<8Y%V*^-ryB&Fy0d%EjW4b1N@@ZS81L}AMP5=uR#8z?D?OM!mqe+ zVuncu7HGq*8#m4zXEr##gU%Rte(}zG zufO}i)14Z`FMFXwb1LK!Z^cJNToUg)JLrq{EuneHZjO)1Q*xcL{>_@_j{ltL?Wx}Y zJojAWEJ>gJUEW*neY}?q9QF!k|DZF#vgN}*rad})vtKsrJG*=<_V}%%-#m1GkEU;R z{E06VGt}iO{@A=|`Ht^Oe3gv+7M@R%XZkiDG*7=*aGoWPn7}vn&te|Mobs=+lc)BK zLF(p5U+jVlUtRyCiPjwIVxhXCUR*6#*DgOl1kt*GpqX{NDtq7LCw9^O%>UuS&$j)V z?eZRo-rk238>@pm4f)_-yX`1UHIQ>PP@8y3J z^7s6_dToC048Z5z#l;J8X^#=w$pXF8D@PSIBZ;h`%NA;%hu)GY@Z+T1@A(92%YbB z@+5!Z6LL}cgpct%bm*OzoTvF@Z(#bJ1@h@)z-${&UhjeBf9o>mEY1nqXpP5v@+qH# z`jlc`FkCdnm7p~iE6e#ou|r*+F22%7?U|>=;@K|ePh555&+6eoI-hNIbHEq(gM53| zYlG#Qa^ZyK9=K>{KU{t4(S)D8Cr+I_!L#}tyVuP*Wz!FrZ2GG2w0obi=4xgzKk$&G2vN_)>*rvSCCh`L^_y!;+`z<3HeQX)zd-ArofB$btw%b{luaH|l zEOzCW)4w|>p!3@S?+1K}Z<^m2G<-zeyc2f!U+0+Pt-`-OXsj{i`(j5tKzpR9_r^;n+m{)aTgx!_P6*8@t17t+BNy|7*BOGwbmR*Z5%ga_@xd50&zN zaHnmK3F$x^tjvD(WC&jlV~dTs2GO$H;H+o!d_&RB4$)=r@JjwrJIHTlJ>Scp_+jy4 z`tS5%`PW@r?)Q#ujF>ZN@TjdHe{C^L{1UGeb>|5&C%-qgby`rMTzs zmc>AKAu)Buuj9UfPJDqAqs*ZWZ!R%N+?D^``}}qaz5cf@<}Ckz%o{%W=<>OF?sKP? z!`S_E*U2{5cZ18n%ly{+k3U;u!|cG^_LF^fhEZqV&a?8rH#hbw&%hZ|{`dPAe!v&Y zt@!a9zklgBPvQLHny`2`p}JBW6<3vVb?up(XMN^rx|{9j;ssW(54`q%06+6Q+U5w# zvFhd8S%;JVW|4EsiQ(ZIKgUdbw2ehq{%Y*r7frDKU545Z_0PGY4>!j>G*|R{9zScN zJ;TG*7r&sn>AwQ6UOzb-4_6&c_S@JAOGq@)fwop_%^hl=|dX9p8L3 z|L4h;Hlqw=*PLt@Av$6Ukp>Mi417P z9OnmoZ!LuH1jf**PBWtjzdP-bZKc z+U9G{{Txs%D@JM0di@hFSx5e#u~MEEXXM;jpLx5wSfpO=4;nx7{oXF`2je$k`9J=( zCzN;2ihNUUJge7dth#l?N6vxU+wgE_aHl_`n{(nZ=czqmJm6;i8qLI8&ulk0doTA^ zpU{}v*Y5uHPyXuW+{;cA|M2L`&E>Xuobg1n7q%OZ>^>N6{b;8j>;wBlzMmR-`HLrh<-x|eEG1R}yI%D)(*6GhTTyvafr5pBB zX}})XkIsj0x$k&8m;T-_{oMNde{WChl>e|v_9*|NW4mn9+q$|wzUQ|uaQ^OZeX~F8 zNdEP`z&ikY=PUe>KXs;G{&(EF`GEQK%m4WDMLtOu^A`)sqjFvKe4Q`$Mu89c^%XCI z=2a)VI#?YZP9f)>`)lv*i+jmj$+zMqTJ>UR^>V!SERBtB_H`DR zH1&7a*T#G1_cNUMCm%+)*UNSA)yp^9;Xu5=@+&xtaSyfYi*E7`cLw3k3V!hMsXb}+ z)xYCwH!c|7xS7At>fu1+zcuQ*}5otlaMoAm58w`sSScBHu8N*doUC|FgpnANgPG z5Sz?3{T@F&;N^F3_09ms$>Cz4y9=50dvCzUJkAK@E7!uCQ>=1c5LcrSlZ|=n_>aGN zyqT(hsyug_=ZhNfj$#i!)wh54$9~ylcIRx$7TF}bD8Is?lVj1cVLsq@1M)pz)t2*p z1Mn@0FYqOPX09_^c6RQJpzixW|M3REhm7eA5`@FAwmKf=`t#80VeSon7qnR_g91my1W{ zTr~GZc>h96(kqve(Ezf$JLNCXnBd>7^-|@FEa<}}yzTY1?$lU1oSp~oBpT9bT z$hrER8+=2Y&+Ko^Sw3g;`9?mIz3WrYFY=k%JM66<-SkcE{IfWsUEMf&-#u1L z;rBD{UCX2J{$|;mz1UOS^F7qJfZ|kfr1?5Okjr?bcLcGJ4F278GKfdsbXS}_VlAB5 zrsyl?x>t#X-Lcd^)pr2$dB3opPm$|xb9_+)?7|zov*5Jdx2UsGxtz_(o6fM#tnkhQ z`2l;+*46!6(d^S1fc>&v?_cu1ybb#M7rskwWB3l}_b~W7U&PaRXXySPRB~H)|9sC_ zZ)y0=-gK>hLw*c^=suf6k+CSJ2W z`Qi~x5N-A5m{7ffw)%wOgR^h1lRaGPs2!a0oZ&hHoY6&(cXL&r5MAwu#$;hJKdv_;uq^}$NbQ)k&Y(oxvt$p6_$?>((+HxHnxED0Dzc!q@yrnLGG`3t; zyS_Pgr-@%p}iJ&jDgeZve#-K0RZG z7$W|NDeCB)2gEpS_YiNF#W8V2-tTTyY(X!!IV->!D+Y;y-a*AkICnX8y|cpMsffd5 z7H7pUbIQT)GvX_}`=B`LyQr~>_*ng=upEIW`SJ7ZaO&(*(ZLues8E@dD6O*)y zTQi1*LtA~)!gU4+io50eV)M-1kJTG{jjntTItPg3<$SRA%#ZNe`X+wIo%QeZauA&S z2F81*t3UeswfDYqWq2@L^tJJc=NXKC_Nnjf_`q9tG_!q1GjTi5$z#^>Pq$}t;Tb;K z;FPC&edYM%t z#fTZbi&J8ketCG^AC58dzL@1M0xw?4{o;xk5xuw~M~iLl{9v)neBKk#qI35bZ_P1d zpty#wBHph2?+kDhxbA3Tu<_z)>oJGoOn_(YkAs_J``UMZd&q`+ z*Vkr?4AA`jd?TQ#v9lVyyui^LDRxAt_ z1A}5`aTspq@oTxg`@DW*=a{`-j)xc5wJWtJRF_}&B9}~DbivuDeuh8G{bzLLa}clE z)stoB`0DzU+BV z`0CeSG{J}R|DL<=JRvo{Y`+YO*d;l*FuK0SyR*1q_H&`}?3A70 zpMBY5cV;$ePEf9Q??&f6jD2RCAiHIgcq-n>e*ar{|KE#v=M$hg_?NSQ^E6*^KH!t) z#Dl-iGXTHq-fykeo=$d+>nAr~^xFXElz8Dg^MA3TxFLop#grYQ3peA{UPlAh-9$ZH zaK=3K-a$IGcZzVm@G^_TM}tRJp=ISNj_wme$<3>v@FhMV+r zo{3j)4shn}y)CyjwlTAQbcjX^tk)eai>)M8BYG$vf_ z38$UG*RDQkpHerzvDtL~@&DVqTV~yREU)AJ5)fcOQB?B=Fg&fm4}s;WF`6ilKiiI z&MEB$dn9h3XQZeQE)#bFeT={tZjSn&uy+(Y0-xZ1s4T0H^ok+25N zb*F)8@C?rV?Z5n&HWoTNz&^MKPw_rI_1J`Y`Ule{w&L>65Pg4DKFOJrr+NK)`a!&XfEVgW1aclI>*+o^=h41U)GSdXw6zf_|kk^ zXZ!7EojaWY>>qi`oJH*sdqAF`&um+Z&cD`qZw33_zs?)l6*mT)u6_OJJwQMFUl+#C zW;}0<_N9K5cY57kr)M1Y?C#^*Z~8cSUpib6|M?f}Aj6X+e3BoRm!F*69)6`;`jO5o zi~qykc?O8b@wf7Le#X=3?%(+!T{8a1;nHFGQ`}!ZJ#jKVl`ekDsaKp7X1!U)hB7>r zy~;~h7KcA2>Bs--2&I$RqI<^AbnQRV)kpeCIy0{9EI;#Rd1W&%KakmeBxhc_FUi*1 zDXS-6{FId^&+^mWTHvjItBas47k&s05*iHkM6TD z1jfK3m=nIjBR0v6YYSUoS=a^3)Tyj90Udw81y||Nhmr7-ZT7-CnChOTukee$`q`b> ztXvtqV-Mc`$uEDgzn9kM*UH}d*=NHT&bs|u0DN#_?@hm-2Y&w#ez|>b&hhD-2YKC} z&HF4X-dvVGrE>$$wLY_F9a($U9cdld1Fb`A&7QGNl}QWI`Y2CaTkLyVu#P$dI5Vhk zJzJ}!`r7j5&|YyaR@eDPpZe{AxH`4r?*LDaYg@T7?ceXLHS9axi32kYQ^J<;MVcLY z;YpYjPL-b6CNF#|KRxxz!}rBuW&Dr#!_MMydK^DFoo@N`W|(?s9M{eO$7lLcJRLHg zD_%M&AI4TLu8duIMO@TfTI0Qd=`G&aEDq&XmRVy*Qc8^5qpz zKFU+3tw%cP*B3gE!mM9;bxXe_TW_aSPu^KyUf&JQveMPd=3MXXk=DQTqdk=#j&G0J zi|xtku+up}Ub=ISx0gxxhko1Vt_w3x9DyzJVH(^KU>95whfPA93zzntW9iU?&+=dz zjDw@_56;0v`Eh@^sc*vO|1UVKJ$3|k*q|?j(em|4oBF^uY|p-NycE(U+3Njv{Aaeu$x z*?W80n)^tf&ijA(5N3oMVT?M(_cy-vH$l?j4txrC!YWu)oGhp_@lL$A(eC>3eKPFq zE?+t>m&TtnpRW4pC@(&xd;wlRiqEpCBR|d|i_?j}XMC2+m(KQ#*T$6M)uCI!ZZMnG@==)Wp5<)FJLRc2)2*K=m6t9) z>lCL`JiYRg)}t`@M)CGX>Ezr)_ME-j9*qB!Q@6dWj{TcXdtLti&HlPy<1zPaSmnNT zqIG8g_kS2P11u8Y7yN|5-un0N3)k-j!#DZ+-)&iVq&_T!W#Jf%($7M?E+4M4ryd-H zx60{my)U>du01;XqhH#g_Y@yImH)ec@vrQ+3AS**GmdtrzBaOb`s}9P#{>Lr9?fmO zZ*DgiukS+Aed}pH(j`yMpJmRW&WPEx&hWCi7Vt5fIDFp!t;@LH-q9D5Zh;+jwAXpk zdeok^+&RG5=x*-E|0}ev^?@EaeZb~Z9>y!m&)+X-L*HNs2?N3doDVZ*UOL?k*etHz ziBZyp@GQP3i-%L`&O1MRl!lpcxOic5x43-Ln5!eL?o)N(GyOvK&-|HwDXu)7DQCX+ zN|W)I{26~rFP-X27vjv)$uqxmLFHsR$wy`Br88ymM>@(XC-uE_@nr3mekAG4eDO2X zPWflL{ABCoDM_!g>O7Kk$}y0qg<$p?%kWAxn1cUd1$+Ga6s{;2w2$jyCTxoL*(!vgunbO;bls=nA570)-}Akl>X#69 zsu%y`VgdHfcIbrH>e69fdwpN1t=CBB9Cu2;RdDZQAHK6Io&WWL57>Nk4|~dwH~)1W zun)|Ib0S}ROSe||ygA?TwI1-PxhCg#s&l@ZJNf1kAG1+#CT@*cQ`Vj})f%=}HrKB; zVIS@M)xJFXajZJ}Y#r)r{h;qGX%BeY*IzpJkn;l@Y}Fs>*=OAFlK0#{wP#Oz1Hjq( zQ_yc%F!7Bz6_QGAxEGs7$^KFiPe)M;JO5!c7^$nvM0@pR

    Io4eupempUC#Q9R*06Yd&fZ=Nt4-}%lh*#uU+V&Q zTOaaU$E5Ybjy}Nj-Xf&6p|9unGkMyruk85$G@tj@uS)$Jo$9jVZ+6tT=L^!|LcD+C zP;J8ySmXaH>Rh1?Y{K=*g?N8rOg2dEg=bU7^OOH^s(hH4loy6RipTktNtdUd{2AhC zdBvZT%4UG;Qy-s|SAOYJX6MY8W=DB4ozkR`Zs{qNbq2t7#ZR4h@R2=b=@(Cbrl-!# z7cb~fWyQ%EXNOLCvrmum(<5iy>diV+SNyqPttfA;OR|kJ)LDv)$f|=jYy(=e`ZE{ClB(f6Rt&hrdFS=VQKm&pQHq zgwJpX7RSNzVC(Foz8Od7hWH#d!9M*Gin9SH+3x1NR-#W7|)YT7bO51b%_;U8` zT#L%!_N?=kxcc_EvDw=b7mO$VCzav<;_AX8d@rbP9P+yR$NeYovk@kU>qC8kXRz!H zaX%T3#^a^QnI|5u^;`{19lGRJ5qpvgXQCwd6Q&#tpoc*2U^4Taa+cRB!O7Z7HHlNa&YfPNp%$w=w zY*f~pf9WZ+>kQD|nES+DiKpfF761!zy}bh~>_dCfeck@Frq!MG+20ttu!b%Bp6w~w z!2hsH-M3)O)V0rQpL`9T(Swc72{1Pvg`fJ9gs-r^^91}g27!)p*vkgY?%pO1|FnS@ zoB`Y?XFrSMe)Z@H>h80|vMXPk`;NErwWnQnoh{h-F<3qQc;mnB0lsziGbeivmjBI- z`8F@+K)!Ws?wf08zr8<}?%pq7&YGI^umhu&?aKfP(^QJ(U`S)Q#p`8oL%@8duHt1g?96Xn-_apmdHxV-9~aW<5tFa4BG z?PY7qY2%E~Hi{>+k?q$=>mt2)yS%yP=#);sbo%L3e#-9u^sQCvzdOG-J98x69&At9 zYwaKL_L=j5{q1j&eU~)<)vs>*wKQo@I-{E#|BteEwFxtR7~1@Lt=6#r+vho6)FwXe zH}>!rufotcwsQb%_D;Joec>>j&Ij?q{C>KzeBm_vFkW5v`v387|J}xYb@rGSHi^eE zzR61KOIW{ctv2`XC0E(T`z1SDu=DF4xT*K@fc4J5)(E~f=X<`F|8c#5d;48LdGR~` zRnK>R-*lV-#pNk8r{-Ec^W3){arx#NpKDjz8f#53c|Sy2YwEF2&Uks+5kJ#YmrnJQXWq0?JbAWJ{wd?`DO+dd zsZ(C@)6SVc_0ugc?kC%K_L?)deS_QDi^}cE&dv6axN`du?>hrn^V#U^UtLnLZ%O;# z-st~RVxPVD!kyRJX&kT@Rtk7H+=aPuygb}bS6qJQgv|$w1LoZge&Ymqt{y&c27v$m z{bJ_;T+g0z`OXJ^>#q;H?z-!R<=yX`OJKZu-TjT@wPU_|Z})(;>F+Vjp)(o(cV^q? z!F3jpZ{9j1njiBS&zs-4pJdBis>jCW{uP%N;(zO``@B5sptaZURpb8FN_~*uK7RYC ze|!yCtbO}lT!2CLI}9KT_0#VKj2~aYBiQ1;Ub(f--ia;B?ML?*b+i?Z#r^SrvO5iX zode*KFwX#Z9aiFO{U_zolP2SSQn~u#uow4DzLzIm9yxgzcSzGKPR1!SuX<;m{MUr~ zmmTRdud>;Gaoi~WC_E}_OzD><>ARzzW!WL=ncMW~p5^Jyvh+zoS@Bs`UGlk5o%E-z zx5VS*q`Ji)$yr`JNxwL04YsyVTh?>y+}^RD>^XbK9#T(!XLX$3KC%bnY@Cn#J3AD2 zHW1jIdsRLC;y3)?-e%{=BhK3`=%aDM)Xo5YFX-M5Kf+pA9j8zJ-(0XTS)LGfhv#8C z>E8Dre(&#Z9>D*208hvl$0_R3#sA`Adi<|H^xXZG>HFJ9eQUhM1O1-Oc}r*x;(Naf z*qpWI!+gg1%KI%xZvfKf8%J9^`;P9MIC#Ic<2-2%;{Vo$bs(>NecAn4`D_Z#oYsW^ zPv0`u_tv%d^@D^-a2FQA5ZKba-W$EUhjkA_{69nSKP;M95}v@4?DL0t>faQzhuBmv zzE8rRu&n*BKPRWtn;Z`_^_`yh)E5_UIURN5clnJyPL}R|&L{EFd*BQXNPzUG7{iHd?Qx_(;rfY<#Yz2++wpm2;>vmhfNktc8>ez(6&IApulYe=-&bE4Pd|f zthq2ZIKR2F26`9pMq}=!#XI+z|IU$k+Zs_%UTa5st}$go=g!vNJU7PuAMs4sUUvq7 zRd5up!ietv;`;9Y7bLq^xT7n3#QoKUS$-$r&469!2yLndYr;CX#g2X`ckbXf*cPYb zZu(>)?8WEulCW4@2!m_0`#%|9(MhlT^5_&Njfs>WH>Z=FdUVpQyn6JClck@M>74eY zp9*Z5SLNn_lqb&KtVi!r9-V9?%abl|%JR>=vtIop1?9!nEq>NhW(>7M?~GUXIT^pl z&#fu>m67si*^HlcXIXZV?Hg;{TDQineS4raZk9L z(HH*ffB8@Q>`upitX+GMUvYo!Df?)=VV?C1$HRKqJ+U_acmFG2o;yE$hTCDdy7&PH z(DC3Jale6tIWPl$ z@Q=05hwc(M9%h6;;f}h_3F^`#!!P`JRrANTEuD{PS7P#atF2w)t|M2+?I0C+h|K$Ju z&;RlNx%aydDt9K(2EF)SyPN+Pw)_3IxOVY^dj3w)JbYCDeb4=}E_wsNz4+cd7PkhZ z&6)W$x4i>&9ZwDT=iYlZ$FH@f9eK_i)?pz#`eogIbl-c|*H;1FkZ^+k zl>P7j^*{GGHvca^H%^!VFJO*!-`%}8M>@FQSpZ(K$1Xkfs!IEi`$>pV!bZ40PGoDWE)yC{cW#kzzkHphwIeTZGH6gFH zQoQ=*latfw&GaMwZ;g?ULbjDzH`evJ&aHi%Z!c-X-jHrjSr^_5+*O3?_nt;ip8A4) z=I&u1IR`j5*u(a+{l*?0bx7gSzw!UkaLc~dSNPm_fUkVNuxetlyV}Y9@H!5_`>>w$ z+kf|dalF93F!^6y0S2<+ZJCeji++7HfBm-f$Ns^={SLs~o7?XHxLY{q-+T+^P~APR zOHZD;mlmue=SlX=zj^OWARdQVi}KaA9_-`KGza)bzc;?D^N+Fp@xTA$jU6xqx8rl= zd>$v`Z}nggd~!$OFW**Rjq^}@SKaP6^us;%y-hkNXoFATT5XVQOuX$35Z}XEdHh}( ziGTD*zPHZFad96R-@^UkF#Az_>Qr~;6(?&0-#pS~KmFR0F7K?9y=l8VQixaMTRu2- z(oI&U`qi0fIwzl(K4ooZch+T7|I=x_Q+CdxGxMuA^G=;JJ$2(`dE%9oPg-Y5aXO@R zNY2n2o%)qqf5nws|JFTjw$|ffdF==5)SjYiU$pP=eZS|U(>b}lXV1vDH^sd%u&;gh zf8X%rYqxX0Ir~f)WvuSnFdD|gTme>v&A7l>;N*W;4vXMDo|hK)cFdkTWOsl0aGZX; z0ss9ipnUCVpPk+`Ka(H7x4v2z=FdEue{*ZTtb_R9dT1_N2j*E&Z{{`k?5NLH{Lg0j z@xQcc;2?a-U=0C5b7pYiX^6Bi~g7f%m2 zl!w>E<%yS0w=(6mS6wn*EHB$Lzj$)mlvm)3;_TF?8OM{8x9Q89`7@pFqr7~d4nL{%rYXa90-as(S+- z@81+LHrOMGcaMNg{_PBV(4E7X0mk9q_?$lc3)|G0X9s$GxX%jYO4Cm&bul=@j-b!M6mrKjFZ%dbrR zGcFHjr8nd9;%ISWVY@oYDp#*~vb@qH|Hk)^((2TQ+R?W7OCkPOpRV*-H||a+o3%@3 zM_KyCrO#j;#r58eq^-x9ua0!)_k7l zzt)HH&JpGu-?P)1z#6lMdiS>`tOxw`8U1T4zH7k^WAgX@-V9++_XW6Of03}Pa{#{b z_Al+c0HffW?~kw!p7BlGAI`~xTXfXlXMojSZQyGA3wCbITk$Y+W{FCjQlmC?$)DcfUiaXO<&-PUJbDV5n*i-F~Wc!0Jz00X*Z^1jZr0p?! z!rqr_4{F0+l(u*2Ig>jFsAsRkGx9THl{IR-@G87_598<2 z6BpesX{L>K3MtX1p^1AJJ7No{qdTJ?D^K^=4bM4jpx}sm;=)v~?mLkF$mU z)v<2*tupa~yz-NkCEG)tbDeqjceVB2W-r)l_Jwud{vh#p>#J{a_LMyD2kHvumGpkc z_s#$UyV{bc-2Q@V_VH)s0^=|?*bJB9u>gzZbzd{iFdxR_hxp&Ue{w$@62kfZhP?L# zHt{|?+BZ+1)qmexzuh~{N&mOBIkOI|iTE3b$LZ!d&YyAT0r~j9wO~C6(&{@`*ndgu zP}`q*KW%JU>)W{F{I7d#;S9{`{ZKh9R4xvmoWH#pcxUW)O0Y>;ST^}wJ#~}|=8t`E zaPBO88s6fh@D(=4QE(M+g|G5wT)HrMpg4XM7hr$fUmh7B$B*O;>EPCBPd?75JUdTG zy2_H-lUJNnPQvoi#ih%`Tji7L@lEd|ag2Eo%n^SpZ>;*Rt`N7fFPDEOyt534cZe>$iQ-ZwW?D2)S|9|+8e))C%$#hQq>{Y?M z?>)BgQTns;fWE^I-~YpS_kXx=%oFo*Hb295d>{YE{V=aU57u{X=sY3KK5o$7XZGD^ zo%5Ia-JUT=&H>hdIm6YsU)nt4@HpMP(-(RRm}h|WtPAy=t<68~xBjey)`Rw6>f=W( zhxztW`v4#N{lB|BK8Gjn_;`XpVGdk@L2yP~9sKWI4MxKz^aq_T z`I>&`1sEE)C(A2M##>=@Tu3*(kAJ1b@q#cp9Z$&XtO2{()E`p+Nxl%zM(s(nPtG=K zvp!T_`jKQ){*>%U3;aCG#Ai89#udh(zc|KxY`NyJ`80p>1oLDq8ynxn=hNJkJu;nlr^vK)^dBsyzrv{fBKtTd(1pJW0U5Q{r09i zzB<~lf9+-M+TZX^TlV5d#iN({rT^Z0!(Le2oiD5>1(@HsaX;SYgRq~3IZ67}#UJ8q z(vZ=2#f5z#gPvQXj`i)b}1#S@dxox$iUrYx?!HCtT&a7_1d9PXPuTp?VH5_**VGN89+i^p8J@Zk3@pu8A zhxOh6m9b$R*c?1_yvD-N?^jPH~C-&0z61>@s!=O+78 zT06K1p4(sDPs|VghmY|O427wMFtzl&uZjCs+k35c*ilFS;5%99o?kkC#T&35ZVSfU zeXPFofw9xwK3crXUYwn+X}i31l!?z!p1#8L?W3h5ACDW0GY39Xu5LP{pf1V(>KTK6 ztB*$t&Rjdb=24vArQ;2C)a{Iu?d+3rxibFOFKsFlItS=Wx@6_qJo8HPX*@mcW^1?k zWlhF^`rSNrhA~e<>#6ohHncPI;&JN<=Vw#CF|m^^lAp9CNZ04aq1>9u_s-5ZoZn$e zJYGAbGnziD$4}f=EHp$pFSDZtKT=}=H}yhhrw(q) zSK@Gt9?4JQ?7=;FCio6&FNROJ8;-)@cpdh_)bJVB!a#Zd_@DmEEt`8%xjO97Aq#OT z+!tq)Em*Ce;+~uN@m;<_G z{THXh59DjY_RZop{W3;AaZWQHeb;{LKp8%y>nuZGyuQ_5>mq4AI7{lE`fRc#Z9T^M zBwhK&smxkb_n-g4zu9^9N8hX=b79Rp`|1y0*c19J&5zE^=Bc*Loq2Mfx7WM{(1%OL zt(@=8q5Y_?_MEBx*1-JAvv<`yG4nH}^&gJIUH37*68KP>PrC2HvoIaL@JUjfKkz(z zba6i$;&B4Mes-UIrulu3zM3z=96ASh+vyD8-r3pEymtne>%y9$V;xyfg7u}YGxgW> zDyRF|*N6V&HRl=J@9+Qq@b~}Oem5iG4*a0UPq1iX)!G|4-`(HeH8~T+0ULuBHo>s{ zez5kIvM>+!!ZK~atj$M@f3y*9)0wymQ(-HdbvIK6Z{fCjaM8U=94=SJ4jsHm#>aGE zxc-Id>I%k!GvGwrV(eixoL0|x)D_|w{HLwjnLMvAaXopa?sQp3PP7JjP`F%^Mr+8I$(TcI9a|o>SNS)*4>7X6d)Ctv_Q?ul4tb z|N4(M-^cy(t+VM9{pNT6>$m*w>DCsX>#MmpSK@KDw6@*v>8fkqj0-*)bH5{0r?b0n z-Sq4)dD^ze)q4+&{Y}_#zR`b}8#d#9aacaj0`g$^StZ02W7sw+E(w#Noi8W)rI1j+0k23bR z_5)V(6)eH`?kLi5hi}3SdAOptdgZv=y-}IK790w{= zCT%@+CcvF=UpamC$+$zmaJ00(rQg{BpNPw^etpoN{HO26cgquZ zu9@?tt~P3?cv3mu$LaBZYeReT;`yXCW=#Cf4^v-S;Me%xxfhSKrQgP2%_r5DZ%vcV zZu!)Hv&ZOIi}s>1>YHG#G>6js;H|-VK-#&gee&6){=*`e4u{?8q~m`QMi=bc_&-dC zXRu#zpJNAptBWIqzwzh(^xSAZKbwzke}Clx`^TEGcRJTu2b}{*YhVWJ!up|KP{+EV zZ!cOi)*Wo>?4TVu{;SqMS1dn~0*){qaol7yaMbu=5n6LD-t8Vi^&N1*`?UT}U)MLx}Nt$ovHBLTh{NxPmS1v!F z$g3Z5AiIrgud}s&aI3QiX+7<8+mgm?Js6w5G~e2A-q1G^7Yo*mb0z+lPrtP#t}pbg zBYn%>l=`j@Y+LuF{*wBO{{?+?cekhXn~px3Yx#}AoC&i%W!9l{o3*G-b6P+4_nfsh zr1hcsXe^&i8i)HiEaorxE7+588D=Zvml@ui|P};>b;^lt!zqV z@Vj>c@3y_&!fxZBqg`W(_dDm2#%V0>8Tw?t^_{N1c_)#Eul41Wn}fgH|EvumZks$O z5ALh4j`6b%_nm{{23*@2Ajuzb%-KFW#^GMb=h-uN&H-%WNPcI-oK64cCsN<(6zCQ7 zoeo>h74r9(zWBLypl-aMFY*f=c8vcVM`=228;fAg;C8+;R&Cm=U(42b#Lbtn)1{Z6 z`4i`RQ<`hUeZGF2>#Dwx+M9bu|E($Q#p&AQfBM!{f6LGJ>RW%#O#DYzo?zbk-HCnD z-{gv$KlO~CUAAUFXWTmZ%=iB0VdLzVJ!mh&=Ju)ei|c1_CisfqU$7eQ^P75|7uae} zotvibZv6Z40Dfzpt%KHzwPQWNkj{nHh_toQT5Bzl`#hj*VU7PEimles#Dnk0dq4Xb z9OXa$;wN{%xF6=jD?zyc2g5Je77wuj@92g}LI!7=}o1J4>H$*mf?^etkKmGT0WrNvju^!Flb% zc)Y2;K2F}m6Vhy`ufM$k%gY`co9DmGA)dh*Y?@bN!B_E793;J+kYFe`oKQhd}e($j#KKB z_Ujj$#=^dJ>TQ0n{bfTN0)FCu^~{rg(HGz2U6`xi;%9rM^@%My`bpv{LB73V4EiJ8 z?`Os3(bq=)cKVmMn|3J?pkkM720Fd{OOCi)kl5D34NCpm#;rC#2h=fY%E^m_B~OVAaC>f!teNV z^V6!szH-<@#z7=|#Z^3CPClSa}E*L4?L+%yVCny(5+ufJdfBtVi%)PjEs;>U)yD{*GI&a+zpGDugG`@Y7Tl>Qv5qEc= zp>pd?;BWhHpBq*kHVS@w^jXG#`}xy&!2hi^@1(7jDZ@+nDM-(9ad+dNrpLdTR*VrZ z!8QDYxBK^h;4M6p2aD-CW9w=A80Nuec!u}Yh0ETeoz>lM;ADRN7NgV`-$c*(HZIr- zXZ1@EHzxOJ9Je{=3y*aU*qrv|JP2&r5${_ZR3%J z_0pXK_+Oqr?K|eOL05a7XZW$R1Q{pteg0JkN1HR}1#v!zJK3VIU47ndt$2R0-W!{7 zvS;j@@0T>kY}qf_Fb<)5WO3s$E+Jng^+UTmJA!FBeA}2w-z1*< zX8vQ>oi_N&Tv~6NpVl1dPy5AO>$m>Xr>9+UXHxTc)84{AFdM$ZB^U*} z=Qp*}cj|3^SeS-`4#&|&e|LrwEZRl{>4$c<*>H5T3zo_y{ZM^k(qd{=B!Ix1jo>Ke(qefOi1g1bcst zj}{kozjjs-+&k&uCm2o|JHM%qlRG28b9MNRZ8yCCYeMr7AcJ1Lm{bEad`AwXU z)Zw4)+okU;rjB;ia|Uxp;1fRFHrQE#U-XNg=(BC?t)r*b;(M=|r|k9n6YI%*I-A)u zxSZdOpYQeekqsQyS%8jls!uxeJXPtk!F+f7&HF2jui{1Z zyX%w6y3^uRdh*$DFLs|6$A9&SUf-$Y>pz(eJ-^$~FMY(j@;V>T!$+M5;;lGJdFK!F z);UIB&8xJ0{YV-^XAR?~yMGh0;=Lira}MOI|MTDfkY&d_)N)`T@>-1_X_Q+laC?H}vVx#**g^`&v#^6P=?fzRy$*wf#= zzlFEe!y)cMaIC-Y`N-ZdKK*w0#ACR~cMcr9`3w&(?wRk+jdS1e*4zI;U=U(*-xpYpifnMyx!xqEy(9+%fAHt;207RT}GbOvx|Ro^+n z9P3AI;OqEbzVnZuKicnIVEbkD*F0-S|D6ep{p+~bImnqN{-z_&hQ12=R9rjCx6f8x z-0!=add?GD{{wP=YrEeCdYiV6ya6=6bY7DFrX_!nFX`X%>w)Wm>w$0K0e8!{{<|V! z;Ag|Ia2Myhlj0oM?d`hr0KV)u5@X+MAsQX8R`8(yS1;bKI3`o zthai7p}Ws8>+X)b)iVZMZv4(e##dXruZ!c(Z}slJbhM%W`r!_29{5PT-}HB**X}WW zo#D0h(raCnzVdqDdf|5Fs6Ki9f@YM771gx-JgFD~<*j~{pb z;WS2c9-rRA2)7}TU_q_ z0EY|o^#@<$e0;1f?sXP$FL!Tt=kIUg^x50Ly0zOlaIyO88k76Evxz*m+0&M@fHMW| zo#Q>v4bDmGs>e>>KKRb~akx6(O{Sek@y<``Ifk_$2;z}cnBZi-`D;QV%J@F_szrWE{kjNKc05C#>;row}blaZxYlK+@a~?Q0>Oa zINJHbxx(EV=hD%?eskt*pdC8Kah?HivU_^J!FMKL)0u#MZQ*lvj9vfa>6gDL#MAvf zh<6G1eEQmC%ejFq{dN#oZC!MR7f`l8MAJ3;zaUJqOkTn}6iTn~IJ55&jak)>bL zR{sv6yL=o@#*e+VKeE-?1E=C@{HI-Y+=p>4eq{?6<9@+;K|k@mvq3?g^Mv+0%g}W` z!0~>c**5^^9c|%sx^$$Ux_>M4{;`&a)w|-TsU=Z`g-7c z;CkSC;CkSv^gw^(jg#h`{kcBS#jD=LaW6iM|GV2hRo{08_51ytIBxdMpu0Mr#NP$> z<>7tr4%!vhwljpf)xoo+@wfMh{S9EnoiEhw?cKY?Q~lI0V{zx#PW-K1@A%4}syp+i ze_!*hVAj3y>w)Wm>w)Wm>w%Btfxc(^t)Kh0fS3JS0{wpPrT*g2ew)9)8!Qf2_v>%$ z)_VY+#_N9Pk9TpmcDx;E6EAlba7Kvx@xOTQ{?g7E&I0mY!`*anzu!2_w)9yUAG|ci zTYf!oJ#am6J#anny?MaD`GN;=tM_!@=<%^U!FPh^#@u&y?+AWt=l6KM1K|Dc@ZJEr z>*HbH(EBdXIl!5K4qe{};(vDfO#KJ#4OzF!Yq4_psi4_ptt)dSs`aWJm#4gEEC)W!Mk+vNWDch~)0 z+PxmfcLwPGpX?2w`+s+TQeeaPh1YPuzS8q;!r7wV3VfD-o9{KgzB<QgZ|uG1 zZ}s}Ee*dq7{y+CO0`Kj=YwvpCdf^ZiC}2LER8Yku4R z?R$7zxE{D3xE{D3xE{D3_?8~P|F8K?|F`VJwS7HsJ#am6J#am6J#am6J#am6J#am6 WJ#am6J#am6J#am6J@D;3@c#i&)9bMS literal 0 HcmV?d00001 diff --git a/img/sm.tga b/img/sm.tga new file mode 100644 index 0000000000000000000000000000000000000000..0fb26d5cc30f01f8b6d5038dabf7c5e94bb83a87 GIT binary patch literal 1048594 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%0D;Ou3!$&_3kA@^TfHS17MvzWzu5I^Z8@n zF;)+23(p8S zYOlOKkRIy$E}lDSy0&Lc`1X%~c8_}(w&&TiJD=H}-Ja$4Sk{5B-DB{M&useoA?pPplw6a!amLwof_7OCH-ZZ{6(? zo_XhpLi>cc&^}Rlx`6wLu4wOx|N6syx}>GoKyWYeq%NMsq0f^^*PJTeFk&H3@r5?r84&6bH4w~kMG-D zaZfP+8RRLS{5z(V`|QH8?56Ab#9DP?bTNJl7;Qe2=droEGp=mL(zjjr*{f$h&2P@% z`nxW+|B;{h$#Wj%Ir3bIJ!jJ1X`v5%^N0S?zIT7{BcFTc&wck>ds?}C&nBHfJNvzT z-ZLHdJ?EZj&uIC|&JEA`K77o%kym?1jH0)B#^af^vd5g)aV$Qg&;9t%?Ds``e|x?C zys~4v$Gj#ldv9`!|LFi?vVF`sJ@>KBeO{|)58<27J}8!N&k(XTVmj8dIqWNbgP#sL z`Jc@n|Lr&S9czVS`K~<&_BXNpO?)a~@C=j3+6nT+_SN`kEZ5bUeaq`w`ltga>p7n7 zOV@s0zbdWISJg4!cySXi_4C}>-*e(VGuO^P@C^t1jMA}CT#$bgCnqz{P1oOKxjEpz zJmoW<^=5waFVD4fpF#RKr|O<6b3atyvmjlbeJ}gp{q27AEbaFH760wko-@C1@&51n zC+}c?v9$1=pZX8GETI@dH8{ivN_ojXxI^TMA z-%H~MIVQ{Ws>hlm);;uRKBs@5_ZU2Tt>f|eoY&Ryyz0ZXXMVR0HXA}(nSFvEsNigf z9`NxWdHbDj{q!&Fdx(964j`zn4||b%_KVW_0N5Nj>p8HVo{_@T1FU(Rth{Tnyi>6~ z82jz(#woV9(;rUtG5b+RA7br|WB;A)PNid3@vI|HUt;;yX?~TPV`a@-EWiHD=Tf+T z(|v5+$<$|^pSjO2Pe?vpAM3|Vv9hjbz51_g#>(RHOdsvvP^ zzHfcSU2AWxJ)`p7lb)Y=?V0wR;kai{poe38{FnBO`ps)PfNQ^tEv^34@%5`eV;IvO zfCu>tl<#$}^2*1G&Kk6@PJ2%K&D^hUx;Gvw-#tfu_7!{2Lye;7;4AwTa; zea~mddRVibuhz|T*R$vurqhc(n=|%|swa=mAgHUJKH3-5vv&xXuUuVwhakVb2LG{M zKiZ4kQ_|X*BOQR(<&9$6tHj+!ITyCtW=C1a0ieaids%LEHLnEP2w6QMxvb zRla>(-<8*{>tmVx<{~c5r;G1XUzzh)rf+h>frq}wZ@Tv$BH!mB7oRb?6_bH{AsKb8 zOi;IUeZ=J1URm{(3)+e&=V#mctzL2MtJ`(;8(00>bZ>~&pYhap-D7cowjrm2`@pl~ z8S;G5$Hn|`o;|jSXA=88k3G9$I=pALGS98&+q3BzwHI`44~YNi?Q^fOckGP6+DB?< zE`{bOZeOtn#1?y4d)h8WEK6^gIc<*yg z#`mmwcBOlU_h<9!S+lO`cE$CfjWyT5XV|sRYd=s&+P-10_?{npd$%p{zw7w#TCnG| zpXkGV<66JZ7u* z)hR8G^O*MO@BhA?ZRHiuHqt&bIi0#cE;-L@v;C#%2X~#eI0+zq{1IFuccq|1XmcaF;$_r>@W3nqa74 z4Lm>At>>JtqYz}hqKYH?fJ$hr`NfUo_iagEv}PSa>4#W@=>M^nTV?|Um&wMS>9}` z3~$vdPR_Nh-|DI-)NgU;0F~FL^7<%lJ-d$@TfX|*R@S}g-j~m&vG%U@r`)yRIr2<- z?(+HfJRWU-`Sf?sGX9ITqdRy`+fzKR_L&&q+3i`T2iV(dBR_WAYi8PY`%h)|7xRt% zGp!5<_2F|p)ctO+A;ZZLdB!&GeLXMwELcNpoz0)!YCH@R-s`y5g0KEA{I{O?@80R2 zaxY-M>-eu<_s6+&{FV=Y@9s0OzUQ{Nsoq>0>n6w}L*tNb*W#P{xof`rANTP-_U8i- z-?hJU>bC|xFXY!VGM^dGO3zx)X)&h9_1a^(HuBvk`l6Fp?%G=GL%A}+bMD$cVgF!D zxL=%uD7T+<1~C1K?JM+3?d>W0?(yw^2OCFuCKUW-8tV`$J*9Ub(G7Ww!gGz zgMC`;Uhv$+E6>`wKY=T_t6pu2psBEK6^5BJ@b@#yv6Ej-(DrgG_lWhpZB9NC-Y0=3YnUJjCtL0 zjiImlv0m;sjFN9mI-TpE{*5p1_s8pwMV8LzG5aolck9dU*A}Z=BWZnE4{M_w|MjiS zx%2d$fw$iN)!mn%?{nK7>lxc`5t5bhlc{SmCEMgm?#K3bxyC-c|C+D=&>l~}f40A8 zh>mcVeqUAB=OXVIEnVnYQKx4{p3myJITdPqTio;9v!|{x@)7uq_Jt$=eSUih{olUg z48T1jjsMva=IYrsPr*95?>%3}k!RiPdzHu7VrACY-Y0JF%+6~6Y=5j=EKgjzy2bIg zI*ni)U(^4L#WDNnoFsyoB%BinzLORH1g(&f#zt*vop{!Clb*_IBdzP8Hf0Mg_l7*l(D zpJ%1#$MYnwJ+WuYv*$UspRw=bzvoj(Zxz|BbCJnY$0LR)6}n7Whw>;HX!@H?*G^TU05K(@d5+&<5#=iVk~?C;rfP1c@? zp2hjRl%6rU%v%5>#LqJ&s@)5`>1_V9dY}kb+;ed7ww(W@@AXT%BF4pzkd1$uJ_a0&%IYW zV>Mo5nwwC0eTp$A{!c%?vSVM(>lpW$ny=V+_KS1wqf4*jb6R_AG1mi&$&ftCCp&3* zLVPS8^NX#Cw0_9BH7VBaIEMabxiRXmc#hj#v}tYYvw6Aqq?OMyd40C-GqGoaE?_)u zJV&0J>96yg<^S|N*$Z8Jraag71a;^G>GtXLV$Zlfm9^irC&?G){voYjeHP}vb1L25 zBrZMc>BqHk&0&t|vlvs^eca>vAxD9X+;f6!@+;4MBF}v9I<7fuudTlI8UN)e!?d6H zfBxe;zxLa|`P%&VS@0WUv6kGmlk(1;->gTD{MqqeI@`ZIap~Fiy`+unzV|$P{>az89z%OZ$WFTW zRDRFUvCOry`aV9(^I9Eq66izblus~yAU|RIg}HiWjpIJ|4yOCxy0kXttxxrg=ibx5 zy$U0H&g^-f7qR`$dd_{-b^Ct&tz7-~Z1wD~_UGHe)CIKBhq3ipAM(nd^NI)c9}~po ziR-I=PQ^ZRzb}Ay_MzVUelPderM7jy&<6xEpG-}D)`x7TtV_2R>16)LN1poKBk7d# zgm|pn8k8@tzt(nMmpAL{!#wM=c@-qV7UgNtbJTsmR_4OAQ*?G9_S@O)1m$c{3 zy+bx);iwO&Tj;s`1U&h3;E2^uB?$tNl4Ky~ll*oiFyD zzgWP0x&Xhom~Y^me$T1n^L2lBulEf2Ts=cKJv+)hE5{(eaBN$C&$jVrT7B~p><{K) zPU5cBF=o$-J;s_?E3xNEd2O^a&i~Ke9kl$qbopJ+OAyJ>_ux!$5C;kl9u(tH2V%(3 z9w;LH23m+<2SgMHW)_fkWI%|Z6Co3ggPt^TA~pn^C?NzgF=_PrT)n@ie_eh3?|tuc z_C8NPXWtJLt7_G%RjaDj`mL(#fA90SL-o32Q4|@C8-nkmLlzzFwdgVHM{vN;iUS#aa?w5M` zTiqGh|KKa?a-leK z4~Jd8?~6w<79NN%F(@v(2SmFM=$DtoesL^j`QYM#dYFM0`^^;(UlH?R2dW(opvf&w z2YE#wTg)v_eeL|uj&ghZYhS9P_KS=&fKmQV5C6TfC-=!$a+3Mvs`SYF6?Xw=LFT=> zlY_PLb@|`9*Y_5+$G+#Yaqj?ZVKaU7>i2e6azL9P; z9p;IjY`MALM&=eaqK& zj^#$}_t+t~$VZ#6V2)Bg)2A)BqVLhWGX0I6eC_P*+4jGx^ABUo{l@mKzWmR&zWtZ~ z^Q~8Um(Lctl|FX>-w?L{J$2*ljne+pWv}#EgStL@YOeR_B||4&s5gE2AMJ1dd;50> z(Dz>b?~&uvV#&U`1Bf@V=X}02c8bNu);{%=_r@>pp>B-VUp^$^75{=l}A9u5_+mx*Ge6nulHQ@tN;QCLd_u%DbIq=VFiZi&uVP zjPczcj5!M#rTNs;i_-0kJJaUc^EO6*zSy{>tCMU#Wxf6VzqnPWPmG8S@gpC)11Mrt z9Q8MT@Vqz^bAG=Si^dh_VpV3)Up zcLDrYx|VOOG1>Lc{0qN(=YRhm=AZjl|MNff-Cyqa?O*wtZ~yG!`}Rt%?42xz?Q^kF zE*A&N##=E)ehWTdeigf`Lp++x7&^??JgENW>Ahh*9*psw1P0NeSPLvt^wU8nJ@or_ znXUAQyD+Z1H!KXRy^+G&GsnWx@HY9ySNIu@hwF5tCs{J)B-0oe&IeJt^+l_b&9*3= zY%V_;1LNsptCB4!IdkU|AM}rRpx@!!N7UYRK4^QXuXcM}J4&WIL^A1%y3aX3=Rv+R zMfr@r?AShaeLEL9yeBz)#k~1~e4qczJNWwX#Bz54u_F$}k^JtRhTgm@CcP)fh(lQJ z@BPWb6_^ZX^od_FiEoTp6svM@@mbt22Ei13GGr^-`1Ln7IrH?UhYRLZ)bUX{AEh&0 z?i}ADCiUg~`{k`6May6a3OXViHN**hxbtfoydCPw38lCyA=gP6p z)n2|w2aN9fzg(!4^Vw5f{xA2Ni+*RqPd+z~`&;>+jpq2$bF?SMvZE~a`8^gx_-p@CGZ-05qTff|olKE2m-(wG*#aefOjf3j$2;v8QiqG%|zF96ld$-sTKDfr~znB$2;tEEK)A(>#8*aD{z_dv5+jqQjhWxMY zHWt( zQU5&vKKw2Gkj~=5w>+`v9-xSe>iA-&+$m1PNO49_HsW_*S9d2M-#mO5-xw6XLJltA zoBy8o>cJ$p`V&<7IQS9Al1hL}Tgt$p0Iqe_V&h z_RoIVqw3nuXiIzAekb3UsI#)~+I!CG>nG}XrD5%!w&++usDhX>o|}-|vb)v8ydM#bp0|F5|={ToIRHM0kLj z8;1Bh9~3W4f%W<;Vp{G*&tiV^V*l2E;TikQuay7wkz-r>|EzcXbPhZ1w{`I~brcqb zNA_M_-l@0)$USda;QjA!0OTj~{jC{Y<)FO-kbg_xQ=dCq`JXS8r=MiwncEoh@+*v% zPvv~;(_j8a`Hgcxt-+lDj$CC)>DmHx4$3&-9De@Ec{TF>t%F`0{>jW6JYz zqIu0xp}R43S^H1%qhI1!dC=ZE5BsHV|2iLZ_m)g@WY0F0j`i zea*WxpJ9Wd&6kw*b#3cLjaL^d;-qina({PjF(%gZi90a{!^Gkp(^rladx|&~kH(TM z@1tbJy!fx+!4&iNx4+tKxpiOt>d6$-^gP`G!Yq^>=Giw5JMi?;uTJ;3^lf&^`OZN8 zP_)IZIJPElO}S!=oc_6-R^Bp>J~^xWkGJ{%t$g}w{r0H5eSZhKzWuQ2)t-^MhSz+Fth~b8Nc{(zOPC#80FvPetPIo zd;?I((d8@^GD>d&`P|(@obnaep|5vDxMEDXAGS2kT-IkTWa+5Syyj;ktP^|MCoa~8 zndR8(@I0)?>l?x1Gn@{`!|x|NkB9QB#c%cId_}``v^=%*RWC=-(-=7aHGJupro;E3 z&ZT{Q+FLyRTlhxBUYGm*U4gbU%`ehvuFeVVT_3Hl+`p7eXM6gNc4uvFHpn^s=AVz_ zi3ha%Fg);96IbG|x4rm*%VG;JEO!SW3-jbseD`*7CwBGIBZkGTxEFWs@a75&P_`H& z|9g*-H?O#c_1y)Y?g8SSY{i(yE)Ty#Pj>@zvFls=v^91IutvrH%PH>Y+U09`A0L%Z z*lTZ|Y=j|=D^JP)-6!Z#^s(Vd2i`0F&P6Vix7or6_=0^qb;-%@ADwOe#_S=lRGJ=FlhiTfcdocXKX%>keg4jI~GQZtJy&_)2_xx_YaV;fLqj z-#E5eyJC&(jEazLV+@oFo zD4$2kI8!+ z*+Q4xh|ibwncrAv;fxi&C1>)*=5gkHL*bYD=`&9>^+Ox2NTQ zayw34zhXaDw%kvbHL}yc`w|)Ok2Vdi5F0uV4zky5Ig`igU&*pW9ErIm+$s2Kwo9o~lj@I0)3qT%(@%>n9*-}Gh!JW$`j&~nkw0l8!JoY@5&f6Lk zKEx(AZ2lLIa=-hm;(Y`^#gN$1ufF$kv82fJ8(U(soZzmmxQ}mK(*+;sRR)ZXEskjQu%$8Rj?>YgFWJ-$zlo1C=klk;~mE zUhjE(blPfccZG6SIn8+GbL*6YPrbG6r8Dmvt@mpA-yV{KvF6l{htEIcXYX|RzTA&$ z%ai)#N9W!-(&3z~2Vah;$OYvHKFTgOn(zD{9p*vLK5c&BT*~oiduUH?`#$CPbG)@V zD|ZF;)!{sh7hBdQZoK{d`#MzbqB_!XYq9-cUB=Ul#rL+*;*7wo0^!VT+Sk2&r!*V(`~ zZyfoOy~>G;`ot&PcBbKeSPLuF(Xdv2fYtkMJMp|WS=hg2b(vo&pVVe&xkY_t;JU&d zdb3rV9N+#H{`5=LDKFYj`z?o-!~I6!8$svZ+3Z=VSBxcFe}00N$D{d&_kKCQxBtrI zKlFCa>q~h0`0&ncJ^LGg_+meOWW|=45ffrYJ6wfp-J{{G94;R5;Jw%rV|eOf7A@C{ z|L_^_#-C4bM03Fpd~?ff=Eb8gj6lVDah;toy^^l5X7P)D{0jZa>-#x zpJ*$_*?VK1gB)DEn@6l`n}bf{E6$IMv2>{OePhVmFK_>_1jZG+Gv;yW0hCAKMW7w!*aA-osOq`5^r<= z-Uaxnww$H34%GVy?_2uR_oCZA@|ALW=iz+Le4k9TJgnUvVEy2g@9>%JYs~3`{HS|@ zKJzGi17+j-g>{H&{;gkZhy^jnXT%?zMd5Dv>s~I##h=&{*I}Eu)h92=|GwLaKlp&B zZVs_XueMSS*2fO{-Zp>19B_HdzXWLiZKHX<>okiFS zQ#%iS@$@@8z4yK4Q|_1RtyL~8?^}~P-ky`ZU{4h1<^1^rU*uN`nOA4X-sZB#*0R*T zkg@00%m1i75eH&o$FZsNF}}UVqsJKMK+d|XQLz__F{|(AsM{y|U|+=M?sfIe_ZwSs z=6(LxSUy7Dncz7G`-k=}7mEtMImsKB4!X%_2R>Ok@q7Ezr_cS;T>!T5J3fHN|M-A0 z`e9LbfL*J3tU>I-L-xQsm=iw2N@otU!`Wy#KfGPcB?GTF-*3JAkM6iIm`(BsJXS}Q z-j3Y^qU_xq%UzD*;~KqmtXf>Ix9Y--hGa2ykwj${^>(}LRmlAdi};$^2hp6 zJad{SJNOL$Q1}g>=lkvf)+I)~ZOZ*(R(!!P@ugjS$@lPFKOEL31DBVFFJBuMh7|v` zQ98mBu_+eKcjx>o=EDlHO`o~s8Ev|aB`daz_4LzYP1^bt*jCPG&z5iJJpi9 zT@JyQKl~N|i#EqpM>p4!BX6vnQ~pQkN)K#&w&pMV1^LL?(qUgux!z3hS%JUK#Qr)9 z`60aT4ic^#vvXSmKQxbhFn;^1(`n!B5qnX4 zTiaOigf_-qOS_!ky}>!+8;>gXv~xzum?vF77u`MGx_Gcx#f`P8Z|vw-#AEr|{=*19 zARf!PQSqnHXPi0Hq1}AqS6{L2oaAx&-}!a!#Xf()^Y10>Eg5w_$S3b_0he9oPG|Fl z1B-#>e$+X`YI!+)MZ;|MaJIVkVzRck+7`SWM}PQS-Y<8gtA70Q{!;eVR{zNV-!77R z`#YP>{heKB)!8l8=bX9&B%2SARY&>M=KbFM`Cu~n(-S3=FXcP@qx{cL#2Y+kSKr)w z^P}P#E{e_K5svyE=eNvau01wEC*K%_)j)o87Up&Hu>?!|m+`^U$-S=FV zZubpsl+NaYPju3qo~@hL+VzD8#+>(pZ|6;aT61}%Tv9GVqUXD?(ou=}UoVBGq zCbt`Jjg2{}^LEB$!+0{r*e5Yy-}J$L`)%*Li3-#>o)nhPII zt~-FSd_rN5GdHjEcGl+iHwbwAdGE4~bH4Z9Uh}f;T<^B^o5$YqeRrw$jt+gNeCMH0 zaVEy6%U+i&?)ex*;nJ3bxGq&tAR zf=|xdf+u0e9IEK8WLTO!$Jj z@5>4P23XwtCWyj|Tkezn<`&~{r(BPU6*idDd`rzurg7OG{n{}gcb7L%`KC61kWUo# z`pIZpL-x2Q*mD&2k(EaqV{emvqV}l#WUZYW`}m7Jl4qTn{pTC@+gnZDzVQ=tvR6)* z>&xld<#}>Seco~PxfApqf<1C8+xP)r;}def-+;}@Hoon=*qT3C1D~{4cu#ANXKn4d zeLC~MH6@GE**SF`4H^>_8|z|s8PUMtSjo;zQ$ zCEn=87jN3mLcA55+6w&@Yc{{J^k$QObE5g0+-*+tIcvT~AAiQPmt>v4oDXN%g4Q;k z9&+pw-(iZlb{`QV>TK#h&>cV@%!b{twRe2=6K})&Fn{qJ7S~oki!u7mclK?&emP`w zzk0ln{QtG1=}+{*mp}YFzjL2cdoIV8XPwpQ2g_48u5;Y8eNR1qb1M4lC7|h zU+3c}pJ$6caanv8uVPf}z;f=YTd@Zlj6r)d(7V_m_F(}& zoA@u>ELQc4U-O{sL@Qy9wz=r;S^c+!d3Qe z`4dn1aW$AzK2f))@`?SBH_&pqeg)rtv#VL%3GVZ_*3g*btueV*)Y_b%JwlzG^_xTP zSL~Pb<_j>{Iiuw5xjf!CZ~5K(cXPixL2qL9z76b{=n9#MeiMI}Cd2`6=!7Kj*c1)gI)> z>)ZBAoGH#UpEh31(;;5OjWc$x#kTz zLoh}>lh;1)AaXu`Aje*Fb`Ri>Y&JF@XsxXu{)L71X)!WvgrVM3i?87?-oCli%m1Il z^UV|LaJVt`y=t?Gef{>&ZsYO9z)$g~kFl?JzEi!t|h{ff3Z=`Wv(S$y+vK7~s#Twigm9j=%k=2W!9nv-@XfCY-X0U0@s-HN%{ zg_?7*QoRBr7Ej5t6<(#o8Y{0o>2(kNa<;r*&c1W_#qTaarha`&`HE)tx&z$ft~YDc znAbD^Nza~>GrZqlpU%m8`I9+dt#1Hm_d{oGJYVPzuvDJ!djRZK+z&SYlkd(zue?g9 z-5+P6$SqP$?D#&$=mh|RqWa3?0YY-{WqsIb`JcL zo%+?$`pGDGZ_obuUi*-*S?lI|@sW={`KdT7=NrrSSBE%~XT?czD_+X)#f;b|6JLxe z##ibSBTDwL-+9DGyC10QzvVyKz`h^sx@@zj#jm%%!WY~_+2GuL6M|RWNy(d2X@1lh zIumu@j}{}<`IH!hrYX&+9#oiM;yJVN(>+>Ti7#;l6X1UFcgOM-WBOo2c^STlU3@vjoW*LXXNhKe<9dCUKd zhfC%Ea))_(lU65(r|m3PukrfXrr%y~|EoI8l?Pz0v2fq{wQj$E@f~}}KVYvs?XGA~ zTc`2zyFOH2m%rt9McX$3_46A*GM=g!j_ zi-*3I$@%KeaN}s};!HofF-Zmw#b<|@V}rT0olU;M$MF?s)q3>fIX65uoA2J+%io*{ zo_7cz;eX~cH=Kb>)(4~9OZiE674|fz`PtO_-#+mlZAIPrm1kiv953frkHX;3eZvpy z!|N!#mcNbfO{cGZIIgep+F^V6o}C}>|1XWI_sjSFzw>ftorSa6^Ku^A>o3|*^7xIV zyF#b>()F>%)1D>%uQ@tnU8eNjz^ni7EYJ2^E9llZ=>! zAM(*1|5qI2YooBWI7h|3ICSS=k6g(%*ahpvIX&Ue;)|G9^qF5V51DB4waMQYaM@12 zb;1X-`pwBs^Rf|MWHUSUvy%+Ueg%GnE!7*RUtiSNO81^{kvGx{E1gR@M6Q8-%Og|4 zm;cSP9?fQZFMp%k_f#iuo;&wl`(hvLi~Zpb?BMtO+xo&>GTL-no1Elq`hFzOm*dO- z{szAMkGJ0d`c}>#dLo_s6^6-gR!~<$unU{q%L#Xugy`B$sUSYdah3&6o1K{0hH(pFaEM?5(F*;qQvv zXdjCcXSjvDzO&e0`4=T)3|d(oe1cu<=BusGTG*w({O?@tKVD~Uoc*KQS+d2Nr>9Btst?wb9OkZ<@ni**klye&&B|`LzO9%lA?F8vcgsi_eS4Vf11>UKq}Y zmGVFR$)-Em#rJG024H7C^FhDv4!B#{d*=oN!@l#M#V>3_#b{Vte2Fo!1p~yOSQL|ZWW-sx zK%c(5|C4U>#Vo&TN9Ou&VqWwU6W!*s|Dcy<6--{ireY+KY-do%)@b@y6LFIp)5*U3KRr|DEwq zkNvK^6%ppT^Zuutr4C==u5Uf^g>T{FAU~qtxYdidW8DGzreE$y@f80Jg!u7{F>iGB zS2vG6$;ah>_VP(S=nkRY9l{wl_7yEx+AsQ7&Ys(2`_4zZ2dFz2{iw52&a*7WoU=15 z28`insPg0oY*`ri44AY_pM$0 z+h=-zh_9U*^m0y+W~%J-~Zts{Pp`xoJ;54`E=HuTmFzN{+_#f`Cnasx=y;f^`$%7 z9Q=`A@ZYn@7yRB@)cK3HB3`PC5k#Nu=F&D#c|6KCHs11=+~N=Ur!mIDmhewIY%{*Khsk)|7s6BbBIEQ~ zH*9JTjc-r!!aHkR%%lI@7d&!`adf2*g;l7&3R!y4^>}kPA3Mo!e|5Ir7<=6#V7UE+ zuky0GJdDb#^pS7u6Q#o#g&ujmZ~x`{^ZnnQfIs#AN1f}_9P!u!#}#Mej-r?|UF>!b zU{~W#YOm~3=V_l;#@;%cd^T#_o)3GJ&Z=D2Svx2B@afz;tDT1~w$Ov`49RuR=9m1h zI1r!Cs`q{QzE~)Z&@KA6ub3`sPpY)z{uWfvK%~AgEUV_5)_1Ta5*WCeoEdM(P``>wWhubqQ zpXU!}AN=c{mmhS#=)Uh)zrNZlm%o^gU2NU_pMSs-b$BTr#g{k~lZ!jzP;AR{a$}fM ztm#wlE>2FaHcr|5Hr+7cj`3?Q^C@Cc5u0o&|A#$dJ3Ka4TU=Mn$*vn~F6@9o3c06Z zTrwyO#WM#AJMh^b9yM2E;i3HqXJAc*EqgDp2jLdXQRv3AZfmv=C>%n~yTv(eyL$T< zmfAzQov#w!;VCP(Q9%yA+6%s5Exp6#WVv+DiTsX#s*{m#`Gy?qJ3pPh^UL-7{U6UA zA%Ajra3^`v|HRw%nzK37>2lv=lRbVK?`*omwP$p;rzn~B5#2L%9?r1yiQ3!hOUZZk z?Qc5qlf^SPyA^dl>h3KcyYm#I`JQ|2`t7SaJ^3|SyrKMDe3$plBTo1?(z?Qif7I2RP?hGrMq}zFWu%utq+e)Fw!}T z8Fl$T+=P=`x&ws!uvU@x@s!2wusVE4%l&;9-oC~49gDwxVZ8f?JfzL$C%^vSeZ3v% zHvnhotlRs}${Fo>I^#-bzvr*dJpfPtdB*fswl7}uqV9=kzLDSN%P2p$2L8(5#ew)1 zD`Hpv5>w(96)$0nd{@pBV`7w?ID|#wk}fzx7v1W`GM*R@6X=I$;*ediv-~ec$)|@d z<7!8nOPu3{e{iirrb15zFB!R^HXZQDd@wMK)ZbV%osH|A6lTgfVYGeKZyeqBgw2Yz zFHYHW`w}*WrQxH!sq{9|POfou(B+)%aV5S!bK}di_P|-nm%Z1u*-CE9dm_p>zXNoa zNN3*xxta`~JBRxS9q*Zo%-W~!_k;bL0&Q!w*7m)*1exZm9GR9{M+0K%@a}jI#FWPtd^~-#A>5e&lo80Do^N`7B&24SP zU%KpTv7zr?{}n&GZ)CKcP3y7NWQuP*{q*3m$@hG=h^J!8-0TrsVh%R3UG7Jnak|-0 zjxPGu?Wg^Ph0c#%eFF$HVQ6oDc&`m#;cUOjF6Qd1zxq>7*#9o@<_q=nUSNF1T+P?} z-#l#NYwwMf54j(|1O6Mp&d9$7=o^4DInTMAe&+k`151S*Y;t$r5x$XJ%JE6Qr9;TuSd*Z-qx2JHgeYGZS`(v-lMQD5YioW`0P@XD((NBkWv2!gS zqt28KN@qkq-YZ&UHO^Y;D;M{7fabGDz5Df(^UWXsmHv}&zuKqv3XhyM^o@b;{=UJQ z^_R2T4}Ry{JX)!5>C?WKubmY;6n1rHVKyCu7ge^JvUH=aJ{ z+}%!_Zgfk2vA&`1UQq5&NB+#e)#-CrY6PJyS2eYE!O z0rp274Qt65<2`JRzTe2jDBb*pY`;}+{!>p6om=p=>867&dAIMjsQ117aUR~~z5DgK zi{wvmesyoX`A@sHZGO7=wzZ*rOJN^L@A;Xy*lz%R z|92-)_C4hrE9~7828Y$*HQIPG%9#WD|9O=I^d(b0-BI(x`0~Cv)j!_;-!9)jY33vT z4!}8e?r7)NdFofn@o&+5irDI$Ly5Mnb zlx;irjYpTwOS2y)RKhp3cTRmM+^npu`dP@IyvFKle_^n*u&><<)bX5?G0kOd_Mmm_ zJ;8of${Y5j66R{#GwYL&%l(~QIWX$n>}5rJ3%S~4>?>Y)jn{VuIp4j*y6!jmMf*N) zes-s0=TqM~PMPgDw|0BsZefl6Er5P~_JiM<)1I)mT+`UrP+LEL?{4WVoQd;so_m(g zu!7%NcAk5t)%iuT&e*)g5?x}{eD3Rw(XQa7A3c3Gzth*4^(SXX$5SD%e@i;>)aknS z=JGFfXDzPnTYJm*@&g8b^YPZ*|y|HYv_vYfa_D7#R5i8bY?}`n$hHsp>>U{XU zJ!Kb+gqPZ|QM>p5zO%#l#oVpK*YZJFD_6kgFuNSk`#%~#xz(#q2i=?d%|ZWDj{4wz z+a2&7z`6X!HcTbUS2qk zDxJ5v=p)O9=BLA%q56|ydt>i2_@pnL=`Y7*PrB2E;#rf@cK~+|YfrB6(fo`Zr~lYv zK3@zti#-E^!XXw#yo%WDD=A$#2r}6sp$$UvWUSsI1ochQnhmx}| zPqDW;+Aox^qt44-%e9KL;0qP|-kBD2e8iZWf6Z%6J^SHCtt~l2%@zHz;&~c72P9K?yvH38{ zM{2tVXp23uSR9BgaW0;Uo#ILC;NN(A#gy*@$%#R^%2=^U=EjOE#>9E?D_+BNb2T>^ zZ-2iJx&x3A_xBy(lV0}FS&pub)~CLF_H2IEek!nJb8`ANcUpsWu??S0y6*9po#ktL zr4EM{ht-Wi-;)E_Oae@pt!sj#_{js9JjH8?AO7iXWy^7ZaI)-DE&wSUe` z+5P0>PbC?&bMAaQx3_4ro$FF(RDXWPE^DKcJ@qe5NAqgarJWpoN^zslJ|vgy#sgkH zAtvpqyVDtK=CBv}XJhQIGqd-;1Bf9$psmjt+!%4im_Fxb9%rs!A6;P!UzX3skiCFE zox67D!H(TCcAGO_GOso)gt>kLkgvna@Uq+wTj4RR4c`~L!{Od+et)Icoq}Hc%>i5A zJHYBRmtw5Bo1ZOo()}toeei#t9dO3ZMP7CfaDM(auyfp8zjgiE{6M|G(aUP*E03RN zZ%n$QWXSRh^eO+x>yGOlAP396;!Zpi8{z^cz&CL%mc*SnhDCm_E&s?L#k^P)XRtxs zigUWfGkVAO#TVD+HlKKt`zx@;SaXTr>@Wu`s=x%rT<4oU?AJ#=Y)9!^ywe{(#y@46 zhh8?_cy-ma&7nWLjD1=AVhyBjm_fxsw znw&-Vg>oL*>__pVD-*vp+UH$kwsvMGZ4Y-Jjj^8AL|^)?Nquco&$g4Y&)TffT=3S~ zt=m3iZ+q1Kp`R=4T$x>W_4GDR_D5TXc06O+H*00Ly-;sH?dr)s(e^dkzDA8ve;SKt zZgIUOUFP4jz%PEw`>5D=zxVefZ~-qryyNNe$saJ{iYsSztwW@E8loJ&;1TSx56h*zdQ3j zeF|Uco~X?q-Bpwy~tHctgP@`CmNB_vQccfjAU*<@aK^*zV2` zcg@e9-u`HEXfex1I!}xWgW!U?dq8zm={}NddcwXa%+MFDuC1&bUFoLZekskR&-iq} zs&E}3nFu&qs&Pm_yb$U)}p7sW%ch7U%*|s#< z(_Zt?hql-1Y)`g+6u?Ue|6*T1T1+{6^V$oTlP@?&>oF%=^tW$p?2ZQ;oHv`oCKMLJ zAoVa34)tCNN5fe334`G{d@lDt;W^B0d^tj%C|7hBDF4Ix_vroekpVxfumk06=jJ=W z=KSj2>-gA{pX^S`-+ZwA&wr|;`DwrRldX{Lu2}AOhveVlKum}|F^ZB^7t6)9mFzozt2*CHaA!LwX<)}A^$xona(_Ulw7{PW7eMaReUz( z8`*`YkE}f{M(_B%Vpg0h+TvJji$k&A-5&<1lL;f}A`d(Cu~AI39maHy_CEWKQ92JY z?6Y@d_&fdVp)<_TW|MFK?f?p$gvoFz){jSW+t zXtp&Ush+=IjZa50&bnS?T z;zt{cIx}a?2b@vo{j}zIbXCd)+Pg=!lS7R^DZhK-$QhPU-( z=uz0yeB{KXSQCTxj{m3^yTx7cTRe6L*xvxk|Ixh%gfD!QE_3X>&5atT&wk}A*{q$d z`mK*X=OzaA`7Y6S0Qny-!R|0Oj9u#Y{qi$BCL7)^cE443-!SH!Ctck~-qP{W_xa8UD;yz5Ttt#iUpeGh*6z)^JgL6hmQ=zT!w6-~VRoiWzrjaW8&h zs^XqcXYni6HiygogH)K{ng{6?L&K2?n1Y0er^m(?+>_tou&LiSGv_3OJDz8J+#t1$Q`xb6f&5vFvsdMCcu}s!E3U|Fe8Git ztoVcted~i2FaQ>8{tpA33%<3}P1cxwzthKdy4kjS+j+t+wi>JM8v=dVZXBKRzasyK zo9O1~#a@`(o9;{V{_6jzf9$}Q?tpIx`6b`;eL(xwHw7|szc}IRViVTDGgM5712Lx! z2k^qC>SW{&F)H>daxuMPOkI2xtKtmL7)8#fLp-xNJV*x{jX5da^248a+7)B#XUkJr z3_tM^Ho_HDU$|;t!j*XF6W;GVVf&M(OMT1gj^F&X)0O^c{IxNCOVz!3oR7V8-s#S! zbkLoC*xDS`^;JJwmi|5U)kNGt;^$`^HRF)0UzYk#yrW!PiOP9UlAYn z4=q-r+g}|ezisvOM%(k&XnyuT?FnA?ZT}O`xu%;P>YX`xrC2GJiaUIHogL)R^8B{j z=kys*m-rT!#&|!#0sAlC!VV>j2n*nZd5tG~_h0q&=u?MV&atyVmEBMNP7an?cldzv z1@C>o19*=-;W2DwE373O-k$e`r?DTrj~)1R?SQy(Z*{j7KVqx67yHG7_z<(=#`gfY zB$m4~!!>atp2^WA=HiLNV$>Yf@r!FQF7C~xzu*3Q`;!ZAmeR59Fe=K>tPo8OZ+2ETYgD=Sk!9)0D1fB(0?0l)&7 zu=zi{&}W>syMTG=f;o8l*clGlhu$jYcMkT>emH0P@clh$cHL{fbkWH!<=2JPAM<|f zz}MaZ_fxsQ{|1+MFCNP6VoMxp%l+a;taM)%FL>JGsQW?qB9`c-r@MTyD@Kc9G26F) zcDZYZ1;!Q6Y`O0ZSFD%&qxux{iRBZc*izB2kX0Jn_~ln8Z@hKF$%^)S3VCvHrxJE+ zht;SOR-@JJb@h`PL(h{f&DWUppj$fkc-qyUs5$Xh@7k_!Wu9~-L+({c=GFLD{N|3n zk~{h3ij%LMjn$L+(m9ex?O%G{OP|h$p3b8Do8O3u>_7QGXFD5OgSpRo>u7JH`Az4x)S2eLZ_#|dvH2=mG2imZHZEEmY&#y>_W*f9FC6UGaCmvtE2`tf-4c7y<{>jt&fHscv&KN?z>Ksjs!bfaWdti*5bvZH?|GY$I>{=JN0*n%&`EeAK!s@yV-4 zt80f(=;CMf`gd%4)02!bVUm3bxr_>UgkR}A3JmU_Mi36BHw8L znj;^I?tJUt>f6p1_7o%4m-2tHRvhSakH9O}i)Te!UKQ8kyxiWmb{GK@;7>S_4Eb^> z-Py#>&R7mNhvMIJ;=`%>oe_EcVH~~M#WUS(46~Z^DI6RiVvJoC{%=lp;I)Py{`T+E9Zt|ACY8P|7ON*t zW^0t3aZ4K;CA%ej4GY6p?X8nbrtx%U6J9dLEiSib@5vd-qTyJ&p6JeX_Lmcuzk2m6 z@v1j2esuZO>8>A5hx(RNuJ+3O)O!0%kGk)}Tj$f-Cw(>V>U)xDUw1Dy?>d|OC_h6_ z8FF~(+dAIr-+FTCBdfl1s;_TmN4$I)|K!!Tv^Xk8mx|pj8;dZYJ3!z6HgD=v$W_8f zde~rYc3NlW0nhY#qrfWjJ72Qu_QRfO!!Pn-AWZ7pgYOLN3NJVNgkvb1<#pKWyQ-p1 z7yI>lYr!t}BK_f=by*XPT>T&Q?`sG65&x0X`GWr+w)_8s;`+BS{(X!#pXIwS=+2Fo zZ{0jT^~taJmhpU;O#1kkw}1bpMW65R;-PrGbzFMjLl_~B_%T`YDq=B2ye?&*67Pq<`@d{2&fP88c(3!Subp8C+qw^^hga&A&BfXEIojCtp_LO?t$9oR z$(uht=3U+RaK3zPADw6W87=3OqdJH9$vx4Ra7seaG$i_LBTtI(HrFt+PErJHu#auf1oy_0D|tXZzX~Z|BVpJpQ(H>-zG? zY{|B0{usqqKWY81Vn<9CqsgQvED2|#g;BFdENh)ptU+5SW2h*-M-EuTt&lL zdg*gtp!@sEdLOIhQ|_1fnf%Qs_@Upf_-%NQAMs~?OGZ5(L-|(mL>J%WtLEWj{@YY& zc~$@BQ+l<<2P%HpBc|xi7W`sI%;BSC(jk7#`&Qxe#r|#6HRg`JE9Z9yi0Us+qvpyE zxwd?N;@9F`eb%@*kgjO`$*02_)nTeSs+?H7*xQ(FY>w#K-8{`fx3jgs@_~AJ0p$a) zsJ;rB&M(@y-o@Har8!SZHlBJmKI!-zuXTJ*?sNT5_PpX{uYUEnO6UAJ`lN%+Ys1qT z_MGac>&dp$*T}_NU(8m%ln+MN&(!(*()x>oXg-UU%TZX8OtiU9S@PlWy4?C^X{qc7 z&V1@@qD#HAOh)V})(uy?3&3S}0rPxh#$WypIA_1v^ZVNeF5lr7e28!GS+UPYwH4p9 ze6!;J+UoW3H@dWoCvE;}F8}V|``>*-Kl$Q-oO(r{IO#irdj8BtamIJeWlTN|hl>68 z#4(?54l!kn^;$d3Fy~XrPL!O|yy%Ht+RLwh`TAE+GOxy+*jgL44=0Vca^}$9xy;v` z(X}(#=;|}aS>O-e(l99+PC3VuSNq4(bnke)eUB$|^0vL>pX#kqUwg3ict3^GS03N_ zp6tPEU9bAnb?PnW=R@Uo^ohro{2&=Igcr?Uw5y}}*wSR+((=_6ak4R39M-?|Nmfk5 zB?T7AdoZZC2~2=lZxv(BYmM!-xnLr^QV*BN!7JFJPf=&bN$I5n9>Gd?5_YkLp7J%j z;gvQW#)OG*QGH9lMK~+-lJDH@xAiMezc>8yv*Gu(LhoL0e#O~`1E@B?aew7U{N(n# z>pjmW)%hD4zT%!Le#8uaEOyX*l<)FmciG~Oo{CsWHy!3i?|Co(&X3s#)0DMSKON%U znC`J}#V;8)WxM&=tC&aZn#1=xI>k)(s#oGg*-=>>+WO*NSg8MrUw<^5Wt&(IZx^G( z_3}H~-2<(i z{Pv}@zE|z|KZc&VpLD!O=4l+B{k6~4qvu)FKF_Llls~9P&-%8V|CW4dd1rlNr@D9( zXVK!n{`!hbRLsJzJMUk#ct_~lD3t!zjZZfVoO zt{-f??14wOEf?;>DRbWUhN};@HdnX{i;b}k&0KeS( zfZXrh?@q}#eLoWC&YwT>F}}gS__zOWa(@HRf3x53O!5jJbAOQ2{r9Ko!!uq^HBT|5 zPL8}-6FdA+-CV}ym*y=O`wgM^!52SaF`E_f&hF+iKiS%^XutcjyLe)k!Y+D?U-SA# zEfI4mcRpAjy8Y_O(39LL(;O!~<(}I1e#Sc+_TdvQaQ9gOk zf8~5JsV#ok$H%qB2A1^XC|EjK^uFdaf{i$7i6dOyu4~nOa!{Y4Z!3fxduO5XjutD6rOTf5(a}P64 zN>=WSTAMv}Uh3gg`P_W=O+TE2t>#yUHRqc}+dHc7l<<@d+Ulrr)+6uB@u)p9mwhVt z`~L~>+bf(iuRiBwe)HhvH>g6^eBW=T{N=5jPxBe)ny>OPdwCSy{4dwinV<7fcL=e@2kBGCC!@due}nih{X2j2mSHEm*@O>I#FKS| zEo9{X?#ASw3j5f@E^AQ43>+|a?*eQQqja0QI2S((o;AFuELK%V>98N+pSC*M+FEaG zMz_wEc<9;QK6@rNEKeOj-r27mZ)yCWgJ$=uxnAYUlMkEIvGup)^mS)A<b0X}!>`6Ax72>XNb|tf_muGbm8`v0$f4w-jj4b8@RF6d3=jkbG$5{4NY z4rLFU%K!S=-202&)@v>5FdX)(o68*XJ-+|HU`3m){q}&e2`1S?SO+t|zl{0ISuvk+ zj(o#e^H1l?pPe+qLyMg=R%^4v zUa*^u>c&*IO{dZw0cE>bat}e-Y%JTt9CQm?-zvtwD#q29jxf?*h22qmfgkpwXR)_< z#*{P8-15{;e#b2Dl}`NhJ<;+eDqq(oyZQTR?DBTp*2!#6uO3bIq-)FeJ@MC$r+VX` z`kr{Zuln1=5h1{0>2rr+jUppOJ&v#M&9L=}$_h`P4u8g`E zGk#+&edNXE9kb%L@+p4Bu2{wwv| z&Va{9`LR5!h!s92Uig=Ji>YF;xNuj7U&RYqGI;9zRM|C%6}rtsuh>wECp4dW42CTC4JgrHa_{<`Q_65nEw_VuV}JprF^fgzOhnFh)wYa zn@}-aDZa^=7bc?GWQ-Bhs6JQ`Mnz!=?9mqQ<}KdofurS7xWI?9<9Gk=Kfd4p_T7Bu z?%RLkj3rNRcIjh#_P{TNE%@bsxXf2%jpF8W@#%rzLSJwPxthRhC_dCygl2jWtHGj!GC8g_~PHv9CU~ zK4TV>!|C|pbhuwXinndDD_0%;)@Ac+b1knrTAkdPgUjFg)XA>Q*?;QLKF2g)W20ox za_0Q>opN8&?pzwPXNR}_)sxY#PPX&Ludgvn&;D|H{8u#n=Un+Cn(vBj?d}ihOh=TA zm=Qn4Tycepzhbr+3ww&SXyeI?Q5XO-Hs6LF@B?1xiwAdLj`3j;D(=ngTR(pxXFb{q zpMi1a+_k_hHrbPK62#fJm?i(;) zvH$pNULT_a{{J$v;`g%(f5#$r_#9tzw$51o^*5ot^S$f)8_|FEU;fqYJN$*;@Hc+N zR}?Y8AL+{9_?$YwSWBvCyOJoB|i9SIKIu~~-@Ly4uj()ZHY%_t z`U+3U*vq%*TYX_el#f+^5B*a4be6x%ttj6v5AzA7e*A4$N9oj`PVMba$I07vW1^?7 z=82N~T-m*;9yPZ5c|Peq`L)k}ZGH5ir`##OGTA`J+RoCMyrPY3j-_<-TRxn>hYw<@ zm=tHlQh8Eee6%=KKjX8wOs9Ma6BKpw>afFoo}Bs2)jLDooZSVi7e4)0|MMT-zJ+fM z`1VMjy0yVGb}97VI<9ro36r{uv|it5+0#1=*0C*IHl9v}zU~3|Fj?-G<6)mM_k7n} zc=CX^o*dxchOtS1=L%np`+hR#Z~jW%5BU;*6HngIV#}Gz%g(&-L8v#sdw{<3BmYvg z`GB$X`TJIWg3>8g_^h}nX84@DskXu==_z))4-{7@9k4*|FIG^vn$ME!-{bR9MO@;O zF_-uiH)6)x&21g*QMWg25o7EiPp)FEbf&jBHHZ2WO%^57coYU~`>dN!feUPawNZ8a zSH(E`^{t zcomLWcXey`JEyV67^|c!9D{AgX2xqTro%I`Gi+t)Bb@-C|Dd=*q>TCw}#GBy;Mhf9c9D|EV4(=~Lf!ymGU?@^iWx zlg#qtMfFvGqRp3%&(YJ?&&k(+?$5TjPQG*KjF-2vyEkWE-*)>&kMZ>8pM3T7U-8|4 zJ2Q%>klp%IKN)(9J#&RS>c!N~gQuN6;ygXccV|d1dAYjZ15rG4p)jKyTmB@Y4r|~E zIfY#?#d^e=eNxAVW%jN;wV&oy*qA=^spA>1u$^A`WbSZG94BKvt)DH8H=nt}KQ{mB zxBuD??>|^C=cDq0JAwR9hcPgkZaU~U|M!tSfAd$#hkb`q#H%xv=lB30@&@*ezi&T$ zK%F0WyE}V6Rvvc#VxioMmN(V;t#>p^zx?n0?M{H|^V`CGU%hOj&;5W7b^az+`nx~A z>pK7+r(gWA#d?aT;)B1pHvW6h@#%Y+b(n`u_nNM`t*e+3gW^~@*Jmx=3D{S$m&I9> z4QH{gr_%rD&e_-a^e@$Cf6DP;JG%H@d$Ag?@-*H)>PH)gZh7i!uKJRXU;Cshzx7k@ zsSS&s`0?sT%h&4siA;3+s@HeY)k(+MUf$MEx!Po&%I?M1+fVeZVob76`j^KR>x^!n zIz4=)!uR+qKjfFc!uXLreapdvfM7E&WTAfThu`Hj3 z57tAEJ%m|d1`M!X_yQwf8H|A^#_KZ*wEQMV82?tEdQvBt6AyI;QdyMVvZ?k!|Z(0+t%ouMj`ote!+i(AT&UdnK4L*>;S720eLXWxoHwS*_XP0rrdJ*ZHZwZT;D=ZfrKutJt&86<8LYRW~Lb=|s~-&YswZ_9(h} z0MEWzFZwmg>i-)0evFQDJ)dju94q^(zVhF)ZZF%<>gb+jc{rMn)NUL*JMXt_Uj6Av zCz_8fJ#)BR-B@u{oo;nJ_4>A*47t4r?0j3_IHJcG{Tq8Q2>*`XEB3|dpNiE_I7JQ~ zl-ud!1F%v(4AT!26m=K|&tOV<(){MM*DwiYS{r-a2jHhVUbuztjM!#8TkgBXHMh3; z&1H@s`n+4Nd107>PtIE44m=Kf%!dc#@vP0<_6ttJU+ZWNJcYcmr&(D~R zJ3rhp+zt4n@nVbLnX|j5y7z_ocfR}-ZsgNs%*&tUf4(iA#O;08xZ+0axZ@aaPIL3~ ziWp|YjUAUhIyaukZy~$I{%rp%3|*PCzWA#io}%?N#@y=JpuYHAfAXsj7Hy8O2k;BE zr|n6+`rpbY+xMmNJ63&dJNw?#{;Bi7XO8#C*yrT79uIxRUzx41{MJ|ItlLkr{3x1l z@e96Rdws3?_VIH%mewC%TmSl8bKobBmw%qVtPN}Es4rQ*U7U(>_#ob4lC!s7JTct8 zU43KP+~oMX9H-#H23SHbjDj1zb>Is=jG>ntJJ?m+upum^iyg(HbCFlcD)_LKoVvYH zH=p0*eUF8ubmGCXy_>XV7z?w>;h8h+!n1C=t+(}sgXXu#)-N|G_VAaP0Y6r?JMf?V z&HwSf3%CzBcmBa|{H-9r;Vb+^e&$2`Du3l~d`-FgFB!fnCitirk#D{I{ig6o|KxA| zfB*0g{`!3n5J&u3e9>bL{wepfLu{BYA0=bnd#;P053|QOedaZvdA!(g_-}2WEb^dhDb;_Q)P95j?Z_z$&*mm{k zlYP!CyE?;YJ`;_PcIM8zIzC-^$@1&^QSHXpm(S*#(fExcuP^`1hx5bQ`o)$~o$uC8 z4hAUpr^0sgm^+H6znrhGAKt+Pm;)nVg};L;597ff*yVizSIEP@<}p?YE7%i;;|~MV2eG{ z7pAdWJA8VJ_HGX=Ur{=?FDwqLwUw2zZ`vn6d)U}o`rcx1D*JcJ>202{-#%r7dO7H% z_Uh!l)qYD?d&93ErtNQN0y3)DSj-Grr#Z!M8 zTfaX3op;#to~^S@)P;EoGk9eM?S5-V|)7- z8`^zy@4s1r;^)iaB_EY<=;o{V;#>RvP44n-WB9t*5>sMbtcVBl^m^x;fAhb*-`_OS zK`$MA-x|b+BBto0D_g|Kz7x#LCVNp1gfHZc!xzU&xOGzVSI)lL-8IOmE9Rr$d|?<` zac`>Ng@M_MR_e2st?O@nXxJWhzeU@RXmh30JZJsntvzJdHudeV?{n0dkwKOAX8HA} ztG>^*SMF6k9Y2<~=IE22`r30c?O%O6u5+kwW$Qz?E?;ij*mCyzN$0PRKl5E<^KJb6 zAClYi-)j94+UQms7>Nw*y>(Rf=)ufEE5WuJ;3M zA%_pgd}lOPkz46B);#5Mwz0FhVVgPe?1O%7d}GY7&Ng^tE_zW|m940LbTOEWHQJwa zvZ;5zebB#SKI$Jk@VOn3gXKYf#FyWacP|zz{8Qo6OZ3 z;?2KPk<0y_Aa@(%?jQ!l(B6^FCsyTsG2ESi?~845!cKa!?~c){Pb{;WKKj`qhOEE4 zvwhGGS74lY))vRsVLirH!Yyrm3R&~18?V4vc80%jn{DQ#Uz?n_y0K`59mbI-+nDSu z2c-L?^)IDs+tuw!YmW?MiaZ6Tf!-@n6wh*Hb-Sl%B1>()+de zts|P=+Pi-zPrLrJZ~6LGR_@kb|05s&?Bj>x7wry^zvth@kbeHk=k+Cb(#91Va(pqO zPaBT(ZqUaDK3*v{-Sf+L<$U8{O1NX5ejkJtaKoDQn@67SJAk`@`NA<6K`*>u7o60O z2ZP|2x?)bYzy{@B$2G>@sgt3XJ@5$+w$TSW%%Kghy!~HcuWG`JO(%9sK_9{nb04i!Ed5ko)N? zXR9mh5ZA@3xx|jV-<{s?dtyaw!WJ%Nsb^Yq` zqWJ2Ke-CZ!sayMLo}D8bnrG*(zB2L9t)JuTi@&tK==OcCzGI&1@t$b=qp$wfhMGGW zbuzWLzGKukhu1F8Z(sGZZ~5wC1+B>A`8B`P7E}Bc<#Xocmwc2AzEW)D%hCK=dwrd5 z_KCHPLwWzs`Bw~|aSIc?E9h)IO0Vzx-WRn)(R#}J z`1a3ug*@6`qHxPR_5!vl>C@Mpz&tRy@#+U%HErlr}pyyjbKj@FP3(QMHUFOyH^ zq^+$nsC`SW{%HIkL(>~woz>B;o2T|!f6E4Y(SDq?aq(-T@t*8p_sOr_n&>#?wDa$B zG@s*Zoj1SLm#^~&{>ZQK$r_`i)L^S8xxOwR$LSt{5#(l$8w(hCvJN0;*;U~ zFoExTulu)yz5)0ihX)&qgJRM=;t3|Gi=$#zOv?A-yx;QZx#Q~-7KKCM4qNDX?_RnO zG{1k#;BP1P-!#y-cZK?l$zE|?fgASW#=~p9?6OyI)&-htu?vR#_ZJJIR10T=M_6>{=}!qi)VgUZ07s?U!AV*sKyx27tQVO zDwC%NPKXs$Z1W?r_MW&DLu@vNPPV}X#oZr@w+`vCpyWKZj`7Io`pTkoOrHEN%f z>U6|I;YK*U{H=#AD1JH`Ydrgws=q4El{`uY{kckZ?%eUByN=|Z`c`i1JEl7NW6N86 z#9y}X!Ez32&Xb;YSR0;sb{)Isb4=}(F?M}~pNJPljG*Q2`iw8f%UQ(^etAxRrFcj2 z%Jv^Eq*c$@SV5cjZ(+`biHMR6$(vk#tFyBIY_{2HgO&z@*^hgY{Z z=1mV>unylG_7JcAIrqIi?l)Cf$i6SxhY#709r)He;9c!EwDOo(=q1G2wfl zI1vM49#!zf8hLT1xRc}gO`+f4?!15Xg-c?SjJe?l>>qZP z@Qf96Y*w_t_1?+%?Cq|k4hPs_ex>_Bcwk>Pud5pmvnyx+d)nOt7B|1N&h{O1wzu!8 z?#$w!`L1^TKPNrsern^zkFs&swEKZy8?AH>sB`N~m!5jti=8*#(&jW5eSAsbTZ&k! z@ViPpvhKI+YMeW1c?|!I8FPy7@*G)r^#0xjUz_dx{~Z6NZSig`=CO7$B+knHe)AXa z+9*sQQ{IOeYzag3!4Jhg*b`VoUcqO#ImwbS-kkc`q1Xd_-vj7CVV(WMCxfz?KKo2p z^T1hmfG^#T5BZNB_?A0xzoD;h0R7#o_!C27L{aDGXt4ql6!GHC4+Hu=95#_Bt6v;- z->y!V*g&gyM>h^O75~ZHe=BgsdiNFI>ioWd`o;hU#HIPg;S-j9i+yBg@12eR_J}?3 zfIYAR&g^gdc-E``ya#N~c&l#g7P8G-y*$Fk3SKrxlQUi&-TLzCL#=nmn)m;2@BTrp zU9LKgSN0aB6DuJkAjU?!SQt~>SOkO=Dx#!H5DSf5!8U?kjQFQhE-1MWB7y-mg|;dx zDU!y35)jggO;AA%ulw_OzUQv{u+KjG+$hf}XP*~OGmnmb z^)Iij=jNGt^k<(v-;;JUkLBvnk&`=K=^{BMH|-J~s%t&%56C#Z+yC~qZ~5$X z?-Sk8^8=j)ywlf@--%E1>r7$o){r0KCzRbO@;CaChd$QCZ^3PPCz}#qN6u_PUt^jV z4Yc?;IbOnkb+BLJU*D~4*0?2s`;-7%>>F8kQ_ku3279$P*s#6Op0JPDzC1rG4z^F+ zlXoWY+#aw$+F$6HQ=2`@hoEmB^J;HT*=P2$eP$o=0b&(#KR+NI_Yy!R=u zn`q&iT&&03`HOw7P2zKpVGp0R_wAmoY2t&qCMM12*-tqfDW9|^#*tT88lUCb&PjNh z{F|#(J)ZPKPd?L4bz~LpP8qcpG?HiZTH8&ze(YE*#`f4<$+M)*9QvX&lXV!cPMHp7 zyD{md`h6ecO06Y%sh@TAGiM3iXsVlIDyR23J{hH7n2yd(_WhXk_HeewX5ciO?>oQt zzUTY_y@l7-VjQ1Be&oW(@Iz=@CtE2N@J!d?xN&@%KK3sex%VeWbnFph?0NLfjg~h4 z#(24;o-dW0uNMA4rX{VpPDudXdoS->7iIS8T@{?|zMgHvY5RkH+Y{{mwb%du8~S{% zePy2%1GI1KLo~ui`(Vbu+UzI$$o?~r{n~y+U%NI*e|rdjX!UI^o|W-oe7K9wDH%Lu zn>FK~T=3)mP~uA@<>IB}rLXl$`9L)I?(kF27v+Sp^$ioE*>mmn zM<+hw>84y?`jODhA8vl|U_0u_L~fqw8fT53mFJx5^o7IG-sk95XC2Wfx0cG~=&ENQ zjb%^MXRAkBA99R8yiPjG+FC=o`ufVvht8>78~d$K`je|qKjrp~)U(`JDZc27U1f*u zjn49&=O1z}+=VuIw;#x#PT;@uzJ1PDN$q`lgSq)2y5K8}WpC_IyJxbHdloP7MdqU) z@+C{^DiAuHQ_xg+KfGp7NPI^T+(|J|-wOkZTtoH;mi zWK$Ej!uMiLwiedwk2mQl_rrc}dz}2~gzVFCdtIA7@9&GKV-s@vBO~jhSL66Ax>Ke< z-zcct&*^=GF;j-*h!$U_9u0a`PWSYly@^ZoLC1GW@zs4QyX9l8Z@mZDYhXP;wgjB@ z-JOX6vP*a`@z)#nANC3xXS?>8z0*B`xWPS~I6xnJi!ZV_?E%klOWr=QckQ)fYqfXz zK7GvPSuWX&_Fj8j+#%VErTnb%_F=Jv^0AoX7!OZfSA0cY)@5M7B4(W_jlO|GwTctK-Nw`Xno=zEM`c5QBLY!JWEqaSqS(v(+nB-be)_0^#x zB?EaWj5l`5#vYLDCwcnMKDt*bp46@%+n~c^xcAider$g7rdz4l9+r|bTPj!f_q^oR zM)&k!-TL!iC_&^?@MH^bj<|Ze0XdK_cE{s=JN4DtV!9EmsunWEr zj`uFYxgY<=n=^Z*3wEYW9Y5N+>li<)Zb{%FB>>}#K{va`VKBzeDeoPqIgix9{v-W6f_oUuQ4cLx23{ z=dZs7vIoELD<9v!Vf=~T{OpE3u!3*K2j7a;L(20pXp@^n9{CdTARBAVM>!u(+)$pF zQH-#EuRvCvX~VaPakCuW$)}$271nRR)jVLSSfIpbO8U_e-t+I)k`HE2bl-Z}jlL2) zYOQ$Ylkss)>tMs^8{0T@>=XX*pszRuU-(2@8O_!r*B6iIz$fc2xm%`#Fg#g$E>#Cd z*g1QqgRs3AE?ucFhBFpl=CDq(u@72jws9s*|Bvyd(#i>_nq>ezVYGB z@60nuw#3%i2f5@w=qfp$;*(yDC0k`WWdnGS*csf%i`;LI#Uc3OgJ3#4F)!U@%lT72 zls%UCO=C{+wAz*g9zp`${r5Nd*d%*p_xuYR&bP4J%{LxwyR(1iZMl7557-}@pTCL$ z?490&@ssw3IQZ0h^x+@vSNmT)VISI)d~g059ewSg-}&@UZhXn{VT^v}pXY&7^IlTh z$3FD^+jp3BB=x>US=?rg;vcewlk`I#;elMDLoy?K*v+T%V_^?p8TQOvSzA6+|KwOs zM`*z|u|j^+oZ+Z;I?Rt(FK2JC3h(UAI@q3k+8^JUO|mWXqSw7In`<69of~i6#bzhm+Z|CtY7pZ)vxpMJ@NZupAc zKcYdt=oo*~eARmg%8uDiaiC{_ zzvw0&R=ywo@h z%m3kP|NQF9fBR3b{^Za8YD;_+|5a>2e-k_MNi#kmYqI4hB{JhT$(;|CPs~#8S+1Ro z*~x~b2U^C#J8h+nw*&w9qeFbj`9!`E&-hX=54Z8e7K|eY`kpci+;>~ zUA;5;d+|AZvwaOy+X2RfGTb*o;TJxDHWBb)J@ ztg@M&v$ZL=$M8Al&Oz_tKY2@A+<34xWilpPx%VOLjGiPqJa?XbKf0kK^V28W&X(98 z+=tiV#S$N?%%0ONzR<`vT0=B98#(Bl?=^nU$9i58cxVamfiQsG@`G$OyH{qb#jEbW z>_>Y|ojoGuSLJ*Vdv^Y7kFs;L>(9?=zmK)?$uOlesD1BF7Vh&6_M-XY-P-PB-us|2 z{c!$z`sCTJKEFP5eIzkh_zyS8Me=??uAT2Zmh)xZVaoZU&N=;GkaQbnDog28Ia%wY zUe0gQhXkMaeA4^~GO-v5$=yI=2tC9!~1EI=;k(!IIZ zGJCk5^XmS=TDSQ33e)ixpLqV#e}8*>-tGVn^!Dq=Qy8y|J{xauDWiWa)2s6%x#KT+ z@AX4h=~3RjPWUgE#0q3$z1haJqijbm&X{fcXYmuh@58>|D-HVMZ`hALOn2eExKmrP zrQGv-ozr;wGB=-PzUJf)VLV>gD4o(bdkFLMH+&>}%~!Hx{!ngwF{wGwp@;k6ebHDF zxT^%%FQ2vf;DeuJpJ9If*E1j7dro`Je&Aar_NFJZFKR#97`)a$#_ow(Mi6YFFk9Mla<^$vngeB$)%g(f!e!6>N%T2@1gg>ZS?sH?@q+?%5>;C zz0j4q+vwc2o!#a)%nP@tFPmj;`ARVfTjLLn=X127F>_-iec4^H;$8V%{g(vpO9K29 zf5KK_b!UG$+YRf(QMuUGe(W7^-#g9soyPLB_5&IcpZO5@zn2C7&^bd9o&pS8Mn|hdyC%SY; z&^-aZ!+*Jc=%x$z*Ur=3sjG+W`mhnX_|W|j-^hNn%VAR3|LZ^XV;j!HFZln}FMjg+ z9zYDxI{{`J= z+W77KIQ+|x^Xd6+xbB=9W^^|UzpB>;(_jaj?R|mvum~OW!z+BkxZ(w4d#3>J*b3g1 z<&9%YVIM5#=Zs}no!^utzLc%tNtt~(gR#A0NA$>}-*}M2JnMH4@U5?Za*GE%7bD;! zU(N=_GSpAS7SW~=;hrP{^6}}~9bjdmSE1QFS$N(?NNdM#x-;JS@=+RYl zHogX3^|gxuI`g9`6%()#ati0OmvZ$psYh$S&Zl@5NAWH6!VVsb2ey~L%75X5Ph%_j zH+4V%<~OhF!hd-&0KeJ!pFMZ(muCl$wXQYKlE66<;G_5~K8N3Aw-f*Q%JxCn?^#*S z{@V*;-}ZtsTKwsKz5hRFJ(t|)CO@1{=D%T`ym&yHa${jZ--f}2eS#_QOdogzFY2QW zp6~IS4Zw4D(AhKGm%}JydavLaKYSY98ebCYh39Ms=CiHvpMRf8OrbyDn;)KMe|QGl zC1ro}p;(|epmzcK80+jV4n-4=vqAGWuXQSi|JH1M>=iG?GuAZi3El9W49HAQ&S;oJ zxo2&i`N#?_^N0iVNiW4zbXJ^}4%2ndzWrwd?qKL3JCTb8vZ0OUp)T91U-5#mb8X+L zWjYpb@O|Cs^KI;hU(3hk182_HIcxBjC0H-1m)Q4rs%+P~pN|BbW%xrrI~-@K7Dn#AKsU%&xgZ?e*YKFgb!hfTp#UZ zZ;S-DrZ4I|qE4GMG2b&xn>ZJCX(J_ig_q85;tV!~9-LHWGi++&KO8IJoxSkE{4YB~ z3x>n^Klr&1Zg&7-f4O%6FyFiXVu0cVWAViI^6Ri1uA4KwkEi$&3+S((gnzay?eDIv zy>mR-Sa0_L;Xb(~zv`y!$qo)1PdA$!4lxS(DyP%V{hpPzqn8bMW*h9NMjw8XuQQfCvt?~>&$3EO0?$JN>^Q&eJd^Fq zivh~jbw6Ma6!)UxyMplGd93_txSakNc7^rj+WGd0>)U(y174_`c;OjNIH%vX8rTC% z^p}@lm*g3~pat*fvU964`f$6ue)QB!d>=muSHs<~cmHfHzOiCIY>C~F16=nvR>T0X z-MavFVgUH>?!OqJc)+u71l&oW$2W)n6Z0!iUf8!?~&7+wq%XW6!X^SXrI#?(HM{ z!5)(M(*61Ac}d~%x#h3()ynWU?1&q_9sa2A%+BxEekvDNg#9oi+WS0AGY{G@s<;3R zbI`5!iTm`=56Y!%D6B<8U5U+fUe}-Rv_4qxJHIe~#smHi75rD{cL9A5*!@3x&S1`T z%Fgq6n(0_PqMd9?)}_u~NT$y1)*xBCzU9RL6ZgY%xiR#0ECz`FK1ZMI&4I?$vv@)kz1Y^vP3AKr8>4e!FQq=XiH;yd$!{9`sUbM?m8 zZa%hSyfb>^-MRCjupGu01Be6u@|S*KyAM$JzyI;ZhX3vdJl7BYWryNZ_|GQeB|far z{8DW_vuEvW9=77KHOrHSHK3{;wjC`Dtk}U{XHKC``JZjAaMbm zixt?c{_d|XYZZ%|C4nV@C4sjk0GHs9Gk*z2mDIs4_YH6i_QN&tfK=JLh^WFb_3%>S z7sJq*!`IsNDXI6}0D62WpUU^bf9Lw{`Q>o_hhG2ahWUN>@BP1b1hC&-fM@vM9WMO$ zj-t7XKg?e|JNcYteT>7CHMV9sS&|7kh41>HpRAPU{fd5Mtxj3{p6;Aum6rsT1eOGr z1eOHeiv-{}%<=wM+Mi3qe^>^ODn5zcAuWB2pSXX_M$;M03{IljBs)sClQ zIBm`D@yUdo&{1~3UuUOm∓%Hk;T)Ovrs*U)-i5?B&g5?B&AR|3w#C3w}BpjVs+L;;-p8GvC3`7HVyASYQ)jHhk_bve5OYQ>10Dbdsop9P%G`#aa z#dmGnUH;*G9=~$qtw|YAzE7zCu{>GH!*zEDWGcCjnD->s=APrjKl|3J@A|$^ZI~~1 zk*s6I0LP@f>XrnS1eOGr1Wrky-+Rs9eEVJ>hH7(8hN<4;!~Jk741-@Kb*JX4&36D> z{BVV%a8v9c_q|*F&dJ3K{f$*P344oWtigAIb1kqEZu;I7_WMo?)}Aw0eZ&ATzxxVh zypxUirhcdLdA=t<mkbCa`vpO~3YFiRm z5?B&g5?B%-0XPWf;r>kh?Ob?Y91!mNEg9VI%rA#s@^i6&O5eKx^g2JEd+wh!lwoFf z0R3GFcjNPX9Pazp-?s(u)foAn-nq}+)jRupw}0EYf6^60OgUB-2at!DMEc0D{{4pW z@*n-Jf8UfhB<@fhB<@fhhs!W0)V-hyODkaQ0X4O#9{^{oeLY zAO3rH9ahadfJy(Z<#W%>r|81;&hz4d&dB^Tzy#aalUImYm*vh^Ck9_LS zx3j+UKFs$lh5hdT-}kXEZLxxQ!S?~~JuYEwi-#qFC4nV@C4tM4K$u_d-8gLbtn7>r z^MCs@pT2%Cpv^k~I2AtWr|xoA_D)WG3()uYyTQh5u52gXgK&^AhJ5 z1HgWA7Pr81*zbN{9_AMh%)5a39zY!6F5o4~Xsu~UU`b#}U`gP7355Nyy)%Efug&*< za#%0-ZGha}zxx1qNyU=nlX+9+r0p z0Ow~p-0$0f;sbre4=V<^41F#xmIRgrmINMC0?zO79FB+k$8vqD@9h7We6G2UOTb-# z-z>s#clxm1@BWJcx&wgyz7^1C-UsOSJwNyh>pj46@vhn>fhB<@ffp-*iR+c+v)tXk z-vx*PUaT-)z{32kA7^@Z0>g{z>>h364;;n zC+@>~&-$E6Zgsmb3HZMYd-o6Xo&P0qfLyE~zm(rQUYPh6J4*sf0!so*0!so*0!so* z0!so*0!so*0!so*0!so*0!so*0!so*0!so*0!so*0!so*0!so*0!so*0!so*0?$AK F{|7&@LuLQ~ literal 0 HcmV?d00001 diff --git a/img/ss.tga b/img/ss.tga new file mode 100644 index 0000000000000000000000000000000000000000..691c97d304a7a70a8ed273cc3d676bab5b6f7730 GIT binary patch literal 1048594 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 S;97xe1+EpiR^annf&T|L#B-kj literal 0 HcmV?d00001 diff --git a/img/zs.tga b/img/zs.tga new file mode 100644 index 0000000000000000000000000000000000000000..06e687318a64e63ca1c1c662606ae8998a4ec255 GIT binary patch literal 1048594 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�H)nE7)`ZN;PGMJ<_c6Z#v^J%1vwJ$f z9WJ|EqUWtN?zi6XDESVD!&ntQL`T0gSrpYL_P8n?#3uuFn@%3RwIxi%mB8@kk9{NS2z zOK=p%wia=IIlQ$-au_TgbKRPRr*PETkS*IXwtABJ>*q8U^&<3gcl^y}`;`|#;#0^d z9>!IzJD*}3YyuZc?&WwloNnL9M%enW_s#d@#Q^2}k`1z5IKfuM-}+MD_W@!7zZWFV zC?;-PV`sO?lYGt!_z4_Z=Kv>Q3IBYU?;2kl{?Esp1MnBv!~Vk$_k21Zhim304`>9V?BX-UX`3P?1Gq{u8s_&UP>{A*0Rkyq{{wL+1o@?84c|MbGbYB~FT;pABVGDbY z+m+e>vwbp<57+Y#Nxl3Z_ji6#Owl;ytGtap*K4kmxC~BOOUXKQ4cF}Z@qOq1*3#ca z!9Vj?7bcp6xg7I8tb@5y{tR2C%W&2@9OJv+P9YZzHKw^X2lY>BMK4NUbYP##pXmNY zk^7W#&V9#>|LB8l#ItPLeRcwS=!qS6-UJ&;Y`COO_Q_`bmY`T5ed||UT+Tnl0qh*t zH~z~1%Gj?mnCMztz89yHlh5K8m~rgC`LTKO556Nd=^Idfz`tPwoM_(&FrnAZJqnevtIjpbghF8Sy{J##h=3^NbwBQ_wDqzxG*bCxdF z{FIh-+}Hfw$K&raS`)dsIJcShb=>~teJ>ufe(YLeYhku)W$`~g!x?Oyt{&&_p0A_L z;zDEKcz(+#*bo`mS=?_g5Vx8KTgxWhOP;Sjq5WD`Jvm$OT*@C--%%#zSFZUpzw_<^ zu4M1zb)DU>e(ag?)GzjjRm#mf`wT0(Ckxq%qvh5JM#3U#mV3p^c`**%64)9GB zydysx&=WV_(}G$+DbiyPwMcmY?CdrRoo-NDL$G1si%LqCBEf*?(rC3;Uj#(dwxD+ zuP6>UPWttXY!V;SPJ8mqb)0t2$N4P(&6njRbAWAR=OcWNA8E&TrvJ?EvdqQ&jG;~Z zU#tTQa4t+TrZMEDu4-P5sjDzgv&>EOi*T!@|b$_wvheu(QxxoeF8pHg=1?!&0`uQytzfa=5 z|G>TtFX0c~ClCCL_w!k~XYHrpl+?YklI>w{cqRs$@OtkF0H)po?c4yB$=amn4_F*uF32@fHO_Y49@D|^b4 zx#xhLaeUYTa6s;vy2jIQ z`)2yePsz>4@h86_7mnl~p1~w@WOv3+hJ09FtfQ^I?Kj{KUzb}O^MOBNBWvs4Gdfbw z-#>ZZ@5~=w=@W+0HCf1j_hD%{>@1OA-~Lum8*;Y}WWTL5q36?kcB!5R4dgfMkMFZ% zcFGTN4K9+i={Oees3Vs=_x%N2sM0zBec1nUk?#XLEx=&DkDJ3_xCW^aCHsYi%y#x7)NLvEfTYUVkrL9Ay4v zmP_Oahfv6?pos4?!y6cD}!77 zl3e_e{CpG+!ZtW)4*Jz68OR5xU|rX+D(s5)%e7e({3AOIH3p0zW1R0=onjGVn4>;C zQ{O%sCTQbZ0Ph0K$uoVEAFfQyc<^t|ud~)Stz%3&!SD1D@2|Nz&=Y(&7ubB$abC3g z;!L*Ideeb*@7`K>Pk*yM4NW*gZ`cER4+_u&7{PP|Lkmv){Nm+(un@>>ZG@nigH-{4v-%y;=dIl_TB zUtWKFi5|?4@0pMBaDV*2&ehz_$=(Hi+4DQoRAxM9jAWGT^Cdn>R@chOT%E4r4>`#_ zWqZ*qewX)^pn+mjcFMQ-o4A;LvvYj!8rHDwFbDTb>>T#+6+Yt|zkCSK!$SVX&-j17 z#~1l0-{i0A@+a5%jkbKd#E-~pJhHlmarQst=7Z!TuR8Dw_nVJC^#^~#tj@9hM##$j z?SIvSXP(tA>@%ORgIw*KjA@SHk1^r}^V3%ttWP?id-D(jIJ4D9m}{Q&uC01vpWC;~ z2mcmu<$pRMJ3Z0s!`?gHzMM~Q1Z!fAtvMU8K5MSLGWBj(vgxb*lmD?HcEV4b&#@tX z#9qjqY;v|IvCsT1d*i?AuwQ+ekFxwwJ;}Ur|KQavkN??)G|D&IU>}|-)5f^$pKR*T z6Z^sS_8$B;?q~C^o!iOD1!K&K-;+z<<~;R1;{$R_>X*Wta$}qSkbCRLyM23pXPD~n zXZj?MJ&*kaUAdRy|CRH@A7heHn)2SRCG5TL8aRapW{f(03#RZ%Si%q4J6q=q>>tOv zR}V&r5tQ*6zQ~7)rN_4cn~(9+_WgV$UzD$Y%6FCV9oV41_#a0W1IV4P8W+ch8*=zU zF6B}4UGZXV1y%3_$z~YhVxDk(>dDXZST8 zOW^`J^KJ5l9psg&@0yQEm6O5uOMce`_xnbGoce@o6_qSY_? zYJ8}iFU#QrS>RsW?;cL^N4P;om=SJhr`(=G8+ZW+rSK=b8l1oEQwDZzm?no2>%D83 zW*%gPIpz|Usjtjj;%<0Ce=q|77t4@EJ@V*7J6vi`VgNc;m!9+`bq+e$=r(O(?qAGT zg73%t5BKR6XWXVF&r9Fdku9>Vb)BuDd$~3AoL;Qosb%kXPuK##Gp1CG$lmc0|KNY@ zDtXx}o0FS|SRBuh(;AK#VEd+L!~t8bPjl9f`K>mt-{H%b#LLCc#n5axAL2Wn>yIq% z$!84n!1H1Nyvq;x4WC}$jgd>A;S^odhq>ref9a*`*2lg1%YEO6_vOm;7w^lvCJSB1 z{c^rc&#sM42EI#Qr(W~Dzg+{*LIe4ioc;4d=jd$S{YV?v^99%ZWcbW^9N?Ni@ICJY z_!-QB8&bY0hnuC!-NPISp7AfTNPG_G<9KqBiEOUP5sttW?O;wEi^m2=ZDn!)_}#({ z%i_Co^~mbJ+`g%^ePyu2JmqkQY%o+#RxuH|%)NJ@bYh-z^1w4=sSiu+|6!g!^i7xa z;d%SN+u)bg&iuV0S<=PI|8SP>==QedSY>*a*VchOS+{I9UMaUm*)QG9bV{k``JDZ| z{lA=zhzt2c=SKWRIs1(B$>>@h|FcQ)I{S?8edi!qe|G1(xogYL_013RpZsI^m6+f> zE*SN<*wH<%FY(2E%e6$N|IgmtglgYxd3}H2o@bbukeTQ}&(x9595`v6NW%d!7bl@< zX+kT}oHQ}ybkl>RgCsPx$L1i4hMpX-6)_=5ppou$2zePuFtlJmgdikMW+9xD`cz%t zy=z~4@B8g}?tAa^Jhh>y|4aSrW!0+RZ>?4T|Fy|W{DS=(&t?O-W^F5LoaAgitO?25 z%SLGqTBgZHSYQRfA!|u+Z(hVOYk9I z0cODyn1ipi1&?4=cogr;mFr$O20z0x_rfpz$Ju-){rW?H^ji}XVF$c4W|-t${4(Dk z-WpGSivFm_HOFuj=fWd62-6*_M}5ZB@mJ3+kM&L4-ipAvB#!9^KY%`hqZ?L@sc%>{?K(P?$_^hE<4lw(MR>+Snu-a zv+<}WJ@&34eRfZs>XKUvo}YHW)xN%4FN5##v^MFA-?G!!){o~L&+_A0$I9nNi(~j6 z2G&?Ra@WY!*x3TcYu)QFeDJI_QvcPL9Q56qbq<4y_0Kgr#+UD+kKvkjUDuv#@xE(x z!CWkCd>MT_tsV({E(t6jZ}~Gg2>*Nk-`nVo*%SER`Z7*+s9SPh(vEuL(bi5}?tDMCzV(4D zaHh3mEw+Y~*B5%E-p=W@1Yi1JFUBXPCr;s5E(QPx*w^W)d6dXKJD`5+hxVPjCmEM# z1YkgWr)`bL;LeHO@XsyTn*1vPPeyGd6_WP~TJA4}VcRvG0!JxY| ze#=-{I5dCPc;wR_81YTlZ<9X5PyNz1{?|S~$vGPU{@`f+BOlz)?|^fjmB;mR=VZVJ z2%n7|#=$*pNy$`u&KDMaIxR4s`2W`bf1dvzfA3^YKV2_BuI6k+GQ@YrNxsk3Mjy?S z`Dwn)L3-;rJ*FedtvPzG#`nK&?dWIgDBjm^YY!)8BWhPaaDEAAr*G!Xb=UBr^6H?k z^bPN-i#@A7aR+iSW@AnFozoA`OV(Jnw)Q1$w%+3YJ#TGQhjYhEU)KLN;_I`6*(TP! z^~C=Od-PdyO`nPdke6fq4TIE6X8P?~>xq1gpA8_v8~3d<^)9_wxJNGUKXa$#k-*na z0%0di#DCVN#74GOtS@BCrHb@w4!M z{#f5mjJ~Uf50Xsf`6}dexqNv)q}cMUrWz-%;P3a2ckv1_5$)eTlWw@z zcOk3X`dt?DeEZDjJTI1Y%jdWaH$2~$H+NiT?v*!JJMTMpk50*-s*j$UGkPQWcCvjW zHea&Zk6lxSj>Y}jcZ{#CGi7RD9><%n`e+T%J@?J6HK3o?S>Mp|x#_Pps$OeWPVcnI zPBMp*WAzwk?P+V*WA)Q*x%So5x-x#pu1UrNE3CgIyY+v+*ueeXx3y*t`Tg*~cQtq# zCg`_gb?Lu3CKt!#X>BI=JvTn>O6CrB;C*d*wmP2IjdSNn;F~9b)`oRuz2InT3BJVn z)?)b4F}#5#FvPRgmt?)dk9=qAS)JMZoofpw^uNHYWzWMR>sNc>%AUg@DeTryShZs$ ztO~=_C&9UrK1z*6TX0#QJO`VKTfz}|g#X)f)RsPli~3OVy!+V#o@&isb|C}*eH&7ZM|IB5RbXswPOFp|FZ+|zqW4oAhhM30dlKP#>B=_ z$J6cXz4^4q!NiccmFo&*KRAQQ#d-dpr6 ze9&I8L*s)J;+1R@SPGwv3-|kdMD@Tl7#touhtnl}i!b4-@u^GQ#$=qX!8@D~J|-0@-K8?e5}yv!eJOJ*OnZ&hTm`#Pr7GZSR7N{E zL!U~?JwH)Bx7<%}aS*wX-Mz1K@B8apykCz0jpMdH^(Z5$k6hz__w?;0*NXA!llhJR zj1T|IZ^xsr`mL-o=D@MCJNKI_=j|!cC3ExqSjYRDW4_`t$I9cU;sN_Q;rnaDoVxCu z&Nct~qfL4trO)QUJ*jyx4%g|OIifrEneZh&V+Tm|nY`TBUUlMpiA`%?tM&1xe*SO# z_)mW4SAQ&*{`Aj&f36p6#&7Id2fLl1ACi91`)r2RFuBuh?aIxKWBp8S`W1I)1HcsX zB+)mRqKxOs(0JUlCLLSD?kDfX|Ig3dxpO3NB=DRBR?N&=$~LzKVPkw0cUyz-M!DOy zIQO`R&tqL$qt3%3SO6PfAFOa(niw_k1V-caiP={!hgC30!s~vU&~JYFy<)#pnjVh*aXh|Ux&u0Uy^=_na2I_Mq=Xw3mH`wf0Zu~ejeAef<(>3>u3ueJP zvVigA#||J9$8asXKv^6jkvku=n5lA?%jFR#sYg4$gCtMoV6yi0Cm&v)Iw#xq0Qjc& z+OX^fV>Rc>!*ylVdtdHlj`Yl*!ZUs=i6%E^V?ohyeMU3(k< ztfo*ouArz>m$ zIU7J6Ks)qo>ekRd`fQBz+rP0c`2D-@|HuB!FaP+@{?ZR;QjT1FZ~yE6>PK^J^?M*} z1vY~7+hnb=FSJ3H^hsYOawC81fgH>!T_-2=DmNwxwmA2U{#RCcde3H1&VA{2KkH?* z^t5^;@RKWnwT9Muvd-A+>~uH)M_g;oIfi}KqIFtw9{0Ou@7nr>i7+6Zhh;DZx8vrp zg}(uVG_dmV;{ufO5yld|BW!L~=5ByOER%#2*83&BkA7g`&eXq}+ z=^e$m1AciH9;*wls-xsSoG!=l%I3$hchsdVZIT@>kdqC0)F1M3Js$~<^DSZ9L!Q3Z zFZXfcAO2&%IJsV5^jCi*{9oVP%a6qA&X;fY#TS>$W%lI{{K21_IUXSo{qxMi*!y;0 z;;26231e&y%nP|W-}_0PWR6qaQ%)j}TN}XhxKXT1`MsW}#+rWMcJsw1D4AE!n^(u? zyJXEMCr&`N*)iIWCwqt0{7A|eFWr;$(-`QQaXGdQ^n>k6Z>&o(0Q#*D=2`vLgmqwz zNO8Y9C3d8>s2siWjA#Asjx~n&@jE-gddm*5?uxNlv(~SAB<1wa7#d@GZ`@=e=_l+k zCSys)P~@eCfv?LYOGeq;I-a8cb8uSZ`T zyCzPcE^Vn}#~|1g&gv&j;eWg^aqOr6-HFxkO<8hu{cYTD9@T}T{U!nqknlw*{?NC{?^g_VTp8om zXJdRFp4ont(ZALS{c!9#dPLrmIif=)<1|O+*m1m1 z7Utix#$wLQw`3m4OI(2NSx>Ev-L`gY&Cz%DDa&>cLts0o%NmUT|HQZd_FWu+4WK{q zc;nHI_SEOTq<_w*EjDEC*mItd=R1&(YvNw`-#WE6S}$jx|9!OclsOXk@)B5U?Yajy z)}r;u27qgmCx*XbUBXnjHGP|bAJ#T3lEQ%2K5P(c#If+%T89mAM-FQymtTF7@JX%= zJb+EUCDsSm#0A(0%EaC3a14jwkFsG2ObajF*LN7IygtKSe3-wb@2<%`Cpp*uQrr`# z>euA)!3!`rIpG5Gi|6A8SlhMBDr!WsG~{vS8U>rWhyON@xS=v!8f72j~1q;7H)pNnqjs+H2#tT94W4)@t^8xMz*S z0GJE|B*(A-*T%_k00!`j;I4X=QwF}kA~*)4Bzpv~Oj+;kiQD6C<=PwQIoGtSF2}Ar zhe7(m{%}ovA-e*GDx+VxCA@{Tu7zFt=zjd~+_Uft55RbK6Q71`TcJAv&iX>Zyc!**wnle;x3Io21s#QriSG9Z64 zA}a}YWHVbUxZgaP2fu~&(z!(1=zSe*}V-xPMm|8f{cR{41F4))`Ja?-9cmk;3n zzWwKa>EoXA{qZb!TuV>cfBLRox;)p-mG|j*$y%c4zL(|CD`#DJ_tu)Ro_^tP{o{Gxn!@>UzvJuy z>q#BTwr5~n=@Xgi1G&nr8GVzxFIR@nXM>Rm8Sxud%;n8IZrv#RA#-rb9tj)?d|CRf_Pa$F>z*fFpQUcsmM9Os8aJ1(&Y!X%s@HhB)t zIhWLjD`DV_De##GMoF&8VQ82Y&ca=NDhA-babyFO!!?*DUJA3Ehx53EJlF-W&M|I) zeQTe2{eRdGnKfMK9lbmLAH0wa5bw+NUw_HgxQn5{Y%~`F_p3#r=-WT{ZxD_y#4rfDMYPlxq)wUVq4F`0wW0{F`UVJnIu% zf`0IQ<@APr&=bizaa~!w?_T55SABQAIFEBSK)Pw3tR?eHmyN}_IiLDH^u2dzwP)UI zTTZTB7n7q4+OTfe3hV^y$QolGNY-VtE$J2r0XfX!v> zKX5bGN5#s4s&1PeOOH;M0I$&NE{ zhkwG~z+137e3@7^+6v2HiiFQ#oaA}f2M6)x3EzulmC*&*N1%3vVYT z4(`!^2`0mGIlibL#thHp>ctIg12XX(Zcrba2`4Pfd;fV+r+!WT$JJN9ZXZAH*MDQe z1-K5D=eHTZ`(!1>{gY?J6b5H#=ly&2=}YQQT;3eW&4HZECBD3|mWnNzKjTgoa_17; zz}&Obl*2*qJEGo^!Dr^wdaw@6vo&Gv>4Ld-O&`hGHK}9caL;_WHs@l@tvNK``jsBa zy)z>x7dl-0-`vIjQ%Bg-BlhDr{j3i*j$=7_l7lpPc*sJXFk5f<9F?nv-L~2 zbYC5*LC0<9KSPRT}al2wDj%$<^I0&bIKhF90`012`n2xOn`r8t;0a?I*WzF zLL42IzzkRrKJyuHJAd7Au}Sxp!%yK2+;R*X;UK(L4hF&-IWBkn=YH1oSb^k5w^3l$cK;EKEPhq7_tG_6WaJtANW&f*j}eTH9zKI zp9^xQYq%UA&2bJca_ri!GvwjA+&sts^Z_4A=H&g~H(&n;%eR2+U>x5Z&wdS#BTM`* z*H71_-3EyBU8DQymHD8P#-NXmCH>U*sSjiBC;t!bPsg))&Al~X-j#LV8c~OJKo6bY zCcpjTnl+^^?a@1PpigvuU!&HhHNMNy8r4T*2^)MXzy|O?3&?<6$gLR4KIiB7NZ?4| zbxHu1wfApr!!5Br>zdC~+|$~JIdBB-mclPMjRZE4u$av&`32e)@G+?#J6~05+7d>GvM%H)dS7^FLpWO!Pn8j{nKc ze7;YAK4%%@#@7-#$N%vto=LZiPcr8CU5<~^LozXs=31Q{(>HVVJ~04xn>C#<2F`vO}9Pgn10h0{LklC*7&WH zY$-aePUrMonp{7gZ*8eddve$0l5&#g^<}P!v5x3fF#M>;Tt{*SdHg znSV~5J8c~a90@!pfwkWW!z8~w?!95}^os#l*RI2d`~bKV*Tca069&NuIHEi(3tPe^ zdB^kpxhqa72UB1gjFZDKSl50+{x3V^4pYamcEl|8h20?r3R}Z7oai2o)K2}>SNLpv z<=F%AK3;%%xPUC=%FFQq{>K^m>6zvKJSXdQJ>Ne5kNd^`jg1W;@%7?-W0aiZgBhnC z_t^->;a!5bfBvS>EB(%ze8}3|m_vP+;||C1IxdX=jhR1+-|3+9Yy`*TpG_fmo}S^N zx4j3r?k&4cS^S0n^~W4bu9ud7*STA(HHPkvPSNG)oQI34-lfEP`xw)Br9dgt+<7&=4qkaFI zkqr+g{FaCBfAoRuryO6Y{=I!=p1Vf^-y8|F=ZVK)oOR5W=YzvV*WeILg+tc8bNm%H zO`I5b0e4^#43NW-TU>EXIT$2~1t?!!08WKfa=53xpZ}HLobM^&fBXnz;je!1tKxs> zQth)Jw2AL=zk7HjyC7VP|BX?ZxIf;9`#7QZ{bAhB|KtSomcRWz-vPW?zh5x=H{<>{ zF@WCl!vFF9ZSJ0gBgw`1vLndMxL>0tlacw;Kk_zza&tk?;`L%5#%DgwnH2w%hqCw| zCz%tuq&~Se$l~ob*_yZJ&OTWDug-n0>4~{!^U(=9kgl*3>5g?_Eb^WI^Z#2D^_A}P zvGtP;OXtbQ7__Y(xq6z%1(&2K7D0-s;{dsH_xs(SY?8NOpJ&NZA94TW?9r#} z05Jd@5Vzw&9CyqAu0OB=hF!x3sLnNyuTRhI$CESuiTlYiJ#yVxi*Mk>;!bob-@m-M zG{@=Xt|P8JHy?ah_mrm_j`6xVrR(Om)O@D{Yy>v4cmVqX=M^g=d-{dfTQAzsM{9!a zX8RhOw#g)0PFXtN`!{S>^Bw;yYt2Z;-}!oY10_%-(17v+%@+a zhp{Cq`zFS}(j{7qa%TDssvWNQw(ptC$+xafr0%_0Bplo)_qtI z)`l6by9P7D6F6Q>0N%vuV*Gp;d=Hy&zV`?H_K4#hw;aPdWY1Iaxy1$X3pQR zf5_6YIWl+IHaq|0%4zpp-wAY&UR6(XQay6|NDeF3bvx?C{pO7Arkpu1_GPZ|z4_nm zfOJ644v>sX9mNCEFXP$A*!r*zBzj36IMvwbxVd8=`%ac_iSM{a=gqzH){k%ciUU|H z;$+s6W45x~8k0+&ZCxa@)~xegevaLfyEl)A{T25=^~eBfBUu#wH64}2PY={Ww^mQ-Kxtv<0Ij3HcBe|{So@a6OC8gqD`59GRQ z5<5ZpX*&!%f^66mWcpB=ovqk^emZ-^ap&Rz-U~1u$+%&;aqo7(0ovVlP2cjb>5ZgqHUm9m&osxzOLwzv>45L` ztsiA^zqNz&<9El_(!PFLYo51Gtb<+d`jgDclZl*MUAMO7D{h8a$B0!LT8$P!Ft-U%b%_o+QlzBu2_H-EQWo$uaQ@S7ChkpcXUA140|{%0%f zaewvVf3h%keR;~Zdw#}0$DQ?iiulA_-0}_{+~0r1h31=YOdh*jly%+xbkRIGPFKyP z`B}g3_r({BzgE1OF1xS1^-wZ@>M72j9gq#+Ubj^Q4RlZ>l)Z14Et zbmL^#7#plF*4sVfj4$NIs6Au$9fE85O6{-Yo5%l?uSX0(ZXEDFn+C5LpKFfsfihCp z<$vH0{@jBYf;O@P*aoYguR)XQ!<#!@Fc;*^UP(u$%`?U<_r53oCs$nGypstXn*2Df zyU)&3pL(QpQvJ7cV8)Igox2A!c037xU=TclBd)>k@JkM}I^X#p zm&gBb@MpgNyA$_eA&le$g?>tO*jQ`_z81EP-Nbcv? z%lUntr33c+jZM4wDn5xr*F~-u<<#T;(y~~4;Ztu#s8;maotad z|6O}+xJ|Bf0cV>t+)uXbGyF&|rvE>9oh&7Cjq8&K8PEas;Bd)&nP=Qg2i0r7ad@$K zb7TJLg!YtqT1IP+Ae}YmyB**;aUpp+BPLV~X|^%i@m&1R{}&UJ+wa2v>erWjj*9~s zGoAPDpEY2tWEbDdy%*5Bk^7EEIrXxK#H*|W_RF5n_glxFg}zJ1CUs7RWJQkTbK?2m z9JD_pJrdX@kpCKY!aUe5hZ%4bZpd*c%z<;#jF%7mb_|a^2V0cgaqE`<-Gg;-3-;On zoE$JPanJd~Fw%ZN9Bi)v25KYR*H`tyWgL{PqW{i!9Cr=3hvhI_-PtwI@daGBhoMcJ z;~BhfFCOR5TpiY=PYd!2NjAwVm&G|6hNe?(06gpZAz8 zWggOpxRK1vS+V~a^BCjD>-qjT(sj?U8;p-WNsi5-dlK%F=&W<~(?2Oa$gj0`|4<5R zFCZOHcgT|dC{H(VD4p=ltZR;4qqFL!1Ip6_?W?bKA!panEqdX%GmXzYOXSf1#<=DG z){QmiJsLJZb^!lB-e(JVC*QXOYz6()Z)=i{OU5Qy1L9S#&AqKL9@m!sJoi4!L#ds! zBY`7P)XN(CK886IU zxOhL;m&;{di+l8CzTY=|avYT39}l<|Z@2%SJ>Xp8+dp{E|7H(>-NRlehENP()+-h; zp4ZRSxBI@n1n_Vd{_+VUF$_5t|zYy!HH4d8k4D7;Uv>7YJX3-r0M z%jxuA{U^UafBS;&=l|0y>&ZINHhH#Y*Z|g!`slFtWcAHh^^HvQMVrY+45Q>4owp|F zKN%RWvF$QC$43H30^ckNtpDe=a1Xb`3fKVOV8)(cO!&grm*AA&7xX(J@K1UB_J8KP z|J@ya!7+Q7@juSy%fm7Ms|*hQ<=_056C1q?fdBC0Q~b{#^xhNf)5mZa2E%4!=p8;d z2Ls`?dvTQUDUXNZ7W@$pJpRsa{f<1Y$G!M}`kDie`FN6h@Y!+vpU)oum*e%~zjFLo z41nE(C;s%$e*Y2wYqz@bMeiZJ9*te^-;wLi|9pF6!uRd{yN37q$KnGxthp%1R~^$e zW#q2KcjgT5(K~Ij<=7GXH$I7Rg0_q^Z}Vulido zz;)|@t)K6|?EcrIIj1K_0!IQbBLP?df8dE@yaFd+hU2h=4;0S04tK(yeq&HQeAlq+ zFZ}wyn8*BgHUT>z{?GsC58;2|)Oz`@A=U|lAALsZ$KX5-@mb+fs`MzU$F#vp!e@JF* z0JZ?GnEL`_{~+I=%}^b#>4UMqjK)0QsySh!<%`RE_urW8f8_g{V{=N5R^JL54SGRKP06NuLpi|a@ay?6* z`0(sseUZ{*dHS8r>)aY313D>g(7M6-#r_@BfBj?^uqoJ@Y?NYd*+tf^K3cmSTOa)X zr7vp@?9w^MM*>Fz-*gEqT!0zH2w^TP2}j^yK81U*Q5+J^!9(wOImSu1^vyR6ctF*6IV?#rfJW&iJ7E z(}-mYyqWyqIexhKv14^f_{6wzJ07vekv%Xu|H|L_@XEEvfg2>eD87Iv$;o>HcY6R= z-(O#~!^SY4`uJLM{E3sz)8y+B3ozGg8a}_+fPC)rjCTQ*&89O4&dcc-p2KZy3NpuG z5}9WMxKB6m@#22Ey#AJ-yW%~?{NsMH0`;rQoM&S=c8z?++vyPgpEl!Y!@L$BpnslA z2j~=CtzPrG>$g}JpP&Cv*B$fwJ?~j-rgc*c0ROW+$(BvP)-?vt>6@|ZvvsO(`a|cl z0bI8p*ze@C+qTK+^nvc*f6xA-6c<9&Cm+@DL8+f8}}?0RG^(xIUl% zPkj4tPh887VJnFL?|3K<5dXtWSO-V7$G5@(a8EyBzrOI%^a1zpKELa*F`p+tU430s z7j9}F06$~{Xk+<;ODBqv;9h(VukpV+x;Mu@?#Iv0^?i>A-AE*Cs zuR(oR?%(}?$NKpCGhH^u+#8}WZ*HUDe`+#lcHazEL+ho|Laj=Sv7kgM|M z(>&3KWe?rI7t#Bz%9&Sr3D;_$4ArF{>e6TJx|R;y+5mJ-ed$;>fbyQjwQ~KnztMhw zypQ{{eO)6TW!1a$|9+f~+LOTh#=!=$2E_xM7XzT*+Q<8@u>-6P<@ND$xx7NXd3~CE zdUPc4O_9L*9hEoJ_Ycp)j{JWZ3>V=D|33Ut4xYj$xFd;YDt~*v9KRDKRoUDK0J8pr$xImq9oaNZF z4}W8J?H#~s^(h-?xJGX3#m)0QfvcacO=IA@&wIH4`hCA#902#XAK=}G_Ve@jpIuKe>~)XXp}{%H6|>$~_$Gde6W!=1N`euXp@* ziL5w&^QpYV4&lq2Gd6?zwP~KrtCUS4SH?Sm{PA>)ez7mQg`6V#m^H zzv)vS*ah@H|6l+0lU-z;s9)atVf&J+_PjgOn$sWsa$TEJV<69DDrYBqZpB1)Ii2Gp zfg^!$vIJlPzkz=REBFksLLQF5c6j6cBNzlv>{-Gz{sjzzQ7{PB<81gP#sBeA2qa?7U_v)y9>#R2&J*#Yje0m!Eq0M3ved;_?}0A@_! zkALTe6YpDpxueBl_tR5zsD97U3&(qz zHU4F*(Z}jnPTT35IcxsthWVD$L-(B1EqWr+D>{yw>7L}8cVFbn(qWJxE}d1GRKTd&GllalMo8i&00*eCY&q{p&)IgL3j z9|;@@yaoxpnH&xuaJ~e`!Vh=_f5hzhJz|i!KYIbT^67Cf?7@9~_m11*e|y^S8;-#~ zelE=PJgjvO?(_fSf0!1Y!ZB@n9{x#e035HcuvtCuw73PlUY;9phVkt{)OC zmKIh%^t08a{@!IL8|k56^=6KX93-5NYs3KLcQ(M)x1aHV5%2fjKRdwt^6FP^^8F}x z=l>5|Kzu7U8Jaiz$ETG$Prl|V{+Ht_b4=!OG@0&PmF<;2uo2i{ z%Fu~cQFfa))K|NXaizA%jvi>!e9(dP!}IRTi!0%O=k$&ZfbX*d{N^9-75@=~pwIPP zd+b?yuYJ#1JJu3?V*}%V&)9>&_nvXDbtBhDdvxvhd!Fv^@d#^E|Fo^G)~|l4TkaWS z6RSyHCqEK668PpyV8yr>hQbKA5qHYtOMVWF5zmA};Sa1)4*$ER{KV$LUlYd$|G_la zhQr`fd!WjNi{c6R176$z#~ZLJyk?W&b{MBE_6PjaraJI)eC^nthVg{;@ZEL&a}4|C z?t5N)^7zX!4pHago?S=oe;XLKW}iI7)%DIGJIMbBu#XSN$pEjj1+oL?{c9`$@8f?y zW8A;L1K=8);x*y8cgtpfhJQ_F)At;6%dQgh$5*(YtjIS`R@OD+ixbVMvOD)L$*=!y z;U2wFUYW)Bt3= zId`9qsbAmdzi(QNnLhdL9^cBcSA6SXEzQ`#&;@O?pUrLjuh013J+_Fp)RW#@FV>B= ztqFFBvD0y5)}Qp)IIIel1T!U5ovV31T923WcOYjK)i;IeJ!!no%8{Ok8*%yG1Fc+Tc2mFF_l4rE1&)S5; z%LiOBe`Wbg@sc|7@AhNdqfhWqAA7e7UaLcY;)7iu@ z&j!e!-+g>`fa^G3EZB3MyVi01|JW|sd-?f}cmF^C96yWY@aJ(+iCm@ZEXT@_WgLAg zN3j*0st)xl`<%S#jJB0iH#TJSkZd+M+l5;2YI0#qpGhD&Fa0lI7)fRt8o=vhi zWBG`DKVx8<7{mS!Kz4w7;XZta*ZQVy*o+6@B@WRibw7;no6YM!|G;VE)kk%#e(bY7 z{y*^GZtp|J@00U~&zt`ruPaw9!0~OW+#UaqG43tB)G<3t3>%NfyU9*2;n3X%aLn&# zKhc2_`R(sr7N1hyyx_a$WO3OV_4?hW^{t=#%F|1Fhj-0SbLP79>;UJE)j#9+gX{es zCLORI+!q6&N9w@g?A18ex^PV#fZk;@8aIyr_OJZT)OUKqzNPoB+5e*JI9|KjGq<}P z;8=aur}d=_z0cmp>DGqzpdV~&aR9nV*Of1ki?a0n@%xf5r9G$JBY`7{8Ktzei32Vr2iDDDj}UFR>s zT7DPIhiUMwZw(#ee%JHs^kZV^7z0jXn|R)R_#XG~dDpdtGwcJvT*nf*#5Yg9XWoSh?>z`u%4%aKD9MOxo9fHUhmW z#p86I{K#AEL7(uy_2`~HXrI0A{#*LAc2G?p%xjE{DbNRbRv& z;F~_V27|L;9QWXI?cg!VIE+;}*uT%*<>LLj z@jrpb_;6iZa$8QEUfp5ir!Znh) zcaCf5L;gQqA#Y>Af69paKP6wk<4bPUscdoheRO!8uGF46(}sH4r|zjI9ne>)^IZ>= z!})ZF9?>0r=I=}WRtEb3&(g#AKO2A^YSXjx9f*zh*}L>yZv5S+w{(@f$WGp|@u*8o z!WyGr#>M{7wqwcK!27Q2oBkLNohN@|_PqY7W97Rf&+(DKk-#@c0xR|p2jYKN%6|#( zU`pJN>){8ifh{-}zQ7i~Km39*@JfAg0Dg2GpW=VmXMbOg`{AH>0pzfeF9;7|y}lJ| z)h0hj>=V8@hGV#%?*;qx1%8Kf&SCM+_t^k)W##xnIpd#utAji6jZ zn|nFgl8bwC@-)}Q{9V7bnc^sV>?(@ItAWqJX)(1MDZp+hs`p*s)_u}*8c>OSz^sd}o zyRVOu_Sr|)1lw5q)}Z!Ftr27DIb*Y)>G_i3%V^DM^+@1I;N>L1cZ3T#oKFK6a1?CK zf5`vG_k1h(0^8soK7>JV1h(Kj$9z5b8*ag29N<2Vm{>QsUhEeZN{*#)(KGs?Kibm| z`w!X;bM;aC%CQIFVDBixHTaud6aK+_9H76B;N(U;{MqHo*~bd_W#o%`axD?VC<53 z2%T|_oYM=rxi)ss&^xkvyb@O2UwQRN_)l4S#*UE8mpM?6cFA9xzB@1d= z+0RpkV@!?9n8?7o)9+mmtzT_Q`X=cMo0ttCPN%=*yDZ;7%*zIF&UWy;vFR^t#{u#k_Z{OH*X8=DZQOxF z;xprO?4Hzh<<*Z1^k3R-fX7;M|4jftpDlpb^-aR{?E%a-2~&&_8v!hU>MfzH|<6niKWcM(_N& z-rOhS_+Oqb$c;t)_*7g7-{XFICE;{Bm7T0V)`Rtu9iWV)yuPR}uAg?#&~rN8F}?S@ z4{QN*kN@?>*yDU_h>dkGuX}r`{RnH9-s`WvIF^fB=%0R)1szwn`t)C%9HP-ZvsYqpAVc35I4zjd^SL~f%rf+fakQi zVlar$mq1SF#?AMIWjcw>zhw%F(~x%NL)rp4``e z{EqYEeLBJ}&K?pMV+-g%`y%eg)7F)1>RM~?@eF4Vn-gm$J3!pbv2{aE`c4Mwl|QYY zkLy2Ijs%Vbz8(_De<}746X0&#FJ6dG;UCV06R>At%wrj>|F^z;U>E~`ag!J$9G+Y? zc+`7+a4*btZ^ksQ{v*H0HEp%m(05I+RDWQb`{7vJYfLzw%>aA#+c_+U({N6^c))me zKBzx9z%hRC3@pa~jUV>vpX8qFj&YFw=$G-`#sD7LOJ97^JB$2ysTcsCKK{=(xaI%s z0{y?`&c`$JX|Ld#<`!R(1^LBYw|oDS>&9MC{7hbtd$``OuO4NKv5>bq@UXU;N5`)3 z<;=IfkyD9mOU-%t&i}?mf9M-dFNS1}wNblqGF`{9)(kzBw?zG zaWMd~G2@|M?t6a8X}qg5Y}v>1y1(+h@BQLkS?gJ!Bx4WPoIb?+@kIFUIsNgh z6wi2GQqJ?P%k|4MI19$Rme2TDa%&8@U&8l%e0`X{{)i9E`2Wb`tod%hHU6((FU|jb z*U)&4)tGztj||9&e3Bi#FwbOlxrpQ3{}uOF)^l{k+$2}^X`}nfmQ{(y70aI3Hxj8 z0pk(-XCEuW=5(#L_32(p?><`Zg{)YC^=vG~1lR+~WUcA52k>r*o)Sj_Uk?dfCg!eh zfAB19fe-Pe9F`SNv=90rBX5sDyR)f2Zovh@p zu?vc)EIqmH&-#Yn+~7-kgTs?)`wQ+%*_*Kw{M2^v`8Nmxul?E}ZZ24W9Si zBY$7NT*LLwrMtL*{~LULZ(#Ax$IZ`I^%Tz24}P-olL;B%VB}eN#;Yvx zX6oUvFZ8qbROm16HwL+L{iNgkd-h#poH{b}*fremJpk91jGmIyW68by%8G|rKkR$! zU0=znc-p(`I3_`{pz)SD_<^MZ}ed41q z9R|Tg$1pPP$JzN(Yz26wfABwChsSVRoh9d8Q=b2{Y?=FS06Yi(;{-VzSBJ7aqi^~e zk2&|OeoCIJjDE%U+I2mf$368g`973uzP>$x_+S5V{`CI`-z&4*1pI&PKdkAc&es3^ zHFmNgulV1OR$Vm@rP#j*GOUEeX>`~Jlf$jf}FTfK3==he%;bF55lH7A~FKJc`p zY;(TzKlze*_Z;K=lKXVSoXWMOE_E7LHnTl2em32vyZAOc*8Cg8d$7lHj2{Nb<40KV z)%JJcH{9gwvH@Uw+zU%_Los3dzpxYc!&Lr19L4{uZ*Qhgg-75c4pf(VN_$MeJ-DkJ zybkk~h4rpE4%guzSxBzOY3|1_>T<4+)$JZ^mpqd^9Zwr)V7z7rEI*o-TPl` zfMWe}zW(n2;~_SIv^e6vo|iki=YR6$GaEPgkQ2_vqvpMNd)(LM<15Q{P}ba#7ul*$ z-R_$=`&PxSwWF--%4+j2UFGgs^G0TsRo)!eXR@7qKjJR(-S<~U*;`%FAM@>V1D0?-&NcMEC>K`Tww!@8sC~|Kk6+ zKpA-I-6^>5S{Tk}+Y=7x9xRvKcTGRkW!%me_T9fP=2@68b&Oj)=UhL%V?}fQBG8M40P|IP28 z?^}%X^hR0z@I0Nt`*c-K2I}TVvsdYed-|!5-eJ*q&(Zs0L+WFj(C2h|y}!3h>8m~N z`(OQS&%*In+sdi!NZ?4|bxGjO^iA;pTJN8J%@=nJ-|!Z^gT?S07CO%Nhne0@;8(E$ z^c9xsukvt{?a=SLxQ;jAcPYGv1EU*8O0I&kC=TAz<4I#4-Ufr&U;VLIPPnB$)oi+7HWRSgs zd)WcI@4xRYT`tQ$Bro$rPV`~PXMJzF*F{d`s=Rj(`__*9C3VF8GtV9vxp(W-MF-5e z)N^vWBHhIRhV7L;_5OuAmGvy0q@%`7CmlDpIMsVAxStJ+|HZQQJvL)epRp7}Fz!{y z=b6vGLuJEi`|JUH9=V@Zjs!lp1oqg!wGNv;S0DO)09XhIVP4-J=nFs3J@|uLvjJeJ zcNAbg%nfVdILwq>cOUn_?=ahWDcpwLz26sBYukNw`VAt!qH=NBT^)l%T$l6-_q4x@ zi}9Ya>;lK|-PrbiYsdX5|M5=tL;0^5fIR@?i0>!=4=&O!9>V|bulgU>@DgX_XWTpg zn_pv<$bx^YjB!8g&a9NnpkJAMZbZzW%_r^}9aa`-k25J?w#raF9QZFZfq5G@l8M zhqt&IU+mvW!RPQAU+~@KFxx#zTXNX1FR)*kFkHR3A-~@}=W^{!_=i7dPeLEnhjVa( zTzUM5lh|C^)SkYpUm5k>a-qJc3;(lW^xJs)=8rw#9REB1)G^}s)eHSL9{cv$KJmXX zxNbh@++XyKR64$0hHI({gZ^}mJ4R2#`!u3a*Y``tHh<;|l$WD~fi4R)SfJ=!xr zyPhO_@|KiyO#C)@HIf`H{ep zz>&b$PXdc`@jm}Ya=dZS z9Uq7{=M%;caYy{`+_9uBHh@&!lV7gfzw^rd{H@=B#TnTpp4X52GLA-EX6*Od-^cOB z({KLF@r<~CHp2dXWP3--s>?jo z-Y)w%zdRW?Z`pHVJEdX)o*_?3o#b2|_d7RV`k|lpp5lGuj{l9LvEqFCOP}L@ec!o% zzqe%a5;J((JQ6q(I1>2u5?C1bX2$--0N@|~=S#z3_$m&-=ZBpz)HPfZ_sd}~{D!ss zMwkr0^W$#$-}5kB8Jz1JH^6Rn#9NL#k2B(sa{ZhXPt^eracpV~g)EP8+{1 zGx$MLzI}k5$N84|`1zjmJAe`YckZ}%|Cek&{hYn41^YPUDi&g|pPY;hkCI7qv$(w4 z?&JPsW)7SGO2~`-KIrVhobD^gTO3JI$#+k~T^9a5Joh*?2>8%pZgAJAUJI{0ztQwP8D6@QfI+XVi%cQHu{Ut=8!DN#x?fNK1Q+bJ??MrdgpKP{Vt6aFA_s2Mr01n6%Hpu?U>`{#{4y3 zj!Tto&g@H=TPa;|kNov7{?GO>w>Z1`+qpk`0QdjwU;E*m9`tNBE#8;tyt~=WpRq{NftF3oeJ>@;C@? z!*tie`u2Z4n|@}AXK+=i=g&BFHknY&!r1M6FPef7Mt>D$`> zU1go)`~5or=lW?+K%2_k*Zi_a-hnhOa=`y&%C6C0+)sv$FMqzWc#|wVfBWuP@1{5B z;tT3Ec8Q&#es%!)lR4QmKk>di?)N;I@8vzCjchXa(m%)9boz|5wHe>boqLv!{^x)1 zf1Em`J$0}@@jd z;T&a@<@+mV{Eu~T{U1QGoOKR+iG1k>ZuJbVXZx8Ga!Q`AtAEb%I97hz3&Vz>C(_)z zxz?#%@r0hG3)zm!dPW^_{_NM#CFlBp`?EpWMEG7`alg5BEYWjy>HqoO?(wXjD@OuH z0$+a#TrSHW=GWnNxCkF%rDJ=il4JM_XMf>u{o|QWEFRb!*T&uOIiDKui2K9#d^E>* zSU<2IUua(vqxC$lzyZqPkex^H4~)m%@s@V*oIb@J+S8}!c+Io?MfEv0zK3PU{{_1K z?k`>w`}bXd-v^j`0wd1wx-?|*zwwZlK0C&di>tr*!uJYfMNZ0)BOA}Svwa%V`nF-k z6qHvNd9oKgXI`@b@O1M#ZGdg=%%S`C;(HfgoAivHnEzcT9J@AcfvbLaUedmPt4n)0 zUrrZ(?YI88jUzmV1C&!| z&){~)I0Ey9~;2= zvKL;HrmX*YXdLXBWN$wBxQpKxpPMhdiN}|G*gm&^>wSMRBy;t6#{8?BUv95~yvbi8 zck`-!*X5pd?0J3gzMb##{N}Cek}{q%uh}N%PpXVI>#KH@layhT{_vmv>pT5>j{E7j zd)0M2;&Xl^a3pXf@XeFJddG{e4P~>)A@h&pZsTc{uf`1?+k~-c32GKVKgql zkN6eG@T1{-31&O?EG+h0ZIU+G0{k*{$Mtvtm*66~`nAK?#6gbLB7 zPO~5Izkcd_Hb7;yqwm_0ybtJ|HTI4ERql1<>o*u1zy7k>$b~#5yl;%;YTVABlFhfi z^{shbU6Qd%>^?G0_U1w|2ihSox%o23o^dR>u5J3{|6I~D<(1JN?W7-a&)8Ei=Tle4 zJgP(6jm4aK4*wgEIn8dp_4~E!cdW&k)Ukel_jSzN>BW)2k-(9_%SvE<_s0gn_1OS$ z6PChjISlqK04#;uFc^=(WVi~`af1J`Dn849#;+1i*c0qmUcLVRp%}jUCs&NJI6z(6 zsV&^=zU%z+xJTQ#>D&MD-<iH);odv zY_H;F=j&nX`o!+hXWVZb#cariJ%)eDWsmz`E@C0Kf6Mn5-ys+Edhg@sf8{r)?3-iP z$;|r@x3K{I5Rbv#+LXwUu1Mx_pWB`L>4-XAV*~h~4C=~`(7t3$bj{fZl=93PSh5duu5ufuTfg^zwI*5VL+9bdv#n4W(L zx8XJZU<>U057%M592dayxFO%#bCPm$*OkL+Z^!#{qWoOxAnc`Ih#cv@va=->VI-^Oisp%FO6Z@ zY!7?AxN&_Wp)U2v`PiOSpXbO#eNuB!-g^P=k*oPI7h*AFT>qM5`Og1zr)&0HyodSc zzx#K8{8NAFH>N(Qhd#`{jQZ%HKIx~qrlaf&e;X}kK4qlafD~9$GzM40L-}Ys{haZ+^ zYtWp=F}ZMz0pB~;SK}dHvK6}_7uTQe_bP9$%_TY7>tR>nZL(6=&i~H$L|)AYxv?AA zfZAsxumzNFj+~pPsT)JS^hI)x`#meM0lxh!zcY2p^Nrb992;|bY0UPL=&kQrTz`Jd zPfOxlJrXz)I1>0~Nnq^*umNBvKMIb*R+t*T_RSr9hwHF9PKVXvwGulZY@hf(Y=d(A z?^(HPj-_G+_y%U<8t>i5E6(wVlnsCnrcXP#@0Wk@+mmzfi~7Wf<<@O(WlqbcSDr;FE{4}Hbma=d8XB({;5js9OQkK_Kk@85jLaX%S)j-O4g zJKvMbe(u;@nICiFIr86Q0s8A2?vMX*K7Gk%bnciQ{mJkA>deIe*a7wgJa0a-1GLpX zNBY{gCHk;zfR~x0)9R7Hk-(9_YnMR3_m1;nCr*H+l4JPVJNIxNKS;0|PUBEH+z!Vp zBhTk|T&w{8;{)Y!1YC#Z56fJ6`2VR9pKC_~M*>FzM*_P9VCC|c@V?)D<@Xg6hqX8whT~@V z42SU~jEBcK7oXx1dE8&_dF7Rr;5=^dytZ)|ZjromCl&X{`T7;VO#Z*_)5Ch#{T7UN z)vX==D=v7R2iE%o`d~cx4#(qA?cpBdW`{V|zr`!N++OCG&8Bbq-uM3TAv?gh*)?SL z-1xKmJa3LXV-CeqJnK1i-tv8R7@6<JICef?7zcSe% z`eBaTX9xK1!+G%lbCV6=8GV0E_S(y6$!YaS;7H&|;N234=W!q2U!1Z2M=OlK!{{pp z<9_}bY*!xE!h1YY*?1q$ORyR@!+c!8PKZ@Q-pZ||brq6$kFFTj!KESwE9XLS@ zpf+$$G3@ny+f#CQGwZ^m`e+Qerlc;sqzyL5>*AE#d3^XkfOZ+I zcmB^cXUnv9OF54 z{?dQ@e@wdqmuXvjt}lD$@u>SPBxTtO`T6?f7#HEf(&HLl?uvLf&cplW0ta@CKizw7 z-2KkKXZZhevg-GA&5h@q8*-T3e|`6|c_DlEBxSP!9J|-K{^^T4*&A#CbEI7MA{~=F zV}C}U@V|FbvB4DQD>;Xiy<$L`lV#}o7V;Pv+ZUAs;C zhU4=T>e+T_Fjk)QhRT_5loy97r*H7o6dt4Ck^{Xg}oSKH4$`&50O>l$vhX2+V>6L|Mma&G!JY9&q(6&eotRL&7-*|dp^Ip{Hy=u_vi2N zm>2dyb7(%zO{w{Ey`-%B?&+U4_I{)@*#PEEdB5kwZp`&afl)!yVJ}ia7uouR{T|5AT<8*$RJpleS-(ML#+Be&{H>{V#es$uO zJMJEw5I4ByUcNuRh+pCoW%p})J=zch@E(BQ1i}-}@tU@A&eM`#zhgW(Z*Y&X7)P=7 z=bwAJwoiZc{(mmSqu%-JfAu`q-}M{#>s<*pk$EK_zx5{>H`|BYCGx=kz6mg=j+3{0 z=Ayal8F_QG&l$VHv-(C~{LVyn3OU;kh~KB5KjcsM*ksyv&zwwKVO-O9Ng2<}wWt2e zMU3P89SIx>90?o=ypIHyZ@m7eOxPax^T#B73Y)`X*CuCP;{$NoJNVN+xbE}wPuU3K z%&_^EKX%^0FVpWI_^w`Q=a7zX^ZJnA&j0s6i|i>IgE%u=Mf>`4E01;U&9Yxcd>OB_ zUxB0gKH{loZ|nN>=j-?E`;DgcO~Uo!ow|?1AGj4L_{wdcn z7k-1!zW?pqb#BgP*{j`v|J7rjW|?u{JewbFkS*WdZ}qn~!*4fFzVF+=^`}d8j_o=9 z{?Q*cOS&n?|8!B^#{bmV&$T0gBY`7EE# z>4y{ZVQ?7l9d1~k4S-AWbG#q7;}cxL$Mk-e{JjT(_i?Ik>~Ozv$k*QT)6agctNNgS{vVNd0R10j_Eqtf=laqA_{FvP z{&>^eu?O~fnKr+5lJkVDkT{2mfbNY0F-PerR8E zjgAxxFg~#x-y^7-p3S)bs4Lztr=!JoRxIQ>37qRk0!IQz0!IRGlK{@ck$3od#ry1m z_@6D1pVs?zo`c1(9Hzr|IPVyTO2q&s$Ber1cJJ`_-XGrBd0&~y@1s1v!7>82bR?0Bg_xX%6iF9^+UE_nSvC z5}eCk5;K|d8yruDc-$V(U-4DQGK`mo+b_``GW-|sKPk^1!f-uIhnKbQmaXl~4l z_y{|Ktg^G32XZB2ypH$H6}j{I*?!_bu9w(k_FLEj=1V=|I*#>?{Q3U)+dR-C`r%r0 zBZiQTMwjesm@oZPhj|o#D$z&xmTmO0Qa;Ze2^ZKcV*x`zHtuI;XT~WM~vUg<09vha&jDlm+%lfgAa;_T+3&j zHpSp7_3OL-OnYVYjUA#dV%_*;A8*I~uFm9}@$G_hea6N3mrdZej`PPqE%)5N>!)4Z zuOI9YdlUD4t@qF6EB20a$$oP2u#0>nNlt9BY%TJed_UyM7bo+$f9~%OTPw~lUXa~o zUhZtUYaHPz-#`A>AG)PK_94V;l=prBnX?Vb>63fej`B5!PtW6Xk~r6o1darb1dasW zErB==N5ES-?!-a%$8mrB&-WAy5YvU@{SSG21@>^o;qkxyU2$M_i8$=3}#qoa;Y%$J^p7WGR*}c5-K1 zjqC00Hy_z=WNvQQ2kOaYQ?Gf(?_xiAAK$ab~E9HxpyRRByc2fB=Bwt^c#7;f#Y++VY%Fz-&_gc9@vYI@IBtgMSC2;HJoan8OHPL_;iwY z$($DhzzOOT1L*z#-3G`mkh_m(@Dc8@Cyk$`Z#p;!|BF@gPxDtjBW9ug`5vHe0SCX> zGuDsZ=X=|X;#~a5&lh_)cHC=>IN5I|Df2EL{B3PKfA7tYeY2+xKCd>#A%5$B`QNA9 z^$Guz;d6ED@BNt%T+83)*P9de5x&O%^|K6}hDn^62;Kg=ILU!1@@qH(_GBsPKf0rLHy8}GS(Byc2fByc3~sU)!ePcYvf zCg=alivfuL!)ft&J1>{Zv-~NR!G^%`co_HkE&%Tq2Vf7pje|daCf-b2 zgWbgjA!BWmvt#jp>1}P>zcGHiYaaOi=0WTq*Sd$N^VxB~_xspZ_VUS+yj>@IdjjO_ zzIXqd6Z2%w_IYD>=^I-Rw|jpi`>$9K{%4!1k36#_<#E5`;sNSAzW>K-)Oqqq;7H&| z;A16lnOwR4x0)D!{LdDE*Z4@R9G3G{eV2}J;J%o0?*Om?JP-e2Iv;WR_*Wju9*9?P z4?dFP96ZEF#Z4ves^gKncL9dK>UkW;=fyMnf&;ayPq_W<@9({tc8>S#**tRp@5nKq zpIxxN2YlPR_a83p@W5f z8vw`i@x|iFk$uIk%H|?x$Ls_5*a7Cm^;_RRxswt8F76-ilf8Me4?#!d=E%6>{c_K{ zPS$T9>+@1Lca8*(1darb1ilIh_#K&l>%krX{+Dn+j>1dg0I(hJ^8NVy_+P?D_5)x% z-xe3e`T3CLcnQz&H{*Z&BLa3_`ov z0Bj9*2>lR?$bQV@(5;zh#68KOF@cChJ?*TZMoQK!!033ib z*#P*S&)*&Z9+2RA9Nf16cqC3K$47m8<{F+CPl*4$4~V1kTXBnf#T0Oz_Sg-|Y7-ag zm$59ad`=SUHx6(<4rb@zUp^_`=a+ut`<4F7QjKAL=OuYd3fZjtggNw-uE6EW|N2k;Coz%A9103?|R>m z{iU3kKmL`o0mMIi^H0|8`Q!ak{4Jh8-?c#r{jqCGwvB|5euN)wXv)CbwVX z4{?9*g|Z99Rppk{-(A$_l?vH1B_dnjZ?~jLY5U!fse~m|rXXF3g z11#PwJ`n%Qjpbd^5|dX>{2wRtO&#NC{wo{d?Qw*6wXp81uY?1&fg9t&_t|G?Zy?{F zy~F@Ra+4sbsCvjuQ^{=et+ll`*${^s1ii}rozZ_d4kX-?Px zx=Q{>sJQ9_r9P!9>Z%m4%gwDehWYxTnwOi zg#O`~_mSa>L%*4EYI^|e0AuX`>%LDN&y~50{f}?{*j4K9+LHHkPu^cI_TO(XkTpNw znArgB`}6psln6a4a-az{-fWY>xOpJJ0u^=3igTHM>wb zdQ!so5N*^ZjtX z;}UMbS2!3C;TN3Fug5*TXO8dl_47IL{m%Juf86FC{zUwM*)?I*N6OZ{UA+j`#kJ)4k#(aegwx{p2N| zY0N?V@4XB1pEj5G{l>kSlpV+H3G$V2zc$8}Ofm z3;PbBIKYSO0X&rGdUpV47Z-SV|3l8+OgoBi{PEnkesd4sk~N>3Y}o*0OK$Q1`w ziLvnS$!PcMvz_+5V=|q`SKpsqp?>djnA_t1_WsQ=IeQ1hdw*g*Y(#b;?k}e^{D0@- z2=DsN;X@>Q${q(~eI9}nOn9Ki=~F90Xw z0vsY%zjG0uD(!x&YdGjO_xx@LxF6@KfBp}m!HGCZd>lXVNpbG`?g8vl6!+)*8>4sM zKIVNj&#*!4i+?QdwSN%z7yHNmYyo2@hh!nH();*+kI8v4eR3`7SI2uk=Ym}}lDhRB zf0HNP7lSCyBgg&b*YYxV^`-u~HV<{Tdh90?o=90`0{39R1)hTZ)A z{5bsIH9jqlh5y+BxF7$p1H=a0!`rx|_`e)~-*JuD^ObX4>t1=+@KiPcd!YK%-TQEJ z4`A>=n*?X!oDbgvSdwkuT?}J=C-7ks_dCDZ|Cnd*TUx)RjBAY%ZyRHrEB4WQ|1-8S ze1Go+c(&a_z-yI2{x3|&`LLWHE%i>I|D_AxaR5HTQMg~i4U+5P2e<^E z<0`y_Uz|(r2gv7p0fWQt?15~BYp#4Y0KQTm4&;A&=TO^xRa!!7ii{F?ye@6mG0!IQz0%@9+7XaXL@LT2hU#@;U zg%@h>gMiI_?(JAnQH$pG?Th9Qd9epW}bu^!J`W z+hOPYY^*!(AF|DsU|Wd&^W)q1$Nk#(y`Y5q{dS@_5S_sDbVQ;zYzMl-KKMBM>0J^! z_m2dQ1darb1U`)f#&5n3AHVkiVY(Ks>)VjCmn5@AH|ze%BHI<9+sky&d03 zu;SpsTE72!kKujCeaamP90?o=90|On1o{>b&%;U|)PClmh`tg4?z3c z#{Ya|{whEAC)5AD|6jkxBJJ<}_uZfUkjdTS_j>xD3FIm9{mGC_$&c(La&+JC|F91n zn-_^J*;D*@F%@-$~Rj z+|S={e@Hw)-}wIPyNA!ecXC$lk-(9_k-(9_my-be_Aa1!zjxtaJD(2k+ZS-%J~ba7 zm*oGK<9~dClW_&!!d18k@5uS@{CylH&kn#-?u%y^3y}AF!R!YK|EmjcX+yj~jGEtC z?ApDL`G)VyN$<-%{bu^%xZnP{-`FEZ{GY93+okTv)lOube>txF3CrA8G zzHz^K==XljF`KOz3jW9aY!GuR_U|_y#DwSo{$~fU57`dR9g{m<`7)9?&mIXJ2^ceE34Uyg%LmW*XV;J^J4$>$ z8S?+x1LQ<@xE-%&TagjYcTF-!xZgg$>&Y-1O5N-|{C)d-|M;IB;CCO*!T-(A%U>$A>!zTfZ9XRYmC5bt*{H1974;J)zpBituMdc z4$vHc7y!S{^Iq=RZ!G|y&$={x!Ksq9WmxRH0Q^ZD?mYnP=D%hK;E^PbjrVeP0k&b5 zB%YAHAa^YW;uj|3m%7v&|8WaH?+S}fm%qHn{@GQ{zq76Q+xp1np`E^CIGYRqX<`h- zKwV(}CyxBbD@n{c-_<*8xWGS^_^$Ya zV~a)R1P<>5Vim6OH+!c&n;?53hRN~E{J8qCulE3O)UiFDak>7#?6WbGM*05uPh0jC z=4U_ImgpsBBJR&Ni1++`y5T#*ad7V`lmbo8w(os9e0)0;9lnE3mUuTo?a6-}(Q&2Y>}QfiZC(gUuiF6R||> z8q=^1vySuE*#mNHlJLFv%<&7i@?Dp2YmMKTy@37A0bmxJ!?oCH4FGnj_int0w*SpU zT4}$e|K>HYUz`K4vD-Gg$hrx35nb2;xG%81#CIy-Uz=e}n?zrPp&pO2r7G3JW#!aLyjVLdsPi2>jiMlbGc48myqk;i`A z!ZBqXQ+_QQ|~vHy&} zF?KKXt*G0s^KJUSHEkIMMuAb__A79*p7HqaxnE)j*k^4ZZs0X`@&Cn&y(f+tSSE(; z7}ns@iUFMYr`V7Aas8D+t#%4T`?WIq@#bUyygJZWgY?-ZM%jIfJ@$2xUE`y z-;!;_R>50wcQzCL+s1o+H1Ci9i}`2sAZspv(|~QT(%E+VX+?+PDeL#y7${e40mu3O z#?d+eV`mKgEhFnVedobevL3xQi;F}O)1H=E@dWTKBMuAaa6u7(s-V4Kl;=cIL z=aXZBn1Glu?qW4g_}lULwRp0@|7-w0AO_$??*U*h-&^uM9=<=jKs*~GFdFNNPv_J7 zja4`w>pN%VXZ|gg@q_U%2F6CL#47IsVklpl|IZG&-M;Dm4I}(rcFWdw@7{T*L7x_{ zxBegbAKznrIUC@(O)nZ71K&raF?-2={1>A!f6w;t9Yy2B29f9}4x?S>0*p2GTl<(i;sAQU%mri{eSU)cED}r|8ed=|6hCg|JbZg^$-8``KW_;lJO?7W>D2jHewtj?F|raT~G!)&$}{`;Wa~oBb#E_n>a8zSs3XV9FT< zMuAb_)l}eQebb%K=lL(ri}~+)?+4dh0Goi1jTaJrhy%oaJjOKh0{D;FYYyPdr^l&_ z=_1oEGOyowh;b60@mtv&<`8-Z5LfZ(Hm(6M_pjajehd~jq2I;1fBkLlA8+e_tY3aU zzCT7w$M7Ee>BP=54(9*)^YoGMpPiY>?(5ypw=w7<)UvOSk{Mzu1re?4=+3sr|b?xQ*HRX`2mjF$SRj zeEaU6E_s4u=Cl&jr9eafojK_atEwKZPIsWf9)m`|$!u&5D1xA5U zU=(;h1$+zWwexjfV*gmc4iNvhjTQKh`TXvD$^I@M)-(`NbnXYWJ0 z#`}`%{k}~Xx}{BdwuHDpo!DU1%Jbdj zbJZv?3XB4yz@rN6-_YH^2h10=2Cy{%IKl=Hmp1pF?~VWF;PHfii7om6SSAJ#!*Ja? zb!?YnT>Q_c?cIRKor{&YhMm5TWBs2vwl!_og;in~kM`{5etECbJUng0DXfpwR@|j! zYb9wwujc>Lh$eW?_xFB3-It!*TtFJe{-x)3zH4ao+G}rH<3ShvZ+sdv{P!*ey8!=- z^~mwxx`AT<<^pa`#i@A|7zIXwQQ$=?us`EZ*5CZ`+{aik06g#;55$@AOAMg7u zchvX4yGJ8-5&nyvXgeQWVk6N3|4Yjz+BlwG^yr&O%Z@tJ?&3NDdMkte)@!UWJM;bN zBpD;|8toB}5Z^IxW89?d0Q*`O@*?lMDSH$c1xA5U;5I0*$9nM|>*etPOV|TgYu*@p zF`qra|Hl;Zf8UwGehi9Z`LKPX9@nf7Tz0@_3v@irVO{)ZC&W2?E4JNQL~9VN3ACSW zV7>iqP;zg>{@y?So1eg3?@Z81Td}&hN9>m$b>Z{V!`}juiv`f@N&bJ@vxCHA*m3;% z<^Y<1U<Zya)w6@1@rN6zRk2%;}#&;?&I~H^PC@>0)0;9mw z71*Ek``-gF-!C?dBiP}$d15{+hVf&~{o}7VfO9a!oHG9rJMwQa3eWiec;=gP@!fvh z_a32b{yhHUpx@0CC}YJFw)q0Fes+jBy10XOh)1Yjy-)Au%Q^bacmAc-7Hw+o-!|>o zGWx*x$Lz)at-pMG?8kb{r$fKfuYIm@{c(PTKG@HO!+!PQKf6ORcE(E_L2izq_x_w8 z|M~uX7xLw(HMNWaqrfOI3f#N`+qVF>_y6%8)3Llb050GO-iraq`Tx$tIK1)qY^@u| zA^v6YZT!MA>}Lby@7upPzwrJGOlPjoIuZeU0^OAGT8cZ$7~9w6QPWzx5Gp0lHg9$bZLt<7Ir} zKh606Yyoow+JpV^-&lL^&-~AAv88TyB&YUKU=$byUKIsS*7sid`dH9=fH;Dy_K7Fs zKOYkJ^DpsV!hh?}u_*rI6~2rAvjK3PADTal@s5jcV_(~NhkF=_cbLh)Wm|X$KpVu? z`xYQ(?Y{R-kJriaujvv0t-Uipg8giO*8b^NF#vr{tM>U#N537HT+_VB;{SHsZ~Ygy z!GGg)jQwke_=EME>=EOM_56PPH@3Fzqp>l(X%(mbQD77p1xA6Fqkwn4aU1`!ANTR3 zxd3qizN5MKwU&Hazs?8e=VBdupmk?h)EYqS!g%xh_>b@QVG%pPd;qTDKi}WEa&dy@ z1Mm(1u@nFK)A(;4JGQCU{@dZVo}9#exL2L zKi}WA{C@Uwl{rj}7)6c`0= zT!Hue)^lG2B! zy(fYB&4Z)`9n#Zv#r~BguD}Lp9zX6I7drLLKkeY#Xni=UqB=^8eMZtvAiC-kYbxiv6Fh{l{H#ce>>J(?`-jTIjR)EB!5B z{icOE5d8PsaW+x*kn3o|eo(IR@t+owal(H4*amDjHVB(;`TpB?o^ZcpjmOOWzmosy zr_-arC@>0a3Orl`fCa_>u@%$oB67=a-5j6j$KW$A0{$i{IKJ@%^pw6sPe1f9%iy*S?wip9jGxFba$Uubu+? zvwvSlj}Q2dtN3qCfPH*PYsr555B_NX7VlsF@QT6Xj95Gd{V)IPJC{$2Pb+PFz_W;1@mcy`PM&(jnF0ivZ-8WTUq$8|1>cU#!IqIBk_Oh|Jfk;zheLV z|FakXd%(V%wx4cl)TZ81U=$byUUda}_uD)$pRoD=;s9a**p6jFU; z>=ykv^1pt?aM{dv=~NHQuiC z&Vcd0S?yl+|9#W{QD77p1#Vh_eGNcs0Qvn`fnnwS&0Rdf8MZ+FKc0vaU=qGH-;MQ{ z-h1r%_wiqz4S<0wPOzPCAKzadJJq||bKtD{&2irp!}{(IKU`bzpEi7QdeNi5^Fx=C zewFCM1~|SWiTn0pf9J`w0hG%gVt1)G{u>9s*&^2cYZu$icYoM-5<9^7TKmV=yD9B% z`i`IaM}bjb6c`04aI!do|9FoZc#gOHMT|ACjV-t=nTN+4>~X&9_`7Qjz~=YkmGi`~ z^J9;`KbFP+V*cygvujH9eMuAaa6c`0=lLEe9hXedWY`~D1?l&J2gFpR+udVmmaK`)iSl7AE!#L&O z6c)xeIljetzdLUGNhwA;7xP+M$L6q4&K7VCi(l3{fcJjqcb>DKACCWG?$#w>FI{L6 zr}g8=|N2!<7yiC)0(cjIR%vq7i5+FXa@j)a#eN!Ohxsl3VE*5jvET6D_#6{kk7l>y z`$@Oyf5Wt86c`0YfmcTXe8&Ro=<$LtU&41jBvyH+&3A41m16v{AAhh2Z?Fl^@>TIF zhUM=&FTNdfbv!P)PPvZd<7xxusvCnHuMaPN1<4!`!}YpGsf|M&tJS^Q^P1Q3XB4y z!0l7u^whWC_82o z#1$|!*2X>cW3cz|dY9ovD(styX{E0?p9b2*KJmL_bgLiP0P^E@$K`ZLtL!EFvZ-9B zY<18=oy7p`v;NQ+u>p+7TGzSpzBL{A&mP$4OK!*CPkNE#HD!+iqrfOI3cQs9do0+y zVz_}1cp~u^aSU&))wk~$Z|*$2!fCvEod0jXa^!6v*>~JNGSa!qjkW5I|JaBB*pF-2 z{92_05*Yk(CV%3ia9Nj z!5+!B^Wq-nUF3g0?UDPKhkw|9WPjU^A6e-<_2Iv^;GR11(0SIhvt3>k*ZP~uu{6eO zi~i98|Fz4p+8*!r(C~|=Q}U%m(vsfo$I)|=#c)6hp{n6>-eV4k^hY)drp1q zj{AOBPya@NQD77p1)i<|7D#+U+|QT95xnplzHwg`RZ>x)NhPvZX6f?xAAK(hb?D})%W`AH~HP9 z%j-W^i~^&;C@>0KzXCf8_BDW*ge~|X_uIDh_vV(Z1HgU>udoIW`J;aG$B+DvWyc)H zFi80^+wYj^+>0!XwecTw^Y@#dXbxbXr@wBUP8MgiR~sa4Viz3wPbd4e|JVlZe_!)=vi4oKLQ~!- zFba$Uqrlx#03YxNGo)h-05>Eo!xssEFlsS-;~n-p$36_>v+~c6%x@d7T*qz@t8UIb zHsa}#o5$;7U%r1nd9euoZ8pL6kHE=dslKa^t%3FWQoFK&^wFAxIIf+?{_)4HYgE>| zKm6JCJ%!dUI`4QbEhS|s7xQbw@x1J__@A$j|B~^+{`~*z*Jnx`1xA5UU=+A(3iNm2 zF~S-#@#GTLunF)*d|3=2uHi6$KmIxgzc5?8I(9qXb_{f$@6$@lci!s5sE!|PfXcu= z+qDaG?Ne6Y!qHZJz~t*3gZ|DRrfRQ5i`uLmG|)C}Z%slv9s5N~ZPaeIk8=ENMRt|* zwcYt$tIupDzty7-{j^U#`mS!*WuMVTTiJCh-?ojbab|m5w?5aY^^`RVi~^&;DDbis z*w@bU4>3jz09WLA#n;3u@qZk$?eERn#v)9@o!Et2M}|2McVfS92)Ulm>^fYEr_Rd; zP|mU3_^%#ix(4@ZL;SzazYA!tUVG{z{_DRr2kKq@+G6_l$Nzlu*e~Xy@QGW%w<*Ml8bl$~7+`$Nn^B1K95GJS+cY-(6GRC@>0)0;9lf zRbc-PFjn9T)?vRKw=fvrV!Ch4^WQPZKGz&M9slL{i8+p&@Amy*+;1&GWvd6zanJc! z%3g?nF<9=nWB7-~>R%k)%5dy@*8uEor-$$S(Lsv6`j5ZbRnq3zuYbi=Y-bx_wKV|R zZ7m}kfTqsT2T9rVP?oZ>-9Eaz&iI%|5eLwQ#=%wSU@ntP8Wn0JK*dwM)X+i|p6O*e_@2 zxK2`zL=(0Q8^CrpfU@dyI_Rrw*%0RZ{cXl#5!#6N#;vhq1DO9;jhzn{O`wK#~O@i7~~ ze%r1;mZuHs!#;H@TbpVt9x7{R=ha7~_3~*@eQW{sN^x8p>c4hszw7E7-`%!->=b$_ zFI_5|4e%Ww{n^F#?1*du*RU1T={h+Zhz%e)pO4=-YNxvBVxMyMzhQ87ZKi}#U=$by zMuEGpK!4W;Bk%&JVk%x?F81(E`IpV6k`d_P9%}zuLcj9l^;eQ`y?BK6Uf6<=UwJ=Jk*4cic7lWPjXe zUv=nW-}!X8nj&-cC@>0)0;9nFQ(*r) zK&@574mJRmnA68?bNINA=~#qMc;%S17`Ab^eevtaHRWLxUdBcI&u_*?$@_&d9p5^K zZQ!@-waYoS@ipGz+;#jdfY$zJn_#~>^hZA=^-B7rjmI{}e%Cpsz4ke$)V12IJiKRL z9W}H~OWc?1zjpYI?KJV*`7w0yAH#Xvx{p!gsIL<#5hj5;2<#_6RZ4?vW z+uG;1ZT|FL*Hu;7>%-9M)hGP*TOZ`=(;n^C-uBC5|FRd(`fY!Gv_D(Mx<@+UdG8wF zJ-aGxtJ`(T&JM7@Z#2?TyR78;S6@!=a_Sk=M?M5I@@tGKH{}wF&-nE2f#7E9mBS+S04_lUwIN=SAIRL z+t(-PhxWx=^;VyK;skzUa50UJYp?y-Wo>dUl;%L z)3q<|s#D$Cp&sp0C-yJuU%P)7QJuu0HD^_0c{#{vT}w*J8hR7>{56#y8g-z>)vzRqn3K)m51iMuAaa6c`2W zj{^I8`TbqDi~PqFY~h3A5C&lp?%+%uj#1eN&cP+;{K%(1yBNntP?i+CfrCke*3klW2+t8@y?O!xBbq;du?Ou zShv{UK*V`=mKcDt@g4uAw3MI60=9NIPnpW2oidcqR->)s+D9*T6aHW4-$l5(wo}3= zFba$Uqrh!Ypl{va#gYHw{P7=S@CI}71Y@wRc>x^qTXG&hH%@={=lFNO~9^`+wXkqt;xl__Bq7zIXwQQ-b45HrOAY!_$8m!JHtKV0hoa0Sb72M=+jb$}R#gBaC1 z!0ZJ3zwoPHU)*!Ob8+p*e(Fn)Fi?4Th>;kIf#t5jy*R9W+7^%7pKWkm{HKR9^+kJ> zE8ZXP)vHgAW4HFkf3}GAh>qzSyGEb+=X`zNQ_9EJ=P&-^S6Bb^iCu%?Vg=>}=xi=P zpPN6Rt8eNPUkYA4;_ve0}o{R#cz$h>Z>Wn>Q!> z&NtVh@99nd>?~s>exmQiD704_u0xO8c*jngMuAaa6c`1rLxG3>Zv4j$?*Q`uZR3!H zKgF*7#xQmO7GV}<;voJw53~5Ke1Co~Zs92#!!i4@534ZJKFn2y@+6#B$2;Enp>-Zk zs#_hMt32#f##I&B*URlTk-qDb^@ZA^pV=DfqLbnJh$>3k6nJ_W$X8C;}@>+tB;KBojCQY zN4c$Eh;`So)~&ybgs0lTx26j_M7{K=UFxl!+U%NRUygn`pPw%51atdwUkrqvu2*h4 z%IRt@KsjsxW1tMSm3BxpRHo})6aSTE|9!n{r(dJMC@>0)0#{YwWHGt*e^`gn*daE} zH^u#UvwYh#dw?&Cfw+TBuC>qg*za98wu5zm%E3omvh6%|U>WW!2L~|^%lwx7mT(UH zwF3jC@BPr-wZx>%S0FSgKk1+-cH>=u3XTbs16_`g28hK|nR@3T>~OTVmz;Jf=x z6a1%-{_BhDl}kg{D<8}4lh_RG0Ar#ZbTBT;N=r6M{8!$t%T@1>xqcKF1xA5U;C?Ew z`;NF_-8brBaw^)X<#6o`K>%X_w z1Jvi<2c)NKj{L8Dn&@MC_FaKuG5F7ZkY@vEA5Fv!*dzDzo}FHe0;9kvFbZ5%ft?XM zmvIN5unbeo|KkfrE#7Y2$8@$qOtc@TTpOz#bG>u1kN=Nx%Em?St7E?3_S?pG*Si+W zly|fN{8o>(aObwd){f#9%EI5P>Y*HM5XX=2e)HkgYrD2-U%zSQxAy1@UtNFnkG-SM z>>&H;VhsR&X=@)|YyZ*zS5LobVs4@sfLMsK>C8?mwxIp$Wls$MuYNa738TO$FbdpP z1u#Nfp6@Tmk7H~ZTi5{N&bWm$n1^-d3=kIM}!EF^o;%di7#1 z4q~6}SX&IhIogojp{~~FY5P^iY5!LK9+OaCeAh4h&n~HL9oGi@ca8oyzjXj?oA{p% zKofHy=Kk@UR?5ouaJ{nPf4VB$b?giM*CzH*THCJ-ZISP>jH@Uz*Ny_Cz$h>Z+*bwi z|BHJsKYZgW|1#eaYx3v${@%&M>k>|73$P*VcRt^?cmBn@Jn?R^lz@T`dN1vg{!7b4*v4cIEr$pI2}8iE|y}`^SH|WZj;= zV}JbjZY7SVf$}k&eUTlJwsQTGw1sALHBQ+=<@P(D4w82n@9TX#{Tc;Efl*)-xS9ex zFLz#G2j3b`unWU&^Zko4V^nOy!L}ElHU_R(!kJI&8f*XA0QvnG_&EM63)9rAO)*xE z`%-npJ9dcU_-n4-@tu9oqsguT_Un_fl&vm&u1(n^*sorR4JGHNOZrfb|JgnI{!jnK zzgq0K_Kz<8JpeHf*U?W|>SL2>!y1>ZT>G?#?O>dY3p=fEF&7JP{nc%u=h1Mk83jgx zQD79fD+=WIFMe%I!61y0@R;w9HCW!a__5J`ER0pywELWIJGT{ZitmeYd|h#Wf2#%q z?H3!5uNaGUxT#EjaOL~$80N|){<3TN#MvP4dG80$=DaUA5Ad%4{avf={CD-&4!PKb zefoD~Ki!%yk<(;pxSi`7ZK5R&j{K(q|KD7S_&;4}t1l}Ka;76Km75OQpv+OT?{TPBNxGy<|&wPJObPVre z{?3`*f5s{2yAIoM9s|Vzu+KVpez5&~WA))=YXD;}_DMLa9&E+mYyxe-P4f<}k(4D4 zpglX&pH-Fp+dbwG^0now?oAu@XM5O>$&P80oEG-`?LCJh|9jV8pC#`B;y(Uc13?GO z#%q0&(wUakr4GLxqnB7ejg`X|5DUf*I zKh|oKI*S2l2Rj8Pwe8v72i*H`jQhJ@A1YfP)t$|Qsm@_*$m2g72JhE=!Dcte{iZ{G z*KhFvHW52OY{Ywgc&+bZEb2ASPZQhvqHpSw>$l@H#(jSS&=@v;a=)dq0bZs5&(qgY zU=$byo<)H@zKjw4#f$8~eEaex`JFh7K@vXlO)(0`^F5vCT5Q8O-1qy)Kt8ZoK&)f~ zNY2AGe3xRL`Y@P1fVHvMJ}m59thCLJ&{phwx)OWLqO}9nrw__fjyjZ;?V-==FjpYy zKYoj4=&wF$FP7WqSn+>-_8mmFfOF}K`;I%7twaM!{gU>mx4yG?jN3cj|MA8DYye}W z-O803TRP~+)3unRqrfOI3XB5xUxA(dc#+?azt~|P4r7Y+_V;~!or6KRgKe=Dn~FcX zM)Diayz`H3>;kOAx42)+5#Ac!}yyoZd)D7i2t#>cN-ozo*lz} z99JHHoeiKYeW68lI&NDsPe2FlYb}G{uGJo_W*_O>k^l9ZKF)KFx@hZMv4G$HgFjkp zB-l-~)DHbC2C(|QU4!rbM#EqKyPsQS{HZ^)|JG*XMgut;LBGZZc-&nu`$mCLU=(^6gC)3y)sngW;@cSJ{k+BG ztsIQQpN`ApAjZW(%#6Jl#s0) z0;2#0_Bb$~9=})G_<#`@8vDQXPyf(^_kHY34?gm_-+b`)zxuJo6MR~}=f+><;F@?f zwqX@!xgLAi5zfaOtYT}31vo$c$9Csqs&nI@b}i0szAtX63v=yrPVs-XfPMIuy@ADx zdzG<|5r z<2?ID+u2C^ZN1;>+om-;iGQy@uF-CG0UN;k0W@_T|KHq+xdg}PseJ1mjm>v`>dOy) z@bkaB;xx+fO+mKCk9_IhEWQ8MXaD&cBW1X5_&-mAQD77p1ztr3P8MgdSBed`y_bhs z81n7!|MY_&{mOq{ToG5s=s4&&F5=0N={SXh>1;y$~l zIDl{P;=i`=)o~k>i$`EIEyOQA`*Z(nZ7T=wY2iBiX=0yxv`_i?tWWyQR-%n^%HDR_w+&vNiBu`sHtYbG>sB`=4!1x?~IwrX$MzIC>uJ|jt9@A_)N5VX1V;jF0 z6I(0b`s#HpcE@t(X9tJ@Xooi7nf73?a@Z)Y!O3Fg>>0Mg&i}`a>plm-1~3=E2FRb6 z~RXrzENNl7zIXwS4n{_4zPV^*IF}tzzSUY)K~x0 z+Q(<+$J%cVfEYmh$EN&LjN%YcPpAji za2a>CNge~Wg>8U^Z9A83p?v2(nf;CT_V;)L{eRnJ$f5j=bc8D)H zrVjg@qksBDTm5FA$k_z?U7vBkZMe_p*G}*MDckt* z`OP0-zp`8BSZ^mE1xA5UU=(=O71-zS#R2dMgD}LL0B+zE4!!GpcD~1bOv1!`O50e4 zL)eXjl6h$57FS>gh_lPFP_7QS`XoH8EZkEjUmo+7iM2S0v-!i;z-b#c;=XIxFXrc! z@m8b!fe(D&I!{a=tMOkSm8mW433bK)Y!7Wp3+FnnKQz=A-#PNTb&Tu+eWkO+KA;WT z$N6FyX{S7PjXu>+d^c*b|{>kQQ|uD}M+H}&(q z)e)1OFR9ykVh-6e`X=^I!%u(VYpb97>bG;9N1I{***^M2Kd}d8XN%AQ|Mk_jF`+46 zU&4O5@l#gg@z%YcGe&_?U=$byUQGo~mXB>t8k4YJF5w8jwDb* zIc4zx_5l844)$O$zF-UfJ081n3)8SnQXZb+qW$qb9y-Qn7RPpuaxfLsupfu{@^Z|@ ze)XHvwhwpN0sM4qbZ+zU&o`1gGylfl{N8=d!PdXti&T%l0ifUN&<^#p185ij**e(H z|JOe@Kz2YH&_+x^AMK-4wt?&HXaBUWf!=J9We06-!g}m?+_{o>0hFsP##4Iz_1B00 z&vzrtRinTtFbdpz1s?M9Wciy|g!|r0V*_9qw%Nve48kJ(^&5Bb2Pco5kM(%SE@-{G z{mSIuW(PP&8EgS%s89VEi?4F^s*Am1TkN|vg3C|;?){rQJNuq**xvchzqGh1X9K8L zozd(Gmf0>Wr z@3Y5@iJX0=Oq%MyG1b1y$3UJ>x4CK*7zIXwQQ+<=fN40>dOi%cE)B;p*_v{3Wz4}I zT)`$jsf0=K%6_&3-eX$!0Gk5uO7RXCand#U&)8{O*~-N-ZNovycD}#k*&_M9SND1M zzqO-0ZBVB=Fql?s0{qu+$NY94pC7*^eWD}#roQU?MIG#OuJdfuOP`ddTy@x%*gO*E zoBKB&uFQt=n8Y{^3&B32y8~O}p!WH#F56gZ z-ar1U8 zIxvtQs}3B)cXc@yCmpk$?|&Wq_kF)OYVDyq_~O|b+Q4SA&oS>AvRSm3{lcE9Kh`qn zBfcN|pAFy`{)?B;!JJ3zr>A&|y0G6iea!pw|6Oa0l&yYkrjfs6EYWO#_y6Ho&(j5z?zGI)?*dPCk z0q~dc3p4rkVh;J!%9Ajc&4IUmtFv|guF+O)zP@kU?(YK7gFmf4ZBV~Hi$mDv`>UUg zV=iC2F}fH4TOj^l>_2Y1#yPD6u&pfilz9++)o*p1MrM zjH&$($9c9!fl*)-7zIXwqXPSSF@7w5NPJH0z!u*Hz!_Y^9(I8Jn1qGcYwaIq#X84r z=Lch7{;wRn9A{f#C1$b#l!d1_h^6@IST+e3+lR;ai**=Tdw1Xc*tg4XpPrtszUv>R zszY6VtH-`<0{gY~i@*5Q<%iqWhwPc=0Gb2I4)VKqA@#o)2u*0C&+H&^4dtm@Y=GY{ zXFEv7!!h=lcG1cBwRUm%fBEsBD@K7)U=(LX{fE*u5E0V>st?TRYm9eQD77p1xA6}slYyOjB(h38(50<)|=s- z7yy40doZYYIR5fSu}WMZw&5TyNf?Lsj+Mj`j(#u3satu)1=MGMyv0=<)HdwJI63ac zV{!SbYOH)^tB;LSec2w`pdNM)?&7fi*>(*(0snE`KK;aYHbDK)_ot0=*jnra`^66E z=UlorAEGUive;wUV9wWu+DQvz$rc#@|EhPxTt5no0;9lvR^TE3aRb}1gx@YL9&Q}x zb7C_Fi4R~q-r+NU7PIiqIatOIHD`f4qp{)=tc);IbT z!_arOR9Y1$$=-6F_NW{0ZA;b!SPwuC3HP(*u0xOeeCJQ!MuAaa6nIq?*w@SLabwJo zFa-1X^WOKvGYOaQ%rTt8Axy+TtPA)S*0m&=a4|W_sCD&sb zdjlUO_4tij>Tpf0#Y-`7*I`@?#8>;`|5bSBTK&h{{C_sdYS-3Q^8)%TWs~S@efBq% zovVG?Q&N_`i+8XAB$}v4KOL87raZdnd$tvQU911fcTU%cjj%=7EOb-1vD8+-uVYQb zeZBvuU!%Y%Fbce?3cU9_zjHAnUSKe0;MVd>H@097#$p^+VH1`eeSUF*c)xtr?K;>R9gJqE^0=kRx3TRGZ(dTRat^Zm>J*9Yy= zS9R!zI`ZMgGxS&coM*pw;j;GEce&&GE#b62C|_LPG5W~uv(4U8Z)G=sLT~W^=Q!Rq z_)k-9(tjEnPwP4T-oI)5e0t1PqrfOI3XB5xQvs~P2)-g_h++GU@BDvkiTN048;AL$ za@@h9Yy<3KH{c<@VWi_Y$bWYo-xs?i^(&Xpk6X4e6bmKwYm=Bb4w~mywrjNoo3lG` zQQJ>XpP&ExC~wT%>Sp)EVeK~`A{J5I+8l>z#YWL*TKH}tdtvqMtpD1#`n3JlFaElH zY2jM>DT}>ioq)cw1JvUh_0zDwiKvb0VOP*q|JB*wFQCtS1NeUa-<@8K0;9kva1{mk z(D>53|9F8Rc!KZoKfX7AkB6?4*bdIMCOw-0)36KUvH>s*@1&S7*9PpzQ|xCyC<`CW%g<$Zs8_p`p*}2JZU29Ne9N!$?_||;TtlyHD_Sbcxs|W~>d|+sZ*2Uw_QEr zVXhqoMuAb_ekyY-3 z3m4f8SjdKuiuWtm_ie-;l#h$9!^rFnZL?o2z<%Y$UOaXDsw1U+%9fPPCelBeq?fiz z+9xeLU^^G*>7);iXPby$@ZF2$`^_$*llA-NPqMk#KE)A~;T*@s1jIk8Lm9NUk6o56 z*IEu^+IU`7levBr7zIXwQQ*EQuz&kE|DWH8e;9-1xPviR!#~Aa`}n7Lg;n^3Q_jOZ zc7P;aezXtx&wO`&D&G`0alJUYZ`mme`{WY)!FlS}3%f#FG1_^pcf0xs?KVdI zuReWa3uuq_t2f)@+y>Y*po6}zSjct`ZP++8!D)7i{wN>2>FIoSQ|wOz$6c3A;ToE< zMQp3rII%0(K6q~ot*!7k0Gi*qx+YV?C@>0)0;9nFQedAi#?Ji4{7B#Y!5+2%zT%B- zITqrTbH3|SUtT^eUcdc)A79@Ha*V$!VH=*g4yW*{m;k2ZqhrMyFwO7k!PwP?t&MW$ zV<;N{kJ%8~#|OU-|6iFHt`22mHUD3`{ML8&kUE{K56;zoZFZhEJ5RE$4DEFtnc+K#BIgxlrBuXS=b`Ms|R8f$G=y*l#S2DLddgG`U~*{PboN7zIXwQQ)G_ zh!-&fugoj^yEFKWF&GqUu?yST06*{(zq0s+VekI%XCJ)pW1FwP?dQ+(UBwFU3I|;; z-oQ7-M$A+$wkwkzVIS7nhp+r?+scUl_9@SPWjgOV=DOKG)uG?Evq|LYT5Z|duKjq< zE})k-W4=B(mQ7$=96@<(A~ut9*#Xw`wU1sj#eVx8*Jou`b~c4Ju%(=*Z0*K>x=OaC z;s5+U9|cB%QD78!vjY3Kb1!lO)9@5qup6sz2>T>_mhg?g>O3sMeKvsPI{WZSY#-xX zgN1mnJe-W{j`=NNDb`l6YcMwM@@?Cevjw#IZEySY8}F|6uXiH#Q#xb~|FuvQm$NkcXnTGl==pM zI+ZK#f$x&K@t>d0p3ye#)erTvOZ3&XV*T`5?cMsQo%+Cb!1>Srmv27!$mf1@ZPSc) z^mbfXYy{ghz<6bqlvRv?ZNm3gw{a^OQ)>XOOP8yuI#-VZqrfOI3fvY2@Btg-{6*X_ zZ)_V&9J59pzs*l$bSd`Zk#n%h`B;Q)&d2|w4dCzJkpX+JmT=V|EDMa_i%ox&DZd|p+@%=r3M|(KGMuAaa z6c`0wO$GRj*01pq<9~U+Bz9mK)?gL>VWD|xar*d#ftcmDYl<5jQ>USgIYa<6FmO^G(g zPoLtGzyFYqrfO|mlas++_yM-Yw_~`^Bpk-lW-buB&@|CIrd;vk)lq;qXSLODz0oV|10N3K8HsYaJfpe~FJo*-q zI@KeIP0+wToYn?fs9PKLUD{c@+W?<@<7ZYMvsJWR8L?k~%oAw4@%VFp?mHg5{V!~P zb79jm+d}_bPZ!&jf%odQ@3{7lCdF~g@m#ky*QN24GYX6XqrfO|Qwr>V)ApkOpD!tn zjC)weKeg6O41iCIMUL@p9mgu{!!7*6GE5Vn&IaJ?;+Fik*M8h~UN!(N zee*~;{zjs5*g<`-*Lkj^owDM;oVKoGN6}jUef!sWY!K}-pJMyS{cHhsXUkkok-2&l z7zIXwQQ-b4u&@2Yhqy2I8%yH9xqjTiY}~?ayurVCxR|x^-){-eq!=g;?pihk2I4l~ z_sIUP-q7Ok8S?HHnB(Y|I?s8(}E4)H{IAa z^kgq#zc>n;$o`A$SJp-T(@0(Fq`Pa}+laB(Uz$h>Z+)V{~ z$6b6l-e1hc=y3;MurGfcYs93*zVlIwefy1j<+hs(_{`7z!eSo=vLTd{-;aCNt;N2W z%I1i(xQ~07>fJl>gx(iW&UKH3`2=m$UTxri(}2yPE%s%XunV-A4*K9aHh?~516WgF ztzUnqub97cUE}(;k2a8fVg>ZJtuEW@mzoQ~d$F9jUv7+DbDi@e*RA!GHwugbqrfQe zaunFVle4`qf425NR>TlKC*EN{#^DVA6GyTO__G+dV&7-;{&7s6KP-10M)TXf2iR|H zJaVt=;=eYi8}Bez+(3Qy;XgY76JG@X_iyH$oWJL?vh5o?-x!@w6|E*nReE%bvfS`)z6& z1xA5UU=+9+1*`+-|6vb5-?la5*8X4g`}vSKg()BWp`Tuy!QU8+L0IHBK4IHh`?s+# zejRh$*#PQ{MXs~mxpC9EjwxFk#NXA$?=A*z8~Y_J+vgEpgtjNk_hxIbS;QaWzZ{pf zF;3_IKdw*p`xx`rSNr9zIclIRI;fZ4cuxm)wk`kY8(&%bT^s)!)A-*!3$555&fVhy zFH*Y~F&0)0;9mQD6r3oi;eGp=MVpFOZoczz>B=V2Qhx@^I{G5NLZf@fK3=> z-T$BZGym7Qzl&utP>ydB_PFNg=i82Za_8Zxl&>qtS@oL}z+rLu*1ksxmX&7*#KySqc-zXseyqYba}erR@8bW)IjrN8 z>!b5ttor-A{9+c@ZUAdchg zd}CT}yZDb74Cc$tarj11_saa8fERlwP3fb+C@>1Vcm?)2ujhX6_vNGFr4%3X6OXLG z5^;B2!Cd^sIW~Z8>(R{3;|N9_^|ep4y2v3{bmEm?R)LD*S38AjRK>1#B?Wqh^Hn|5u^`_Lzr=mx zzqx;mI40No?RtK<_&UZ(n1?-lfA6m~H;w&qOO9#wNm$;#xaN24k9%_EbxzE~e!Rst ze}_0<+qqb^v-!o3Q0paWhxhczCebE**5=x;eX(7B+^)|wNT2efR!hUPHGtwF_|N__ z2LAqndL(np`i~^&; zC~$QJUVr`d_3Xy=zwzCFdp+Mh%dyL|-7_5z_<>@-?|JVB&tm}D0GNOUcq^{V1}N6d z@5dhe!~f>!kNiJp|HiF9_Qy{j{CEHTdmeo2pZvZ@)(2o*>BvRQ%r1zf><@gi#$G$( zzkcogy}EACT0(0nT8l>`@pyV*Z#IiQ#Q!7v^*OETznnhjTK(xCI*+9&$N9=qw(ljV zt1+-Gv5)YdKI{-<8269k%I9|vuwm#|zq1+L6Z%*`U$(xrXYx^C6c`0YfoE5s7&ZUR z9IofSXFS$dif2ELWC!4Xd??2b48b+)%8Pa5E}z%mrNLyrsPe_bW7=Z>#{GEqwr~IB zgZF*xOAo&N{hwZTz(wXc593^?&UO76@3dPR)Mbtv|M~wIr(Qm8{d&3i$$7i1M`&I| zuFY5-v-PJw+m_fv$AtUex-p+d@BjG!x02t^jsLdwneXpg!p32(zu0o)!UnKDkxm$n z=STkAF0P}TJs$LC)!Y}x6aU>C&VBP)vu6|-1xA5U;C3mnf6I^WUo3i$AAG>3_%FvUO#8qazrOxvFaG1a6bo&$4cey+NnBhz#1(Kz zU9CUhUt^tfZjwteQcME#wJ~j4vnVc5pX96mn=bk+{gn@VaV5O}!O#EhgMaWZzwzKl zzw)0~?il+3`}MW=D%fr8A%A}$TTI=yCG-DmrKQ_}_s4O~&wm{M-7DQ2?w?`+^Uc6V z|NqRdQD77p1#Xi9r>FZIu4lLyFIHgWkN?BZyvcv_jCcI_-akf&`IqBAzVZM0l<`0A zU=S9m1JmO__G1^W`5U*7^ZT8ThdAeazcCVX@^`gQ8*sI?|M4H+F!-kQZ;pi~G++aW zk|gZ9}Q>ZFfku7(X@9ip+!-#4cD z|9pD7?)K9|-@b1_X8SqrI(CAxZc6K^cN7=}MuAb_=?ZwhdsgS)VZ7(J=lJO<+n|4* z`48XwIx@of{$`BlJ%;eRrRKV^M#3Hp!Z)0bPjc+XeC+>@kN)iXz3hW+PC#D5H*tYt z02rxGWv~I1>o=}x1NMuxvqc=c$$9C%3CQ=Bw2dZg0BzPjeUS3~^%L7MKfA|1sd;~T zum${12O6gz+d>k1VVkLsKI)d}Bwi!-V7*6U+dP2Z_|HCce`E)I;uD`-=VmiFZ;ub` z_safvkh*^+9|cB%QD79feG2T)YyPKaxcPBDHKu#UCZ6C7KlkYW zi!uMb&wTMbM&CPX#r^YZacr^7dVn)OAIq>G_dfh{|9<5dnXim{eq(5Di2ud9_2cH> zQQy}9u!pQmkkd*(=r6A?a&{5E|KxA|;dxAiHnd1L?DuyK^ZnTm^jc+Y8m0^V`TB9c z@nH|N1`yl(`+v)>+wKRsdm_8AHG=e%;=l2CZ^-R`S?^cezW-0tqETQJ7zJ*>0wD`aA3FB~`?{7Xk-xl96 zFhACLd|>BwPW<=18|&x9y7|?;f1o|ycVh$Wyt?TzIaz)-ZLG!DF21-nYkRSbrOz4v z>oYrm26UrMiESW8;25o3%LX{|U*E-J*k8s%JS00nTkzkQi4)}aUmRa!Z2rVJ|M1`c z)M7oGP}#BH{o(x)W!OJ!0B-tzoBBtAQD78!vjY4)&*+%WZ|1-C?8XAmeCxS9^Kn~z zz&>m!*;nirOJeVlFPQV`FMMq=NIAG3$N01O)mk?GJ(k5cx!;mw_`hP|n-6^SbBlAU zOB*l_SLLlac(V#Gd(Zyf18uP1+ywvIHkRrGTL#1RO`pw+U_3uRU9yR2<2ZZBzT^CX z?d&I-(*XaC5!S0$JN!2P|D-hl*#YJNitoE;KJu}DwAP8(ukG#|_l9HTV*|YG`)leO z1xA5U;OPpqZp$;fcs|bKxHzhHX$8o#$S24{3{IFJA4bVH6kzMuAsb0nb{` zY(5&_taa$(_+rA2fAWp(JNer)-m}^>9{2n0I?rs^W-G)7IsUT|umeM|1y>}Dll(0} z$6_3AN%)Rw#r?6~Hr6@DHpu6<-?kk89nZ&AmNuGG$1?o4zP>f~JO6I}+qA6#WD~`I z?Zsj?ia7xM$L#p6pTz*!Kjs07iLe9GGXB#^o8Bk^KIr|KeXg_{`7z!n$W%qi*+>du4yObe~&#wf|>M z??-`AU=(<93KXyHIqn%Oc?R>-#DsfJvk~yg^B?nfpYB_}r8R)XcPqwES!?f4Rd#RSBjaR7^A7PetI-Z!To>*9X#e&@DEP&^?2Us?IM;_2%8fuH!5^S}AS z*VgCTvmWhav0qFi`vjBOPxz1B$2kD~)7NaF<^qbB(B)_cxV|+2*e|iWXy7}5)?ldD zcxglN2V_wN4RZ>#;$yN+t~ot1N`zgzWLxIpZm>oUl#|90k{_Pmyf$KUzys# zr{??P7{>8$)&I2qJ*nR>ZvV;oyo5HgPiUv@`k*iIKYq(GUcYhQS^&0?Tw*gF?Eu;o z2cVlWX<)4IznBc2;=i#oPT~;8*SU?ev9@ilpPeW@O`q;P{QvDg_@iZODno4GXaf|N zdRkd?Y!ny;MuAb_*%gS{n0t)ndj|8paQ`>H{(I+h`%f?V;ok$qfSADl#|UMbGr$ji zcQNI-BDeOhHF%3@8JHVutdtYpixmGbe61>nDAO@KJc zF=pbNqejZ*f8)LwfSf+Y$GFk%r+@7~uJOZXV~hDE_FMb3f4|QjuhE)A*sgcaDNC%$ zd{gD>r*o_$C@%E)l4kEHFba$UqrkH(uz!PWI?{BT$TicH> zJzFB5KNiUI|MO)(_0|8hc#r*jSv--%l<`LWu`T};*RWr*y|}mKwsBvMdHh_CLOdFMn^E#((cAU@#V21Av)nQ6Kf02FJC3<^lNp z*-CidT1xwAdbA%}1Hdk{76bp)YrM3D4Zwz@p>aBnb==Pe!2jKTe7t_{FZUL<>yKm{ z+$#^S*xx;61MK7TV zi}`tsU|SEy&yNYM{lf*%bj%R{=kMc*JfD*9k1v>k(HP&_bnKEA?+@HB9)M})2KfE0 zeP3~bGv8QQ7-!v_x%7C3soEi__x62@cK82j6noi87uNvfzsGhO@bhWL@5g!eQS$?| zaV|Sy*$UgXV|0?!0>ixrDDJ=p`2LUo{E9!Ym8=0|1F%DkecU(hZM(1VTv-?ImwtC& z6n_$T=-8wA{3Sx6=9*jeeBOP{hu7ht zXEElp5%^u+*?M@!#jSm=*7N@u187^06}W-DaUXZFOq z0(@HWgw_bGb2t8HOYl`CJi{=4e?E0~$HiXV{O^4Yp!RC3wu@WPji0{!@6DbO+gP^J zrWxkbLX5vy2z}|d?5FKq=hJ7|0c@-77_Ez|u=~uD;J^1X;=kB~F=WGuxTC zT-KcI<7|XSuQ*w21o?ByD|w%buf}%3*kkM;!|+E~a4_9$NdSO?Z~w@o1lJ{ukXap3UTa3H%pBVGrobxmKGN_+MXf zonJ2wV9lTRAniNXi=JnR9Z<55ZN;|0Tk(H30L_}KF;@7mT(+C`73YcnzE|X4XnpCv zmf`VwI)|NUzUgsu{OpVD2fX%wF$vYjT5m+ZTkXwM!nrs6}!hTVbtYdyf`e`|;R>;P>r))!*{Y$|gA zdrbeya{zR1KI)6V_|-Mvq;C6Lf1+&VsLOrpeteou;oA8(3XB4yz$oxg0pH;9Z2j?n z_?g9P+xb?l)51aw$9~Vg{IX7FN-^;GrG;<%|w=u*0;zh>NnDW)}-1{ zs%Na{y=Sm^fN${gv!3<2?Rm}rS6;rqZLwXsHH2c(n2R40|CLXRzxa<6+JI&8Kd$HN zV@>Su*fF<#F)54R$ObT9jiZuyI(}j5v-R_)MtWb1=Nm_CCH9MU(~`FAn)G4|#B`c1 z8(@nCq#x~UuiqQv%k6h=wuADNMK||?q%KT%?-&O>789Uf{4!c*0GM)YLl)i~^&;?N(r4+wb}687}pVw$HPk59T?0dTOoU zlmB&H&uBURpFjUM{$oS2fBV%Zo{SZ204y`djAIy$J-CE1vHi%b_%C;TznzO=%D^$( zYt6v+exS1P3p2(3`Os_+@p1L+OnGuYZ}LdgI19 zq)|G`#Sds*qLu3!1Nza0@9#TM>f+Cf3;Aumo;ZZDZ4SWrOUBk%%U#2!d=`!SdsF@0 zfbK8f1d!CJoQeJ48>T~%OzcJA-~V{vg^bFk)LeS?i3-h9B*`?<&dJ*PeE zu|NNx@2@W05JSd_zW>9<5O=^T$E-0|Cr;rJ7GYG}S{&c@VbVF*w{soGtn2{WG3;0t zMzRU=oiUURfT`-$=BM}b=8m2&8|-9p*4)4M0K_loiS5NU=%$bKmeYX->>G)m%NE#l z^m}Pa!!xbV?SQj=_R~hZ{mZ}e`)lmf<$L}A^}l^{#dPRseZl|mKmVWWemQbKTi{W@ z{jGJ}@4JWoz52zEtV6|rW4*5_cTkso8a0vh9SQCTdRos`ab^Y7BYJCGJ_8;@? z1MIV{JpOETVJ07196;_jfAaRd_kU6GeGLG61^>054PZWl&(FT0vwr(s4CH77&}rFJ zo0jRiv^@KMl6~plwzAv{#)!>kT=1A3XIp!k*KuC!J=_n)0o(`DW&HNe7dOCqx%<<- zs%~Y?`u~gf$ow7!MuAb_$qMv7mS?zmThH|7S$F2|f2;k;B|JRh`R+OFS$%xo^QCb> z9m*6x#(TWNC~;wl?~lJ?|3@FzIrxKB_!RfO*Y9rt*tfm~#82H44msbNce%v>bqvq2 z5f9Bd@SoWs7-~NK_RsyN_x^sRxWD#`V`x7+fWOanqL+l(NB=(?;HVW1)3G&z<-Q;2 z`vG$Ml#RW<`D@O>_=p>6gSiy%0kQ*(p>cOFu=BD31r^n8tXwM{iObx_x+l3yA$=p6cOGMV)(c z?sHqas1F#-ALsM)ziFedQtVGRdWeuaojI=-?>kkW4inu*A@FWiTqtkF#xus`-~0Co)yb^Ui+dNCLaYxfl=TtE6{uX zo{JLBd-n31u%GYbnf{4SeDXQ{rG1@1&vo4Qe3#ZUe~bNlHk&h+@)xncIe2jaF#zr0 ztLAT-52EnRpcf6X-P--5cW6kPeb+_ zyGsl}Y{6Ot<8RHsdn5k4KiHe%L&n>&%j(`ey_d0H?Hv;K9qxNSu$b0m%bxQ`fl*)- zxIYT)ev_TvraOX38sS=`^Q$1P>a`M!()8yndf+JXOU2kdfeXX@P;_2yix zo6vqbvT10Fy*Mb2qVK)`fce-@CmPX;j`ra{Esk2dmi=H(VZ{>8-VI<+&`TUeUFvL2 zhqBpt#$(wcn?LRzi2d#n_XGahZZ7Jws$;zR*$-IndbxYgK4ZzY_4_WY>9}nF=loG% z6c`2GN&(M7zP>sBo{eInd?j&H-}Un>H&6R~&&mD!L7wk%KRZC)wr|AXzxc3R41n*? z7w5xzFF-q%uevdN*#H}FFe-mP?l&h8_t^k^{&*(GE^LxZ#s1kCc%^>)m#ZH$o_{Uc zTaChtI)1X^7TC)V$6L0Q^_1AZ=6JTg^ZnTXn9tWY1~f`9u@n4nAH8hT-FEDk`)xiU z{;P|Q+Q1GeDNj9O0LOIz>`wfb<2O6td9+u*?^Y|r{hWh}-}hau z4fLGO_c#BKH5i0N%ctMg>hUj?gZcbcwt!r6p5OVa>s`0AaRPtKmA8QY1Te$$WE^kgd-57)01_WN3ZXTSU0x9(YtcdhnF{T%>xxc9^W*na!^muD}3 z&Kw0sfl=TtE712-i-Wcns+c`?c#et%c$QxF8N8Rb&)>2EB+vD106v+0F&AfjqXsXU z1CWacT6VJ8j6Fq+F?TQvtDo|4aw+w`JgYb5ZVmL!k{WN7$75}HJ zc@?=fsfS&_4slPo&oEg`s{4eExX-&>&PR8zvMa6oQ~u+>|Fi#Xt9^dpa^>Ib$WHB} zz$h>ZTvdU6oi?^V&c8i9Jzf0w4DH?j%hkBgv-0EOf4P00_sbSIV?I9NLa}1={@Cxm z04(V}J)FTK@8%?{8W+R);1eZMVd zpDYgM_lvL4gI~@*!^Xw!%@)FQF@S8Tn19S^o-LJ@bj$`&#u}R~r>XMkss6^54WJ!< z8y9V1Us(ep4!{nJ|Kj(yje&dTSyi>ZL^;iC?ehqaUakMibdK`x&bytD_G5mH0;9kv zaCrqzR{Rr-@%7^Mo{fB8@d3}$%fv`Me?3!sj>mn^Vf)wg{KZ_1!U%j2 z6VSeVe|*7p>~}n$-#*E4tdIAtU(cuI|0@gkB#bg=tseE_lDct@jiMhHwYe+5`N3j1 z{A_+d&Ge7X-UHD0;`cNW17J7N)w%R6ZerUQIcDFH|JhRUpZ4r3+TklLY1_DFhbW7E zV0_(c*^1%--8*6cj$M8n_I0iP7J%}L{Wo^SN7%ROy=;7|awZ=IMuAb_E-B!he9zQ; z|NZaxUhKjCy`Rpxc=YMN_wW5R?~nhU>Ffe=SUi6*lnwtu>7O`KRi>i?RR4rZpJWPwHFzXJeW7 zpgr4X#Q-*Kv#p#Bq8;uBiH+!9 zanG;;jxhl7f%^7VdEc~Pzq;qN#WlEZOwB8>jfzDL|KCc{IX()E0{1}y&pPw(d~n;I zxAJ@>oc7zZ)AR8%4D8)&*TsM3^*ooeJv@6Qes?~TL%KG!r??RRnN80j~k^YL@Xcj+!TSq$yl3fWlJ-kG0gjT(2B%@w+_w${`*AsY@fZVW zJ;~*iKUwof-t~8{DOdU4^HBEc`*xpN18|vp{BmuWvqynZU=+AL3V4=!=3%sFARe;; z?2rBYq~=C1*YbV6w&%I>FLFQs&hu6rnor5!#0LDgEysUM(Z2ltI2Cg+eAxk;KZ;w} zlN}Jhl&6j(|CJ*t8w;%U7jLkRARENI^yOpDms9FxoNYYyL;qqh?y_(6od)TdokdGJ z(opWVYy7qbApgJX%8xd{ntwTa7r^_Su4hBg7yH=&wZpyF`aiaSd!~fb?|JVB7q9hW zkJ~?+a#-))7DwtEPRbX5k{nb1U7zQ9HZ|s~QD77p1-|85_(H9}$9&H}&sEPt&sfhz z&usfI;};cgUeDC++ph8w?t7-ISN-^!Ux*9EhcSw;idWdgN5^Vx#~F-?GjUwb4scF( zfO&sBR|o#%*z*6+e1GfzmG5ueutTsY-;~Xujbb48<9<0=ad>@9UpXDktu((v-{x27 zNI%+@yXMG#*Ec4vYdnmD@$g&R9czt4e!tw9YmfIltwmsux>w>q+a%l3el~#dy1Y$x zvi=qz8$es!@8VMIQ@Q$-IqU!K$DKaC7zIXwrz_CAf1Z8$Uija$P~6}1^0LobwgPT? zR`dNmx69RIn{A;UJSZlOzv9ZcfH8c3KDp<0KB*XetjPw*4k$nJ2fw6ueb1*>96SGC z8Q6q*;@^Mqul?|O+(G@=-#33Q<7+-$@tZ!n|4m@J(pNue?_EpmHUCaKTC<02SjhV=m)HVq05Je_2ka={abVM_TWX#~8`RH6z~ub?*w1csA2pZcp1jPs z_`_=^*s%lW1G{zv9y1H>P{Z6EzmEMfy-mbkTd2xAo6 z0_(i%r#<4**obrYCHCLFl)a~qi~F0crJuIhRdmkIS{k0Mx1bvvz&Zfu8;3{EJFKP5 z25UUxzw_N^zVBen`TZq&8*_FTf8RPx_oI6g_w92Zx_|5|cJw@UscVX7u_eSCl*b-* z&!^SoqrfOI3fy-Eiq&JkcceTM@!xaN^Y*gOSUw)6=BFK*-?n3z<9mOe{pO%!0S?Dv zta!xt-x!krk1w(QXamH3{`~Qr<&SRHFB@RX-|_z44k-5Dx<4G!CX7-yF5ItsVB_ER zjsuRfvGkQaz}BIKbkq&EX-+rs67N<#F7{8~*k7KF#RhP#7yv!R0QweD@gDbsaTkZk z4!~))V)u=0?*Z`HZM!%3`}f&Li2cBxZEU?0A&$_xfM+jh&Kw0sfl=VDE3ki?5AUsy z_FOG~|9tb_`!`zh{XM(+Zj!P+e?7xJcQH0!5CN!bCh#xacH z-=F*X+rHy9UE4KSx4tK|*#cq>)*gsIU?V18*7ms@cf$5g=H_SPE&kI>{DY6}9YFCG zy7WGvyl*7pc=nSqNzWtuWBxIZ|Lg{un(L>xu{P#xKib>J9$_0a@6T53-f{m(?jJt8 zd*do&^B!-O~QTk2T#w&oPC4;#XV?GC;HGO?pt>m=jFv$*7i0Qu91$s zw{1)$+r~n&t!(!O)~gf$wZS?~Hh^)Uzx%;G;(l@OxL0hi@!N9aW50XkvN3@EC%9fb z0{`9nep?sV@ySPlQD79fuL|(*u~?kdJAU|lnYsQq>$3a)y{F}QD)Has%J;nWT=%}e z`2O+%&p2Qk|FOyQ9xKkdzwtT_*%x1MCGO+5^?m&J-aBI-6a&BxW#EvxZtcK-%*R43 zvKHO-xMI!NoBMbl_UzvR=ske?On)k-vbo?G0xcl z%l_N+Z!FjW+T#9nKV>_z9f~2@=N>Uu&p#^r_b=H1<`uGGm3jZ>ex6^YxpEX31@68A zt%LS_!++0GasMy=;#b$R^m%=$-EKHJe@-8{Z@YMa*s}TO;=E$NxZ^uC_J8z^udMj+ zV*lCq=X?CZ0Gv zn1#Jq7mn zn|8m(GtRS4to}E?{(I-&0Dk^n?eCU(CVM{T^T&SQZ1pVn3~$b#zb<*^_x#5Mv0Zk; z;>*VU)}P}De#oUC{QU1O?(<*y{f@B(@L#zY)H*=iTCrpNKYQoj+&|Xj2eV1Up80)O zi-SDBiZAcVlNE!}f7-KwFqb`q|Lh}kFX?vV|3w=B*JC`}?A;&!?BYJAis{?Oesi5M z5?4?@J4@_8+fO^(3x2aj+zZ;`UOnDZy%T`Z?zi1myL=3w_aXTF{ttLJ(Acw!y$i5^ z5Bo0v-KUp#H%(2Wz$kFr71;mQsb`z#9RB~>zx@wu9lmF*=jdg=tzK{Q{foN}R zf3X9cavkQ-;d$dAX>$AXlf_{3Fc_@=>>y*2Pt8tZi#?A0bj5wCcnr;H$%c}|6=Hw3 zTse)g+Z+JytM_7Zub2;7w%|4wqh0RPlKactfLwW(j{)@e1Rur##245D{%_#_L;K?P zkLa{;6c`0YfyXI;(Vk^u{e24-m-%R|eeSvcxa*&^Z|CI6dQV&VNA?#3u-`LWd=+Dh zJA2-*`1585H1F^GFOS6jHwNL)G5(M7xDt2#J|=ZoPlo@+s`LGoRqUV5k?$Y>_rHB` zd0+BL`rOw2{e1?y(}2H?-Es^xUTnndr)+?@-x$bgt&F(OzFWsP{pD&^%@#2yBn}`RQw%^`y0`fM*#N}=j42!7S@kx~%Jg^tt5~8+Wp#|!OAIlhO#9*=f#=%<@mDJeQ(S)&uhL}!e9QEw#12*vjMime_yu1W*6WG zwzS4fxsrVnCSgQ?KpOx`;hIY&enj~W`nqAYMXO0*uCk# za-U*2cDtwDf698+@iX_Y4E$eq#J9b^%Gfn&d{5RofZZN`b?%FLKlvyy3fz4K_%xo6 z#WL$rK2^_A??AB$`uo3~_vHL!`DL;HqVMlr17)iRGx&0t@44<-ZySfjf7t|{@%jEZ zjy*Uem$0LG06wLdz4;3aYW>+G{NK)5*KF6aF))Z70RqPu;Y7a)0mRk?n6A zpJ~AcU^^KLa{!G8yNQnMssEq7dwJD$+3q^NVgDUMdXk380l|hnO+!!=qm2*=9Q5UQ zArd5NgyR+CrQwN)a^M&xNJ1j%M52a75ix|2L=iO&2}%S75kye2Cz5S_s^)jjn(uz+ znsco^Z)>e*!Jz7?>!?v<{Klwyp7}0v=Htnn{Jit$>z((j^P57R`xaAdK=%7SDzlej z40HJwkUlu;(<5`+C;Kl3uz%XBQ_kpW^Sz zVY*lV_V?bOpWtu0_n*K2GyHeoqVq%ijq^R<&tLKR-AT*)y8ynZ7^1U3-|xFWzXjA? zw>xKkjL)<75C6Nr^W9v3w?PJEg5>frNdw}HaXR+Aa z+pFhdF6Vvs0KV679;d7BWB6Zn_NO~5y5$Z)3?SwE#RT4GDSN06Ysa^r$HhsAKI5hD zW7gjbRC}a{1P%!t5_sJb=x?0d{liUo_IZxid*Hj`gU`2Dvi^=R-_O_Q`(bj}3A3I3 z#Q^+?JAQreAsz_#`2qI?(??wWy}ww1-!BH}9RR=1ugrJ+!?$?eNnPj5>AS}70s7Wo zEaL8;Z{w%D^X~V8_>hPDjmr{wA4^Xs@5@KrGyE&R-`@dvCT}s5Z}t5DiNyi@IiFAd zVgUQA%w4}R9A3TQ7@E8vB`+NdS=VQ$S$K{bTpA^pW3wV(4_h<9{ zrF_tg5yttEZ{cV77e3#efD~0e&;G-AxsUE|{_=I*`}1FT{dmuJH@^o+7O20y>kgnh z6nFUY8U1`~11T__Y}~xGUg`P%(hKGpKs!R`>nJ#e@3>@kn>w&ae3S zn6ce{SwH{E_ZJuWE}zWoMel2pzk7PWqv#%hto0KExIeg#%dY%>`JIDlTJM|W#-HS7Nac0YzMW3vrIzZRP2ed~txhGW&YposRo1Hc)(wH{*DZV2-)&5l@)s@c&Pt zcgL8A1P%#2l>}fLzt3O8S^gEaN%Q|`qIjl6Ma?i$cws%fM&UMac zFda6F2k?PE*bis*!3(VQ+<9@20r-#z&gWyMFS0O^kBj z`X`^P_~-WD0{We1@ltmH>ccL0(2%YM|Zwx0Jm&tB63drddffnr7T(iJg) zSWyh%_aVJg(q5cN7wJpBUwe7FLAM^Zw>ST9g+BU6p6Ro3?u#YfWIIRQA%Q~zhXkHm z0;kh@#|b0(SGWi_r7#rEt#1Mz^6mT0{}~j<@*Da8#&%!axo!IYF;{2)>4(R&a{Zk7 z;69vn9z@EO@%y{);6Ebek$KA(2k=ww{+;{97yM3t=jQi^+;w;MUw-1bcjh(DxBf3^ z_akKF4#4{xzSnu&zLM+i+jk$of7ie7Q+cU9E#=b29HE6wjqk#VKQyl;Qa$rg%(>9n}Sy;#0~rLS?%4xSDP91=JraJK|@41<@Q z|HT9Oei(T72%mhSEiBFN!&W#6d!-2GnoFHCnlt~5JFd?BFdI4FNyGf<`-eYJ?r*K| zXD+_tO)`FDlsWi*@d&@+-L}6o=iA&Ro99jI{+Q~PpZxqC06Ez&{@;Gg z`<1KrFyww71LW_k>$#N7y;JwwJNArDqO}*F&Ny|y12DHZKq_u@C*j_PPNt8=0KGqw zs!MNACvouI|CavKh4ptW-g~f(?#b@%dDI*dI3#dL;I&I&z2kPK$^VD9_nnXW`)9r# zUi0;E(ew201Bc}+bMHUTjNbKM;Wq3>{4i|K*GT)miVyhukN(sx|KGX(+?V9*^C|l? zzwhktw|@I}&AVehU)t~eu)yPjfj=V%>RqW@4Ca;?*PPAz1=hN|R`hND$m$?IQ zzwHc(hmY^~e(v7oRkQx~!uJv0wfD}X@9y?Hfb%`rpWBzYCu1MyUXE`BeH%#b`G4`A z_|pE<548O4r&G`9i+2I(kW?Jfy8yaKpY$s)jfzQ)DQ>-Q^~nG~#ijbL|1arby^mIh z1P%!t5_nw_SbygPcW*HEeh$~~0jxXGFgBkLcj2sa8BCTJUxd}?xINEnqa8fmeZO(} ze!mUiPB{NRzbha9-}hvD9KfgWFP%T-jiG#={l`1%&i?KnocZ~D-?jTj-QWD-b@`e5 zW$-bz=h*RzNy32a=j*1zKDNd$~ z^2U5~ucP*mz#)M{0YpV|o3=4aPmGD&^|32@D@3`}a zL(HNlQ_<6oR|9|asM)~~iZ}@*_e=!Mu`afix zW!+~x*FMx2+$W27&WGW1 zcr7N77k|WuZxFP{OTOPY%ANm}YwOI(U-(Tqe#9MsH~`Ie0`8TE&qsVu@BMxA&&Mcp z&(G(3=kFbW->5P7!t)Pr&mUt&-2wQz@eka1_CBy!hQ!*zFk^&u`ADGj~2D|Kaz2{pP$B zIbVtcI(P2x{rPx*FV6Qn!=C>?Kc~}a%yIm?TLSC+~42vyWOvlIr%$Z z7XygX+|!8J-1pl@?Ys-<{Xc#5?%!Ug7ks|F-=Y);GY}Y>Ag#Zq3{$2 zb{4Bp#C8ha({-m?Nw7>T^uh_#kYx%Ce`{O(C^fEj1{>*ym4nQo>9RR;e&X?{0yc4iD z?gbE^-(HCe^m7L17jXx11|Z0dRz=Z57Ygnr?+LJ%$UW=+KLJ2Ii2>5NBKjKZp-d?IwWvN;5A5K;goyJ z{4nhF3?H4_J*zwCHs1{|!_9ntcL1KXGZw7wJAZxFm^V0S9@y-jm+$A>8&4f9MKIRA z0RL|sew^=j{x1e_j{Kv4_dn0`f9FZqKhOTd|MN$Di#X&vzVB~OpU-D?ca7IeYd)93 z@w_Ck-vNlF_iiDC9RPXmcK~!|{~q8{ETBw3aUuUM?h_9p{+)hIof!H- zM|vMXhh`i*%Ct$>=pssA<iqw*ub0*qHoORb z_r2G9X>O1C4+(rI5`ZJw-c9cY1he*5kYHp0^IG7K$+ zhx!_yZo&RT3?uWbwlBOGCLuI}V)W*94?dh0tB6^4?dPXnP*>qVM!h1Tq zOF)@E<}ijlU8gtZHV?nAZuQ@LKX-nu`}6BrJU%x!$9#tbJ_ZTwejf&S=F=|W$#cu2 z_m}vARm-P;@(CWr2Hv~EwC)CO^SADMJ4fyK8IFdB;)vb>hrQ;2<5KPTa+u9mIOD-w zcfHPh%CtjpobQM6jm1~+@q9m@&xd>eKfgiqf6R|MF+yig{>0hey8XRBeIz7`&)j|*wq<#k7;{O-;#nc_&v>^(*JUOBRy@J{fd$NO$NP} zdS+*MTe1Js@^OrQNZ{j=z)j5E_e##d@||6sHC{?4=7xLx>Lq+qmw&&F4{Kf3!8bm< zRQ?=a!x(Mg4}8`R{_yWG-0!+18|C5=cl_G&9qPmS#qavIi;qCv|GNip2hiUE@+;6LiJQkpj z_@o=zY=1MG|395hXSTe)XRZF__HzAy&E(>Jm$h3DED{4CGCuVF<#ywjk?%j<~>+b^KVec=C74!)c;UQdYytSsAzX{NmU(nv2LzwHF z=04Zi%y|wDiHqdPCs~o5a~v#(UB>4>%*h{gU+nD2Zy@jgQGP{xF@pB^vguaG+y`^$%tv2%a%m_4E+?bY1FacAQlj`uhDeZL3r zn|}KrpZ)11U+?ci^I=jp#ona!OPqk{jM&4ymb-a%crhlDrhPV&ob@Z-ST<43^QDvb5j(RfI-lQn{wD+ci3!xJdnrDjPa?-mhXkHl0_*q4 z;SrmIJ8VlH#=sGIznSuqHWxl!;-S9_?CucO^^F&Ngd6$$u+n(dS!ez`f3HvYZ%)47 z87};WL8#|a_x&*3_%PYsvA^HzEScYs?(dDo1%30!*VGL_vysGhy4F{{lG8I-vavO|Mh>T&$lnX`S*PFv)}fWuh0E& z41MW|IDqc({iwKGO2^Eroj6jw>9-^3lrnX6G@a!a>8>*4r{{DJEgk93eBBvTw*Kb- zlTX+WyI>E-c?rGBhRKD$7e_~);g8>FV2k9bo%Oy1uU}m2ju8$CyaoxZb1z((*fH#? zGYOo5F>FviOnNzcTlbUeKJ(@~pwsCzaSLBCOv?9`?|Jw4FwT15Cj7KcW$+iSz}wCn z&RpurCI2rk#&9MlyZY46ocwn_fd7WY?pXME{zIBi@f`8}%C)yAe&?6Z_q`v#BnIG{ z%+cNMYtW?kn}>CG!`X4dxu1S%F``+M&EpkfYP(xL3JNhoS?sTbRV#%@;enDu!*Qx z!P?Myd|*vt1or-FZN4vEEOwah6vlYIAw=~4+}~#_QuVc! z;$?rXt@r>2T(V7VzUYp#ZF)~G$;NzS;7sCf#@>j@tes7Z-{tlDqVpg94+(r+5*UBe zKJ1GPA@&4c*jkw5Y$3+x*Wg*-HaS~=QCaogb=mICJtW)T{d@QWr;vCgf>YJQfk;{H z!#B9dx5E=yiD0MsV7tE7D+YkU>fwL#P=-9iVmKW3z;S-Sc|YIJ&%=Jd6W{O3=liAk z4{5%i|DWfdAzyOmd*Ge>WB$n5zgXjo%KzwpTLOJALO=MLWKRe9Ted=1?N{$; zL8%y)&G7&B&R!z1fja=@^rTq9p7Z5m(C(h>H==WRV4M4QiS(My^2^z9W%M!|&?dWJ zSNN48bL!vOzr6PBvoU5|Fzlz;!aVAXvELJj4Nj-GzZ>lSg)NdZxss)4awG@${zx9* zYzsfucliI?x_mqx61ZOi>o;xqK=uw7*bcgMHvb)Dl?5&H1|JGlpjzs?@szw-UYYYk+w z-}8%+5Scl@!z(xj<1hJtW&A#>9lrRSd_N!J?$f!{yvtYJzr#n1x066;TQQz}7X#RP zd&qycKWw498op}Z*Zh|Kw*TJQ@Ktoe7_;v<|Jze>fHwMT&(_!@9TNwzMe~ct@jx%> zt{6od@oF}~7t)z@olU4KtsNftPdZjw9HZ=8#7jR*8d}@KKZ@9j^3R6@xrF2 zO$<48<{%fiL?&e5y#Tv4*Lpwrc6)uaJ|yrlOW-u)^!42nJ7VW>@0Wh{zfY`zMQjmH zu|e2Z48Z0VJxqe@eZlGjBg_Rqx@Qct!kW$}r7%gpRKEB7`Y7Mu4R~&>aL*hQH-?Y5 zUcO#C=Xh8PQ?+&O?;e0W`274n3~KE#o8O=Bc!!K&JfDx`;Vjvqu-$nte<4NM!#b&U zCbN$8yje%J$fAvQ)v%JJ+T#GMEk+`KEif0m=g zA%Q~zw7>X13hmzvwS>?pm@rgp!dEnP~rKeyN2zS$lbyeVGo zZ+XN=_zYXv6yp0!$*_9s#nWLAZ>QTw>q7#cm%zGvgCF^Im^AOSuk6p?F7+KVKc$}E zVt;J@^JA_O=Ok@l#qRgR4)_s;KkQl_HpquZQka5AsrcXA`iD=-QP1_MEIf1<06&cZ zcVHk)^|$-Txhsqbhv7Gwz#&*I-OqK#A(wESyx=+CfM>t+ckcT=cPEffF^+Sm@rwi8 z|B~bSX5ubsALWlHf%R^T-247q-no+wWhZpPbFrNLqHmX9ejA#u(GB*N4jP-Cx}Or4O5Iy2L-e^AfKKP{rS!6tJy?VB#Qnv>>@Is#=UKYv zt3S6<&k_5=i}~p7!hzen)AttEP7Y)!{orAvc5_bB1H7QbVtndY|*4_77d~*IDUc;nti9GWC^6;G>hiS&) z|NZ7~zCtR7%2yc@xy?4$j& zm!-wN%IJvwMCIuZJ@L%PdG@V9@dBMwp6-dkjm1AAbEofgn@u2oe~$q=-%Ih$K8lO$ zFJ*t1d^`Khua|0HAE|zLK-SGh#Q!Nq`$GcvOQ3J^*&1SdunkVJNtoxE%_{3RP0oE&@B3i`EP@3v0XD!BcySl5gfY@^ zCXBiC9G1Z~v}0kIX#Ox!Ub%MRowbIk&UE~47;oL4VKc1m?0@e6JIjS<+G;~K{w{p_ z|M6Qf#xox*hj-z*`Si*6%kw?_jxj!upZD+Q(c;}D(7Q430lbT`FUTE$yCb@2U+g2B z@N92U@c?^Swy}Pr!d}~FF{PBQ&?m&#&-BXgdk>(UGWSU00y^lKZgg*CO!FXj?QD#G zN!bt^#+&@K>0yV}i%sLPyfNfazC2sJ%Vw3cJ$A*W^wkHRusbr?eYW<>=)W@re!5?S zE1t=aj66$|`Wxt4R?!Ups_LcFq2>!qs zW5bB>s8st%nReBQ8;TvmqwuchaBUw$|NOghV}yHBWKHk~p7Qa|S}-jFKGr_i z7k*`)9vVdum@j(;L39J@=gM+4FR0>fY5I0R8ejb#3Ss-I{b&&i>TRSYhPT z7xU#yn`2M$k=;o1@3qN3O07*Bx~F|{K{lsd_O_?W>8vuopS^qT_bR$uXlIVRbkJLIp)+>s=Pku*cR57ItSskGlkd&b|N@zZQ*fevEl&uYrWc9KWq{! z+t%WEc_Xd?`K=t zjy0*XE@uzp-tPbS`+SUeNZ^pbxdhfX`*127g-7D^V)U?%FZ;Zmu5SZj0KCyAUmaeQ z?*4s`4`4@F6*lddCBNg8_WFlU_=Aa2nCLmYk%q}|HcYkFuvi=*U!RG&oB!93oQ$LH z_kZ=rX8ZWa|HHd5xH^6KeepuRfUog=0^D1_jdH#>$MbVZpcvF003U9@?34ZCEA6L! zO4r(JX>l*z7cc5p{3##p{-55V-uu(1yQt-W@>n~)kCFL?0(jP`!fT;wBeQm-9Mu{N=c`fOC+&K1wK=f^yU z1U_~N^bVizpXZMei#sDv8vYLcz!$`h!djN4+`eL8#8{gG_^J)2idn;f3(0vgf zN7wS{QaZrzNz*ktCQk>Iqhd@vAamy{*$LgGUt(bS>0ifPneY2M*K4PZdV081x~eX+ z4s+;dKK!#$cU;-(p6C0`rH{VGXA5+nK6{R5bC`45-qpQ7d?5?%v|sNdUxN-DJRB1E zxFo0ef^Me@p#z4>$Qo4vyVdp&M)jRT$7^R z|FdCuqD;E%cKNvM9A>}>c;vjm_o47Zy>Y`J{VwI<72J>_^T8N+;ky8SUq64>ERPps z#YcDsWAGCe!=QP_8W^lR-w%VsVPk0bSAXai=KK2kgx{X^^9<|q`C%=-!!@!pPre@? zeFK2!zL)wqwCwe-GCSb&?G=4(&!p+SJEL4zd|-^ub%UKjqc!{=d7C zzVFFa@sNG!Gv6zYc-%b7@&5X?;^6R*z{eng^)0}}iz~myUOmH({C;@C=Gm__9MR?+ zKf;m9VOTg84oP8?bjKw4jbLx*F{wKc z{@U;H!Rp%Q!}a^}_k3fnp?Qd^=n3IU8pC*ZzOhhaYo{&G&gmutXbu^7&zjF(YS*&J(c0JiZYK+x+f` zGmqc&gM;u_{Lxr&$2>cBg{ji~de{tmk!Sb*zVE9}TcjVn_KrC04d0qzYHYX`cA3YWX1?F|1$;legMG#e zf97}tW6Wbdyo6==30E)q|1cPS!{;y?eit)1`&$nT+hsylc))A(nIl;kqi-$NyXNQL z-($vyNnm}C_UYVbI!CAMsXdh1cYDna(pR=&@0IiE`?n+fI$cVi=o#NHMcS*=E*%wX z&{gvxdX$aLczp0g2kDgm$J0HScmLi6$ScP?yWx+uMbl1(ZQ(aNl$KX+z2@St&5Ozx zW2;AvO(veDGEFUhz;P6@6*{t$# z*>h)q^I4CzmriUQu?OtV_nX@@nmi8dea`(n=6Y8Ntlwm^Z}~j>^z&8M}4z|Fa zIp4r7xU*yDT*o;7=lhEV!ec3d+0JI&%~qzLcLJULt=)VG|HVY`+c{A?^GkgTd9%K! z-@jvq$CALOQ;%j0aHYTYv^xQN+P!Sqx1CNyZ>n`<8N}r%Xnfl{=W-0Qyjo%lxq|3`DD+=RA(Oc6ZKrGygLZ}*n+a` zud;~=!xr_!lezHO?)aTRwtG6AK657~mXUhC^#6_2???{`91?hY39u>lZ@p>u>wnE}x%&59gG#d$9t0_gouTF#CpWJ=&zfnG)FAtO9aCodtoAdL(_Rjrc0(>HCNEX&$ZWyh9zTY$7 zj}LtgOiRPwk97H}b;q91r`PiNbyq?gf)W7c<*K)%d=PG5Ny)8?D`Tsn|nlaJ^J-RWDB z&i}h!sqgI1_tTl;)pSWpmpgOIXW#C_=zl(6>i%Du?-f3UOVeS@{!n} zIKmv(MF#18DV>%t{+DL=QZWTGKQgYljNLs%bF<~@<&ipNNT1eg-XjKhH(fq@eOMCU z7x|Siifu$}lg;eD5)L>6Apc*lG{4LK<)ztU_>mp&_AL(^qH~N08{(re*tPM)8~!ny zH$Q(4qnzn`&##YlhzFG6+p{s?pZiVoz*|@m?fxI8iUIQb(kMKZ?qz!{AnzUo7Mo|6 zv-$D|rRHhA*ROTJ&4F6IBbQ_KIGm;J#3aX%ZwA7B6X|LMP){ITKeoZt7|tnUTB{-ZxNQ_pP9 zTG*NX=FzXU=D*pgvV5{O`DlI5X}5FZhc!}mf7f$ur8_oww&rD1w{`GzTJH?L`CGp< z<#4<9cseBTVMw6g*S_&9>n@s|uqU?eT{)i!6WBKLti0!2>1a29yYH&4e%eOH%?{aM zb_o{{OxV*)<=TWVQe)ti|K{&uR=6}VY4BiPJT$l8+S%=7V#jR_B?Ec&an^i zy*^=r6b6U^koZ~*@RPszD>GIo9+0vzakeqFm4^@6tduR4vSSp6Xdmg{IO_2w#Y_E4 zcU~(qNA|Bwo~_@$1GqW&kOc}Kk9)Vrw_ERz`5`24Psmy9r3@xN{;VJGh~n(@S<2tA zi)=dk;02NKc3Gi+tXgZi6`H=Vh1*?OdqN7@c@IAX`8*4!UuUcKp)&k zBKYELf?!YdBmdx^P23R&@ar%_UwPxSX5-3Rt8v*nzmJ@SIwQeiSegINKTG-de0|tk zs=WHWOnEpihUiRI41f=KYka<6-d>$fr^6OL0Mn&!_LGiv*F_KM86Be!>4@|G^xH#E zy8BO;`2X^Iy5Idbo;1qur{8$-Jpf(BlV>)}Uf?l(ly=XT-({=W)>ppz_0Q0s`Qd*) z?eLfX*Z=+OfBwH;o5Vi<`cMAr&wlRT{m0LK`e%QB+9vz`(|_y7Kl_tk`;qxBLA)-n zygNI2c3a%gd~A5f99V=uWzwGIk$Z)`zP@-TcXk&p%Ck4^VG}uMPgdj-`R3^ZP{kKq z!jdI<+XFI}cINSX`!4zgS$)r^4sX(3vZdGTI6t4SP2aPTY)EQvx}&pK?OS(vmF?yF zG?uaX-0YccvvEGo`0T!OJKqj7JXgM-FXY3QU;5Sme(n49gCqLv_`$!Muh;{R_=0ix zA{#LX>?9x0Fmc|)4%=t{{%)Z&6^xeeJ%Ba9Y&a|}?|Huia8B!441lyTma|^?YkqU$ zQ~o%6yyr%E#lG)0*IwRy_d&<(y}KZ~z|W@}Qhr;TbW0lT_y653UGo2Q*ErJrzBqu6 z(=R$thv_vtP)7IQ16yJ{VS|(}R>p_2Gv|D9cdym8%{a|t9C?_r^L29<_i_JUgD{m`=<|+S zbcY=8w%Da__MUEq)t-@a8-0?hBk#3GpC56>VK;G^x$$Ct_d0m|e6NqA<0DJgHRKS_pzPP)WcvV}9_jmqufzIUD>4ZBXx+hP6sw)PN=KJZNJiSa;(^si+cK;t=(%GnTzcz~-;5uIL6p#9@y*lUS!+lOSVNJT5 zEXkXE*kJO0Xqunj+nWpRWqY0tvM+N+m1TDme+FOnynVNi>Wz(Oe$lhNrf2RC_j86= zfbTDE?7lyr@0(?$-2C(d!8$k-!ALq|J~DFlg4N3LiSqyY^c}#C$9ujQ0CvOha2(Fn zUmK)OOwbu@&Oi9GkJ%J?+1Rj$ zx1aUt%zkeqzw1nTlWtXC8)-2ny-H7aoz3^pyRD&D>6!N8-@UEh*VisPp^Gq{4Ruc^ z9+=oa{x1r)#|FRgbN^|Q|M#ME9DCKjIKeX+883U^F~1mq-6Pl~Ww$UydLM;V=H2mV z&o^H4cn-_twe8uw@e)pXzS-xO*4C$344{sz(tGcTvlH@EXAJUX zTgvE8+>0}{XEVv(UM6SldzQBcbf>!nI#-;EKe`isejK>D_KC0T{XH3xJ9&|5a`k+f zzUhwg%kAxl{Y2(97b<^VhaZ>|U+i6;?xaU-3_jUEc;kEzpOo8I`z;1=#_$fnJ4f#y zvrVy}bBMll%6$NS!ZX-rJbs-%cE67gdO7uPU?j{|pZ|y55zNH97+}X=c{uH?*7w@s zbTNQbKU5sRAN;;Q_O%&%Si55!&rWe8_g_MtDY7>AHO=exyJ4E}u^)obx;H+g~~`>qkmYc3qLrugjnN|MaPT z?$PuA`Ew~A=rA2Zo$=`cJ=P~3+hbyUiGi($?PyQuVJzHcW8!eWU&;>M1^6C-E%WvK zgSp`}dt`^kP|sfZ5_$E?$x#XqO7&rzJHZ&wd%EL}{7&}9UcsyOu6%X=KY>e_xZ4t5 z@D`uTmf-G(`Hv5$)7FdZDI$A%K{oPq1CbwjN_*b-&pzvKtQ8yFmYXu;C1dUAu<^`i zO#A40^c`W(?+dX{dJ zH(yDg>{&ivd`Bh{C3z_xCQY_W;G=FbO|>S0IM(zAmgLM==3?*53FqC)^45 z(`{)!h}`#lZS>LK{@J_6Y){qI_P#V*k{ZX}Zm1=45NF zWVYjndsTX|V?KQAtX8~8PhdMzx8!zvo#s>DS!|DA0j@jWfTrCFB-!mJdx5no$jHPbBOE9K# z{A*uq6?T$mW$a@odaeF_#H#1Exzp)1E`sM$t*H)kE>D!!F{4vOU z{U5yaHER9%VAJG8er%hMfK6e0wog~5?G0T$=e4-ixQM@KF8s?cUB3ApA!T9{ZR_v3 zeE4L2a1O>Hd6=a<>^e{DYYyWT17uUmo?B1fc0Rt&I>?P&TBGOvUhs4}%{ptUP5pdB zw$IByXxCng>$)3))y0Co2ML>!|2~dr2<; zdFQ2gqWp!iVf~Ppgyeq+b*->AL=SmckV&jJ`zsT-Mr{QqS#8F#=2qkKmzv zeki;=Pt9RG`wgSmBL32y*OsQs_=Xvs7sO=NpiG@LkdM4I=U1!|(R=bbU*GhXS9fH_ zgwNU;$9TqVyvoTLC4Y89{`x34pE_gf+ukW_Ec|J^^W*mfw6(_eMmt2G?3+H?(52QW zHr1zo+Tq*$uNO1d9k4yL4su~r_FI0ZCAW3{&+kjMAq(rw9z9z>QZH3zZzAoH@|`L# zZ7i}+{*C>nG+s)ZSE@{3_y&96X8x9sL~v6%e1uIf4cU7sUgVK6;HT91c%J-@_n%U6 zK)&Bt;bIuPr||hMy5#@Ed~1Pw{Dm@c4BmIVPZsRee)C0qPkx>c;_DHgRouK{-sA5H zcbs@gew~TNZ!nA)iY(!pGZc(~bMQqO`I5Q)urIKTz0oD_kn-X53)xqDd`{OMG=NhM&EiJpR-3UDwSY@9eF-b?mx2ZE@TcD95Kc zj6=tbkFuwo-x;qAd8x-MKC?$Sgs*g;oOe>Lzkb@1KYMA6uxiH~cCJlz`oTm5L-RG~ zX?VBu!dG~Hh+aKco6d*$rK`@%e7HP0kzZ@E=HyAY={$W#-QBC#Z|DE}zyB{?>pJ;q zb1n-pvNAT}&K6GL0XhGeuQ}Nnf@}6}pKI>Pz+?Un-^MiO-i9rzYdmw|U&_a`6>FeN zc(u3oU*5R*AtU1$1OA(5(LU45=GQx$b@s=*y|!-ax#a)J$-3#Ny>8uPZ2j4VcCf-& z*-mY;1O0d1H#Z(o05_f!vS`Cjsu><%dpDc@S)BfVN3oIHiebd!=%PA zUf6@TowU)GZp3eXf9F*@6<~RdqmD>Y* zl-$`R8!h%@OU1C+7JJL~?A^<1?E5$z$gg^a zO?)E^2?wR!L&6d5Q5Y+)T;H%tDt@4!`TsBmAK_iToE)ru$Iada7(cASV{u9Tyk|V) zW2fSRc*EC@``3JrIL12p3Vq=A+>4QtGh1XIe2r)O(0;IA`mRhHF|WORO}O+j*7C(> z?H+(k;Un84^Zg!xo@XoM4m+|BHbzJ7`R^TnGiQI(1A3IMrX%XPZB zrJMYII!$+WJ(i~r_?)_TWf$7*woyFZ*!YvjGu<{0!Uuc6s~A8#^-^omURvHWYFue{ zx!YoVrr*htjCVf{>yR>7r61ciW_^95$N$+cWjhA4tEjQUKzklGmTIG1A7$~y-juyA zJ6pf!=nQM^#WHY%HLUd0>EGn(E8Q-}-R06c$<{t0m`ARBslUbISN#nW{cPjI zzWU>9V(!=zd1IM}jLG&=e`VfhxhaY<)AO0w_-t2-b={!=V&K}64^nLGVf2_A}aT|Z%f8&xTYOKb~ zcJM@w^*6Wn#)mo5unK;ev*&ziSQ0kE4|u2?=1jc#-CzCeJO1)dTw@(P+A#;tgpZ9c zHGe#WZ_3FcjO!bKFcP-FN8{-;b#3q@Z47gFPXWX66Q0Kx{p3Mqucbt9>5&BY9HW9`(dB7llDD^{a^>m>?fVI z&vcmX+Go0!?kLaSrw_Y6(?`$F)O1KcI=K@aMs$|F8Na+WXlrbJYsU`Gbz41Ri`k*^ z*s=f5`Y->p|MJ-%`N4mA?en$W_1YZy{CI6l_Jho8P1zxS$cY@Cy}}Oih9&riSv&5? z_gr7k)@@vU*-uy>o~wiL=0e7etP!yvWwl{<_7a{-jYV$wvd@pFaqm9T`fhFUgKxYo zIv?{UMj#_=)6Uv@=iNDz-ghU!cNXJHVGwzf)A~MFbUM9GpXo7K z^jxaU`mz)H%ubAD&C0W{J=LdYb|w#Fl5b<;k8Zh_Gbj6;cDMO|&+LB3hVtQuG~ASj zCsJ7W2mabW{_Jo5+y66T0PDdE-&(uIf;Z-&Gt$WX>a>@#f!1Sf;iq7{o0bmJkupWoLGpY8#)?+&1KiErfhIKbT6 z#f_;R_kY&t0ju)fK#&cCyh-nPA8cB^8dQ~Zyo%by+8kUfBE=zKWLp~q22ik8jp;Sw%Q?c*q8G@&-Lsb zLHyu_UfCymfA`sEy*Iz{`=3s`-Fa?IZRCw@k5}xmw|vR`&F|IQ7yAcyq;%ZA;Gce` z+k2``n{;`%1%0xeQgSGNo@$?M(hFlZm+{%M{$v;?#TV=e5AY3hN?`{a$@e?=$m^@k zcYNR9o_GSIzVFBX&5Qx?W{z;Dvqy7CVO=(lPncw0_6=L6ZjU*Pv-2CTQiKP6q~@9U zFvfv-w%UQ#zd%(?sS zhRmIZ#AWsX@&BIbxjpK>#@(oxEc;>`*$|&c-ieY z{Vg^YW9X}GHn@+o`&Mnl9gWZ4{@~aD$<%e@si*sWubR)N>)$f&<gh|#N7L+E7_$G&)?5k&KdHbf!{8Bvm7Ag4|8_&lwPp-z3*G~WX%A3Fby|;*G^ULF{dtLZz z4KSbI=L7IZc4USha^v&eHM?W$zD*rp!uM!HcIuonJ==rZdi*?^_%Y4m`zLaS88E~? zkv$z@5A2KYr}OXw!Po8r@+H}hetbS%C=Q?_^rn=KAUaBy=xMq~|K#ZcJ)|SXOy}bZ z&+7FzPJUOJzQ$q4>U^j0ZD0Pg*ZQwaeX*+fjjs%!yWgL_fBd~;_JcR=ku~UJym;MH zW3pv3CO_DL@>S9)>#OrvF^#$Oji%k6VO4F&NO`e*alneB`mXBcZyU8`dyVtdaX@^qA2fA(=%X}jpu_YRrO$LaJ!gk_ zp7yfYMfxobr}i?k$)3{x0HpH_^3NBy;nf4m^P;T7c@wS^mS(zzmE z3TyQ74pF)90FW`YCkJ!of0bE>a-?0jX&iGZw};xr=bo~EZKV3+S00bX2&-GeT*u%W zmWyFJ?_SUpF%(3uxCD>t&%5xwKuOe&X;75=iYU_q}?Y4Vb12l+m!I%_cBeWYD$Z~bJl6FyO8@xJqGKggATeJZ`TR&!XRJc1L}%U4P1 z5~3IMkDkE_ZPmjEL@s=Rdbr`+J@KjWU)SCCQ%Q4;+dGXg6ppe_vLHvgLAK8OQfKAP zVcK-YCR1&+Z*SCzQ_1x1cMxBEeVs$t+N5DibQz_y>F=(~m1(1`zEW$TD|gurIqY@2 z?dh8iT06UC!(^gdUL4Q9$%GBDL8-anfp&PpAMDBZvpblBPxI?D)A6j0XIS)If8p<~ z^Zs~lz1lgmz#?-v)0iWyGk0rOo{i(vStvf^b>}w>(+9uW$G`dg->x$j;QO!MlfrcE z+plaAe&CgE`5PFz=$n@8SPY=9c)qw@Jw03W#dYc!;cX?bWDjfYTYuk7*L{PD+B5qH zLtw6UVg|7T8=3lih0pTt)A>vKg67@Vh#%=!I!MR(pW;_~EU(@eD80?Eib2H~+G@vc z<&C9%`mao1cGEq8I&IjZxImm;KYVG6=(;-J2zaLJ+OZLMt1a6xxA+$yJD)Hp*^v#~ z;G5u`IH3E*u*Epm#|Ea&ZgNZxm(uAIHyMy6-Xc6BHcVzxb;(X@Zu6c_r;$FzzolQ+ zY`qBIu(+6~a%_8PxOtB&{26ll8(9iqMN%d)5Cmdx|N=$w^DjyOgd()bXOT0P^RCUXXvgn zdTf09E1lyFJMql_f7cKE;^ap^d?`cxKRfiDAiH31#*OfAd~@rIS}#6fhPcSLl(56I z^O|!7Y#~==p4F3EI2|^zE&Bm)$Z^kmKBr_wE_kzEeBybRxB6mtJSW??)0l_0UjM(1 z_4U4cc4ZbBK<35y=54{~(ktx}c4}Bu5^oZ}G zbL#W)bWc0-r;EzTx;EsC)G0fio+3tEu?rogm)R)&J=fjzSRFkM1N6Z+o5)_WkDkdP zy|EVcTDqaT^kF)7{R z2lxR0hmo@&`xK)~%Zm$&4b-_ic5jzX9X9-WkSY8StNCpcdus3CgEITa&wpk7A9?oB z|D9()QU8aP_(3~3&c9@r=?(qbZ6urKvk+a)cBNBauVU`q4$@A$ithrY0##rMr`0+CJYE>921&03Ywv*IK2QBHQ9S?4|7 z-~mqH2XA;RX5k;%n{{+&FONT%67G10JMJ34@}vJ@rt0uq>|ktu-+0=Z!}`g_+|4gl z2KTffSNj~M>QmmB+G=M^;};{T+uJ5nGJsipLT5kUpZG1Sa6jLlzwj=WKTyw4sBb?$ zuenFbOG{wk^Lkh73~Qf@1MDN;?-}v`-4$p{7m6FihGGRa!>`fZ?2v9 zr=IC0qN9j@8cQ9UlQtfGW^ZgwTehT3Y^|Mh{h$B&|2@eazjpD#4xIh*A)e4ry*V03 znP>6!es2*Ebeo;@|9OQo&JA#cJ+e#uix0vSb?jIB`kdnzpQ?ZIQ(wOI_iRnAD}2CX zW%A^R->11hUveM|e4=yR-q$Bz{Bz#!cz#?7kTso<(x-Itd=~mfKj`C%yB zkLhIj{h3~S4nxY*XLZV_ZjUv2-u=G3dNyV)Y`16r%$Z+Io;;*`44|K9wtCI)XoH9B zi9BIkJ{3-&=}WJ$2p*~D*I`ZZ0Bmt43724yvAq+}UcJ8B!#3kuqq(zfDS}PfqV`og zH1TSTfhX;ZEsv6!KIA1O2l8TJm495M*O@OfM4J%+!q_uUX$aw zt{u;>O9Jf`of5l=1NeJ;=~;|v-<5f`=ls2Ix3V$uf^zp}`8m3z-niK^-9ut()N^_p zK6DSSFZ-CbHBx!{%&%(W&Wx?di?xm8{Lik~)ZhJYzcyp-e7%%CYO7w#mMfoiSMdOw zF;_f<0p^g$E7@7QHCr#tux91iQ&`hofVQv*&X9}owM|yqTc7b!u|P7CCeQLxvaEd1 z<28QQ`=7_wzvVaZJ@;>>x912;@dqzpjQs6Z$J1j=K)gr4oMo51*E@lI9zIbWoug}f zp#16dxbFb^ttYyf-lm&9t5YT|?^(SRpUU~IYy{7Ak3F%W;%jaBe|Jp1*A$y;YmD7i z^(iKm!m(?8-sZ;xdFEF;Be(;ACGdmK_x_y!cJ6QvQ5ObzKj8cio78)DcE(d9+bmpJh44vgaz^_tc6MB7M|$Sx?vc*l(J3b)&%$Y^Dy6ges=)Qg6@Sq ziv^qo#R~f1<7v(ryVf50$Cd!Suy<^R4$vFV$i9jT_Vr%w>+`);# z&7(it%=S9}n;#W>gi&FUwUdo?i-)XL9uCoeGV}~z^Y!cs9*F^p17H@JWRE+BkxgmT21FCSNH+P~|mB7I7W?%a6{y)6vT#=uLN!~p=?}t0E1{T2| z{$HIqAzu!Ikan<5KUn8`LF1Eywg?~E@&8gXL3rMY+_KN)MHj3QM!{*AElmf=#vIzg zdiCs<&leB;)gStW>-WH70q1}6TJ(6@a*Xu+5}+%nnduL`5#xFHPY3urW%S4XvnS8H z&sWALMs$RJWp~nSPhXfsZ|So;dHM$j_+Wa^9{R49P0)G$*b6_d-r0Zl8}YOFApb9B z5Eu9^kuCXcAa*ED*T)#_wK9$&HVlxmwRGM)MP~-~0)vosi=W}BF_bxfhz+cp zeAKZmDcKY!Xs-&-b(a=wOl|I-fHb>XgA%0NVQ|L?f!hYy2qNCDjTZ5m<@tB@V@q}Nt zkX=Z-<5!M<{=PdoYgNv!vMpo4Ep4<{Pe$5ye`!9vO4$|OBJE*A?*OjPDg$5g-^BoY zHmq{ShgUGj`^nw`z$j(LgFkRbA9?c{8&>Hf76=Qa@u3ZJ4#RKjv0k#VMr&)2;gYq( zYFMjY$~Mgjm)!NjF8$%XGrvA!0eJ5$h>X>q9)HjO6xRFlW3D^nPv^P6??34V+oP}E z6J&?!6&*t9UeCMTmZzJD9??I#pKqtjbPy)EgP`ZxBVUc!C3}#E8Pm?jINFK7-2?Q! zt#R0iHsW@10h^WAe$ueViACetn0V;@f91wuYt|r-cWdCstr;Kek35va9QGH%SoNOO zcUGD4)9{nVFm`R^wUdT-J3fY0Fj6@(C*I(zdS&mbP59M+`I4LelgAwK6_3jBLC)8h zGuA|o_)zw)d>sAWO#(~i>z>9wrC;rp{c8Wzxua5NzfPyq{H>P0YxyGk*O>G&N?+L% zGAEK(M}O&j{7F62r}QhI&wtBn!*;SC?aJeUox>#KcR*+;FAB7M42)4Hx9hDFx0q@q3 zOC&YXT9F*yZ=S{wNHoNe>a_+Otu4V`!_7Sl!&yUaxG>c-cP;kgt!q{Z4`BLTWsWI?l4j7(I?y0qTUcV#rc3Owu#`uC%R4#>Au*T&hEq>5Z$Nq#m?ev_i5~h|MpFadUyTWus849r0(0? z#VI#mae#Ml-YuvXOCxjT@9|OmFCOoF%kH{AP|u$EV)(<4OLzQ{R~A`+dFlR4KD{3x z-*8U5@Q^)*dHTwevGQVq-DkrG^6zi+-mH_$SF~TopLjIZ$G2$po`8xk>8T`KX@f9ZU&Ao3|hsWLj;;C~9 ztk52Iz!-Q07s41R%<25$J`!HRm$1XLHs;AjMeD~?cQU88Pze8Dv!)kWGe9WMln3%achmOGYrNah!LI zhX?iKErmy9L%vdT84r=WXMJ{CZV%xFyT0wC*BLE-!U1E;OO1!Zb@zb1D{5?Q-!JXH z#O?C?bl7>QwOwlYK9$*TdfIxHU4QaP`A>)d1Dn5vjgRg5&za@ZobsHpD&fd4|QyP zV##=x!i2CzTlj(G`FZ#Ia7G(G9Ug^0@FuKK25;1h8}tzez$e%SpOnw}hODK<9;Mb# zrm)C-__a=Zrj5MyOOsjh;`hmvj61*CS9YCV*zePf8Q&-EK6rf&3BY@Jk*=hB^b20X z6vW=>UOK40d^QLR*c@HXw@B$cJb@oGAKZm|O=N!(5 z)oSa=`OP<-;oMY&%br{Fk_KZ#!=g?s`&2IT`DVt{7Y@7|NH&)*P z$s^;yE52H4-PXkChb`d|tn$tu_P`1FC00-`27qIpl`Df)%8fbi-Nv|5yuhh=kjJmP zQ#{y%-Bz`;{^Uju$+|O|J+PPUpZ=$ld!pmtA%TZU!1<5;?ePG8VqfeeJiCK5G@VReJ(CfVS1zSz^pOndXH*Q! zC#8$$W2XDctGlGX=A_^1*amDepO`g$ma=8BzCDE}?6+rU5tw6-XS*v5U_U6Fs(oeQ zgJ)O;k6@5@{@p)z4(ZGfk9sd4?>-Yg!7wC`NBndSGC$eV%lH=qG{5yDvS8DZKD)0^ zhs8@|^$`6y+8h#ihy28LyZkv#R2_p1B`W-+FhUa z@PWKhSiO&D4mc8S6cdD_;Rk*`jPvl))9I&%9PJ~y{PfTM{G@c#-e}XlzR%x5pH8Q# zL-sJ6v@Uzh=PRS%yMCmLbcGz~B-yZccA%{`^haNH+R#C=lp?ywj`|ogk}17e(9dTJp(Mne>h_hM>CJr#BI33R9zu8lEoZaK){M$b~=J{ z-sBgopMSL9yFax~l&?)U=sf*U&S!f^VlH=1^h?}Hzvv$O(pF!3K-ZEVokPYz{20 z;Z5fbd6)#7;DKj(7zDG50mKK|&3nYrMoa*!jNLr2L|z(^OZSms3>l!)>A1^(T(mew zdkhKi{p>40n$M-v@>06Yj>XpWn{8wd#l_0R%Fg}lx^Ms47Jtvy*b(Y?H^t-PY2)($ z#%8lHiftLk{5@xT_<<8}ij8WAv{PO?{-I~%Oq(C=_3<~s)(vYrkH9dv2s>ezJS^=! zz@Ey(RP}HV?&kN49XyAbms0#2Lw{J!uN51(Gf;+)zAGp$XpgKjA8{!zAP;M_$KetG za!%^_Pwk5n#60GH3>~{~jCF3mIrEc0EXB8VkxPFMtxn!=ppdD(BLni+r?uIi`{sR& zdOAW@_L|S8b7Xm!yzy&Kv?Fip+xIS=QMUW|+S_~UwqANeU;HKvlJC6}-65;=iw+?^ z-?(%~-Z+RZ8h7g0xOdP0!v%6xFGcaIpE>gRWPyLYT0hFRcAw79qduChnIg{*ormwcJ%m2+Q z#e29BujWShHa|YJS-SWbT6TIJ15|s{b>(Rv_taN zB(F|CbIk95d;|0w*Znek4YTC=6j)e1u*U*0m5)dK3=C8cPxJlC^ZD8%_Xgo@WnsB7 z;BwdkW8pPiFBT{d<6%G2-@5e`qv>y*Qe&9YTyR^Puv?0f85!x54DzFwQhwPv+j*Uw ztl3>==bX2R8|;rcq{#*)-~6p# znrq?5m`F46B7DByKa=usJ zp6gG?$YuBMo_$yQ`~KM1W*vPnzH(FyAa#CDPxJYB6$99l?#k#Pxv9f{x`PKcYager z4IJPX#oeCyW_E~Yc1ib;F_dXTZitPG9gJ;U_1f0gI7prOv^UrMMrq6kf5Ip@3b&7OKUN7$o4b0i z-*-anqi=)Y2aFB_?~+rPMrYX!{iVlr8?jAw&h>mV+d|W~^PR(X*cM_Z?CQJ!#`=99 z?bzUMZ}Pse$^P;=#@Ana*fTL=*f@TWcHsm&w^n?K8Q>FMJtMdomegm*j2$72(W!(u641N-65ib z$wNv$QSy`GLwPc5tYqgI8N*ug^Um$oXiv$Y_(#6Ge6q-Io5wifF#0QRkE-8efb#TE zee=pIqqmhwkvhEO^QFqH4bG4wS=l#!{ab#+`bLgDWnb)h+VQBz8(%9WS84fpClhPY z501#UAGOuD{!(pWM}FVg9zXQLxgO>?e}p}i;S=^~3%h)y%-_Q_em?*283y(|?=(kW zJey<3PPk<4>H1yxdpdb1u)fbGOEy9OU^kLiF1B86?;7bS|BxlX@ATV0*&7_0ceTTA z#REue4jb6$eY&^4Jz3w?(pBf^U5Dv3TVs1{gFY&w|8$?vM&e}lqMU6x)3e9E1?bGb z+nuuPgRhzXf7sHruaTP5T*le`KimkP@jGLTk+OXh&-%b!{Ud8>eNto|<8(LKoq+F- z<&A0Wuq})WYvCoCleZLhqV^&Gt{s0cpGUq_Y)~HF85iDa3tyF4gZ^Q1_#HM|zcR#U z@DEaFV}1iK#w`}qPn~l4-9P2$_Ov|N@h^Ca^yPal`Mlbc<~K{j@VP#5(paN1GM4xI zmfrLG|4yujJo1UV@6*_2@o~_qd@rDP_&21g@B;HET*JE#X%BSmZEMt;S-({30 zCvA*vZ{pt?@Gn&^kN3{?Y-hjg(69Y1wZ`)5t=C$OX;0PDd1dOYA$=*;MqZtENIug3>nYX#{3nN;m zlsxKKG_p_%QZ{g3|luU-G`KKt1J2EctA z(ud8m8Fpe!cFL~U9m=lhJzjQuX9w1&58}Vc2Cw?T4;%3S&k?(Yr_xEo$Jw8-SbKT*0^u&c$)oSv%)^(!0~F>4WFwFZE21 z;D!Cp=i@6GTeGqAJyK({-Dx{l_hxJehA2bq$UVT0Bl6^)4Y6sqhX3?u_y5@>d7${v z_8JccAD$;qBZVz&cJemPBhD4^q@6nf-}%8RzP(srwjXP-ZWyL~o@oXSh$D>$sqKn2#ff+S^Ip>&`ike%SvDfi_SmVE4%20RAF+k$ z58eM?o%z`e+=YSJo0J`O&o;mL8{ZI^S3Bc7yE*glw_gC~bc+7s`hq2hXcn-Gcn;(V;D!zgp%5C3>G7apvW?5)opSu5XSU(^|k-$(Ms!5=CH=q^B+`qoZ9h&-jOM>}(y zr#a1)zb;=tec70?vo~Y3_SW6_$q8Tjwl~%v|Kb((k@q&Oqy6+OkB>_}Uu@7?wK2~= zm%ikv4W8&LS?}Y~MfLc!U)HA|J#1a%fs93;BR0eircb+yi+u~%9XH!$FP(v@W~lv z){pl1BNz72T|qI0@!*|%05L#3g(vteZyeYFTiKy`@Be=**8dwscjzcg&=+=0Ecwp$ z&c@!+OZ$k_8y~KoPTnUR|K4v2EWZqQ+`Yk4`ViS~y0Mcwwu~O82TRwC-I&=GUBSQxe8Dd^ z32S%X4^x!eQ~qPOUwJkUo2>_y;oF{u;l?w@IquJS1};>u4e|^R`5WU)jiuZ?p83`M zlKGWM5k0D{_Qq7Mk98DJIB$Bk|Jpg@I$ufstzP%|e2l)<4_nDV9+u_zmE+aeNZ#2v z9`!eeXLyA(B?EQy%@ggn8>3#(d@uy5X&;BmnSjMroonL(6J07L+C&e#v?)1zS z_If-c`-t~^x%^J;GvCvmwtua;Hm#ff({=60$9}<&o#*g`Y{`Va)gNxqVSbB_v*qr< z_N$FPKM z!yrVT={dc3kI(PJ4{gN8U;dtNO#5MXY|uL3Ap7#oU-mZd&_+4?(w7Zs=T6Ps%9XJ} zlrJweF8*e`Fz){2we-B7XMC%-Mk$<7hRoUD0EAnmon!R5=4tTOvv&BfUbu<3{ABjZ z{@G}lY)-b}n3vgwXqYAs?!`fR@4m#X7~`Caw3&$oI;c;Q3!mzrP7&*lTe z%%1b5c-AlfFGX~>JU+~$9X`@&{)lf8+a#ZTeto|82max;&zFz*ef)`crTQiJcq|T( zn%lb6;n{jxLwjxS@x}+>iC(lX__GdVUDEbY+x=Y6_N_~OWNbRg4(KwS=Ktq8`s$qS znZC0LzCRn;)9j2*q3SBnHs|>l2kSMzwJ3+JaM|AC{d9Ws z`Mhrd*t0z;2FUh1^TB}X?JW!t+nFOTCZ5p0=OcYx60pa81D$U0^>hFp%vkU0cjfH= z-21CL|5-QomJaB{j@Mq_?EhV>HK%(iSci=9|J%EJRok{Mz3(sV(7p@>R#du#ij)`| zqr?ba5YhsHsloP{`P#E%I0nz8h2-VD++BPFFo*F4G8J2&HCPw< zrbp~WPzJxA!{v|V`~S<`*}xDofc@Fn^Z}&l3x5Frd&_kf)E5?omwW!>43E^el|a1j zO!k+CoM)N7xZl}!_rL8oq5IoE?C6ea-0nMcJ6mE~^p!5n7zS9em%&9+zw{_o>E*FUqwEuZg%Q*ZWRESIm26 zx3x3Y{MN=M>@V(L`@HO5TX~oOOG>j%>q;KZ3>J~Ia}ng7y|(yY2-}ni44uv^Vgi2^HVO+8E1&^JLh6&FL(=p?E>tEv&Oqcw|4*F!@4)pNnJJYy&=B15mJ@(K3&E;%iH~Bgj zW%|NiG7(#UVXncL#({BUKpy%R;GZ)4vu2z^4<=VTTfAFY+#!$WV3M@&-QMK!$>OBH zz5kXV-O^5bZH2hW_~s;AI$|7iSex~jTie3yKg*0Q#C!P)`2p@*(%xTjF8%8rw>gxl zQ*ItuF3umo|I+4>HkT0JN~<%TJ&~>b*%Pj|M{V_0KgX3%c4B!tEEe>!7JHa7pc}q> z^t%Ij@)OK$J^GU+owSCd9;6S->4|pfQE&I@8=Xt<*sF5q)|k#sUu}BlpJSEQr}Xj( z@(V71^Pg>KLpRxGWnyb&FZMI-vvjdGf-&F&`+^m%SAQXlP@as~_>$RXL;71Yys>9% z&W6S7d&f4m^=bpV*s*Zrf8)SM`lh|T89#ZL-+kL2_&9JJraD7-K+j+SJb#^I_P+<9 z1Nb4lH>Uo^6|0N?@w|4pp!Rfp2Al{ttXaCa@^FK_ngbSvP4=jK z;?yyHR!*5xB!>C+vO+7)5UxMdFxhYA7bk*uZ-NL-sE4=eeK%2e)g11$q%Q` zK)!-9^<=NTwZ{qc(VWknY3E9Z*S&Y+H9AKZ^oxfl*L%aKkID+^t5_Lb!>e>g&|ZGF zlctB_72K?#xpjoGq*YDDxGG#^q(EGOSZUhXVZIj zzy|te1|NGnTYR_G6&oX;K|f>6U~Ki)VqS6foqgFSyVedjT8n<#7E258p|m<z**$hi&!OR+=2_5ti;YzW;w*tP{4t%i7jAIX0#??F$x%SH=#< z&9Tb2`cLqB!(SZoAN|Mw*%j06cLp*Lv?CiB>&)pG?1<0YLnog}moF{u-l{L1($5(1 z2G@!wUrwIIwLb5!9t-f@#Hpf`~*;q$?&Zd@rZ$7b@4GQdP+A6u^<7cz#=_dX% zHamA_><0!c9lr2?eJayV|7^|N`dhoemb4KU$Ti-dv3Bb8YaDh%F8Z3o`B}g9hS{)G z*%ik(yk{f&-p;)r|J@hk8c+ZH0s7@0N7rzFbF<~%1;q4y`3sjd@B@r>D`(uoD~~oW zNnn4=30JzuJDZ~)fQ#ojs>k!rymR+=|Mbc@@Wnaq|CZlNYuM|wgE{;_W6)DNMIUgM z*qp|t&-trtEL@1|*+t*x@DOZ0+D^8nZMG!Mma$RCm#ocKTzXT7&(c@ld>^E-cmF8t^E*iDz*feRe;`eYnuy z{R!Q9XWZWe;?Uk3;?MfWwZ+DccVU)LnenuHg0mDmTQMCHs*B&n>x{SGq%B|Y;ww~d+;m2I z>DeJpZ_Sx*&v@x&eKx&3@;_OygVpZB_1VXDoQsXc%i?L1*{oQ(dLcO*r#k~ZWn0>Y z59F`CGJVKbJ{wkM4Ewj=v%qf1TYRi1LuJmuIIY*b-c;czJY^%&u+-Y%sl0nT%(d?Q z4fY1C-o}F?@ZY$`@17WL;|h97hw(mt2`|L|uv}XI_(D5&V?5)(zLH0a`z5gRfWIkr zM*Xdyvv4*-_kZV1Pxy4&TMN{%zB48v|^wN*#Xus+Vu z7clP(us#2vvkAxN9_#~dc|+(tUh@@>{(|w~kn`cE;Y`7uyf+4%>fJscBChru?f6$3 z2glVjj^B;pcY^vime`wsZw1oY_#WVWg8$OnfVEktJ+H9onLXdKZ|7TE@`}felRP`8 zCFctdcUIMDPkwaGdHHu`#BsjZ*%o)+&OVN34{O}wt-ZXq%{|lUP3NDU$*1e~&>F@1 z)LvRh7msbVPX^VMH@Htlt$`SaTJR=|I5&feCRZC~`292=87vo~c&Tem)IKL+Dx z8_AjMvm>^pueso)V9hWRZqspTW$TUUa);7R9o~i2dweUS>~}}wnFCgv10N{E1LhOc zZybZ``3Z|({`UU=bb#gN6;|Dr=UaO_csqaGy7r&F-R`?N8}I(k#+f(+a?b})?@TIp zN2fE+IsZT#c`<*Wv&GAAJwNYHY{-1(F^2WHm%&42bSuA6Y)<829vfgkY{PH{EKi&a@Ce-#Yed?aY&2^LyG)`)uFo zz&fvuE92HBqwW43AB*udd5ZJ9lqYlLakROuQQp5vr;Wcca}LUiYcCeG%P(lW+Sg~T zZCk5yXHK(KV|Q_SZ+1sp&7Rp*egIrDmwl;+1@s|% z6+5?u8C&e^%w61ii?bQAJ<)e#cRpd6ygFlk6OoEpCS4&QdvUEVU%+AGi*bQ@al5p2Sqq=HyPJCWEw9cx#FcrINS;4CTYujDe^}@4o`S2L z7yfsK&Y<92)jJ1e^u<}`8#rt40?G=;a`)F4ZtOn5TUWpT4wNp?FJpUmFqZM@GMl3( zd;@_F(R*#e%WRNcxreZ!cqR;5wzbumMh_`)mz1Tc39`w!oLbuk~m5 z^tWI=GhJT0e2R%p(&~<7+J+soE^J#kf&(sCm#<)5_KW+a$;tTnJmS@N>(?HRdFA0O z-Y=c}>Q_5$%qftKxH5f?W7O99oMB!*T^J~agPrTqPrxTaN=MzXK!;H=ey=FT)x&hc)b0_;qh(qh%1WogUc6_F`3}>C5H>QD>sKa zeg}R3{XhAu>%WDmo?MS{@-9|yuFhbVS7r|B&SkA*+xI*x`ZVqFDxXbPS9)tt7T5E< z$gOr$x1CAnnq3#O6*eK9*{U*i`3KVJyuBI+7QlpjM0VC2jP`!7e7$#U>ulfldz7bq zXPs`_lRdx>V>=tz9Ph)&em4Rm<#8>%)()<^L+K04;p^ME|2MyZwJ_fJjbo0uKrC+! z>d96ayv8T99)4?M-Rkt=o4A{5chCCX$~r$oduQg~)8PaD!5{qhi>v7ke(i0)vvD5$ z0$iS-s7`*J^Y#|tY@EM%{yv~H;~%_Lu1`<<-aq(%pBHaZOU<3Siru+2$&JqhbiWmX?{h# zE|zEGIK%qlk%?V19iG(=Ml8&{;G^`&XX@aV{Hn`k7G1W<#DEb>6ha0+WKc& zeg?dyUTlwNW452-xsTbtwHdEDj9I8`oz10OS+eE_$ZIcc9Ch^DJpSgfF={vaYwJwK z+8gKCuJ+Ywt1Nvgp5^ICx;f)?-gx9TE z46^c$*ov8)a5;nm*R`#lI=#q}^7Ucznttqs1a z!>#w=v_7y8?wbeh#{b3538$@59xhs|d!;ofhx7Rb#+MsZN~DW}EVCQ=P!p=r5TWS8Sc|VBY=V6>K=- zM}B}foY6)a4(Zc9FKmi9SkSKYj2lN;>9aWA70-a1Fr+fRFyk58w3W?EZ$?F9MylzuL*4_^Q$`F~;9*Ypz_%NdpyH)dxv z>!gouotN(^%Jg;RU0WD{FphzzwjQEN}{(mbVXSYc`fTW!l4Yzkf{* z=c{>?zAk|eSO1V)lQG@Iv*fSLnbF<2R$KM*>I7#dcBaa4f4b%UKVIB*fUGf9d+neCgV?M&n8s$gT8@E7x8)@^<;As=E;P@~pQVkxz6%T=fF8!{V)~6A*@X2O`)W^H{cKC;t1H%DI^Jh1()c#+ zKF0dA4zaZx18%W*cmf;4Ef{jenC(7xO>gDZ!J7ii^V??}8b{)I-){ZCspj95z;8I{ z_oXmS!2iZDkF~;b;~3u>_i&EBua&}i{q4=TFxee5%(?DC-7PO zxXD@tc=jR-&=Z`sCLA!ha@oKxZpZu?l zvvpSco5QCoxh0ow;nsAFZs2e_jbG_eI!^cb!D4|Afb-eITKBdGzCnNA#eUT1FWa|$ zT01>WN5ym#u87GhTNYa%KF3qx0Q=VtcF^ta4aG1-TC7cPec_N8R?YmaY1juV;h*&! z`x&=&UcW(}VB@UQz7YS*OULoz?(*SxG2D;GCuiW5!YucD65uwjR~F{NId>fO zuulln*58tBc*b|IK9~vraH+Xrsx^wudkZEX+jRf8udoyDSzmiAzxKDS2NusVX2dmsXZ7;CFw=we0Qkou9tj z51q=7U~h51eF^zBbkqG_uphDUl-nygSrhEQZ}5rzD=)#F;ufexkD~ z#QkFD+8H~``EN`ZOPlolo^#SCUZvxHFH7h1SJ@7|p)Z2FK6_y!{oOWS$6o2UGP=VL z=8xe2>_b1kG5yW2u_yaz5Ay1k&22tF{NMK|_Kpu>ly!y^-TjN%8e9;U4r|2WQg8d~ zu66MPR^8#Z=tu1GZyvyD{*pDoy)e?c!oSL9-r8q-=~-4j-nZvM@BihOJT6@IT>2$` znOq}1{Q>>zTly^4PkH=QoASk#zZTcNxc2gul|IJWzE;+F?fsT~d(^gmaqrA4YmL<( z$FKd28@G7Y;oq5;?)>BU86WGb(?>dfFK#TcvhMxT*Rstv(&10y%R7K~we_2Ti{E>- zFa3sJ&92q45wU!BDV@EtscFmEur~U_8g{bY!L~FEb7z1Ta7SNQBEV1mVGOLv2Y@qp z5-!0gAs@h4Fbq!nHznMA)VUY)0bn7Xhi}@*!#x=8_fEK49Bx=QxrM85WkX}Nzjcq? z_7QG&r^f~1Dc)#*VXb<5AO|wA4_u@k2f=i|Qx^;E)n3f`);0fp?f35`$t@efbaiIZOKfR^M{}Ey{u-wI{&Bt>MvK!j{7};vFIoJ@b9eHzkN>rr+3<9ljg7&d3;~qewTf3 z7-L=5D!_q>7v|JQtQ>}j!H(vSlV#f8; zrZk<>X7*Ed4Bi5?t2{lHU+LikTp!2m6p9NT^PqtcGo(<>Q%NKfQn?8Uw zYv27iJk$r4z{;>h9&RdwKVdR_f^YF4?l(WIR&K3fpBTpbMgRk~;X}YIYk*bOX$leKj`oQElMk-2FT5e{jiWo4*dDc4Zy$UBauE04TkH)$`?qq- z&&K_`fAnF=lP^eT$deBsR_|=+3R&~P$XGevSEgQw^NZKrc+*8Z3fJW)|EJ%#>Q!si zp1smh?|1A^nr*T9zB_6|r*|Fru>4}Y&Ie!v0zI)ec0<>#iLZ(8*+xO0-l-SZs{Le_ zd|bMT^YaDNo1g7WEHY0VAMckJPdt&HA$ts?aQ+!aRhCZx*Vr}gH{M(ixv8%#+h6>D zc|)Cb>gBuBOAE%&2bgaFGp)^8h$GJ8=@V2x@B7uqLB+M5adof7N6w9(E3f}7pJlV% zvCYhv)_11oSfyudPse=wR4(0kmDi_u_ODNMv(HS|XO_j;v&p67_p`G4;q~;Y zcInz{@zUXo?k+vv^!vFuTY)9Dx!TvoADDKhE}P6=@oZeCj9q8bm21P+vNw7w4WG1! zB{&h5h?VJ!GhvEY8~B3{VG{hstGxxlE_eRs>OCCJ;Y=9s?q=L@QEWfL#Vk68YgXE+QjE(>8v4B(Jdh)?d@LTN88t>b$G>o@r^S|%+ z<*)7XN3Z{|xW2nTSqkJTka_Pa-td+2tDKcOVSe|Q7M!zl#RvGmw;tz6F9iC4FP-PE zSI^6`|DTliBtEnEYx*cnM_~s2W%vFcDsYPa8u#hxX@z}`{r9Z6nJ>T|=n>zTA0VA? z%$5W`5gS{&xb0hf)zdBSEzW+)$9~q^`nD&2wRC*R4`7$poo!oxSV3Odf;PthgOnMg z`~T$snTAp1LMGDIz^2XD8>IT$z*B96IJ;pS7KR&f3}E>?b|T^eNxG#b@PbWwmcD&$Urr-7(!5 z;_8lZXXt#@bE2*o2k!qT1el^7f*Yc?UV~_u5@{}IJsRO z&WYJETdQ6^+tuGXte>rP{}#hSc+mG!Tp#C4!_W8;|HGy3{_v~2zBEi1a3Tz|hA{Bc zZ?5~lMM&1xCGOw;Bn#{9&f@;i+bUdr92n9(Im%7xrv#@?nCt>!0q27v+n| zvM}!<#qC+{me^8wB{p)zryv7gIV zK4X1mUOKKia@SdTZQ{tu)#{G<+Ru2lnd8*|EUtg;%g?sb?Pu0Mmwrpz;~4dwvGmNh zp323^pH7^WtDhV%KSN_wCZ7*LpDHh%-WB`yUwX#tHvyYIPkm4Cl@-p)*w!)d1M=b7 zBEI+U?!^1z(%E@-EI;iRCa@c}4L`z+i6wBc_W*b!;7;Gk;px2h!)90opUeeY=2*su zw?|}s+HhUFg`b;0LKZNT%*jVNtc4xc4-Z=Najf#@%AbLo)-~Tt!+m3ufk1B7ZGQ!O z={JJ;1Mu0Mi!Tv(@pteP9uxoK4d7(ot@US(oe>V^Cy^QbA-8@5ppIO{&Q85ENWYv{ zI>{!|Ipxli9r_y+b^6Eu`2b=*2HzlE-EH9GiS+j)^fP{>pY(=ZZH+-*_R8+O0l*#@ zYcI-Mw>5`{JJx+1t@jL=2HWvyY%N8{ilT%_FC_zQ30 zD*P{$R~Ht4T;U_NOW?zjRc}OOMy^6{O8f$PNY3OQcRRCet5_Lq@cxPeyz9u*8NQmn z&QHuIqzm45jGL~|LAtw_?K-K9PSHO;=+c92E_3+SrHqbd!_vDwe7ke*je(tzkH1ey zkL@+?hbhYAX6f*vxPJ2C4p|8K0L7J?SK2oaF*_EN3(0D&?cf8z)XubYaab&l=Z~?v zYHIBmb|jwdvn6(wKfo^Ir)jh7wxC|XXW9tt z(0XwmyxKYV+hLY9z)qM-W^w<*Z$AHahp_)J*nW1L{rKgnHq{@?u3y7wCoAK@tXF5duz`3ArTkoP?ozkO>y_?D-7Hn;Cf zIEs95JXr~S{}+=XS>tLx0p50=i?=s!cRo1Y-_Sdo-~Qu&xkCSsb^rfTXGed!|LbcU zZvldGzOH%l0rDT6866S$nmCePupN4se*q`xq~I;?`#9^}mdFVAvz4&GKJ3+Ag!o;V z^u&I9~FXI1V<>}ZI$ z>%P5zb;iWss%-yz|GuB(1K@pJ&!1A}jfS5^-U9x2p3aERCiV@AZa7~-nyx!P|85DJ zpf7m7v+rAgJbh{Wz6H=9q55=;{;|V!)ExW_`bjV8A)n$~N!7glePS}O)_K2|R)?Fd zxxBQ%_Q*?In7nViiBZp`$-O!_LvHe=#RYY+Q!La*8QBV9Yk54cEWURZv#vZIkQU;E z;xnE$M)k$@opqJfX2z3`Dz7Y_lm8Oo$oFS++|uT(-`6N3FY^>P=TUAmU)yAT7N;BP zO5^#NuUwoDF!iqVS)2~*t3ID#>hdS$8<(g5;%uY0GDK;o*Yt7b|eZ}qB zt$g-8WA?1B_U2$e@~{gheoO4?-O@Vk(eD5R`<%Xw`xtzN~HoyMNO&a_Q|P ze+mEdtM~=o^?g5a&dD8*^TY5zTjRswY3Hq-;GCQt|Bbz{A-YwaHE2U$gnR)0BE6zd zd;vbBx&oh*U&_|uk2w9X7H9k||K5XcTZ8r6Gu!6hvnToP{$hE$E5L{u$NQ7RkN6b! zhN9!1GTf_ub!0Edmxdo_9PQk~eDP~xjsbJ)Kl`1P zRX^*_crAXrC62e#x%yOIzW7*P-g{YXzEs>?bNsWiS^r#`467s8(&FU&QtS+!U1v#0 z%9l=WW=zLsUOGK}E?)XO-~BIX?bGw6^9TOV4zimWvqw0`PT8)s^^+(2Vt;YJw$qmN z!FAbqb;j_f4kwMd^V7He4iNvt1=#Jpq}er{w+HJK!+h8c)8Vsndt1NP-^ySi3>Tzf zzCLhY85}pZcVjY89zWm`?bke;zFA9u@2D;=!vFf17l#Rb`AK#J6YQ?_mY| zw|_oBawDsmc2@5GWPJ?k=)>>*(O;}HqzBq`_F}%AHn7e)<2&b0SJvClrbGBmU^{d~ z-LjR<2jD{*H$O4|54X}a_6dK)-KBRM`j+zD|2<>-uufROhS)hBB?DpN0Uc-mSKQce zp}WS!pwe(kT6@?-w$+`*;ad2ojXssb%d>EXuknAF9RC+9U;Eu+d?0`1g=5*|=UEq5 z)c=^TTs+5+rx&yAn6FOxypRPn^E`*r+Lb=W zoujkHq2kWHGP)<-xBuFRk9yfX|2f`Qzs9=QP3iPsJ)6j`il;4QW3X!4u{rIP9pdwB zSj?`obM~#DviyEy+KaZZ0{&_LJz!Ye98R!rYjpo|C-Vj$Rxcl5!+ZBO>&M&5 zhyCzB?6+^@;&x-<@fEhQa0!kvzj|-~>dcD=)bj(p0f@DoZ`tntxJ>N3Hl8DYV|+_? z_+I8FKYE7qrw>48@_k!LzS;}?0q+5H)f<3+HG(FzE!KCY z&+?6*Ur_$u___IJ`ApwCkABH1c@`(n^5SC|y-=Qh6!#V|{ekMzy&3m6{@P4kElt-; z*KgU+@C9(TcEYN=q|0YNVsGbM8C%4UT=w z?*MUwy}85LlQqF$-`dxA-;JZgWmtuO`woyFU~g<(NH*b{amm2_(Y+r3zu+5y zGjlflGx{r^@7Hp`+zc=L5(Glxs zQ}olC?vwNV|9`7FAN}IH_k{FX-B(U7y;>v#H8!cNX8$=ByvNDNlYgPWH3x zm_DAV{7WJInz8ofXL{=OIiAUjW51Hb~5c|rg0(LQO1vEe|S>bSmJD% zolV;D7J_@ICD3Pmm-1F{k-)Jnn(}agkWChTi)7hK#J(xB*LGo3s!HDR?t2|yUuI({jd2#i{bF7(;-?eM* z;~3@7;$xq)HqVujjXH5MOkOkZ>?@z~EKfIXiRqel>0Euvi_=5=p1!8@OaHfWb*pTq zH(jsYjHm6)^t7>j0Xzk}*t0VE>{eR2pp5Oqy6jgyjDQ>7HQ}qf4?KG>7r_+xa{pNS z{{s-_dUvIJ{eJ`P*Sg`n5LUzP@Q$AV+x3Uj&fnRH<(1bTw!?baKJ9>)(jjewWv`5_f;H(}o<$Eg2VA79Tq! zxZ+#|SRhC{LtIY3J8Nf|ucutvSagd1Ont)3^u)jQxctPep1)yyy2Te%evghD8~5AS zJ^iOXJU#jDu)qCVlVDu7%uei$4@;|{_L^(;_x%fl|RGU#+r4wKYSL$e|j*}al+(`x0LA@55-lLHKy{) zj9q%h%I7%ck7Jg9DUP>cq;}-$<>yUEeV_Kow>9LF(cpV{wN{#riyh~E;N|7_2H zEkAYTn4aGP&U9_*>&E5!O&wG|^_pF%XAgAVK39J0E8jTj|M9zkHU)Mi$Qw7`eA(${ zQ_GgOn0*QHe*M^{vhMxep@-V^e3I{#^nXeb0Ny>$3haS~wS+hyTgOTS@Q!efuY$WJ-GSarp8@~#MbsPH`+s_6Y-g&^TTWpAzPA0X zz_tc^qaV_58Dq9>JaVI>Y``1JN^i0C=5LTc41fi2g#N=1dr%%`gfC%>_P+gBuCF>F zOlmx_kRMS#Y^>iE^ES-X7H&>F#pn40#bK>{Y4MT!8Bv;1tV<9PBj9Q)6@V>;Pa zp1huuaqWvcZ~4ynEKWbvodw_c^8w;(F}>?9FJE8j+NGOxn(ixSH@Mxt>OZ+YThM-{ zvmG`govmfJ*%H2Iqw&5t+Z6Nf@jk4Bonf5s*WUi&BE0Ypu=Dl(Zve2zeFIkSxc2tH zE7&o0_W{Ci*t_oX8y0sjhi&HQ9%pV?4d>dUdS!SA_6yx}=(&LFosI9w(taDjF68xv zt>J4iU%+=?{NOvbyDL7E$7j81D-(JTnArU@rSV*H$w!L+$;$T<^5jq9MgGC$|I*H! zPPmIZC+FaI9C#03uk?0yY||OC6@Ode9O*fIpab2F#q40(g>js7WAZou(f{;+Ec@4< zKgyQy|L))2c9Q*Dm&Qn^;^*5&IBT{0Amp>weBpd^*t5OaFPq8-g9Ty6#27LNJKzR? z0Cv?z4By205dHn1_R7O3=`gUgH%R!VtvW&8nBgY8EMHukaJIIS_ob_!_%4lC0egW4p=4rHhYkkNLB4U+O#S z>O0Gh9>Jlv-jnh{tQpo%%*Xxkx%YjX57WuPT;>()+g`(bdvhlzD>_NHa6J1lrohJ# z;JvW!A)B1K`-ijSrObTmzO~&;@fbgV4>0`zZ`F)sa3H##taChP4 zhK*-F!fYGo7v~p*+r{ks$OlJ`k0)kaKis4|j+&fQ*)i6>{>8PafAJiBkc<7;gFWl(?xzk03fhnn9ihYe>tl}AtQ~on$NRE2>R>F+SBICR*PHS-hc);A z1;k;!1@wCWK7jQY{xAN!Ki}UlH%wXI|F<~) z?+qZVI>uyGo5m6gS8gAe7q|CL(0JNbXMN!-Y@S$LdAJStd&gz(-3`O^cp<(x0twv$NM;6$RC%^ zrnGHMY(yKj3{Tj1xEB9~d+}?WD2AIb4@T@*b{`_S%NR?*%iVR%Z9PYvgiHJVXU9)G z0k_~SY_=C~6!;nTcPH!jdFFw8f0QSND;$-Jd{}&%_Iz!*+m-6`18C%z%{;R)Sz6L!oE<2%9 z#&VAG#u4gkY~R1=baqJh)4!!_+q~Wc=&U_xckkJnSAXLekF3qb)_iZUFYC+Zty|E> zx>`3sAYTB+;9eL9zhM_VQU+uC9iTKUQdiI>>{2fedto1(G`75RQ72v)w%O#u*)3L{ ze^A{O>$ZAnZNusHMt2!!maBgb>#K_=#5e}O#4%!J>Pp8$;_l0{tn?i3*uSxgXIuR% ze<|HO?~RX~Jo);$v^lFg_J8ksX8$RdWGKEhbjIn4c>060Tzcu>#>F$8u3dQ>S6_nm z#uFFRrL*aNyi8`+KEM5IV-ET*mS;cuuoauD_xo?;**H89l&gma zaEsjw(#l{5d{y?I_sG8ehi~yF%z;B;4$KN8!zOjwSavz4^PBd6#upgw;6S zy2HA@X~^p<_6{J%1^hsI>yEg1Vp|*kA|8>(@nUCTJ#gDxwJ|r$CD+!Be|pQtA4mRI zzyCXj_oDre+0Pl0A^uM$`2ghTTR>cn^T|5?S6=8XK)v&c^E(rH`b^)&&KZ_2d)m%v zo&Of|0jIxcZR*l5v3Djq=68SE(gk`-N9B80>K<=C`!o)H5Zbr))+TT5t(%RcLr>cq z$^ECh{~H9xvKRAMt2Lz8(#rTd>aEHAt(*POWnuaP?4|e1-~H{Mt-E_T)q6kuDa8G& z&xVCC&l>`~;`_sgh2Ps7KscsOSonLvK;yAdzvs*!(EhZ~Hjlo>2-D?Zb6gQVS6^Ix zG5(2vm6e{n^b+sScGAYEY>sE#>dxk>6%>sPW7iMdxA32E4Yma;Y zb4rtO`l+ALI>TmjD3dq7ytIAs0gQ`t_!-vd-6ZVAXK~z&ai1~l`5xK+$bFm(nN9vr zPI#U#fQ!h74=RrT>7ugU|H)as@r2H<^g7SYpIiF2VV2)>@&oV~j$690otbm9F8aV0 z*o8F-@xSj3&fb|Xo7?n<%{fDQnywm)zuLN_Tc21vZLCR~Yr9Ry?8myax%Z6eHM_M= zV`uNirGr9cV!_^9HytO(WHNmL@`5pbC$KPW!yh;&gkND8+=5Hm!76ut_~#B|eQa3J z4-UG!e1dTs7Rs-(tq%X|zvdm>9}bI+CB*Oj7Qp)S6~gD*OfH}svt4QNm2l(XHoev?o2E1 z%!}#6JnM8gohXiL_0wkE_37UHX202h_N%S(OMaDYY58=Ptn{V-Fi76G`ODgM$FC24 zZvJ9(@d=Cpg9LWZR@pP##g*MhV2%GD7;eq>mB9kos;{67M!}A3^j;itw}2}!ZQ^p6 zWR0-4Ix(!orP@eak9OfWjh)X^%KwIkZ`vc_u(*mxmUhFYCn2Gw%$gP2RYG0 z@BaAT*^#3%XWaMy=?55tyvechrE8ns&>82EPbW_g`ZpZe8y#}y&XB`ctt)KPB#qT@c{cjN(pUmlf zwwAqHLxC*JEl;im>sF@TIQH6p7w&8r1dGDTiF?Z68{Ed@WDZx1^$-5=pRIAc4XkgW zTid>6!alOiAGqS{)<(H;#j||Pe<`od+%QwSuv1)6jwA9-l*{AE(s4-TuW{FF{2zxE z$MwcnR({r3eikcxF1)msS$E|1=f-=B|8O?OS^wm#eKM%;%-3$llfx@No?ALl+}Rh; zeoLP&oLyS1Z?S&M572JYx9JPeTS42^PW=|(jWOt%diQ^Jpj?@^wDecJeiyUpgE3l1 zPl}%>z@_V=+g}mp(j_3Hl^;w&C@YPzx z^44xYV%Q9G>>Va(BdsqShRg2%uv#8B8>5(f1pUZ?{9!yj^LsAo<};_Yh1)PxXdl`M zWK|tGdWSHdpw1cKx40{=6Z`u%eSSv%w`a2C1Nkl@QZM?5s zJKqZWb|6;PSmtm}^c|;5(;;V#x2!|Cdgbcn1v=4hOZ?uSe$gkfe)NtXpdAdNlVW-rayFqDt%U;-mzQ(YJ?6Efa z5#(9uZ6Kb8ck04CeLHjVQn&bbdn0i7nLa@L5Bo|Rx3OnB{DhZ<@H6b6RGe-2L}f9@RfCG=AeXSNUU`SzldkUy6_GJ6mUMUK-~;b*AA7^ z;%tmfX#d;)@&CTonM2?Bo_+9}#ql=#)gMlre$ zxi@xKFz({bZH?VM%%j{oVT!c)7_7zKU;=FQmIu4t@55R$kzT&T#{1p?{6=3J0d}b~ z2aFe6hcwyi>m7ic;J*4W50BuJB3HIB76o-yUq_ob_s{?=JAX8gbZ`w;IxUwFZut<^kq zl`QN5eu$4jTlSz_+w9W%uWQ}LF;;TGPj?kdNn;Nyi)TI_!tTg1WG|c5#cg_(xEt-g(EL^A4@9e6h0ULgU46 z#mDmUGcH}9=jM2={FZgTHpX-Htx^3kEnnGLTzz$o(K*ceW7?UfPo+EaV@x+@8E#jm zpP0UgSNc+S<$OK>|6p)`?_lX_x@f%R%a3i z7B<2b_QQ_YAxwdplkeGaLEW+0r+Db^X~3eX=fP z^p0-QN%`LLwM&r;`ZWxzgNDP9;I9HeLA<| zi=U8g&Da>Vp|3cHzK03;iw(Gw@R5ahAOFCK{#K05v7RgpibPs*+yR4!BTU%lj1IG)poVt)`+v>{2BKf z_n-0pPv+hK>4uPO$PmXnhbhZ`E8wiie)r2>XGmP6y|Z_I?2Jz0GP+P;kL*%A-;n%! zLinHV&?)*z&y1n(;=3(Puh=&H$4TjC^>L!Se(AJ!()o_;8TZTYw)pzq-r9mL8=L&e zm+rEE>mX0T{;jQ`jtmzDUDjV+IAbh7ti)_xbYVkU+(ep z+RrjPzw(!ReR@=kf7CZm=be6-*SPr#^x1tLcEA^Uj^Ei38|c2y_SmIZ-NKKJKjM;X zi=DwBZL+`Gi?c83f_BE8yzh={ENcl9-ijx;wcqX>+dkloy}&uRV{O(I_shcpZOO$R z#rCa^eY<0=zwI6U$Vor4)n1?v-stf^JXKHr_D>FBzPZ$qfplEq9B$d$-fsV$6%KQs z6FkB%Gx@y`zI{*m-N~eCZ25UwXV@0^gI(>#r{RUG}==>BE)(w|u%E z|Kmn&?Qz$`PuKrBbIF1%%}K`2!@h8JzXh;2L7VRQ^6k6&YrMS|*cY3sk9~FDS56Mu zX?93f=4GS&J29JtmF!xcf5s;u^|U7KURa&hg&jaz!w;p}6e6W4(6`%VAF2WUL=qz9e9ymD*HU%>VB zl)lnifgZyR!CkMrCOavxi|`_jWHY!Dmat20*qJyS$?lA!EnCZf*G@T{tIU`%%^Z`v zJ}0&u$1)F`31iF+=UX2vXkW_g7Z$I5+xr&QyXt25zURA(*_VFgLT>iBFk+jlHvqD5 zhjW+HK6%1#^5`7kl=<_^j_bcAzjM-u#S?hLo!=bRE{*T)zaX!iEUf*OIetxT_`J@} z_kX$&?~@PSCmVd^+_Z5>!;AlR<^{rsTTE7i)CNLOY`yF*Wjk62N z)ZrzVt?d>22M;ukHrj^!lm8pPI&mEJ_x^|fbNzb5MSm%q^ z$NA2*HjQVkg0oF$#B&ekAUl32uAe-Q>**@poq-Lpb-K-F7H@6#P|OZsjKJ=2LUxp0 zEMDC35@yDE*&tiPA;yEB#?eoiI#{E;`+hdR-vQo=7;kUyE@S<$#oFvoS{z5h0B!6k zObt8jfxPJkZr2WO*q436V)b+#7QhcOrQ0wZw`dQ)_yqdHA-^$pPTGyj&dxpz%_ z-~Im~%|_{f^PzVFT}$8i0shuc8+Fcz&G0+DnfC7o&^fwBKk1;h{i|57O zZ^Y`8-IeE0?(=kx?$N`z9?!!8oCXWn1)ZNd?*0mQ1YDM`vj^>qrL!ODW4PMe0n zRoCwV*#cd*PqHI>?O{1gH@7nLkh3=MhTQmZf_ufz75DB|zx|#HGu@kTS%05y&(1_p zM_2q->^-ynh<(Y!IVPWEB7S;$S~@)M{o220pXOpCY}z?HBRa%Z*av+${;eNfqKj}c zo2GNdpo>B}XROL$3EzNj(=YlYq>phRPK#Hyqo4M#-Tqebo*m!UmoD~gAU!4nn89AG z*Iw+6OoaIx!HHYhwf&Os4C>fsZH%q2y^}>4Nhb0I<*>n6xgYKAD|t4aF-z;K zUVIIc*Ogzmz4_yAb0>ekm~)WtT(uKghqd)Ldh^% z32cBT?%eY9mmOsbtNq0;K1pBh_w$a=F5-K0^?L#OuTFnsn`g%A*>J&__o2f3dhwIk zY*>c_trOO#>gR55_iz^L^ir_1=8|9ERiUD~_{&bMp(x=KXX1m?QADj{NWL-|qs+ha8`t zysNzLKX*quLm$=|ZyaH4_UjG8?>G60Vm>+^Vaw?QJ!NNfbaBk~_D3h#x%Xag0)BHU z$ip)4gLuj~bWVTzj6aP*zxf~Pq?OYPYyF(R!M#^3qGdL^3oXL@V;3``Zhk0a3e#X|vcyPe^iOHLf(6?FGjspwIotN*w z@lreycN}B>fp-M$@XYW3$zLr_!6C}=&Xv0ckHvlBI8z$$<4bE<{JgD4IbAYGZN+p? zi2IIp$Gmakes&iolUFieAKFZApPX#W__^{qPwCcbtoYP9G(MT=Z%u_y6gC(>)2>`Xx;MUE4FX4 zsSVC_Ui1jg`c0MqU;q9;``?y*;eWctw)N-ZkOTd8mga&7&cyuufP4Y%*uwf<*ESFP zlQ!0ScfQ|OKP=wo1HeiFZcY9-|9j{9ar=K*XTk@d$7J)galP*%IGO%_u5TlB49>B^ z{%skUU=HW)+mLTIbc9~8J$gfr*d+TC*du;cMi=>{{7c`S1oqF*6zH7qQS_L-(rtmy z$(GwQ9gY9Z|2_JI^m$*`?hi<_H|u7{)@?s*m+aJ$qmUnhvf+J(va2F;}}xxjTV!HhW$@gd8|%1c@`}HcaryZ>OY;cJcNqNcjVJk$XX)bo{=V~k zdH@4p1pUaLrBlmq-|QQ=yBE+QWppgAS5C*^g?hX%tqeA(r=!}FH4GB3`YoR6Y$m=J zw;r}br>D;IYhhTyy968j-Z;UVB8(ur@UFd(c```8_CQZyC@gia;sel0@)gUgBV*@C zc2jP2+SuW(wlLnk(s|QKa|m#nPAVhA&mq74z2(C?FP!H5aKF8g1-{$Q?Q_ibwWLJNF|zopcEoFh5XcQ$YD z3mZ3CB_}cYWc$V13G(8JlVlz)myXlJcVn8HeBp+4`0Grp(OEaXvvbbQg?_*iW6>Ew zx-#iF1=r8t8PFqVCuoD0;(q*9=p6xuX#;<{^P4|883P}~B|K-WBPYkf_*S|&{nppM z;G1>XhkXm=hChi^;AP@U-PUeEg#wRy>);F0Xr~0ci zhF}kZH5pTXYn^9NzPNKUXK8!y&E9$2x3$rQ_?)f?^oGvx@$ojyuouA|%u|2*slKt6 zzFx+3u4Ig>;2QohK745n*~8-b?f!}<*jV>O>kwe2w)PX>i}&B|ykxQ8L*0jkbM1o- z3hrI7&z;Qv_@nkt2JDiooK5&a=E}occ{W|1o+;Bm-$-3&N$$>%9%V~(%-g@SqAz^p zg0;Lydg*)|XFU6~Z|Se~8_f6Y;Y;=PJ zzxR7S=P$q}=VlG`K>vJx_Q$VdyV7)b`m@sU9i1%?Z=HL%>pKHqgAHU8%FOjWyxG0w z%>8EIh)J-Pe8>WR+GD|Kubnmp zZR38J!v5R`^7q0S?W|913~S0aFs^iS*fTzuoU?RjE2lTpPgvy}=D?l!6`$ed`jbO4 zBLib-PeynbSMnX^_iXuoyEeHL2gm)!fO)-JnZsV-s=Z1pBWvdtKIVJC$=)*ZU5Z;v zv2t@;bN1v6oEce~%lKqN4%Q}2PA3ob$B>+?Q850DorUq!1N%u=`0F^B4mx*%4zRhY z2j26vUH;+5;nMWLJjV8KPmz_i&^zO&liJ#=cR+eY-#TAdq91(Y2Z*($=WxMU=u@yx zI7knUwk7}c^z<%XdW(I3j<$Rh^77Wpw%l{<**=x2i~H@FOtiz}|0;9BK}-Fgxh)pu)g;EWB6{L zLj!&}1|4SOM-rQ{5o^cL4P_C@sJN!~oKUN8OAKwRHzV}r!vtK?zSSN-9 z@PMr1U3|f&#V~=5hqc-n$2pQIY&VW_c%Yp#fXQO@+AD|c$^|-LUcR8sh8J9s&+qH3>4m;@Vd}-y4?074*V-@l zeDhmV`e+^M>4Cjk2b{2G`y^YqBF*NlM_}`GUl~rbH-4YC1z5zUek>F?TkVInUv^4H z?b}%?BP+H__sN2e%CqVCK7W9$!vke>N?SgYvm!fsV-;aIefGYD_wm1f-<`il-`S@# z($_lJi!(9Kdu4C!#)0|vj1%agyZ>HyCaa&NZ2vxzO*q3{@87q7w&^VC2Agu8%J>0v zg-)?y_Ui42{lc%axziuxSts4~R;Q0~3eHuTKz9XoFhU>ekmvu?gMvC(U`%U#-_F0! z-hR)x+v7)ElZWSQnXGUxnZN=;nr!GqaxD&bogu#9Pmn7N4@dNi-;Wq?96leM&o`KD z;)37%qrX@j0;Bvs)H>mawN5^P_kC+nCunOP`?F5xFW57zv43lYW0hO8edkXoH(z{O ztjwKRd>S^NLEGN1tif1x*t+ahJwBq7=7odWun+C@)yAEvd%CszEd-8NeyzK#u{*mp z8A~8bc;_t1!T8og*NsmW@jA}zY^~F|3dvNQe}>!RcV{sxCyZgk?9Dlw z)A?2gx6Hl&X5*K$>qigZmb0Uu^p9Q^mo_e)Rjxg~q-(~e=eWceah!d(_g~KZ>n(96 z$9IBk6i<+6a)JpsM3C;@M7Cty9oc!x!(nF-*2m}K(%PsG|7$B>S==KQ@Vs?ttH1T& z8E2{P7^|<`cP9Pl1zm!N((nuZ;5PlW!F|dmkJ?+Di8twFd@C&|7jQRj58ucdU*(f% z;|}k)@x~x4vYbAEzQ$1BxO2YJV)L~I_LaRE!=B9REQNd_*lj<8`ea9Dc$UAF?C^v% zSxbw1vmw{s9&oxkWzI_*WzI^zv$faqoqKV5A;#;@C$6Ad$%xFH*?f24kJ!hK?R?!| z{s)ub9(ny}-}-*Jo41ziZvZgRU5cy(_zxRlC;8A5-vihOIkP$XqCV_ZC#@a*!Q*sk zm;Eo-wcq1E-aqK3arMU$Y?AKE^F!#c`JNl^movOpvhUqqt((of*5lV+-@UN2{~WTW zKgMyk&d}M?i}cFbvORACbjCUCeO{CH{{I{ZE7L6PNqS0$#B?0q$@}e3Z+Ajk6PQ zgu8y6Aa*{z6U*Za`FKK^G`_(r-p2cm)ExO5^|5vwf=}&58n>8>PlIc$)m+Nx8s3Lh zVG^A#&|!52<`)ywN`jCrtrx*AO*E=&hq28YOLOX_?bANjNv&Ox{ve|T=EXgq+fX>kecASmi z;jmR*`XtRpU@!e6d+(?($(K&jck}e-N^iYCD8m(E;~5t}y!RWxzMlQ>G2y*Aey#63 zFUkJAZvQ(#ICC2hpN~>$ew?wKE6j3+bd2orFx~1mDYyG!`}-W-)1U6e`(k>ij!%(~ zK!@nAdDD4#MAzxRa{Bl={GRszYm3<)+;FZRv32(i;yLnmzGMqe1oG~U9v{GO*zc_3 z6&TM)fb;6&2bf-;d;tBm#{s=P#|iqW^Y_ScMzM0(Wga?X&3qYU;?|D)MT$`9bT_{I+t&0~Mvarv!tO!KIV`_(D4 zZh?sDbOS5&F1Zg?%3<6T)*oh-{-kE#9y0T-oKv@>kYiW#e;=p z?hRBKOoZEXiOk_R9iz`=@9eT+`sqwyEStC$N8K;zu0Xfog?Wu-4D+iqw|K{%`*-}Y z=l;EWzu$Z;{h3o_P3E6d#&m@p;tjaw9Gx$Hf=zTz+P4^UtAFhbtdp+*Q*m~BC>H1@ zJ#>$er#IS}SLmIeuBGcgFH_NDZkMf&fuKLA5Osae1m)f90YSxzozPKgavL-ks58vWTd0Z85!8{+W4y*z zZm!xHBW|Yu<`T3sF7C(q_#f}b|9)4ve1OZhfMljGo#!_gSAXNC>)Q2ZV2)%eR&G6l zz4Y#~e1vT+_G54A#KxD_Uf#aQO^m+}3Oe|_V@ z=eQr%y8qKNcn_CwK3>KNFz(i~W$XEk@Xj3JS6C=kMo)2jx?D`Z%^TL3`|%F+d3D-3 z`L4RZ>wM}L@CE4vT!$ZcNT3_egq}Dnv4A7sgCOnv`o;@0!VbKH`|&KU%4fhm@JqS* z@EqO1an?YO;EudD_)cGW?c>kB3#4b-=qs-s{Oh*@{NDJKp3_Hl_&%QZoBjU&*|+oS zJHW*UFeYr&myNh*|EbVj%` z-iNt#Q9e6@=i0FC+p+Y+dV@E9{wn>V7uMn2@rH5P7~J32{Jyi>@0l>^@!yw_fV&_} zA?NPvFc5CTr+8mXU+Cbi>oBH1#)TWkpnC!xp_lXppTr|)I!(8go7-5o&i`olehI(_ zw!Oc;{|>jxeJ{^ zX?4b6XZAz(;@##yo_#j`dA{+!Uq^qI5&FBTvwKoD7FIfU`b7u%w{%3HH|l)*a*nt2 zKPm4z0I%^wZ$9*fUyx0~{cP-KIh!AMpZouVnLh9Z=*Q%K*pLslzs20XQ@VvC;0UhA z`|wtpF6L*@T{>-EJaO~^l+(S(@BMC<{g-a(Z%%OLnQs7Bx?AH!oP>jLBdidnkAUl7 z3VzZCKJh)flha9fq8#SP$C<|WeodeBF;`e8&M%;M@i9&_o^jk+aH#p=rQgKi{@(oK zdG~+*fZw`x|F2G4Zw1E1pT@%X=CB5_Z{Osl-de2F+Ky|TdF{06oxt9ujjhhQ`2fZe z)RSSdC1-2t&PKL^v#|H&>um2F;d(I~cdmSxxADW5*1E^|-e{fE(FcH;a1vgN`2k|* zPp9a%^A^(`ItiEe@otwZdoe#OHz$4aJwaNGL%a{g8Mlx8X!*4zz%O)O&eHF2=mVXB z8_t!E!A$3UkFW3Bk}>H_n1}O?ZJu~vp5CUz=`S6ozvh47(AUy2Bh28u6TR*?^ zTRiX0UwVtzzbjPvCFUFO1MJOMxY*dzY=|A?16UXSjqCGKtX;WaPu>6X6O74z;(vaR zag!TcA)~mx`Hjn$;+L@{L7IKSf4=|yr~T;pwIu+zogrO-k=^;>X86tLlZL62r|F#g z7fhxf@c*srkK5Ulv0*oxh3CrnjyQ!Mxv%xDGd$XV4GB1V=jHbr?&);Kc{=7ntLVCzt6*-U~4`Ad==;k{eiLaI9hb-=M?u z{0u%vyw3)t@7?30-28i6yW`?ZePEdwX9}=RTmFD@F@D6m zVpwE6x~&c`YNrof^GzMU`<=Yt9bN3(gtXtq!A)=L+WG$%_V1!f`%S%|&i&k&=IU+1 z`UUR;_Jil`MHybV{?;v)=f|*_em|)_+~)fj!@lgvTu)C=*Ed(b4w>3#_4}Re>!0;w z#xE;@ewPz|!_fF&OpoZHw3t4L=`x*wvG2jz=BKl8-nho+bAHah1NgF1{P{+Qv9JLy z!i)Sz`T|ehX>^nK}pS3iSJZoIqkGoGV!bH}}L z;zwLZKjK9gBh6=Ur-wD#uL+;IPt z9a+NO{l5RHTt991$o(25uw&(p+4PF7beBr6=$fDo_DaL%{oBv}@3h@3i!d90(^GS^ zP5Q^Tczgr6SF&HOAAEsD-jC>kGjk_`9q;+p9{2Mv;57WDbM%nT$@k7rSKuH0&5zvI z@a6XX82NjX0DgLoqxRpX;!yfSPu=_J5I)z>Z$kS{w2$*)y??{O_+3AFeCcgmz@dV% z=^)+2+k(H5`@{eJ|6RTSAD}>=-S2<*w|};N@8|#B=l24F|F2KJNV;x~xVwA5ZvoaI zm~Xu?T-Lz%*zaMxJp9%>A4orY?#+V_VC-aYJkiMq$GS)U*DHar7nafiIz#vAEv%jP zlRc?RUv@jXPd@3Y-xlB!bK!sCp5GYUw~9xvTP5IrkN@e2^U8;N&;Lsx9iT__3eVFs za|kd`o}Y;4;aa~DxOLr+c0ZE@_HP9Elitu%9Oyoe>(Blzcz)-OH#?8wReFcx@h(30 zt)Kqme_WampiRF+FbCeBZvk}L`+&QCyf5u<1L(27^xT;4KgQ>Gn2XP09`|;8u_pGX zpS@_afA{$GeEU{n?cJ^PH7@&kVC$#ydgOld8#+Uu=vBY*>b;fjOf2p$Mi;d|)4^M1 znywm)t(pt}?{~XfM|rgS(h_)jdRk}QJ5k>V-#f4KH&#BM`;0tY6#U*;UU<(N!+Y2H z=>KC#V8@~li$`G=OcBGhTfSL#AHuP5Zg+Bg?7ohp;S_EbySH>7@?Ose_>+IXzx$gX z|NGkj{Ez!_zVX?Twc%yHEgt}9t78w!jn{nnD7WBkznSEpBm?V(*ZW$3jPrb~^4my& z9l%^V2ZzNtx%Vb{I{NwkzIyj(`OEC?y?({Fk=n0!R_E@n?k?qQc3<(=yWhvoeq;&k z@A-5U_u*MO`?ekJ|8|)%`aJ=z_ZDERxL+P#!7cT;+i&^#0R6i~-v52?$NzrI=eGxO zKfX5>?(aUO&X|3#$Km{dd-lMGAOmaDfA=BYCW%MuhXlTc1o#&Mn|u5nz}JxY?Q_5l zZ}2eWaSy*;ZjYAVN&@?DNpWBIiMOnzcS*koa7Xu>emwlwf9G#pczFLEB3||H;JTyp z0lWqDn*iVH&9AS22LSKmaea*IT>(GqJMUNC8O&u~z5w5V-R*07%P#i+=a)5@`|bY2 zTjqMSeMsQ_67X)t2k1TR{Ubg`c&`MWp7yu@$KBz*l6>_4x)Rub(~e8;)7{;N!0X1q zpP!Di=ew`tao^ju|7-ur-&}72xZnNWyMP#{Yv< + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ABCDEFGHI
    +
    1
    +
    行 \ 列12345678
    +
    2
    +
    第 1 行🐾 主题logo💾 保存/配置文件❌ 关闭/取消🔗 断开/解除绑定❗ 任务/重要警告🦁 联盟阵营👹 部落阵营🧝 角色/玩家属性
    +
    3
    +
    第 2 行💬 聊天/社交⚙️ 设置/选项🧠 智力/宏命令🎒 背包/行囊🐴 坐骑🏆 成就系统💰 金币/经济👥 好友/社交列表
    +
    4
    +
    第 3 行🚪 离开/退出队伍🫂 公会/团队💰 战利品/拾取🐉 首领/地下城⚒️ 专业技能/制造⏻ 退出游戏/系统🗺️ 世界地图/导航🌳 天赋树/专精
    +
    5
    +
    第 4 行🔥 法术/魔法🗡️ 攻击/近战📈 伤害统计/数据📡 网络延迟 (Ping)✉️ 邮件/信箱📜 任务日志📖 法术书/技能🏪 商店/商人
    +
    6
    +
    第 5 行⭐ 收藏/团队标记🧪 治疗药水/消耗品☠️ 死亡/骷髅标记➕ 治疗/生命值🏠 房屋/要塞/旅店📜 笔记/文本卷轴🌿 草药学/自然🗝️ 钥匙/大秘境
    +
    7
    +
    第 6 行🛡️ 坦克/防御🔨 拍卖行/竞标🎣 钓鱼专业📅 日历/游戏活动🏰 副本入口/传送门🔠 寻找组队 (LFG)📋 角色面板/纸娃娃❓ 帮助/客服/未知
    +
    8
    +
    第 7 行🔊 声音/音量设置🔍 搜索/观察玩家🌿 荣誉/PVP/威望🔠 菜单/列表项🛒 游戏商城/购买💪 力量/增益 (Buff)🏹 远程/猎人武器🥾 移动速度/敏捷
    +
    9
    +
    第 8 行⚡ 能量/急速/闪电🧪 毒药/有害效果🛡️ 护甲提升/减伤🥣 研磨/炼金术🔥 营火/烹饪专业⛺ 营地/休息区🌀 炉石⛏️ 采矿专业
    +
    \ No newline at end of file diff --git a/乌龟服职业属性收益研究.pdf b/乌龟服职业属性收益研究.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ff6a2ac52e861b9e33a1b0c3bafb0d05034b29d1 GIT binary patch literal 379080 zcmdS8bxdVJw5N+S?(T4KcXxLhcN*v5&cWTCKDaxLyEoc2?lkVuxV!7?JDE3kZr)^) zmq}jo_8*nC_pa31wSKF1>RUyvDka0r&ccOAJ$HKi7m*#n25>U7MHCWZ)wBWG0|7!Z z(lRn!(p-}KGW;?;ylhf@Y+RCD((K~glHAffY#h8i+?+hTJd)zPeC%Aj;=DW}h^(rv zP8ROwKvw{rhMkQm>pu?whkq{tvQAD`|Av%uGIs;0105}Zu0U6M5fQ|H=70F){7>KJ zrT}(CR*A0wR%Itw2UGk1?8MIYpS_d;oQSM4Huj)@u2^O4O+i2@pt+L;5Rp|0=x7D9 z25|6miHHE)K(0Vj2Sl%&RB*RKzX^6k{(J~sOeiV|F$Z6}b#keLy0Z->?vgfng+|f` zpjBQ@;|>bs=IqYMvKe#)q=QG@*`|&vX!1iz5&&KO3XXgvo|;C=Bo@;S4knY0_xaj- zmL~L>5JttY?bQ!nA@6%soPF&Y{4_7zAn^GGhc2780abxgeUB-Ebw=Yy|HOrA4ju|A z4vj#VC8=M@HuH?>X2X1U`ZZM`dNbRpck&eZ^%vA)1s3{Du}Y-SS7p8-^6v@q(ZZG3 zs`Q0LYT{*lqYQ}B$Yb;6re-{rxa|Mj8(0$c%^1 zpBc6l!-ZJ=rDcNN81KNq)Rp03bD~TrM23B`@JYq){}AK9 z2kgJg!vCKE*YtJ<0$6ob%xr8Nh_Z;-F1Zgv3n|42Obf0EmP+*EiJPL4oF5PJW<3I(tS=&D-?BSS=K_HYbs<|!C@2G$h*6qmpqxhu;9xyx;>f9N=+Rth~oxv2iAY{ zl{9&_e-sLO2Zw+*0=b!#*}5(uHZMehh<()??OF6R=8j`c9gaVfG4 zrVsQ;4Af5_HuALmIwJ~Q-brQm90^e`%W*O#xpR$j+iJ`*eT$!T`VK8tR$3#}_x%M@AYS71;?p2sd1Oi|QziBY+!2jH?jEz6 z=UK~HQ>R2xLiWQJT3TWb4&;x&T^C|&#cFMq?T=i#gnnazFHo}3RzREG-eJ09I!;*& zA54~={ubSl&(lwy(wO59@x~lRi*F5uZ(!@y;L|wvtN9fx%D$Ngv4c#kf>UVZ;z`uh z=cqx`<3y~E)3B5Pr(W@!s1W2K(lfA+?#mxbtBt;}a+v&$z8p@)5q<>8Z+}=m2s?J; z+(*MymDFh=gc$RDLV|bfAlB|4tzRqrpy$F4vh@A2s_(e-Q^>ReUc_YKm!=$A0h1LK+3Rs7zPgztYE zK(-~m?xik|=L=hQWt?VNMJ`cjL}QL`+Zi+{5S1}4zwd6<7Lv^izRpF9JFcK~v$7&B z$1TGU=DR2*FNwEYhNT$Qn7*V>Gn74qx4m@_Kf{iCmx@9;e;kW`GcmvK;($EUWtRTC?y3wKmGclofcyIJ42@SMuf4y9x1Z+@8wfPI<%MAL z_Djv^+#`Ze{dkXa^gTeIV=VKUZ=6{=6ZLDwh}TVZvV)f}@bB5$W4U|ofavfO*{WRj zuy$*fEX(4d&w8vb#)YsQY|+t~ftuC+jP;Xl^u5C)n5#k|zuydK3${^FRk6cClU}XF zT_A;NWjuCE+I_SOUnIH}z2{1u-ui~W5&qjOm$ipZu}T|*G$ zIhsCp80-?HG7q2r@gkt)?(jN3N_S>fvmpw<^!T(1iJxIA!j8`JNZf9*EYZ}*<|{@>cxdr~hQ}i9T->2%NGt9*M+0KmOJH@QH+^8_?xCRF z;~pWhTUoqxyg&W2UvQL+SMzK|Q>qK%{gY5%9Dbw7JKO<6hYS#=8DWw!NHN&c%LpMD z0d)&Mdi;kAV*}>OhQ;mj>542bh;?Szk0QsVM-srcQ5@Ix-1(?6JcpZUslFqf=@{!= zI+tW4(dbd7#^#`|Ymrk@hhIvh-mY{$|BK6J7UX}wpiVglJJ(_96Q`)`fyVJJ0J^40 zGi(^*ieu@kdd36j*X-kDM66Vy#CkwVc^7DtXkqc%;o$$q*gmQceY-6pi`!D;KXL9t z8!fC>5vYcc3W${{QkHMA;;_id9>+!MX;Ww+_=BL7-G0SSyRfjBVI%-M6V}%JZXSs+ zN5rktNPQ&E5+>L2f|-fyOM&r3c^Y-!2OTaGbo=bp;Hog*2@8Q09(BX^&0Jw)qb{L= zV4D*!+YwDi%C2B4> zjyrax^vLHHJQHUagYe(0#5_-JH&+STwT)DBIlPN-WB}${*TZU|iL)$S!gbd-a;F-a zN}g=3kMaTG-rTqIkUw6Ja}+UTctg&VzobUbIBVRpEQR7VKbKRExH4IYc}f}h=i1|x z%uZ$Tve@HY(F$uPA6<>xNmKt0F6s|?bjha0*s!a`y_mtu-R9-YiXdAjC|q-2*E3&~ zz`S}-^*e77+>+Kn6737f{`&jJWoN?wCH}NkiM11oX*d^QPVRoGRH|&axfAdAshrRp z9pF4=FUKr`gMO}@i(n{Urgp>H2*Zk$Dq2lDg!5^bGC{W#g)kodQA7A_o)uv(4-lAv zzI!^w7)l75K*ldeOa|ZW>B)LNoM#M4GMElkbABy>$l;uva*Q<>Sm_Jfi$pNrkztG9 zoKc0OCo%VBqn|s2&kYTKnBw6!(@oFd_ol8j7#WU7pQ)&^=QI4=@W|b}~^B z7OizV+=z*Jo7AP+j@7c<^aCc~OLpAxFbxEhw@h*l?p#L5ScxqFLmf`asAx1ZFF035 z9zA+urFG8Q0-3*&sx+1-mMTcykyv8W-V%QHzKQDFb}n@7Vz8oO+SH3WQjTwim=Wlf_hUtH)ysbSfGmG{;BjcOc0 z@vC$x4Z@s*K0_M2|5CnfGDrL=#kz+-^=`bB2gmZ1viKdl` z!b1EdC-dHdMp_27@ZF5A{>>WaQ&`v)EJ79v*b|76=lTr#xI-DD$K{f)b=11QGCJc%TZ=js>6rj zD~un-oU_^MR%017`Q}g2bpE1rn}HbV1VV6g=VID)yNFa}Mg!Xwtp+b{7@y#T?&-|E z`Ou1Su3__+6(ArWYSnKkN?yxkqCX-8jdRx*<1by;Wcj{OUEB%4$YhF?W&dVp7+_dre0_G+4x880v&`zLXs+;Q8e??lOD_6=y#& zUPJJgmRy&Nz=rW2+g&Odxetm;w5u%zT;1Y2mc{Q@N(2DMAxSovEAq%v?%ECgqdF2If96H#hV_&UCQvv%a!hG&?$VcYyR z#H*iDW^4i3GRuQzOjPSN43?8uTS40}!@3>XgTMO;HPU#r;tlTRZ&7shfWmEQ-G-`H z78ci*@YkSowm~u=IWj_D8@>O^Ns)zagLZKM|4Z)8#m+}*_)v$1q+%W~T*WF$kA^2# z{+r$hNJ$<(akheAyzd+q{|XJFxuUZ8K|rVYWrZ$ug+HAiF&&E{^@#_&A$TU{Ijp_X zPi1c|<+Fw|@ap$@?BEZ~{JJpyZ13laQ>vzmjqNIq+O}d%KLJUmfb$|DpArG!WySg3 zCt>p&S@F$^e{Aomiys+#TSn{kc_A~fyDk0_t^6L*?|%S765%Hd#Ifqf{{pZ${y(A4 z|0p^9|A;#OrwYmcDT@D}Q71ba-+!Ub>_B_$VVq$rpt0|iVS89Hj}Cx`O4-)lT>3y( zGI{7n#InM7idPCHF$5c_26ZHTuphZA6J&G!dKyOCl1tc0g1Cc%)Jp5Nz;i z8dlI6#XQJp9>(kk<&wr{cd6xM`LMKc@%(Vc<=D6t*wxwA$tjqh$$QyNfMqtG#%$1P zztRZ&uZAU)74VkYrF@qkFV9}!geuHp|3!hJvG>&BboHTOStC0<^7qYwqNEe+M~5OP zGFV}?tT)d;!!Qy(&-)!H0n2Lar?lggX+J{oy!6{qopf-nK6`@S+s3KnW@3E%8E^#h z+^*SQ<-sD|*wawq*^20ybFrSJvG^Ow=B*GmvP-bAn)!K0Ase%Gh%=JvoQo|>m#_)v z?wKNG?JnJriGJhtWg85f*XuNcFt5WAkkdYXbv`L{{PNA``GT05BuON&fo&;Mr@aa9 zjX=nlH3nLfRToQseE%D9H+3~MAFXZM#!9=8JN%37q zra1aybVq5x(aW-Ml+N)50_q3c_S^g07l?=(rp4d)kU@90sI0E$pcrV}he@^B6R)!e ziwDHN-yvLCM;YF~Kx7f?uX(5B3%R2u!0T@3a>&w3DU|<64s0&4D!!6m2?gf=dJ-tk z@1A}aEUfVF&wqeuwu7rFJ7hJzuN59O7h#^k_=$xjVN3n&|M63~!?0yn-qnwFLC{%_ z?m=uBALfZu_WT4ExNMmpR6&d2O@mmIKzkvs!{g%l`$=J(+lVBX$FIA1^4G(X26VEN zz&r$7qo!MhYmtQH>Mg;5ZS{f#A3R{emc^p&BOiQWoNk*ZFn_L)&Ls`$`+Pm-(w;Pp zdK+Pae|T2?dIUh+X?ZPovy|sAE6gWYr8btZ+OaTXMeXV=q|XHXVGhbY!TCF~@(sm? zVnT)cl*p$0%S^3rITgpSyvj#w!+B6(mOMjB;|W5^^)~{CglAW@8x+pjH&g`y=$iC` za1w-b=Szg-7pkNw5lH8>>54G0w6VirG_@Px2_*4%h4z5&*xFmbQ;#Bd32n64Ax#cR zcD|2*%jF1JE;(L+!+mEqGqE;?RU-<4e4V%amT(w~yZj?ldu5uI`D}?y zNyFoLIxF8aF@~j-zO~Lfnl#X}$E{>k8)9WZpZs0@+rwUYSVYAhpzSO{KP?~D{y34w zDMY9jOWn08X4Tk3NBMsIve`Y~B2RAWR+v4A(ICJxb#dWw2q1PgS0=EQ{6a+a;@o4( zd`u0;5-r@BiXCqE3Pb>SY)<#q(>WI~bE(QVF7^llJcO&Rbq=@#U?8w)m#&;VzxY6w z1Pa$p3A;tzRm$VGFd=fal5}c*Pu7(-k^Mp;2o-ERWsD6Ef&hJi3g&)!gpa@0#%Y-W zsF4}e*+P^b3nSjKxQ>7XgSAS@=5^Wzm2kh#wio2W;mDN*+iZHd|aKYwJeCjO+UYB8;VqMjgq zKK}HEpqmPcp-C=7Ip4BNjI6?cD{hce+pfd>b@4GHB;neTk}186boK0ave{7Yyw8_o zAP2vKKFPP$hm&=Z1iSSyDO<5?6I*gjcfFh87|lLw6aNnx9~yKsLqu#X>Ov4o+Da9( zxaeAYZY-nInk{YpU2VhSbIw?(-f2MfAH8Q0+_P+&L9$4-5?$(}jH(*VWNiLYz4g$5 zDX5mQ_MCP-R&miq2)oFCCE~yPCT|HtYN@xBY-!DZ>h;N^-Vte|_35?pN5NdNOQE=a zP6RCkM^v+Y&GM`ykk-F6{*DloAsiD9CL^Q1f?>##E}S`RHffW>MQ1~-37AyN;o6g8 z;i_m-yX@fE)S?)^|7NzG7Z!FUA%g62o>MtCi#Qss_#&#ZylPo(xf>I{lYMN=h4&if zl*1+Kfan8Ta*aga{)3|9PGELl&EpL2$UxkHyjLJn`-6lv55aCpmvAnQh&fbCmF|}F zA0jFoa&K}i?=MR~v{tsitybUU3uGL&MQ-HsTAT%x))eL6j@HAPba_3gZ}osipYkCYpZMdLJXM~(k0=EnUa_bBlP#iZ!GH%(zk$YZAbejj+J z9D8F2&j3?fzdi@gPxJdXF4jL;S3f2WocaALl@0x*gk4k=eO6Ek_%D>?C{I}bc?jb| z1ye$e@+;CRNX}YwRSdNP?9i0!%45gnT~ku`kUu`!HB|J?|G-}hEe$5!jF$NKpP8x0 z)d|#Ty3Vk3nihT zB0onBq9I)E)ZdHxyRtViYKJf=FkQa@DLET^9eu@Eg)-bsZ)2|~QtB^aoVT#orR-QX zv~!~1vIi6@wG+z>vGi4X#j!JGAKM|RPk@~(EkSV6Ch4ucHn}yr7^;Dppj@<)e8ywY zcTQ#QBTO{nMMb}{E!%6BGe=}dHiRB^ZI(F0>C3o7KCmH15K81o1Q!!)329t7l-=Vqw=#){#-@Yus zWa(%RP0DA#Y%#>#@co%(YrEK6LXq>KhlR_7nn z==Y5K#~AVr8L2J3ofmG(9SN~eZ*ZKUXPFfk(vkwU(H0^~8V=SSbPPCLl17;FhD7>_ z824e(?Mm8gaF0Wqh*iwn4qYN?mX(tKp`J_Lf1sX4*&VlnK56S?z6w=55gJGkL+<*? zv@eV+Z7{#=pI+kTv+bQ)F?2$c=IRU?m=5>W+b?GOf}oEeYg8bS)ic zI6ii>$T&&DQ%M-(ao@aH@~4--)x=|I9G#0nu*qW}7eDey1m~21B2zD@$8QP5ENTwA z4D!a3<;`Q_Bpre@OA@Q?QL4*!MmpF4?KU9wcFM+(_W6ow1O`P`r7P&^;@SGcPnT%5!Xft3pUf zY3;c!MT+QT4)Qz=hz7$OiuvDeZ`uNuUfaR2QG{FXt^r)VqNvGLX&cM^jfGusxEo1J zifpy7K|WWv)A>VrMvQ&vEr-7k%BR9~7i5kBc2f%&&s9vxxJEkiNH8@W%r@=WU=^-# za|I|hw}lh^e`x2;xudv zOSjS^f=bkV^K>f?yhPs?JFimmw4l(yHAwUlLV%x;I_Ph%C^q~x&*s4z-t+iH46Wg$ z{nA;vt_tKs4LWi5KNH07ewF#z98;~z zoTF$$MQsa)cMV#ZaYYEJc1)Jx=*S`otWDTrB4J{wpy)wbwl-e`Y_m`dZLycE>gtUh zp{gSD?NzH?)z%!9y878!r1EC;%J=|&*amsYgrWyYsi*RVd;2ORZwqV#q;+ABss2jm zdXQl2++y%l_=|+2Qyzx31o7A9Y;%ZE8OH9pWaWvvZ=yZg4%iR;SRl)ye9mCz@!AAA zd2)3DU*(xvcc{D8d#L7-(&Cp^dl~itQt1f3#%d>%F;?mUHR5GWIYx?VBeAGXih6P# zx#ul`oncm$UcGfSVt8x~tGVoKpL~nO{%k0m)d!EXD_N^@YA56<$zeu~v^<}@4`W5T z&o!{u@vkJO4$>`|N#@zs9+8%k^-G7-HOjshRKNeR8&A^zgc&a*`}w~hJg)yFy#L)9 zEDvw^E<%%oo@Vb47VQt84aZa zrL@1F-unUmJP1+?xVjk^?Ri7peLa3;?R~2wBkNU?K!3o8xi*hXBsI0TVBgkUC6pN# zhV90zHbgQZ!42D8%OVFyYQ>i!#{wL5wM%YKQK>|s#EBQVT^V8lUxMx8LxmIR9aV$K zEfX?U6}$W}8I46o$%hHO*Y?+F#nR7Vn8o(+pC2HNL<>|2horndQ{SEu7V#VYoF~hz z(Q*US?H=m_RqU4Jq#%D%kQlS<;3EQ=pf&9;iLeKQV9a}reS`vQ@6R1YCf^_HPlh^te3UMifYtP=vs0y~AwjGVj3Xt5ijF}| z74f=OQus-r{iAJ(yZq@!qe3uBqCG(UlAR8tE`Q!P&MUyzK(yi!{~I}L-gmZdN`9iu zEbt?@^>Fg-FCU>C-%y8^2IE5-9ss}MamBrssld~*NU=a&U9WSGRY~-i{@-RXskap@ zjw_l_rKW2)r#pqxE%ba>S<`k8Y#||`H9rQESraX%iSqGWY-bl~`*tWZ#SEh zTig@MnqxFt+#@s${Fq13Fg#oR*y_l#N#r7KZQj?3nVy}Ab4cI^JC5v}L>wcb$~?ch z(eco>^%k)9gki3W(bpaw>|SmLyuBGaLZbSiIL{(EkKE`SPlki_Eq||z@Jb;5v={yP zjWZ=+pQZtTVv@7P(&LPfUt5dmue1~U$?g}58L9M}8X3%y09MfCK*)@R^o~{Ab|c{H zdud(q87q+M6(3A25}+pAVUVTt@CtAsWx9?El!%w$%$)?(!TdA9{0go`MmQ z9#K;X^=qZsZ#VpxhzK&S1o$wMGw{C(Zm8fC+0d50D^@9)CjqUzBR3!O2bI!tqmB%x z?N>&*FV3syGN|DeFV(sPnK1{x z-JzAQ2TF<+{%5-$JEPcz&-Tk zGVrjRn4yHss_`3120E!UJHIkVg(wD6+2P5 zX7CNx^Z_=x6wYm$&{W}~dZBZ^V47fX3&h<|b9u&Cspp^*7Cl#Y9Z=YW?fzjF9EjshSOUXus! z#XCB&^Vd`niQw-QnfF@f2pZH&hgrf=+&yYJ!x5z#$vRqGSlw74gOhUfN%s5&IZa}o zTg$KepNA^gxkA2edmreaO3iq!GhMst=$FroEfq5vk`56wv?|fFu6zGVqwsUljmP0o z>3#Z(QbGq8(wI8xfp_vq9Sr292VcicHNmJakQb7B7psqt%`pm)R{{5rYo7hE<04Y= z1xKFik!`mn3?S{$q9vK_1t_RVFhyKFBpQJ~1WEhs^$<2ykz-APe*KHIlgd-VVu?^# zoDarHA~BrnwB_VH(RPu!FD^GSU<+|noJc*n)@mhMD`e@F`Xt-9&G}kW>Hy6{7g-d^ zzg_pSAX++K=ww}xTwp-tpZZxciFz*eay-(t{e&fOhB@Q83o0#-a5LLG18105hM0cu z3{;`&{vkipH+6`A=^h9A8g(FsfpL+5&_C#d+ybE3T%3PH@o~SfcH}luoCa~02$xuc z!J99bS0Fv=6Y$gZg%SjO0zl_ph7WxLeg@4?C}JJy$VR3lXDq5kIV>{ zZ}O5boSr`$AR6$^|MGrpw5F#?cHr*s*Reot&xfF($yZDh9JYk7s&k%FFn6>Vu1LC3 z6{uBD`nkTHjgSa+hHh(jHI8YiKZD#Tp;WDxsZQsNy)R`Z%*{|LN=uic>0d(yEyDgx zc}<;tzhIg;WgNrVM6e_RY>f~tEmlfO+~iqfZXScnl6jq>`W1fIVIK4g;+K!qQlo8hc~t;7)8)ndtV{p{tY z3s3dH(bpT73UR2(zk9!5UM^UND!|t%T?u+z)nW5L3UPg=ShUmr{+_NQldK&-ZltO$ zoF_J2uGnTCrICMSHzQ4>Kx1y1+i$WJOF-G2%WJmTpSch=6ymIoE32JpoORW!Rm~UK z%I^K^3KxF({cQ64gKF8qH;$e`XF;(a1_2^svk*VrHsN$ZNV~EDqN_m2E-JP8M57&DdD-LL>d%Jv2Io zhYC*2R}(=ote-i?^a`aii2 zKfI6vIyZI$er_{AY=|z`ZI(I|860&=YT}E`#ix~140(EWa<TV+23K8+qT|Bt(IE-7@J+^b^IqhzbgbVcE?p}1nIj89_GcLooc0I1nDML49q4Tnv za$iXa&LMCf9{nsp(HIYk%UFGf!Y^LC%V!uH{uB`0aXQE|B)UkZ81!CmtNdPyY8Z|4!)9 zQ&Up~0W*!&{Vwe#{1|Z4%kbHPZ>zZ?!_N7IaG&jOeAk1F*Hr%CPIA_YD3ulg+5KNv zR=?#phbWCc=1DvB&RCb52~#9D&J)?eA%`mX9F-6E&%dd6Qd||9J?s1{bPp4FWf;mS zNRKG0)r4owyT+jHsTVaFgf6O25--kj5i= z{Eb$V7YdG$^pLH91%_j>Yd^Mhm7d%ek{da@EYlwpXS^iEQTRJiUImAYEd?u2;fiuU z_7^YeW|ADw)kos5*f;v-GlLSAIUIPT;pqqCKar=ewdq`~5qMtQ+OT;eyrzCg$h?Oj zIND*?9m=5mP#cXJSGo#Ut%SMemRrFxlA9{D0e>7IkC}))7!o3_)ATFY4_1XO04&CU z%TPa!)}j{8iLWb(2K&Z90iFk$_~zE@Jccdr;lovC!Nuk*$KU~{%@D1|YQK992Yw=L zQuxI1yc%)TlRP96w?+NM)Ba1k&kWCXM(yMo{qbq8x1)kC!Tw(dfmx>dcdkOqW`u=F}z~i_N zCi{Fln7)h`t0pgHI^jUWw%Z%Fi{VZ@*%E7n<%4;CEVEsd!znWnUre*fw^T?WOG5Yg zljSW~`Nm(^C)&~cK8XcFc+r27MH2f0|xT$JLj#~)~2Hrm7;Rg zJ{pe18rET4B3o@a*^KiFEw-+~7pl5u%+Pa_x?mH<;jpG9yHsn%;jV@2rOQNY3Xqa# zqxufBMeV9!jiN3K%s1SFs2=4~%x0j9RXe1tLkoV|b{O(P(+k2HR5ID6##QKG1K|`Q`+}Vmvc--(w!t_MTwOi>ID{-k2Q!C}3 zkDSs5QtjpZU42HLhwlYfsntfFT92|RbC-uw?XxGz*i5BS><@D$rSCO`Ye5ylMS<3n z{)pOjF0R0@qU5~#F`zt#SqtX}+%H6g;Q0<0xj8!|_Q)cJ*=HR*bmR%ET2^P&8|qp8 zN3jd*LIX79iM0!VBP)|obiKs$@fqq+ypR~8jgrvnB@Bx1)yCzJKhRk(TO6;q))&jl zCDm^_NHX{>&Vzr-#|Q=EhulA)dZ)c$53Xg`ZV_!%k9y0scT2u3bhlm#R*IsxSH5I8 zk$oKSkR;VfxYZu;;BfT#4&wdz`8Awa_ZTTL*z`xf&Myp$CwP&~a&Sf_WI)S zXLzX&T0upxC`i&^IfY{5Wb(*&2q{bRhinJGUJgq`d@FCtKehEUdB}iv=7ml|YlIGH@P?!Of3tmln-r9$#*E94n!nmw&*r z^pAPnC^v-J>k^12`F2#A{t(4LyytMYIs1q_bI=(WfwdGFghu(clvm$l)tborrN|(E z#o5E_wrckG4|6lu({N>nrW=7iTRY2ArgJsB`R>zP*==xE# z5Bu{XId7x)`XJHVl*Yr9IdfXBtS(1d?njte!hugmSyuv6Ca;KaEVY}7>ywF&5ROx% ztqt1$T#%#fA|%BJa!B}PbH8GOUC z!^e9CK2p%t5n&zxQr5*DjsO6L*-; zl!NB37irD$?&<(1|9O=)=87VvQJnXIk42y1I$Bd+8?cn&X;c2`j;PokhSHWSu_AR* zZ70!pv=w<3ftgE~BCABki~B+w+i;!B(^_$dIEBwgnkiVwio*HsP9%YX$sux$-G4z42>QL&j zz<0;u*+C8xTYDY_>kN>`vk!SK7&Usbs*yD;Z^&jnIluvy{LUiNqmWC>_vfDKKY)#s zw$Mc=YlGGd+!*t`1jT-xm<$3{CL=5uhffTynUHG+D*ZsoJ_;gsWfHLPvom7hC)EB8 z=UYS7KL)Kt!va|tbEVOihS1IYO5iSMy*a@%{tXs~!*~})R?}RMpc^mG0?P&rcaSqe zqfWjN&>AKkk%|U=|I9l2yK$Y$DRT0XdK&)JAUw{>$zMr#i;zkJFLBz=LArnJ%ji$I zowq4E&bt;?EIXPT}r`^%MY7o0&$O?}37g~Y&%vaftmV?q-?lz;dsqPK@B5WIUQ9-xt zIQxp5Et%;B?Ab-n#>f-KKyOT2yNG3R=^@i}6>)YrWqL>814+?h8&`P7sMvf*S}8iU zAYA>iI7p|aE93A&`U{eJMc1^r85jAm{IVN(9$AjTynmM1q7rsbbu)J(4y-ux5Ky6*?vg;s9Tgk zo}eD|P-%+4wJxm&4=w3e`t&BDCDMZ<%H2h$$Sv2=P5C6T;XtSjA;INO`EIh7aRNmL z0aN4(ZCw%N-uZ4(nvztwGAf=6F?a%z88N}-SCfb6ii;RCm+(mo`S3k=42n4=2@VxPy%+z#u=)`on$_kql%KQJ60m zlaA1ERQ%==Hk6!V7}G`yC~IjPUfFXcS!JQ9Zqo;n0Qw{GKl+oe3W~zY3;eS}5#)Fb zV+E)_-Rm!y`pgDXHz)33&sFRp!uF_v@wp)vfLM8W${&J&4g3LOOdjBTXc07j{r7{f zhqy&A+|OS|8J)z)bsTm^9r$0CJN>;n&j}+IPY#GZ4TK6i&y10k0(m4fv)y*y210Y? z^jXaP59pZ&0Zgh~Hz}SRKQ%)^6Q&mH5{H?*Ezw1%N;&BsTXCMpxniM7AX>oH^Jq`=vhR}r`vc<#P;Xs1cqSU?^!iFWP8PYqpI z{PK)|ERyjr&^U9K6;#KKYV7X`3YdsYPFb=l=6s_~8$fh$30ruD*j_WPLFROD``-q~L~;u^_2$BtXcndz}I^u@}YI(R$2E-!xEb zwU9RfwJI~C#!_7C%#^j>ah_CY5TqLhPCXpeSU5Tkv>8d~#w6Qy->#7JN3WNf%_~;K0_$9>qOW^RIS+ z)Fksq4Cdd-$%=wkjJ= zRhkV=MSEcL(VKaZj(RQxJ@crBsLBCI@joO*ps=baMhbL6DRgpi5?65;GqmW^)H*{? zoN0;1pD8v0N54tc4>*8}S;ld(qle%V&_05T zhVhzQeYFL^ojP2EU`gnk=F}qdT(!+h#mXmO(z9S*HdlDFKXnM?y?EN6CYC?mr?p|jZWrx!e$0$-RkJ)YLvV#w17|aR_ z)D5DR6F%~<*cmUpGBW+X&WAcJ>qb4x!^fXxV-O_Q5AoEIwZx< zMBd+j`mL9jJu>A-cW*C$6B8O%79svjlRX+y2fnsSlZgG1y{_=&M|~lGB(8>if5;sb z*u4q?bY$aEg2GG=qm#M)awe(kRiqnhc1LBpCWWhA6(RI>tu;|vHkqe#p=p|!i5Sdc z*!Z651|Dz-w5kk77<%01%6uiV#<*<1+xAqMwJ7}+VX0=nvixgfD)VdV@=ONkh#c7H z$UUH1@V6c?H|mTf5)VaC6JxH2fBMQA3wSKlOTYJZZ?!Q z1jCl%qie!e%w1=kmnmJ^g0oXNtWKO^e@9OMc({u$KL zSc8(Ageq*<(^AMEG1T00a#^rz5EA-tw$>xb3|%~2_}bH*Ot@UU{U^uXF+3pdYUSmx zq=u1GdSjAxge^G|f~Bnnx>nDnx|LRj-@V?nfDtj6x#uKRx&> zfYxe#CXYO(@I_WymF@1y;1_D>IoAae8{EoScF6{m0wpoJ5Mukyc!D?7YgAp4&DFdL3|6P5K|p@qv`#%xwfVo z(%&>9pBwhr83`tDtd?cT>6=c6qY(kF`;CC{849^_iD}v=r6UT4h1s!BCWFzX7;T*s0 zP*W(!2g+EIMMe*vX)+uI?p)wFq{mPCjYxI+Pri6JHk(M`p;B`oZZ)Z#k)oDnqYBro zT1qyV-p{0}FNWImpV)*`5fN6mWvAqTbYsU2LVGva;9Reqfg@PE*K>5n93>AMja#Q+|!!-=H(lSgQVP6=FYcjWZ{TWw9$$mGNauXA=kwG@v~ElE$6>JY!WZ#HC0QN~ccZ>AZQpZA9ahSqzpu$+*&S$A zKtNYy1iX{~kw{ZkbTFH=K$?#lH8GuPwPXB91eO^yY3_mDC!i(%{qyEn`)OSD7KL5M zu|vJLHXN-mp}+y>m&q%g7|D~bQ-<#Wq?`sGFYap^?B^4Mc2=C{aYrde4}?}0ti=?*L%_Q7CvmNvdM;ZjiKmq?=)K{|Jli#tXS zICs3@hhAgPAOz?mBd15#$uBB?KQHX*=$#!TIPa!I)*!W!zruX!no>0WVm}B$%utv- zj%t$GUJy7-ZfWCKTp||0`A*l_V~5o*x61S<+@*%Z0uezyHG=(k);|OoaEADol~ZGj-VV5M{B_&W3LCo$gh( z_oPRN&CdKl)mEd#5qERJcYq?r0_FNNl&{Btd@9PpQJp}G&J@o4kXhXh?cSEyix>iHFbw(vT1ECLbovGa@zKBVjHYuqT8n!4wALYTTwVp8>d(s8 zY)?GIJ59kMvet+7-ghYAMeuP?+(j{KA^*xy7pNm0sC0|Jabc*K?fb}eIQ8JVE)spb z&xE~h*`32hpWC{DcVpwrzH7+jfUfY}+=UWb(du z*4%s7yz8zzGhgO>ICVbMs#9xM9n{{te*e`jv*SY@Ykc+}tnxAgu6pvUACz3V$LYNM zMvZ*TwRRHq5J%)q$yBede zZlRo*7#rdn+=zXU*H>YJO)YYnJ(6knkDaZ5fR-YlYFL_)ZV%1C)b+;|f~zkU>y_{4 z;e?-`12bK%-q+`A8e`qOpYQ$t9oEI?-3a40P_k3-a~jJ>FyNvOY880+tp9m)xC|j8 z27Er&@8J@P-#ixdyWbzIJr=xP*#@p(yd=4@ zow=Vk5LaFJ2m zc%UUOSV4=N2uJ;W<;Y?i`iWqRi z>^`Lw3t1vq5+{rXD$9+AB*0rpL3KB><7>`w7`@A8N%(jF)d8O`j!Vn&%?I1($z)7( zRd&-V$Avzm#0M;3OtG5+ZlhGkn@+bDPQ@P;P81v`+Bu-nlMd>{U#p$;%0x2a&sJpN}rv zYkjEeWjzKNQj!Z`ScpS%!Z9dk%>o9odDIp`aDgmat7&T#MeWw=VQWOiIyGxkvVJ}U z@8+D#NZAsaSOp^Iu~W3T^G8|_hyJ`jA}efESZit7L!&?j1SY)p2&+4HGUNh#6>J9> z11#bq;Wi8Kug!IN9ESi+(`XwmNq)n3!Q+jDBczChQntAuj|~CG1|Zgul2d zTpWg!xw0i&8m5%79U=o*`Z#qBR+R{GPw3VPKd`hzGUpr)JD4vIPo-|4Yf>tR*o|#o zDz2||K-L#;br4wLW%j)uphfepaBxHgY+n8m?4OE7dl~j{{Jk?)zZMR&?78uj_UoEU zDb7e=5G6qe@&|sL{pt#}=1Qrte&Xnm*`!EQ{j-OoO1&8wxylD@WHvkP>~N0S1)ybv zjh8Z`n5oVjX|8qpT9L2NX}w3MTX72{3F1?)DtWQu2*E$~GKb~{E0)&X(a>xAx7?iF zVMoP!SN*Z2@LDWwPbm=n0j;-rnW`l(x2?LHp&r7T(QF*Goipd=+#vW`+>&V_PEV`F&mehbkECt{z@x{v}8R6BmOC z(8-~O6};K6Otj=Tq6wEcP^~Xm<`4)cvRxTx&g6BaY&d3nR#TwiHbQJ#(XCo;C3ZLp zsfmU)E+Ei<2|JC#iI;`&bw1dWz_Q0fm|mHXvM*2Q`Ya&RM*cW+F)prFCOfUTm0J1=A3CT)Q@jL;P{$M89R1Dabzl zcMJxC-Rbk_SNmJAXGziHFApsk3%tWkLs&T6(bFHd)on(Mr7Hu&&i#bPd73lc7+!ol z=E6{p!O-+(bIg+n;bLjV1(YQ9Njnz8RBZVQbH^p=mD9<%b127ZMCnFuytb4aYmU#J z-$kaQ8`QJxg~52tij;P9-L^ot@Sdc{5Bqv216$A@i;rrUO&h578A%3DXdRLFIG`cw zS}6zH1?W*8HJ&nB_EXZ#Y~ow?8{jvd7JPZa{6?tvJaX@`e|x>ilxExsTe92gug1Z+ zJ(2Tu+bYU7UmPmI_S#XW_t}!g{!AWZxsxltN(2Ig@=l-(9uKy%`sd*pMg^i7TE@>Q z0-)U)rpkDa)(2>8(wS2Bt0XqwynA|ZXx92nvN;wJx#*ckam{aT=D;`pfBwlK)K-&+ zoH2jtXB4Y@^wQ2?TDT&SQPoz+7SR7DLpDZ%C~a0_DRlS-D&m9MSH*;Au3sR4&|Q2N z^x8&l5{q&tCQ_ROzd7^8vx5CKkR)+_>(je{fOYV`ybfvEbC>EMK~pFsbzsB)c?jz< z$b}&wVEz^D;1q(B9UP8QE|5uS3=)oYGWi=f@}2~;CZ!mMyx_TUH5(t9Or}FTj^P(8 zHzKuZSGVxBc}za3khDNm4Ch~gX0E<;RJ$4wicWtEL!gcIJOxL5sa%Kk7@y6oh3%C8 z)g<;xP6zi~cN6!zQftu>c%v^5k6pA26;;uQ98%mynCQm}K+Z4tYN~E+#z1N_)4*r% z8=2u2wtY!Pr>U&49+@0y#)d+3GICLo=%=;1_%Bd*%*gj_g^Vg8ZMuC67J8LJKDl!B zZ%bQvI|9F*1BwR}PC#Y$%!F}WK1oyl@h0V6|L(vP?emIB`ZGeK9jStZ$2L=oX%5m| z9yZIfS`B{$3mpsXcBOv~QfIuKs2#E^sOZ_L=o>;e$>ReF5OOT>ZD#d;Un;pj5%-SH znM)>{CPu5dO5=LDk+Y67+#tS9OhD8cUq(GBHxV4g+ooq7vKQq(o&9Co(OwC=Nr%0P zG<0q`F9gydUFBp?^UjeYy8*{%U%$ijF9DqV!jWH-Vqa%f<;@i{%6R#&pr_iB&;D#CBbfRN?Hh z`#CBFMQCx^3kFnEC!9#vBDLMp5DAS01-a#7<;*J=Jc9x9Ugp*v)+6{qqWukL_o3ia zeZzssX!-|z$N954Mmqi*wtz5bP8ccg1AHK73HgiDqp2e|b3X!%H=&oJfqi`6$Z=Js zerv0K=~)$-6ZF_ z@&aP#gnG>tS0ooy_n7AmgslF_aokH%M1o7p4hinOiGZ$#TN(nvjb9Wzw>Zrpr6!hU zXK+{Q=`i%NtAhsG4fq7o&@tvj*W3j| zQ9O*Uq6HS74?IVYv21d2w|Y{k$@|rbvS8(oeVyt>sp4Ht?Nd;HmqgW}G(q->JAFMH zgQ9up-_tN9?9!_SwCLU?>aIpLY(y3kU7!YOm~16m3Y_N2R^|p;LA2}Z3H!A^_af;Z zp-Z|mrRy*<%hTobqgu>}F#fE>SFee{#nf+zjID_*E7-M!xRV{P5dFdJ^wPZN=HqebH^ALogH2FYY zi-|yZJ)rkHd?!8ybMWbhUqe6*%_o$K_`DEE6CSb|L^@lX{DHbr$3D#iDElaJXTYZ6 zci|FrbWPTD^yRO5{wY!Lldd(L*}fH2m)ZuaZ(^^MA4!xWmDck$)FHOfc?`lV@>ww+ z=XV2EbhlP@M4P++S{H=Wl_GMDzI=cWq9G3(YQa9;MxEr@{tdp5NNU>B!C?}KjRSn> z^oT)5`h2a#b5##P3Vu48l;2RfxlS$7rkR0hXFxY3ME46mPLFRxImZ4yv&x9OzD{<| zZI7>W=56eH%=0$VWUZ@h*Zu6ga>urXfnNqJ>zpU>ghM5P1GZ6_rhyj^Tub1_cwcCu z4Rm4?(%SF-nh?yDplCxIs9{mKxD_epR$p0hV~w4}l5c#uS-%@px`R5j;(0?Awz-HN z8ckipNNzWzH+G1uGM)8QNGOSNv-bTKQrO`ajM%jLJC<>$;r7k zcgxzn-;T29NdMrJXjHtAh>LYcQuWJdk$`@m__s* z-K%Dx<`W06dF`4u_kM-o-f9za71krgJSoLvKp{ROTtCjQ$6Sm4Dp=pM;bMFOy_jqHf@9^Fe6iHm>?SRy+Sg`-*x?ffc{A_G zg)=>E&nbOVk*v|ZBo|ITUocMtBkwB9*BIL24M_C?`hzEKOT?$*1rf%72*8tsXpp2p z$xzKHFMjw32mXF5gtC||hd_nr&rVdW(Y|zm#e1%B0kzbrhSAt6UV_6;2I%fX?2Pz_ zIq%Ug|1K^rI(E>)bG~Qj8;zB$C94HtJnrN|`F=rST-{c+1nBUk?Wgit-pI#s`|}RI zDcg~IPTER7|JYLak{Ji({=H!Z0)=k;Hk3Zxm|biWxN2V00ak?%27j><#lgL5rpQc= zMdn!nie!xX%RXn{k$;Q>b$ACm+)5~yVX)?-QRJbf$#kSPa(cLZ|}Y-e()PZzqKXRZGYJzaDx9-!5QDJQUlQe2kmk?uVwRbWo{h8 zrbw+3FwjJ)K|S%Ktvphm^`gH7#o zzC|d2GtzEfjU3MZEeoGY)B9lG48j#u@F{51Ty|o?ZOdC(Vwi5C>4K=Iq^BlgWfRaA z8;Qf>s!uTwtv`E-y;VUAcH*Kh2dJPG6)buBrV5yvPoIW5CE+vB_`Z~M4~I%2;$(8l zk8euoyq+kr&YPQe;>!z4=St5OXW_P@{%(zMo`@hsknLyEc#K5Wg{D7}f1X@mr_2vo z^&)eL8Ji_}SvnNTlF&63hEtI*bo?bVm8!pVK9}i;$SF%=H>UY0b2=g>BY$VnRE+z* zG*(jGdn!!~q$oAVO;NE6Fp3#ow2^m@f0IB#0G!$8ewr)HT7;IY8re8+HR|=J;{L{1 z%(zBEc{MRaoJIkwEZo!Hv^jebvx8;MOm`_NSbkC-Y@4+^bG@E>+lAk$gYbAp>58KE z{9Ks3+)J>40Hq9`BdZM0REHAQc>+hL4Wr{Gm-1v%J$%-KHrmvzeT!}Q=;^(J?}}RJ z;_=|3B4Cr1<1vXb>_$`uphMKxywwoCYWWiRNZt}6Q%_vKBiJrwlA0L$+L-!>5aV_( zVxD3wb_r6blmPnsbdr*&nUW~X6NC%{(xMNhVbI5OJ!Mm2lG)|SLqT1zALBdPk#E2)Wk`8&8oh&y`fgVE;H9xNEiIs zhsAjh7`inHduQNQLs!VKT2O9<&4F$)Lkd(Gx~<#mmSq8}^I7fISI(2j?qMX2B~M}6 z?7EXm4#>bco<~!pQg;RHfIP=dy~l(05>Q|&9^8jN#;xKc0e2EO34$VS0BHHe7aWsS4 zVx;?Gxl_|Q9{}c!LjG}EwE;^`jLO#};Oim_pA`=GUn2Iit$MJF&7 zMjT5+SADYWKKLCjTJg;bf1fzeWX`RsmyDks@lM8kh}nkzkbfZI*vJq9A?>6h>l?d0 z!O-QT6oL!$Or+Kbc&z;!xI(ke=ka32aVB6DLE+E`PyV7hOR)Q0h^}$BX>9OMO{eFvZGGZo(jMBldbBlsDzU+H zG8tRVZmDKYq9_$~;YhRtbW%`>6S|i5p+EThcnm}S)JmLk|5rpog3Z3GW-~o`##(AM zj~8h5?8&&+Y{`lNqEx#VrNOwWVqVp82fGR1yWmmitDo_^y1 zlYn3VDKkY+&+bBvqM7s-a?m%J{ucp2Rtl5W5W#Kufo$>!-bCTdJut|?gVM@Oi{%4B ziRY-y7p;{<9-4I^N`zH&2!`vZwy0qh4WdjXiTk(Xd6rw5G%Da!0&Ga@ZfWSDG*EiI z_Vq73H&v{#ne!-|<~)-!o_KWbbQ3-Y^nQIf+S-kf@#IB`<^;;R3ix3tH-v%7$cN9mKcseloS>civE+S}X&k#0_;=^>< zj#DNuqV_1lqSGnE*%t_NQ&YQhi=Sg)Y~gl$j6X%1(lz6-B$|pu zH4)4D-sy#o{`-G*WVOb40?rb^Zzqc%Ym1@XtTfho9gX^~N6RjF&@2sRP95*R9=6YQ zRP1XAc8G=MJW8HO=!$`gK-_AEh>6fot)XF1Fu|V^^bLMn+ve<+u3D-YH>WliR!Sk+ zLU%IHnU^LhMRHsVw#}6aq@v^XvpuxI$bv2=ZG8=f=`+~2d zNDJvL@g>W~w8;*&=s&Owv|&~<91WfbYsF?NEZ}Ai)H$7VK0XW$dWdAq<@=4BImF1v z#+6qtfrQdc3j!QGW%4gaL;WDx2Bb;u673%6>%qrZL6-ZN?KY&(sokJF3EswbQd$n0 z>IZ@|iO!VGK}Fd?T5h-A-FW(1=%U@WY#cJLBlo<9vvM(Ovk}NBG7Ul_m+tZIX6vw=BfuCRC*(}T2!IaD-+Ph@d(_*WhU1xw9M zkZK3uz-Ak@+nrCQtZ&Y0k*AVC=MS{zpOpbH?}lomOij$d(>WJMlS1ro@A}30#OC;` zhNHYaDp@DFrqzZtU}5>XH$_4ON;2cwo#Z(3@NXd8X!9q^&Mtn)Gh!1*W3a5l!kdIa znxx4DwK5}~)Lp7d)55N4cx~w)gi7Z2WTor9pHjrx&-ty&e@qOn;s&P);knI^Br`)z z7k(^U9!at_HEW!#PtMNqSu)SiW*WHT6|W2z)e-%6Ihc)DUKux2DO&b)SD;6|zd=uU zqJx$?x8=+veSD-i=nx%}HOcK8pu-PjXAj+j9%ykYGOa^q6Y1E*x9DK@jG?ySl)#M- z?@`OG>lM=<*+cpMYhyp?uou&wa>M11V8@*u>S9Jlx2Tt&j>YS9PzAEqCy8lHFdC+- zjJ3ybqdXbbe?N?GVlq>6`&ua2vp*s*k7NN z!3fnKLgw7N#VNg^g_fh5^$u$2IFS^`FI`Y5P}COl@6zgVO9NqtECDYaCzj%p6u+>j zr8j0AZaQ0UHjFj)y|>DewI`pbeqEVC-BURpsU=PB%s{D`K8Q@Y01S!5Xp;xk1j3cW z*3*lT8W<=ShO*LK5n$Pwsg8UMZ$r9frdl%Gx{;87P<6-qG)64n{DuZyfP>L?xJo(R zfUF*UwtC~zOq72y=u0h1L2D6FHVgwPdcL%7k#4?115Jk1(1II`kI;dt?_4hs>!nG|1 zE05t;avQNMX84o&CXM2C1h(m5)Un_sto=O)*dlv!;nW@lajBO?zWM-2C?Q4Y{#|f zIyHea9!M$^y5n+^e(}3UtUdG;#Ra0n83VH|$peNfjU?Y8xt42h{0TQ)xhjj*KX482 zk(p}a+JYyKF(dRCk%*dBAGI5yV)%p;3#pEjoZ0KjQ$;1h5y}Oxv5ua<9{D!g+mPZ} zV?vs|LKQM@H>JC&n>!(>i9*=hM5Ot5gW1EnQr3w1_i*D=)-;&+$KoBmMU@d_S&kj! z3X5iqllnPHKtr9-qHU;wzAO8twlbO)1?<*#qT{y+V?Pj?%4)y3Qs060)7wAgBpa!1;wBacV-5DmGZGWNJoEx&IkT!pccPvs_$Tj0u4` z7T9SZyE414-f+#IJ(P~DNN(MN)<<5%vHcj=CNOft1A@+7kNB*2Mtr_(TtoE#fzaHD zSGI3sAibSD@$(M`8nzu?ZN|Clh`5&r;7P^d7=6#i3WvvujP$@n$}29Vpbk9=C(f++ zP}SlgZ{-u`m~{PGZW_{~St-D(Tl2wo&xn;-nmc!HPTXwdW5T1>k>Yi81bPN41718U zMJu-MQyJ$JR>qC8{d?q8OQ=WH@=`+!0ozF1Y?NqiEA#bdpu5e8L#ptCUDww!W3Jv3 zPvv*Q*QIi1U3gSn?#IL1W1$RtEVE>NU|8FTlu>8MNf?($SpD{80 zpa|d64+DA63N}bk=--$Be>-OCK~*#UD{+bcw7~xpaf$zxq5nT|KG`|h{%6jou8*~f zdTOsiEc@-S0kP766#(+5Vn|$oE*AEmpD39>l&r?V-7;*`E3{oh%QCZT4DgV`vj^(_ zh_#B@q~>q3(YdSBS&ualx6qhYbBI=0NEbAW+EUzhc5=z;0Cc}Xt^1xz6x&~BIc?vXeGP&hva&qZIGg5VCWgm9iy|ajh*l_^eRUj4=VPCRcK&i!11<#b#>XJ)^|xviI+{e^Mc> z#>HlZs;G?%c~x1VQ3s;uA!rF7*K5*R?*yguIG(+ZP*Lz|tzSR@T9w zCBfm5?c_>`S|ieuwB&|KaD?x%8By!(mN!k_^V$6Kn_OFcSdxY#X`gz`Ng;3D*q<`r z#>7-zZljCq^*aHY9~`+S+9&rc)5 zMd1Z(x^|$HU?}FR@?+^3k5DUMdHNwtp6Igk{_-h@)(^!*|B;2%=5x>4L^SG2fyWji~!*xvgcJZIzMHjeNNc7Kd zQ#g>m}Q5r(-w^Gk{tc$uh~=A zpCqZtWAO+LSi}zD%n@DJCfOi@2EPi8n=Bz}1FeA3#JO-qRkkli;SCuS5RtBVoT4;w zy}lHOgq=_hIVMYJgz$YK=OlwIg-aE2aPYVT%GCT!O{4T_ZkE)kPb`9Qoo(+)H-TGv z9Pz3p+|2mKm2DEm<)1>P%FU7@&2E%)a3Z98-e8(0Zs!~JtU&2CT zMT7g)Ngrj>u3Q(9m&`jNBs{UW;$5|^YwuQi6#V3AML=5GP1pCle^P#Pz}PCs$<14r z2p*)%aq~x<^!%O}y22}BIhGpnY9R#2KRU{=Gpkqe#XHkTCbhXB!RQ?wlhnVb0vKm* z?dcaQc{$;p`U(*20od1jrh8q;DWfthW>j?v+QtilT+wO+;}w(1K(|6iX``tdWiqm1 z#K>w(Y_IOfa;^K+-|C4VDd+sQV^2f`S{7sE8{FQSw(2CkKI&*~JL3G8%@#MMwUs4i zQ4E(}2H^dfZ1yaIhCr$Ka-;Wec{i{Vd3odC@+y7BPH5G@htt?$A4oS96)6aOuUH{QQHx+!prGnZC4x>pDYDQk$TJwiMN-$-&;%&ts~0^k zWW(4;1v35^)lkC$-3Nydp7qQ_Hb{P?3B3%>k9_R^=zfSzfG`ck#`f@!xuVo{ea~89 z%YymHM5~?Yd6wL6RQb^>y@-wcVbdb&?jW7aImpa{2(jMr2vv7EnT+XAvB7W8?eS~y zLHA5xT)#}XV%&1fMN{G-*<7n4H-E??z`S<2x(;{B7n&U~l5;8nVvnf~FaDeVHb?39 zo^@|k)17}<5Qd~u0wm-0+#BC^yOBmI<^b6537Eln_1jIWAY5oc+94P`I31}mi+PQ* z-G75OT%|zkb6{>ceNt0|Pl-0AzdqL_r#%{8VfU_fgp9Uu0dRKku+Lfu(IaMsTk;SN zvj|Stwv>iS4v@I(5}y<5)KSTh`LyK?bO~U4GF*mKe+%1Tm4+I8THrzUb)c`RdK1{wA8SmL%W1>=EQbe*HrU!~#~`s2WxP^aXyF+rFkgOimypEG44}dz8%FZ>`f;RAX(FJ>2TmNqmN|bCInV1a&QE?3 z(`qT4Y8v)h?4}yk?g8eIu8`A(pnF0krOm;7&uV7t2;x5+M_%PQgG$wsnej*0`d$7^ zD9OKdlLQ53@)x&|)3fQ3I@qsqXcRScF%*k&zuIQZSp)}CpI<7wD#pG98Ko~gE(3gm z?rCf(x~>IXx;w5-PFCnu$PXB5MdJX4(gEAQc$P<4kGO&Z!{7in2s9QyX*>|?<4L(v z+N;Ib^m*R5KC^qyWDV6<^B|YIyMnutl46H^rF#^M5`HIyiT94 zmNLAq8dj?-CAfBpiP5M888)a9uTddG@e06)GmTD&(g60+@hgH1LWx^+?rW-wbQ4u| zO}LRNOcF+d@jzjpH)kJJ`(0;78z3&Io<-33X!sEoDTxfWrViya!BC(pLO5qmF9SW( z3H1riO3ONRpdo+O(g9bmfsUz3nAoGolSKW)>*QVd^Et9YA}BMmYQQjB7xG7`8d)y> zWnGFj(7a!{&G6@)*6j0L?>0oQ;~C2kgKsY!PcE`}{efNR?o(3m%2dAtUj3&L2;%4B z7)Jk=vWWG_I>FEzM^?JD74q@y`?>!Z_LtIty;c0K& zk?|p76J8|b)t}vHh_tmt9QVKBb`Hrj&3uOeG4q;SbZ#|xWaH-&0k6lYy0H2JZyqmh zT!WNDtDs=Zxyi1L8l7201His)&MI%X#^x;B2uR(55-7fKdE>%~AG>%26d#rSj!mV) z#w%A8gO8q`O;Z3Q!yDP1nD#HQ&ElG^)+^`ctfcya+n(dOu63yMs z26}dY9UF_o7(2G${UY4-LuUcs6qd_`Lvz@~M}tyMmT-dK&FKY;pwrPX@5H`$K`h5Q zK>wV4AkaqQPbzOnv7)M(9;%~wHqw~FXDud-iSGL3nhE`YXu~ipZ;IhqD{>`Rb2_Ca zojw3-?`IV)yDn^Pa^nCSfU(+y*}?Fz{2infadNN18X6?plb=&f&YXcU zA8O^oiswyE^zKML;&s0-xuu2r;`i!_=$Puy|jk ztz&WD0>1y!MT&Jha25W+SE;701*${u{-a95rSXs-S>S!GN2SnPBBPTu^XvqEm75Af z9l%{4d9NNqitrFj&XtPw&zmE&K;R$hdz--08cm2~i+3S^m8ve78Z&y_ z>$`aHeTcmOROw+@W!qk={fi5}CEX+P)__0-tne})W}`XXQO!%K#v*U42==>eH9_`2r@CGQ{^ z9X={B_02b%^+p$B2#2((E-xe>PFX4R7YlNY6B+GMwO}`ZxhzamoH8q0Q^57!_uR6D zl{%v`y|QM`RSl6RP6~Db?ZEmvDYV3g9bwtt4ZD6}>!leujxx&i%-)6vX^JX`)M7?Y zdu6%$su)FG%K1=UR!Che*0ZeWW@5e8|bYweo5n!^*U2-gAj=gp6l#VDNOESI@d_Vo2gejNqgKfj*0kAp4 zi+1>N?(h?T!n-!Hl({=dke2>F7v_E@p^@l{Ud|GL^^YA3q(@7#;G=)5f_yhQW=?x& zAzM7EH5k+i-&DN{cD7y$DJGG2ZR);1yoVb~V>O&aj-vLrVUM<151>nP8?@TRAWHL6 zDsn26(q{pCN`-#<9#&TImvHWeRD0muD2_sp^=bvQWD+lsSmz0#i<0p6!DI2>H@X3P zuPeM7LH@Y^_uY^wH-6(EVXI1Or#sO&dc#a2bvPybVHK(60Fccp9ex78>i%-j}UZ;oMTt70l+j@3=) zh|2uRn&m4FiWyL=YHoUcM9rcEI8JYQ2n7_7yFM}{>1Y9@K4+?=<^B~l{yIaL6BGHt z6IrZ>bGz5Jr`H|KVm0e4F3)#ltcgzFh$()12=1j#-50y4SY=*N@ZuwLEyk*^&||VX z$9wnW%>tM%YqwYl7%A{7ShOH(U`2L!VVTHg)Llm<)8p+@#yx&jP zUegHgUxr-Z?AQVqH9F#yV9xD{F#25Zg9UY7N-O0!nxDhfW9kFumvN3`XkS9sK;ID5 zolzO9Uob?<|3u5V0>|do;};xbCQ4(RBWAn0HC+{6%xgaiU^5yq?#b~UYq(PVn=9pX z-!xWMMa}OtV(g3Wqz$Wre=iq0B4KnyBnkMKvjzFW|2$AO5V+jyw)7J^mYu>FbeRWM zbdwfj>NZGm0ie_%&k6l!I6h+4<6cb*X93G6ta^W7Go1tzG6>^dJ?};UAF>&l3o}h) zF$rK1fNCbctI0n{R2H^Q*|{)7OnwsR_ZFeO2Zhb)_i8H;8Zq&RN5*4S!x-9*OtQ7G z(=zH`LH@kT?pt}Fe_W-;T*?m;3NZb1Me`=S)tNG0M-@cX*`hCdEA)3y)KZ#f2-%tM z9}i?w|GB?${muR5G<^znlIta_LQrjG8}hn#^sParT^xtAI{|sG&L6-3xFB8WD)J+gB1l-n2Tf=)h8=PddS z!hBAZ56pja5svm@N;+C!yK<{S0f$_W4ff_J!&En$4Cl3}x zV9EKyUGb+3s>@4pm$z)|Mic=^EaD=FuqR>X;P)CbV=LfP>oy6>a^VtLKHQm)fKp(&3!-(Rqe8N(>o)RPP+wkJb3Z#p(N$pz7()`GESWJ_{obxOw*w-#-PcTNMbL@IEkuo#t@C0PYF5k(3gwmf6Ne z(SQk=moTsgls|`7bXGoiI~RQY4HwGDaQ=h9ilBducDC@)zp0p7f3Zzb3i?Gu-%q*X z=hNFs&TXKDz0!W(h(^^_r4dw|Tntm%;P5|`0ow==fQaM11zUkyFVsFqWM0WU{w}Sv zDH4)c{zAYB(&(Qkv0R90<)6-h?em@|X1`Cjzv5m^z1D?%Wv3U-F&#t7Vh zR4~q@-)_LjMoMtMNaNfp|= z%)S?@tBrv@nH)JPGUT$f&&gJ-Y{4TNIgbtv5|0M&&s*%wL~9fLS0i{u$23PkN=4 z{a`knI9Ye@ZBQb-pLFT@u1r{IcQ=UC?Px9d*2MbVD_M@Jwg^EY#hI35)p0=X&&3)Q2s|<9zd5nx?jZj{kai8kk=`6P<>JZ<5P#Sd|NiFg^oP2s z!mHEAYHSQ*=d-$Y$GVy3#QvLt6;Y+iRB-%{Kd495*CmmJnmmDzFIbdsXb_2ONYujp zWnX{m^O7E2&-d+dTJZA_0r5Y;@tb!@Tpy3qc7niIM88i#yE~5%Z~xKPn`Oan;Qcxg z&wp~`KM(0aL1;25BC5H@O zfGw_7*uzOxaP-&F>IUK)>H5YZO9%b3e-GI|#PSy@SmLtMPh@F!95K>+wyuUOQge47 z7&65`{RNxSKEtJU`-aV}$Pj~Vx0D*ytSDmq=YnX^-Lv-tGE5`y(47dS!>CwDLo3kr z>!2Z7i`cgMj^JY7QVkZR?eK-^>U;|{5VMXM0q*DG=y^P}GkL+i0|9DdZ1BTvJz_bw z0u+%8fpVk?asRCk0V*Z|HK7Lusy12db?NU+3!33@R$u&O5_aPu=APEylF<|4RM^&m z#=7kCS&^~e*AG3GaJxTv=Jw5s@N1DPKQfQQfgixr%hE4LUen#zq^#k z0=4~NDthO{F`8NSFx_Gw{?+JxI)+Fkj^R-B<6icGqE)$KXp}X=OdY2GXA2;pQK#_z zogS({RlCypISLmCy2L z0_{+y%E=4gGWA3_n6oys%`?@Cg5mTK2`O4*T z?JoVZ5fKIkZ|cNJrlosiQ$`J@R7-Bh6se{ZC+V-Al2s$gDS5^nc5EATysYr`5guug zH5%$zH~04kU4ys&j}FdThJWhdSa^^E*jCs#luGLFxb#YoynnU-5->LG(8E?^jNw@M z*O!~wU2MoB$jK|SDcjWv#BHeJGrQ@O?no(he(03uIk=sN(}brDi!mi^&{XRfq{T*{ zK3$x#Ea-w0`Zh#b1qxnzT$} z%^6mwEdtDG*@I`Q3eH;LObrfA89kkckzzLx!7h=A;8ySw!M3d2C&dk%rp3=kO`mTI z|0Yd#rC_*7Mqf{H5j3MB7qIXHH*MF(!OKL=0D2>^PG#-Utg*+gcV2wIgQ6v_H7Gf% zg7?ST!xX+*d?>h0#~Hu3diA18Vh*G)BfzRsw$zk9<{BDxLn06(&wl46v>hJp!!FRfaFzzv)z|wG&B9G##^|Y zIk{63Dy(io6qT}c59~8M<0^1g1)kgm)Dk&*k=Z6HRpT|2t)Zq@-VP<3y27=EsNHr> zJ`f?RnBAyVSavZHRw$-0GR}9XJngen`QI7fs5DE3;$$|Cs6P$!06IKe9rzC12l(}> z9rR;XW!Oe}kQzj(TP_%Bim1wwqB(8Bs>U*kP(8-*&CDedmS^m>5TIqr8P~N#$CpX? zXbX3D=ljQtM$p9C<~=@%(B8(B>Ooq{(TtRazM7H?!MJJWLX)q5!4C>R2YB<*zQs=J zSmQ^~uP>tdUTOZ<=COy;7HyDUgDsUNYgSs#%0JV8|43*pDRV7^Bq^?qRu+sWQWx0v1bC%d7KwAW zDgaWm(N|B;3m5py(&M9+6Kqqnk!Nuzi~p=jIXhA+!c5*eI|WdvyU0->n$TZck^3gc zMwIhLPI$MB8wI8!-ApO5<5Yg^7GJVY$osjI{=+Yr3ItYMTjq<G#8m1p9?XMOg5t+f`%W*NOM^m$q0uYv zEHuMpD_J=Kdz$q?Q2b&D;PzZN2kY zCV}N^Y-xuRJ<%N1wa!FqeiiK}B)g-*;^?l6;Z@&Sm~;CKW5C7ME2EFnZPWcW-ONY8 z)=Tigf(z%a6(4>A$i(AK=Ws!}qBfwY3z)0thWEYMzHZ@C?;p!;h$!vvy4KsWzyHj%(iCvMLYr#%D)qxslWH8*wIVf+k+8!|WmyVa& z-0hG65>jpH!#;XyT{AKuVs^r!C=?X-j}@W(fy-`G01g_@F+V8yRCDw@RX_XoF=@kD z`pon@>~OjTmFF{0egmnaEU#zffaxMLNv{|Gqvh(~=^by^Smp)TvW1y!9wZxx>=Xpq zFHOK`KBZW(*?l8-w}AX?--A~oU29#i6pn)Dvyme@Bik|oZJOpl1+@iEoL-NCcya-5 zI-Vt8Gppx z_YN?!Md706Y1_7K+qSLKw%ye{ZQHhO_i3NDZQJJSJDFteOzxY!nVU=|sjQvUMryBJ z_5WG5{`GxM>zaFONMkZ2%P)P%`iTG;2@m&PVlu3_FH!mCs*Ro6VO0M+r^+kO*Dc#-dro1hB_?~%EW8J~K`?sRvEN-9436#Ucyk8Pw95V+$s3y- zM?N%+RR{NM%DhX;9-DirA`_ljql4KYqYz&e3F+h{`?3*UE(u z!Rj5!+V)KnzSM{~+PEz=r4|8T(k7axvHX$HMetl!y7J~8bTkt6nJA6h1(CHCdIA@e$aq1H38YA^VpH+r}pvJ&h)X4#} z!~To|k-)PR{Z`hZ;wdDX-wR#|{CVS_ZNoE|&#rN@=wyXO92F#OTa8`Eu_-X-CGuNO z0JvSRk$55HLT@Gi=)l7{X}5h!=qU}t^py2fAg`=I%1D!%RAT2l;MlgtLH7Z89Zsvo zi-hATaUbr&u*(t0oyIwm>_FI**4a7qkrZtOI+A`5hDO5#Lnbewm@>jWLX$8b{xtT~ zkhuz1*o#Kg29^eC<@M?}m2yczm5e(pJkD9%S03&U^Ayf2doIe~VY*m8P9(qSSeYUU zDC}AHOtebG?zdK>;URc}tNfh4uvV&XjH@O00eFO~3{f#Lkp31GbE?ri5e2aGeSoDj z(GWFKjv83=${zXLy5Hya_e(9u7S45v{&n<+<&afymy6g?!$uc=!?06jlTLlcH*unl z1y{ua)U%RSV(_T|O{Qh3!4b;AG*(uS{*CjOFs-UoAnz`@iMK?e^ZjUV{=e7o19rJ7 z1=3W~0DYys*l($nz8N+5^G4~6zOoX>^CoD9)jpdcoJxfwkB)M=mZxq5z%kAxz%O}Q zFTpV{#)HimpB3x5@OL=;q?nLn9&-oQi@VyeFWqb?#{+2)0B>GzO>VVmUT>E!*>2dQ z;~BBsWu7TqeoL6C?gDq|I6^m+D`(_rNVX(9S0nr#k9mqpr%0XGkGngQltyTT*9)qw zJl$lr$HoqfXp(fhpfxUgw#hlLzreIK_wSD{=#=6{<}^({DVx$llju-Gm|6>2qf@C9 zf;%a9)@MBJS&ES(_gx=rflO<|<_cgqqpx)Z(3{aWDJ-b8dso?TRdxYj*KIO915A;J z444@|fmtk8PoL2Ux{GtBcAtb^lq(8nBf6lW5PFmqvR!1(w`n5YmS=q$F|y^+=JeX> zV-mi0?9A0aNYUo5$N1Z%_!93<7FS1GbyO6(z-s5UV9Ospo|rubCFZJCg9eWDevUH` zecT~>1Rl{?z5siNZcE@9ihkt z-D~%xU25Eyi^UZ2hKGot8SYv?z7qliO>7@SG=?&R)J=KT+~7Ewc<@(Z7@;;}bYcNB zBHDSZ6T&UD@CAcUX_2B|?ZcQ7@x6qO^&)-Bi64BoM$0z?ysT)Pdf1i6NFW+!dck3$dMDa0XRRV`kvNT%V#gfAD6zM6! zt$AXB@%IU77kX{Xr?zS8iC}osxph$5n48?JcP2U8f2K+n=SL#J^e9Csr5sHNP+Zo| zvs%g@_`9b}Ym1ENj`0#Bwzj0Dm1nnYxa3^4wh~mMay6JXAGhk2i^RA3Ipl!mw-;oT z`UVf+d@G^T>>652{M*Ia*{(Ew%BX+mY|5dbf=$@!^8SOPp=yvb;l*=?!Know%WKyA zsvtn^(6_#=X%W4i8pk9KO%faS=)GGPYan5vf=KTLco2iI5ZpEiHGmM&zyNP|GZPZ8 z<{R1Np-SuP3_XnWNZzecm*lGctR6ybZm#JaP95#r5TyC>RpEF9!v@HJi8)Lu&?a4o zN3$3?R9X$xiMwuXE(j|DG?+dexy#|_nLYzLP`Oygv~_lCJ+AG#YmgoL7LqdoIR*`+6X_YPcx>E%m5_m;IL=*TGje6Pb%=Fh(eaeGvy}ei#r!e4 z=Dsks_%rT&7OP1vtTYe}=is=~pWpa!k&%TAoizehE#A0uS+go-ttox)TC&5=#^7Jy z#o`gwxeG9sV>Xds+AYb9+mDir{M2kjN=0L{F@|**pU;T>okX9GTg|=;foE+(YVEfH zJ;2yM{|9$LbgUP3p||sklz^K2@G;*nbgabA>!6SJF{EbIixAeP zfK&2yN$j=$2mJH?RW`==iqKcCgf^c)NX+DS;FDIcN|zhw$$3fgLexeKg6+gm)$1qb zbm7z0L~mR&bCKP@)drI{7`U9~h&UX|e?p|9PrdNuTwOxi1|NOK!-vc}8!)*fHSxlk zw>=~rPV82M>yKV$hOJUBewN*a*Bv7pZPk2JoZpYL)wzOh5S7e=i;~4-kXlThc68yvRaC!HE0UEHj4U>L zhgfQw3l0QdUW0g3eA;kzS6it#D~{SIoU_UgWfqi7$wrmvGyYQPxDdgjwoMA&3wsCs zyCI2s>)+Mh!)v-3^&b6Vq ztL#(|4d|Ihr8;={F7Q0r(p#%E4jq1nMfIFG^@pxa)d~2cJ+Ju%b(UZ24Pnue();8L z3Qg4tji%4;6MH;f8#X9A_Dp+CN5SI#`#WT{=W9(E*Jw1!sATVi;G5TwP&Rs0l0gFS zQ}$(_OwEkNcaVX9HyxJ*Cu!@R9caQ%7`n+eDV*XGaDjv+o}Bz|S&ALCh?Uok0iVm7 z1o$jWMA#QQo=~uomzV9<)u-0S>NG%?Yw@pm^^+4k(=r$n0*mvN^lb@JC2LnevDzU@ zK}j56>$cSXv~EgC!nE@w9-1XK(yHLZGJSI8^Ffl!paw+N!q@fOa^0oakh(l42O5BL zzeTZr_j7=zVuDASrtC*bm}aSZVH~howlY9fS74ssUuCax>~di3X`S-Vf*-;B8c&N< zK~3_2#@OgnbAwa?pq%dHJ2{MMWzlYRe+{27mT&R9V>zj=fR3k|m^$nynj~bItev_= zE52c!rq%isss#WQI+MAwj;h52;j!dwXUDTa!JVY3cC#@f)CcSy+>D*_f79AeGpx)i*lx4^U1e6JZ_06|FN%b5xwc12c!yc^3Rk zsk)ApWXWHS(%%;<(Q#$-Ndy*>mF`pgsax=t$!}-~;Sqa9vz#|F>>!gUaukV2ZwJf; zvVcC8xw@xPYJs^#wmGTLiONm|XB65QZl6stj10c)7T;?*$vTP@y2(jch)|&GosQOe zkvtH|ahH?Xn?r62`(+0fP0_bDU@)W5cxSJR*)sq^#I*%5M}6tLi(>DDh`X1ASB*{B zoH$dwabX|iSgj>+FQU2X2WbZ#cFUB3?b(@LdyZ(1*LxIuiI0B(jT(v>9OEH z6$QF{6|hBrscdyn!POWY`_>R1>s*!g_JJBfCFv{#v2K7RCQ$zaqp!cmNU2#7jI3+s znu{Sz6toDi3j>hPEBk$*G+3U7D1SJeqcQ73c6%F_4Gli9^AB6Bo%Wzh53mMf-{3kTN<>3T4E)<@U#a#rh$nF>pMvRE=e>wRZZknmTMzs z3Ia~u0aQ+ijtpzFmuRQ-AkHm!USec{4*;n;bJO!;y6BKo_umXYmOl{l+Dx;b;SUo- zwk0REwGD_leqsO@DW1COhK}1_Y3f)SCs-W&xOCa-<`)|W$h=>U^pMYl>F)FocB`>> zZ>!HGalPng;+w|&wH($xhetQ%$!yN7;j*rYD80N>Svh47~PGB9ysAq^Vz^=I) zpuDXa?{#6S`Tlr*CdA+cZzsedPZ23YVlk&QV4{cCq({SyG@Z$@qbVSGy`L87{=VJ* z-Y57zuJwEC{q}u%{qW>BjvD#->-obet~TqN->}xOAh>AN$Nr;(>f`G`(W=?ZGoHZ{ zX(^NcLxPd4hQsF~)B{ z81742>#~Bv1!N6Be_5d+v!C@iqo@lH(bafrjMW|>aynS#u^wQ}MgF66-z|Pb));hJ zK-79Qt~09@D@ZP<&eeaIO|JK4h_tF_8hR~Dfu&6Xrj&b7XH0a?j=ZT1R45mMCTqhh zelJxR%R{`PPJ{rV*v@J!2wLwH1y8eI=%Nxe4MredxpW8u1>5-Bt-yuT%5d0(B+<&$ z%W`u;TeQ$dk2JpDMsk%jIu%1(u+U{M(x}x?&NjFV;3N}*OViqpKLZMp58~$M)(v|( zs10Fnm2DcO{wVDGHa?B_(K7gjA0C53{6nn+a_ergQ9i=hA z_h@E_{Wf^NyN_gjD{RW}Gh#Fhp}g!`_D*$LokmIBqE4o%z8kE~K^#;>9=g*ku=ZF& zWT=e@t1uX3hnQRf&e9o5?RiOkvxZkB7Av@v_ZmRVC#M9wom7J@36-wDSnPtr!c{E& zHP5IiXl4@0jt7SH0L14vU*HM(Jy5=OX=1b2b z5fCM5^)^}@c%P_M;A}E?nmh|_?sXUm=MOrWQZj$G5rNQ*ih{S^T}Z?|xRIjf;+=tDS`3*`2vW=U)kh$mi$~`^qwI^t;A@7 zTulkh9=ZyL<3BU6Df{5`x!}~TBay$O6DLZC5JrD(?xh@K=Lrw-#h$4C`?a}~R%)i* z@t4Km&0RhCsbPp^#K>QMd4eYIUxP~qM#&H&BW-s7$Kx`z1wHtQ3sB41tulP{A%#w0 z9n9@9l#R%ZtKk=K;41^M%ca*E_ypWDBGl0?vb(q8amFW|;9&oPv0YoR0~;epkZz>u zaY&psUA{x4^36=OO!E)N)iMKLLdhui?ra|6UDq$h;iHzm| zo_i2mSw@M>R-Zi|+aI~ayKr;{;O3+D<1jfl6)-muOoFyGk?VPq?$(ObEaum7X3XX( zW9*kP6LazqtL;7pfgBZ#A~?<&(je*V33L+NJbT?+H5UbkaqJ0t!eY{4haW3$lmIl_ z40^b1@{~DRluZqbmMf_PY9}Edl9YphD!XplyD;N&ub^SBg*eaJVSrN81nGi1`t@Y=P zNAH7648~Ev?+h!R4yU`85MzAU5~E$Bs>`IF9kdu?x`6JKycl-hgHBJ+vQU}TKo4hX zQs*hM(2b&{hUaXv8y08^ZH;!C#W9u)0X&D#{}o^G>YZAlvVoV!vn1Fj_~{^uw+Qtu zXJZHhzAeIK9BIbd!9_W-F-#L~@WoMdyP?JAf!;<6O%hjAk6T{i8eI}EWY#rK8dL^? zcAk!&hhw^d(XWGCd+FYEx+r^`AiyH5W*#=LrRrJwa=5NX^MrFR+mVA z!!sl#_>?t0RSkClJ5e#D(^O^a@1g5IIbMlf*X#QP3M7$HrB$|`lM%9m;8)6Cug{%} zw~{qs`f}LXxNUM7JqD5uVQwn#OpfIs0~i-(2TFMk1sv5DTb(c0ZHHK3*C``J4Z zK_s4(*oGr=JR4Je;%|q+IUGkkHp~A$#}(^_oZN!SbomGkg@vGE;^8?s-O;D&BFIoK zf?U&l$b4a;uO51!lP(p}q@PvOn5ZlS;XNc>`52kpVhshch>D$fgQB0}u)%)UJ*c6B zI+jy5TTQoHMniOo9OHQk4}wjp2p%O3cklh06cDY}6qzs=hjf!M->}YK^T{l(#7LYi z!Y_f-l;>QZcMmbOc}jN@L8LOK?VMgqbSKw@AtJJrf9tJwcZVR!T6HvCt!_L?#DS?X>Qc*u)8P-#SNqFIxUq>vr^vO#GOH$` zHQ$oUYPj__)4_Y|CA;aM1s!l`#K0lOh^+IJ{P#+?^7XKRb$kx#{2bA?BH) zGu3{XWWa{4uO!i3tRl8YN2hFNGKdQhX1Gm<%*xrs%gZRO$-B&y_Yar<7?;t!^d*M> zOilXdXe8F>ae-A(#TetoHuir!sm%uQ+v)leD^>|3xU??Xzb{%KVQc{I_hzV*$rG^s zD(AI1Q89tWz5uCB1b-#f2HV{DtBWDR1&=ootWQM>NbLD4i!s6@x;!^cVBw69n%<@K z2ni2hI6Mq8$sD0Pp`bsjr!4c`X#wx!p<12aEx5=O*c)@Jf-Rp;!oR|lwdQ!b5|M0q zWC!yPc()2UAVif_14?lu*MW#P_bmC4c(_e8Ke*N>hoj(5(MMD`P^~eT#W(jbv_LJ{ zUUeXa9A$_W+iCkPk7@s?S}tfxbC0^BXj@bHm?A0r>l#P3(MSFk;x|Le$uE6IfO#AF z3?xVru6E5nii)N&Wr8i|+m(lzT4^JrZku6R#G(gdi-cvTFRcM;hwT`gWjh7kO=*6JeilAA$BDtb% z{5zZ+vkXG7RF2~)b%td0jL#xF*0S102rLrG-aqeU;YwmB3dZ4Ux4B$z^#pG+)GYCd zP`)fgzRS(G*4ZvU^d*ecU@3)ZA8XL|Y7~$KBE8*cmoKYcz0w9HTv9weQGA&$wndxMWqvac;HVvC@p8r#1Q>{ME?5mvE{y+MW}V2eJK$WS0C>3P;l; z3YyWjYwG)#p>9my{MtJ^BcxWUXE-ANC4Q=yl5l14UAN_&hC?m5|8R9ljt0#Y_}u5Q z0U8S%>68{{S1SVhntpJE};-$%5Hy%t|4UQ51MtYqL8KDSm=;zRva z0Y#-o7$n~zCXG+4a8n=6;dW3D9UCtfx&9n_%YL}wJ~z{4&a!=LUGMB(u7(50Ut6ZH z)3OdYyUJS??&9d37F>ZG0SeP`IR}+kzl;?lDs(w!uQYtDFF$j1e2n}nfOx-P3VscB13s^p zGxasuXv<%j`+P@lDrtxF$?5K_<)WsWZpcU9Hw9F>%q(TUD27IO*dh03>_Sn5%iXWp>Q0G z4(&|{ddpXQ*LDMx!oAn~b$Z$RSvt_$^SQ1Z=l!VWr_0~@kwA$Z*-K3zdW*pDJ;&C` z`8}Tdy=9D^b7=^hmt`~CP7+A2Wnck>NI$AFgfUzG2${x72WnVJ7DOV8J1 zNZTEKu4~K8L2$;~7%@T7VO$=?(0>D^H2LR(X(9i%0Fy}p^6Np;YNaRV8ZvQmYhJ?w zD!i=8Qi)IR8Vu(|8WiCS8qn~73{5({dB4v6dIP1R@9qBhzV7ww5B$F7=+*o}K=6B? zpI`3X8OZ%Q{wKh(01{Fb+WWbC8mrLj`*yBE{M}mGi-bmrPy9CWeajHqi@NR5F*f-9 z_4%yeALRA&@@((x_`H95oe5^}{l1%N-}ALN&R~GBdvn=3vYcAF@2+6bI}QZ4@Le?E z?&saV9_<^9*a)3?G~m81@H4iv(DrqHxe`Fw7WLxu1-xAK=4|z>haIMh6}SBiNE9Apg{1(l-2RA=O(O+yL`cWM#g^g+BaefHVoP zHI@WJAZCM;-|1HC;7ZEXc-Je)u!NT#&cil+@7-~N*>bY{=IM#q%wS^D@{O5OE^#8K zgo>?{N+6dJEg|o)XgNH=V5EnZ0+I=$aD-zk}$44>L1Q*1nZXFT0K_ zR(@rZmJ= z{OEX|*n&`rZRA|LZ|p5i0c*lKw(kjvsL=wHos0@176$CgWN&4c57v` zMIpaV=0JUyIE0fm=7eRT{!}Y?9t1mjF5VKpa=(MtjqituLK4tSTC$$CGLdyyw+*?O zvy1iiXPS;vGo=m2tR-q#L^!z%?0J||7XffACP;md2%MBwKqsY0 zj1;ZL1&v1QeZw%87s&!9Qc0EVTzd2F-asw*8NSma3yF*PA} zg-cW^i|YxFLTaRWG(|Q?4t-KQ2$JuEwL)e|0Ch(23R6x@;J%a)Q^pjoJPJ>yw7FCKG4!V;ecKIGqKFRoC*M9}8Ivna zyiY4ov0n;lggTFoKg+Q&r7?|Tg-H&Eeq&KP4-B*WSoYJFt>6XtU~1;QY~j7qfQy;> z_B@V+T>nkUvvka4Lf~&Cv(WZWUd_F#kBx*_m2tlk|11>!JE-JGkv$(CRVo1EDmOPZ zZe#dMmeLZckhKe|SA2%FWDGcMQr13GsQuSdq!=2jI4q03JTNGV-X17|q=G<+ko2rF zMEc3JCbD9fGShv-sT~0gP?}K~I}=cj%lam8&A0v>$0sP)boCN`20SFdVJR|aSW}S{#r=40b4J05x$2{fx*%;` z2v#$-@nb0#9`H>G4e8O=+74RP&~gps#r~wxDsjY@Saj2J2UF35%k9lnwsz%;kfeX2 zg3DtqoQ<&dm9>w2pJ*r&{#1Rr-oV|KFs^GV=h4af6bn@YgbDKpE%&TBYz^6sDfm#X zoKB0dMg#;?9$5)lAf*J0rqfI(w{d-Nn2YHQg&qt1FPz4TpLj4StklXtee};ff)% z&0rJU*D5tZED)a%5S^m}=*1kimp{TiSaW42#c%Re+n^`Nc3U50)@Ha~x%0LDNZ1RgeK=jPL(lcmG1Jb+q zDjBK{DfTUL$|aBEI&}H$B_|W?MGu5Z%jvc;Q_q^RO9(=1Yn7#hc*g{8Q%L?mT8m{q zicn)F0w1Zu?X*&=ACLC_oOSR_ZQetv)k~@6CoHYLUTg9RJHbqbD8n?Zd)M`xKvszw zTAOCt>Su{$RH6yR%GlElcO_2LB&cB-3D=<&V53Ey;M$*R*WX;y2dAitN4IxeQY_0A z#SMq0T5uF|cj!Aq*~fGfqDw?^Nq=M9$i;@qT8)s6FJWLcZiynhzfiMw8Pa4x*JkAQ z_{DV{{9!8-84!x+c~x$-{L-e&YwN#ZxzvL=3#M~|U^qu7Y;;4S6s^YhAKUA9cw=yZf|T-}esx~cWf1UAhDug!fD2)+%9TVy;n z1@^#zeqe4I;_+%xOANu!BV%_9Mcs-xqF4)Uf~2{Qrv|RYCnfqF4MRkCGvy*L#1?10 zRO|gP_>b||54bz{o<2Grc@UG$l)e+(_*XpYKy@-?h>8Uw8nbz4Gp47&Crm(+*yd^X zSKv8tOjd%W?+01(5s6-HWQrYJ|J#k>GyJdRwTcij7Egg9>QB!OL}Lr0J8N8FRSkOU zzD2p--fHd`SD=hVAhtm@fhK%GXs93ys`)Mu6aF4ppoAr$+ic5&6e%OTI1@eN8L%?o znpu4Y!rVBO_qlWj_1bYQ?DTTF#~V%15tC4Hvo4V?7x%F3f~0bm`&)5+I5YkANp28# zIy3z%t94Oww$WSp{jehxD%U3L?IOllx)_>UX@+Z#R=qtl+i6lwGX%=;jQq;y zj*yH5NBB&`#z}k0f;i^V8K0sZdM5&+rebpx2U+h(Flq!*$;!Zn=Q9kB3m1TWD~W$jF4E zwJ4I%CLA^^J^ErugvGKZ&bkdzi4R~p;g(Ynm)&&~4wr36mI?uXnC9 zV=3w2Ncp%ZUHtGGFQhx&z^OEfiCuSiiI~=8t~J&N;^L(iV4dg;)rA}LO;w*tvmOot4^jY;tU3xDHqjs<3=vFiVWbh-)L-*$V5zn1 zMqav9`>?`ua?Kh9UyC8c?Q%H9SB9PUASGNTJY5y9Can=+F8*sSwNa-`1^*_7>RGNo zeNRp%_E=$VAJLSNh(Nlv-b(`&)b&EtctqV!>}1))XAd%|8mc-z5Pu3v2}L1KLkG_b9xl-qp#aPc?b+9||w4yzI7cCx$xph+p&UNJ&85ytIMIySp z4a>73tQop7>z_uP7s26@+dKk85=L)3YDS0C5A2JJH@&_q<^nG4LdN-#Tvpf>0btcD4DXaYblBHx!ow z0>6+k=4s`4>sPwJCLh6uCOi65H2QNV5q4Mg;~E2wfjp~+g0(ge`~J8Tr#G7UZIGr> zGzzHxx~rpMjrP<0yO1|vGo6B=Hw=Q}j7?7e7rq1x??na!U5@oC6+i?JdYNeG53I8B zgKeXkDP#LtUjmbKd8_me9n?Uz2g>V13>;%(F~S=ow+|u^)rbQR9(9&PB@j|RQ?gZU zfFZ7rznH*=@ne*DX-GpWUFGkX<3Zlct29mFn9@Psbp6o5Mko6)k!7N7lcXEvfw325 z6J~aYlY;^~^U|SnDm9Hvr_%ziD*LVrjYgu>9Pbj(g(6*qn8MnTGWhlc3ERbFG;BwS~F_NpJvO16$R>hqUvvjZm-&<+=Gs z2fD-4d=K@(%N*@oos+jEx~ktXh3JCXCH(8|FG2`UHwMm#NewMfld zg6*gdN7cq(8p*zurOMC8yqIJe75vR^BJ0b11XC}IuMpOBA=PM<<@BHr?5FdQAggra|hn zYZxci&zLm~y>VpyDs(3V#7Mg0=(XvjJO?nS>SB2!@h~<8ZNwSlRqG2XgXXwWe`ofg zHi&^Q@5-KIjAeAusx>z4k&IbPV8mFVPUf z#du;t(qx~u*<9zOy)b_|>p!%K0}MX%wy`!4s4EH`gxLqWSHt1d=f&ZSVgceZI1YPODUHtpo};Qp!}nC1Gzi_?Q(6UeO2+W;u&;cWP|?iD4MY-leXb3vEO_ z-STHwJwX?giN1o!`vTqsJ`oAOl4vvYxoVFW3Zf(m)seewc47A)N}8Y!?o2B1<&=9v zPJ8rA*e6Eq`r}wB*m^63L!+AjEF)IWSlVnT6-Ku6l(2R8m=I80%rHl>CHHM%2)@@< zW-73w<{?3mL!i*yud|r{^kZB@v3{qf+TB`3vU)mQv%MN9jI;K5^;y(xL74`CRb4;- z-7DTov6W7?$xtKH(dvCe@t7anX_mjMwGXt@F2=wa^K8Z>JZa9T5^8N%&;BXg$u8Jz zHZ`d&EFzhp?GS-RIlru%lXc}?2x5};hALATPpH1z2wC()D&%!x690ZPtY^(QPc1$bqGU(?%dOx?IEB}w+E*4@60%o&TZs~wUN+9DpAvhpb zdwJY`6*?;es^jK_F9%>Y&udalUc90TEY)>L0w<5A5nm)!slhe(yhL}fRV4Sqt)`iR zO%W+(IfwseUI%^zKS_bC2;bb&v0tEoplmuEqg@BL*bK?V@Tc37&A)%G5BK?*wB=%h z=wqQI8&l%4DJ7eR!XYrD$@Carjf}XA7I{?SQ~0eBqX@?A@FdGoub9vwY|*T107~)J zOYrfnY-xjcku5?${e_IJ<8!oLN)pzq|av(AmRiF zl!$k%+Wa5WN|NPg*pxQ0$qugZ!8!{xg=v%!^z6Y?6#chJCz}2m$twP~rl0;YrabqJ zlTpgQ9$y+~;8Ft1t^MO2yF_|2^XIq^?~DxaQQ?C3X=QzH6X&K{Wz@SGu zDhRDM5z5&9ql*fWIhxZ3)~)bVNAe5*+TIwH6q*yK_IYsDBMw6_(elpl?5>VnW-&pn5N@yl}G!INX=S6>L9?wtK|_Pa(kvMq_ppS9W2T<<-7437lG7ly#? zy;Fe*oBiI;yA-=F9w|f}iHaf+O~UAiQ>V@?9;*7fY`iFM4hY}(?cVosj&1MHkN4j1 z>+7$NO@goM>rnfx?X7L9p#9cR`(D16AC*9EfEcoVnD1@(E_0RNBl9gEiyNsXKx-Mh zs=t8?l}Px`Wbz| z@5Wt@rpS}YofA~;e*~+_hg-{|p{g~ih@Hm+PHA{IBYWx6CbPpO6k%eeF^egXi~r>0 zH87WXeA~wtvqk~j-{$g`%g!r>jA?vu%jgECY6+BlyP*QcnoV2Hx=kB6gp*@wr`2Ij zX!;!J$i>$K+T4RGYnltUML`-r*|hL3U@FbTFWv9q{BIM6HqpH>Y^A>X0Rg7Ow6VhU zXe3qR=|C0jp`)v1{sad$tG6xDd!)Wg54GgAIv*|IK1C5_z8UI_IpLb`>ZpbudV;j6SK#maRK~0FMMwR z=-DnUj<@quNtx;{Z71%}b*Efkx>;JBOrL!ZZtjo#`9gD>2N-y8zwFddYFii7@j#UG zWnZA$KI02~qyBD-l2DOU%nsD~BqDA+uz(S@ohmf^8$tIsN7{BWf;9Rf)Z|LH_8()C z&jV>I5>JGjJOIIjRmO8gAi4?c#A&%A1oib2GONC_*bnNPW*E(~J}zr=&uuYq#g2wT zt}kW{Kp+METYUZ?${hy^o7yvvvg&{M(-G`~`KG7%?Eb)1L;r00jD6K+_~dZ`?95B6 zeIV^i=-BVfR=LQGWcCQW@o*MFqU9M9*ybSU*m-~z!Jn^8ARJ>0?dHC5CwicAL%EGV zWRS=7tR>qFq`0mCk1anAB0}R&`Dibx;?TccKZeV)KU1b4M^F;jkl!PdyMDvDY&a`q z+q1-f8fiXiuUAU*xBEf#r}%H&@Mn1Cy&+l=aU`i`+HbA>O{hkzM`SaFbr(OR8g}WB zZo*9lPC*#JQ5JLz`#3d5b8_pnlgu#G5G7p~_*DOz^1ZQlC)kPz;8>77M)fZE>jf$(0aH+Teg`k(+n9MIt$@BJk4f(c_m)SJ6IN z4lEj31-jc?i({VMzYCG+oj^-njUUQ`C1O%v|gn4`QTSdnt8gBzur_p5f(}L)S(FeMO}~Wi~IcfM-Z{v1#+X_z2mC{z9Tfv zVSJ8nP!v>nCW7A%fhoKl=;uAkfFM;G4Q{NR5n~?v?zgx6pt3x-i73DtF{5 zv3Or0U*&p0o6`EM^LV*|szE>Ir#9B+TnXx#P90UH=Q!vmdR$i>_c&-J!nvkWEF(C! zKxODet3sV`Bi>CzU?J<>E4+U(hp3|}-yfb?#EKv;2&H`~#Q@G=0?M&wjxS*!K51*- z;Ip*N&qFI#G9kw5_>(Po=jJ*AHo;n-2niPnI+~lr%XJ!g@bO>U) zPRbe5KD?oK!kXDjMyO>Rft>b$?j-qYNfiRJmApN!uiO#XcmQ?w;5$*nPr!*Y{VvzcxR}v>#U>!ED*`C4LwFLruWYj;UxM!@+NE? zL;=q~@@AA<4geR6nw`P08y`TC!(uW)U!==-({nY=wwEDjl_uno)yn)^Hv!~1EsN(p zb=jhFk?D~W9~%`I27gYQE-1Tu=e%i=Y2NBBWpan(H#q|R%pCIT*VZYm0X|7}n0~K% z&ojryfL3MNrccUwQgcK&!@zh8%My19{y@y1IBqj6sSR}mWxt%%z(KR*z@VgMz(An4 zbb&fO*gRRfQ^U>z?eRN;fD|{5`^){jeJ2$WM-^b5kulFwX!{6h6&*!Dz5Up!d{{O`sB>Vp{2l>B7GG}N0 ze*rT854XAUkD%Pr#aYqRNyOgP!QRf)&V}#?ivE8GE@9>P&(xC3zf3?sK2cvI45k`aw z)!KNF>lQP|FuI=k-R75o;LyVt@K*<-L+*$Y@oLd^p6?-T!&6-Fdn24Xa3+lm89by@ zFAM|2T44aP;Sh4jKDZM8ure4AXBzJRGEJ>L(Y9HhI0`00sTDV1Z}v`HFn`oa+X8oz&K2 z%DEgKRzwzk=hw-tFtY505Ao+}-`#pdLN3mp`7g#TBaCp#+h5}b(|YGQ!^zn;-T_D; zY(Ot}OA0VwfgwnJ*ENHusGp^^Rkk2WT4p8DT)fJ z{L`fxw+D79;e(0$S#52(?%iFnY$_03=ox#{_h>_d$l|t= z$p*3@%a4_M=QU0`sxQVKyYh4kxp1sQUr)w~7o`wh?56Rl9WUCrmmN^}Wa5}o?Wn@H zLn)qw;*@@ow{LuaHFbaSltZoItr~|}%A8;pK>kK6vh=Z9z5~$>ROll3UlnrCu<2qX z?hrRo811S$FqRZn;dX2LsF`y+=cr-mOTWEqY&S(lAX)7t5bu{zvgjENJfwym65&s| zhqF1zXvEaF?a@`|J3JQ`Gb;L4ODO2Fps|X7 zYoA<%w|FqP)gYO4CqjPo?aI7q^(e`*`AT`bht3-elN_2nx6bim#K@Bn7~hT=VsnoL zdYmq5xzZNdp!8>97VEZzO(CWfSru>OFKxYkOi3&eKUDz(^#;KA&B7L_{`l%D9&}I` zC{M{tOfUFq%G5-*?%XfQ4ewAleM!wTPvG&Vq7ujNPA=$RiAM6B++k*9cJ`T~nBm+- z9VzqBD8g!7GW4vmAbQ^R1#(s|3 zP?cxg9i>b@%wpR1E-7kacf3j30lUY|ve>J92eP-ws>;PS8?vgX79Te z5B^J%fpS;5+fB(%kI+n1@+vvjrnxR>Gu0et z7^gXe4g;DRKMgW^b8ZP{anRb`w#YJncZq7Qr7qv#r@7FFveZuFc*!fAI^=%j=`s3- zuwXpk*B|h%nt3Ao_$(_|U9A$1v2+A%xp~ct^#8IBZ%)v+%^p;>1 zq2tSxY!w)#7}CzKEX+j{w^;fV0a|6Del@S~ZG?4aYz5bZjx?5@gi6Q40(hxd;tKH3 zdhVdRN$UNr?^@t`E0f@Pfa^Hhc^d3xyE0%u>Q|LqWr#(NcFa)2zQO}svai|pG&)1w z`(<7W?k*LMpx(C#EtyT^zL?MMpD*I!^@SpkUz?In5T43DrjUA6u;^Iva7JTd;KSD& zR!A*d@0Uu3Gt3&&qYtuIRQjtds{?VRukMSGo2QC}jCmpBgZWi%BdVkm_=pnM)q#r7 zuG(zE=eAh_q@42hplfr7KBhSHyL@x9NE961CqD8J;-Mqwthk&;5M!eJ5R6%4X8L<= z;I4=OBqV$AEY@ERN`n*Tx7Q34J1^`;27{I2Hza!$8uXK;&)BuZC7b=rVL#!KEsTr7 zj^my+-IbJS0k$v3s1DzsUmP;v6}pi^mx>pDCI@k2Tx{{4`Pb*L91zngnN9X7X{5sB zKGd%p$e^7ONfhS?R+{{O$ZK*m`yF1Eqv*66WF`CiSc3$xG&<+xpzPr{rMi3SGwW#zOa9o53MwZqB;_blw-lJ5Aa|+H zDkw}OQbki5g8q&i0-Z=uBX&^W6#oy>-Z9FyV96FP+qP}nK4shXDce=2Y}>ZYQ?_l} z_E-ISjQ8E{ce_VpkIa>8uiVJ|kr6X8BVq=qN?`PASb++;=$io&`d$)0D{K56&?1o= zIo;%5f(okJbQh|3&7QHt6n8>}kg{a{B_ zmrug<{R>et3McP%=?+@|Yf;00rl9j#6OwU7NcyG9Z$Q+339^9nVC}00zn@{nLRz3EMQ3NBxh8@$7&xN$oY7LLYveQaZni((C#DZq$u6C}%9h8rUqR{H_zc=HfkooFmI@*XL*1@64~WIM>O47| zf-!_QkB-Iiiml1v4RyW95ExM(M0r{%SIX^__9e`YyW3(ORhVsvW-!$Ylp$~`+B53D z%9F5`K@ZNkGY0#r8XiG|!>SRI#59N&0iCc8es1%+U&kf_E9DyUlb-atDS%8A z7bbOdK8GGLJ>i}YF5Yz@hyTz*_KL+v79!*(SzqdMl;@K8v5`@^*_(RF7rTky`2W=w z%>QlPB$oeywZZ&9q)lRB`A1a#kJbh({6Doea;brpSpJ!*@qb3}-%=I-@jU;Rs)G67 zm>Qcussh^tV>pM{o3O4fOe{WFY%XebmP=LKu3ytezpQdfx(*yVl^;x4%Y-9uN*(hn z7h{l-o`xfxa_Sk__2ZUcopE&}+j;^}&aEc;uRNYRx=fNskwcWvN)?@qJ zgDGDV2i8Oi5uPV`b|?1p4zAz6OasLRqIYq}t(EVz&SkhhvN7$#%AzXE}f zl5<^``spUH|M(+)&Pv57Cd2QC?vor1vEY+MJ2+HOtP34bE^zdWFf)&aBI->1nOEK>r&o=5x6e;IRGm2iHGNOyi+ zir%Uvn|TT4^ZVFi9k-{NsSg#kVQ55xr=f!Gz=gK__UTf@s0x!ZvwIq?)8UbahL@(%0oSw8)+s%!^|= z;OPGqCR7@!RZ&1#Eq`=%&*}_yP^;`EKAy!>UXX_?T$L4Iru{d})k0LMqct|x=e$tWvfMfJ>Ol#n9%If6$DG9p6mPL^pL;$V`@zyD8FFCOw{A3IZr_-!% zSe^VfNP31T(5*s+@z1D6-EWrsTS)4pIYcdQlFn^=WaW0^0ZmU~3tQU>JqlbC2pKam zz#C&pe^ZdCeXQsMBo6k(81qXD7rgQV`Fi#Y`ec8S%lU^qi)^#5?DP?{P&0OU`mP)_ zmq1w-W05l+6%!BUs8$p`q0Vm9hy2xy>R7N`z7HiHKHqxbv$cm@i!Ym2!*od}ITmAM zyO?4Y?|Z7_GKVwVhEZ~~sDUIcF;w@Oi;=9HNVQG&z>T-ORp!Hy99r0v`#EN6a-D)f zT-?1S_$c4k32dHe_03%TTsW$kR z;rw^B!GAL8|D87A{C6rY&DR?FM;mNQts6TJGKFJ1_wSL!0&vXSVS!Ja z;7esPf)EX;7BeD|C@2_`0nuS7P6GLd(In_QG5#SnT}4VWH3rczq<0p9U_+2B9DlUh zdcNw~YFgIvmG+-G&gpi&-hAJ8oPPhHA{3>RR0vm0%ttAr_?O!+ctq1nEEKsHGsvJy zUUdg?Ci+{Nibj(&6m96^wjdy}92cC>2>Ttkq+_9xxL3iHmL)elsjO!orZ~ktjoVn$ z{umr^fYWiR{!w=A;;vct%h#zR%)hI{AVO4IQ4u8uLi#=^F9Q(%&ir;|!P2P{rr6Qf zJ6f8!!fG}eHt5wn8DF*c7;k!aZkm5F?he?qy0FbM9UOn5n1TQSh*80CZ5RM(B|%$# z5-G;2vkl+&OFqZbU9{9=Ll>BrKp9wxJNcZ=FMZCTLE9wyMB$m>bB=kCsNOwsjYjsW z0sxzU;i3`)q$fg)Q<(GZdRzBl4n8p&T7d{svJ&s`{Ba93kQ2r!;rK2)o`7uiIb1WO2*3{$tG2gpJ|=0T^bWDJ zvLCy*xf52_v}eL+)@2N+)#}nT67z#lVoKYOAGK^aD(3`r<TZ&F~@%eQI>TeIzN~}1EH26R{5r=8)#kx`3Ira75H4^JdFA!iRyU4(NFEvMxsF} z8UYMXey!>x5msEWe4Ao%JN3JLaU`5HX1Z`o2$Dkx6j9v^I;H&3^cN>HM$>WvNT<9f zYMl#^+3`(UhEj+Y8h>#^bcNA&;p;>_AVGVq9%PNJtWjbDgb#{{KKcyzFIO{EKNZP! z=nd^$UjyXF3?J@{)n4?<1ZChs0F1VX=hXA8yvO?_KHvA0K+n+2SNf@lEZx_ebv4#& zt7}e0$xmFH$K;M}{_U1oS&69M;+{7j4sY^F|JWyj)d(Bb&NCY!|Qq zR>?;|l)dE(EmMc!(9zYKCD0@H0BM1Y0F19txj^=KC*h&e!~CLQml>$G0O;rv)MS6p z3GYG7s=76~wZShaDOJ$cNZT@wx}{4)E@*=WC`H#p+z4yv0aJpsE+5u2j2(4ES6he? zLq#ENKb@_}DZ!ZOkl(7@_twv~aD$N`>G8FAHe()^y#-1Y(s)#2IYfzYlY zWj*gvgjjg-!Ua9;onzeT$gZX`T*V0V3Q~eB?9%CP1gJ|ILhJ}9AO;}n#8K>`QZfpt+G1PsWR~7Y}O?vJtSe_CPbn&xgoITE;916lgj+W}Z8%yncnU%CX+-YGIc1c> zpA$7tB-#hiH>|h>a$6}Qt>wuRG2sF-l5!+qSgn%0%;8QzN2Qc1*1AwgMcwA`(I0;zAeVZ^t+o(H0lbQAGnWzBV8^pNG6z4iqrt z>?ryx`y31l*$tPWrEv38Z`&2#QD$P2;TJCxZ*fMbT9h2I)LM zr%jm#+m*PGqkZA`rQUoKWd*6MN0lnj>>`jw^~44|D!jtO^uf^o<5CAt!**pI@AkR$|h$W0N?G*kLsHK(6Xh z0qRi_*#Wi(=;$@VlqwmO5GWFhvD^rBr6zyWjR?44ffdhx{xq9rc1}^ zKe2M4+z*1CY7GX}prYcLK*#M5Uj8}?MzLgL?&FtI!B@+R_mGTP*-!BaP=fK$?P(@NA&kfSkj9NP@$JCv4|8;T%!x^yy8MbN z2kPZFBFAr9Q4Q_Ids`~#5jDT~XnD~*MNDTTq6=sFVYZ8TVV^uC>N=Ffn%&i4iT~oP zCnk6y>@p$$8*a`tQZ%|J@D4CDl(o5!UZ=G>7MXLpfe1Ored>#0tVV3vGMRUaGA^-w z^p%EpjHTKVoni&2gvl*H`_dkYAxfy^~0{;{){mVH1TX5+=p6&k%F0r$4{+pSl2uh$RU<~&d zxb_)-Fhrk+J$)}t(Ft+&D&>W`hNutmZ z^B$233acKY@yp6z(AerV-?#VTNrQ+ZpbP;O@C*bkdaZm9Tm1-Fl3Zw-~&B0tR!v2nyJ`TfKYP5k_4aOn#l1aPz^*LLQ=O+Jaut=@Z zBS18t;H)p9Sv+NTjIiy3@y=B!}X z=SAe>DgJarZs&dpB;q}wifLv~Trshd1>`rt%E>0+e*XPVS@RqR+H_n zKW#KEH@dx)Vk7^P9WgddVV0 zaS|szhxn4pd2ati1pT-D1epFo1pRE{{g(*Ong54=0?hw*q5gxP01W=W7eTolfcyae zRPOw@{R95vDgLkI4h!?Ym8i+nQb2+z!)EG1)`KvD$jE`Rf|P`h_)bi6?vVLXA-$cD zn*It-<-#Qd5JYDrv-t8mgj^~@qQgD{u+Bfy;E`a2y*bL6R)@qzwe&M{i^t6?wWV`a zJTxpUY}9x7xN_(Tjub`3B3j*yy6lYdk9Otu=Fy!TPWgN%g2(Z_K$PC@+O!6p=~#VP zHUIiztD^bx@U(2Q(6IC8tG!@>!`YCG(_fc|$((4LYBA4JQ-!m>{z-g`{E>(6-LLh8 z77Co8KWMMd;jdL`oApN@_YX#Wk`S0aiyq%@Z^s9-dLYfTL+@P%3UI-arI8rdY9~G* zON%wRgO>{GK2WOgaCAP;xUuKTq(tVuWy0dV88S&Vr}aB~zP{-Isx*(EVqU)2yf=8t zZ@*i6t~G8w@%$>yYxUY6f;YbNkPyhh-cO&TPN*Y++4+D!rW^^XCSG@}#ID-Dv62}7 zuJ#OJylV^UVRT@{GO>g;0FbiS0g_Ps{)Uq`MRL!jV9%CKR?r9Cu~GhsjjsFVwW=5Wa!T)u~OZHC|&OaQG{%5W(Y@F=>cKcaJtLC89 z-iNEJ5U51Xb={pIHVXWv8|%kQWXBn480_vISkgOAVo4!vZo(su8F(U- z*x8pVZqRTu3>b#ND-allaQ0?jj{f`8FaWz|>-+n*1RdvY+xK(v1s~4$bAG%;@AjtT z+kNzz_zke{b+^XX?R9_r8B{3OzdzJkk$^oFr4NpbG#^G?Pdk9Pjj$b(>$|g4sQLpY zCMH|YUfu`nPVN;5kuPrC3bUg#dG@F2=>!7~#HS}LIVLWTc*R^C{D?g>^pSL~V_a&< z6BFW}_?{Hj(eZ+NEYZ9F$pw((bN@7b3>bXf&7HNaE1RRor?crd`*J&d^BP0{a)53Y zAA=!;!}t9VUqhOJBbL8=-vhg?=*8>H?)4RuGJY&0kV-{@e+e{t9?Ov|p|5iySZ}<- zjc&;kj5v*b?JslySd5K8w-5Uh#VdjK_Y+Pr^C}neBrem_>o|NL*Gi~~xNq);JILgpTde zj=jw|mS)#;ViTdsU8R-I!t-@=q*M3xsEa!@7854hqI)7r( zAn%7Ts;&ZTKb@&D?7i1oM#HM=q}MC3-k5usW+Aa}&?Q>Ka-!HVOCKWYl;>8lQj-;H zv9Zp(sxSg6s_K^RT4hmM1e=@D28kgIDlT{UfhY@&%N;XNguHu5iQE+Fw3F%40BL0Z zR2Ux}@s|@5=}BQi!fqvk+WC#L6{)0z*?O$;bXTlyZv4vy7h!<_sWyFve|=S@94q(*Db-9Kky53}Hm}?hIa!)9Vy@$bTjkxH+A!22k!?V1+j8nNjcg4= zA#c+>X}Q`+xBj*2aVFQ-Elv1t_-U(OyzcN=-n=OI2joN9zO6P-?#t--y!qIH5^iI^ zS3vzw0_`uvhjR%tc>D%4GO?0y;qBIiULFb4AAL$(#c_bsLNDwD0wI+om$q=FmvUnO z?9k&+RDkIOO?Nc|s-s#5dA44m4xTf7D7-9sK5MqW4|in?+PG~>rSe@wu_N0M>X zOKbCET;T<8ciLnedoZZ)YZ>Dpz#?~ zJ!cwpFO(5m2*g2k={ zNY7=a@L0)$$sT1!7`(t4F@jXeuXJopB$`lQ92Hj`RFkbZj#TRWtK^V9l_NFP(CTaF zVTsaDJc(>Dc=^;D5r>5+HJ+U(;5w-fazYgmhhOBzkzvk@!MX?H$Z4)k9!pASPMl&W z5Y)bCrhX$4~;aZahv_qPt$wg5>BvI1Zic}Y$VayHc)2D=bh0#9M4YKKC`SesQN@t_qa%@_;)Z<+&6H@Bj8 zBM0b0Z%SS0Qg6tAxt!`im#R9bQC?TUQLzl22_55=QnUv=P%4kRgHS&2J2A_&0OcoE z$zPp~sZ9y`k>z$|zX8}xyrx%a+=}wWKV|V|6bINT+M1K8d_eO6 z`FG13gIeB}%HX%%S1=JZ4D7Rc>;Kj@GXn}F_cC5_+})i+x*FlYwjrJ_h*Y9VOK>s!wL7Rd8$fapB1*eJZPzX9)jGb`I8N>&An!QYa-2qb9>89qAN9o}5;VHnZ>LHG=f~Q;UY5wAX2Q#L|MyP0uV3kG{?qo9NboMIx~wzrtJ>R#(_YoIGfT(ni4j=KCPUD z3%nDJzh%fJR-VPT=v1B{J@#lXt6DT?j zQ^3M#GuE~jPkZD5vL!aQEqEx2>E|9 zo`^bJf&e*l{Q=>WD^Z8^wk|?jtrZ7~`Q+n*%-DnN;KxJ&HTNX%;HQ)ia3NZ>G|~!y zBU)6cPThpS6)pdSe2#KXPWS6;-lHgOBp0!cL~7QgMXRGsMImCBDoE0RA!;Ut%+QNS z{;gHQWTqs!vW9|&$Q^rY-E}$bjFx8>U6iQZ6USD;XpfcDA8ohtDFVTygIu zVot4CH93u#$BQXh;4WVjwrhd!1Odd-IqN)l-s&8RF%sK9GE7e-_8Ung^rtmN$z8m1 zMO>3quHa4zo6*hp_*Mu1U7tNVe2$PQ@3&PYtR7qXFW2}|)#HqD$t00Sp3BanZSd~J zJiNH3j#9Fe$;<~I&Y$R1TW5)?%FQ|T7%qx7EXU#|b})SfLAo`lEo{3j11yJWEgR5` zEdZ^$&iJ~iki=~cz!H))o%w_+K?j&=5h|a@kaeR`5b)V5`ysHw`Y;MDBkS!8JmY#~ zr-Jai^sOg?`>2yvaa3C(?zkgK#I4W^(ezPjD@o7;in+)d3;f?BELNXAKuq})IBNpQ zATs)1LdTkIBELIc;2L~eU}X-!x|{_vrJLA7NrXI&!W>GANi^5xC4}H82)VZg=P|nc z5p25L*|BWOlm-ib4swRFSqDOMId9UUP@v6I~IE*y9KJO zf|2>}waKj3PbqTDa5Zq9Tho%&7wwwt;@Y6x>Nar_7sZt3!EFmg=-5D}_y^UIoA_q+ zB26AE5v_4mEP-nZ1rrE5%(w>YiIp2uK`zk3Mcf2RkZCV!9GI936goiDyu7i3K)NTukTDYR@ zFFP%pxK5C@P@yjz=X^Sju7&F645o)k_XM`46XHp#ZCg4Me6Y~wRbRdmydmGE!~F?L z<*AWXHBPS3q^@HXuN;d9BEiv9hAop(E*VMNc z*5U+|B;VgD6KJ18syXp*`&T}$gqeb0B}s+{fsSrew)y6HN$`WY^-W#z9kht7Ly`$h zn}8Ru$z{c$thOB(@SF#~r43bv-^wON=;*a2%!8FjdTj(;t4r=7$PeVjj2TG2x@B<~ z;vRdOCjl;JmQy8gXgfn9mbXXA(dw_Q8|YP1d1?$mEFJK>FO$a6?Hefppku@`>#fv} z1kX$g)O^&?03JQFW+ZBAv4AD%2uvY>9iGFIC?9H?&9aCRuf)6nCwPXH^Ydek8dI`_vLEg06<{tlTg{2c4EUsw1?85ztQ-c^ahMkvlV)1e3_Nhxo z86txTIGW*UI!U>}`u!1jtGCQE39397A;{Le5S}~>ofIAkD<5FdzcKn;x8zO2zK? zfk@3!>8)*GKHVdY;yx~$iQD_LLvib%xU^(GAXNl)iA;a?cOPj269NKOZ<`GL5oq2& zRO795k^WMYYr8?@y0g*ou%ax8R!9@6)sDN1RSm{X-y{5FeFxM?$IwTU<9W3wCa&sH zTAcFrsvelp^pz60>20LWuqpDVa|VD;A(gjV~DNcj;+?-Dvanzniqv*La3#2 z?Hu}KnO#&*;M*m)yg02H*lIYEeK0!KTOHgMJOUWp1;&ebpw@K<8!;qHHkInDcK5<{ z{>m4=rihp{pCqZ6-FC$I4Y|ek#u3D%HuV_nMN4=(5n0_G#Jj(I23e&r+RiTqzlL^MYD{? zY_2S+i_Gqa+s4(g+!hRbHQ#HJ$fZs&P+j3I8}GA@%Vjd}w~g!@uOW3_U~@bzrSVu* z;aD<{3;g!U%yA|+`m0VzH}SEVtXnH&ix-cR&_f)G&%1^26BsZ9L(P^Sb+ZxhG&1sC zSlV;~kVxSbgaBVU%+Qg`7({R2FmM+>07vw+%HR~1)k!v8!RVL97(l;3kP&n`Dz#8l znlwQDESt8KYd>YqFaRXuBAfaR;So;SU*Vp#@C|7ih9m8Q{;fzyzi{`93I#(kZ(D7` zxu|ExcH+~oEIw{U!q_bAocb=qw*1(1jWwQ=>*w4|~Z%pb`0`2wd zP$|Cikt*v^gliFRd)XUi_3dKUbCgp(AXQg#wpIY9aDSCZk%5I)1--+1ZX(T_9R~Qj zIw4guCfNI9VsUQ%W>48Rg%@l@BI8~)a?!i5QZ17`(A%c;ryI ztc@%qCeb&jo+8;%;J()e3g>1HLBT7^zsE2ak+eTTrC0rnwi&8@aGP7z?^Iyk8Sy27 zYI^~0g&0jTA85dyMjuf9t-Q(3URcdq5DS6zO8S`>NJi$xw$U=>z)Yw>bu4Al@!z}4{QqL+`s%#rxveNgAe3f!FUR! zB3Jziu~HPngiKxSWZ5c&xldD!Cg);Cw+YUJbn?pFl4j3DPl$6OjRAgghI4;Q?$2r& z4xMJ;4AHWzwI^^Jlk8@VJXH95L8++?)bv?**=4?_T+LqPUF-HBT+0I}NW!ua&}>d2 z9w;{K>wHw1QDx+xxgr#tJ8gLA1kgleHk?}Rfd^ma-@F$?Y?`|MauN!9; z927u-5{(aA!7|}kj*v<7JHCE>IV#UlBu|jcd(|w}QdGO; znX-eiwBlzY;qt(_Yba-?WEz6_LWnEzrIf~!cD zA&wX#qG5Yu3x>4utVq|>alOd;SnA9yl`ZP5!9uD_GuM7Av2fJ?9j97c#G5+sFceht z1voGaud6E1>>jn9G3^hDbmz*H2OIfZnBC>1KI&;E`?l5XkgVr`lL&!#js0=R5xa*+m4$Fm9 zI2dt!Vc-THKc(xn$q*Q3wv!FJdWX@d*bebvu@+Zn{8!CIC#0j!K(B=1%V}c7T}713 ztGnwqEteDfBYGyQn9{}c9%)E8w6L|KJIgo;X6N!zx-T=Nuph$Y-|=#StBShxO_h*a zV9P7~a)W)BZ=cLs$`CVS(7u<6D_fGOc3iIY`mv`lqFIq1=?T)u+>8-%u)>I(4P%+iXxWuiX(7ZN%@wsS?6m4P`ZAPUaC8mnhdd zX{%~F%Q6qz?v~De!D)NrgOdJh=?Mym$DQlce$cDSA2@a#h|YT}C=BA0l-&CD@lHYc zDo#mxYn!w83SCC&PGwCkN(z2vg|9;TuSKt<+_>iRLyDT3Q(o=e!)6~TaYl@P^h|)8N(&mTc%Kpo~kv$0q)3%D0#B<_r#jhS;YNV!k$A!JLdbX zPN%c)lFDYWOKqOuTJBn&5Mjv~f%VrLC%=2(H!_OcYFXWECA4iUXWtxit9#Afq9E6W zpHoHDS2bM{?Qv3dHb-rqo9(`0TGAx%A}|P=l$;~ifPK6Fp^@bALx4q>lWbO7k17|q znlERm6WrF^W9e3znuGYGY*%qNRj0B-Q!@5DsB71vcI~-L*v3|1L(;LDvB+sdpQbM6 znOp%{y^!I_1f;VeuG%U0S{5sWn!6N6T9I!Bf3H|t|li4`~p;565n(W*%FptAt3s#(C$$>=?E^j=?h;|>yW37cpsg{dsOV8g+0~z0( zgX`zKI#WiG(?$ZSgV^zcF3Ak#%P&s>(kUS*n&RQwpIW{VYJf^vcU38(`qqtAAL^Za z@T}HMq92BRd4u-nO%(NY97Yrrc_PmyO^Y0)`I#5x^yE53V{O$9T?WYcrQ|9^yi|yR zL$F@*{uZHNnbXcu-0{o!d)m|G*KqbQ!SMyX*ih0vzq4g=C~9)OK$$4#;rAu`?AZ0l zp*~U*-sdmat+EVEoBMP0eBJ|`h*_ck<{b6V@r%>(@0HwsAL7D2Z{K|${~nj)^n-N! zSh#OFEcv*+MV_4APRKxBzh?SgxIcTK1nX(d@y)qf=`0tcI)2Vk zyDu5yF-C`#Jp|%lJHKTxeT*b`;Mqi;UkpPZ(z?HP?+hDUDvaK{o`2l_et7Qr+C5EZ zEg|-K^Z&5>n)Zx`O#saBT+V}63K9{WxbU3qks3L{rVMK{!~FTkUIIq3c_l1Lu$R|o zVQ_Myw3=BWPmc(PVq03OXY+IkK1TLHp*aQOartTN`W@`3+^E{?F*)zge`nt=U3i`@ znd)P6K9_!#;HR1z?GK+MH@QIA_hycLkq{Y^5-Ty_rFp#)`g=768yZkpk zA38QM2W$>sd_DR6;0!5`V?_EGsaI)ice{Qsw*KSGy=}}_v0Wr^ci+I0o3u?LO%&nG z`)@x<=ZEg$b~oU@FK}>Q2t;^3Uw04Na&!`|4{!I!^m29*zF#j!&%kg! zKhICaxjydrUT-?*pIf0S^(3 z=s7>%zaYjQaL%fE_=tQwqUF9N!D9_#d3ckJb=H&l<^nbb)agJurrQf*c2xAi-PIJCb zZ(_o9>rM#O-_+)41!nqRt_!sq0t0Qm-%|RYw|(FGPjmF(zHa*Ahg0U~Z|~Tk+FyYm!+9eZ zaCzS;`rdhT^gUMeI7Y&Oh8nqmto2_SRd!*dM^^uvB~6!vxfd^ube6Mpew@}OX^C2< zTGhPys2vikTXbd1+!E$Cn><+qT%e>d5qgmF-eOQhl!h+i;c+EeP88`_D*5qKQe4OmTzZUMf3IesLb9i zY9iH@>SXd+}GRqWBF{E-1qIKN*Io3&enqK z57D(|COteU7fj)n+yp$g03khxdRj(#Qcr0}Owuf+XiVcTJuHIx`IWIwwHHyNFudE@%T z4Sm;7d^d?9)FxSUH5WuS&und?@FsKU2@i&_+l#g*FPKV8^)N!~`>a@sedRcOCgE{a zM!@VH@|S5a6i$VwM&SB`dGYTAOr4vNA%>Jw;Truu%y$R|5Uiyd+CEU&rQzL_-#p7v z0V9I~02?<`6dX_@Vwh=Y=f?FMD$Ev~ve8pkAOpeaM0*qfajZBcsnCE6W{uPDK2zdm z2*5!ZNjG_ShJ+l~tM~iho7lk0*EgoHG&JhK%8rwffK6j0(t7rFG|v8ghBLwA2yWnj z98Qj=>36N2`%Z9yx3z9=XJ*KL5vIk$u`V(R)_U-ZWe_jP?895`MopO$VZ0P6X-7fo zp|Hc0Co|Ay!S1lZE$88`L3@KsAsQEj7Em_o7Cz_UnwWZEjxbx+bjZ#S48CJ>)=h5$ zR%sThX(*0si;W5)(gIE>FYXNyp?q9Rl7YGg?bC^$-z0&Gq}t7%|RGc$@z9FK@i z0`C#5NrUc8`>$QdS&a^2ucB$%p4a|aVz-Rl5nEy|`h;uycH;IxDV+O4n4M&J(HuJW!t?+7goT=tiUV!_W}NU*Ot5fT)_zV|Bb)1Z4^T z7$Gb|0G1e1VeB;*ld6_YJt%K;)F=1lDizjT=*s79&tEhl6{tA z>@Y^GVvoo2ll@Cp1>`NY@iWf50}Ecu-bp8}_RNS9sT)kudyo}hD$Wqyp$W41p<=vJ zI}(;tVFw{tUeZGeb_)?aUV*}Sw9UFDKGvFmg|+iSC={m7#Pm-l{DynyBog%*2ZY3i zepYqFi3{uPMqKBvnC87%4;*jbLBs z^Gk;BTaEAgu+5ArlX+7hXMu7vCB{9OLdu(3%1Wt1!XNOU?(ysvcQN~q$ilBdAUpd3 z7kX;7m4O#c3&3S%+aSAkniBmlz|Jz2u1R*P)?MmsZ1fETtE@be$Z&a+r*L$tx1c(Q zSVOw$#M&Xgm!(otUH>}? zu2LP@)0LRfPEfI;pd2w)vEAB!bwrT=$D}kDbz08Z81U0b-x(rVeNPg<;zKn?P{8dXp=&`>sA=N@*!@zccw+R;UbfP9vnFv#Kgy@C{mEa z*7~?bOfTe!Ca^JTaTb()D%#zaR3Tf9*r8Yn6m&ZDiVzV#_F$2Cj=tQ15D+00VwmNS z7+GFnE`IRP4GO!+kWS=CC%^_3D6uQjb!7&5!ahSmhC$Fib9#8h(~%24uvl53q-Ij_ z4~}dq;Pk0+%R%Y9gOo{I77A4?g^6(D>Pom{u@Jk$F?j@B<7L8~;XVS%4}z@wW5e~1 zYR5+@4Y6a>$5$}zG%)HJ<-i$Iw`7xzRkaGUd72RrBd=2N-2!X$j2h{Y$dqIY*^7brjn3>3sAycKcH1J9*a{eAOJ(uyUYT5*%11DMv7Xy3vWfJQC+KKJKn%ooE z4gU%_wTwd> zbmU=`ir91H{Bjx_T1fUd5OV!2|^3DWSV_$>0it5ltxwzPy#QB4NG&Bs}U{QG0hC# zUdAoEqI%^kmFSz`2)YaG-aIo9I5ZVneeslWm?;tBTP{Z{DI0i@)fOCbaq{1%pozT7Qq-*yCVd#WN$} zTV05y^~I%^v4PY{S;F@=GBvP`NnZkTocA>yuLSK35SxaHA686)s9otiP%w~RMV>N3 zGrOAkHuG|>TDDIzSsE`Y*8MguOOLZ$0@v9-wB$N5efb9WYxt^4R|0LwbKD1JGA1Pj zS)`PJOV*q2ybS{e$KYSUk=pxq(;WS@PP8bCiv_VVk5<90c#D?bj7&hzDnnZFOf_N_ z&(4>atSt0~yP@md6luUpY@ksF^N>2Mpcx<2yEnOZH zDQXhnyn-4*r;r(}ft;fFuJc&GnHUyTEX`Y&I&Mod^0F7 z{yAxFv(lwu>g<=d?s>~5NxtCk;{qP`t4r-`0y;on(=Wnnu&+o$bB(03X{sx+zp|&~ zp3)KglC=6<%=OHwhSbc(phT+q86AgKL&1HLu%mW-w}*AMUiw>O@ROC;by*bB%~a+F z%4AiBEq;*qM1W)*`C!nqr+W*VbCiRz4YaKbpp}>vt}(YvVBlA^th8&`+f8sQ4cVuT z{asK~J6aW6qwiy40iSStY&T^(r?b#5w?Pfz~X<)0yW)3Y#7LEaU+Wsbn{9F#MH z)HLxX?8Q&4rq_dF=<6z+p-?nyvZUulE`!qoM1gsS1Z)U{W?K%>QPoKu?`oH@@uXUmb~nh z!l9I|qZtk^Q>S2NiQqGWt5I(w8r6?w2=~LRRQROA&gn8k`s7wI zG8XKjX|WrMHHgg+8;bSsyo*hkw+=2vrOqOpdlD;jf@?+4N?5<qh0K$B;s zn#6M-&P=yxbc!Cu1fB=K{wCT3nP5MhD$;${PmCfhAI0h;jAcEX0=-6Bph1`F1k@nr zqDN3|b%aK^&5AzD_BlN)eG3>8u;c5QjmCN%UYdw$d|r1qEg^Pqseu~WK0acOmpH4! zLwc=oeNF=u?jOa~Br{{Vhbe6|S@p;(ZAMEye-5u>jkO+^MJ~b^I$K+DaKEK!8aWYV z_^jY1(dpbYY(8^5w>s3CDwXyox0q=5sjf~i!&X|Jj`lJ-JA2JDD8q59w2^PnHt@nV zEU!FLc?b4P0Yh@LX<Xm`>^g;JVXQV>_F)Q0eM# zroGBpZ+L9gICZl_>0p>Is}*|LHovl8j0%fU)aXx0lpv50j=6wy%VipAe=TAPrK(1 z+(R^svZ$JuYH;t0DlQRRaQZoiOr$K(-;@vLEoD-c9YWbqZ~ckjwX?qn?(S(tca+zK zC*6LLjSBebq(8Jz_iX@|4$j|B0yd#vX$j^o?nhw1Srs+<)$~GiZ~KTEX$lAvyA^@5 zH2Sk^3RDwOw0p44UKxne=b%{u-^fJVXF$j zn41q{F#&sc=J-Xf*f8;}5|fkMSUki*%M&N@Cd=cBCC(%wpk|3pgw$S-!u)^Cy#-Ju zTedccQ#ggY7j6f4hr(S8=KzJfySqDuySqc-?pjc|TjB2TQ{8WRy8qkvpV#+IOw5Ul z6OlXeWS(y?$t~+!3*<9SK|pDpsriRUs`%L$Y=Ma~q9(krO{^lhOC4~`KHAq1m+HY7 zF;nhzKNchrOt3OKNZIv*-7~t|-(-hD&0wT{?qOf3jUiy+1?)nlm4q!$ux}WzfFwMr zFdP?q1Y>SEC7vD5lkB$ZF-K{;Ql!{Tk#a|+EGsyyTzD)`2}_r#4&69u)4$SAUdbM= zS*>a+Rl03>V-)MICUeP=exN8jj!DMF?+4Ztq)vap5O~D>qC1wW_0g|#_(#3_llcja z@26BW9fB=4Cl_RQ*6P_m<(4$N*{Dp34dn^e(h=EkK7xc~!OTyv^szt8 zmB^>LVUjD)pi*gYq-MEE^ftf7u&U@_p}Ju-n$#iKYWm)7#PN}ykE88 zLJzu{8oI)_h=XGnGdi+~#hy(Ic|m92_>0)nUY{=pPlM0UA$nL{P6o5_&5lP8*ir37 zL~QP(i}-m#b)eEt_ebv+p04C)K6NIM1Iizi7C%c<}H2 zZhF>lPIFN87RACpnGCCW^0_`O-!$>YxNxN1t_#Y0(ExM99=-qFq&k#|PX0AjZ}0tt ztBfY_TC+`%+P%okDr*d@79U@+TGzG}P05+@N=|IPB`f0`Bn@aNPMO$G^JVIh5cBSRv#l~#^Hx_^j*+NuVo{%x7X%7hT4MWV z*RzUfqKVeC!c0$XAvgY1L<^MXx;{X{f<%CXd5m;_J%s0__K>6OoNae5%5r}8>fnZ< zDoVE-c{np=*^P?C2$w)9Jiu zt3{=Op@Mu5i#ry=7>=Q>mV*!B0Z*{O+Pi18+D_gXCg2Fp)9$hLog!BFD1XuhqBUPo z)U6uFaEc4ZpXJGZrQPFcj-_5k6flPeYAw6TSK`R2{?_o$fG5B3B9EW?<$c=m0QPe# zab)2p1B}K^5yx9;F;0m0iyTPhYuC=DDnzVp;1b=Y!qcBPJ>+Ov^bM|`-NYHgG8ir!;WWIHsO)1=dE6{ zFFr4a2y?3u9ch#tr{w+db%PtZu~ztO;dOr}O%_CMVEPQm`(t8UVWTwk{6>wk;28Zn zb>_;-sPGWhJp+Y!p6L9i9LE#4Kst3OXcZ!x(G7U$vOCDDGQP{>14+Y^P(lz-&`^QC+6wg_O~}`l(SCbowI%L798>Le`9I?DU}ug_`fqy{Z7*K-{P^c{6#7)^S^FB zbb}(i^Jjaq@8m2I+5eTtmdy>$PW10sY=3+7e`IHW4)A|wXUu?q-bn%KVL|5Up+$gw z14DFm$3|=otQjkPBeD?>=bLx+eqrmDo-vz#d+U#IsGc}~F@9Hy(RC+G(eB0*-5_hUC{t2)&w_9Gdo?jX`i(jvB zhhb-}#gk?S_%_4e_UnWeBgW6`g_)nQdfvLjO_T4c8n8_)3C$t=Y`Ix>bphZA9ykPysm-%^!UuT+#(b+#@=AuP7Yt-Qd}nk69F*FE2Ei<)9~Y;K&#*sQbpMDk9Kb*XEEbe1FfGap$^;WIF^UAJZiF01wR`0BH$P#2I zIWNf*{7hU<`rR!A7W3^y8avl@1xq@GgSpprV%5C|32tma&&jS1XWPt!v~`)UAHQub zENnsLy-?!D;BKacJ4Ns1uI9IxIGfTBAW#u9OpjZB3wKI;Z!ByvX)>i>!Znf|Og8Pr zToOk#$a=lhW%Dl9;Rv@C9|!+F6^1dTwaXtEw8tq zbZCb_&iL3yd4NcD6Fm4tyWeic`?73pVR+d1@p24p`OjuL*d7Ir@*c{czaY|2_9Rw1 z&>q6yT}^za-N{Iv4DcrsO_d*YMUk9xXtqm;Sc{G`%?|mHTeOIJ=*i6ucE=8is6}Qh zbFykRpigW9+wvi_J_SIqZv=xa>DRYU5i;z`JOh$)yrFRhS`5*Rht8GKa?i*a7(rHF zm<|RSYZq{#tPz#!mn}B6Z+A&sI3O<%XhIcg;%Kj01CqnUDHQiZcqD&@!^(X!bS25n zu!w`1b$v0I8q!Ue|-7|3VLDNEB$u!K(<9A`UDs#D*5gp>$b|)vppXG7r1ZXp4=WRdAn!EZvO39U#fp;KAu7%MK13!;-6oR2Wa5 z2tGj8x8PmNEnABMf~LTr#P3CrY=B4tIZn;#*#*%-G1B-5mpmAJZOi9p=E6rvd||s( z$wYDCBr9vKd(xwAXQtw|Crav8Z-8kQOf0%HHf1nS&rNln3IwH0cFvmo<~frPowReP z%i*Y;D~|$t9wsM7B~LOk*PXs#eG1UZx4XZJTX|5^j<-iBRXV76`rC7c$dD1n(s zE5=3t$tMO>YQo_mpxZRXMo-~K=(ZgJb0F=PkOdYe79XNP*4-Tx5qZ=bV@W4mZgI-c z1y-j7Mtd3xnAqi?-C72wfLN!k^l96G#Zyu;k2R5~)96<|p|HUd6kcMBi&)5Dj%yyFInZ<0INXEb1aKaR054%11ZV8zv;K8-ho-ad zh)(+?mOomER;K!5#<2U$PGO$w9j(8YJcF#r_2q~!H_S&=kmMUMXVRfvUv3e&WFDAR zV(c?RNZ!Ko{6V6b_Fos1_}{syUO3TwhHNhCzzEt|afn3292~n&Cr@JyNeV7moS%VZ3jN#{Lb9{zs3Xa_!LTEh%x zue)*g-~)E0R?eJtx4hnuw-2_Rqq0mNA2hAmHDVR7Ki%KGA94iG!fZ@u$>-}c`m+s< z%#TN+AOP2ON8EL=S7-#VBm?hq7V*nTT*&W~&>+!u5A(C|4s?WHItnRi9cG-r&wZ)+ zT8M8KJYCttnKg|~h0V36VB%)R8ud_#nZaBfpII^xe9VbJQ?&Q}TZCW=$mXWhDd(d1 zcmIpS>$0z7G_y#T6WI8_r1__)DatDq8sYXQeydfTt7R z9i?=n9}*Qn-K%_cn<~8Y+^OLpuV?LndSH5R^%Qslqg02ilga2sy=2m}ayjjW8nh+# zB<)s>ijsmQ`grxpv&X|WT(dZ{kTh#C@P~rKmg<_eIzBJ-EhBzxXYY(E{RBtF_^Lj_ zp(9zMgDVPPQsiDul7j&)w^$%`qxhIm)?ueJRFzdm_b~q({cZ*FXh{U(KEO5*LWhKV zJ!REdd0))|k=@*BEV4H&zlGj+cR#~c#j_+JpkoX4`;;Dps5R=0Tq%vbIHUkG-?%;@ ziXo9=77_SG^R*piDoiC`Q@l_jxF7_jn%CHHax6GysLKH$ae)^ac}iz~)`!4en`ZJJ zKvS9g&Vj)68^iRIzK=tFyAz2?{fQO@pNf7L!2P(788-I!gC9b4uQgfP#&CXF&PEjF zbXq?S9GUb;rsHWEh0ZsY6hzi=$eV+CC;ZS+d7gI6K=3oD$_wt-A$x%_k$U4G57;mb zq=q-u(U@fU7~q#Wao;3?p}Df$Ytk6Q@>7(AYZpWWanLFp$G38c%LKLMsg0`7@i|*w z%XE+sMF(Lx3){nej;>5d6xyE5J6#g)OSg3XMvSK(L}BGD$IkVoYV%oXw6hxC!nI>6 zGCublmR_Rxn^E02l2g#75OZpNe9x~ny4;cnh&)mLd{$vW@Jjob7T2>SR}U{a?9YST z^O=*Wu0qT9QBv(@@hzQyf~Z&e-TSTh&RrhW=XhWdtAzp z+qG_7=tI(uey7llI9B&OTxZ^yCp)z)J}hu$IjunxX3CvMAyK8kSDgq}6?^Uid3zjJ zR9l~DSei8_ejc$jL-s9=4BPZ}mqX+$6+Rn`X(Aeb+V}hQIdPRgf%)`&Gphd{c%nWT zrrpIij#7M<(@Orizc!=4=c21Z?py#-05EyZO@HP1TEXLiuMRfY_gx1j4s;8JeDFj| zx>-NeEBs9N!t7Gzf%0d9Pj|LYpUWDCf*))gZ+A|ch$#8~SL7jtfkxWC4K3i1tO<4y zCp`^35oGa!k6bWBH8z?{6$)i0Eci+ktQxeF8*J`)wZl(`Nr7@s*&7bl$kPYz#wf-+ zBC;YT>e)D=raC%0PwwLJE~gZaNdf7)s)2kXLq1Sq6R1XEYd0vN@h*c`t@|(uZsuFG zp%m}*75MVwW?HSmnx>eutJG_%kOqlToeS{fO3Tbbu<~tyCQUc|#@r_ZgtO1jD_dr3 zNFx+(3pi^?WGfYWFWD*WoO_Kk1@gU;relukz=|egmVt9t&}=!? z`h8ywb4K@zFVH6r#ts1{wLPQW5adwTGPtsP5yR$FzI(-|LsB*xOWz!h7+XOu6Cm9! zak62cY7ExNhx)vN)PxBYsFVs>dpPXvL&s&aa6qCt%4Uv;p>7db%pn}oY!R4Ni2Z#Dum6iEvC$WCjUVnBe% zB1d5Af~^fMJoO4^0*{BhCMr>GFy3r9Q@knCJfm=PF}jWJsi!jsSlF2|t6MzPCxvU^ZN z2ObOiDWA@{qK1kop7M2@;}3K#EuZk0wo+ZiP=gPhOu(f=D?Z|i*kTSY@@w(c|Kyb&-M^hpd#Vio1kav@Aq+OAN{19y3DxQRBM)+pp>6O7St*%y0#+ z(glBacE@i|F&BBISk+`K6wdM@PngYqcj{r6cECb+5&nv^5w!BmCi=H6BG?h2@N_q7 zIr4h@>$7>}H`to&S!*a;qI^nsOGXZ8{L*CY_nAE8iCc)*r!FBU-abT2qownfdaL(( z(uydhQ488QV=9yF*-Xlo_wf1G%Y#_NHb{0I_uXKmqu*vVn`%`(tcj46xUGexO< zaskGrA0Jk@w#zAh277c5&EzFal|L^HeL=-kB^=CjSK8||Z&&RYPom$}xeS-24u2qF}r31uZ*$qhfGP`--t&Y;pD2Dy8 zb0K*JBV8CVH)M7#y;H67brm0-J{5dy5YCBBu)2{CKvICvk>f?9^BfZ6P50h*B`Wal zk(3qmsW5gy;Iy!Fox$ynVrK5lUVlX~aBBfC5Q0rd&YHY19cq4%n2{I3mgSYI8en2jqMoWy zXu0+ZX+=J$ANSCqCvhA^X>0nw1I!d@@OUN%*e zrRW|S(-`rk%9K%B3c3X4Mn_J{`aX*$zo5+(WxM{moZ%^Lc?N&YjzTTiUfAOXDswQD zUBeR%YTTYddp?2adQG^6KN$foP5CRaE@CHw@J9#xStT>9F5xV`h2E4; z!7|f{;2`~1XN<}@&{rT~L?$~r&&5urd8O=O#SAmFX zxq|i*OPTQiZt$r%J)cm*>6UHD_xD0{w8=Z>rs0x77Hry>n?TtH$IF0)im#3k)U-|f zlOrFL@#@p8oTYRHgSAe{M85^OM~j9I>k4NZRG)n31w;A-VfM{f)JH3(ZCY}VPaj0C zAXu|w?SWD^N&?v+itcdMTQ61YLh0km+L#xm$gd?H@+5!>5Kup^i? ztcPuO=&XflJHEwX#;?)JeV$w$X=aj>akdWbkRN>fHh{A5Q&s;L*6li^!@b~dH;aK5 zA9AmN8t>-D3l3qT^32UGS#e9tsG~%PQUiNNM+AzH55aqbp@T>TPW8egq6qU7f0V0| z6DgG_#Hsnz>r`V)K7sq`g>x@%EUYHmdNr&Uiq@#5kuWrIo|Qp_3Y6};VF_s4mrYh< zA2H5;P>isT1uJ^EL;h%KizouvoTfKImueY zW%UvrMxrH6?})`mok|ah>9qZptY{@zwc2Y5w<8B zT){3GWJ~m^+Rf4tPy9g$5@wmCE#`EJaztFx*$_bFJb32hY`7*`U9D7eBllpm zSo3_Kf;b2((XbzaD1pxqm0L6B!O+-|DbcusR+Xs|@yqD!j~Vr0v({Up7r68p0m&}O zi!aC;gzxt^lfe@|j22>w8n|2?B>|cT%mq3?$Ek}cK5k2J;Yc-6WL_OaPI7JStJq}A zi*NTr#3LT6fX|%GzjGW3HDH z3N)3Ca-?RilQ}@K;#gK$WqqLPdz`J?0UMwd=jkn*@_SEAkD=@_Vn+7*aBKS$u09V! z;-g$8w}6-a`3g}>%-MBAG*hyo&QZ!saasOAWJiun)<7EqW`uQj83Xm~x#*qiyRUe& z#xF0}gww|DSN76rH*KqgQ^u?48w2$kZyh33ffhf=xvo%Gcc*QA4!?e~#T!2SN&$%4 ziOAyKKQz{_^-VvvMq!Rat!;xT94~m~E?rfDQ+|$3uU&Vm;G!`_FmP1>MX?%>jIX$=Jm?HZ$A+I} z7@;XsW*wPB62mxj3w=2BVw*_-{b8VHA8DFuFA0J}AM-3jRjN*HO(GCOS50?Twiz{d zgWqj5y4O#TxgPyeSAw!X+v%1qzx*z2jmO$X=$A0b=c*SgI`1gcz?;2OgkzK{DG3A>2a^8Q8C@u9=bvxCP zm%!{>xuaNZK41P@Nd56ReLjD!{>k8@;v-GKPq8_F58n|OK)U1v4-3!CjbRHr4_b}) z&Wbv9*)o2QsvefUOf98mHVqmE=gRN&lZbL;2aPiLa{ zSP9`czdr3l%gm2ct-r#x+f2xpP-@v@%JL#AQR<~`+$%4->m3kS#|cTKG-#nvbfvLo zM38(Ak*P82JdHo zh@{kx;EB}NOJA6k1d&V3Bw}W6aTeD``CX>Kuz%aIpm+4RjXwYFyoV!ZCW|I&ukT1u z5v?j#IIku@gIk^xN6MK81nK&RVZ+tDLDiOT`;z~4JO|S855)Y=G#>n)W%%OWQm#UI zT5*Xzu1cB$=i0-#$;>%1N5cZ=DyFH5WXlk|X^i6d@;yTC zHQn{|WmCPJ^Q=c}MisfV(N>hLM|DuA8pFX%L{D^M%mzG%lBF9Q{7T_ol|&#~r1jkR z5d+X`_CKg$KAnSC{&a!6Tm(0+x$kecc(nsgrxPTZct-!kD}M@;yTkHhz~;-f@47dO>Dop3KeNH*|5?VQ#< z0;_`N0e?%hlNnFLzt>u(Svew|QRkW$w$t@=A?G|<6ZQ?|RIFF->hd64ZTuz?Z7GSf z>1uzfF%@<>5$4HDHLsuwUR~A^divoc{&ULfbud%H7362Q2*?*3R7%=AAV}$23YPlq zAjsUw5D0ekAzWzlXNl3U2*GN!7`{Ek_QYlq&BQlEVfEFk;h#^C;fXwE>LF{c*2gb= zJ#uRI&<};p}uF|Q`)%#5_on8*q$#V!*%bBK0H$q)4K?$d@rwg6DPOd zsvY5!MEItdvEF&VUG-|i*+aEPu*vw#K8{UQR9KWaL(T>kBeTBLcaTV~#ht+^zN+)} z*Gn7!+pb#Y+wH>J-TwH()2dfAz^Zf6<7#}siqpFjuQvPQa_MQnp5^K*q0^ab;@)PZ zzOUa`Nh#EfWYg+!*q^dz)X54(fZ){N*>Q_6(j-ShNl1h&(k3^4NinEoQt#uDK`X&j zFpY@s3&h}evhu^i@-jORGQtu7mFLU{z__r4uFDgoP;N>CG?xW7`!97g=QdDVx4940 zUOjbU@~LsPjc6e7@*J0mpf+~>bO%(9SOWR|T&DPP(dm-`TgCwa$L zn?)Nt2O4M)38+a%Zp~2gbpJ{Zo!`gX?#(0|@kKt|z)^79iwVCGyi{1?YegNR$w(4Y z4Eb0cWOgI2-C?_@{BbiVU?s}8T%D4y#ertMS3(U0vW z#D)$;#Wk-Zx0`#qPzSg9WozxKrKV$**tqsjLwJV0uHeCy#r)5YC&_QM553D-Yl!os z(<(8B_K%IW=b0SF9ZPR_)^C@+RaI8l94$s2k8%U!`)}W0o^NkcMxMvvvT&OCZef3b zZIFT<9GDqc7*)$V(Sd_AVER;oooj$RZM}hSXl=Lso1Nx=N|^fJOLor5_>YRj|Lqbn zEPt`0BpcH|2Q{2@`@RQgfb?cRD6MZmsQf?Ii1~dr2tIha^1lt;_)iN=GW|L7|54}$ z6AR#9s)n6>v6RLe#LoO-OI_5P9xsfStOel&)Z{?pF7Od(7DH4QJDvV8ivyV;wh2Ad z5I2<6-Ixx$lZ{bSfox}CPx48Ps#Z8;d!*r8y|^e*!-qE;C48_P;a?Tibp3v)s)&b( zC+$CuJ&q?%2|$5w)sB-{xW-@iw^Lo$U9+48DI-~C#7Y0_E0ZYwX5y=luBL>2hCcp8 z&_1Eu`XDCUv{G~rHi(OSPE{P2Y8j!_dQ?@1U3L-vgS}+gID4kc@<7?K_7p{EMWb80 zm2e`|u(oRbk4p*B?~%#O?K;t`mp7RAQ*n;rkwnbioeWA(vlSY_G|NAo&I-2B+6^(! ze=G%W<_5@j^GKu5j%YU#C6rlPJ#q3GXG1t^I2wB&X+E<&OGO$)RX#17nl3o5d?-Xr z({v@Brg7}3&{(ToYx~Hsgyzxvi*dV6Lsb6ZQH|S*m@hCA?FV+f z4i{0hQH>b-g<)iC(hkWAzKNB^aVn&|+06?_FwtBi@Ut^mcJFt-h5hQ4Z^;X-@WSLp z>CB#q@YL<8>Zf#9tbw2%Y_1&E5FA{J1app?HWmd{W10_Ned6o$vghxLM}K-CL&&SH zbf#<>1;``yNuFCDItM%727&4wE|oOv0Tr_@D<#LK$pqSLk=;RZjhf{#0!J;7un?(a z^5x4sa!`~Qk!)sT<8u1a(nt?}9GrkP$fK%6VPP{_XWJ_q7DE!xb&ypD%J0z;K`-MT z=BrfNP7lCh>bD?b+7*Ht^8_iFp>xPeW+1Oq@Ws==o{6%-UY8OS5)!#mq6_!()l>Zp z&J(Tw*<(C{^^H@HoRC307$j4_jfdOjJUuF>955n3;lQswk3BsQLkLo6FRlraNP`fS z)^&Onhb5n8@UziJ8*kSK%bo%R9*6u_bvgE#6<_L~| zkJP|0V#O;ei5@(LjtdUtYZjjHImW8?dXL$UJEpnvz&eWfM{c1>WSoFt_jBt_gSvvq z&7WPmxo*Es?m#(J=2+Og^)A zc+M@16V^y>@1uaUUNQEE#qoTK_{hU4h{87bb*Mbq$Q-#F2Eu4KU#@{h$kDcA0AQzE ze;Exi@N)lNyAetlukxbBBO#1<5`H6N0!L}rcX5DaC#bk>0aO#io+gF(MNvDxFi^@9 zWJ`%63b{r@ zPR8iC$qs84K(t%JbE|G z3}njlHhzVmydEs*e(4v6ZwS)^iUs9wOKx3p_bHs90!4+-Ifo4;%!00Sb3P~BI5vkL z;9|6n;`*i!Z1Lo(_sv0^QUOEAnF6LNX|7QD`xlWtNZ->)kv0jC@?a%ovgGPYI zsA{bI79zW$1jpa;QCy~`&wU?F#aL-l@g9e_0RaR_r^aoV6^2FqRVS!8ayNKm21$-0 zLN--ikE5gnJ1z*LQ6pj+MtMMEixy-7AsXb6OoZm+5^n)cy?)9Jy56IBUk({dRWz{~ z@Rk^>mehe|TF-16UQZlP-{`%oKfiq2LiPog&MoZ1fXrI3`+Nz+@_kVT>!S3%<$*vx z$t2n?rGl63My{&~YsMkcFoM2d3!wn7>j^@)cCX|Z+XTfLlXIIWMCFhcu*TB>GK%ll zULnf2rzDnepQ=IwpFH!_CHtp3?p+;cpY*#a0(KgE)QY}CY_>=H=fq*Dl$8n=GdJi4^#M#}g1+_RatSqmvNo*FFikydJO-;3X?r|wKmr#eUwXfJB`G$`*2|O zp`}y7S|5GJ^@sV_NEsz;O6~XP+DC3(WZo}FdLhdxfrNG|0ic&9&=jemr^-l>8l$6k zCNcXs3z6pXcqhmtf;pZc{dQk4v6F$&!?axGwI{e;(`0INtO_Uu^ECS~rbY^Tu%gys zXJ1K$6&boZMb?$eOh7r?Mwfn)Tcybl3W!~4JqB^aJUVwpQv_7Y}W@rtJ4# zNaM}igDwE@&QK!>6K#B_fX_2P7WgYkg)Wc!%D4#a^o;8sKVcHsx zt69@}=<-;gp#SUV0E@&0!v}s|hCG?xMLXf7eg0{rs~PCJ%V!GKBydu)c3$@%L~P^5 z+URzOuG{BD1MAer+KpEE@_2F#Pza~f4{hk;=}Udk*JxqehoV7Lw=)Sdr0-d`ZS(ab zdqgv~#CyRk_pI?udF+bnEF5tWWI3#BMr|c#Ftsyah@t=a0|GQNa zS^r|$-2Xjj8Sr};+>?DHXZgRE&3&(z%l7>5M!tW0^nVnz{O17wMz z${Kis-k9y18yu+8>OCRx5_+oj@YpnBZHzsVKZRjoAF8V@B(9?qzrmU}>L%vI=4cww@K6N^#z<@4!(MtYp~9VcWHNqs_jhgS?JK zuECHp@Ra}J0mQy3+IM%Gcrz!85|28hXt;@;Z*5%v2;DEx-;p*Nl9>R?LUqE)R%d*v ze~?xmRb0d%+jjjZ?TMX}kz(dBD|?g0wVF;*U?eI(LF_awYqv7VGlP(lI-0F4|oY%8ofOA?@s!32wU0pc>{k zevocV4<}Q}QAva1m>zVRsc`vo^NuzfwgnvmQCT{XEx(!2dwkQfOx{Y`QcMKo?bc`~ zx&0#HU4_R;oodQRDVOMmi!C?M<4oZ`_!eq}E1m&K#cvp>wUHz*VTVKtQ3DDe+d=eV zpiZJYhNQleCyK@@h0EyW3H0(j)XNkI;jdFpg?}P8I0~BoN_dlfjq|dR-SrWY;*BXY z9wCq^&`n_sxy_$Sv+^oe1Vgbl9L%>{&6+-LHZiD0N71C{s_vX0J};dzn1r9mt%b6u zSqFWcp49kO)2l>owhA5_LTUccc^^to33fq>puglm&3Ydf!Vvifn-4g)pMs{8Vvjwr zLx!qQr~M)DL+mYaJ3q)&HzC*qwM4A9a#FT(RAqfvAzGyx<2d~kB(vz_;55W(mXMYu zy&z}*4YeeU5!3aT!AqBK^^sEhKLwQQm<%cXe`@%}i4>VCr0J024&sMa7{|SRPCmKI znUr=t{U4HMJf6R2rrP zQ{guS$@4ejHIz`g(wvjApRgg57C%%@jv*v~deJp|Dg;2Hw}5*?294Xs%8dG`6bvl$ zy^GUv5**!-Pta&ak&$Ud43Q>-<^1W!1@X-cAn3^sOr8j~d({PHvf!o~0cQK|FL5f_ z1B(IW#3U`GU%lCWu3CS=Lx%>DUwuv$Hm^cAy7ZTQWE>n3y`y+37o&T79L{w=$&reG1gKv8OY&qI0%(rUP2&+uNH0 z893MgEL41a?>Bd_a|Alb>)RPwIlQyQet+JZjjRlR`(oBVl&$@1fSFk7ng0%$nS-A3 zJ;4?$5i>I|xe_z!42lPKw-}_6@nch{JnT3;+gNTKVlb(~4iH((riG%4sle(il{eNk? zfrY7?o4%dl-}Kzbis82y9T*HOtbyiqPWl#(Ms)8NS~^9iYNf01;GhpQ*R`>BHhR}~Yh6pD-xly^%KlE$`G>^+ zQ1|SwN&H>e|1NPR4n}%*02?!a=y&h@&+PpFlg?oMr_T7p>hoXf48XgpbNrY3bI^0L zaImox0XW(JGcW&JGfaW5bWTR5R`!3>{CA!BhZDE6{`#)=hVS0p#>t4z-a+4i&c@Ev z+RoI$^-r|_eNFctGXKL;^IwC>%JMgvv$GK~v$N2%GBdHf<9s*$|4iuC&d#RhrgZvt zKoe6ZBYNX^y|uRdJK*RtVQ+vne8 z^{$;994u@^fOn()k7VVfZ)Iv>q5rqx#GlDa$;R|u3;zVy`}FD`!uqEX)&Gf82w-Gm z`xh?hiKk{2SySwu`&*csjsV(r4=&LM4oCVm(1ETfI=y|BDVGTCp9ED4P{waBB(+u= zWO-o`V@Ymg5<<>L$_vTeQgI)3S2i|~UeD3-o{7jPC^U+~%MvxFCxmUJx4_GX(mw}<~jWGAo3T_=CLH#;*cUd%nPm%L%^RE>1bgi-CB2vCB5lFW|6 zaB^LSAa8Z+@^Q#0*+v|LR=;*p!hvvxP+@rSjSUxohS2vZzmu?GwvNb6zz}ev?rUJa zsgw|tFI{>GDi?@x%#fETIfO(^!H!oSLi&TjGJVZr$2TOv+nH($Vyh$;nu|I5lrBmx zV=PU`pveYZOU~S}y-dDyplxiTd(KhHY0^c-K~EL5D(6V6BX~<#efXWUYWVw&GDVg) zeXhNe?9Ck{CpV#|1g-o&Qq(@uJ5$Ey#RoJAX~=e{MX$qiyB;%6N}RJ`d9n#+@_?j2 zv$ggDgD7f3>GJ*=B}GMzq$~6g%>Af-1;5^EEPTpnyA-C; zDm;w5yob&40~1ywE%T8Fd9CY9q=hdJYKSc&XV?>5cD5;$Zr-c&MOXYB(J($zpDD1L zVhQNc^88T@JN^CNxrQCor^iIbXS}!QcRVmH^DAdLS+pNPhO)enOLo@RUyL8d`L*D_ zR0XDFXlu-N8$|;|#FG``dlN#avPAstoD<$&e;0L2v+nSE*gSi?f0bK*+2nuMyS?p~ zZSZz}FZXxt^5?O8c3s@{krqF(Z|Cnc?etu=Z85s?g)?&Hm0TC{N9s|~Yydmbs@)lV z0bmACSHGusicb-l*pEp@GMgIlNC%;#rx5q@FJ1Rz;=J@}$%A0*z!emp7kJS$+K%!k zSD6uW#?6{7mon3R0i%zd)czFs{4gdeM7vvx<-&zOu=s%XbN@&m-em^hH%gV1^6==( zPqnz1I0n&_m6dq5gA8upv6OAI<~sclfwq0~@%4tqvp?r+2v!!~mWNr46cc_4k0%5w zRx-YULpnq#9hAJS2!oJJp4vB)r5Y88lo~OnASDfkzDe_8MPC@r_HI(eWC;O5)c#-&l6Bgrp(#CmBT- zeQQXB$6uZ88iIM`R9`0t@}g1Oe(F*p712Si0o){aORKf`01-J5$;>ydibri2Je)HE z6~P7|c75>pYx(35gVEo7G(ZuM$BjYaQQ??RN?HSA(B?NXQ z!lW<0guBJz@qMmC916@JSdW(MlY0?-P#g8UqN~d$Jh-VxB*^fXZ4{_ zewPJWg_eyx>1SylDCJKgd#7B(E3Zu)1Klw1YUu&wfrvz$5x7Mqf9^qj%{D7bJI|*JYLkYfG-(HFhlryFwXo z<}}WZSgXDwU24qnN{F_c6W=hN(sdD#^7AEH^^+Cm$t;}~IVj!Fh!j1l zi7U|tTtP?M65D{ZQA)?h9SAG>2zpgwW^S+R3nu`eA~#FTO;m zPo^^C%{HT)XKUdC{5jRTjejb*MtM@Ur<#rD002tb1p>NtyC$z=102qNxlRo?kbjOHFy76vl@W{6Q+#Dwij|q55plH z#yz(5)#E9&vn2qz81+35@sLMa!Khl{g3hx@1i_`xo2SQul1%{;mvmM`c6S?*IKISo zS=EG#TL~E9U?664y^k{oHNP=+eF|rb2o`tcI1pl+b3>t9ge!Qr(xbL&zGwpluosg9ABd|hLN=g>nDLKxX_mDk4!X*J=1P3 zP*oD9YiaLGx1TlAG2+mua^MFzn_|kvLkC&JU>jo;VwsSmU4fcI%6KBjtuoLW^BByS z(BeOBMI(do*;1zK{9qXTZR>c!t7=!Hd6KBs6eMw>a+NOxn1faqRlk2Gdu05Q)fC2f z7xK~n!VDgByAH>JuSiV}yfFMk!&aE*0Oe@WOdCd5CjuJ#z9Zx{PrU;4VAN!R-Ukia zeAU3OS$@y9zE~(6YdA6GlWcjeF)20@Kzz}$(b>K?VpP2t8f$9gEjyXEbdBecIzq39 zMA#X&sSLR!mwg~Ge@>K)R&|sr8%|ri4kZ+DL%ivNXrB@-aQk9NoisH4i}>1#XJe>{ zFaJfILOH)a>xj$?^&DmW3&L}+#RbH%up*NbHagYIV4KQF`Fptbuo)MoCH?q5w?BEo zqKlz&{)!%VEmv~4qztrUe?=1mg{UNVNv}rQ=s7_3p%lnxYCUNZCo$*|Mn6afy8q+G zX_%?RpJT(bd`fx{DhzQ3#aCD6gL22P?YL4YK;fVr%$Q2)Ko}*hKns?UPVl9nju~fh zrde6%mw*9Pw*^R``=L&SQ$Ci!ox0PjkxI@50aNYGbGBw`uUQ|1p&>wx75j{M0oy!Y ztdhJSqfJLeA3j>HWpkJ6TY}RK)<#k`y3sbXWvbkb z6wG|iSDO|8Yr;fPUVWo}K0~ES11($Vm>zz+1b)s)@?%=coqrKMI^@i0F-=$kE~QeHxM@=b_M)f|Oppm0 zRNYH%OqaY2i{lBLV>B*ch%=J+!@B3 z3Unjzu2w56(AeF7!F>cirUrA4-zOLHpIVC^_yIP9>_O<~3Jno8{VpPk=#;SpH zwg$^z;|;za$g50m`ri5hvthL`I`WyyWhXq~iMejDTZYu*|k zrBOwm*Xycz&T3hO?(|Yl(JoZg*T0PU-*|;XIHx=dyfh5&6P1bisk~&1$YRL(M4UA5${wJYHRYM>RqQi&B%}3sEB<~C zh69fHFFh&Q9e6N%GxN^}>wnUa;@8lL6A2OifIs{)Ytk|?@olW0-`mLoN4AsN3a+h2 zc#F-52siB0nos+hMUUEXGV6IVQ)8#8iP1}Hej1Bva&2&@Yt8;X2WOveE)d+SclI!Lv zXko0uZStn;DhFs|qjJZ;7QF2rI{LlB`WW~1b-(k6dAx2)4$@zuofY;|a+9-2Rjl(P z8!k;Z!2F;rz(UEXBAlh^!qigV{7yrt%mMdM*=uL^l*2&<2VDed^<6)np6Z&UoVb4z zcR3aNrzw6?@oN`$qRJkejXB*enIzbem|lJDTr`o|(y3c2LZPnZ!o|FFrras#KCwGz z4n)d3#hsH5vR&!R71FCZB^Yj9@T|s{y+&z&Mez}g>b0V0zkci=HFH$U6;Nt9)5Ol# zqSpIdFZ;PoPS-&2MMlrQltRht4{sA)dah5gEHf!_@>#z&<>+`xgu{20)I#eMxz9L~ z8sx)!HHezbEIC)y1wC<3@w8d44PK`F{7st8wvcgLJx=!CNGM$U&}<-_2RJo?HEUnA zlvYrmlGHuHi}rH@F%v7o);HeNev>}+gOz*fLO@To8h1`pgk-Y34Bi-P@zd)H)VZ|D zO{#uB#AZ{Y4GEkC9HNVo&uM9lEJP^8KllB@f3V4{AVMMTd4N;;e#7%NL2TS-ugSi@ zUqj_kS$_5zZ~hCQvE}NE_c0v$=kI*Ti$C)1MKFh5((NN+1{Ccv%0wh&2UNZg&{`c@ zC@P5Q4@>{_5u3q@mz8!xQuy85bM9%H?fQzO$wcB(joB{sO4&AD8c{5d?bG|TB8}2i zxO?d}jK2tVd8MEI{!Bv+XQYTbwISI))8Hpfurqbm!|#E@V|Q|?lh*guIc5}U3HFvL z(=Ss!F88_0EncKQ0D}qH1bz>cw{M7S6#Odm+IZ0|D43pIqcP7bgeT8(UQx52?cs+& z$;>)y+S<9(i9;73eBu^gvR!{$d3cHEo!r!8=RlURyk|*HR|#_BxUnUIIx-_-PjW6& znw7a$y?7>mA0xw7^=;8iXRbt)G@h?C-Jzc zcaA$V*+@jvB~RenAl&f&d`dwvyGG?qM0a~4%PK)you69KBz~DFv&*&0mKB^!7KUF4 z-wSyLPQ{e+QD3{+6tddom3Ka}kH^VnG(wzBhyPc@Z4%oC38rLIp_s6kH2tt^n4Jq#CVNbM3U|3cM>-Gk9X~v6V4??K1oa$FQT1UX~d;-s=IWJ zL5Ie>OqiGMolqn_Ltwkcx}5HQ=fG>J-zScaJ))*9FDGT!ZjA~tv=?knK7H}a_l!1jpzxJi6-jL>iy9FBa+$lh7Z)G`mtp^Q8JN=CHEW`l*O@73Br`$(rjT zx7p{v9xHIZ_?3jw<<&jKiMqA!^+3OnyNQx9-YyhQkG0c9jI0!KQ}OW4NE%Z22_JJZ z9PRtB<)f{RN2 z3OTvOfv0fZCp`+Wf2zLEY^WuaW#U%%Sd|om^1F2tLBlES(@)O`ORJw&pT_aC1s>7ZrJ~j0ck!DYLJ2~ljSs0_1 z+7CsERwH476K7Wm3tL-c{kgM@o*(Fc%J4MonflU#s#%z>1lc;%FZCA5inef3$EcPc z`@U3jA-FHjGA_N*vMmcqH}q#8W;*s5BRsVs{EA{`=zT}A;QN75gqIGpd@;FV^ZxNe zo7NR3W+4gBg2Fm$XRD{`CxaYgRO~CORyhd1Vt#=|&Ae9jOA30{)-m^Ou30AH*5}f; zj*nRi<>_v0TuIEsFMaR5n(frjI~b1rF+8aBs8`TvLtaCRO*-xLWt>`G@BaVGK;@}X=SQwIfQf2nzuf?^BzOd8p zr0}owJZhpYsv)EvYw9?UeQW5gtaCLtwdB{U`&R6lZ10pbsgeI`;nc49F}r-*^;h!D z&)L}9{H_agKj-cYPyiLRwJAZ*$ROcV+Ow;rb_LIcFLHW6(s?mZyh1A9OZiS~)VpLl-`uX$lg_a*Ujh=CCmXVSBr zYC`26aZVA~Sr>}I)i*B;GI4TAc{#gsr2P{DAFYb^>c~pk@KK3(b~(#t3XK!AdwI14qH@AYzzYFX(5`Ej&&Rm}0F z>k3z}FkucW_EtCHeBLM%5MB97uvsd#e=OeGf!ihf+PD7D;8OZ-j$@&Ug0kxt<5u?H znM)XoC|UZ8Wn<@Gtv9}iy}``D1*=ieI7AnEi9;@&)ryqc&Y}GqyPUUopocVX^7J^q!HIfVIgnbXlKGWdEl{lK31iWktx9lw0t*3ID zk3Bx7DV-$(^j7Z5McD{=DQc90% z-E(`1X~ZHr7bJ$pRitQ5Sa_>vva4K16-g_J!;-v@**ZV2#d%w2s!M(_OSgTbQ3ls9 zIm-029(xLZ+k2R!!L$p>$W_J^Gfye*doJmEiaPfDaNQ_y{Y{qSkB}TI8q>Z`&rln5 z)#b*UrZ1Mwi;)+9*?0-yze(o(7EJiG$uoub(wEbeL1!ec)T^(nICHnKI$}pi7WMBZ zD4+MNHXbEjZ)LGxo*p&rvump(9XxYk+y^^M%PF*v0} z{&Y~hH~gw&X1&%EMyxXI;rv)P-tvX7)xnMvUzB`TUhRv&REd4O?I_dvOB6kK1I{X# zoGlG~{4R6cG-sOS+hRv1v)$0qj;l|HIB4%&re|RIk$z!ZlBq*k{>-Yy<9es_G|g92 z@~nVYyHTG?OVl|~>h^l|?g&qg_lGgf3~%%0#}n2^eT9D_iWlbi0xC^+f;^Jf~tdpuEl z;>CX3{CbQtO-&6?!V!)aMn#9eYDdOq2rhiLJXsL&{$|=Vdy3^uZs`>TnYC1WjhUC< z@4h!%KRe^5>SkU1TrY#Sohd8Z7Q3_hlFEZ<$`b(xl;@7h+?h`gcVAv0_KbZIK8On( zJ0Ro~vn-u#p+1a{z9fs#kFx#XhX&2VOaKS(@oXlmR-}KtB-O&m z{)Cy6^{qoLIOx({HinL)0dftsjAc9yqz{B|kZ2S)f7DBvNyr?G6(fFf;s_hBGV?S` zMOT{J{i!G}k2k(wdbvCB*tm20F1#)Orq@`d^qOB^a3<^9y?9{~Id!9CEx$Ul^g)|e zUdFo`O;Y`@irY(`GW+<>M#?@7juoh5h|cqPPErx1>GXnG^DMsainx-S)4_t;2cMpN zJg(5;B^6RU{-Nh9;Tg#fmApKs6g0#iG*1aW7301}E&cpxZ`5<8&UNewR@JWODpMpE z?sMi$V3c`g%~WNc)p6-M*|W$T7Nj|&OV(pA!hE!3pcbApp~-l*L@T0GcEp*Wu|DHw zQqGkLSdG7wiIM4(eb_&g&Z_ugu*f8qbD8o=J)e_(dr{9gJBF+o<4jb_;;e7NJLTd# z-Mo%c%%m%r$2mro&ZwQOQIvF^b=Hu%|ML}(-dci9*J3IE`?F#_Qxu)Uu!*oUj}rR% z#^YI9hI#s;Zum3S^I|zyPzDY!$bF;IQuU`fU~(R&zr;$|H1D2&O4{rRPa_zIc zr?qrWC}?~h%eeKBQHLWp^C8bNtJ$Rh(6XPM+82rExx<xMq`^{0rg#~zjv;W6T6lRMvX^tr?_XUlxH#?+;U<6m782nifbQYYJv zhMu|^3A?{|LbSY~j#;L>l1iB6FkJ4woqf}D&cWd-ZZoy)eA(m$3G(jT19;Y<6bza# zZDmcu?`ze&&Ybvevlib#rwHSkO2A^h!$9J4HbYiML)%2|NYohd+spBy#CSl@TkyWH zn^EqaXF@I=wWfG=KfpAT$4!!|h%=n$^%;F;DRS?(Mvhs=r+ctJ9+AZpk%ZYDe*KbD z#?7|wInI}4`&H2>zKP3p{zsXp*e_`ibg+5Iv1V2H7noiD=I)Xx8IK*lPw+y=HNDgG zJWAIUuH474Il?jKoNjL}|K@dcz_F;)O`3VIWj!y^#72%`_w+Y~bjEtj^=fACm2{d9 zt0pipow>B8SARrxq9>k!W6URAOR6H#ieR#jiq#=fPLpi<)wEks;rwcIg*lz&tv0EG zk|}Cm(|uR?jD@vIjt{-Y7;rk9TX%};#~{OjfqKa-LfT5#FW(%_cSl^x+3$Nf?Ah_j z!|k*d%u_$>=bIM9zP6^HSLOOFiDOX9_Di|xWJj(w+hY}b;1HaSq;u+8YlC;3GKwva ziA@H4QKCJ6|21t#B73RYE26d)yD_Y{CI|1f-!X0NXcTmYH`0+nmv6+)<1BY&cI-p%)FxHN&Upno+#kp`_8vx zBX?X>j!jx@2K?SZ zm}^3w%nOFItk-Q0=XUE)MVqL7w3C11x-9t?U4}0FaK5}>2@puda2^N zmE04=E)7IZD;N4xj61nYiNOcuAI;MX=kis-03Og zR2ns=Mqz5_a=bZ+Pm+$}GT4(oyN@X;GT9!})CiB3R;X~3kTA)+YnGkiNi1HBuZQ4f z+BfRscZqx7_50&rMLa%VxnnxyzB+L?r7&6+WA&2Xy(Gn+6dpNSQfZfyd4>7O{?+u! zS3)`rrHEgVGe4)MI>{R_kjYGUd_kXu;98jHI8Op^>W$9SUncg>*oS}g5Z0xR5;+v_ z^W%Cp-$9^vf;U?DUFO=2Iv2{s$q3s!ZDZ1F@RwnQbQXM5uezj+OzCI4Y!(Twy)zvGP>xrro zZu1Y5SU$B>b>)U|Cb1~5sxJ7qT$XzAXncWv5WkMtV7_RQNJPNhja7;eLudM~s_vo0 z*BR73u7@y0K4Rwz6Ur+buOt=_=xLfJaH%1Xzpu$Cwc@U#s9EI4aV%^06v18W&+o>X zXZ9s1)i4S_%G<+{AKTRZ!FB~%VJ5{Nz zb^nd_LPW(Io-yq#9GqmC~#PHD~_Z)tkA83oz3u9?6=0HB3`juje^&sLkFCr$qKaz`%07rWc(>O@|m4MFVTr zy~hl<`I;|@-CA+Jt`>5Gp1Y9UUpzIs^)->#`h~A!u~s7eZDE~7zFM4o9ETYs=vbzf zBsGbz1(UgE=l827FMRcnXIlLtGhPy+TDkn$wSX}_@d8^ygPBX?{_TXJ5?nt(U@Cf7g*j>M>bFt7Vd_5ijo2D*H;f zEu1W@+hPVgFLRZw)z`%$#W~xFCX&W8yYupl(!znneTz)rwF)jgYm&BTaw=sx@B8XT z6)lO0S+-);=%@y@S;2AjQ1>+Eu=wr^BA@lh9%Lv;Mrm}`Dy7I%G|8JQI&8tZaUF=)U=Nl8Dz)U@I|eebm@r?55GVw%Ia3j&`GYbUsV;>l$T z6kNT^#lx|3z`?4X%}n}Z%R3{J`b1^SuE*{DB2@%YMIYb?UQ&jhadGdD(|_VKY1MjH ztoe0{?0cOvq*@3sp|EI$MPtS@wtQj6203<_@pXzU2aaE%rBQP@yGH63IZD28t50ur z)h3|e8n&u~Mx+^m$1y`PY+ga_4E(t4?+eWuvcc@sBBC5=xmYv?!YV%xPT1#9_+pNT zY3ZuxH-#n@Gg^ByGmZ^=XVDNiHI~TNxqqJxP!RVR&>|Ct!hP`OF}W~g1ds(r)h@Vnj=C%QgH^A zcr`~J-E1C(A>Mb21aWxg{@9Ou)gotYap0o8^nF!qlX6)1Czt2lk4`Rfd=zjS`1yo+ zcJV3$N$mX?HJLD-$9%K)^tCZ>tu$h9tv?RH%Tj;TbhYSKhEZp4&x?133QbH$BGjh1 zMFS>IWSoY^QulvS#F^_?hnB&8vAf z)%h!`VU^IuE|5yCzGrKkFu`zYD%M&chLYjV^}z99~|F24mKU5Czk74$Vwb zaYsmchM2-=-`u-Q(L`)~G%mp4aNd21M`kfEf{ZiB!@OS5H}7Vtj|?vdGLQSHIj4r5W|23^6lcSS0?$I9Ihs#8MZ_GH27`l5#TmId;WQ z*~nb}0dFzFvJuBaLphpq_s^eFlMJvpCo(J{NMDlpIKGsjY~}u{;q#MMGGl#BwR@PJ z2r%sbLV~rRa{HuVU>FyvMzQTWrpDo#+ID)G{AJ2p$K}pD36TxjRiviD@7q zKdsY}OB)kjo>8Jtvs#*G!NmX3Cw%0ER|2P4DUDX6=qGX_mfGcPM!W|BZj88hJ)SqP zx5dd%>#354#5I@E4%6y$+gwz+=M!Gz#wb%LBwkg5nRmiybA(GhKkt{6iIE^SIBb#|OgA(x_mu7RTye_LzVbN{u3cU1_*r$=^lPul^1Y?v^vJM`L@9&T=U;5O+U7aKM`ot_D|Cle zKS$oVtu^)Zri7FxLB^8`XO~BW;c4M^#TUHfFJqN?-kcIV zEa72pD)uXm{Jl9x%*jr+3N=bMlToFQdPV!>X^4--ldZc(g@)}*O_N(#WjAgSZ0q)wo9`GgE4g<7UuyELIvG=9A%3{B-VDcag;LyxSYC^W z@Q}h%?|W1~t~B#42TRIfUy!%G7_hjXB83Jv_+9CwMw{osAfc+9Iy)>11M??vf5p+- zt|^y_`3~2?FIrc8L(-p`8y~*eYryZ%&i;PFLJpBjb>17scw{`knD_ErX5!lcezO9x zx+R0eJ8xLTl^IrI1Afg}{hBd6sEs3@#V>Ht=d@EcpYM;ESibf0wPs3*{3WBXMTA_w zCC`u5tHRd8!dc%_&fUSxp}2?1#Vc%mpFm2)11nOQUy+=+=3oxNBe&ZTQtuZQ@c7Bb z1bhkB=dzq#HCpDK`f{*id2c;WTy>6mAr}q#uCNb zW3*f;C)r(Y@eO2Oms#)8co=STi>-s|#l4?-aSy+J%UpVm>lu7Tpy)Jlk@Y^7b45Qy z@PLhtL!G~VSb0~}YhMChY(&W%n^CTkXxDEmIrHiE`W(gWwQ8AO+@Y1l3LC!C^}6KS zs+gA}Zv-p3E7+1&-wD$;yCci5*^v94+?(iL_VMv5*sb*!ue57|Dpr1B2z^ow+Suc1 zYiDDiWAV>!&;L$O1qb)Ho4Hq12T&RW%HehEq2P-Q(oRWhB@t-tY?AS{L zvohC%vDn#InVW0h)UnyvS^qD+6fj8l46x1rzoKL~D@w`i2w>MX2P-F_W1zp}Z*;t^ zuVklTn(Eo<>%v(K4Ghe+?TihyL7UdTX#&`~rM8om{lASF(n$mKH2qh`3`}CMWda6# z0u;;2%0bBi2;#3g?3zIUn&yJR+1M!Af!X|5oAP&QG*AXj z_g~x-r16FGztcIv4opu_iwFceGaDyxln^C52jcIPxXXCtbu;vwF5?lmx3n{``Iq598e2Fay%PUHyBZr{ZW~hzPznOU z%*w_Jbf2p4d+Yo@ROgI8O6I}NFMCZy(>EDX#I{;E?A4oRDUZsGri))CxrR4Xn5 zXyal7nx81ySULVGpzbn@uNvzBdEw5p7!JvS03rWZ1_PKdN_jvJIh>sXaCQhzuK#2f zgM-`Lb9%$b#*$s1MIRWOk%6{@?Z$L9ur#tW{+G!Lha^IPU-?f*3Wsx}^81ZY0`^g} z1E07N2q35cPWi92hioKfwzL8qkhzTskN{iR7_m5*7~Hh8vNq9Uwl=orH{@kQoU`MF zv%@+5r9B=FNqc~l>^~hL@;m^*3V%;TAhYKJLMG564*O4ZxsxyAX4lcx<6<#4v9;5- zG6eEG19NjdD+5DA6FrlS?s;wCJ(sY5(<>zH;r#EUJ#b(;f=(C)-$-z|SlNMN5CBp9 z_r36cG;&CS#05!^cI#H;fO7)wixRc?b&Q_UobvCx=)e9^?g|TQF^z~DhM@bjEL`RK zc-`~}*1<@E>#&bE&zaQa(KHd;J39Jcb5#y;I=Ty8 zuv?j%=)c`xL~<|IzvAc0B0jru9tEQ+v10c z@-V3fyCo5|z85`2-sBZjYC<#rl4vlH+0WDBYy&Ngd+nP_p+lkhIh^K0LJvZpFw~m9 zx2GtupmMCMaW7;Yo1wtg>lwuppcM6&6HIl(5yd9E&Ml}G^(*Y zr47t;D){l?9zu-*;+@A9!s;4t`cV}UB6JHaNsa1Xmie{o%st3n4Wws~@%OJP>@FNG zqc{=$iQ<{a_{0qPi{s?cEIg*C&V(G=2OBD!$E*{)WoLTYb=~=78_A)-wgV5pth7)T zR^gFWt>T=)PUgxMs_*o&s`eW32yhR4M&_uYSSm$dWp3Cp$DaG?n&e>`OP0^Hi}R?oF7t@|uHW)J!0Ibo3dKLfUa8<;YB3#(z> zFr7Z}_VJ}fmKFI%Hle*fsD; zwoM#g-zd`l#>qjNwAsl<6CoL9p@ZL&UWb)3wiZUKlTb@Dl=Uo{G+dZJ(|WMH-22@L z3x8@?UfGagkG?CJ2djpXdGE7*0x0lvYq^yT##g^=A*`lJjOdPT{oukZdF~j_Ut;t5567z=&&pbemxl zY&lKOza}SKqB_6sR=&<~RnQ)`pD=?nCxvHP{4$klp18=o5H<`%eVrnzUx5}+1 zDqVUwq3px-%jNb7qI)6-gaYO+)0|&ZQNizatW1F&KXbiCzBn)4$NSz5rv+>A{DOLEhfum=YF>P2(|&I}wDv>OmRa+&*~q!-h- zRJV zeCP#(__*)1f1CF+=DPLj0u9;N!_J0e%PI?(ncIh(PI%B;YWLi+!p%$K`YcEoau`3m zLJc>iyhcO+uDt6yZlCoiKJHkaw9H+GSZ

    S5e;K@`b*N^Lu%h4F>m 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

    m5e))p`h4{KUP5`R|9aj7Wm0@V^Oz2Wx^*?7xSC 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%0D6Q8H3r;j;EI2a$Iymq>%8l4dxk#N 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 literal 0 HcmV?d00001 diff --git a/乌龟服魔兽世界 (Turtle WoW) 深度理论研究与属性收益终极报告.pdf b/乌龟服魔兽世界 (Turtle WoW) 深度理论研究与属性收益终极报告.pdf new file mode 100644 index 0000000000000000000000000000000000000000..eab7597d3f0e93732c66143f6e999f1815481597 GIT binary patch literal 320965 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

    ) z*~`^b+^~In4=*pixp8qX?Yp6feqQQX8lq$Iv-s`b-n;op*<)mL;XOY`RU=&zH$ljW zbz_&9rP2e0HZy?`_su8*+h(I1gfUr@(df@FmOCw!B{$b9XO(VonOqDc?9*PKpY;cT zKETPXK6y<=qLk*PEwYOPRz*<}GoH;%3Y{+KCFDdf;P*$ZdW%sW3Wn0RsxZgQg*w(^ zgzRZF3G+*sR}4CY{MF9@&*e%* H87_|q@u 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

      P3U59U|;DmTGcy4wvWiCq8J#gwv-kg2xTJ*(b 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