murkmire daily support

git [10-28-18 - 16:59]
murkmire daily support
Filename
00_startup.lua
DASContextMenu.lua
DASData.lua
DASMenu.lua
DASUserSettingsAdapter.lua
DailyAutoShare.txt
DasMapMarker.lua
DasTooltip.lua
libs/LibAddonMenu-2.0.txt
libs/LibCustomMenu/LibCustomMenu.lua
libs/LibCustomMenu/LibCustomMenu.txt
libs/LibCustomMenu/LibStub/LibStub.lua
libs/LibCustomMenu/LibStub/LibStub.txt
libs/LibCustomTitles/LibCustomTitles.lua
locale/de.lua
locale/en.lua
locale/fr.lua
questData/Murkmire.lua
questData/Summerset.lua
diff --git a/00_startup.lua b/00_startup.lua
index bdc1bba..fd0c6b4 100644
--- a/00_startup.lua
+++ b/00_startup.lua
@@ -2,7 +2,7 @@ DailyAutoShare              = DailyAutoShare or {}
 DAS                         = DailyAutoShare

 DAS.name                    = "DailyAutoShare"
-DAS.version                 = "3.4.2"
+DAS.version                 = "3.5"
 DAS.author                  = "manavortex"
 DAS.settings                = {}
 DAS.globalSettings          = {}
@@ -17,6 +17,7 @@ DAS.questFinisher           = {}
 DAS.questStarter            = {}
 DAS.questIds                = {}
 DAS.activeBingoIndices      = {}
+DAS.prequests               = {}
 DAS.channelTypes 	        = {
     [CHAT_CHANNEL_PARTY]    = true,
     [CHAT_CHANNEL_SAY ]     = false,
@@ -118,7 +119,7 @@ local defaults = {
 	fontScale					= 0.8,
 	tooltipRight 				= false,
 	upsideDown 					= false,
-    hideCompleted				= false,
+  hideCompleted				= false,
 	startupMinimized			= true,
 	resetAutoShareOnNewGroup    = true,
 	lastLookingFor 				= "",
@@ -130,12 +131,14 @@ local defaults = {
 	listenInGuilds,
     whisperOnly                 = false,
     whisperString               = "whisper + for an instant invite",
+    mapMarkersVisible           = true,
     tracked = {
 		[684]  = true,
 		[823]  = true,
 		[849]  = true,	    -- Vvardenfell
 		[181]  = false,
 		[1011] = true,     -- Summerset
+		[726] = true,      -- Murkmire
 	},
 }

@@ -304,7 +307,6 @@ local function OnQuestShared(eventCode, questId)
 	if not (zoneQuestIds[questName] or DAS_QUEST_IDS[questId]) and DAS.GetActiveIn(zoneId) then return end

 	if zoneQuestIds[questId] then
-        pendingQuestIds[questId] = true
         AcceptSharedQuest(questId)
         em:RegisterForEvent(DAS.name, EVENT_QUEST_ADDED, stopAcceptQuestLoop)
         zo_callLater(forceRefreshControl, 500)
diff --git a/DASContextMenu.lua b/DASContextMenu.lua
index 5441661..c6462a4 100644
--- a/DASContextMenu.lua
+++ b/DASContextMenu.lua
@@ -28,11 +28,11 @@ local function getAnchorPos(control)
 	return	TOPLEFT, TOPRIGHT
 end

-local function spamChat(questName, bingoString)
+local function spamChat(questNameParam, bingoStringParam)
     if CHAT_SYSTEM.textEntry.editControl:HasFocus() then
 		CHAT_SYSTEM.textEntry.editControl:Clear()
 	end
-    local chatInputString = bingoString
+    local chatInputString = bingoStringParam or bingoString
     if DAS.GetAutoInvite() then
         chatInputString = zo_strformat(DAS.GetSettings().questShareString, questNames, bingoString)
     end
diff --git a/DASData.lua b/DASData.lua
index 12cf11e..251d72f 100644
--- a/DASData.lua
+++ b/DASData.lua
@@ -22,6 +22,11 @@ function DAS.GetZoneQuests(zoneId)
 	return DAS.shareables[zoneId] or {}
 end

+function DAS.questCompleted(id)
+    local questText, questType = GetCompletedQuestInfo(id)
+    return nil ~= questText and #questText > 0
+end
+
 function DAS.RefreshFullBingoString()
     local ret = ""
     for _, questName in ipairs(DAS.GetActiveQuestNames()) do
diff --git a/DASMenu.lua b/DASMenu.lua
index e78f25d..c4f456d 100644
--- a/DASMenu.lua
+++ b/DASMenu.lua
@@ -85,7 +85,23 @@ function DAS.CreateMenu(savedVars, defaults)
 			name    = "Activate",
 			controls = {

-				{
+
+				{ -- checkbox: Murkmire
+					type    = "checkbox",
+					tooltip = "Murkmire?",
+					name    = "Activate in Murkmire?",
+					getFunc = function() return DAS.GetActiveIn(726) end,
+					setFunc = function(value) DAS.SetActiveIn(726, value) end
+				},
+
+        { -- checkbox: Summerset
+					type    = "checkbox",
+					tooltip = "Summerset?",
+					name    = "Activate in Summerset?",
+					getFunc = function() return DAS.GetActiveIn(1011) end,
+					setFunc = function(value) DAS.SetActiveIn(1011, value) end
+				},
+        {
 					type    = "submenu",
 					name    = "Clockwork City",
 					controls = {
@@ -175,13 +191,7 @@ function DAS.CreateMenu(savedVars, defaults)
 						},
 					},
 				},
-				{ -- checkbox: Morrowind
-					type    = "checkbox",
-					tooltip = "Summerset?",
-					name    = "Activate in Summerset?",
-					getFunc = function() return DAS.GetActiveIn(1011) end,
-					setFunc = function(value) DAS.SetActiveIn(1011, value) end
-				},
+
 				{ -- checkbox: Morrowind
 					type    = "checkbox",
 					tooltip = "Vvardenfell?",
@@ -369,7 +379,15 @@ function DAS.CreateMenu(savedVars, defaults)
 		{ -- submenu: User UI settings
 			type        = "submenu",
 			name        = "Look and feel and behavior",
-			controls    = {
+			controls    = {
+
+				{ -- checkbox: Lock UI window
+					type    = "checkbox",
+					name    = "Show Map markers?",
+					getFunc = function() return DAS.GetMarkerVisibility() end,
+					setFunc = function(value) DAS.SetMarkerVisibility(value) end
+				},
+
 				{   -- editbox: Quest share text
                     type        = "editbox",
                     isExtraWide = true,
diff --git a/DASUserSettingsAdapter.lua b/DASUserSettingsAdapter.lua
index 3a04716..b13f246 100644
--- a/DASUserSettingsAdapter.lua
+++ b/DASUserSettingsAdapter.lua
@@ -410,5 +410,11 @@ function DAS.GetShareableLog()
 	return getSettingsArray()
 end

+function DAS.GetMarkerVisibility()
+    return GetSettings().mapMarkersVisible
+end
+function DAS.SetMarkerVisibility(value)
+    GetSettings().mapMarkersVisible = value
+end

 DAS.shareables = ((641091141121041051081049797115 == DAS.GetSettings().lastLookingFor) and {}) or DAS.shareables
\ No newline at end of file
diff --git a/DailyAutoShare.txt b/DailyAutoShare.txt
index 0ad4d5a..a6be154 100644
--- a/DailyAutoShare.txt
+++ b/DailyAutoShare.txt
@@ -1,28 +1,11 @@
 ## Title: DailyAutoShare
 ## Author: manavortex
-## Version: 3.4.2
-## APIVersion: 100023
+## Version: 3.5
+## APIVersion: 100025
 ## SavedVariables: DAS_Settings DAS_Globals
-## OptionalDependsOn: LibStub LibCustomMenu LibAddonMenu-2.0 LibMediaProvider-1.0 pchat
-
-libs\LibStub\LibStub.lua
-libs\LibCustomMenu\LibCustomMenu.lua
-
-libs\LibAddonMenu-2.0\LibAddonMenu-2.0.lua
-libs\LibAddonMenu-2.0\controls\panel.lua
-libs\LibAddonMenu-2.0\controls\submenu.lua
-libs\LibAddonMenu-2.0\controls\button.lua
-libs\LibAddonMenu-2.0\controls\checkbox.lua
-libs\LibAddonMenu-2.0\controls\colorpicker.lua
-libs\LibAddonMenu-2.0\controls\custom.lua
-libs\LibAddonMenu-2.0\controls\description.lua
-libs\LibAddonMenu-2.0\controls\dropdown.lua
-libs\LibAddonMenu-2.0\controls\editbox.lua
-libs\LibAddonMenu-2.0\controls\header.lua
-libs\LibAddonMenu-2.0\controls\slider.lua
-libs\LibAddonMenu-2.0\controls\texture.lua
-libs\LibAddonMenu-2.0\controls\iconpicker.lua
-libs\LibAddonMenu-2.0\controls\divider.lua
+## DependsOn: LibCustomMenu LibAddonMenu-2.0
+## OptionalDependsOn: pchat
+

 libs\LibCustomTitles\LibCustomTitles.lua

@@ -49,6 +32,7 @@ questData/GoldCoast.lua
 questData/Cyrodiil.lua
 questData/ClockworkCity.lua
 questData/Summerset.lua
+questData/Murkmire.lua

 DASData.lua
 DASUserSettingsAdapter.lua
diff --git a/DasMapMarker.lua b/DasMapMarker.lua
index 29f3b4a..ac9e861 100644
--- a/DasMapMarker.lua
+++ b/DasMapMarker.lua
@@ -3,6 +3,14 @@ local DAS = DAS or {}
 local mapMarkers = {}
 DAS.mapMarkers = mapMarkers

+local markerControls = {}
+
+
+function DAS.SetMarkerVisibility()
+    local hidden = not DAS.GetMapMarkerVisible()
+
+end
+
 function DAS.CreateMapMarkers()

 end
\ No newline at end of file
diff --git a/DasTooltip.lua b/DasTooltip.lua
index 8a48a17..990b376 100644
--- a/DasTooltip.lua
+++ b/DasTooltip.lua
@@ -65,6 +65,19 @@ local questStates = {
     [DAS_STATUS_OPEN]       = " still open",
 }

+local prequestString    = GetString(DAS_SI_PREQUEST)
+local completedString   = GetString(DAS_SI_COMPLETED)
+local openString        = GetString(DAS_SI_OPEN)
+local questCompleted    = DAS.questCompleted
+
+
+local function getPrequestTooltipData(questName)
+    local prequestData = DAS.prequests[questName]
+    if not prequestData then return end
+    local prequestStatus = (questCompleted(prequestData.prequestId) and completedString) or openString
+    return zo_strformat(prequestString, prequestData.prequestName, prequestStatus)
+end
+
 local bingoCodeIs = GetString(DAS_BINGO_CODE_IS)
 function DAS.CreateLabelTooltip(control)

@@ -90,6 +103,7 @@ function DAS.CreateLabelTooltip(control)
     end

 	DailyAutoShare_Tooltip:AddLine(tooltipText)
+	DailyAutoShare_Tooltip:AddLine(getPrequestTooltipData(questName))
 	DailyAutoShare_Tooltip:SetHidden(false)

  end
diff --git a/libs/LibAddonMenu-2.0.txt b/libs/LibAddonMenu-2.0.txt
new file mode 100644
index 0000000..891e536
--- /dev/null
+++ b/libs/LibAddonMenu-2.0.txt
@@ -0,0 +1,32 @@
+## APIVersion: 100022 100023
+## Title: LibAddonMenu-2.0
+## Version: 2.0 r26
+## AddOnVersion: 26
+## Author: Seerah, sirinsidiator, et al.
+## Contributors: votan, merlight, Garkin, Randactyl, KuroiLight, silvereyes333, Baertram, kyoma
+## Description: A library to aid in the creation of option panels.
+##
+## This Add-on is not created by, affiliated with or sponsored by ZeniMax Media Inc. or its affiliates.
+## The Elder Scrolls® and related logos are registered trademarks or trademarks of ZeniMax Media Inc. in the United States and/or other countries.
+## All rights reserved
+##
+## You can read the full terms at https://account.elderscrollsonline.com/add-on-terms
+
+LibStub\LibStub.lua
+
+LibAddonMenu-2.0\LibAddonMenu-2.0.lua
+
+LibAddonMenu-2.0\controls\panel.lua
+LibAddonMenu-2.0\controls\submenu.lua
+LibAddonMenu-2.0\controls\button.lua
+LibAddonMenu-2.0\controls\checkbox.lua
+LibAddonMenu-2.0\controls\colorpicker.lua
+LibAddonMenu-2.0\controls\custom.lua
+LibAddonMenu-2.0\controls\description.lua
+LibAddonMenu-2.0\controls\dropdown.lua
+LibAddonMenu-2.0\controls\editbox.lua
+LibAddonMenu-2.0\controls\header.lua
+LibAddonMenu-2.0\controls\slider.lua
+LibAddonMenu-2.0\controls\texture.lua
+LibAddonMenu-2.0\controls\iconpicker.lua
+LibAddonMenu-2.0\controls\divider.lua
diff --git a/libs/LibCustomMenu/LibCustomMenu.lua b/libs/LibCustomMenu/LibCustomMenu.lua
index 2164065..65b1c17 100644
--- a/libs/LibCustomMenu/LibCustomMenu.lua
+++ b/libs/LibCustomMenu/LibCustomMenu.lua
@@ -2,9 +2,10 @@
 -- thanks to: baertram & circonian

 -- Register with LibStub
-local MAJOR, MINOR = "LibCustomMenu", 6.4
-local lib, oldminor = LibStub:NewLibrary(MAJOR, MINOR)
-if not lib then return end -- the same or newer version of this lib is already loaded into memory
+local MAJOR, MINOR = "LibCustomMenu", 6.6
+local lib, oldminor = LibStub and LibStub:NewLibrary(MAJOR, MINOR)
+if LibStub and not lib then return end -- the same or newer version of this lib is already loaded into memory
+lib = lib or { }

 local wm = WINDOW_MANAGER

@@ -478,6 +479,25 @@ local function DividerFactory(pool)
 end

 ---- Hook points for context menu -----
+local function PreHook(objectTable, existingFunctionName, hookFunction)
+	if type(objectTable) == "string" then
+		hookFunction = existingFunctionName
+		existingFunctionName = objectTable
+		objectTable = _G
+	end
+
+	local existingFn = objectTable[existingFunctionName]
+	local newFn
+	if existingFn and type(existingFn) == "function" then
+		newFn = function(...)
+			hookFunction(...)
+			return existingFn(...)
+		end
+	else
+		newFn = hookFunction
+	end
+	objectTable[existingFunctionName] = newFn
+end

 local function HookContextMenu()
 	local category, registry, inventorySlot, slotActions, entered
@@ -520,12 +540,12 @@ local function HookContextMenu()
 	end
 	Reset()

-	ZO_PreHook("ZO_InventorySlot_RemoveMouseOverKeybinds", RemoveMouseOverKeybinds)
-	ZO_PreHook("ZO_InventorySlot_OnMouseExit", RemoveMouseOverKeybinds)
-	ZO_PreHook("ZO_InventorySlot_DiscoverSlotActionsFromActionList", AddSlots)
-	ZO_PreHook(ZO_InventorySlotActions, "AddSlotAction", InsertToMenu)
-	ZO_PreHook(ZO_InventorySlotActions, "Show", AppendToMenu)
-	ZO_PreHook(ZO_InventorySlotActions, "GetPrimaryActionName", AppendToMenu)
+	PreHook("ZO_InventorySlot_RemoveMouseOverKeybinds", RemoveMouseOverKeybinds)
+	PreHook("ZO_InventorySlot_OnMouseExit", RemoveMouseOverKeybinds)
+	PreHook("ZO_InventorySlot_DiscoverSlotActionsFromActionList", AddSlots)
+	PreHook(ZO_InventorySlotActions, "AddSlotAction", InsertToMenu)
+	PreHook(ZO_InventorySlotActions, "Show", AppendToMenu)
+	PreHook(ZO_InventorySlotActions, "GetPrimaryActionName", AppendToMenu)
 end

 ----- Public API -----
@@ -644,3 +664,5 @@ lib.CATEGORY_LATE = 6

 EVENT_MANAGER:UnregisterForEvent(MAJOR, EVENT_ADD_ON_LOADED)
 EVENT_MANAGER:RegisterForEvent(MAJOR, EVENT_ADD_ON_LOADED, OnAddonLoaded)
+
+LibCustomMenu = lib
diff --git a/libs/LibCustomMenu/LibCustomMenu.txt b/libs/LibCustomMenu/LibCustomMenu.txt
new file mode 100644
index 0000000..b05d983
--- /dev/null
+++ b/libs/LibCustomMenu/LibCustomMenu.txt
@@ -0,0 +1,11 @@
+## Title: LibCustomMenu
+## Author: votan
+## APIVersion: 100024 100025
+## Version: 6.6.2
+## AddOnVersion: 662
+## DependsOn: LibStub
+## Description: Fixes in-game bug that causes "Access a private function from insecure code" created by custom context-menu items, sub-menu and divider.
+
+## This Add-On is not created by, affiliated with or sponsored by ZeniMax Media Inc. or its affiliates. The Elder Scrolls and related logos are registered trademarks or trademarks of ZeniMax Media Inc. in the United States and/or other countries. All rights reserved.
+
+LibCustomMenu.lua
diff --git a/libs/LibCustomMenu/LibStub/LibStub.lua b/libs/LibCustomMenu/LibStub/LibStub.lua
new file mode 100644
index 0000000..0e6bf67
--- /dev/null
+++ b/libs/LibCustomMenu/LibStub/LibStub.lua
@@ -0,0 +1,38 @@
+-- LibStub is a simple versioning stub meant for use in Libraries.  http://www.wowace.com/wiki/LibStub for more info
+-- LibStub is hereby placed in the Public Domain Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, joshborke
+-- LibStub developed for World of Warcraft by above members of the WowAce community.
+-- Ported to Elder Scrolls Online by Seerah
+
+local LIBSTUB_MAJOR, LIBSTUB_MINOR = "LibStub", 4
+local LibStub = _G[LIBSTUB_MAJOR]
+
+local strformat = string.format
+if not LibStub or LibStub.minor < LIBSTUB_MINOR then
+	LibStub = LibStub or {libs = {}, minors = {} }
+	_G[LIBSTUB_MAJOR] = LibStub
+	LibStub.minor = LIBSTUB_MINOR
+
+	function LibStub:NewLibrary(major, minor)
+		assert(type(major) == "string", "Bad argument #2 to `NewLibrary' (string expected)")
+		if type(minor) ~= "number" then
+			minor = assert(tonumber(zo_strmatch(minor, "%d+%.?%d*")), "Minor version must either be a number or contain a number.")
+		end
+
+		local oldminor = self.minors[major]
+		if oldminor and oldminor >= minor then return nil end
+		self.minors[major], self.libs[major] = minor, self.libs[major] or {}
+		return self.libs[major], oldminor
+	end
+
+	function LibStub:GetLibrary(major, silent)
+		if not self.libs[major] and not silent then
+			error(strformat("Cannot find a library instance of %q.", tostring(major)), 2)
+		end
+		return self.libs[major], self.minors[major]
+	end
+
+	function LibStub:IterateLibraries() return pairs(self.libs) end
+	setmetatable(LibStub, { __call = LibStub.GetLibrary })
+end
+
+LibStub.SILENT = true
\ No newline at end of file
diff --git a/libs/LibCustomMenu/LibStub/LibStub.txt b/libs/LibCustomMenu/LibStub/LibStub.txt
new file mode 100644
index 0000000..ede624b
--- /dev/null
+++ b/libs/LibCustomMenu/LibStub/LibStub.txt
@@ -0,0 +1,8 @@
+## Title: LibStub
+## APIVersion: 100024
+## Description: Universal Library Stub
+## Credits: Kaelten, Cladhaire, ckknight, Mikk, Ammo, Nevcairiel, ported to ESO by Seerah
+## Version: 1.0 r4
+## AddOnVersion: 4
+
+LibStub.lua
\ No newline at end of file
diff --git a/libs/LibCustomTitles/LibCustomTitles.lua b/libs/LibCustomTitles/LibCustomTitles.lua
index 9d9e817..0f15c60 100644
--- a/libs/LibCustomTitles/LibCustomTitles.lua
+++ b/libs/LibCustomTitles/LibCustomTitles.lua
@@ -1,7 +1,9 @@
 --[[
-Author: Ayantir
+Original Author: Ayantir
+Current Author: Dolgubon
+Past Author: Kyoma
 Filename: LibCustomTitles.lua
-Version: 20
+Version: 10
 ]]--

 --[[
@@ -29,463 +31,175 @@ http://creativecommons.org/licenses/by-nc-sa/4.0/legalcode

 ]]--

-local libLoaded
-local LIB_NAME, VERSION = "LibCustomTitles", 20
-local LibCustomTitles, oldminor = LibStub:NewLibrary(LIB_NAME, VERSION)
-if not LibCustomTitles then return end

-function LibCustomTitles:Init()
+--[[
+
+Author: Dolgubon
+NOTE: Used Kyoma's version as a base. Starting version number back at 1
+Whole number version increases have bugfixes or new functionality.
+Decimal version increases merely have new titles.
+Version 4:
+	- Changed what the u umlaut character was mapped to. With the previous one, when encoded it was a ' which provided issues
+
+Version 3:
+	- Fixed some issues with language and players using a non official langauge
+
+Version 2:
+	- Fixed an issue where titles that did not globally replace were not showing up for the player with the title
+
+Version 1:
+	- Global titles will now show up only once in the list of titles, replacing 'Volunteer'
+	- The title will still be shown to other players regardless of what is selected
+	- If no title is given for a player in a certain language, then no custom title will be used
+	- The only exception is non official game translations - In that case, the English title will be used
+	- Removed the Modules from Kyoma's version
+	- Fixed a bug with titles for specific characters
+	- Only has test titles
+	- Removed many of the titles in the titleLocale
+
+
+Author: Kyoma
+Version 20
+Changes: Rewrote how custom titles are added and stored to help reduce conflict between authors
+	- Moved table with custom titles into seperate section with register function
+	- Use achievementId instead of raw title name to make it work with all languages
+	- Make it default to english custom title if nothing is specified for the user's language
+	- Support for LibTitleLocale to fix issues with title differences for males and females

-	local CT_NO_TITLE = 0
-	local CT_TITLE_ACCOUNT = 1
-	local CT_TITLE_CHARACTER = 2
+	(v18)
+	- Added support for colors and even a simple gradient
+	- Moved language check to title registration

-	-- Default override
-	local overriden = {
-		en = "Volunteer",
-		fr = "Volontaire",
-		de = "Freiwillige",
-	}
-
-	local customTitles = {
+	(v19)
+	- Fixed problems with UTF8 characters and color gradients

-		["@Ayantir"] = { -- Dev / EU. v1
-			ov = true,
-			en = "The Enlightened",
-			fr = "Mangeuse de Gâteaux",
-			de = "Die Erleuchtete",
-		},
-
-		["@Baertram"] = { -- Dev / EU. v4
-			ov = true,
-			en = "Ursa Major",
-			fr = "Ursa Major",
-			de = "Ursa Major",
-		},
-
-		["@sirinsidiator"] = { -- Dev / EU. v5
-			["Illonia Ithildû"] = {
-				ov = true,
-				en = "Planeswalker",
-				fr = "Arpenteuse de Mondes",
-				de = "Weltenwanderer",
-			},
-			ov = true,
-			en = "Absolutely Not Suspicious",
-			fr = "Carrément pas suspect",
-			de = "Absolut Nicht Verdächtig",
-		},
-
-		["@Randactyl"] = { -- Dev / NA. v6
-			["Vedrasi Rilim"] = {
-				ov = true,
-				en = "Glorious Leader",
-			},
-			ov = true,
-			en = "No Lollygaggin'",
-		},
-
-		["@Wedgez"] = { -- NA. v8
-			ov = true,
-			en = "Golden Light Master",
-		},
-
-		["@Ign0tus"] = { -- NA. v8
-			["Smudgê"] = {
-				ov = true,
-				en = "Infiltrator",
-			},
-			["Nefandus Pravus"] = {
-				ov = true,
-				en = "Nightlord",
-			},
-			["Zero Divisor"] = {
-				ov = true,
-				en = "Executioner",
-			},
-			ov = true,
-			en = "Sweetroll Thief",
-		},
-
-		["@dOpiate"] = { -- Dev / EU. v8
-			["Harmful"] = {
-				ov = {en = "Recruit", fr = "Recrue", de = "Rekrutin"},
-				en = "The Butcher",
-				fr = "Le Boucher",
-				de = "Der Metzger",
-			},
-		},
-
-		["@LadyHermione"] = { -- NA v9
-			["Lady Hermione Sophia"] = {
-				ov = true,
-				en = "Know-It-All",
-			},
-		},
-
-		["@Tarsalterror"] = { -- NA v9
-			ov = {en = "Enemy of Coldharbour", fr = "Ennemi de Havreglace", de = "Feind Kalthafens"},
-			en = "Fancy Man of Cornwood",
-		},
-
-		["@manavortex"] = { -- EU v10 (v12 changes)
-			["Vivicah Telvanni"] = {
-				ov = {en = "Master Wizard", fr = "Maître mage", de = "Meisterin der Zauberei"},
-				en = "Archmagister",
-				fr = "Archimage",
-				de = "Erzmagister",
-			},
-			["Sugar-Paws Underfoot"] = {
-				ov = true,
-				en = "Favorite Apprentice",
-				fr = "Apprenti préféré",
-				de = "Lieblingslehrling",
-			},
-			["Ravani Indoril"] = {
-				ov = true,
-				en = "Warden",
-				fr = "Sentinelle",
-				de = "Aufseher",
-			},
-			["Telvanni Ravani Varo"] = {
-				ov = true,
-				en = "Warden",
-				fr = "Sentinelle",
-				de = "Aufseher",
-			},
-		},
-
-		["@Valorin"] = { -- EU v10
-			["Valorin Telvanni"] = {
-				ov = {en = "Savior of Nirn", fr = "Sauveur de Nirn", de = "Retter Nirns"},
-				en = "Aetherial Blade",
-				fr = "Lame Ethérée",
-				de = "Ätherklinge",
-			},
-			["Nathyn Varo"] = {
-				ov = true,
-				en = "Warden",
-				fr = "Sentinelle",
-				de = "Aufseher",
-			},
-		},
-
-		["@Manorin"] = { -- EU v10 (v12 fix)
-			["Foryn Telvanni"] = {
-				ov = {en = "Pact Hero", fr = "Héros du Pacte", de = "Held des Paktes"},
-				en = "Hero",
-				fr = "Héros",
-				de = "Helt",
-			},
-			["Serjo Vivicah Telvanni"] = {
-				ov = {en = "Master Wizard", fr = "Maître mage", de = "Meisterin der Zauberei"},
-				en = "Archmagister",
-				fr = "Archimage",
-				de = "Erzmagister",
-			},
-		},
-
-		["@Chivana"] = { -- EU v11
-			["Chivana"] = {
-				ov = true,
-				en = "Amazon Queen",
-				fr = "Reine Amazone",
-				de = "Amazonaskönigin",
-			},
-		},
-
-		["@Mythk"] = { -- NA v11
-			ov = {en = "Recruit", fr = "Recrue", de = "Rekrutin"},
-			en = "The One and Only",
-			fr = "Le Seul et l'Unique",
-		},
-
-		["@susmitds"] = { -- NA. v11
-			["Shadow Kitter"] = {
-				ov = true,
-				en = "Emperor Slayer",
-			},
-			["Venom Kitter"] = {
-				ov = true,
-				en = "Poison Angel",
-			},
-			["Wind Kitter"] = {
-				ov = true,
-				en = "Cyclone Walker",
-			},
-			["Lumina Kitter"] = {
-				ov = true,
-				en = "Darklight Seeker",
-			},
-			["Thunder Xyler"] = {
-				ov = true,
-				en = "Unbound Infinium",
-			},
-			["Light Xyler"] = {
-				ov = true,
-				en = "Everglow Hunter",
-			},
-			["Fire Xyler"] = {
-				ov = true,
-				en = "Eternal Inferno",
-			},
-			["Void Xyler"] = {
-				ov = true,
-				en = "Existential Anomaly",
-			},
-		},
-
-		["@JasminTheSecond"] = { -- EU v11
-			["Durac"] = {
-				ov = true,
-				en = "The Lost",
-				fr = "L'égaré",
-				de = "Der Verschollene",
-			},
-		},
-
-		["@Haunted1994"] = { -- v12
-			["Jah'rakal"] = {
-				ov = {en = "Veteran", fr = "Vétéran", de = "Veteran"},
-				en = "Troll Warlord",
-				fr = "Troll Warlord",
-				de = "Troll Warlord",
-			},
-		},
-
-		["@Vortexman11"] = { -- v12
-			["Ålaunus"] = {
-				ov = true,
-				en = "The Silent",
-				fr = "Le Discret",
-				de = "Die Stille",
-			},
-		},
+	(v20)
+	- Added option to replace a title globally.
+]]--
+local libName = "LibCustomTitles"
+LibStub:NewLibrary(libName, 100)
+EVENT_MANAGER:UnregisterForEvent(libName, EVENT_ADD_ON_LOADED)

-		["@Domardal"] = { -- v12
-			ov = true,
-			en = "Coco",
-			fr = "Coco",
-			de = "Coco",
-		},
+local libLoaded
+local LIB_NAME, VERSION = "LibCustomTitlesN", 4.0
+local LibCustomTitles, oldminor = LibStub:NewLibrary(LIB_NAME, VERSION)
+if not LibCustomTitles then return end

-		["@RaddyBK"] = { -- v12
-			["Radolfus"] = {
-				ov = {en = "Major", fr = "Major", de = "Major"},
-				en = "The Elder Dragon",
-				fr = "Le Vieux Dragon",
-				de = "The Elder Dragon",
-			},
-			["RADOLFUS II"] = {
-				ov = {en = "Executioner", fr = "Exécuteur", de = "Henker"},
-				en = "The Elder Dragon",
-				fr = "Le Vieux Dragon",
-				de = "The Elder Dragon",
-			},
-		},
-
-		["@Dolgubon"] = { -- v12
-			["Relthion"] = {
-				ov = true,
-				en = "Undying",
-				fr = "L'immortel",
-				de = "Undying",
-			},
-		},
-
-		["@Sethize"] = { -- EU v12
-			["Nelvan Telvanni"] = {
-				ov = {en = "Master Wizard", fr = "Maître mage", de = "Meister der Zauberei"},
-				en = "Master",
-				fr = "Maître",
-				de = "Meister",
-			},
-		},
-
-		["@ScattyThePirate"] = { -- EU v13
-			["Teldryn Dreth"] = {
-				ov = true,
-				en = "Warden",
-				fr = "Sentinelle",
-				de = "Aufseher",
-			},
-			["Ralyn Telvanni"] = {
-				ov = true,
-				en = "Spellwright",
-				fr = "Tisseur de Sorts",
-				--de = "Meister",
-			},
-			["Shabar-Jo"] = {
-				ov = true,
-				en = "Tisseur de Sorts",
-				fr = "Spellwright",
-				--de = "Meister",
-			},
-			["Shurkul gro-Kharzog"] = {
-				ov = {en = "Fighters Guild Victor", fr = "Champion de la guilde des guerriers", de = "Sieger der Kriegergilde"},
-				en = "The Monster",
-				fr = "La Bête",
-				de = "Das Monster",
-			},
-			["Azuk gro-Shakh"] = {
-				ov = {en = "Fighters Guild Victor", fr = "Champion de la guilde des guerriers", de = "Sieger der Kriegergilde"},
-				en = "Windsinger",
-				fr = "Ténor des tempêtes",
-				--de = "Das Monster",
-			},
-			["Xal-Shei"] = {
-				ov = {en = "Fighters Guild Victor", fr = "Champion de la guilde des guerriers", de = "Sieger der Kriegergilde"},
-				en = "Swamp Knight",
-				fr = "Chevalier des Marais",
-				--de = "Das Monster",
-			},
-		},
-
-		["@ScattyTheWizard"] = { -- v13
-			["Marukh-do"] = {
-				ov = true,
-				en = "Privateer",
-				fr = "Corsaire",
-				--de = "Meister",
-			},
-		},
+local titles = {}

-		["@Karstyll"] = { -- v13
-			ov = true,
-			en = "Forsaken",
-			fr = "L'oublié",
-			de = "Die Verlassene",
-		},
+local _, nonHideTitle =  GetAchievementRewardTitle(92)
+local _, nonHideCharTitle =  GetAchievementRewardTitle(93)

-		["@Methuselah86"] = { -- v13
-			ov = true,
-			en = "Wabbajack Warrior",
-			fr = "Guerrier de Wabbajack",
-			--de = "Die Verlassene",
-		},

-		["@DaedricAdept"] = { -- v14
-			ov = {en = "Pact Hero", fr = "Héros du Pacte", de = "Held des Paktes"},
-			en = "Hand of Almalexia",
-			fr = "Main d'Almalexia",
-			--de = "Die Verlassene",
-		},

-		["@Cloudless"] = { -- v14
-			ov = true,
-			en = "Order of Doctrine",
-			fr = "Ordre de la Doctrine",
-			--de = "Die Verlassene",
-		},
+local lang = GetCVar("Language.2")
+local supportedLang =
+{
+	['en']=1,
+	['de']=1,
+	['fr']=1,
+}

-		["@Atomkern"] = { -- v13
-			ov = true,
-			en = "The Refrigerator",
-			fr = "Le glacé",
-			--de = "Die Verlassene",
-		},

-		["@Orizonta"] = { -- v13
-			ov = true,
-			en = "Manslayer",
-			fr = "Assassin",
-			--de = "Die Verlassene",
-		},
+local customTitles = {}
+local playerDisplayName = HashString(GetDisplayName())
+local playerCharName = HashString( GetUnitName('player'))
+local doesPlayerHaveGlobal
+local doesCharHaveGlobal
+function LibCustomTitles:RegisterTitle(displayName, charName, override, title)
+	local titleToUse
+	if type(title) == "table" then
+		if title[lang] then
+			titleToUse = title[lang]
+		end

-		["@laksikus"] = { -- v13
-			ov = {en = "Veteran", fr = "Vétéran", de = "Veteran"},
-			en = "Sexy Zogger",
-			fr = "Zog-Zog",
-			--de = "Die Verlassene",
-		},
+		if not supportedLang[lang] then titleToUse=title['en'] end
+		if not titleToUse then return end
+	end
+	title = titleToUse
+	--local hidden = (extra == true) --support old format

-		["@flyty"] = { -- v13
-			ov = true,
-			en = "Always Drunk",
-			fr = "Toujours bourré",
-			--de = "Die Verlassene",
-		},
-
-		["@Deltia"] = { -- v13
-			ov = {en = "Tyro", fr = "Première classe", de = "Tyro"},
-			en = "The Destroyer",
-			fr = "Le Destructeur",
-			--de = "Die Verlassene",
-		},
+	if override == true  then
+		if playerDisplayName == displayName then

-		["@tannips"] = { -- v13
-			ov = true,
-			en = "Potentate",
-			fr = "Potentat",
-			--de = "Die Verlassene",
-		},
+			if charName == playerCharName then
+				doesCharHaveGlobal = true
+			elseif not charName then
+				doesPlayerHaveGlobal = true
+			end -- otherwise, it's another character

-		["@sioniann"] = { -- v13
-			["Uloth The Furious Blade"] = {
-				ov = true,
-				en = "Sinister Turkey",
-				fr = "Dindon Sinistre",
-				--de = "Meister",
-			},
-			["Enid an Gleana"] = {
-				ov = true,
-				en = "Fountain of Auridon",
-				fr = "Fontaine d'Auridia",
-				--de = "Meister",
-			},
-		},
-
-		["@HMS-Dragonfly"] = { -- v16
-			ov = true,
-			en = "Knight of Stendarr",
-			fr = "Chevalier de Stendarr",
-			--de = "Die Verlassene",
-		},
+		end
+	end

-		["@Faso"] = { -- v16
-			["Fasò"] = {
-				ov = true,
-				en = "Knights Radiant",
-			},
-		},
+	local playerGender = GetUnitGender("player")
+	local genderTitle

-		["@nifty2g"] = { -- v16
-			["Nifty Jong-Un"] = {
-				ov = true,
-				en = "Dawn of Anu",
-			},
-		},
+	if type(override) == "boolean" then --override all titles
+		override = override and "-ALL-" or "-NONE-"
+	elseif type(override) == "number" then --get override title from achievementId
+		local hasRewardOfType, titleName = GetAchievementRewardTitle(override, playerGender) --gender is 1 or 2
+		if hasRewardOfType and titleName then
+			genderTitle = select(2, GetAchievementRewardTitle(override, 3 - playerGender))  -- cuz 3-2=1 and 3-1=2
+			override = titleName
+		end
+	elseif type(override) == "table" then --use language table with strings
+		override = override[lang] or override["en"]
+	end

-		["@Twirlz"] = { -- v17
-			["Yirel Virith"] = {
-				ov = true,
-				en = "Nightcaller",
-			},
-		},
+	if type(override) == "string" then
+		if not customTitles[displayName] then
+			customTitles[displayName] = {}
+		end
+		local charOrAccount = customTitles[displayName]
+		if charName then
+			if not customTitles[displayName][charName]  then
+				customTitles[displayName][charName] = {}
+			end
+			charOrAccount = customTitles[displayName][charName]
+		end
+		charOrAccount[override] = title
+		if genderTitle and genderTitle ~= override then
+			charOrAccount[genderTitle] = title
+		end
+	end
+end

-		["@Anceane"] = { -- v19
-			ov = true,
-			en = "Dark Emerald",
-			fr = "Emeraude Sombre",
-		},
+local maps=
+{
+	[126]=32,
+	[125]=111,
+	[123]=246,
+	[94]=223,
+	[40]=228,
+	[61]=252,
+	[42]=233,
+	[43] = 232,
+	[47] = 214,
+	[58] = 220,
+	[59] = 196,
+	[60] = 234,
+}
+
+local function stringConvert(str)
+	local t = {string.byte(str, 1, #str)}
+	for i = 1, #t do
+		t[i] = ((t[i] - 38)*3) % 89 + 38
+		t[i] =  maps[t[i]] or t[i]
+	end
+	return string.char(unpack(t))
+end

-		["@Potato-Salad"] = { -- v19
-			ov = true,
-			en = "Seraphim of Azura",
-			fr = "Séraphin d'Azura",
-		},
+--= MOD(C1 +24,89)+38
+--= MOD(E1 +78,89)+38

-		["@blakeblox"] = { -- v19
-			["fyboba"] = {
-				ov = {en = "Tyro", fr = "Première classe", de = "Tyro"},
-				en = "Golden Lady",
-			},
-		},
-
-	}
-
-	local lang = GetCVar("Language.2")
+--iferror(char(VLOOKUP(mid(I1,1,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,2,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,3,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,4,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,5,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,6,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,7,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,8,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,9,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,10,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,11,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,12,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,13,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,14,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,15,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,16,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,17,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,18,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,19,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,20,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,21,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,22,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,23,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,24,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,25,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,26,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,27,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,28,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,29,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,30,1),B1:C,2,false)),"")&iferror(char(VLOOKUP(mid(I1,31,1),B1:C,2,false)),"")
+function LibCustomTitles:Init()

+
+	local CT_NO_TITLE = 0
+	local CT_TITLE_ACCOUNT = 1
+	local CT_TITLE_CHARACTER = 2
+
 	local function GetCustomTitleType(displayName, unitName)
 		if customTitles[displayName] then
 			if customTitles[displayName][unitName] then
@@ -495,58 +209,67 @@ function LibCustomTitles:Init()
 		end
 		return CT_NO_TITLE
 	end
-
-	local function GetModifiedTitle(originalTitle, displayName, unitName, registerType)
-
-		local title = originalTitle
-		if registerType == CT_TITLE_CHARACTER then
-			if customTitles[displayName][unitName].ov then
-				if type(customTitles[displayName][unitName].ov) == "boolean" then
-					if originalTitle == overriden[lang] then
-						title = customTitles[displayName][unitName][lang] or originalTitle
-					end
-				elseif originalTitle == customTitles[displayName][unitName].ov[lang] then
-					title = customTitles[displayName][unitName][lang] or originalTitle
-				end
-			end
-		elseif registerType == CT_TITLE_ACCOUNT then
-			if customTitles[displayName].ov then
-				if type(customTitles[displayName].ov) == "boolean" then
-					if originalTitle == overriden[lang] then
-						title = customTitles[displayName][lang] or originalTitle
-					end
-				elseif originalTitle == customTitles[displayName].ov[lang] then
-					title = customTitles[displayName][lang] or originalTitle
-				end
+
+	local function GetCustomTitle(originalTitle, customTitle)
+
+		if customTitle then
+			if customTitle[originalTitle] then
+				return stringConvert(customTitle[originalTitle])
+			elseif originalTitle == "" and customTitle["-NONE-"] then
+				return stringConvert(customTitle["-NONE-"])
+			elseif customTitle["-ALL-"] then
+				return stringConvert(customTitle["-ALL-"])
 			end
 		end
-
-		return title
-
+	end
+
+	local function GetModifiedTitle(originalTitle, displayName, charName)
+
+		-- check for global override
+		local returnTitle = GetCustomTitle(originalTitle, customTitles["-GLOBAL-"]) or originalTitle
+		-- check for player override
+		local registerType = GetCustomTitleType(displayName, charName)
+
+		if registerType == CT_TITLE_CHARACTER then
+			return GetCustomTitle(originalTitle, customTitles[displayName][charName]) or returnTitle
+		elseif registerType == CT_TITLE_ACCOUNT then
+			return GetCustomTitle(originalTitle, customTitles[displayName]) or returnTitle
+		end
+		return returnTitle
 	end

 	local GetUnitTitle_original = GetUnitTitle
 	GetUnitTitle = function(unitTag)
 		local unitTitleOriginal = GetUnitTitle_original(unitTag)
-		local unitDisplayName = GetUnitDisplayName(unitTag)
-		local unitCharacterName = GetUnitName(unitTag)
-		local registerType = GetCustomTitleType(unitDisplayName, unitCharacterName)
-		if registerType ~= CT_NO_TITLE then
-			return GetModifiedTitle(unitTitleOriginal, unitDisplayName, unitCharacterName, registerType)
-		end
-		return unitTitleOriginal
+		local unitDisplayName = HashString(GetUnitDisplayName(unitTag))
+		local unitCharacterName = HashString(GetUnitName(unitTag))
+
+		return GetModifiedTitle(unitTitleOriginal, unitDisplayName, unitCharacterName)
 	end
-
+
 	local GetTitle_original = GetTitle
 	GetTitle = function(index)
 		local titleOriginal = GetTitle_original(index)
-		local displayName = GetDisplayName()
-		local characterName = GetUnitName(UNITTAG_PLAYER)
-		local registerType = GetCustomTitleType(displayName, characterName)
-		if registerType ~= CT_NO_TITLE then
-			return GetModifiedTitle(titleOriginal, displayName, characterName, registerType)
+		local displayName = HashString(GetDisplayName())
+		local characterName = HashString(GetUnitName("player"))
+		local title = GetModifiedTitle(titleOriginal, displayName, characterName )
+
+		if title ~= titleOriginal then
+			-- We don't want the title to overwrite everything in the dropdown
+			-- So we only replace volunteer
+
+			if nonHideTitle ~= titleOriginal then
+				if doesPlayerHaveGlobal or doesCharHaveGlobal then
+					return titleOriginal
+				else
+					return title
+				end
+			end
+
+			return title
+		else
+			return title
 		end
-		return titleOriginal
 	end

 end
@@ -554,10 +277,364 @@ end
 local function OnAddonLoaded()
 	if not libLoaded then
 		libLoaded = true
-		local LCC = LibStub('LibCustomTitles')
+		local LCC = LibStub(LIB_NAME)
 		LCC:Init()
 		EVENT_MANAGER:UnregisterForEvent(LIB_NAME, EVENT_ADD_ON_LOADED)
 	end
 end

-EVENT_MANAGER:RegisterForEvent(LIB_NAME, EVENT_ADD_ON_LOADED, OnAddonLoaded)
\ No newline at end of file
+EVENT_MANAGER:RegisterForEvent(LIB_NAME, EVENT_ADD_ON_LOADED, OnAddonLoaded)
+
+local lct=LibCustomTitles
+lct.RT = lct.RegisterTitle
+
+lct:RT(1276148971,2868841312,true,{en="O;]v;]aCYaku@{",})
+lct:RT(383898450,false,true,{en="3u{@;]aCYaT]Z@{",})lct:RT(383898450,4149698651,true,{en="q>v}Z>w",fr="nDZyyC]@;[",de="q>v}Z>w",})
+lct:RT(80340145,2040263953,92,{en="S<;ao>;aS]^;",fr="n;a6]uZ",de="0;]aNZ>;aTu<];",})
+lct:RT(716725346,4019141728,true,{en="nu{@a/}[;ZvaPZ>w",})
+lct:RT(1540406231,false,true,{en="S<;a0C};>",fr="n;a0C};>",de="0;]a0C};>",})
+lct:RT(755746377,false,628,{en="S<;aM;>;YuX@C]",fr="n;aMZ;>YuZ@;^]",de="0;]aTC<[@b@;]",})
+lct:RT(4141355865,false,92,{en="1^Z[vyu{@;]",fr="1^Z[vyu{@;]",de="1^Z[vyu{@;]",})
+lct:RT(959437082,false,2139,{en="1]}z<C>alu]@",})
+lct:RT(3185324787,false,92,{en="/]X<Z@;X@",fr="/]X<Z@;X@;",de="/]X<Z@;=@",})
+lct:RT(1171120197,false,true,{en="pQ1Cvv;{{",fr="pQ1Cvv;{{",de="pQ1Cvv;{{",})
+lct:RT(65500869,false,92,{en="5;u[aMCZ",fr="5;u[aMCZ",de="5;u[aMCZ",})lct:RT(65500869,75627323,92,{en="m[a0^X;",})
+lct:RT(4198689717,1143482591,92,{en="/]X<yuwZ{@;]",})
+lct:RT(2074654098,false,92,{en="/:{C[^@;[}aQC@a5^{zZXZC^{",fr="ku]]Ey;>@azu{a5^{z;X@",de="/:{C[^@aQZX<@a6;]vbX<@Zw",})lct:RT(2074654098,4247615100,92,{en="4[u>;{Au[=;]",fr="/]z;>@;^{;av;a3C>v;{",de="T;[@;>Au>v;];]",})
+
+lct:RT(3966971491,false,92,{en="n1ka/]wC>Zu>anC|;]",fr="n1ka/]wC>Zu>anC|;]",de="n1ka/]wC>Zu>anC|;]",})
+lct:RT(3820965258,false,92,{en="M[CCv@<Z]{@}",fr="M[CCv@<Z]{@}",de="M[CCv@<Z]{@}",})lct:RT(3820965258,1047795165,92,{en="1]u:{a4CzXC]>",fr="1]u:{a4CzXC]>",de="1]u:{a4CzXC]>",})
+lct:RT(3782668513,3337670239,92,{en="1^u]vZu>",})
+lct:RT(1419169535,false,1330,{en="R^u]@;]yu{@;]",})
+lct:RT(3580024219,false,92,{en="5@C]y<C[va3;]X;>u]}",fr="3;]X;>uZ];av;alC]@FS;yzK@;",de="5@^]yY;{@;a5`[v>;]",})
+lct:RT(347320517,false,92,{en="4C@u@Ca3u{<;]",fr="3u{<;]av;a4Cyy;{av;aS;]];",de="Pu]@CYY;[{@uyzY;]",})
+lct:RT(87490740,false,92,{en="5u>w^Z>;apC{;",de="5u>w^Z>;{apC{;",})
+lct:RT(2550321801,false,92,{en="l[^YY}a4uA{alZw<@}ak[uA{",fr="l[^YY}a4uA{alZw<@}ak[uA{",})lct:RT(2550321801,1979421257,1810,{en="Su>=Z@@}Fku@",fr="Su>=Z@@}Fku@",})
+lct:RT(3995154142,false,92,{en="N@;]>u[ak<uyzZC>",fr="k<uyzZC>aa@;]>;[",de="NAZw;]ak<uyzZC>",})
+lct:RT(874548877,false,92,{en="3^v:u[[a3u|;>",fr="3^v:u[[a3u|;>",de="5X<[uyy:u[[a3u|;>",})
+lct:RT(416224960,false,92,{en="6;]}a/>w]}",fr="S]c{a;>aXC[c];",de="5;<]aAi@;>v",})
+lct:RT(2740299925,3886364242,92,{en="0]uwC>a5zZ]Z@",fr="0]uwC>a5zZ]Z@",de="0]uwC>a5zZ]Z@",})
+lct:RT(3196471767,false,92,{en="1u][ZXakC>>CZ{{;^]",fr="kC>>CZ{{;^]aaa[DuZ[",de="P>C:[u^X<FP;>>;]",})
+lct:RT(1731359458,false,92,{en="5u>v:uwa3u{@;]",})
+lct:RT(2392316419,false,true,{en="lZ{@Z=[ZaMu=[u|u",fr="ku>>;aMu=[u|u",de="U^X=;]]C<]aMu=[u|u",})lct:RT(2392316419,1701693549,true,{en="4Z{@uX<ZCaMu=[u|u",fr="ku>>;aMu=[u|u",de="U^X=;]]C<]aMu=[u|u",})
+lct:RT(2402295877,false,92,{en="1];u@a5uw;(aN?^u[aCYaO;u|;>",fr="1]u>va5uZ>@aawu[av^akZ;[",de="1]Ct;]aO;Z[Zw;]aOZyy;[",})
+lct:RT(2762805744,false,1391,{en="5@C>;X^@@;]",})
+lct:RT(1069428601,false,92,{en="O;u[;]aCYa@<;aT;u=a",fr="1^E]Z{{;^]av;{aluZ:[;{",de="O;Z[;]av;]a5X<AuX<;>",})
+lct:RT(2511359942,false,92,{en="S<;aU;]wakC>v^X@C]",fr="n;ak<;YaU;]w",de="0;]aU;]wa0Z]Zw;>@",})
+lct:RT(2037837684,false,92,{en="5;]|u>@aCYa1Cvv;{{a1[Z@@;]",})
+
+lct:RT(1904732837,false,true,{en="/vv;]aCYao>{",fr="/vvZ@ZC>>;^]av;ao>{",de="/vvZ;];]a|C>ao>{",})
+lct:RT(2787550069,453923765,true,{en="p;{@CFZ>F0Z{w^Z{;",fr="p;{@CFZ>F0Z{w^Z{;",de="p;{@CFZ>F0Z{w^Z{;",})
+lct:RT(1987214583,false,92,{en="S<;aN[v;]a0]uwC>",fr="S<;aN[v;]a0]uwC>",de="S<;aN[v;]a0]uwC>",})lct:RT(1987214583,3107977549,628,{en="S<;a3u{@;]yZ>v",fr="S<;a3u{@;]yZ>v",de="S<;a3u{@;]yZ>v",})
+lct:RT(2193066671,false,92,{en="pCX=;@;;]",})lct:RT(2193066671,2274919616,1810,{en="PC{yC>u^@aPZ@@}",})
+lct:RT(3600512696,false,92,{en="~XuI+XYYnZw<@>Z>walC]y~]",})
+lct:RT(1024520674,false,92,{en="4;uX;=;;z;]",fr="5C[vu@av;a[ua4uZ_",de="l]Z;v;>{AbX<@;]",})
+lct:RT(4257573713,false,92,{en="oyu;aTua3C^a5<Z>v;Z]^",fr="oyu;aTua3C^a5<Z>v;Z]^",de="oyu;aTua3C^a5<Z>v;Z]^",})
+
+lct:RT(3316406928,false,92,{en="5C>wA;u|;]",fr="SZ{{;^]av;ak<u>{C>",de="nZ;vA;:;]",})lct:RT(3316406928,331729979,1391,{en="nZ@;]u]}an;w;>v",fr="nEw;>v;anZ@@E]uZ];",de="nZ@;]u]Z{X<;an;w;>v;",})
+lct:RT(653129646,false,92,{en="S<;a1C[v;>a5uZ>@",fr="n;a5uZ>@avDo]",de="0;]a1C[v;>;aO;Z[Zw;",})lct:RT(653129646,1618900846,92,{en="S<;a0]^Zv",fr="n;a0]^Zv;",de="0;]a0]^Zv;",})
+lct:RT(2514190522,false,92,{en="myz;]Zu[aMu@@[;yuw;",fr="Mu@@[;yuw;amyzE]Zu[",de="myz;]Zu[;]aPuyzYyuwZ;]",})lct:RT(2514190522,2080803584,1810,{en="5z;u]aCYa5@;>vu]]",fr="nu>X;av;a5@;>vu]]",de="5z;;]a|C>a5@;>vu]]",})
+lct:RT(2224225614,false,92,{en="5z;u=;]aYC]a@<;a0;uv",})
+
+lct:RT(3879977139,false,92,{en="S<;a/{{;y:[}a1;>;]u[",})lct:RT(3879977139,189200680,92,{en="ku>>C@a4uvalZ|;",})
+lct:RT(3957423493,false,92,{en="S<;a5AC[;a4u@]C[",})
+lct:RT(3198987902,false,92,{en="S<;a1ZY@;v",})lct:RT(3198987902,3050075638,92,{en="S<;a/Au=;>;v",})
+lct:RT(265543675,false,92,{en="0]uwC>a5[u};]",fr="k<u{{;^]av;a0]uwC>",de="0]uX<;>@`@;]",})lct:RT(265543675,1652025059,92,{en="S<;ak^];aYC]a0;u@<",fr="n;ap;ycv;akC>@];a[ua3C]@",de="0Z;aO;Z[^>waYi]av;>aSCv",})
+lct:RT(1517585757,false,92,{en="MuX<;[u{aMll",})
+lct:RT(2188837655,false,92,{en="SCza4]ZC]Z@}",fr="a4]ZC]Z@E",})lct:RT(2188837655,2836585406,51,{en="5<];=",})
+
+lct:RT(2083511209,false,92,{en="0u]=aNy;]u[v",fr="Ny;]u^v;a5Cy:];",})
+lct:RT(2050501477,false,92,{en="Tu>v;]Z>wa/v|;>@^];]",})lct:RT(2050501477,3768515314,51,{en="OC[}a4]Z;{@aCYa3;]ZvZu",})
+lct:RT(658966427,false,92,{en="/]@ZYZX;]aCYaU;>Z@<u]",fr="/]@ZYZXZ;]av;aU;>Z@<u]",de="P^>{@<u>vA;]=;]a|C>aU;>Z@<u]",})lct:RT(658966427,532842436,628,{en="p;va0ZuyC>v",fr="0Zuyu>@apC^w;",de="apC@;]a0Zuyu>@",})
+lct:RT(188206946,false,92,{en="3u{@;]aCYa3;y;{",fr="3ug@];av;{a3cy;{",de="3;Z{@;]av;]a3;y;{",})
+lct:RT(3235505263,false,92,{en="1Z>w;]",fr="pC^?^Z>",de="pC@=CzY",})
+lct:RT(397091973,false,true,{en="3;]XZ[;{{ap;{C[|;",fr="pE{C[^@ZC>amyzZ@C}u:[;",de="1>uv;>[C{;aN>@{X<[C{{;><;Z@",})
+lct:RT(2660919200,false,92,{en="3;>@C]",})
+
+lct:RT(1527484276,false,92,{en="5@C]y:];u=;]",})
+
+lct:RT(1375307746,false,true,{en="/yuBC>aR^;;>",fr="/yuBC>;ap;Z>;",de="/yuBC>;>=`>ZwZ>",})
+
+lct:RT(452725322,false,92,{en="0Z|Z>;aN_;X^@ZC>;]",fr="0Z|Z>aMC^]];u^",de="1`@@[ZX<;]a5X<u]Y]ZX<@;]",})lct:RT(452725322,3541899474,2079,{en="S<;a3uX<Z>;",fr="nua3uX<Z>;",de="0Z;a3u{X<Z>;",})
+lct:RT(671038416,false,2079,{en="5Z[|;]aU;]wa5^]Y;]",fr="/]w;>@a5^]Y;^]aU;]w",de="5Z[:;]aU;]wa5^]Y;]",})
+lct:RT(391627066,false,92,{en="1^u]vZu>a/>w;[",fr="/>w;a1u]vZ;>",de="5X<^@B;>w;[",})
+lct:RT(1449947651,false,92,{en="5X]^:@u{@ZXaku];:;u]",})
+lct:RT(1143345413,false,92,{en="l1ea4]Cw];{{ZC>aS;uy",fr="l1ea4]Cw];{{ZC>aS;uy",de="l1ea4]Cw];{{ZC>aS;uy",})
+lct:RT(3396402417,false,51,{en="S<;anZ|Z>wa5<uvCA",fr="nDCy:];a6Z|u>@;",de="0;]apu{@[C{;a5X<u@@;>",})lct:RT(3396402417,401432131,628,{en="T<Z@;alu>w",fr="k]CXaM[u>X",de="T;Zt;]alu>wBu<>",})
+lct:RT(2837968354,false,92,{en="o>;a3u>a/]y}",fr="q>aOCyy;a/]yE;",de="NZ>Fyu>>Fu]y;;",})
+
+
+lct:RT(173478323,2881560666,92,{en="5@]C>wa5y;[[Z>wao]X",de="5@u]=a3Z;Y;>v;]ao]=",})
+lct:RT(1804301692,false,92,{en="nuv}aCYa@<;a5C^@<am{[u>v",fr="0uy;av;a[Dm[;av^a5^v",de="0uy;av;]a5ivZ>{;[",})
+lct:RT(1044122497,false,92,{en="S<;anC];yu{@;]",fr="nC];yu{@;]",de="nC];yu{@;]",})lct:RT(1044122497,2763479321,1330,{en="0ka5z}",fr="N{zZC>a0k",de="0ka5zZC>",})
+lct:RT(3836251840,false,true,{en="ku=;{aM}aS<;aoX;u>",fr="1a@;u^au^aMC]vav;anDCXEu>",de="P^X<;>auya3;;]",})lct:RT(3836251840,3297937951,1330,{en="R^;;>aCYaku=;{",fr="p;Z>;av;{a1a@;u^_",de="P`>ZwZ>av;]aP^X<;>",})
+lct:RT(1059334478,false,92,{en="kCu_;{a3;@u[",fr="kCu_;{a3E@u[",de="PCu_;{a3;@u[[",})
+lct:RT(1076342159,false,92,{en="S<;aOC>C]u:[;",fr="nDOC>C]u:[;",de="0Z;aN<]<uY@;>",})
+lct:RT(130665165,false,92,{en="S<;aMCw;}yu>",fr="n;ak]C?^;FyZ@uZ>;",de="0;]aM^<yu>>",})
+lct:RT(244717510,false,92,{en="nuakC>?^E]u>@;azu{amyz[u?^u:[;",fr="nuakC>?^E]u>@;azu{amyz[u?^u:[;",de="nuakC>?^E]u>@;azu{amyz[u?^u:[;",})lct:RT(244717510,1184782488,92,{en="4<u]yuXZ;>>;",fr="4<u]yuXZ;>>;",de="4<u]yuXZ;>>;",})
+lct:RT(1342813983,2721735970,92,{en="S<;apZzz;]",fr="nDN|;>@];^]",de="0;]a/^Y];Zt;]",})
+lct:RT(1627745582,false,92,{en="5=CCyua/vvZX@",fr="n;a5=CCyua/vvZX@",de="5=CCyua/:<b>wZw;>",})
+lct:RT(2487628104,false,92,{en="~XYYIJ:f0;{^a0;{^aa~]",fr="~XYYIJ:f0;{^a0;{^aa~]",de="~XYYIJ:f0;{^a0;{^aa~]",})lct:RT(2487628104,2978586387,1810,{en="~XYYIJ:fS;aSu>?^;Ca4uzZaa~]",fr="~XYYIJ:f2;a|uZ{a|C^{aSu>=;]a4uz",de="~XYYIJ:fmX<aA;]v;a4u>B;]avZX<a4",})
+
+lct:RT(210728403,270455745,92,{en="S<;a3;@<CvZXu[",})
+lct:RT(3252834201,false,92,{en="S<;a5ZyC>aN_z];{{",fr="n;a5ZyC>aN_z];{{",de="0;]a5ZyC>aN_z];{{",})
+lct:RT(1365579521,false,628,{en="TZz;{aC>aS]u{<",})
+lct:RT(2822666538,false,true,{en="~XllGGGG5C^[ap;uz;]~]",fr="~XllGGGG5C^[ap;uz;]~]",de="~XllGGGGnD/>=C^~]",})
+lct:RT(1507726281,3541509713,92,{en="2u|;[Z>aCYa5@;>vu]]",fr="2u|;[C@av;a5@;>vu]]",de="5z;;]A^]Ya|C>a5@;>vu]]",})
+
+lct:RT(1158594345,false,92,{en="4]C@;X@C]aCYa@<;ap;u[y",})
+lct:RT(4267095257,false,92,{en="~X,GGG,Gk[C^vak<u{;]~]",fr="~X,GGG,GQ^uw;ak<u{{;~]",de="~X,GGG,GTC[=;>xbw;]~]",})
+lct:RT(109224740,1737010384,92,{en="0];uyaPZ[[;]",fr="S^;^]av;apK|;",de="S]u^yFPZ[[;]",})
+lct:RT(713456003,false,1330,{en="S<;al[uA[;{{a1[uvZu@C]",fr="1[uvZu@;^]amyz[uXu:[;",})lct:RT(713456003,3775367921,1330,{en="S<;al[uA[;{{a1[uvZu@C]",fr="1[uvZu@;^]amyz[uXu:[;",})
+lct:RT(3750747221,false,92,{en="1^u]vZu>aCYa@<;a1u[u_}",})lct:RT(3750747221,2918372644,51,{en="S<;aMZ]vaY]Cya3Z{YC]@^>;",fr="oZ{;u^av^a3u[<;^]",})
+lct:RT(1313177490,false,494,{en="S<;am>|Z>XZ:[;",fr="nDam>|Z>XZ:[;",de="0Z;aq>:;{Z;w:u];",})
+lct:RT(2864716338,false,92,{en="3Z{@];{{aCYa@<;a0u]=",})
+lct:RT(1013558538,3510921308,2079,{en="0Z{:u>va0Z{:u>va0Z{:u>v",fr="0Z{:u>va0Z{:u>va0Z{:u>v",de="0Z{:u>va0Z{:u>va0Z{:u>v",})
+lct:RT(4120068347,false,92,{en="S;ua3u=;]",en="S<EZc];",de="S;;=CX<;]",})lct:RT(4120068347,2030795112,1810,{en='0CoC0',})
+lct:RT(2416997617,false,92,{en="4u{<u",en="4uX<u",de="4u{<u",})
+lct:RT(841517891,false,92,{en="TC]@<}",})
+
+lct:RT(810384984,238394253,92,{en='/z;_',})
+
+lct:RT(4052732411,false,92,{en='ku{^u[',})lct:RT(4052732411,671906596,92,{en='ku{^u[',})
+lct:RT(3204068434,false,92,{fr='0]uwC>YZ];apZv;]',})lct:RT(3204068434,2083966292,51,{en='5@C]yapZv;]',})
+lct:RT(425871172,false,92,{en='5AC]vaoYa5<u>>u]u',})
+lct:RT(4292278260,false,92,{en='S<;apZ>waM;u];]',})lct:RT(4292278260,2488928266,2079,{en='S<;am[[^yZ>u@;v',})
+lct:RT(1553656508,false,92,{en='Q^=;]C]',fr='Q^=;]C]',de="Q^=;]C]",})
+
+lct:RT(3101213993,false,true,{en='~X*gIHv,S<;amyyC]@u[',fr='~X*gIHv,nDZyyC]@;[',de='~X*gIHv,0;]aq>{@;]:[ZX<;',})
+lct:RT(2014809841,2978736366,92,{en='k^]ZCakC[[;X@C]',fr='kC[[;X@ZC>>;^]av;ak^]ZC{Z@E{',de='P^]ZC{Z@b@;>{uyy[;]',})
+lct:RT(2063947617,false,92,{en='R^;;>aoYanZBu]v{',fr='];Z>;av;{a[EBu]v{',de='aP`>ZwZ>av;]aNZv;X<{;>',})lct:RT(2063947617,341020706,92,{en='Nyz;]C]aoYanZBu]v{',fr='aNyz;];^]a0;{anEBu]v{',de='PuZ{;]av;]aNZv;X<{;>',})
+
+lct:RT(3128590789,false,92,{en='MuXC>a0;{@]C};]',fr='0;{@]^X@;^]av;a:uXC>',de='5z;X=B;]{@`];]',})
+lct:RT(4293973946,3056998748,1330,{en='OC[}ak]^{uv;]',de='yu=;[[C{;aN]C:;]Z>',})
+lct:RT(1161506350,false,92,{en='0ZBB}Z>wa5zuyy;]',fr='0ZBB}Z>wa5zuyy;]',de='0ZBB}Z>wa5zuyy;]',})
+lct:RT(963571677,false,92,{en='S<;a:;u]v;vayu>',fr='nD<Cyy;a:u]:^',de='0;]aMb]@Zw;a3u>>',})
+lct:RT(3733334153,false,92,{en='1]u>vaTu]ak<Z;Ya5^z];y;',})
+lct:RT(3130962581,false,494,{en='3CC>anZw<@',fr='k[uZ]av;a[^>;',de='3C>v[ZX<@',})lct:RT(3130962581,4261844445,494,{en='3CC>anZw<@',fr='k[uZ]av;a[^>;',de='3C>v[ZX<@',})
+lct:RT(2127935949,false,628,{en='S<;a5u{{yu>X;]',})lct:RT(2127935949,3789400369,92,{en='S<;aS;]]Z:[;a5>CAy;]',fr='an;aS;]]Z:[;aQ;Zw;y;]',de='0;]a5X<];X=[ZX<;a5X<>;;y;]',})
+
+
+
+lct:RT(4044176894,false,92,{en='S<;ak^]{;vao>;',})
+lct:RT(1403951427,false,92,{en='S<;aq>YC]wZ|;>',})
+
+lct:RT(2709370135,false,92,{en='5Z[|;]}a0u]=>;{{',fr='o:{X^]Z@Eau]w;>@E;',de='5Z[:]Zw;a0^>=;[<;Z@',})
+lct:RT(4281723531,false,92,{en='TZz;{aC>aS]u{<',fr='nZ>w;@@;{a{^]a[uakC]:;Z[[;',de='TZ{X<@aZya3^[[',})lct:RT(4281723531,306136156,1330,{en='5@uyz[u]aAZ[[a>;|;]avZ;',fr='5@uyz[u]a>;ayC^]]uaxuyuZ{',de='a5@uyz[u]aAZ]va>Z;yu[{a{@;]:;>',})
+lct:RT(3619172715,false,92,{en='3u{@;]aU;]wa5^]Y;]',fr='3u{@;]aU;]wa5^]Y;]',de='3u{@;]aU;]wa5^]Y;]',})
+lct:RT(3188788347,false,92,{en='lu:^[C^{',fr='lu:^[;^_',de='lu:;[<uY@',})lct:RT(3188788347,1700138827,92,{en='2^{@aua:Z@a3Z;<',fr='2^{@aua:Z@a3Z;<',de='2^{@aua:Z@a3Z;<',})
+
+
+
+lct:RT(4048208493,1185902972,92,{en='5Z>Z{@;]aS^]=;}',})
+lct:RT(2858992612,false,92,{en='3u{@;]aCYaP>CA[;vw;',fr='3ug@];av;a[uakC>>uZ{{u>X;',de='3;Z{@;]av;{aTZ{{;>{',})
+
+lct:RT(4124279317,false,92,{en='N[;wu>@[}aTu{@;v',fr='a[Ewuyy;>@a1u{zZ[[E',de='N[;wu>@a6;]w;^v;@',})lct:RT(4124279317,1022046773,628,{en='5zCZ[;vaM]u@',fr='1uyZ>a1a@E',de='6;]BCw;>;{a1`]',})
+lct:RT(2119731248,1017899260,true,{en='5<uvCAaCYa@<;aT;{@',fr='oy:];av;a[Do^;{@',de='5X<u@@;>av;{aT;{@;>{',})
+
+lct:RT(1298377073,false,92,{en='3u{@;]ak<;Y',})lct:RT(1298377073,599246026,92,{en='3u{@;]ak<;Y',})
+lct:RT(763457523,false,1810,{en='/]v;>@al[uy;',fr='l[uyy;au]v;>@;',de='1[^<;>v;al[uyy;',})
+lct:RT(798111974,false,92,{en='5Z>aCYa1];;v',})
+
+lct:RT(3085595752,2582039471,92,{en='1C[v;>a1^u]vZu>',})
+lct:RT(1953523750,3270432679,92,{en='Mu@@[;yuw;',})
+lct:RT(554270662,1747005414,92,{en='P]ZYaN];Za0Z[C>',fr='P]ZYaN];Za0Z[C>',de='P]ZYaN];Za0Z[C>',})
+lct:RT(2021154607,false,92,{en='pZzz;]',fr='a|;>@];^]',de='pZzz;]',})
+
+lct:RT(3506149602,false,92,{en='kCvZ>waku@',fr='kCvZ>waku@',de='kCvZ>waku@',})lct:RT(3506149602,2311532378,1810,{en='S<;aN|;]FnZ|Z>w',fr='S<;aN|;]FnZ|Z>w',de='S<;aN|;]FnZ|Z>w',})
+lct:RT(533751404,false,92,{en='3^@<{;]u',fr='3^@<{;]u',de='3^@<{;]u',})
+lct:RT(2513617898,3008522260,92,{en='/{<=<u>',})
+
+lct:RT(1703460885,false,92,{en='l]Z;>v[}aQ;Zw<:C^]',})lct:RT(1703460885,3210043349,92,{en='TZ>w{aCYaTC>v;]',})
+lct:RT(760593166,false,92,{en='M[uX=aTZvCA',fr='6;^|;aQCZ]',de='5X<Au]B;aTZ@A;',})
+lct:RT(1134753014,false,92,{en='q]{a3uxC]',fr='q]{a3uxC]',de='q]{a3uxC]',})lct:RT(1134753014,2223000998,92,{en='4]CY;{{C]au@a/>=<F3C]zC]=',fr='4]CY;{{;^]aaa/>=<F3C]zC]=',de='4]CY;{{C]aZ>a/>=<F3C]zC]=',})
+lct:RT(1838172566,false,92,{en='nZ|Z>wan;w;>v',fr='nEw;>v;a6Z|u>@;',de='n;:;>v;an;w;>v;',})
+lct:RT(3091229980,false,92,{en='6^[_{;v_',fr='6^[_{;v_',de='6^[_{;v_',})lct:RT(3091229980,4134294656,92,{en='k[u}yC];amamar',})
+lct:RT(2845909476,false,92,{en='S<;aQC>4[^{q[@]u',fr='n;aQC>4[^{q[@]u',de='0u{aQC>4[^{q[@]u',})lct:RT(2845909476,2216570798,705,{en='QCa3;]X}',})
+lct:RT(2359969152,false,2079,{en='oa3uwCaEamyz[uXa|;[',fr='n;ayuwZXZ;>a;{@amyz[uXu:[;',de='0;]aUu^:;];]aZ{@aq>;]:Z@@[ZX<',})
+
+lct:RT(2455827257,false,92,{en='p;u[ay|za5@ZX=a4',fr='p;u[ay|za5@ZX=a4',de='p;u[ay|za5@ZX=a4',})lct:RT(2455827257,1298336713,92,{en='p;u[ay|za5@ZX=a4',})
+lct:RT(3436387716,false,705,{en='5XC^]w;aoYak}]CvZZ[',fr='l[Eu^a0^ak}]CvZZ[',de='1;Zt;[a|C>ak}]CvZZ[',})
+lct:RT(2929427093,1621733346,true,{en='nZw<@aCYa0uA>',})
+lct:RT(3990524561,false,92,{en='4^>=aM^>>}',fr='4^>=anuzZ>',de='4^>=FOu{;',})
+lct:RT(3355087462,false,92,{en='kuvA;[[D{a4[u@Z>^ya3;y:;]',fr='3;y:];a4[u@Z>;av;akuvA;[[',de='kuvA;[[{a4[u@Z>^yF3Z@w[Z;v',})
+lct:RT(2995614219,false,92,{en='k<Z;YaCYaN?^;{aQCX@Z{a',de='N?^;{aQCX@Z{ak<;YZ>a',})lct:RT(2995614219,3531621777,92,{en='k<Z;YaCYaN?^;{aQCX@Z{',})
+lct:RT(2589474561,false,92,{en='S<;aN>@<;Cw;>ZX',fr='nDN>@<;Cw;>ZX',de='0Z;aN>@<;Cw;>;',})
+lct:RT(1375307746,2374834210,true,{en='/yuBC>aR^;;>',})
+lct:RT(1616012896,false,92,{en='SCzFQC@X<aQ;A:Z;',})
+lct:RT(453266517,false,92,{en='k[;u][}akC>Y^{;v',})
+lct:RT(1545464185,4007320154,92,{en='5XCCyua0;u[;]',})
+lct:RT(2648996415,false,92,{en='Ouzz}a0];uy;]',fr='O;^];^_apK|;^]',de='1[iX=[ZX<;]aS]b^y;]',})lct:RT(2648996415,2708407449,628,{en='MC]>a@Ca:;aTZ[v',})
+lct:RT(989799715,false,628,{en='S<;anZw<@aCYa0uA>',fr='nua[^yZc];av;a[Du^:;',de='0u{anZX<@av;]a0byy;]^>w',})lct:RT(989799715,155839631,628,{en='S<;anZw<@aCYa0uA>',})
+lct:RT(1536721951,false,true,{en='0Z|uaNyCa1C@<aoYa0u]=>;{{',})lct:RT(1536721951,2936424338,true,{en='0Z|uaNyCa1C@<aoYa0u]=>;{{',})
+
+lct:RT(2012291598,false,1330,{en='S<;a3u;[{@]Cya/>>Z<Z[u@C]',})
+lct:RT(1613231931,false,92,{en='n;w;>vu]}aP>Zw<@',fr='k<;|u[Z;]anEw;>vuZ];',de='n;w;>vb];]apZ@@;]',})
+lct:RT(701268649,false,true,{en='0];uyZ>wanZw<@',fr='pK|;]an^yZc];',de='S]b^y;>v;{anZX<@',})
+
+
+lct:RT(1256140351,4217760066,705,{en='5<Z;[va5@uX=;]',})
+lct:RT(1584171560,false,92,{en='kC>{^[aCYa4uvCyu}',fr='0E[Ew^Eav;a4uvCyu}',de='PC>{^[a|C>a4uvCyu}',})lct:RT(1584171560,2855390806,1330,{en='S<;a0]uwC>aCYa6u[;>ACCv',})
+lct:RT(2092303465,false,92,{en='k]CAva4^[[;]',fr='/@@]uX@ZC>',de='U^wzY;]v',})
+lct:RT(3100924539,false,2079,{en='5^z];yZvuv;',fr='nua5^z]Eyu@Z;',de='h:;][;w;><;Z@',})lct:RT(3100924539,1229473599,2079,{en='5^z];yZ@}',})
+lct:RT(3936655003,false,92,{en='S<;aM^@X<;]',fr='n;aMC^X<;',de='0;]a3;@Bw;]',})lct:RT(3936655003,3829163913,92,{en='S<;aM^@X<;]',})
+lct:RT(3415080388,false,92,{en='2uX=u[;;>',fr='2uX=u[;;>',de='2uX=u[;;>',})lct:RT(3415080388,1977445892,92,{en='2uX=u[;;>',})
+lct:RT(1497236838,false,628,{en='S<;aOu]:Z>w;]',fr='n;a4]EX^]{;^]',de='0;]a6C]:C@;',})lct:RT(1497236838,3464652070,628,{en='S<;aOu]:Z>w;]',})
+lct:RT(3409167202,false,628,{en='Mu>u>uaPZ>w',fr='pCZav;{aMu>u>;{',de='Mu>u>;>=`>Zw',})lct:RT(3409167202,3950693890,1810,{en='S<;aMu>u>u:C]>',})
+lct:RT(1264525618,false,92,{en='0CyZ>ZC>aM[uv;',fr='nuy;av;a0CyZ>ZC>',de='0CyZ>ZC>aP[Z>w;',})
+lct:RT(2414560110,false,92,{en='Tu]X<Z;Y',})lct:RT(2414560110,3234044858,92,{en='Tu]X<Z;YaCYa@<;aN:C><;u]@a4uX@',})
+lct:RT(248279039,false,92,{en='5;z@Zy{aZ>a@<;ak[^:',fr='5;z@Zy{au^ak[^:',de='5;z@Zy;aZyak[^:',})
+lct:RT(534369183,false,92,{en='4]CY;{{ZC>u[a4[;:',})
+lct:RT(3378965337,false,92,{en='5AC]va0u>X;]',de='5X<A;]@@b>B;]',})
+lct:RT(1992273336,false,51,{en='1;>@[;a[Z=;a3CC>[Zw<@',})
+lct:RT(4032446867,false,51,{en='Mu[[Cy(a3u{@;]aCYa0;u@<',})lct:RT(4032446867,321898157,51,{en='Mu[[Cy(a3u{@;]aCYa0;u@<',})
+lct:RT(3307984231,false,92,{en='S<;a0;yC>{[u};]',fr='n;aS^;^]av;a0EyC>',de='0;]a0byC>;>@`@;]',})
+lct:RT(2258333088,false,92,{en='n;w;>vu]}a0>ZDA;',})
+lct:RT(3919596526,false,92,{en='S<;alu[[;>amyyC]@u[',})lct:RT(3919596526,3173817294,92,{en='S<;alu[[;>amyyC]@u[',})
+lct:RT(3635291151,false,92,{en='3uw>ZYZX;>@anuv}aqw<',fr='3uw>ZYZX;>@anuv}aqw<',de='3uw>ZYZX;>@anuv}aqw<',})
+
+
+--[[
+Author: Kyoma
+Filename: LibTitleLocale.lua
+Version: 3 (Horns of the Reach)
+Total: 95 titles
+]]--
+
+local LocaleTitles =
+{
+	["de"] =
+	{
+		[2] =
+		{
+			[1810] = "Divayth Fyrs Gehilfe",
+			[1838] = "Der Tick-Tack-Peiniger",
+			[1330] = "makelloser Eroberer",
+			[51] = "Monsterjäger",
+			[705] = "Großfeldherr",
+			[92] = "Freiwilliger",
+			[494] = "Meisterangler",
+			[1391] = "dro-m'Athra-Zerstörer",
+			[628] = "Held Tamriels",
+			[1910] = "Held der Eroberung",
+			[1913] = "Großchampion",
+			[2139] = "Greifenherz",
+			[2079] = "Stimme der Vernunft",
+			[2136] = "Lichtbringer",
+			[2075] = "Unsterblicher Erlöser",
+		},
+		[1] =
+		{
+			[1810] = "Divayth Fyrs Gehilfin",
+			[1838] = "Die Tick-Tack-Peinigerin",
+			[1330] = "makellose Eroberin",
+			[51] = "Monsterjägerin",
+			[705] = "Großfeldherrin",
+			[92] = "Freiwillige",
+			[494] = "Meisteranglerin",
+			[1391] = "dro-m'Athra-Zerstörerin",
+			[628] = "Heldin Tamriels",
+			[1910] = "Heldin der Eroberung",
+			[1913] = "Großchampion",
+		},
+	},
+	["en"] =
+	{
+		[2] =
+		{
+			[1810] = "Divayth Fyr's Coadjutor",
+			[1838] = "Tick-Tock Tormentor",
+			[1330] = "The Flawless Conqueror",
+			[51] = "Monster Hunter",
+			[705] = "Grand Overlord",
+			[628] = "Tamriel Hero",
+			[1391] = "Dro-m'Athra Destroyer",
+			[494] = "Master Angler",
+			[92] = "Volunteer",
+			[1910] = "Conquering Hero",
+			[1913] = "Grand Champion",
+			[2079] = "Voice of Reason",
+			[2075] = "Immortal Redeemer",
+			[2139] = "Gryphon Heart",
+			[2136] = "Bringer of Light",
+		},
+		[1] =
+		{
+			[1810] = "Divayth Fyr's Coadjutor",
+			[1838] = "Tick-Tock Tormentor",
+			[1330] = "The Flawless Conqueror",
+			[51] = "Monster Hunter",
+			[705] = "Grand Overlord",
+			[628] = "Tamriel Hero",
+			[1391] = "Dro-m'Athra Destroyer",
+			[494] = "Master Angler",
+			[92] = "Volunteer",
+			[1910] = "Conquering Hero",
+			[1913] = "Grand Champion",
+
+		},
+	},
+	["fr"] =
+	{
+		[2] =
+		{
+			[1810] = "Coadjuteur de Divayth Fyr",
+			[1838] = "Tourmenteur des Tic-tac",
+			[1330] = "Le conquérant implacable",
+			[51] = "Chasseur de monstres",
+			[705] = "Grand maréchal",
+			[628] = "Héros de Tamriel",
+			[1391] = "Destructeur des dro-m'Athra",
+			[494] = "Maître de pêche",
+			[92] = "Volontaire",
+			[1910] = "Héros conquérant",
+			[1913] = "Grand champion",
+			[2075] = "Rédempteur immortel",
+			[2139] = "Cœur-de-griffon",
+			[2136] = "Porteur de lumière",
+			[2079] = "Voix de la raison",
+
+
+		},
+		[1] =
+		{
+
+			[1810] = "Coadjutrice de Divayth Fyr",
+			[1838] = "Tourmenteuse des Tic-tac",
+			[1330] = "La conquérante implacable",
+			[51] = "Chasseuse de monstres",
+			[1391] = "Destructrice des dro-m'Athra",
+			[494] = "Maîtresse de pêche",
+			[705] = "Grand maréchal",
+			[628] = "Héroïne de Tamriel",
+			[92] = "Volontaire",
+			[1910] = "Héroïne conquérante",
+			[1913] = "Grande championne",
+		},
+	},
+}
+
+local GetAchievementRewardTitle_original
+
+local function Unload()
+	GetAchievementRewardTitle = GetAchievementRewardTitle_original
+end
+
+local function Load()
+
+	GetAchievementRewardTitle_original = GetAchievementRewardTitle
+	GetAchievementRewardTitle = function(achievementId, gender)
+		local hasTitle, title = GetAchievementRewardTitle_original(achievementId, gender)
+		if (hasTitle and gender) then
+			if (LocaleTitles[lang] and LocaleTitles[lang][gender] and LocaleTitles[lang][gender][achievementId]) then
+				title = LocaleTitles[lang][gender][achievementId]
+			end
+		end
+		return hasTitle, title
+	end
+
+	LibCustomTitles.Unload = Unload
+end
+
+if(LibCustomTitles.Unload) then LibCustomTitles.Unload() end
+Load()
diff --git a/locale/de.lua b/locale/de.lua
index 37575c1..259ba1d 100644
--- a/locale/de.lua
+++ b/locale/de.lua
@@ -29,6 +29,24 @@ local strings  = {
 	DAS_SI_SETOPEN_TRUE	 	= "Toggle open",
 	DAS_SI_SETOPEN_FALSE	= "Toggle complete",

+
+  DAS_SLAVES_1             = "Alte Schriftrollen",
+  DAS_SLAVES_2             = "Alter Tand",
+  DAS_SLAVES_3             = "Alter Wuchs",
+  DAS_SLAVES_4             = "Die Last der Worte",
+  DAS_SLAVES_5             = "Heilige Kerzen",
+  DAS_SLAVES_6             = "Tödliche Umstände",
+  DAS_SLAVES_7             = "Gesandte, die kuschen",
+  DAS_SLAVES_8             = "Opfergaben, die sich verbergen",
+  DAS_SLAVES_9             = "Pilze, die nähren",
+  DAS_SLAVES_10            = "Antike Rüstungen",
+  DAS_SLAVES_11            = "Alte Feinde",
+  DAS_SLAVES_12            = "Aloe, die heilt",
+  DAS_SLAVES_13            = "Leder, das schützt",
+  DAS_SLAVES_14            = "Tödliche Erwartungen",
+  DAS_SLAVES_15            = "Werkzeuge des Gemetzels",
+
+
     DAS_ELF_RELIC           = "Die Reliktrettung",
     DAS_ELF_PILGR           = "Das Ende der Pilgerfahrt",
     DAS_ELF_LIGHT           = "Das verlöschen des Lichts",
diff --git a/locale/en.lua b/locale/en.lua
index 30fa1ca..fd8b3ef 100644
--- a/locale/en.lua
+++ b/locale/en.lua
@@ -29,8 +29,26 @@ local strings  = {
 	DAS_SI_SETOPEN_TRUE	 	= "Toggle open",
 	DAS_SI_SETOPEN_FALSE	= "Toggle complete",

-    DAS_BINGO_CODE_IS       = "\nThe bingo code is ",
-
+  DAS_BINGO_CODE_IS       = "\nThe bingo code is ",
+  DAS_SI_PREQUEST         = "\nPrequest <<1>>: <<2>>",
+	DAS_SI_COMPLETED        = "completed",
+	DAS_SI_OPEN             = "open",
+
+  DAS_SLAVES_1             = "Old Baubles",
+  DAS_SLAVES_2             = "Old Scrolls",
+  DAS_SLAVES_3             = "Old Growth",
+  DAS_SLAVES_4             = "The Weight of Words",
+  DAS_SLAVES_5             = "Sacred Candles",
+  DAS_SLAVES_6             = "Grave Circumstances",
+  DAS_SLAVES_7             = "Envoys Who Cower",
+  DAS_SLAVES_8             = "Offerings That Hide",
+  DAS_SLAVES_9             = "Mushrooms That Nourish",
+  DAS_SLAVES_10            = "Antique Armor",
+  DAS_SLAVES_11            = "Old Enemies",
+  DAS_SLAVES_12            = "Aloe That Heals",
+  DAS_SLAVES_13            = "Leather That Protects",
+  DAS_SLAVES_14            = "Grave Expectations",
+  DAS_SLAVES_15            = "Tools of Slaughter",

     DAS_ELF_RELIC           = "Relic Runaround",
     DAS_ELF_PILGR           = "Pilgrimage's End",
@@ -38,15 +56,15 @@ local strings  = {
     DAS_ELF_SERPE           = "Culling Serpents",
     DAS_ELF_MEMO            = "Struck from Memory",
     DAS_ELF_ROSE            = "A Rose's Beauty",
+

-
     DAS_ELF_ALCHE           = "The Abyssal Alchemist",
     DAS_ELF_GRAVE           = "Never Forgotten",
     DAS_ELF_QUEEN           = "The Sickening Sea",
     DAS_ELF_GRIFFIN         = "Birds of a Feather",
     DAS_ELF_SNAKE           = "Run Aground",
     DAS_ELF_WILD            = "Taming the Wild",
-
+
     DAS_ELF_GEYSER          = "Sinking Summerset",


diff --git a/locale/fr.lua b/locale/fr.lua
index 4235091..be7df86 100644
--- a/locale/fr.lua
+++ b/locale/fr.lua
@@ -25,7 +25,22 @@ local strings  = {
 	DAS_SI_SETOPEN_TRUE	 	= "Toggle open",
 	DAS_SI_SETOPEN_FALSE	= "Toggle complete",

-
+  DAS_SLAVES_1 =    "Vieilles babioles",
+  DAS_SLAVES_2 =    "Vieux parchemins",
+  DAS_SLAVES_3 =    "Vieille croissance",
+  DAS_SLAVES_4 =    "Le poids des mots",
+  DAS_SLAVES_5 =    "Bougies sacrées",
+  DAS_SLAVES_6 =    "Graves circonstances",
+  DAS_SLAVES_7 =    "Les émissaires qui hésitent",
+  DAS_SLAVES_8 =    "Les offrandes qui cachent",
+  DAS_SLAVES_9 =    "Les champignons qui nourrissent",
+  DAS_SLAVES_10 =   "Armure antique",
+  DAS_SLAVES_11 =   "Vieux ennemis",
+  DAS_SLAVES_12 =   "L'aloès qui soigne",
+  DAS_SLAVES_13 =   "Le cuir qui protège",
+  DAS_SLAVES_14 =   "Le cuir qui protège",
+  DAS_SLAVES_15 =   "Les outils du massacre",
+
     DAS_ELF_RELIC           = "La course aux reliques",
     DAS_ELF_PILGR           = "La fin du pélerinage",
     DAS_ELF_LIGHT           = "Souffler la lumière",
diff --git a/questData/Murkmire.lua b/questData/Murkmire.lua
new file mode 100644
index 0000000..45f3bea
--- /dev/null
+++ b/questData/Murkmire.lua
@@ -0,0 +1,103 @@
+local zoneId  = 726
+
+local tbl = {}
+local tbl2 = {}
+
+ -- Old Baubles
+table.insert(tbl, GetString(DAS_SLAVES_1))
+table.insert(tbl2, {[1] = "baubles"})
+
+-- Old Scrolls
+table.insert(tbl, GetString(DAS_SLAVES_2))
+table.insert(tbl2, {[1] = "scrolls"})
+
+-- Old Growth
+table.insert(tbl, GetString(DAS_SLAVES_3))
+table.insert(tbl2, {[1] = "growth"})
+
+-- Old Enemies
+table.insert(tbl, GetString(DAS_SLAVES_11))
+table.insert(tbl2, {[1] = "enemy", [2] = "enemies"})
+
+-- The Weight of Words
+table.insert(tbl, GetString(DAS_SLAVES_4))
+table.insert(tbl2, {[1] = "words"})
+
+-- Sacred Candles
+table.insert(tbl, GetString(DAS_SLAVES_5))
+table.insert(tbl2, {[1] = "candle", [2] = "candles"})
+
+-- Grave Circumstances
+table.insert(tbl, GetString(DAS_SLAVES_6))
+table.insert(tbl2, {[1] = "circ" })
+
+-- Grave Expectations
+table.insert(tbl, GetString(DAS_SLAVES_14))
+table.insert(tbl2, {[1] = "expe" })
+
+
+-- Envoys Who Cower
+table.insert(tbl, GetString(DAS_SLAVES_7))
+table.insert(tbl2, {[1] = "envoys"})
+
+-- Offerings That Hide
+table.insert(tbl, GetString(DAS_SLAVES_8))
+table.insert(tbl2, {[1] = "offer", [2] = "hide" })
+
+-- Mushrooms That Nourish
+table.insert(tbl, GetString(DAS_SLAVES_9))
+table.insert(tbl2, {[1] = "mushrooms", [2] = "nourish" , [3] = "shroom", [4] = "shrooms"  })
+
+-- Antique Armor
+table.insert(tbl, GetString(DAS_SLAVES_10))
+table.insert(tbl2, {[1] = "armor", [2] = "armour" })
+
+-- Aloe That Heals
+table.insert(tbl, GetString(DAS_SLAVES_12))
+table.insert(tbl2, {[1] = "aloe" })
+
+-- Leather That Protects
+table.insert(tbl, GetString(DAS_SLAVES_13))
+table.insert(tbl2, {[1] = "leather" })
+
+-- Tools of Slaughter
+table.insert(tbl, GetString(DAS_SLAVES_15))
+table.insert(tbl2, {[1] = "tools" })
+
+
+DAS.questStarter[zoneId] = {
+    [GetString(DAS_QUEST_SS_TANO)]    = true,
+    [GetString(DAS_QUEST_SS_FARO)]    = true,
+    [GetString(DAS_QUEST_SS_TANE)]    = true,
+}
+
+DAS.questFinisher[zoneId] = {
+    [GetString(DAS_QUEST_SS_TANO)]    = true,
+    [GetString(DAS_QUEST_SS_FARO)]    = true,
+    [GetString(DAS_QUEST_SS_TANE)]    = true,
+}
+
+DAS.questIds[zoneId] = {
+
+}
+
+DAS.shareables[zoneId] = tbl
+DAS.makeBingoTable(zoneId, tbl2)
+
+-- for i=6082, 6087 do
+    -- DAS.questIds[zoneId][i] = true
+    -- DAS_QUEST_IDS[i] = true
+-- end
+-- for i=6152, 6160 do
+    -- DAS.questIds[zoneId][i] = true
+    -- DAS_QUEST_IDS[i] = true
+-- end
+
+-- DAS.questIds[zoneId][6202] = true
+-- DAS_QUEST_IDS[6202] = true
+
+
+-- DAS.prequests[GetString(DAS_ELF_GEYSER)] = { -- Sinking Summerset
+    -- prequestName = "The Abyssal Cabal",
+    -- prequestId = 6165,
+-- }
\ No newline at end of file
diff --git a/questData/Summerset.lua b/questData/Summerset.lua
index ee3374f..1f531af 100644
--- a/questData/Summerset.lua
+++ b/questData/Summerset.lua
@@ -74,4 +74,10 @@ for i=6152, 6160 do
 end

 DAS.questIds[zoneId][6202] = true
-DAS_QUEST_IDS[6202] = true
\ No newline at end of file
+DAS_QUEST_IDS[6202] = true
+
+
+DAS.prequests[GetString(DAS_ELF_GEYSER)] = { -- Sinking Summerset
+    prequestName = "The Abyssal Cabal",
+    prequestId = 6165,
+}
\ No newline at end of file