• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver
Resource icon

Release Lua Event Manager (LEM) Event Library

Try this one for the raid

Code:
cmV0dXJuIHsKIFsiY2F0ZWdvcnkiXSA9ICJUb0IiLAogWyJ0eXBlIl0gPSAiY29uZGl0aW9ucyIsCiBbIm5hbWUiXSA9ICJQcmllc3RfQ3VyZV9SQUlEIiwKIFsibG9hZCJdID0gewogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogIFsiY2xhc3MiXSA9ICIiLAogfSwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ2dvdExTQkVieUJ1YjNRZ1pXUnBkQ0IwYUdseklHbG1JR052Ym1ScGRHbHZiZ3BwWmlCdWIzUWdjR0ZqYTJGblpTNXNiMkZrWldSYkoyVjJaVzUwY3lkZElIUm9aVzRLSUNBZ0lIQnlhVzUwS0NkVWFHbHpJSE5qY21sd2RDQnBjeUJwYm5SbGJtUmxaQ0IwYnlCaVpTQnBiWEJ2Y25SbFpDQjBieUJNZFdFZ1JYWmxiblFnVFdGdVlXZGxjaUFvVEVWTktTNGdWSEo1SUNKY1lTMTBMMngxWVNCeWRXNGdiR1Z0WEdFdGVDSW5LUXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUc5dVgyeHZZV1FvS1FvZ0lDQWdMUzBnVUdWeVptOXliU0JoYm5rZ2FXNXBkR2xoYkNCelpYUjFjQ0JvWlhKbElIZG9aVzRnZEdobElHVjJaVzUwSUdseklHeHZZV1JsWkM0S1pXNWtDZ290TFMxQWNtVjBkWEp1SUdKdmIyeGxZVzRnUUZKbGRIVnlibk1nZEhKMVpTQnBaaUIwYUdVZ1lXTjBhVzl1SUhOb2IzVnNaQ0JtYVhKbExDQnZkR2hsY25kcGMyVWdabUZzYzJVdUNteHZZMkZzSUdaMWJtTjBhVzl1SUdOdmJtUnBkR2x2YmlncENpQWdJQ0F0TFNCSmJYQnNaVzFsYm5RZ2RHaGxJR052Ym1ScGRHbHZiaUIwYnlCbGRtRnNkV0YwWlNCb1pYSmxMZ29nSUNBZ2JHOWpZV3dnYlhsZmRHRnVheUE5SUcxeExsUk1UeTVIY205MWNDNU5ZV2x1VkdGdWF5Z3BDaUFnSUNCc2IyTmhiQ0J0ZVY5dVlXMWxJRDBnYlhFdVZFeFBMazFsTGtOc1pXRnVUbUZ0WlNncENpQWdJQ0JzYjJOaGJDQnRlVjlqYkdGemN5QTlJRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LUW9nSUNBZ2JHOWpZV3dnYldGZmJtRnRaU0E5SUcxeExsUk1UeTVIY205MWNDNU5ZV2x1UVhOemFYTjBMa05zWldGdVRtRnRaU2dwQ2lBZ0lDQXRMV3h2WTJGc0lHbHpYM0J5YVdWemRDQTlJSHRUU0UwOWRISjFaU3dnUkZKVlBYUnlkV1VzSUVOTVVqMTBjblZsZlFvS0lDQXRMV2xtSUcxNVgyNWhiV1VnZmowZ2JYbGZkR0Z1YXlCdmNpQnRZVjl1WVcxbElHRnVaQ0J1YjNRZ2FYTmZjSEpwWlhOMFcyMWxYMk5zWVhOelhTQjBhR1Z1Q2lBZ2FXWWdiWGxmYm1GdFpTQitQU0J0ZVY5MFlXNXJJRzl5SUcxaFgyNWhiV1VnZEdobGJnb2dJQ0FnYVdZZ2JYbGZZMnhoYzNNZ1BUMGdKMEpGVWljZ1lXNWtJRzF4TGxSTVR5NU5aUzVCWTNScGRtVkVhWE5qTGs1aGJXVW9LU0E5UFNCdGNTNVVURTh1VTNCbGJHd29KMFp5Wlc1NmFXVmtJRkpsYzI5c2RtVWdSR2x6WTJsd2JHbHVaU2NwTGxKaGJtdE9ZVzFsS0NrZ2RHaGxiZ29nSUNBZ0lDQnRjUzVqYldRb0p5OXpkRzl3Wkdsell5Y3BDaUFnSUNBZ0lHVnVaQW9nSUNBZ2QyaHBiR1VnS0cxeExsUk1UeTVOWlM1Q2RXWm1LQ2RRZFhKcFptbGpZWFJwYjI0Z2IyWWdWbVZsYzJoaGJpY3BLQ2tnYjNJZ2JYRXVWRXhQTGsxbExrSjFabVlvSjFCbGJtRnVZMlVnWm05eUlFUnBjMjlpWldScFpXNWpaU2NwS0NrcElHUnZDaUFnSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVDZFdabUtDZFFaVzVoYm1ObElHWnZjaUJFYVhOdlltVmthV1Z1WTJVbktTZ3BJSFJvWlc0S0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5aWIzaHlJSEJoZFhObEp5a0tJQ0FnSUNBZ0lDQXRMVzF4TG1OdFpDZ25MMjVoZGlCemNHRjNiaUJ0YVc1cGMzUmxjaUJ2WmlCd2RXNXBjMmh0Wlc1MEp5a0tJQ0FnSUNBZ0lDQnRjUzVqYldRb0p5OXVZWFlnYkc5aklEWXhOQzQ0TlN3Z01qSTNMall6TENBeE5EWTRMalUxSnlrS0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5a1ozUWdTU0JuYjNRZ2RHaGxJSE5vYVhRbktRb2dJQ0FnSUNBZ0lDMHRkMmhwYkdVZ2JYRXVWRXhQTGs1aGRtbG5ZWFJwYjI0dVFXTjBhWFpsS0NrZ1BUMGdabUZzYzJVZ1pHOEtJQ0FnSUNBZ0lDQXRMU0FnYlhFdVpHVnNZWGtvTVRBcElBb2dJQ0FnSUNBZ0lDMHRaVzVrQ2lBZ0lDQWdJQ0FnZDJocGJHVWdiWEV1VkV4UExrNWhkbWxuWVhScGIyNHVRV04wYVhabEtDa2dQVDBnZEhKMVpTQmtid29nSUNBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTVRBcENpQWdJQ0FnSUNBZ1pXNWtDaUFnSUNBZ0lDQWdiWEV1WkdWc1lYa29NalV3S1FvZ0lDQWdJQ0FnSUdsbUlHNXZkQ0J0Y1M1VVRFOHVUV1V1UW5WbVppZ25VR1Z1WVc1alpTQm1iM0lnUkdsemIySmxaR2xsYm1ObEp5a29LU0IwYUdWdUNpQWdJQ0FnSUNBZ0lDQnRjUzVqYldRb0p5OWtaM1FnU1NCdWJ5QnNiMjVuWlhJZ1oyOTBJSFJvWlNCemFHbDBKeWtLSUNBZ0lDQWdJQ0JsYm1RS0lDQWdJQ0FnWlc1a0NpQWdJQ0FnSUcxeExtUmxiR0Y1S0RFd0tRb2dJQ0FnSUNCcFppQnRjUzVVVEU4dVRXVXVRblZtWmlnblVIVnlhV1pwWTJGMGFXOXVJRzltSUZabFpYTm9ZVzRuS1NncElIUm9aVzRLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTlpYjNoeUlIQmhkWE5sSUc5dUp5a0tJQ0FnSUNBZ0lDQXRMVzF4TG1OdFpDZ25MMjVoZGlCemNHRjNiaUJ0YVc1cGMzUmxjaUJ2WmlCamJHVmhibk5wYm1jbktRb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwyNWhkaUJzYjJNZ01qUTRMalEwTENBdE16UTVMamMxTENBeE5EWTRMalUxSnlrS0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5a1ozUWdTU0JoYlNCMWJtTnNaV0Z1SnlrS0lDQWdJQ0FnSUNBdExYZG9hV3hsSUcxeExsUk1UeTVPWVhacFoyRjBhVzl1TGtGamRHbDJaU2dwSUQwOUlHWmhiSE5sSUdSdkNpQWdJQ0FnSUNBZ0xTMGdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQWdJQ0FnSUMwdFpXNWtDaUFnSUNBZ0lDQWdkMmhwYkdVZ2JYRXVWRXhQTGs1aGRtbG5ZWFJwYjI0dVFXTjBhWFpsS0NrZ1pHOEtJQ0FnSUNBZ0lDQWdJRzF4TG1SbGJHRjVLREV3S1FvZ0lDQWdJQ0FnSUdWdVpBb2dJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtESTFNQ2tLSUNBZ0lDQWdJQ0JwWmlCdWIzUWdiWEV1VkV4UExrMWxMa0oxWm1Zb0oxQjFjbWxtYVdOaGRHbHZiaUJ2WmlCV1pXVnphR0Z1Snlrb0tTQjBhR1Z1Q2lBZ0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5a1ozUWdWR2hsYzJVZ2NHbHdaWE1nWVhKbElHTnNaV0Z1SVNjcENpQWdJQ0FnSUNBZ1pXNWtDaUFnSUNBZ0lHVnVaQW9nSUNBZ0lDQnRjUzVqYldRb0p5OWliM2h5SUhWdWNHRjFjMlVuS1FvZ0lDQWdJQ0JsYm1RS0lDQmxibVFLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCaFkzUnBiMjRvS1FvZ0lDQWdMUzBnU1cxd2JHVnRaVzUwSUhSb1pTQmhZM1JwYjI0Z2RHOGdjR1Z5Wm05eWJTQm9aWEpsTGdwbGJtUUtDbkpsZEhWeWJpQjdiMjVzYjJGa1BXOXVYMnh2WVdRc0lHTnZibVJtZFc1alBXTnZibVJwZEdsdmJpd2dZV04wYVc5dVpuVnVZejFoWTNScGIyNTkiLAp9

Lua:
local mq = require('mq')

if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    local my_tank = mq.TLO.Group.MainTank()
    local my_name = mq.TLO.Me.CleanName()
    local my_class = mq.TLO.Me.Class.ShortName()
    local ma_name = mq.TLO.Group.MainAssist.CleanName()

  if my_name and not ma_name then
    if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
      mq.cmd('/stopdisc')
      end
    while (mq.TLO.Me.Buff('Purification of Veeshan')() or mq.TLO.Me.Buff('Penance for Disobedience')()) do
      if mq.TLO.Me.Buff('Penance for Disobedience')() then
        mq.cmd('/boxr pause')
        --mq.cmd('/nav spawn minister of punishment')
        mq.cmd('/nav loc 614.85, 227.63, 1468.55')
        mq.cmd('/dgt I got the shit')
        while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Penance for Disobedience')() then
          mq.cmd('/dgt I no longer got the shit')
        end
      end
      mq.delay(10)
      if mq.TLO.Me.Buff('Purification of Veeshan')() then
        mq.cmd('/boxr pause on')
        --mq.cmd('/nav spawn minister of cleansing')
        mq.cmd('/nav loc 248.44, -349.75, 1468.55')
        mq.cmd('/dgt I am unclean')
        while mq.TLO.Navigation.Active() do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Purification of Veeshan')() then
          mq.cmd('/dgt These pipes are clean!')
        end
      end
      mq.cmd('/boxr unpause')
      end
  end
end

local function action()
    -- Implement the action to perform here.
end

return {onload=on_load, condfunc=condition, actionfunc=action}
Thank you so much i will def try it this week during event
 
Last edited:
Thank you do much i will def try it this week during event
LMK how it works out for you. I have only tested it a couple of times, but it seems to work well.

This is a tough one because even the group can have random errors due to lag / stun. etc
 
is there a way it can run back to the guild banner if i can post /loc ???
Yes it can, but that's where it can be a bit trickier and understanding how you have your toons set up can make a difference. In the lem, the following occurs;

  • It checks for the debuff on the toon
  • It pauses the automation using mq2boxr
  • It navs to the correct location to remove the debuff
  • Once it verifies the debuff is gone, it unpauses the automation
Since it's only pausing/unpausing your automation, it returns it to the state it was in prior to the debuff. If you were in "chase" mode, it would run back to your MA.

It would be important to know what automation you are using and what behavoir you want from your toons. Yes, we can simply add a line after unpausing to have them nav to your guild banner (no need for the loc), but dpending on how your automation is setup, you may not get the desired result. You could try addiung this line to line 51 (after
mq.cmd('/boxr unpause'))

Lua:
mq.cmd('/nav spawn "guild banner"')
 
Yes it can, but that's where it can be a bit trickier and understanding how you have your toons set up can make a difference. In the lem, the following occurs;

  • It checks for the debuff on the toon
  • It pauses the automation using mq2boxr
  • It navs to the correct location to remove the debuff
  • Once it verifies the debuff is gone, it unpauses the automation
Since it's only pausing/unpausing your automation, it returns it to the state it was in prior to the debuff. If you were in "chase" mode, it would run back to your MA.

It would be important to know what automation you are using and what behavoir you want from your toons. Yes, we can simply add a line after unpausing to have them nav to your guild banner (no need for the loc), but dpending on how your automation is setup, you may not get the desired result. You could try addiung this line to line 51 (after
mq.cmd('/boxr unpause'))

Lua:
mq.cmd('/nav spawn "guild banner"')

Might it be better to add that line before the /boxr unpause line? That way, anyone on chase would go back to chasing (after briefly visiting the banner) and anyone on manual would stay at the banner (where I assume they want to be).

Maybe also have a check while navigation is running - like ...

Lua:
        mq.cmd('/nav spawn "guild banner"')
        while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
        end
        mq.delay(250)
        mq.cmd('/boxr unpause')

I'm new to this, but would that make sense?
 
Might it be better to add that line before the /boxr unpause line? That way, anyone on chase would go back to chasing (after briefly visiting the banner) and anyone on manual would stay at the banner (where I assume they want to be).

Maybe also have a check while navigation is running - like ...

Lua:
        mq.cmd('/nav spawn "guild banner"')
        while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
        end
        mq.delay(250)
        mq.cmd('/boxr unpause')

I'm new to this, but would that make sense?
Absolutely. There are multiple ways to handle it, but it all depends largely on how each person has their automation setup and what they expect of their toons.

I have not personally used a delay while navigating to a banner at the end of script because I have not run into a need, but I also can't think of anything it would hurt. I typically go with "less is more" when looking for a very specific response like this.
 
Yes it can, but that's where it can be a bit trickier and understanding how you have your toons set up can make a difference. In the lem, the following occurs;

  • It checks for the debuff on the toon
  • It pauses the automation using mq2boxr
  • It navs to the correct location to remove the debuff
  • Once it verifies the debuff is gone, it unpauses the automation
Since it's only pausing/unpausing your automation, it returns it to the state it was in prior to the debuff. If you were in "chase" mode, it would run back to your MA.

It would be important to know what automation you are using and what behavoir you want from your toons. Yes, we can simply add a line after unpausing to have them nav to your guild banner (no need for the loc), but dpending on how your automation is setup, you may not get the desired result. You could try addiung this line to line 51 (after
mq.cmd('/boxr unpause'))

Lua:
mq.cmd('/nav spawn "guild banner"')[/C
[/QUOTE]

Absolutely. There are multiple ways to handle it, but it all depends largely on how each person has their automation setup and what they expect of their toons.

I have not personally used a delay while navigating to a banner at the end of script because I have not run into a need, but I also can't think of anything it would hurt. I typically go with "less is more" when looking for a very specific response like this.
is it possible if you can revise it with the run back to Guild banner? and post it?
 
is it possible if you can revise it with the run back to Guild banner? and post it?

This should run everyone back to the banner and then unpause. At that point, if they are on chase, they will resume chasing. If on manual, they will stay put.

Lua:
local mq = require('mq')

if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    local my_tank = mq.TLO.Group.MainTank()
    local my_name = mq.TLO.Me.CleanName()
    local my_class = mq.TLO.Me.Class.ShortName()
    local ma_name = mq.TLO.Group.MainAssist.CleanName()

  if my_name and not ma_name then
    if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
      mq.cmd('/stopdisc')
      end
    while (mq.TLO.Me.Buff('Purification of Veeshan')() or mq.TLO.Me.Buff('Penance for Disobedience')()) do
      if mq.TLO.Me.Buff('Penance for Disobedience')() then
        mq.cmd('/boxr pause')
        --mq.cmd('/nav spawn minister of punishment')
        mq.cmd('/nav loc 614.85, 227.63, 1468.55')
        mq.cmd('/dgt I got the shit')
        while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Penance for Disobedience')() then
          mq.cmd('/dgt I no longer got the shit')
        end
      end
      mq.delay(10)
      if mq.TLO.Me.Buff('Purification of Veeshan')() then
        mq.cmd('/boxr pause on')
        --mq.cmd('/nav spawn minister of cleansing')
        mq.cmd('/nav loc 248.44, -349.75, 1468.55')
        mq.cmd('/dgt I am unclean')
        while mq.TLO.Navigation.Active() do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Purification of Veeshan')() then
          mq.cmd('/dgt These pipes are clean!')
        end
      end
      mq.cmd('/nav spawn "guild banner"')
      while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
      end
      mq.delay(250)
      mq.cmd('/boxr unpause')
      end
  end
end

local function action()
    -- Implement the action to perform here.
end

return {onload=on_load, condfunc=condition, actionfunc=action}
 
This should run everyone back to the banner and then unpause. At that point, if they are on chase, they will resume chasing. If on manual, they will stay put.

Lua:
local mq = require('mq')

if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    local my_tank = mq.TLO.Group.MainTank()
    local my_name = mq.TLO.Me.CleanName()
    local my_class = mq.TLO.Me.Class.ShortName()
    local ma_name = mq.TLO.Group.MainAssist.CleanName()

  if my_name and not ma_name then
    if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
      mq.cmd('/stopdisc')
      end
    while (mq.TLO.Me.Buff('Purification of Veeshan')() or mq.TLO.Me.Buff('Penance for Disobedience')()) do
      if mq.TLO.Me.Buff('Penance for Disobedience')() then
        mq.cmd('/boxr pause')
        --mq.cmd('/nav spawn minister of punishment')
        mq.cmd('/nav loc 614.85, 227.63, 1468.55')
        mq.cmd('/dgt I got the shit')
        while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Penance for Disobedience')() then
          mq.cmd('/dgt I no longer got the shit')
        end
      end
      mq.delay(10)
      if mq.TLO.Me.Buff('Purification of Veeshan')() then
        mq.cmd('/boxr pause on')
        --mq.cmd('/nav spawn minister of cleansing')
        mq.cmd('/nav loc 248.44, -349.75, 1468.55')
        mq.cmd('/dgt I am unclean')
        while mq.TLO.Navigation.Active() do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Purification of Veeshan')() then
          mq.cmd('/dgt These pipes are clean!')
        end
      end
      mq.cmd('/nav spawn "guild banner"')
      while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
      end
      mq.delay(250)
      mq.cmd('/boxr unpause')
      end
  end
end

local function action()
    -- Implement the action to perform here.
end

return {onload=on_load, condfunc=condition, actionfunc=action}[/CO
[/QUOTE]
just copy and past over last lems?
 
This should run everyone back to the banner and then unpause. At that point, if they are on chase, they will resume chasing. If on manual, they will stay put.

Lua:
local mq = require('mq')

if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
    local my_tank = mq.TLO.Group.MainTank()
    local my_name = mq.TLO.Me.CleanName()
    local my_class = mq.TLO.Me.Class.ShortName()
    local ma_name = mq.TLO.Group.MainAssist.CleanName()

  if my_name and not ma_name then
    if my_class == 'BER' and mq.TLO.Me.ActiveDisc.Name() == mq.TLO.Spell('Frenzied Resolve Discipline').RankName() then
      mq.cmd('/stopdisc')
      end
    while (mq.TLO.Me.Buff('Purification of Veeshan')() or mq.TLO.Me.Buff('Penance for Disobedience')()) do
      if mq.TLO.Me.Buff('Penance for Disobedience')() then
        mq.cmd('/boxr pause')
        --mq.cmd('/nav spawn minister of punishment')
        mq.cmd('/nav loc 614.85, 227.63, 1468.55')
        mq.cmd('/dgt I got the shit')
        while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Penance for Disobedience')() then
          mq.cmd('/dgt I no longer got the shit')
        end
      end
      mq.delay(10)
      if mq.TLO.Me.Buff('Purification of Veeshan')() then
        mq.cmd('/boxr pause on')
        --mq.cmd('/nav spawn minister of cleansing')
        mq.cmd('/nav loc 248.44, -349.75, 1468.55')
        mq.cmd('/dgt I am unclean')
        while mq.TLO.Navigation.Active() do
          mq.delay(10)
        end
        mq.delay(250)
        if not mq.TLO.Me.Buff('Purification of Veeshan')() then
          mq.cmd('/dgt These pipes are clean!')
        end
      end
      mq.cmd('/nav spawn "guild banner"')
      while mq.TLO.Navigation.Active() == true do
          mq.delay(10)
      end
      mq.delay(250)
      mq.cmd('/boxr unpause')
      end
  end
end

local function action()
    -- Implement the action to perform here.
end

return {onload=on_load, condfunc=condition, actionfunc=action}
it works when i have cleric on assist on guild banner it runs back but i get this error for some reason
 

Attachments

  • EQ000393.jpg
    EQ000393.jpg
    42.1 KB · Views: 0
Absolutely. There are multiple ways to handle it, but it all depends largely on how each person has their automation setup and what they expect of their toons.

I have not personally used a delay while navigating to a banner at the end of script because I have not run into a need, but I also can't think of anything it would hurt. I typically go with "less is more" when looking for a very specific response like this.
do you have run out lems for all TOB raids?
 
it works when i have cleric on assist on guild banner it runs back but i get this error for some reason
You don't have mq2boxr plugin loaded. Either load the plugin or add code to the lem to do the pauses by class shortname:


Lua:
mq.cmdf('/%s pause on', mq.TLO.Me.Class.ShortName())
mq.cmdf('/%s pause off', mq.TLO.Me.Class.ShortName())
 
Automated Bandolier, just "finished" V1.


If >2 mobs on XTAR, will swap to "Multi" bandolier

If </=1 Mob on XTAR, will swap to "Single".

V2 will have named detection once I figure out that TLO/etc.





[CODE title="LEM - RQBandolier"]cmV0dXJuIHsKIFsiY2F0ZWdvcnkiXSA9ICJHZW5lcmFsIiwKIFsidHlwZSJdID0gImNvbmRpdGlvbnMiLAogWyJuYW1lIl0gPSAiQmFuZG9saWVyIiwKIFsibG9hZCJdID0gewogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogIFsiY2xhc3MiXSA9ICIiLAogfSwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ2dvdExTQkRiMjVtYVdkMWNtRjBhVzl1Q214dlkyRnNJRUpCVGtSUFRFbEZVbDlUU1U1SFRFVWdQU0FuVTJsdVoyeGxKeUFnSUNBdExTQk9ZVzFsSUc5bUlIbHZkWElnYzJsdVoyeGxMWFJoY21kbGRDQmlZVzVrYjJ4cFpYSWdjMlYwQ214dlkyRnNJRUpCVGtSUFRFbEZVbDlOVlV4VVNTQTlJQ2ROZFd4MGFTY2dJQ0FnSUNBdExTQk9ZVzFsSUc5bUlIbHZkWElnYlhWc2RHa3RkR0Z5WjJWMElHSmhibVJ2YkdsbGNpQnpaWFFLYkc5allXd2dRMGhGUTB0ZlNVNVVSVkpXUVV3Z1BTQXhNREFnSUNBZ0lDQWdJQ0FnSUMwdElFTm9aV05ySUdWMlpYSjVJREV3TUcxekNteHZZMkZzSUZOWFNWUkRTRjlFUlV4QldTQTlJREUxTURBZ0lDQWdJQ0FnSUNBZ0lDQXRMU0JOYVc1cGJYVnRJREV1TlhNZ1ltVjBkMlZsYmlCemQybDBZMmhsY3dvS0xTMGdVM1JoZEdVZ2RISmhZMnRwYm1jS2JHOWpZV3dnYkdGemRFTm9aV05ySUQwZ01BcHNiMk5oYkNCc1lYTjBVM2RwZEdOb0lEMGdNQXBzYjJOaGJDQnNZWE4wVFc5dWMzUmxja052ZFc1MElEMGdMVEVLQ2kwdElFOXdkR2x0YVhwbFpDQnRiMjV6ZEdWeUlHTnZkVzUwYVc1bkNteHZZMkZzSUdaMWJtTjBhVzl1SUdkbGRFMXZibk4wWlhKRGIzVnVkQ2dwQ2lBZ0lDQnNiMk5oYkNCamIzVnVkQ0E5SURBS0lDQWdJR3h2WTJGc0lIUnZkR0ZzV0ZSaGNtZGxkSE1nUFNCdGNTNVVURTh1VFdVdVdGUmhjbWRsZENncElHOXlJREFLSUNBZ0lBb2dJQ0FnYVdZZ2RHOTBZV3hZVkdGeVoyVjBjeUE5UFNBd0lIUm9aVzRLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdNQW9nSUNBZ1pXNWtDaUFnSUNBS0lDQWdJR1p2Y2lCcElEMGdNU3dnZEc5MFlXeFlWR0Z5WjJWMGN5Qmtid29nSUNBZ0lDQWdJR3h2WTJGc0lIaDBJRDBnYlhFdVZFeFBMazFsTGxoVVlYSm5aWFFvYVNrS0lDQWdJQ0FnSUNCcFppQjRkQzVKUkNncElHRnVaQ0I0ZEM1VWVYQmxLQ2tnUFQwZ0owNVFReWNnWVc1a0lIaDBMbEJqZEVoUWN5Z3BJRDRnTUNCMGFHVnVDaUFnSUNBZ0lDQWdJQ0FnSUdOdmRXNTBJRDBnWTI5MWJuUWdLeUF4Q2lBZ0lDQWdJQ0FnWlc1a0NpQWdJQ0JsYm1RS0lDQWdJQW9nSUNBZ2NtVjBkWEp1SUdOdmRXNTBDbVZ1WkFvS0xTMGdWSEpoWTJzZ1kzVnljbVZ1ZENCTlVUSkNZVzVrYjJ4cFpYSWdjMlYwSUcxaGJuVmhiR3g1SUhOcGJtTmxJSFJvWlhKbEozTWdibThnVkV4UElHWnZjaUJwZEFwc2IyTmhiQ0JqZFhKeVpXNTBSWEYxYVhCVFpYUWdQU0J1YVd3S0NpMHRJRk5oWm1VZ1JYWmxjbEYxWlhOMElHSmhibVJ2YkdsbGNpQnpkMmwwWTJocGJtY2dkMmwwYUNCaGJHd2dZVzUwYVMxemNHRnRJRzFsWVhOMWNtVnpDbXh2WTJGc0lHWjFibU4wYVc5dUlITjNhWFJqYUZSdlFtRnVaRzlzYVdWeUtITmxkRTVoYldVcENpQWdJQ0JzYjJOaGJDQmpkWEp5Wlc1MFZHbHRaU0E5SUcxeExtZGxkSFJwYldVb0tRb2dJQ0FnQ2lBZ0lDQXRMU0JTWVhSbElHeHBiV2wwYVc1bkNpQWdJQ0JwWmlCamRYSnlaVzUwVkdsdFpTQXRJR3hoYzNSVGQybDBZMmdnUENCVFYwbFVRMGhmUkVWTVFWa2dkR2hsYmdvZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpRb2dJQ0FnWlc1a0NpQWdJQ0FLSUNBZ0lDMHRJRU5vWldOcklHbG1JR0poYm1SdmJHbGxjaUJ6WlhRZ1pYaHBjM1J6Q2lBZ0lDQnBaaUJ1YjNRZ2JYRXVWRXhQTGsxbExrSmhibVJ2YkdsbGNpaHpaWFJPWVcxbEtTQnZjaUJ1YjNRZ2JYRXVWRXhQTGsxbExrSmhibVJ2YkdsbGNpaHpaWFJPWVcxbEtTNU9ZVzFsS0NrZ2RHaGxiZ29nSUNBZ0lDQWdJRmR5YVhSbExrVnljbTl5S0NkQ1lXNWtiMnhwWlhJZ2MyVjBJQ0lsY3lJZ1pHOWxjeUJ1YjNRZ1pYaHBjM1FuTENCelpYUk9ZVzFsS1FvZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpRb2dJQ0FnWlc1a0NpQWdJQ0FLSUNBZ0lDMHRJRU5vWldOcklHbG1JR0ZzY21WaFpIa2dZV04wYVhabENpQWdJQ0JwWmlCdGNTNVVURTh1VFdVdVFtRnVaRzlzYVdWeUtITmxkRTVoYldVcExrRmpkR2wyWlNncElIUm9aVzRLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVZ0lDMHRJRUZzY21WaFpIa2dZV04wYVhabENpQWdJQ0JsYm1RS0lDQWdJQW9nSUNBZ0xTMGdRMmhsWTJzZ2NISmxjbVZ4ZFdsemFYUmxjd29nSUNBZ2FXWWdiWEV1VkV4UExrTjFjbk52Y2k1SlJDZ3BJSFJvWlc0S0lDQWdJQ0FnSUNCWGNtbDBaUzVYWVhKdUtDZERZVzV1YjNRZ2MzZHBkR05vSUdKaGJtUnZiR2xsY2pvZ2FYUmxiU0J2YmlCamRYSnpiM0luS1FvZ0lDQWdJQ0FnSUhKbGRIVnliaUJtWVd4elpRb2dJQ0FnWlc1a0NpQWdJQ0FLSUNBZ0lDMHRJRkJsY21admNtMGdkR2hsSUhOM2FYUmphQ0IxYzJsdVp5QkZVU2R6SUdKMWFXeDBMV2x1SUdKaGJtUnZiR2xsY2dvZ0lDQWdiWEV1WTIxa1ppZ25MMkpoYm1SdmJHbGxjaUJoWTNScGRtRjBaU0FsY3ljc0lITmxkRTVoYldVcENpQWdJQ0JzWVhOMFUzZHBkR05vSUQwZ1kzVnljbVZ1ZEZScGJXVUtJQ0FnSUZkeWFYUmxMa2x1Wm04b0oxTjNhWFJqYUdWa0lIUnZJR0poYm1SdmJHbGxjam9nSlhNbkxDQnpaWFJPWVcxbEtRb2dJQ0FnY21WMGRYSnVJSFJ5ZFdVS1pXNWtDZ290TFNCTllXbHVJR052Ym1ScGRHbHZiaUJtZFc1amRHbHZiaUFvWm05eUlFeEZUU2tLYkc5allXd2dablZ1WTNScGIyNGdZMjl1WkdsMGFXOXVLQ2tLSUNBZ0lHeHZZMkZzSUdOMWNuSmxiblJVYVcxbElEMGdiWEV1WjJWMGRHbHRaU2dwQ2lBZ0lDQUtJQ0FnSUMwdElGUm9jbTkwZEd4bElHTm9aV05yYVc1bklIUnZJSE53WldOcFptbGxaQ0JwYm5SbGNuWmhiQW9nSUNBZ2FXWWdZM1Z5Y21WdWRGUnBiV1VnTFNCc1lYTjBRMmhsWTJzZ1BDQkRTRVZEUzE5SlRsUkZVbFpCVENCMGFHVnVDaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sQ2lBZ0lDQmxibVFLSUNBZ0lBb2dJQ0FnYkdGemRFTm9aV05ySUQwZ1kzVnljbVZ1ZEZScGJXVUtJQ0FnSUd4dlkyRnNJRzF2Ym5OMFpYSkRiM1Z1ZENBOUlHZGxkRTF2Ym5OMFpYSkRiM1Z1ZENncENpQWdJQ0FLSUNBZ0lDMHRJRTl1YkhrZ2RISnBaMmRsY2lCaFkzUnBiMjRnZDJobGJpQmpiM1Z1ZENCamFHRnVaMlZ6Q2lBZ0lDQnBaaUJ0YjI1emRHVnlRMjkxYm5RZ2ZqMGdiR0Z6ZEUxdmJuTjBaWEpEYjNWdWRDQjBhR1Z1Q2lBZ0lDQWdJQ0FnYkdGemRFMXZibk4wWlhKRGIzVnVkQ0E5SUcxdmJuTjBaWEpEYjNWdWRBb2dJQ0FnSUNBZ0lISmxkSFZ5YmlCMGNuVmxDaUFnSUNCbGJtUUtJQ0FnSUFvZ0lDQWdjbVYwZFhKdUlHWmhiSE5sQ21WdVpBb0tMUzBnUVdOMGFXOXVJR1oxYm1OMGFXOXVJQ2htYjNJZ1RFVk5LUXBzYjJOaGJDQm1kVzVqZEdsdmJpQmhZM1JwYjI0b0tRb2dJQ0FnYkc5allXd2diVzl1YzNSbGNrTnZkVzUwSUQwZ2JHRnpkRTF2Ym5OMFpYSkRiM1Z1ZEFvZ0lDQWdDaUFnSUNCcFppQnRiMjV6ZEdWeVEyOTFiblFnUFQwZ01TQjBhR1Z1Q2lBZ0lDQWdJQ0FnYzNkcGRHTm9WRzlDWVc1a2IyeHBaWElvUWtGT1JFOU1TVVZTWDFOSlRrZE1SU2tLSUNBZ0lHVnNjMlZwWmlCdGIyNXpkR1Z5UTI5MWJuUWdQajBnTWlCMGFHVnVDaUFnSUNBZ0lDQWdjM2RwZEdOb1ZHOUNZVzVrYjJ4cFpYSW9Ra0ZPUkU5TVNVVlNYMDFWVEZSSktRb2dJQ0FnWlc1a0NpQWdJQ0F0TFNCRWJ5QnViM1JvYVc1bklHWnZjaUF3SUcxdmJuTjBaWEp6SUhSdklHRjJiMmxrSUhWdWJtVmpaWE56WVhKNUlITjNhWFJqYUdWekNtVnVaQW9LTFMwZ1JYaHdiM0owSUdadmNpQk1SVTBLY21WMGRYSnVJSHNLSUNBZ0lHTnZibVJtZFc1aklEMGdZMjl1WkdsMGFXOXVMQW9nSUNBZ1lXTjBhVzl1Wm5WdVl5QTlJR0ZqZEdsdmJncDkiLAp9[/CODE]

@aquietone I'd be happy to add this to the repo if you like once It's fully done.

For right now it functions as is without named detection (Comin soon.)
 
[CODE title="LEM - Innoruuk Plane of Hate Revisited"]cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiem9uZSJdID0gIiIsCiAgWyJjbGFzcyJdID0gIiIsCiAgWyJhbHdheXMiXSA9IGZhbHNlLAogfSwKIFsidHlwZSJdID0gImV2ZW50cyIsCiBbImNhdGVnb3J5Il0gPSAiIiwKIFsibmFtZSJdID0gIklubm9ydXVrRG9vbSIsCiBbInNpbmdsZWNvbW1hbmQiXSA9IGZhbHNlLAogWyJwYXR0ZXJuIl0gPSAiIyojWW91IGZlZWwgYSBzZW5zZSBvZiBkb29tIHVwb24geW91IyojIiwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ214dlkyRnNJR1oxYm1OMGFXOXVJRVYyWlc1MFgwUnZiMjBvS1FvZ0lDQWdjSEpwYm5Rb2JYRXVWRXhQTGsxbExrNWhiV1VvS1NBdUxpQWlJSGRwYkd3Z1oyVjBJSFJvWlNCamRYSmxJaWtLSUNBZ0lHMXhMbU50WkdZb0p5OWliM2h5SUhCaGRYTmxKeWtLSUNBZ0lHbG1JRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LU0E5UFNBaVFsSkVJaUIwYUdWdUNpQWdJQ0FnSUNBZ2JYRXVZMjFrS0NjdmRIZHBjM1FnYzNSdmNDY3BDaUFnSUNCbGJtUUtJQ0FnSUcxeExtTnRaQ2duTDJGMGRHRmpheUJ2Wm1ZbktRb2dJQ0FnYlhFdVpHVnNZWGtvTlRBcENpQWdJQ0J0Y1M1amJXUW9KeTl1WVhZZ2JHOWplWGg2SURNeE9TQXhNRFVnTVRRNUp5a0tJQ0FnSUcxeExtUmxiR0Y1S0RVd0tRb2dJQ0FnYlhFdVkyMWtLQ2N2Ym1GMklHeHZZM2w0ZWlBeU16TWdMVE1nTVRRNUp5a0tJQ0FnSUcxeExtUmxiR0Y1S0RVd0tRb2dJQ0FnYlhFdVkyMWtLQ2N2WW05NGNpQjFibkJoZFhObEp5a0taVzVrQ25KbGRIVnliaUI3WlhabGJuUm1kVzVqUFVWMlpXNTBYMFJ2YjIxOSIsCiBbImNvbW1hbmQiXSA9ICIiLAp9[/CODE]

I ran with 2 groups. Both groups had a bard so had Selos on. It runs to both fires to get cure. It uses mq2boxr to pause.

This worked for me to avoid dying to the Doom. Tried it once so use at own risk.
 
Last edited:
For anyone who ever used my endless mana resource for mages I made it a LEM version. Basically if your a mage it will get you mana back to full whenever you drop low.

Import String:
[CODE title="Import String"]cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogIFsiY2xhc3MiXSA9ICIiLAogfSwKIFsidHlwZSJdID0gImNvbmRpdGlvbnMiLAogWyJuYW1lIl0gPSAiTWFnZSAtIEVuZGxlc3MgTWFuYSIsCiBbImNhdGVnb3J5Il0gPSAiR2VuZXJhbCIsCiBbImNvZGUiXSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENnb3RMUzFBY21WMGRYSnVJR0p2YjJ4bFlXNGdRRkpsZEhWeWJuTWdkSEoxWlNCcFppQjBhR1VnWVdOMGFXOXVJSE5vYjNWc1pDQm1hWEpsTENCdmRHaGxjbmRwYzJVZ1ptRnNjMlV1Q214dlkyRnNJR1oxYm1OMGFXOXVJR052Ym1ScGRHbHZiaWdwQ2lBZ0lDQnNiMk5oYkNCdGVWOWpiR0Z6Y3lBOUlHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tRb2dJQ0FnYkc5allXd2diWGxmYldGdVlTQTlJRzF4TGxSTVR5NU5aUzVRWTNSTllXNWhLQ2tLSUNBZ0lHeHZZMkZzSUdOb1pXTnJYM0JoZFhObFpDQTlJRzF4TGxSTVR5NURWMVJPTGxCaGRYTmxaQ2dwQ2lBZ0lDQnNiMk5oYkNCdGJWOXpkR0YwZFhNZ1BTQnRjUzVVVEU4dVRIVmhMbE5qY21sd2RDZ25UVTFpY25WMFpTY3BMbE4wWVhSMWN5Z3BDaUFnSUNCeVpYUjFjbTRnYlhsZlkyeGhjM01nUFQwZ0owMUJSeWNnWVc1a0lHMTVYMjFoYm1FZ1BDQXlNQ0JoYm1RZ2JXMWZjM1JoZEhWeklINDlJQ2RTVlU1T1NVNUhKeUJoYm1RZ1kyaGxZMnRmY0dGMWMyVmtJRDA5SUdaaGJITmxDbVZ1WkFvS0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS0xTMGdSWFpsY25sMGFHbHVaeUJpWld4dmR5QnlkVzV6SUdsdWMybGtaU0JNUlUwbmN5QmhZM1JwYjI0b0tTQjNhR1Z1SUhSb1pTQmpiMjVrYVhScGIyNGdhWE1nYldWMENpMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENnb3RMU0JNYVdkb2RIZGxhV2RvZENCc2IyZG5aWElnS0hObGJHWXRZMjl1ZEdGcGJtVmtLUXBzYjJOaGJDQk9iM1JsSUQwZ2V5QndjbVZtYVhnZ1BTQW5UVzl1YzNSbGNrMWhibUVuTENCc2IyZHNaWFpsYkNBOUlDZHBibVp2SnlCOUNtWjFibU4wYVc5dUlFNXZkR1V1U1c1bWJ5aG1iWFFzSUM0dUxpa2djSEpwYm5Rb0tDZGNZV2RiSlhOZFhHRjRJQ2N1TG1adGRDazZabTl5YldGMEtFNXZkR1V1Y0hKbFptbDRMQ0F1TGk0cEtTQmxibVFLQ2kwdElGTjBZWFJsSUM4Z1kyOXVabWxuQ214dlkyRnNJSGR2Y210cGJtZFRkR0YwWlhNZ1BTQjdJRUZqZEdsMlpUMTBjblZsTENCRGIyOXNaRzkzYmoxMGNuVmxMQ0JTWlhOMGFXNW5QWFJ5ZFdVZ2ZRcHNiMk5oYkNCTmIyNXpkR1Z5VTNWdGJXOXVhVzVuTENCTmIyNXpkR1Z5VTNWdGJXOXVhVzVuVTNCbGJHd0tiRzlqWVd3Z1IyRjBhR1Z5VFdGdVlTd2dSMkYwYUdWeVRXRnVZVk53Wld4c0NteHZZMkZzSUZKbFkyeGhhVzFUWlhRc0lGSmxZMnhoYVcxSmRHVnRDbXh2WTJGc0lFMXBjMk5UY0dWc2JFZGxiU0E5SURnZ0xTMGdkWE5wYm1jZ1oyVnRJRGdLYkc5allXd2dTWE5OWlcxdmNtbDZhVzVuSUQwZ1ptRnNjMlVLYkc5allXd2daR2xrVTNWemNHVnVaRTFoYVc1UVpYUWdQU0JtWVd4elpTQXRMU0JPUlZjNklIUnlZV05ySUhkb1pYUm9aWElnZDJVZ1lXTjBkV0ZzYkhrZ2MzVnpjR1Z1WkdWa0lHRWdiV0ZwYmlCd1pYUWdkR2hwY3lCeWRXNEtDaTB0SUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdENpMHRJRWhsYkhCbGNuTUtMUzBnTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwS2JHOWpZV3dnWm5WdVkzUnBiMjRnUTJobFkydFFiSFZuYVc0b2NHeDFaMmx1S1FvZ0lDQWdhV1lnYm05MElHMXhMbFJNVHk1UWJIVm5hVzRvY0d4MVoybHVLU2dwSUhSb1pXNEtJQ0FnSUNBZ0lDQnRjUzVqYldSbUtDY3ZjM0YxWld4amFDQXZjR3gxWjJsdUlDVnpJRzV2WVhWMGJ5Y3NJSEJzZFdkcGJpa0tJQ0FnSUNBZ0lDQk9iM1JsTGtsdVptOG9KMXhoZHlWelhHRjRJRzV2ZENCa1pYUmxZM1JsWkM0Z1RHOWhaR2x1WitLQXBpY3NJSEJzZFdkcGJpa0tJQ0FnSUdWdVpBcGxibVFLQ2kwdElGTnBiWEJzWlNCdGIzWmxiV1Z1ZENCamFHVmphem9nYjI1c2VTQjViM1Z5SUdGMllYUmhjdUtBbVhNZ2JXOTBhVzl1TGdwc2IyTmhiQ0JtZFc1amRHbHZiaUJKYzAxdmRtbHVaeWdwQ2lBZ0lDQnlaWFIxY200Z2JYRXVWRXhQTGsxbExrMXZkbWx1WnlncElHOXlJQ2dvYlhFdVZFeFBMazFsTGxOd1pXVmtLQ2tnYjNJZ01Da2dQaUF3S1FwbGJtUUtDaTB0SUZkaGFYUWdkVzUwYVd3Z2QyWGlnSmwyWlNCaVpXVnVJRTVQVkNCdGIzWnBibWNnWm05eUlHRWdZMjl1ZEdsdWRXOTFjeUIzYVc1a2IzY2dLRzF6S1M0Z1RtOGdZWFIwWlcxd2RDQnNhVzFwZEM0S2JHOWpZV3dnWm5WdVkzUnBiMjRnVjJGcGRGTjBhV3hzS0cxcGJsOXRjeWtLSUNBZ0lHMXBibDl0Y3lBOUlHMXBibDl0Y3lCdmNpQTBNREFLSUNBZ0lHeHZZMkZzSUhOMGFXeHNVM1JoY25RZ1BTQnVhV3dLSUNBZ0lIZG9hV3hsSUhSeWRXVWdaRzhLSUNBZ0lDQWdJQ0JwWmlCSmMwMXZkbWx1WnlncElIUm9aVzRLSUNBZ0lDQWdJQ0FnSUNBZ2MzUnBiR3hUZEdGeWRDQTlJRzVwYkFvZ0lDQWdJQ0FnSUdWc2MyVUtJQ0FnSUNBZ0lDQWdJQ0FnYzNScGJHeFRkR0Z5ZENBOUlITjBhV3hzVTNSaGNuUWdiM0lnYlhFdVoyVjBkR2x0WlNncENpQWdJQ0FnSUNBZ0lDQWdJR2xtSUNodGNTNW5aWFIwYVcxbEtDa2dMU0J6ZEdsc2JGTjBZWEowS1NBK1BTQnRhVzVmYlhNZ2RHaGxiaUJ5WlhSMWNtNGdkSEoxWlNCbGJtUUtJQ0FnSUNBZ0lDQmxibVFLSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2cxTUNrS0lDQWdJR1Z1WkFwbGJtUUtDaTB0SUZKdlluVnpkQ0RpZ0p4aGJTQkpJR2x1SUdOdmJXSmhkRC9pZ0owZ1kyaGxZMnNLYkc5allXd2dablZ1WTNScGIyNGdTVzVEYjIxaVlYUW9LUW9nSUNBZ2JHOWpZV3dnWTNNZ1BTQjBiM04wY21sdVp5aHRjUzVVVEU4dVRXVXVRMjl0WW1GMFUzUmhkR1VvS1NCdmNpQW5KeWtLSUNBZ0lHbG1JR056SUg0OUlDY25JR0Z1WkNCamN6cDFjSEJsY2lncElEMDlJQ2REVDAxQ1FWUW5JSFJvWlc0Z2NtVjBkWEp1SUhSeWRXVWdaVzVrQ2lBZ0lDQnBaaUJ0Y1M1VVRFOHVUV1V1UTI5dFltRjBJR0Z1WkNCdGNTNVVURTh1VFdVdVEyOXRZbUYwS0NrZ2RHaGxiaUJ5WlhSMWNtNGdkSEoxWlNCbGJtUUtJQ0FnSUhKbGRIVnliaUJtWVd4elpRcGxibVFLQ214dlkyRnNJR1oxYm1OMGFXOXVJRU5vYjI5elpVRmlhV3hwZEhrb2MyVjBLUW9nSUNBZ2JHOWpZV3dnWTJodmMyVnVVM0JsYkd3c0lHaHBaMmhsYzNSTVpYWmxiQ0E5SUc1cGJDd2dNQW9nSUNBZ1ptOXlJRjhzSUc1aGJXVWdhVzRnYVhCaGFYSnpLSE5sZENrZ1pHOEtJQ0FnSUNBZ0lDQnNiMk5oYkNCeklEMGdiWEV1VkV4UExsTndaV3hzS0c1aGJXVXBDaUFnSUNBZ0lDQWdiRzlqWVd3Z2JIWnNMQ0J5WVc1cklEMGdjeTVNWlhabGJDZ3BMQ0J6TGxKaGJtdE9ZVzFsS0NrS0lDQWdJQ0FnSUNCcFppQnlZVzVySUdGdVpDQnRjUzVVVEU4dVRXVXVRbTl2YXloeVlXNXJLU2dwSUdGdVpDQnNkbXdnUGlCb2FXZG9aWE4wVEdWMlpXd2dkR2hsYmdvZ0lDQWdJQ0FnSUNBZ0lDQmphRzl6Wlc1VGNHVnNiQ0E5SUNodGNTNVVURTh1VFdVdVUzQmxiR3hTWVc1clEyRndLQ2tnUGlBeEtTQmhibVFnY3k1U1lXNXJUbUZ0WlNncElHOXlJSE11UW1GelpVNWhiV1VvS1FvZ0lDQWdJQ0FnSUNBZ0lDQm9hV2RvWlhOMFRHVjJaV3dnUFNCc2Rtd0tJQ0FnSUNBZ0lDQmxibVFLSUNBZ0lHVnVaQW9nSUNBZ2NtVjBkWEp1SUdOb2IzTmxibE53Wld4c0NtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdRMmh2YjNObFNYUmxiU2h6WlhRcENpQWdJQ0JtYjNJZ1h5d2dibUZ0WlNCcGJpQnBjR0ZwY25Nb2MyVjBLU0JrYndvZ0lDQWdJQ0FnSUdsbUlHMXhMbFJNVHk1R2FXNWtTWFJsYlVOdmRXNTBLRzVoYldVcEtDa2dQaUF3SUhSb1pXNGdjbVYwZFhKdUlHNWhiV1VnWlc1a0NpQWdJQ0JsYm1RS1pXNWtDZ290TFNCVGNHVnNiR0p2YjJzZ1pYWmxiblJ6SUNoeVpXZHBjM1JsY21Wa0lHbHVjMmxrWlNCaFkzUnBiMjRvS1NrS2JHOWpZV3dnWm5WdVkzUnBiMjRnUlhabGJuUmZRbVZuYVc1TlpXMXZjbWw2YVc1bktGOHNJRjhwSUVselRXVnRiM0pwZW1sdVp5QTlJSFJ5ZFdVZ1pXNWtDbXh2WTJGc0lHWjFibU4wYVc5dUlFVjJaVzUwWDBWdVpFMWxiVzl5YVhwcGJtY29YeXdnWHlrZ1NYTk5aVzF2Y21sNmFXNW5JRDBnWm1Gc2MyVWdaVzVrQ2dvdExTQkZibk4xY21VZ2MzQmxiR3dnYVhNZ2FXNGdZU0J6Y0dWamFXWnBZeUJuWlcwZ0tHSnNiMk5yYVc1bkxDQnVieUJoZEhSbGJYQjBJR3hwYldsMEtTNGdUMjVzZVNCemRHRnlkSE1nZDJobGJpQnpkR0YwYVc5dVlYSjVMZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQkZibk4xY21WVGNHVnNiRWx1UjJWdEtITndaV3hzVkc5TlpXMHNJR2RsYlNrS0lDQWdJR2RsYlNBOUlHZGxiU0J2Y2lCTmFYTmpVM0JsYkd4SFpXMEtJQ0FnSUhkb2FXeGxJSFJ5ZFdVZ1pHOEtJQ0FnSUNBZ0lDQnBaaUJ0Y1M1VVRFOHVUV1V1UjJWdEtITndaV3hzVkc5TlpXMHBLQ2tnUFQwZ1oyVnRJSFJvWlc0Z2NtVjBkWEp1SUdkbGJTQmxibVFLSUNBZ0lDQWdJQ0JzYjJOaGJDQnliaUE5SUcxeExsUk1UeTVUY0dWc2JDaHpjR1ZzYkZSdlRXVnRLUzVTWVc1clRtRnRaU2dwQ2lBZ0lDQWdJQ0FnYVdZZ2JtOTBJSEp1SUc5eUlHNXZkQ0J0Y1M1VVRFOHVUV1V1UW05dmF5aHliaWtvS1NCMGFHVnVDaUFnSUNBZ0lDQWdJQ0FnSUU1dmRHVXVTVzVtYnlnblEyRnVibTkwSUcxbGJXOXlhWHBsSUNodWIzUWdhVzRnWW05dmF5azZJQ1Z6Snl3Z2RHOXpkSEpwYm1jb2MzQmxiR3hVYjAxbGJTa3BDaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliZ29nSUNBZ0lDQWdJR1Z1WkFvZ0lDQWdJQ0FnSUdsbUlHNXZkQ0J0Y1M1VVRFOHVUV1V1UjJWdEtHZGxiU2tvS1NCaGJtUWdaMlZ0SUg0OUlFMXBjMk5UY0dWc2JFZGxiU0IwYUdWdUlHZGxiU0E5SUUxcGMyTlRjR1ZzYkVkbGJTQmxibVFLSUNBZ0lDQWdJQ0JYWVdsMFUzUnBiR3dvTmpBd0tRb2dJQ0FnSUNBZ0lFNXZkR1V1U1c1bWJ5Z25YR0ZuVFdWdGJXbHVaMXhoZUNBaUpYTWlJR2x1ZEc4Z1oyVnRJQ1ZrSnl3Z2NtNHNJR2RsYlNrS0lDQWdJQ0FnSUNCdGNTNWpiV1JtS0NjdmJXVnRjM0JsYkd3Z0pXUWdJaVZ6SWljc0lHZGxiU3dnY200cENpQWdJQ0FnSUNBZ2JYRXVaR1ZzWVhrb01qQXdNQ3dnWm5WdVkzUnBiMjRvS1NCeVpYUjFjbTRnU1hOTlpXMXZjbWw2YVc1bklHOXlJRzF4TGxSTVR5NU5aUzVIWlcwb1oyVnRLUzVPWVcxbEtDa2dQVDBnY200Z1pXNWtLUW9nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLREV3TURBd0xDQm1kVzVqZEdsdmJpZ3BJSEpsZEhWeWJpQnRjUzVVVEU4dVRXVXVSMlZ0S0dkbGJTa3VUbUZ0WlNncElEMDlJSEp1SUc5eUlHNXZkQ0JKYzAxbGJXOXlhWHBwYm1jZ1pXNWtLUW9nSUNBZ0lDQWdJR2xtSUcxeExsUk1UeTVOWlM1SFpXMG9aMlZ0S1M1T1lXMWxLQ2tnUFQwZ2NtNGdkR2hsYmlCeVpYUjFjbTRnWjJWdElHVnVaQW9nSUNBZ1pXNWtDbVZ1WkFvS0xTMGdVR1YwSUhCeWIzaHBiV2wwZVNCb1pXeHdaWEp6SUNoM2FYUm9JRzl3ZEdsdmJtRnNJSFJwYldWdmRYUWdkRzhnY0hKbGRtVnVkQ0JvWVc1bmN5a0tiRzlqWVd3Z1puVnVZM1JwYjI0Z1VHVjBUbVZoY2lodFlYaEVhWE4wS1NCeVpYUjFjbTRnS0cxeExsUk1UeTVOWlM1UVpYUXVSR2x6ZEdGdVkyVW9LU0J2Y2lBNU9UazVLU0E4UFNBb2JXRjRSR2x6ZENCdmNpQXhNaWtnWlc1a0NteHZZMkZzSUdaMWJtTjBhVzl1SUZkaGFYUlFaWFJPWldGeUtHMWhlRVJwYzNRc0lIUnBiV1Z2ZFhSZmJYTXBDaUFnSUNCdFlYaEVhWE4wSUQwZ2JXRjRSR2x6ZENCdmNpQXhNZ29nSUNBZ2JHOWpZV3dnYzNSaGNuUWdQU0J0Y1M1blpYUjBhVzFsS0NrS0lDQWdJSGRvYVd4bElIUnlkV1VnWkc4S0lDQWdJQ0FnSUNCcFppQW9iWEV1VkV4UExrMWxMbEJsZEM1SlJDZ3BJRzl5SURBcElEMDlJREFnZEdobGJpQnlaWFIxY200Z1ptRnNjMlVnWlc1a0NpQWdJQ0FnSUNBZ2FXWWdVR1YwVG1WaGNpaHRZWGhFYVhOMEtTQjBhR1Z1SUhKbGRIVnliaUIwY25WbElHVnVaQW9nSUNBZ0lDQWdJR2xtSUhScGJXVnZkWFJmYlhNZ1lXNWtJQ2h0Y1M1blpYUjBhVzFsS0NrZ0xTQnpkR0Z5ZENrZ1BqMGdkR2x0Wlc5MWRGOXRjeUIwYUdWdUlISmxkSFZ5YmlCUVpYUk9aV0Z5S0cxaGVFUnBjM1FwSUdWdVpBb2dJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEVXdLUW9nSUNBZ1pXNWtDbVZ1WkFvS0xTMGdVM1Z6Y0dWdVpDQndaWFFnZDJsMGFDQm1kV3hzSUhObGNYVmxibU5sSUdWMlpYSjVJSEJoYzNNdUNpMHRJRTl1YkhrZ2RYTmxJRU52VkVnZ1FVRWdLRGN3TlRBcElHbG1JSGRsSUdGeVpTQkpUaUJEVDAxQ1FWUXVDaTB0SUZKbGRIVnlibk1nVkZKVlJTQnZibXg1SUdsbUlIUm9aU0J3WlhRZ1pXNWtjeUIxY0NCemRYTndaVzVrWldRZ0tFbEVJRDA5SURBcExncHNiMk5oYkNCbWRXNWpkR2x2YmlCVGRYTndaVzVrVUhKcGJXRnllVkJsZEY5Q2JHOWphMmx1WnlncENpQWdJQ0JzYjJOaGJDQnZjbWxuU1VRZ1BTQnRjUzVVVEU4dVRXVXVVR1YwTGtsRUtDa2diM0lnTUFvZ0lDQWdhV1lnYjNKcFowbEVJRDA5SURBZ2RHaGxiaUJ5WlhSMWNtNGdabUZzYzJVZ1pXNWtJQzB0SUc1dmRHaHBibWNnZEc4Z2MzVnpjR1Z1WkFvS0lDQWdJRTV2ZEdVdVNXNW1ieWduVTNSdmNtbHVaeUJRWlhRZ0tFbEVJQ1Z6S1Njc0lIUnZjM1J5YVc1bktHOXlhV2RKUkNrcENnb2dJQ0FnZDJocGJHVWdLRzF4TGxSTVR5NU5aUzVRWlhRdVNVUW9LU0J2Y2lBd0tTQStJREFnWkc4S0lDQWdJQ0FnSUNBdExTQkdkV3hzSUhObGNYVmxibU5sT2lCbmFHOXNaQ0F0UGlCemNHVnNiR2h2YkdRZ0xUNGdZbUZqYXlBdFBpQlRkVzF0YjI0Z1EyOXRjR0Z1YVc5dUlDZ3hNakUxS1NBdFBpQW9RMjlVU0NCcFppQkpUaUJEVDAxQ1FWUXBJQzArSUhOMWMzQmxibVFLSUNBZ0lDQWdJQ0JYWVdsMFUzUnBiR3dvTkRBd0tRb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwzQmxkQ0JuYUc5c1pDQnZiaWNwSUNBZ0lEc2diWEV1WkdWc1lYa29NekF3S1FvZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDNCbGRDQnpjR1ZzYkdodmJHUWdiMjRuS1RzZ2JYRXVaR1ZzWVhrb016QXdLUW9nSUNBZ0lDQWdJRzF4TG1OdFpDZ25MM0JsZENCaVlXTnJKeWtnSUNBZ0lDQWdJRHNnYlhFdVpHVnNZWGtvTXpBd0tRb0tJQ0FnSUNBZ0lDQXRMU0JUZFcxdGIyNGdRMjl0Y0dGdWFXOXVJRkpKUjBoVUlFSkZSazlTUlNCemRYTndaVzVrYVc1bkxDQnBaaUJ5WldGa2VTQW9aRzl1NG9DWmRDQmliRzlqYXlCbWIzSWdRMFFwQ2lBZ0lDQWdJQ0FnYVdZZ2JYRXVWRXhQTGsxbExrRnNkRUZpYVd4cGRIbFNaV0ZrZVNneE1qRTFLU2dwSUc5eUlHMXhMbFJNVHk1TlpTNUJiSFJCWW1sc2FYUjVVbVZoWkhrb0oxTjFiVzF2YmlCRGIyMXdZVzVwYjI0bktTZ3BJSFJvWlc0S0lDQWdJQ0FnSUNBZ0lDQWdWMkZwZEZOMGFXeHNLRE13TUNrS0lDQWdJQ0FnSUNBZ0lDQWdiWEV1WTIxa0tDY3ZZV3gwSUdGamRDQXhNakUxSnlrS0lDQWdJQ0FnSUNBZ0lDQWdiWEV1WkdWc1lYa29NelV3TUN3Z1puVnVZM1JwYjI0b0tTQnlaWFIxY200Z2JtOTBJRzF4TGxSTVR5NU5aUzVEWVhOMGFXNW5Ma2xFS0NrZ1pXNWtLUW9nSUNBZ0lDQWdJQ0FnSUNCWFlXbDBVR1YwVG1WaGNpZ3hNaXdnTXpBd01Da0tJQ0FnSUNBZ0lDQmxibVFLQ2lBZ0lDQWdJQ0FnTFMwZ1QyNXNlU0JrYnlCRGIxUklJR2xtSUhkbElHRnlaU0JoWTNSMVlXeHNlU0JwYmlCamIyMWlZWFFLSUNBZ0lDQWdJQ0JwWmlCSmJrTnZiV0poZENncElHRnVaQ0J0Y1M1VVRFOHVUV1V1UVd4MFFXSnBiR2wwZVZKbFlXUjVLRGN3TlRBcEtDa2dkR2hsYmdvZ0lDQWdJQ0FnSUNBZ0lDQlhZV2wwVTNScGJHd29NekF3S1FvZ0lDQWdJQ0FnSUNBZ0lDQnRjUzVqYldSbUtDY3ZkR0Z5WjJWMElHbGtJQ1ZrSnl3Z2JYRXVWRXhQTGsxbExrbEVLQ2tnYjNJZ01Da0tJQ0FnSUNBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTWpBd0tRb2dJQ0FnSUNBZ0lDQWdJQ0JPYjNSbExrbHVabThvSjFWemFXNW5JRU52VkVnZ1FVRWdkRzhnZDJsd1pTQndaWEp6YjI1aGJDQmhaMmR5YnlBb2FXNGdZMjl0WW1GMEtTNG5LUW9nSUNBZ0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5aGJIUWdZV04wSURjd05UQW5LUW9nSUNBZ0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNnek5UQXdMQ0JtZFc1amRHbHZiaWdwSUhKbGRIVnliaUJ1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jdVNVUW9LU0JsYm1RcENpQWdJQ0FnSUNBZ1pXNWtDZ29nSUNBZ0lDQWdJQzB0SUVGMGRHVnRjSFFnZEc4Z2MzVnpjR1Z1WkFvZ0lDQWdJQ0FnSUZkaGFYUlRkR2xzYkNnME1EQXBDaUFnSUNBZ0lDQWdhV1lnYlhFdVZFeFBMazFsTGtGc2RFRmlhV3hwZEhsU1pXRmtlU2d4TnpZcEtDa2diM0lnYlhFdVZFeFBMazFsTGtGc2RFRmlhV3hwZEhsU1pXRmtlU2duVTNWemNHVnVaQ0JOYVc1cGIyNG5LU2dwSUhSb1pXNEtJQ0FnSUNBZ0lDQWdJQ0FnVG05MFpTNUpibVp2S0NkVGRYTndaVzVrYVc1bklFMXBibWx2YnVLQXBpY3BDaUFnSUNBZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDJGc2RDQmhZM1FnTVRjMkp5a0tJQ0FnSUNBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTlRBd0tRb2dJQ0FnSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2d6TURBd0xDQm1kVzVqZEdsdmJpZ3BJSEpsZEhWeWJpQnViM1FnYlhFdVZFeFBMazFsTGtOaGMzUnBibWN1U1VRb0tTQmxibVFwQ2lBZ0lDQWdJQ0FnWlc1a0Nnb2dJQ0FnSUNBZ0lHbG1JQ2h0Y1M1VVRFOHVUV1V1VUdWMExrbEVLQ2tnYjNJZ01Da2dQVDBnTUNCMGFHVnVDaUFnSUNBZ0lDQWdJQ0FnSUU1dmRHVXVTVzVtYnlnblVHVjBJSE4xYzNCbGJtUmxaQzRuS1FvZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2RISjFaUW9nSUNBZ0lDQWdJR1Z1WkFvS0lDQWdJQ0FnSUNBdExTQlNaV1J2SUhSb1pTQmxiblJwY21VZ2MyVnhkV1Z1WTJVZ2RXNTBhV3dnYzNWalkyVnpjeTRLSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2d5TURBcENpQWdJQ0JsYm1RS0NpQWdJQ0J5WlhSMWNtNGdLQ2h0Y1M1VVRFOHVUV1V1VUdWMExrbEVLQ2tnYjNJZ01Da2dQVDBnTUNrS1pXNWtDZ290TFNCRGIzSmxJRzFoYm1FZ2JHOXZjRG9nYzNWdGJXOXVJRzF2Ym5OMFpYSWdjR1YwSUNoblpXMGdPQ2tnSmlCeVpXTnNZV2x0SUhWdWRHbHNJRGsxSlNCdFlXNWhMZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQlNaV05zWVdsdFRXRnVZU2dwQ2lBZ0lDQk9iM1JsTGtsdVptOG9KMDFoYm1FZ1RHOXZjQ0JUZEdGeWRHVmtKeWtLSUNBZ0lHMXhMbU50WkNnbkwzTnhkV1ZzWTJnZ0wySmxaWEJ2Ym5SbGJHeHpJRzltWmljcENnb2dJQ0FnZDJocGJHVWdLRzF4TGxSTVR5NU5aUzVRWTNSTllXNWhLQ2tnYjNJZ01UQXdLU0E4SURrMUlHUnZDaUFnSUNBZ0lDQWdhV1lnYlhFdVZFeFBMa04xY25OdmNpNUpSQ2dwSUhSb1pXNEtJQ0FnSUNBZ0lDQWdJQ0FnYlhFdVkyMWtLQ2N2WVhWMGIybHVkbVZ1ZEc5eWVTY3BDaUFnSUNBZ0lDQWdJQ0FnSUcxeExtUmxiR0Y1S0RJd01EQXBDaUFnSUNBZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDJGMWRHOXBiblpsYm5SdmNua25LUW9nSUNBZ0lDQWdJR1Z1WkFvS0lDQWdJQ0FnSUNCcFppQW9iWEV1VkV4UExrMWxMbEJqZEUxaGJtRW9LU0J2Y2lBeE1EQXBJRHdnT0NCaGJtUWdiWEV1VkV4UExrMWxMbE53Wld4c1VtVmhaSGtvUjJGMGFHVnlUV0Z1WVZOd1pXeHNLU2dwSUhSb1pXNEtJQ0FnSUNBZ0lDQWdJQ0FnVjJGcGRGTjBhV3hzS0RRd01Da0tJQ0FnSUNBZ0lDQWdJQ0FnYlhFdVkyMWtaaWduTDJOaGMzUWdJaVZ6SWljc0lFZGhkR2hsY2sxaGJtRlRjR1ZzYkNrS0lDQWdJQ0FnSUNBZ0lDQWdiWEV1WkdWc1lYa29NakF3TURBc0lHWjFibU4wYVc5dUtDa2djbVYwZFhKdUlHMXhMbFJNVHk1TlpTNURZWE4wYVc1bkxrbEVLQ2tnUFQwZ2JtbHNJR1Z1WkNrS0NpQWdJQ0FnSUNBZ1pXeHpaV2xtSUNodGNTNVVURTh1VFdVdVEzVnljbVZ1ZEUxaGJtRW9LU0J2Y2lBd0tTQThJQ2h0Y1M1VVRFOHVVM0JsYkd3b1RXOXVjM1JsY2xOMWJXMXZibWx1WjFOd1pXeHNLUzVOWVc1aEtDa2diM0lnTUNrZ2RHaGxiZ29nSUNBZ0lDQWdJQ0FnSUNCcFppQnRjUzVVVEU4dVRXVXVVM1JoYm1ScGJtY29LU0JoYm1RZ2JtOTBJRzF4TGxSTVR5NU5aUzVEWVhOMGFXNW5Ma2xFS0NrZ2RHaGxiaUJ0Y1M1VVRFOHVUV1V1VTJsMEtDa2daVzVrQ2lBZ0lDQWdJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEWXdOVEFwQ2dvZ0lDQWdJQ0FnSUdWc2MyVUtJQ0FnSUNBZ0lDQWdJQ0FnYVdZZ2JYRXVWRXhQTGsxbExsTnBkSFJwYm1jb0tTQjBhR1Z1SUcxeExsUk1UeTVOWlM1VGRHRnVaQ2dwSUdWdVpBb2dJQ0FnSUNBZ0lDQWdJQ0J0Y1M1a1pXeGhlU2d5TlRBcENnb2dJQ0FnSUNBZ0lDQWdJQ0F0TFNCRmJuTjFjbVVnYzNCbGJHd2dhVzRnWjJWdElEZ0tJQ0FnSUNBZ0lDQWdJQ0FnYkc5allXd2dZV04wZFdGc1IyVnRJRDBnUlc1emRYSmxVM0JsYkd4SmJrZGxiU2hOYjI1emRHVnlVM1Z0Ylc5dWFXNW5VM0JsYkd3c0lFMXBjMk5UY0dWc2JFZGxiU2tLSUNBZ0lDQWdJQ0FnSUNBZ2FXWWdibTkwSUdGamRIVmhiRWRsYlNCMGFHVnVDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQk9iM1JsTGtsdVptOG9KME52ZFd4a0lHNXZkQ0JzYjJGa0lFMXZibk4wWlhJZ1UzVnRiVzl1YVc1bklHbHVkRzhnWjJWdElDVmtPeUJsZUdsMGFXNW5JRzFoYm1FZ2JHOXZjQzRuTENCTmFYTmpVM0JsYkd4SFpXMHBDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXdvZ0lDQWdJQ0FnSUNBZ0lDQmxibVFLQ2lBZ0lDQWdJQ0FnSUNBZ0lDMHRJRU5oYzNRZ1RXOXVjM1JsY2lCVGRXMXRiMjVwYm1jS0lDQWdJQ0FnSUNBZ0lDQWdWMkZwZEZOMGFXeHNLRFF3TUNrS0lDQWdJQ0FnSUNBZ0lDQWdhV1lnYlhFdVZFeFBMazFsTGxOd1pXeHNVbVZoWkhrb1RXOXVjM1JsY2xOMWJXMXZibWx1WjFOd1pXeHNLU2dwSUhSb1pXNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMXhMbU50WkdZb0p5OWpZWE4wSUNWa0p5d2dZV04wZFdGc1IyVnRLUW9nSUNBZ0lDQWdJQ0FnSUNCbGJtUUtJQ0FnSUNBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTnpBd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdibTkwSUcxeExsUk1UeTVOWlM1RFlYTjBhVzVuTGtsRUtDa2daVzVrS1FvZ0lDQWdJQ0FnSUNBZ0lDQnRjUzVrWld4aGVTZ3pNREFwQ2dvZ0lDQWdJQ0FnSUNBZ0lDQXRMU0JTWldOc1lXbHRJR2x0YldWa2FXRjBaV3g1SUdsbUlHRWdjR1YwSUdseklIVndDaUFnSUNBZ0lDQWdJQ0FnSUdsbUlDaHRjUzVVVEU4dVRXVXVVR1YwTGtsRUtDa2diM0lnTUNrZ1BpQXdJR0Z1WkNCU1pXTnNZV2x0U1hSbGJTQjBhR1Z1Q2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JYWVdsMFUzUnBiR3dvTWpBd0tRb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2JYRXVZMjFrWmlnbkwzVnpaV2wwWlcwZ0pYTW5MQ0JTWldOc1lXbHRTWFJsYlNrS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUcxeExtUmxiR0Y1S0RVd01Da0tJQ0FnSUNBZ0lDQWdJQ0FnWlc1a0NpQWdJQ0FnSUNBZ1pXNWtDZ29nSUNBZ0lDQWdJRzF4TG1SbGJHRjVLRFV3S1FvZ0lDQWdaVzVrQ2dvZ0lDQWdUbTkwWlM1SmJtWnZLQ2ROWVc1aElFeHZiM0FnUlc1a1pXUW5LUW9nSUNBZ0xTMGdabWx1WVd3Z1kyeGxZVzUxY0RvZ2FXWWdkR1Z0Y0NCd1pYUWdjM1JwYkd3Z2RYQXNJSEpsWTJ4aGFXMGdkVzUwYVd3Z1oyOXVaUW9nSUNBZ2QyaHBiR1VnS0cxeExsUk1UeTVOWlM1UVpYUXVTVVFvS1NCdmNpQXdLU0ErSURBZ1pHOEtJQ0FnSUNBZ0lDQnRjUzVqYldSbUtDY3ZkWE5sYVhSbGJTQWxjeWNzSUZKbFkyeGhhVzFKZEdWdEtRb2dJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEVXdNQ2tLSUNBZ0lHVnVaQXBsYm1RS0NpMHRJRWx1YVhRZ2MzQmxiR3h6TDJsMFpXMXpDbXh2WTJGc0lHWjFibU4wYVc5dUlFbHVhWFFvS1FvZ0lDQWdRMmhsWTJ0UWJIVm5hVzRvSjAxUk1saEJjM05wYzNRbktRb2dJQ0FnUTJobFkydFFiSFZuYVc0b0owMVJNa0ZrZGxCaGRHZ25LUW9nSUNBZ1EyaGxZMnRRYkhWbmFXNG9KMDFSTWsxdmRtVlZkR2xzY3ljcENpQWdJQ0JEYUdWamExQnNkV2RwYmlnblRWRXlRbTk0Y2ljcENnb2dJQ0FnVFc5dWMzUmxjbE4xYlcxdmJtbHVaeUE5SUhzS0lDQWdJQ0FnSUNBaVRXOXVjM1JsY2lCVGRXMXRiMjVwYm1jZ1dGWWlMQW9nSUNBZ0lDQWdJQ0pOYjI1emRHVnlJRk4xYlcxdmJtbHVaeUJZU1ZZaUxBb2dJQ0FnSUNBZ0lDSk5iMjV6ZEdWeUlGTjFiVzF2Ym1sdVp5QllTVWxKSWl3S0lDQWdJSDBLSUNBZ0lFMXZibk4wWlhKVGRXMXRiMjVwYm1kVGNHVnNiQ0E5SUVOb2IyOXpaVUZpYVd4cGRIa29UVzl1YzNSbGNsTjFiVzF2Ym1sdVp5a0tJQ0FnSUdsbUlHNXZkQ0JOYjI1emRHVnlVM1Z0Ylc5dWFXNW5VM0JsYkd3Z2RHaGxiZ29nSUNBZ0lDQWdJRTV2ZEdVdVNXNW1ieWduUVNCdGIyNXpkR1Z5SUhOMWJXMXZibWx1WnlCemNHVnNiQ0JwY3lCdWIzUWdZWFpoYVd4aFlteGxKeWtLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVS0lDQWdJR1Z1WkFvS0lDQWdJQzB0SUZWd1pHRjBaV1FnUjJGMGFHVnlJR3hwYm1VZ0tHbHVZMngxWkdWeklHeGxkbVZzSURFeU5Ta0tJQ0FnSUVkaGRHaGxjazFoYm1FZ1BTQjdDaUFnSUNBZ0lDQWdJa2RoZEdobGNpQmFaV0ZzSWl3S0lDQWdJQ0FnSUNBaVIyRjBhR1Z5SUZacFoyOXlJaXdLSUNBZ0lDQWdJQ0FpUjJGMGFHVnlJRkJ2ZEdWdVkza2lMQW9nSUNBZ2ZRb2dJQ0FnUjJGMGFHVnlUV0Z1WVZOd1pXeHNJRDBnUTJodmIzTmxRV0pwYkdsMGVTaEhZWFJvWlhKTllXNWhLUW9nSUNBZ2FXWWdibTkwSUVkaGRHaGxjazFoYm1GVGNHVnNiQ0IwYUdWdUNpQWdJQ0FnSUNBZ1RtOTBaUzVKYm1adktDZEJJR2RoZEdobGNpQnRZVzVoSUhOd1pXeHNJR2x6SUc1dmRDQmhkbUZwYkdGaWJHVW5LUW9nSUNBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlFvZ0lDQWdaVzVrQ2dvZ0lDQWdVbVZqYkdGcGJWTmxkQ0E5SUhzS0lDQWdJQ0FnSUNBaVUzUmhabVlnYjJZZ1JXeGxiV1Z1ZEdGc0lFMWhjM1JsY25rNklFVmhjblJvSWl3S0lDQWdJQ0FnSUNBaVUzUmhabVlnYjJZZ1JXeGxiV1Z1ZEdGc0lFMWhjM1JsY25rNklFWnBjbVVpTEFvZ0lDQWdJQ0FnSUNKVGRHRm1aaUJ2WmlCRmJHVnRaVzUwWVd3Z1RXRnpkR1Z5ZVRvZ1FXbHlJaXdLSUNBZ0lDQWdJQ0FpVTNSaFptWWdiMllnUld4bGJXVnVkR0ZzSUUxaGMzUmxjbms2SUZkaGRHVnlJaXdLSUNBZ0lDQWdJQ0FpUW5KdmIyMGdiMllnVkhKcGJHOXVJaXdLSUNBZ0lDQWdJQ0FpUVc1amFXVnVkQ0JVYjNKamFDQnZaaUJCYkc1aElpd0tJQ0FnSUNBZ0lDQWlSMlZ0YldWa0lFZHNiM1psY3lCdlppQkhkV2xzWlNJc0NpQWdJQ0FnSUNBZ0lrZHNiM1psY3lCdlppQkVZWEpySUZOMWJXMXZibWx1WnlJc0NpQWdJQ0FnSUNBZ0lsTm9iM1psYkNCdlppQlFiMjU2SWl3S0lDQWdJQ0FnSUNBaVUzUmxhVzRnYjJZZ1ZXeHBjM05oSWl3S0lDQWdJQ0FnSUNBaVZHOXlZMmdnYjJZZ1FXeHVZU0lzQ2lBZ0lDQjlDaUFnSUNCU1pXTnNZV2x0U1hSbGJTQTlJRU5vYjI5elpVbDBaVzBvVW1WamJHRnBiVk5sZENrS0lDQWdJR2xtSUc1dmRDQlNaV05zWVdsdFNYUmxiU0IwYUdWdUNpQWdJQ0FnSUNBZ1RtOTBaUzVKYm1adktDZE9ieUJ5WldOc1lXbHRJR2wwWlcwZ1ptOTFibVFnYVc0Z2FXNTJaVzUwYjNKNUp5a0tJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlVLSUNBZ0lHVnVaQW9LSUNBZ0lISmxkSFZ5YmlCMGNuVmxDbVZ1WkFvS0xTMGdUV0ZwYmlCeWIzVjBhVzVsSUNodFpYSm5aV1FnYVc1MGJ5Qk1SVTBnWVdOMGFXOXVLUXBzYjJOaGJDQm1kVzVqZEdsdmJpQlNkVzVOYjI1emRHVnlUV0Z1WVNncENpQWdJQ0JwWmlCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrZ2ZqMGdKMDFCUnljZ2RHaGxiZ29nSUNBZ0lDQWdJRTV2ZEdVdVNXNW1ieWduVFc5dWMzUmxjazFoYm1FZ2IyNXNlU0IzYjNKcmN5Qm1iM0lnVFdGblpTQmphR0Z5WVdOMFpYSnpKeWtLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdabUZzYzJVS0lDQWdJR1Z1WkFvZ0lDQWdhV1lnS0cxeExsUk1UeTVOWlM1UVkzUk5ZVzVoS0NrZ2IzSWdNVEF3S1NBK0lEazFJSFJvWlc0S0lDQWdJQ0FnSUNCT2IzUmxMa2x1Wm04b0owMWhibUVnYVhNZ2JtVmhjbXg1SUdaMWJHdzdJRzV2ZEdocGJtY2dkRzhnWkc4bktRb2dJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaUW9nSUNBZ1pXNWtDaUFnSUNCcFppQnViM1FnU1c1cGRDZ3BJSFJvWlc0S0lDQWdJQ0FnSUNCT2IzUmxMa2x1Wm04b0owbHVhWFJwWVd4cGVtRjBhVzl1SUhWdWMzVmpZMlZ6YzJaMWJDY3BDaUFnSUNBZ0lDQWdjbVYwZFhKdUlHWmhiSE5sQ2lBZ0lDQmxibVFLQ2lBZ0lDQnRjUzVqYldRb0p5OXpjWFZsYkdOb0lDOWtiMk52YlcxaGJtUWdMMkp2ZUhJZ2NHRjFjMlVuS1FvZ0lDQWdiWEV1WkdWc1lYa29NekF3S1FvZ0lDQWdiWEV1WTIxa0tDY3ZjM0YxWld4amFDQXZZWFIwWVdOcklHOW1aaWNwQ2dvZ0lDQWdMUzBnWTJ4bFlYSWdZM1Z5YzI5eUNpQWdJQ0IzYUdsc1pTQnRjUzVVVEU4dVEzVnljMjl5TGtsRUtDa2daRzhLSUNBZ0lDQWdJQ0J0Y1M1amJXUW9KeTloZFhSdmFXNTJaVzUwYjNKNUp5a0tJQ0FnSUNBZ0lDQnRjUzVrWld4aGVTZzFNREFwQ2lBZ0lDQmxibVFLQ2lBZ0lDQXRMU0JKWmlCM1pTQmhiSEpsWVdSNUlHaGhkbVVnWVNCdFlXbHVJSEJsZEN3Z2MzVnpjR1Z1WkNCcGRDQkdTVkpUVkNBb1lteHZZMnRwYm1jcElHRnVaQ0J5WlcxbGJXSmxjaUIwYUdGMElIZGxJR1JwWkM0S0lDQWdJR2xtSUNodGNTNVVURTh1VFdVdVVHVjBMa2xFS0NrZ2IzSWdNQ2tnUGlBd0lIUm9aVzRLSUNBZ0lDQWdJQ0JPYjNSbExrbHVabThvSjFCeWFXMWhjbmtnYldGdVlTQnRaWFJvYjJRZ0tIZHBkR2dnY0dWMEtTY3BDaUFnSUNBZ0lDQWdiRzlqWVd3Z2MzVnpjR1Z1WkdWa1Qwc2dQU0JUZFhOd1pXNWtVSEpwYldGeWVWQmxkRjlDYkc5amEybHVaeWdwQ2lBZ0lDQWdJQ0FnYVdZZ2JtOTBJSE4xYzNCbGJtUmxaRTlMSUhSb1pXNEtJQ0FnSUNBZ0lDQWdJQ0FnVG05MFpTNUpibVp2S0NkVmJtRmliR1VnZEc4Z2MzVnpjR1Z1WkNCd1pYUWdjMkZtWld4NU95QmhZbTl5ZEdsdVp5NG5LUW9nSUNBZ0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5emNYVmxiR05vSUM5a2IyTnZiVzFoYm1RZ0wySnZlSElnZFc1d1lYVnpaU2NwQ2lBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCbVlXeHpaUW9nSUNBZ0lDQWdJR1Z1WkFvZ0lDQWdJQ0FnSUdScFpGTjFjM0JsYm1STllXbHVVR1YwSUQwZ2RISjFaUW9nSUNBZ1pXeHpaUW9nSUNBZ0lDQWdJQzB0SUU1dkxYQmxkQ0JtWVd4c1ltRmphem9nWW5WcGJHUWdkRzhnT0NVZ2QybDBhQ0JIWVhSb1pYSWdiM0lnYzJsMGRHbHVad29nSUNBZ0lDQWdJRTV2ZEdVdVNXNW1ieWduVUhKcGJXRnllU0J0WVc1aElHMWxkR2h2WkNBb2JtOGdjR1YwS1NjcENpQWdJQ0FnSUNBZ2QyaHBiR1VnS0cxeExsUk1UeTVOWlM1UVkzUk5ZVzVoS0NrZ2IzSWdNQ2tnUENBNElHUnZDaUFnSUNBZ0lDQWdJQ0FnSUd4dlkyRnNJSEpoYm10T1lXMWxJRDBnYlhFdVZFeFBMbE53Wld4c0tFZGhkR2hsY2sxaGJtRlRjR1ZzYkNrdVVtRnVhMDVoYldVb0tRb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlCdGNTNVVURTh1VFdVdVUzQmxiR3hTWldGa2VTaHlZVzVyVG1GdFpTa29LU0IwYUdWdUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCWFlXbDBVM1JwYkd3b05EQXdLUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiWEV1WTIxa1ppZ25MMk5oYzNRZ0lpVnpJaWNzSUhKaGJtdE9ZVzFsS1FvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnYlhFdVpHVnNZWGtvTWpBd01EQXNJR1oxYm1OMGFXOXVLQ2tnY21WMGRYSnVJRzV2ZENCdGNTNVVURTh1VFdVdVEyRnpkR2x1Wnk1SlJDZ3BJR1Z1WkNrS0lDQWdJQ0FnSUNBZ0lDQWdaV3h6WldsbUlIZHZjbXRwYm1kVGRHRjBaWE5iYlhFdVZFeFBMazFsTGtOdmJXSmhkRk4wWVhSbEtDa2diM0lnSnlkZElIUm9aVzRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR2xtSUcxeExsUk1UeTVOWlM1VGRHRnVaR2x1WnlncElHRnVaQ0J1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jdVNVUW9LU0IwYUdWdUlHMXhMbFJNVHk1TlpTNVRhWFFvS1NCbGJtUUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEWXdOVEFwQ2lBZ0lDQWdJQ0FnSUNBZ0lHVnVaQW9nSUNBZ0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNneE5UQXBDaUFnSUNBZ0lDQWdaVzVrQ2lBZ0lDQmxibVFLQ2lBZ0lDQXRMU0JTZFc0Z2JXRnVZU0JzYjI5d0lDaHpkVzF0YjI0dmNtVmpiR0ZwYlNrS0lDQWdJRkpsWTJ4aGFXMU5ZVzVoS0NrS0NpQWdJQ0F0TFNCU1pYTjBiM0psSUcxaGFXNGdjR1YwSUU5T1RGa2dhV1lnZDJVZ2NISmxkbWx2ZFhOc2VTQnpkWE53Wlc1a1pXUWdhWFFnZEdocGN5QnlkVzRnS0hCeVpYWmxiblJ6SUdsdVptbHVhWFJsSUd4dmIzQWdZV1owWlhJZ1pHVmhkR2dwTGdvZ0lDQWdhV1lnWkdsa1UzVnpjR1Z1WkUxaGFXNVFaWFFnZEdobGJnb2dJQ0FnSUNBZ0lFNXZkR1V1U1c1bWJ5Z25VbVZ6ZEc5eWFXNW5JRzFoYVc0Z2NHVjBJQ2gxYm5OMWMzQmxibVJwYm1jcEp5a0tJQ0FnSUNBZ0lDQjNhR2xzWlNBb2JYRXVWRXhQTGsxbExsQmxkQzVKUkNncElHOXlJREFwSUQwOUlEQWdaRzhLSUNBZ0lDQWdJQ0FnSUNBZ1YyRnBkRk4wYVd4c0tEUXdNQ2tLSUNBZ0lDQWdJQ0FnSUNBZ2JYRXVZMjFrS0NjdllXeDBJR0ZqZENBeE56WW5LUW9nSUNBZ0lDQWdJQ0FnSUNCdGNTNWtaV3hoZVNnMk5UQXdMQ0JtZFc1amRHbHZiaWdwSUhKbGRIVnliaUJ1YjNRZ2JYRXVWRXhQTGsxbExrTmhjM1JwYm1jdVNVUW9LU0JsYm1RcENpQWdJQ0FnSUNBZ0lDQWdJRzF4TG1SbGJHRjVLRE13TUNrS0lDQWdJQ0FnSUNCbGJtUUtJQ0FnSUNBZ0lDQXRMU0JKWmlCaElFMXZibk4wWlhJZ1UzVnRiVzl1YVc1bklIZGhjbkpwYjNJZ2NHVjBJSEJ2Y0hCbFpDQnBibk4wWldGa0xDQnlaV05zWVdsdElHRnVaQ0IwY25rZ1lXZGhhVzR1Q2lBZ0lDQWdJQ0FnZDJocGJHVWdLRzF4TGxSTVR5NU5aUzVRWlhRdVEyeGhjM011VG1GdFpTZ3BJRzl5SUNjbktTQTlQU0FuVjJGeWNtbHZjaWNnWkc4S0lDQWdJQ0FnSUNBZ0lDQWdhV1lnVW1WamJHRnBiVWwwWlcwZ2RHaGxiZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdiWEV1WTIxa1ppZ25MM1Z6WldsMFpXMGdKWE1uTENCU1pXTnNZV2x0U1hSbGJTa0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEVXdNQ2tLSUNBZ0lDQWdJQ0FnSUNBZ1pXeHpaUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZbkpsWVdzS0lDQWdJQ0FnSUNBZ0lDQWdaVzVrQ2lBZ0lDQWdJQ0FnSUNBZ0lIZG9hV3hsSUNodGNTNVVURTh1VFdVdVVHVjBMa2xFS0NrZ2IzSWdNQ2tnUFQwZ01DQmtid29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdWMkZwZEZOMGFXeHNLRFF3TUNrS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUcxeExtTnRaQ2duTDJGc2RDQmhZM1FnTVRjMkp5a0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtEWTFNREFzSUdaMWJtTjBhVzl1S0NrZ2NtVjBkWEp1SUc1dmRDQnRjUzVVVEU4dVRXVXVRMkZ6ZEdsdVp5NUpSQ2dwSUdWdVpDa0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHMXhMbVJsYkdGNUtETXdNQ2tLSUNBZ0lDQWdJQ0FnSUNBZ1pXNWtDaUFnSUNBZ0lDQWdaVzVrQ2lBZ0lDQmxiSE5sQ2lBZ0lDQWdJQ0FnVG05MFpTNUpibVp2S0NkT2J5QnpkWE53Wlc1a1pXUWdiV0ZwYmlCd1pYUWdkRzhnY21WemRHOXlaU0FvYkdsclpXeDVJSE4wWVhKMFpXUWdkMmwwYUNCdWJ5QndaWFFwTGljcENpQWdJQ0JsYm1RS0NpQWdJQ0J0Y1M1a1pXeGhlU2d6TURBcENpQWdJQ0J0Y1M1amJXUW9KeTl3WlhRZ2FHOXNaQ2NwQ2lBZ0lDQnRjUzVrWld4aGVTZ3pNREFwQ2lBZ0lDQnRjUzVqYldRb0p5OXpjWFZsYkdOb0lDOWtiMk52YlcxaGJtUWdMMkp2ZUhJZ2RXNXdZWFZ6WlNjcENpQWdJQ0J0Y1M1a1pXeGhlU2d6TURBcENpQWdJQ0JPYjNSbExrbHVabThvSjAxaGJtRWdjbTkxZEdsdVpTQmpiMjF3YkdWMFpTNGdUV0ZuWlNCdFlXNWhJRzV2ZHpvZ1hHRm5KWE1uTENCMGIzTjBjbWx1WnlodGNTNVVURTh1VFdVdVVHTjBUV0Z1WVNncEtTa0tJQ0FnSUcxeExtTnRaQ2duTDNOeGRXVnNZMmdnTDJKbFpYQnZiblJsYkd4eklHOXVKeWtLSUNBZ0lISmxkSFZ5YmlCMGNuVmxDbVZ1WkFvS2JHOWpZV3dnWm5WdVkzUnBiMjRnWVdOMGFXOXVLQ2tLSUNBZ0lDMHRJRkpsWjJsemRHVnlJSE53Wld4c1ltOXZheUJsZG1WdWRITWdLRXhGVFMxellXWmxLUW9nSUNBZ2JYRXVaWFpsYm5Rb0owSmxaMmx1VFdWdGIzSnBlbWx1Wnljc0lDSWpLaU5DWldkcGJtNXBibWNnZEc4Z2JXVnRiM0pwZW1VZ0l6RWpMaTR1SXlvaklpd2dSWFpsYm5SZlFtVm5hVzVOWlcxdmNtbDZhVzVuS1FvZ0lDQWdiWEV1WlhabGJuUW9KMFpwYm1semFFMWxiVzl5YVhwcGJtY25MQ0FpSXlvaldXOTFJR2hoZG1VZ1ptbHVhWE5vWldRZ2JXVnRiM0pwZW1sdVp5QWpNU01qS2lNaUxDQkZkbVZ1ZEY5RmJtUk5aVzF2Y21sNmFXNW5LUW9nSUNBZ2JYRXVaWFpsYm5Rb0owRmliM0owVFdWdGIzSnBlbWx1Wnljc0lDSWpLaU5CWW05eWRHbHVaeUJ0WlcxdmNtbDZZWFJwYjI0Z2IyWWdjM0JsYkd3dUl5b2pJaXdnUlhabGJuUmZSVzVrVFdWdGIzSnBlbWx1WnlrS0NpQWdJQ0JzYjJOaGJDQnZheXdnWlhKeUlEMGdjR05oYkd3b1VuVnVUVzl1YzNSbGNrMWhibUVwQ2lBZ0lDQnBaaUJ1YjNRZ2Iyc2dkR2hsYmlCT2IzUmxMa2x1Wm04b0oxeGhja1Z5Y205eU9seGhlQ0FsY3ljc0lIUnZjM1J5YVc1bktHVnljaWtwSUdWdVpBcGxibVFLQ25KbGRIVnliaUI3WTI5dVpHWjFibU05WTI5dVpHbDBhVzl1TENCaFkzUnBiMjVtZFc1alBXRmpkR2x2Ym4wSyIsCn0=[/CODE]

[CODE lang="Lua" title="LEM Endless Mana"]local mq = require('mq')

---@return boolean @Returns true if the action should fire, otherwise false.
local function condition()
local my_class = mq.TLO.Me.Class.ShortName()
local my_mana = mq.TLO.Me.PctMana()
local check_paused = mq.TLO.CWTN.Paused()
local mm_status = mq.TLO.Lua.Script('MMbrute').Status()
return my_class == 'MAG' and my_mana < 20 and mm_status ~= 'RUNNING' and check_paused == false
end

-----------------------------------------------------------------------
-- Everything below runs inside LEM's action() when the condition is met
-----------------------------------------------------------------------

-- Lightweight logger (self-contained)
local Note = { prefix = 'MonsterMana', loglevel = 'info' }
function Note.Info(fmt, ...) print(('\ag[%s]\ax '..fmt):format(Note.prefix, ...)) end

-- State / config
local workingStates = { Active=true, Cooldown=true, Resting=true }
local MonsterSummoning, MonsterSummoningSpell
local GatherMana, GatherManaSpell
local ReclaimSet, ReclaimItem
local MiscSpellGem = 8 -- using gem 8
local IsMemorizing = false
local didSuspendMainPet = false -- NEW: track whether we actually suspended a main pet this run

-- -----------------------------
-- Helpers
-- -----------------------------
local function CheckPlugin(plugin)
if not mq.TLO.Plugin(plugin)() then
mq.cmdf('/squelch /plugin %s noauto', plugin)
Note.Info('\aw%s\ax not detected. Loading…', plugin)
end
end

-- Simple movement check: only your avatar’s motion.
local function IsMoving()
return mq.TLO.Me.Moving() or ((mq.TLO.Me.Speed() or 0) > 0)
end

-- Wait until we’ve been NOT moving for a continuous window (ms). No attempt limit.
local function WaitStill(min_ms)
min_ms = min_ms or 400
local stillStart = nil
while true do
if IsMoving() then
stillStart = nil
else
stillStart = stillStart or mq.gettime()
if (mq.gettime() - stillStart) >= min_ms then return true end
end
mq.delay(50)
end
end

-- Robust “am I in combat?” check
local function InCombat()
local cs = tostring(mq.TLO.Me.CombatState() or '')
if cs ~= '' and cs:upper() == 'COMBAT' then return true end
if mq.TLO.Me.Combat and mq.TLO.Me.Combat() then return true end
return false
end

local function ChooseAbility(set)
local chosenSpell, highestLevel = nil, 0
for _, name in ipairs(set) do
local s = mq.TLO.Spell(name)
local lvl, rank = s.Level(), s.RankName()
if rank and mq.TLO.Me.Book(rank)() and lvl > highestLevel then
chosenSpell = (mq.TLO.Me.SpellRankCap() > 1) and s.RankName() or s.BaseName()
highestLevel = lvl
end
end
return chosenSpell
end

local function ChooseItem(set)
for _, name in ipairs(set) do
if mq.TLO.FindItemCount(name)() > 0 then return name end
end
end

-- Spellbook events (registered inside action())
local function Event_BeginMemorizing(_, _) IsMemorizing = true end
local function Event_EndMemorizing(_, _) IsMemorizing = false end

-- Ensure spell is in a specific gem (blocking, no attempt limit). Only starts when stationary.
local function EnsureSpellInGem(spellToMem, gem)
gem = gem or MiscSpellGem
while true do
if mq.TLO.Me.Gem(spellToMem)() == gem then return gem end
local rn = mq.TLO.Spell(spellToMem).RankName()
if not rn or not mq.TLO.Me.Book(rn)() then
Note.Info('Cannot memorize (not in book): %s', tostring(spellToMem))
return
end
if not mq.TLO.Me.Gem(gem)() and gem ~= MiscSpellGem then gem = MiscSpellGem end
WaitStill(600)
Note.Info('\agMemming\ax "%s" into gem %d', rn, gem)
mq.cmdf('/memspell %d "%s"', gem, rn)
mq.delay(2000, function() return IsMemorizing or mq.TLO.Me.Gem(gem).Name() == rn end)
mq.delay(10000, function() return mq.TLO.Me.Gem(gem).Name() == rn or not IsMemorizing end)
if mq.TLO.Me.Gem(gem).Name() == rn then return gem end
end
end

-- Pet proximity helpers (with optional timeout to prevent hangs)
local function PetNear(maxDist) return (mq.TLO.Me.Pet.Distance() or 9999) <= (maxDist or 12) end
local function WaitPetNear(maxDist, timeout_ms)
maxDist = maxDist or 12
local start = mq.gettime()
while true do
if (mq.TLO.Me.Pet.ID() or 0) == 0 then return false end
if PetNear(maxDist) then return true end
if timeout_ms and (mq.gettime() - start) >= timeout_ms then return PetNear(maxDist) end
mq.delay(50)
end
end

-- Suspend pet with full sequence every pass.
-- Only use CoTH AA (7050) if we are IN COMBAT.
-- Returns TRUE only if the pet ends up suspended (ID == 0).
local function SuspendPrimaryPet_Blocking()
local origID = mq.TLO.Me.Pet.ID() or 0
if origID == 0 then return false end -- nothing to suspend

Note.Info('Storing Pet (ID %s)', tostring(origID))

while (mq.TLO.Me.Pet.ID() or 0) > 0 do
-- Full sequence: ghold -> spellhold -> back -> Summon Companion (1215) -> (CoTH if IN COMBAT) -> suspend
WaitStill(400)
mq.cmd('/pet ghold on') ; mq.delay(300)
mq.cmd('/pet spellhold on'); mq.delay(300)
mq.cmd('/pet back') ; mq.delay(300)

-- Summon Companion RIGHT BEFORE suspending, if ready (don’t block for CD)
if mq.TLO.Me.AltAbilityReady(1215)() or mq.TLO.Me.AltAbilityReady('Summon Companion')() then
WaitStill(300)
mq.cmd('/alt act 1215')
mq.delay(3500, function() return not mq.TLO.Me.Casting.ID() end)
WaitPetNear(12, 3000)
end

-- Only do CoTH if we are actually in combat
if InCombat() and mq.TLO.Me.AltAbilityReady(7050)() then
WaitStill(300)
mq.cmdf('/target id %d', mq.TLO.Me.ID() or 0)
mq.delay(200)
Note.Info('Using CoTH AA to wipe personal aggro (in combat).')
mq.cmd('/alt act 7050')
mq.delay(3500, function() return not mq.TLO.Me.Casting.ID() end)
end

-- Attempt to suspend
WaitStill(400)
if mq.TLO.Me.AltAbilityReady(176)() or mq.TLO.Me.AltAbilityReady('Suspend Minion')() then
Note.Info('Suspending Minion…')
mq.cmd('/alt act 176')
mq.delay(500)
mq.delay(3000, function() return not mq.TLO.Me.Casting.ID() end)
end

if (mq.TLO.Me.Pet.ID() or 0) == 0 then
Note.Info('Pet suspended.')
return true
end

-- Redo the entire sequence until success.
mq.delay(200)
end

return ((mq.TLO.Me.Pet.ID() or 0) == 0)
end

-- Core mana loop: summon monster pet (gem 8) & reclaim until 95% mana.
local function ReclaimMana()
Note.Info('Mana Loop Started')
mq.cmd('/squelch /beepontells off')

while (mq.TLO.Me.PctMana() or 100) < 95 do
if mq.TLO.Cursor.ID() then
mq.cmd('/autoinventory')
mq.delay(2000)
mq.cmd('/autoinventory')
end

if (mq.TLO.Me.PctMana() or 100) < 8 and mq.TLO.Me.SpellReady(GatherManaSpell)() then
WaitStill(400)
mq.cmdf('/cast "%s"', GatherManaSpell)
mq.delay(20000, function() return mq.TLO.Me.Casting.ID() == nil end)

elseif (mq.TLO.Me.CurrentMana() or 0) < (mq.TLO.Spell(MonsterSummoningSpell).Mana() or 0) then
if mq.TLO.Me.Standing() and not mq.TLO.Me.Casting.ID() then mq.TLO.Me.Sit() end
mq.delay(6050)

else
if mq.TLO.Me.Sitting() then mq.TLO.Me.Stand() end
mq.delay(250)

-- Ensure spell in gem 8
local actualGem = EnsureSpellInGem(MonsterSummoningSpell, MiscSpellGem)
if not actualGem then
Note.Info('Could not load Monster Summoning into gem %d; exiting mana loop.', MiscSpellGem)
break
end

-- Cast Monster Summoning
WaitStill(400)
if mq.TLO.Me.SpellReady(MonsterSummoningSpell)() then
mq.cmdf('/cast %d', actualGem)
end
mq.delay(7000, function() return not mq.TLO.Me.Casting.ID() end)
mq.delay(300)

-- Reclaim immediately if a pet is up
if (mq.TLO.Me.Pet.ID() or 0) > 0 and ReclaimItem then
WaitStill(200)
mq.cmdf('/useitem %s', ReclaimItem)
mq.delay(500)
end
end

mq.delay(50)
end

Note.Info('Mana Loop Ended')
-- final cleanup: if temp pet still up, reclaim until gone
while (mq.TLO.Me.Pet.ID() or 0) > 0 do
mq.cmdf('/useitem %s', ReclaimItem)
mq.delay(500)
end
end

-- Init spells/items
local function Init()
CheckPlugin('MQ2XAssist')
CheckPlugin('MQ2AdvPath')
CheckPlugin('MQ2MoveUtils')
CheckPlugin('MQ2Boxr')

MonsterSummoning = {
"Monster Summoning XV",
"Monster Summoning XIV",
"Monster Summoning XIII",
}
MonsterSummoningSpell = ChooseAbility(MonsterSummoning)
if not MonsterSummoningSpell then
Note.Info('A monster summoning spell is not available')
return false
end

-- Updated Gather line (includes level 125)
GatherMana = {
"Gather Zeal",
"Gather Vigor",
"Gather Potency",
}
GatherManaSpell = ChooseAbility(GatherMana)
if not GatherManaSpell then
Note.Info('A gather mana spell is not available')
return false
end

ReclaimSet = {
"Staff of Elemental Mastery: Earth",
"Staff of Elemental Mastery: Fire",
"Staff of Elemental Mastery: Air",
"Staff of Elemental Mastery: Water",
"Broom of Trilon",
"Ancient Torch of Alna",
"Gemmed Gloves of Guile",
"Gloves of Dark Summoning",
"Shovel of Ponz",
"Stein of Ulissa",
"Torch of Alna",
}
ReclaimItem = ChooseItem(ReclaimSet)
if not ReclaimItem then
Note.Info('No reclaim item found in inventory')
return false
end

return true
end

-- Main routine (merged into LEM action)
local function RunMonsterMana()
if mq.TLO.Me.Class.ShortName() ~= 'MAG' then
Note.Info('MonsterMana only works for Mage characters')
return false
end
if (mq.TLO.Me.PctMana() or 100) > 95 then
Note.Info('Mana is nearly full; nothing to do')
return false
end
if not Init() then
Note.Info('Initialization unsuccessful')
return false
end

mq.cmd('/squelch /docommand /boxr pause')
mq.delay(300)
mq.cmd('/squelch /attack off')

-- clear cursor
while mq.TLO.Cursor.ID() do
mq.cmd('/autoinventory')
mq.delay(500)
end

-- If we already have a main pet, suspend it FIRST (blocking) and remember that we did.
if (mq.TLO.Me.Pet.ID() or 0) > 0 then
Note.Info('Primary mana method (with pet)')
local suspendedOK = SuspendPrimaryPet_Blocking()
if not suspendedOK then
Note.Info('Unable to suspend pet safely; aborting.')
mq.cmd('/squelch /docommand /boxr unpause')
return false
end
didSuspendMainPet = true
else
-- No-pet fallback: build to 8% with Gather or sitting
Note.Info('Primary mana method (no pet)')
while (mq.TLO.Me.PctMana() or 0) < 8 do
local rankName = mq.TLO.Spell(GatherManaSpell).RankName()
if mq.TLO.Me.SpellReady(rankName)() then
WaitStill(400)
mq.cmdf('/cast "%s"', rankName)
mq.delay(20000, function() return not mq.TLO.Me.Casting.ID() end)
elseif workingStates[mq.TLO.Me.CombatState() or ''] then
if mq.TLO.Me.Standing() and not mq.TLO.Me.Casting.ID() then mq.TLO.Me.Sit() end
mq.delay(6050)
end
mq.delay(150)
end
end

-- Run mana loop (summon/reclaim)
ReclaimMana()

-- Restore main pet ONLY if we previously suspended it this run (prevents infinite loop after death).
if didSuspendMainPet then
Note.Info('Restoring main pet (unsuspending)')
while (mq.TLO.Me.Pet.ID() or 0) == 0 do
WaitStill(400)
mq.cmd('/alt act 176')
mq.delay(6500, function() return not mq.TLO.Me.Casting.ID() end)
mq.delay(300)
end
-- If a Monster Summoning warrior pet popped instead, reclaim and try again.
while (mq.TLO.Me.Pet.Class.Name() or '') == 'Warrior' do
if ReclaimItem then
mq.cmdf('/useitem %s', ReclaimItem)
mq.delay(500)
else
break
end
while (mq.TLO.Me.Pet.ID() or 0) == 0 do
WaitStill(400)
mq.cmd('/alt act 176')
mq.delay(6500, function() return not mq.TLO.Me.Casting.ID() end)
mq.delay(300)
end
end
else
Note.Info('No suspended main pet to restore (likely started with no pet).')
end

mq.delay(300)
mq.cmd('/pet hold')
mq.delay(300)
mq.cmd('/squelch /docommand /boxr unpause')
mq.delay(300)
Note.Info('Mana routine complete. Mage mana now: \ag%s', tostring(mq.TLO.Me.PctMana()))
mq.cmd('/squelch /beepontells on')
return true
end

local function action()
-- Register spellbook events (LEM-safe)
mq.event('BeginMemorizing', "#*#Beginning to memorize #1#...#*#", Event_BeginMemorizing)
mq.event('FinishMemorizing', "#*#You have finished memorizing #1##*#", Event_EndMemorizing)
mq.event('AbortMemorizing', "#*#Aborting memorization of spell.#*#", Event_EndMemorizing)

local ok, err = pcall(RunMonsterMana)
if not ok then Note.Info('\arError:\ax %s', tostring(err)) end
end

return {condfunc=condition, actionfunc=action}
[/CODE]
 
Here is a Conditional Lua I run in my LEM. Its has any mana user request a mod rod from a random mage in you raid. It will request level appropriate type. Also checks if you have one and will not ask unless you do not. It has anti spam were it only ask once a min and wont ask if you have one. One its used they ask for a new one. You can change the request time to longer if you want and the message you send.

Lua:
cmV0dXJuIHsKIFsidHlwZSJdID0gImNvbmRpdGlvbnMiLAogWyJjYXRlZ29yeSJdID0gIkdlbmVyYWwiLAogWyJuYW1lIl0gPSAiTW9kUm9kIiwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ2dvdExTQkVieUJ1YjNRZ1pXUnBkQ0IwYUdseklHbG1JR052Ym1ScGRHbHZiZ3BwWmlCdWIzUWdjR0ZqYTJGblpTNXNiMkZrWldSYkoyVjJaVzUwY3lkZElIUm9aVzRLSUNBZ0lIQnlhVzUwS0NkVWFHbHpJSE5qY21sd2RDQnBjeUJwYm5SbGJtUmxaQ0IwYnlCaVpTQnBiWEJ2Y25SbFpDQjBieUJNZFdFZ1JYWmxiblFnVFdGdVlXZGxjaUFvVEVWTktTNGdWSEo1SUNKY1lTMTBMMngxWVNCeWRXNGdiR1Z0WEdFdGVDSW5LUXBsYm1RS0NpMHRJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMEtMUzBnUTA5T1JrbEhDaTB0SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDBLQ2kwdElFMWhibUV0ZFhOcGJtY2dZMnhoYzNObGN5QW9ZbUZ5WkNCbGVHTnNkV1JsWkNrS2JHOWpZV3dnYldGdVlWOWpiR0Z6YzJWeklEMGdld29nSUNBZ1EweFNQWFJ5ZFdVc0lFUlNWVDEwY25WbExDQlRTRTA5ZEhKMVpTd2dUa1ZEUFhSeWRXVXNJRmRKV2oxMGNuVmxMQ0JOUVVjOWRISjFaU3dnUlU1RFBYUnlkV1VzQ2lBZ0lDQkNVMVE5ZEhKMVpTd2dVRUZNUFhSeWRXVXNJRk5JUkQxMGNuVmxMQ0JTVGtjOWRISjFaUXA5Q2dvdExTQlNiMlFnY0hKdlozSmxjM05wYjI0Z1lua2diR1YyWld3S2JHOWpZV3dnY205a1gzUmhZbXhsSUQwZ2V3b2dJQ0FnZTJ4bGRtVnNQVFEwTENBZ2JtRnRaVDBpVTNWdGJXOXVaV1E2SUUxdlpIVnNZWFJwYm1jZ1VtOWtJbjBzQ2lBZ0lDQjdiR1YyWld3OU5UWXNJQ0J1WVcxbFBTSlNiMlFnYjJZZ1RYbHpkR2xqWVd3Z1ZISmhibk4yWlhKblpXNWpaU0o5TEFvZ0lDQWdlMnhsZG1Wc1BUY3lMQ0FnYm1GdFpUMGlWMkZ1WkNCdlppQkZiR1Z0Wlc1MFlXd2dWSEpoYm5OMlpYSm5aVzVqWlNKOUxBb2dJQ0FnZTJ4bGRtVnNQVGMzTENBZ2JtRnRaVDBpVW05a0lHOW1JRkJ5YVcxbElGUnlZVzV6ZG1WeVoyVnVZMlVpZlN3S0lDQWdJSHRzWlhabGJEMDRNaXdnSUc1aGJXVTlJbEp2WkNCdlppQkZkR2hsY21WaGJDQlVjbUZ1YzNabGNtZGxibU5sSW4wc0NpQWdJQ0I3YkdWMlpXdzlPRGNzSUNCdVlXMWxQU0pTYjJRZ2IyWWdVM0JsWTNSeVlXd2dWSEpoYm5OMlpYSm5aVzVqWlNKOUxBb2dJQ0FnZTJ4bGRtVnNQVGt5TENBZ2JtRnRaVDBpVW05a0lHOW1JRUZ5WTJGdVpTQlVjbUZ1YzNabGNtZGxibU5sSW4wc0NpQWdJQ0I3YkdWMlpXdzlPVGNzSUNCdVlXMWxQU0pYWVc1a0lHOW1JRkJvWVc1MFlYTnRZV3dnVFc5a2RXeGhkR2x2YmlKOUxBb2dJQ0FnZTJ4bGRtVnNQVEV3TWl3Z2JtRnRaVDBpVjJGdVpDQnZaaUJRWld4aFoybGpJRTF2WkhWc1lYUnBiMjRpZlN3S0lDQWdJSHRzWlhabGJEMHhNRGNzSUc1aGJXVTlJbGRoYm1RZ2IyWWdRWEpqY205dWFYUmxJRTF2WkhWc1lYUnBiMjRpZlN3S0lDQWdJSHRzWlhabGJEMHhNVElzSUc1aGJXVTlJbGRoYm1RZ2IyWWdVbVZ6ZEd4bGMzTWdUVzlrZFd4aGRHbHZiaUo5TEFvZ0lDQWdlMnhsZG1Wc1BURXhOeXdnYm1GdFpUMGlVMmxqYTJ4bElHOW1JRlZ0WW5KaGJDQk5iMlIxYkdGMGFXOXVJbjBzQ2lBZ0lDQjdiR1YyWld3OU1USXlMQ0J1WVcxbFBTSlNiMlFnYjJZZ1NHVnliMmxqSUUxdlpIVnNZWFJwYjI0aWZTd0tmUW9LTFMwZ1UzQmhiU0J3Y21WMlpXNTBhVzl1SUhObGRIUnBibWR6Q214dlkyRnNJSEpsY1hWbGMzUmZaR1ZzWVhrZ1BTQTJNREF3TUNBdExTQTJNQ0J6WldOdmJtUnpDbXh2WTJGc0lHeGhjM1JmY21WeGRXVnpkRjkwYVcxbElEMGdNQXBzYjJOaGJDQnRZV2RsWDJsdVpHVjRJRDBnTVFvS0xTMGdQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBRb3RMU0JJUlV4UVJWSlRDaTB0SUQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDBLQ214dlkyRnNJR1oxYm1OMGFXOXVJR2x6WDIxaGJtRmZZMnhoYzNNb0tRb2dJQ0FnY21WMGRYSnVJRzFoYm1GZlkyeGhjM05sYzF0dGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NsZElHOXlJR1poYkhObENtVnVaQW9LYkc5allXd2dablZ1WTNScGIyNGdaMlYwWDNSaGNtZGxkRjl5YjJRb0tRb2dJQ0FnYkc5allXd2diWGxmYkdWMlpXd2dQU0J0Y1M1VVRFOHVUV1V1VEdWMlpXd29LU0J2Y2lBeENpQWdJQ0JzYjJOaGJDQmphRzl6Wlc0Z1BTQnliMlJmZEdGaWJHVmJNVjB1Ym1GdFpRb2dJQ0FnWm05eUlGOHNaVzUwY25rZ2FXNGdhWEJoYVhKektISnZaRjkwWVdKc1pTa2daRzhLSUNBZ0lDQWdJQ0JwWmlCdGVWOXNaWFpsYkNBK1BTQmxiblJ5ZVM1c1pYWmxiQ0IwYUdWdUNpQWdJQ0FnSUNBZ0lDQWdJR05vYjNObGJpQTlJR1Z1ZEhKNUxtNWhiV1VLSUNBZ0lDQWdJQ0JsYkhObENpQWdJQ0FnSUNBZ0lDQWdJR0p5WldGckNpQWdJQ0FnSUNBZ1pXNWtDaUFnSUNCbGJtUUtJQ0FnSUhKbGRIVnliaUJqYUc5elpXNEtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJvWVhOZmNtOWtLQ2tLSUNBZ0lISmxkSFZ5YmlCdGNTNVVURTh1Um1sdVpFbDBaVzFEYjNWdWRDaG5aWFJmZEdGeVoyVjBYM0p2WkNncEtTZ3BJRDRnTUFwbGJtUUtDbXh2WTJGc0lHWjFibU4wYVc5dUlHZGxkRjl0WVdkcFkybGhibk1vS1FvZ0lDQWdiRzlqWVd3Z2JXRm5hV05wWVc1eklEMGdlMzBLSUNBZ0lHbG1JRzF4TGxSTVR5NVNZV2xrTGsxbGJXSmxjbk1vS1NBK0lEQWdkR2hsYmdvZ0lDQWdJQ0FnSUdadmNpQnBJRDBnTVN3Z2JYRXVWRXhQTGxKaGFXUXVUV1Z0WW1WeWN5Z3BJR1J2Q2lBZ0lDQWdJQ0FnSUNBZ0lHeHZZMkZzSUcxbGJXSmxjaUE5SUcxeExsUk1UeTVTWVdsa0xrMWxiV0psY2locEtRb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlCdFpXMWlaWElvS1NCaGJtUWdiV1Z0WW1WeUxrTnNZWE56TGxOb2IzSjBUbUZ0WlNncElEMDlJQ0pOUVVjaUlIUm9aVzRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJoWW14bExtbHVjMlZ5ZENodFlXZHBZMmxoYm5Nc0lHMWxiV0psY2k1RGJHVmhiazVoYldVb0tTa0tJQ0FnSUNBZ0lDQWdJQ0FnWlc1a0NpQWdJQ0FnSUNBZ1pXNWtDaUFnSUNCbGJtUUtJQ0FnSUhKbGRIVnliaUJ0WVdkcFkybGhibk1LWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCeVpYRjFaWE4wWDNKdlpDZ3BDaUFnSUNCc2IyTmhiQ0J0WVdkcFkybGhibk1nUFNCblpYUmZiV0ZuYVdOcFlXNXpLQ2tLSUNBZ0lHbG1JQ050WVdkcFkybGhibk1nUFQwZ01DQjBhR1Z1Q2lBZ0lDQWdJQ0FnTFMwZ1RtOGdiV0ZuYVdOcFlXNXpMQ0JrYnlCdWIzUm9hVzVuSUNod2NtVjJaVzUwY3lCemNHRnRLUW9nSUNBZ0lDQWdJSEpsZEhWeWJnb2dJQ0FnWlc1a0NpQWdJQ0JwWmlCdFlXZGxYMmx1WkdWNElENGdJMjFoWjJsamFXRnVjeUIwYUdWdUlHMWhaMlZmYVc1a1pYZ2dQU0F4SUdWdVpBb2dJQ0FnYkc5allXd2diV0ZuWlNBOUlHMWhaMmxqYVdGdWMxdHRZV2RsWDJsdVpHVjRYUW9nSUNBZ2JXRm5aVjlwYm1SbGVDQTlJRzFoWjJWZmFXNWtaWGdnS3lBeENnb2dJQ0FnYlhFdVkyMWtaaWduTDNSbGJHd2dKWE1nU1NCdVpXVmtJR0VnVFc5a0lGSnZaQ0JRYkhvbkxDQnRZV2RsS1FvZ0lDQWdjSEpwYm5Rb2MzUnlhVzVuTG1admNtMWhkQ2dpVW1WeGRXVnpkR1ZrSUNWeklHWnliMjBnSlhNdUlpd2daMlYwWDNSaGNtZGxkRjl5YjJRb0tTd2diV0ZuWlNrcENpQWdJQ0JzWVhOMFgzSmxjWFZsYzNSZmRHbHRaU0E5SUcxeExtZGxkSFJwYldVb0tRcGxibVFLQ2kwdElEMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwS0xTMGdURVZOSUVWT1ZGSlpVRTlKVGxSVENpMHRJRDA5UFQwOVBUMDlQVDA5UFQwOVBUMDlQVDA5UFQwOVBUMEtDbXh2WTJGc0lHWjFibU4wYVc5dUlHOXVYMnh2WVdRb0tRb2dJQ0FnY0hKcGJuUW9JbEp2WkNCeVpYRjFaWE4wSUdOdmJtUnBkR2x2YmlCc2IyRmtaV1F1SWlrS1pXNWtDZ290TFMxQWNtVjBkWEp1SUdKdmIyeGxZVzRLYkc5allXd2dablZ1WTNScGIyNGdZMjl1WkdsMGFXOXVLQ2tLSUNBZ0lHbG1JRzV2ZENCcGMxOXRZVzVoWDJOc1lYTnpLQ2tnZEdobGJpQnlaWFIxY200Z1ptRnNjMlVnWlc1a0NpQWdJQ0JwWmlCb1lYTmZjbTlrS0NrZ2RHaGxiaUJ5WlhSMWNtNGdabUZzYzJVZ1pXNWtDaUFnSUNCc2IyTmhiQ0J0WVdkcFkybGhibk1nUFNCblpYUmZiV0ZuYVdOcFlXNXpLQ2tLSUNBZ0lHbG1JQ050WVdkcFkybGhibk1nUFQwZ01DQjBhR1Z1SUhKbGRIVnliaUJtWVd4elpTQmxibVFnTFMwZ2NISmxkbVZ1ZEhNZ2MzQmhiU0JwWmlCdWJ5Qk5RVWNnYVc0Z2NtRnBaQW9nSUNBZ2JHOWpZV3dnYm05M0lEMGdiWEV1WjJWMGRHbHRaU2dwQ2lBZ0lDQnBaaUJ1YjNjZ0xTQnNZWE4wWDNKbGNYVmxjM1JmZEdsdFpTQStQU0J5WlhGMVpYTjBYMlJsYkdGNUlIUm9aVzRLSUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlFvZ0lDQWdaVzVrQ2lBZ0lDQnlaWFIxY200Z1ptRnNjMlVLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCaFkzUnBiMjRvS1FvZ0lDQWdjbVZ4ZFdWemRGOXliMlFvS1FwbGJtUUtDbkpsZEhWeWJpQjdiMjVzYjJGa1BXOXVYMnh2WVdRc0lHTnZibVJtZFc1alBXTnZibVJwZEdsdmJpd2dZV04wYVc5dVpuVnVZejFoWTNScGIyNTlDZz09IiwKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKfQ==

Lua:
local mq = require('mq')

-- Do not edit this if condition
if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

-- =========================
-- CONFIG
-- =========================

-- Mana-using classes (bard excluded)
local mana_classes = {
    CLR=true, DRU=true, SHM=true, NEC=true, WIZ=true, MAG=true, ENC=true,
    BST=true, PAL=true, SHD=true, RNG=true
}

-- Rod progression by level
local rod_table = {
    {level=44,  name="Summoned: Modulating Rod"},
    {level=56,  name="Rod of Mystical Transvergence"},
    {level=72,  name="Wand of Elemental Transvergence"},
    {level=77,  name="Rod of Prime Transvergence"},
    {level=82,  name="Rod of Ethereal Transvergence"},
    {level=87,  name="Rod of Spectral Transvergence"},
    {level=92,  name="Rod of Arcane Transvergence"},
    {level=97,  name="Wand of Phantasmal Modulation"},
    {level=102, name="Wand of Pelagic Modulation"},
    {level=107, name="Wand of Arcronite Modulation"},
    {level=112, name="Wand of Restless Modulation"},
    {level=117, name="Sickle of Umbral Modulation"},
    {level=122, name="Rod of Heroic Modulation"},
}

-- Spam prevention settings
local request_delay = 60000 -- 60 seconds
local last_request_time = 0
local mage_index = 1

-- =========================
-- HELPERS
-- =========================

local function is_mana_class()
    return mana_classes[mq.TLO.Me.Class.ShortName()] or false
end

local function get_target_rod()
    local my_level = mq.TLO.Me.Level() or 1
    local chosen = rod_table[1].name
    for _,entry in ipairs(rod_table) do
        if my_level >= entry.level then
            chosen = entry.name
        else
            break
        end
    end
    return chosen
end

local function has_rod()
    return mq.TLO.FindItemCount(get_target_rod())() > 0
end

local function get_magicians()
    local magicians = {}
    if mq.TLO.Raid.Members() > 0 then
        for i = 1, mq.TLO.Raid.Members() do
            local member = mq.TLO.Raid.Member(i)
            if member() and member.Class.ShortName() == "MAG" then
                table.insert(magicians, member.CleanName())
            end
        end
    end
    return magicians
end

local function request_rod()
    local magicians = get_magicians()
    if #magicians == 0 then
        -- No magicians, do nothing (prevents spam)
        return
    end
    if mage_index > #magicians then mage_index = 1 end
    local mage = magicians[mage_index]
    mage_index = mage_index + 1

    mq.cmdf('/tell %s I need a Mod Rod Plz', mage)
    print(string.format("Requested %s from %s.", get_target_rod(), mage))
    last_request_time = mq.gettime()
end

-- =========================
-- LEM ENTRYPOINTS
-- =========================

local function on_load()
    print("Rod request condition loaded.")
end

---@return boolean
local function condition()
    if not is_mana_class() then return false end
    if has_rod() then return false end
    local magicians = get_magicians()
    if #magicians == 0 then return false end -- prevents spam if no MAG in raid
    local now = mq.gettime()
    if now - last_request_time >= request_delay then
        return true
    end
    return false
end

local function action()
    request_rod()
end

return {onload=on_load, condfunc=condition, actionfunc=action}
 
LEMS for the Echo of Hate group mission in Spite for the Unfocused achievement. These are based off emotes posted on EQResource, but I have not personally experienced every one to verify the text. I run these lems on one toon that is doing the mission for them to go to the proper place and hit the required switch.

North Switch:
Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fTm9ydGhTd2l0Y2giLAogWyJ0eXBlIl0gPSAiZXZlbnRzIiwKIFsicGF0dGVybiJdID0gIiMqI1RoZSBFY2hvIHN0YXJ0cyB0byBnYXRoZXIgYWxsIG9mIGl0cyBzZWxmIGxvYXRoaW5nIGFuZCBmb2N1c2VzIGl0IGludG8gb25lIG9mIHRoZSBtYWdpY2FsIHN0b25lcy4jKiMiLAogWyJjb2RlIl0gPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ290TFNCRWJ5QnViM1FnWldScGRDQjBhR2x6SUdsbUlHTnZibVJwZEdsdmJncHBaaUJ1YjNRZ2NHRmphMkZuWlM1c2IyRmtaV1JiSjJWMlpXNTBjeWRkSUhSb1pXNEtJQ0FnSUhCeWFXNTBLQ2RVYUdseklITmpjbWx3ZENCcGN5QnBiblJsYm1SbFpDQjBieUJpWlNCcGJYQnZjblJsWkNCMGJ5Qk1kV0VnUlhabGJuUWdUV0Z1WVdkbGNpQW9URVZOS1M0Z1ZISjVJQ0pjWVMxMEwyeDFZU0J5ZFc0Z2JHVnRYR0V0ZUNJbktRcGxibVFLQ214dlkyRnNJR1oxYm1OMGFXOXVJRzl1WDJ4dllXUW9LUW9nSUNBZ0xTMGdVR1Z5Wm05eWJTQmhibmtnYVc1cGRHbGhiQ0J6WlhSMWNDQm9aWEpsSUhkb1pXNGdkR2hsSUdWMlpXNTBJR2x6SUd4dllXUmxaQzRLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ0lIQnlhVzUwS0cxeExsUk1UeTVOWlM1T1lXMWxLQ2tnTGk0Z0lrNXZjblJvSUZOM2FYUmphQ0JGYlc5MFpTQm9ZVzVrYkdsdVp5NHVMaUlwQ2lBZ0lDQnRjUzVqYldSbUtDY3ZKWE1nY0dGMWMyVWdiMjRuTENCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrcENpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyNG5LUW9nSUNBZ2FXWWdiWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BJRDA5SUNKQ1VrUWlJSFJvWlc0S0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5MGQybHpkQ0J6ZEc5d0p5a0tJQ0FnSUdWdVpBb2dJQ0FnYlhFdVkyMWtLQ2N2WVhSMFlXTnJJRzltWmljcENpQWdJQ0J0Y1M1a1pXeGhlU2d5TlRBcENpQWdJQ0J0Y1M1amJXUW9KeTl1WVhZZ2JHOWplWGdnTVRneUlDMDFPQ2NwQ2lBZ0lDQnRjUzVrWld4aGVTZ3hNREFzSUdaMWJtTjBhVzl1S0NrZ2NtVjBkWEp1SUcxeExsUk1UeTVPWVhZdVFXTjBhWFpsS0NrZ1pXNWtLUW9nSUNBZ2JYRXVaR1ZzWVhrb01UVXdNREFzSUdaMWJtTjBhVzl1S0NrZ2NtVjBkWEp1SUc1dmRDQnRjUzVVVEU4dVRtRjJMa0ZqZEdsMlpTZ3BJR1Z1WkNrS0lDQWdJRzF4TG1OdFpDZ25MMlJ2YjNKMFlYSm5aWFFuS1FvZ0lDQWdiWEV1WkdWc1lYa29NekF3TUNrS0lDQWdJRzF4TG1OdFpDZ25MMk5zYVdOcklHeGxablFnWkc5dmNpY3BDaUFnSUNCdGNTNWtaV3hoZVNneU1EQXdLUW9nSUNBZ2JYRXVZMjFrS0NjdmJYRndJRzltWmljcENpQWdJQ0J0Y1M1amJXUm1LQ2N2SlhNZ2NHRjFjMlVnYjJabUp5d2diWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BLUXBsYm1RS0NuSmxkSFZ5YmlCN2IyNXNiMkZrUFc5dVgyeHZZV1FzSUdWMlpXNTBablZ1WXoxbGRtVnVkRjlvWVc1a2JHVnlmUT09IiwKIFsiY2F0ZWdvcnkiXSA9ICIiLAogWyJjb21tYW5kIl0gPSAiIiwKfQ==

East Switch:
Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fRWFzdFN3aXRjaCIsCiBbInR5cGUiXSA9ICJldmVudHMiLAogWyJwYXR0ZXJuIl0gPSAiIyojVGhlIEVjaG8gYnVybnMgd2l0aCBoYXRyZWQgb2YgdGhlIHdlYWsgYW5kIGZvY3VzZXMgaXQgaW50byBvbmUgb2YgdGhlIG1hZ2ljYWwgc3RvbmVzLiMqIyIsCiBbImNvZGUiXSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENnb3RMU0JFYnlCdWIzUWdaV1JwZENCMGFHbHpJR2xtSUdOdmJtUnBkR2x2YmdwcFppQnViM1FnY0dGamEyRm5aUzVzYjJGa1pXUmJKMlYyWlc1MGN5ZGRJSFJvWlc0S0lDQWdJSEJ5YVc1MEtDZFVhR2x6SUhOamNtbHdkQ0JwY3lCcGJuUmxibVJsWkNCMGJ5QmlaU0JwYlhCdmNuUmxaQ0IwYnlCTWRXRWdSWFpsYm5RZ1RXRnVZV2RsY2lBb1RFVk5LUzRnVkhKNUlDSmNZUzEwTDJ4MVlTQnlkVzRnYkdWdFhHRXRlQ0luS1FwbGJtUUtDbXh2WTJGc0lHWjFibU4wYVc5dUlHOXVYMnh2WVdRb0tRb2dJQ0FnTFMwZ1VHVnlabTl5YlNCaGJua2dhVzVwZEdsaGJDQnpaWFIxY0NCb1pYSmxJSGRvWlc0Z2RHaGxJR1YyWlc1MElHbHpJR3h2WVdSbFpDNEtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJsZG1WdWRGOW9ZVzVrYkdWeUtDa0tJQ0FnSUhCeWFXNTBLRzF4TGxSTVR5NU5aUzVPWVcxbEtDa2dMaTRnSWtWaGMzUWdVM2RwZEdOb0lFVnRiM1JsSUdoaGJtUnNhVzVuTGk0dUlpa0tJQ0FnSUcxeExtTnRaR1lvSnk4bGN5QndZWFZ6WlNCdmJpY3NJRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LU2tLSUNBZ0lHMXhMbU50WkNnbkwyMXhjQ0J2YmljcENpQWdJQ0JwWmlCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrZ1BUMGdJa0pTUkNJZ2RHaGxiZ29nSUNBZ0lDQWdJRzF4TG1OdFpDZ25MM1IzYVhOMElITjBiM0FuS1FvZ0lDQWdaVzVrQ2lBZ0lDQnRjUzVqYldRb0p5OWhkSFJoWTJzZ2IyWm1KeWtLSUNBZ0lHMXhMbVJsYkdGNUtESTFNQ2tLSUNBZ0lHMXhMbU50WkNnbkwyNWhkaUJzYjJONWVDQTVOeUF0TVRVd0p5a0tJQ0FnSUcxeExtUmxiR0Y1S0RFd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdiWEV1VkV4UExrNWhkaTVCWTNScGRtVW9LU0JsYm1RcENpQWdJQ0J0Y1M1a1pXeGhlU2d4TlRBd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdibTkwSUcxeExsUk1UeTVPWVhZdVFXTjBhWFpsS0NrZ1pXNWtLUW9nSUNBZ2JYRXVZMjFrS0NjdlpHOXZjblJoY21kbGRDY3BDaUFnSUNCdGNTNWtaV3hoZVNnek1EQXdLUW9nSUNBZ2JYRXVZMjFrS0NjdlkyeHBZMnNnYkdWbWRDQmtiMjl5SnlrS0lDQWdJRzF4TG1SbGJHRjVLREl3TURBcENpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyWm1KeWtLSUNBZ0lHMXhMbU50WkdZb0p5OGxjeUJ3WVhWelpTQnZabVluTENCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrcENtVnVaQW9LY21WMGRYSnVJSHR2Ym14dllXUTliMjVmYkc5aFpDd2daWFpsYm5SbWRXNWpQV1YyWlc1MFgyaGhibVJzWlhKOSIsCiBbImNhdGVnb3J5Il0gPSAiIiwKIFsiY29tbWFuZCJdID0gIiIsCn0=

South Switch:
Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fU291dGhTd2l0Y2giLAogWyJ0eXBlIl0gPSAiZXZlbnRzIiwKIFsicGF0dGVybiJdID0gIiMqI1RoZSBFY2hvIHJvaWxzIHdpdGggaGF0cmVkIGZvciBhbGwgdGhhdCBhcmUgbm90IGl0IGFuZCBmb2N1c2VzIGl0IGludG8gb25lIG9mIHRoZSBtYWdpY2FsIHN0b25lcy4jKiMiLAogWyJjb2RlIl0gPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ290TFNCRWJ5QnViM1FnWldScGRDQjBhR2x6SUdsbUlHTnZibVJwZEdsdmJncHBaaUJ1YjNRZ2NHRmphMkZuWlM1c2IyRmtaV1JiSjJWMlpXNTBjeWRkSUhSb1pXNEtJQ0FnSUhCeWFXNTBLQ2RVYUdseklITmpjbWx3ZENCcGN5QnBiblJsYm1SbFpDQjBieUJpWlNCcGJYQnZjblJsWkNCMGJ5Qk1kV0VnUlhabGJuUWdUV0Z1WVdkbGNpQW9URVZOS1M0Z1ZISjVJQ0pjWVMxMEwyeDFZU0J5ZFc0Z2JHVnRYR0V0ZUNJbktRcGxibVFLQ214dlkyRnNJR1oxYm1OMGFXOXVJRzl1WDJ4dllXUW9LUW9nSUNBZ0xTMGdVR1Z5Wm05eWJTQmhibmtnYVc1cGRHbGhiQ0J6WlhSMWNDQm9aWEpsSUhkb1pXNGdkR2hsSUdWMlpXNTBJR2x6SUd4dllXUmxaQzRLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ0lIQnlhVzUwS0cxeExsUk1UeTVOWlM1T1lXMWxLQ2tnTGk0Z0lsTnZkWFJvSUZOM2FYUmphQ0JGYlc5MFpTQm9ZVzVrYkdsdVp5NHVMaUlwQ2lBZ0lDQnRjUzVqYldSbUtDY3ZKWE1nY0dGMWMyVWdiMjRuTENCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrcENpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyNG5LUW9nSUNBZ2FXWWdiWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BJRDA5SUNKQ1VrUWlJSFJvWlc0S0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5MGQybHpkQ0J6ZEc5d0p5a0tJQ0FnSUdWdVpBb2dJQ0FnYlhFdVkyMWtLQ2N2WVhSMFlXTnJJRzltWmljcENpQWdJQ0J0Y1M1a1pXeGhlU2d5TlRBcENpQWdJQ0J0Y1M1amJXUW9KeTl1WVhZZ2JHOWplWGdnTVNBdE5UY25LUW9nSUNBZ2JYRXVaR1ZzWVhrb01UQXdMQ0JtZFc1amRHbHZiaWdwSUhKbGRIVnliaUJ0Y1M1VVRFOHVUbUYyTGtGamRHbDJaU2dwSUdWdVpDa0tJQ0FnSUcxeExtUmxiR0Y1S0RFMU1EQXdMQ0JtZFc1amRHbHZiaWdwSUhKbGRIVnliaUJ1YjNRZ2JYRXVWRXhQTGs1aGRpNUJZM1JwZG1Vb0tTQmxibVFwQ2lBZ0lDQnRjUzVqYldRb0p5OWtiMjl5ZEdGeVoyVjBKeWtLSUNBZ0lHMXhMbVJsYkdGNUtETXdNREFwQ2lBZ0lDQnRjUzVqYldRb0p5OWpiR2xqYXlCc1pXWjBJR1J2YjNJbktRb2dJQ0FnYlhFdVpHVnNZWGtvTWpBd01Da0tJQ0FnSUcxeExtTnRaQ2duTDIxeGNDQnZabVluS1FvZ0lDQWdiWEV1WTIxa1ppZ25MeVZ6SUhCaGRYTmxJRzltWmljc0lHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tTa0taVzVrQ2dweVpYUjFjbTRnZTI5dWJHOWhaRDF2Ymw5c2IyRmtMQ0JsZG1WdWRHWjFibU05WlhabGJuUmZhR0Z1Wkd4bGNuMD0iLAogWyJjYXRlZ29yeSJdID0gIiIsCiBbImNvbW1hbmQiXSA9ICIiLAp9

West Switch:
Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fV2VzdFN3aXRjaCIsCiBbInR5cGUiXSA9ICJldmVudHMiLAogWyJwYXR0ZXJuIl0gPSAiIyojVGhlIEVjaG8gZ2xhcmVzIHdpdGggcmFnZSBhdCBhbGwgb2YgaXRzIG9wcG9uZW50cyBhbmQgZm9jdXNlcyBpdCBpbnRvIG9uZSBvZiB0aGUgbWFnaWNhbCBzdG9uZXMuIyojIiwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ2dvdExTQkVieUJ1YjNRZ1pXUnBkQ0IwYUdseklHbG1JR052Ym1ScGRHbHZiZ3BwWmlCdWIzUWdjR0ZqYTJGblpTNXNiMkZrWldSYkoyVjJaVzUwY3lkZElIUm9aVzRLSUNBZ0lIQnlhVzUwS0NkVWFHbHpJSE5qY21sd2RDQnBjeUJwYm5SbGJtUmxaQ0IwYnlCaVpTQnBiWEJ2Y25SbFpDQjBieUJNZFdFZ1JYWmxiblFnVFdGdVlXZGxjaUFvVEVWTktTNGdWSEo1SUNKY1lTMTBMMngxWVNCeWRXNGdiR1Z0WEdFdGVDSW5LUXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUc5dVgyeHZZV1FvS1FvZ0lDQWdMUzBnVUdWeVptOXliU0JoYm5rZ2FXNXBkR2xoYkNCelpYUjFjQ0JvWlhKbElIZG9aVzRnZEdobElHVjJaVzUwSUdseklHeHZZV1JsWkM0S1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmxkbVZ1ZEY5b1lXNWtiR1Z5S0NrS0lDQWdJSEJ5YVc1MEtHMXhMbFJNVHk1TlpTNU9ZVzFsS0NrZ0xpNGdJbGRsYzNRZ1UzZHBkR05vSUVWdGIzUmxJR2hoYm1Sc2FXNW5MaTR1SWlrS0lDQWdJRzF4TG1OdFpHWW9KeThsY3lCd1lYVnpaU0J2Ymljc0lHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tTa0tJQ0FnSUcxeExtTnRaQ2duTDIxeGNDQnZiaWNwQ2lBZ0lDQnBaaUJ0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2tnUFQwZ0lrSlNSQ0lnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwzUjNhWE4wSUhOMGIzQW5LUW9nSUNBZ1pXNWtDaUFnSUNCdGNTNWpiV1FvSnk5aGRIUmhZMnNnYjJabUp5a0tJQ0FnSUcxeExtUmxiR0Y1S0RJMU1Da0tJQ0FnSUcxeExtTnRaQ2duTDI1aGRpQnNiMk41ZUNBek16Y2dNVE13SnlrS0lDQWdJRzF4TG1SbGJHRjVLREV3TUN3Z1puVnVZM1JwYjI0b0tTQnlaWFIxY200Z2JYRXVWRXhQTGs1aGRpNUJZM1JwZG1Vb0tTQmxibVFwQ2lBZ0lDQnRjUzVrWld4aGVTZ3hOVEF3TUN3Z1puVnVZM1JwYjI0b0tTQnlaWFIxY200Z2JtOTBJRzF4TGxSTVR5NU9ZWFl1UVdOMGFYWmxLQ2tnWlc1a0tRb2dJQ0FnYlhFdVkyMWtLQ2N2Wkc5dmNuUmhjbWRsZENjcENpQWdJQ0J0Y1M1a1pXeGhlU2d6TURBd0tRb2dJQ0FnYlhFdVkyMWtLQ2N2WTJ4cFkyc2diR1ZtZENCa2IyOXlKeWtLSUNBZ0lHMXhMbVJsYkdGNUtESXdNREFwQ2lBZ0lDQnRjUzVqYldRb0p5OXRjWEFnYjJabUp5a0tJQ0FnSUcxeExtTnRaR1lvSnk4bGN5QndZWFZ6WlNCdlptWW5MQ0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2twQ21WdVpBb0tjbVYwZFhKdUlIdHZibXh2WVdROWIyNWZiRzloWkN3Z1pYWmxiblJtZFc1alBXVjJaVzUwWDJoaGJtUnNaWEo5IiwKIFsiY2F0ZWdvcnkiXSA9ICIiLAogWyJjb21tYW5kIl0gPSAiIiwKfQ==

Sample North Switch Code:
Code:
local mq = require('mq')

-- Do not edit this if condition
if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function on_load()
    -- Perform any initial setup here when the event is loaded.
end

local function event_handler()
    print(mq.TLO.Me.Name() .. "North Switch Emote handling...")
    mq.cmdf('/%s pause on', mq.TLO.Me.Class.ShortName())
    mq.cmd('/mqp on')
    if mq.TLO.Me.Class.ShortName() == "BRD" then
        mq.cmd('/twist stop')
    end
    mq.cmd('/attack off')
    mq.delay(250)
    mq.cmd('/nav locyx 182 -58')
    mq.delay(100, function() return mq.TLO.Nav.Active() end)
    mq.delay(15000, function() return not mq.TLO.Nav.Active() end)
    mq.cmd('/doortarget')
    mq.delay(3000)
    mq.cmd('/click left door')
    mq.delay(2000)
    mq.cmd('/mqp off')
    mq.cmdf('/%s pause off', mq.TLO.Me.Class.ShortName())
end

return {onload=on_load, eventfunc=event_handler}
 
Last edited:
LEMS for the Echo of Hate group mission in Spite for the Unfocused achievement. These are based off emotes posted on EQResource, but I have not personally experienced every one to verify the text. I run these lems on one toon that is doing the mission for them to go to the proper place and hit the required switch.

Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fTm9ydGhTd2l0Y2giLAogWyJ0eXBlIl0gPSAiZXZlbnRzIiwKIFsicGF0dGVybiJdID0gIiMqI1RoZSBFY2hvIHN0YXJ0cyB0byBnYXRoZXIgYWxsIG9mIGl0cyBzZWxmIGxvYXRoaW5nIGFuZCBmb2N1c2VzIGl0IGludG8gb25lIG9mIHRoZSBtYWdpY2FsIHN0b25lcy4jKiMiLAogWyJjb2RlIl0gPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ290TFNCRWJ5QnViM1FnWldScGRDQjBhR2x6SUdsbUlHTnZibVJwZEdsdmJncHBaaUJ1YjNRZ2NHRmphMkZuWlM1c2IyRmtaV1JiSjJWMlpXNTBjeWRkSUhSb1pXNEtJQ0FnSUhCeWFXNTBLQ2RVYUdseklITmpjbWx3ZENCcGN5QnBiblJsYm1SbFpDQjBieUJpWlNCcGJYQnZjblJsWkNCMGJ5Qk1kV0VnUlhabGJuUWdUV0Z1WVdkbGNpQW9URVZOS1M0Z1ZISjVJQ0pjWVMxMEwyeDFZU0J5ZFc0Z2JHVnRYR0V0ZUNJbktRcGxibVFLQ214dlkyRnNJR1oxYm1OMGFXOXVJRzl1WDJ4dllXUW9LUW9nSUNBZ0xTMGdVR1Z5Wm05eWJTQmhibmtnYVc1cGRHbGhiQ0J6WlhSMWNDQm9aWEpsSUhkb1pXNGdkR2hsSUdWMlpXNTBJR2x6SUd4dllXUmxaQzRLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ0lIQnlhVzUwS0cxeExsUk1UeTVOWlM1T1lXMWxLQ2tnTGk0Z0lrNXZjblJvSUZOM2FYUmphQ0JGYlc5MFpTQm9ZVzVrYkdsdVp5NHVMaUlwQ2lBZ0lDQnRjUzVqYldSbUtDY3ZKWE1nY0dGMWMyVWdiMjRuTENCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrcENpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyNG5LUW9nSUNBZ2FXWWdiWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BJRDA5SUNKQ1VrUWlJSFJvWlc0S0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5MGQybHpkQ0J6ZEc5d0p5a0tJQ0FnSUdWdVpBb2dJQ0FnYlhFdVkyMWtLQ2N2WVhSMFlXTnJJRzltWmljcENpQWdJQ0J0Y1M1a1pXeGhlU2d5TlRBcENpQWdJQ0J0Y1M1amJXUW9KeTl1WVhZZ2JHOWplWGdnTVRneUlDMDFPQ2NwQ2lBZ0lDQnRjUzVrWld4aGVTZ3hNREFzSUdaMWJtTjBhVzl1S0NrZ2NtVjBkWEp1SUcxeExsUk1UeTVPWVhZdVFXTjBhWFpsS0NrZ1pXNWtLUW9nSUNBZ2JYRXVaR1ZzWVhrb01UVXdNREFzSUdaMWJtTjBhVzl1S0NrZ2NtVjBkWEp1SUc1dmRDQnRjUzVVVEU4dVRtRjJMa0ZqZEdsMlpTZ3BJR1Z1WkNrS0lDQWdJRzF4TG1OdFpDZ25MMlJ2YjNKMFlYSm5aWFFuS1FvZ0lDQWdiWEV1WkdWc1lYa29NekF3TUNrS0lDQWdJRzF4TG1OdFpDZ25MMk5zYVdOcklHeGxablFnWkc5dmNpY3BDaUFnSUNCdGNTNWtaV3hoZVNneU1EQXdLUW9nSUNBZ2JYRXVZMjFrS0NjdmJYRndJRzltWmljcENpQWdJQ0J0Y1M1amJXUm1LQ2N2SlhNZ2NHRjFjMlVnYjJabUp5d2diWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BLUXBsYm1RS0NuSmxkSFZ5YmlCN2IyNXNiMkZrUFc5dVgyeHZZV1FzSUdWMlpXNTBablZ1WXoxbGRtVnVkRjlvWVc1a2JHVnlmUT09IiwKIFsiY2F0ZWdvcnkiXSA9ICIiLAogWyJjb21tYW5kIl0gPSAiIiwKfQ==

Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fRWFzdFN3aXRjaCIsCiBbInR5cGUiXSA9ICJldmVudHMiLAogWyJwYXR0ZXJuIl0gPSAiIyojVGhlIEVjaG8gYnVybnMgd2l0aCBoYXRyZWQgb2YgdGhlIHdlYWsgYW5kIGZvY3VzZXMgaXQgaW50byBvbmUgb2YgdGhlIG1hZ2ljYWwgc3RvbmVzLiMqIyIsCiBbImNvZGUiXSA9ICJiRzlqWVd3Z2JYRWdQU0J5WlhGMWFYSmxLQ2R0Y1NjcENnb3RMU0JFYnlCdWIzUWdaV1JwZENCMGFHbHpJR2xtSUdOdmJtUnBkR2x2YmdwcFppQnViM1FnY0dGamEyRm5aUzVzYjJGa1pXUmJKMlYyWlc1MGN5ZGRJSFJvWlc0S0lDQWdJSEJ5YVc1MEtDZFVhR2x6SUhOamNtbHdkQ0JwY3lCcGJuUmxibVJsWkNCMGJ5QmlaU0JwYlhCdmNuUmxaQ0IwYnlCTWRXRWdSWFpsYm5RZ1RXRnVZV2RsY2lBb1RFVk5LUzRnVkhKNUlDSmNZUzEwTDJ4MVlTQnlkVzRnYkdWdFhHRXRlQ0luS1FwbGJtUUtDbXh2WTJGc0lHWjFibU4wYVc5dUlHOXVYMnh2WVdRb0tRb2dJQ0FnTFMwZ1VHVnlabTl5YlNCaGJua2dhVzVwZEdsaGJDQnpaWFIxY0NCb1pYSmxJSGRvWlc0Z2RHaGxJR1YyWlc1MElHbHpJR3h2WVdSbFpDNEtaVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJsZG1WdWRGOW9ZVzVrYkdWeUtDa0tJQ0FnSUhCeWFXNTBLRzF4TGxSTVR5NU5aUzVPWVcxbEtDa2dMaTRnSWtWaGMzUWdVM2RwZEdOb0lFVnRiM1JsSUdoaGJtUnNhVzVuTGk0dUlpa0tJQ0FnSUcxeExtTnRaR1lvSnk4bGN5QndZWFZ6WlNCdmJpY3NJRzF4TGxSTVR5NU5aUzVEYkdGemN5NVRhRzl5ZEU1aGJXVW9LU2tLSUNBZ0lHMXhMbU50WkNnbkwyMXhjQ0J2YmljcENpQWdJQ0JwWmlCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrZ1BUMGdJa0pTUkNJZ2RHaGxiZ29nSUNBZ0lDQWdJRzF4TG1OdFpDZ25MM1IzYVhOMElITjBiM0FuS1FvZ0lDQWdaVzVrQ2lBZ0lDQnRjUzVqYldRb0p5OWhkSFJoWTJzZ2IyWm1KeWtLSUNBZ0lHMXhMbVJsYkdGNUtESTFNQ2tLSUNBZ0lHMXhMbU50WkNnbkwyNWhkaUJzYjJONWVDQTVOeUF0TVRVd0p5a0tJQ0FnSUcxeExtUmxiR0Y1S0RFd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdiWEV1VkV4UExrNWhkaTVCWTNScGRtVW9LU0JsYm1RcENpQWdJQ0J0Y1M1a1pXeGhlU2d4TlRBd01Dd2dablZ1WTNScGIyNG9LU0J5WlhSMWNtNGdibTkwSUcxeExsUk1UeTVPWVhZdVFXTjBhWFpsS0NrZ1pXNWtLUW9nSUNBZ2JYRXVZMjFrS0NjdlpHOXZjblJoY21kbGRDY3BDaUFnSUNCdGNTNWtaV3hoZVNnek1EQXdLUW9nSUNBZ2JYRXVZMjFrS0NjdlkyeHBZMnNnYkdWbWRDQmtiMjl5SnlrS0lDQWdJRzF4TG1SbGJHRjVLREl3TURBcENpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyWm1KeWtLSUNBZ0lHMXhMbU50WkdZb0p5OGxjeUJ3WVhWelpTQnZabVluTENCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrcENtVnVaQW9LY21WMGRYSnVJSHR2Ym14dllXUTliMjVmYkc5aFpDd2daWFpsYm5SbWRXNWpQV1YyWlc1MFgyaGhibVJzWlhKOSIsCiBbImNhdGVnb3J5Il0gPSAiIiwKIFsiY29tbWFuZCJdID0gIiIsCn0=

Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fU291dGhTd2l0Y2giLAogWyJ0eXBlIl0gPSAiZXZlbnRzIiwKIFsicGF0dGVybiJdID0gIiMqI1RoZSBFY2hvIHJvaWxzIHdpdGggaGF0cmVkIGZvciBhbGwgdGhhdCBhcmUgbm90IGl0IGFuZCBmb2N1c2VzIGl0IGludG8gb25lIG9mIHRoZSBtYWdpY2FsIHN0b25lcy4jKiMiLAogWyJjb2RlIl0gPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDZ290TFNCRWJ5QnViM1FnWldScGRDQjBhR2x6SUdsbUlHTnZibVJwZEdsdmJncHBaaUJ1YjNRZ2NHRmphMkZuWlM1c2IyRmtaV1JiSjJWMlpXNTBjeWRkSUhSb1pXNEtJQ0FnSUhCeWFXNTBLQ2RVYUdseklITmpjbWx3ZENCcGN5QnBiblJsYm1SbFpDQjBieUJpWlNCcGJYQnZjblJsWkNCMGJ5Qk1kV0VnUlhabGJuUWdUV0Z1WVdkbGNpQW9URVZOS1M0Z1ZISjVJQ0pjWVMxMEwyeDFZU0J5ZFc0Z2JHVnRYR0V0ZUNJbktRcGxibVFLQ214dlkyRnNJR1oxYm1OMGFXOXVJRzl1WDJ4dllXUW9LUW9nSUNBZ0xTMGdVR1Z5Wm05eWJTQmhibmtnYVc1cGRHbGhiQ0J6WlhSMWNDQm9aWEpsSUhkb1pXNGdkR2hsSUdWMlpXNTBJR2x6SUd4dllXUmxaQzRLWlc1a0NncHNiMk5oYkNCbWRXNWpkR2x2YmlCbGRtVnVkRjlvWVc1a2JHVnlLQ2tLSUNBZ0lIQnlhVzUwS0cxeExsUk1UeTVOWlM1T1lXMWxLQ2tnTGk0Z0lsTnZkWFJvSUZOM2FYUmphQ0JGYlc5MFpTQm9ZVzVrYkdsdVp5NHVMaUlwQ2lBZ0lDQnRjUzVqYldSbUtDY3ZKWE1nY0dGMWMyVWdiMjRuTENCdGNTNVVURTh1VFdVdVEyeGhjM011VTJodmNuUk9ZVzFsS0NrcENpQWdJQ0J0Y1M1amJXUW9KeTl0Y1hBZ2IyNG5LUW9nSUNBZ2FXWWdiWEV1VkV4UExrMWxMa05zWVhOekxsTm9iM0owVG1GdFpTZ3BJRDA5SUNKQ1VrUWlJSFJvWlc0S0lDQWdJQ0FnSUNCdGNTNWpiV1FvSnk5MGQybHpkQ0J6ZEc5d0p5a0tJQ0FnSUdWdVpBb2dJQ0FnYlhFdVkyMWtLQ2N2WVhSMFlXTnJJRzltWmljcENpQWdJQ0J0Y1M1a1pXeGhlU2d5TlRBcENpQWdJQ0J0Y1M1amJXUW9KeTl1WVhZZ2JHOWplWGdnTVNBdE5UY25LUW9nSUNBZ2JYRXVaR1ZzWVhrb01UQXdMQ0JtZFc1amRHbHZiaWdwSUhKbGRIVnliaUJ0Y1M1VVRFOHVUbUYyTGtGamRHbDJaU2dwSUdWdVpDa0tJQ0FnSUcxeExtUmxiR0Y1S0RFMU1EQXdMQ0JtZFc1amRHbHZiaWdwSUhKbGRIVnliaUJ1YjNRZ2JYRXVWRXhQTGs1aGRpNUJZM1JwZG1Vb0tTQmxibVFwQ2lBZ0lDQnRjUzVqYldRb0p5OWtiMjl5ZEdGeVoyVjBKeWtLSUNBZ0lHMXhMbVJsYkdGNUtETXdNREFwQ2lBZ0lDQnRjUzVqYldRb0p5OWpiR2xqYXlCc1pXWjBJR1J2YjNJbktRb2dJQ0FnYlhFdVpHVnNZWGtvTWpBd01Da0tJQ0FnSUcxeExtTnRaQ2duTDIxeGNDQnZabVluS1FvZ0lDQWdiWEV1WTIxa1ppZ25MeVZ6SUhCaGRYTmxJRzltWmljc0lHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tTa0taVzVrQ2dweVpYUjFjbTRnZTI5dWJHOWhaRDF2Ymw5c2IyRmtMQ0JsZG1WdWRHWjFibU05WlhabGJuUmZhR0Z1Wkd4bGNuMD0iLAogWyJjYXRlZ29yeSJdID0gIiIsCiBbImNvbW1hbmQiXSA9ICIiLAp9

Code:
cmV0dXJuIHsKIFsibG9hZCJdID0gewogIFsiY2xhc3MiXSA9ICIiLAogIFsiYWx3YXlzIl0gPSBmYWxzZSwKICBbInpvbmUiXSA9ICIiLAogfSwKIFsic2luZ2xlY29tbWFuZCJdID0gZmFsc2UsCiBbIm5hbWUiXSA9ICJTcGl0ZU1pc3Npb25fV2VzdFN3aXRjaCIsCiBbInR5cGUiXSA9ICJldmVudHMiLAogWyJwYXR0ZXJuIl0gPSAiIyojVGhlIEVjaG8gZ2xhcmVzIHdpdGggcmFnZSBhdCBhbGwgb2YgaXRzIG9wcG9uZW50cyBhbmQgZm9jdXNlcyBpdCBpbnRvIG9uZSBvZiB0aGUgbWFnaWNhbCBzdG9uZXMuIyojIiwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ2dvdExTQkVieUJ1YjNRZ1pXUnBkQ0IwYUdseklHbG1JR052Ym1ScGRHbHZiZ3BwWmlCdWIzUWdjR0ZqYTJGblpTNXNiMkZrWldSYkoyVjJaVzUwY3lkZElIUm9aVzRLSUNBZ0lIQnlhVzUwS0NkVWFHbHpJSE5qY21sd2RDQnBjeUJwYm5SbGJtUmxaQ0IwYnlCaVpTQnBiWEJ2Y25SbFpDQjBieUJNZFdFZ1JYWmxiblFnVFdGdVlXZGxjaUFvVEVWTktTNGdWSEo1SUNKY1lTMTBMMngxWVNCeWRXNGdiR1Z0WEdFdGVDSW5LUXBsYm1RS0NteHZZMkZzSUdaMWJtTjBhVzl1SUc5dVgyeHZZV1FvS1FvZ0lDQWdMUzBnVUdWeVptOXliU0JoYm5rZ2FXNXBkR2xoYkNCelpYUjFjQ0JvWlhKbElIZG9aVzRnZEdobElHVjJaVzUwSUdseklHeHZZV1JsWkM0S1pXNWtDZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQmxkbVZ1ZEY5b1lXNWtiR1Z5S0NrS0lDQWdJSEJ5YVc1MEtHMXhMbFJNVHk1TlpTNU9ZVzFsS0NrZ0xpNGdJbGRsYzNRZ1UzZHBkR05vSUVWdGIzUmxJR2hoYm1Sc2FXNW5MaTR1SWlrS0lDQWdJRzF4TG1OdFpHWW9KeThsY3lCd1lYVnpaU0J2Ymljc0lHMXhMbFJNVHk1TlpTNURiR0Z6Y3k1VGFHOXlkRTVoYldVb0tTa0tJQ0FnSUcxeExtTnRaQ2duTDIxeGNDQnZiaWNwQ2lBZ0lDQnBaaUJ0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2tnUFQwZ0lrSlNSQ0lnZEdobGJnb2dJQ0FnSUNBZ0lHMXhMbU50WkNnbkwzUjNhWE4wSUhOMGIzQW5LUW9nSUNBZ1pXNWtDaUFnSUNCdGNTNWpiV1FvSnk5aGRIUmhZMnNnYjJabUp5a0tJQ0FnSUcxeExtUmxiR0Y1S0RJMU1Da0tJQ0FnSUcxeExtTnRaQ2duTDI1aGRpQnNiMk41ZUNBek16Y2dNVE13SnlrS0lDQWdJRzF4TG1SbGJHRjVLREV3TUN3Z1puVnVZM1JwYjI0b0tTQnlaWFIxY200Z2JYRXVWRXhQTGs1aGRpNUJZM1JwZG1Vb0tTQmxibVFwQ2lBZ0lDQnRjUzVrWld4aGVTZ3hOVEF3TUN3Z1puVnVZM1JwYjI0b0tTQnlaWFIxY200Z2JtOTBJRzF4TGxSTVR5NU9ZWFl1UVdOMGFYWmxLQ2tnWlc1a0tRb2dJQ0FnYlhFdVkyMWtLQ2N2Wkc5dmNuUmhjbWRsZENjcENpQWdJQ0J0Y1M1a1pXeGhlU2d6TURBd0tRb2dJQ0FnYlhFdVkyMWtLQ2N2WTJ4cFkyc2diR1ZtZENCa2IyOXlKeWtLSUNBZ0lHMXhMbVJsYkdGNUtESXdNREFwQ2lBZ0lDQnRjUzVqYldRb0p5OXRjWEFnYjJabUp5a0tJQ0FnSUcxeExtTnRaR1lvSnk4bGN5QndZWFZ6WlNCdlptWW5MQ0J0Y1M1VVRFOHVUV1V1UTJ4aGMzTXVVMmh2Y25ST1lXMWxLQ2twQ21WdVpBb0tjbVYwZFhKdUlIdHZibXh2WVdROWIyNWZiRzloWkN3Z1pYWmxiblJtZFc1alBXVjJaVzUwWDJoaGJtUnNaWEo5IiwKIFsiY2F0ZWdvcnkiXSA9ICIiLAogWyJjb21tYW5kIl0gPSAiIiwKfQ==
what does each one do?
 
Not sure if something else is similar has been posted, but ran into a problem using a pet class as an MA in some zones with line of sight problems. This has mostly taken care of it.

Code:
cmV0dXJuIHsKIFsidHlwZSJdID0gImNvbmRpdGlvbnMiLAogWyJsb2FkIl0gPSB7CiAgWyJ6b25lIl0gPSAiIiwKICBbImNsYXNzIl0gPSAiIiwKICBbImFsd2F5cyJdID0gZmFsc2UsCiB9LAogWyJjYXRlZ29yeSJdID0gIiIsCiBbIm5hbWUiXSA9ICJQZXRDbGFzc01UIiwKIFsiY29kZSJdID0gImJHOWpZV3dnYlhFZ1BTQnlaWEYxYVhKbEtDZHRjU2NwQ2dvS2JHOWpZV3dnWm5WdVkzUnBiMjRnWTI5dVpHbDBhVzl1S0NrS0lDQWdJSEpsZEhWeWJpQnRjUzVVVEU4dVRXVXVRMjl0WW1GMFUzUmhkR1VvS1NBOVBTQW5RMDlOUWtGVUp5QmhibVFnYlhFdVZFeFBMa2R5YjNWd0xrMWhhVzVCYzNOcGMzUW9LU0E5UFNCdGNTNVVURTh1VFdVdVEyeGxZVzVPWVcxbEtDa2dZVzVrSUc1dmRDQnRjUzVVVEU4dVZHRnlaMlYwTGt4cGJtVlBabE5wWjJoMEtDa0taVzVrQ2dwc2IyTmhiQ0JtZFc1amRHbHZiaUJoWTNScGIyNG9LUW9nSUNBZ2NISnBiblFvSjAxdmRtbHVaeUIwYnlCblpYUWdURTlUSnlrS0NXMXhMbU50WkNnbkwyNWhkaUIwWVhKblpYUWdmQ0JrYVhOMFlXNWpaVDB4TlNjcENnbHRjUzVrWld4aGVTZ3hNREF3TUNrS1pXNWtDZ3B5WlhSMWNtNGdlMjl1Ykc5aFpEMXZibDlzYjJGa0xDQmpiMjVrWm5WdVl6MWpiMjVrYVhScGIyNHNJR0ZqZEdsdmJtWjFibU05WVdOMGFXOXVmUT09IiwKfQ==

Lua:
local mq = require('mq')


local function condition()
    return mq.TLO.Me.CombatState() == 'COMBAT' and mq.TLO.Group.MainAssist() == mq.TLO.Me.CleanName() and not mq.TLO.Target.LineOfSight()
end

local function action()
    print('Moving to get LOS')
    mq.cmd('/nav target | distance=15')
    mq.delay(10000)
end

return {onload=on_load, condfunc=condition, actionfunc=action}
 
Looking for some help trouble shooting. Converting an old macro snippet to LEM for practice:
Code:
-- Mercenary Stance script:
-- Simple script to control mercs.
-- If the target is 2 levels over your toon, a named, or you have more than 1 thing on Xtarget, will put cleric mercs into reactive stance.
-- If the target is below 90% HPs, and merc is below 85% aggro, puts DPS mercs into burn stance.
-- If merc aggro goes over 85%, or not in combat, changes DPS mercs and cleric mercs to balanced stance.
-- Does not alter Warrior mercs.
-- Revives dead mercs.

local mq = require('mq')

-- Do not edit this if condition
if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function condition()
    return  mq.TLO.Mercenary.State.Equal[ACTIVE]
end

local function action()
    if mq.TLO.Me.XTarget() == 0 and mq.TLO.Mercenary.Stance() ~= Balanced then 
--        print ('Merc Stance \ay Balanced stage 1')
        mq.cmd('/stance Balanced')
        mq.delay(1)
        end
    if mq.TLO.Mercenary.Stance() ~= Balanced then 
        if mq.TLO.Mercenary.Class.Name() == Rogue or mq.TLO.Mercenary.Class.Name() == Wizard then
            if mq.TLO.Me.GroupAssistTarget.PctHPs() >=91 or me.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() >= 86 then
--                print ('Merc Stance \ay Balanced Stage 2')
                mq.cmd('/stance Balanced')
                mq.delay(1)
                end
            end
        end
    if mq.TLO.Me.GroupAssistTarget.Type() ~= PC and mq.TLO.Me.GroupAssistTarget.PctHPs() <=90 then
--        print ('Burn check 1')
        if mq.TLO.Mercenary.Class.Name() == Cleric then
            if  mq.TLO.Mercenary.Stance() ~= Reactive and mq.TLO.Target.Named or mq.TLO.Me.XTarget() >=3 then
--                print ('Cleric Reactive')
                mq.cmd('/stance reactive')
                mq.delay(1)
                end
            end
        if  mq.TLO.Mercenary.Class.Name() == "Rogue" or mq.TLO.Mercenary.Class.Name() == "Wizard" then
--            print ('Burn check 2')
            if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() <= 85 then
                print ('Burning')
                mq.cmd('/stance Burn')
                mq.delay(1)
                end
            end
    if mq.TLO.Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled() and mq.TLO.Mercenary.State() == DEAD then
        mq.cmd ('/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp')
        mq.delay ('10s', mq.TLO.Mercenary.State() == "ACTIVE")
        end
    end
    mq.delay('1s')
end

return {onload=on_load, condfunc=condition, actionfunc=action}

Getting an error on this line:

Code:
            if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() <= 85 then

1772598303886.png
Could someone point me in the right direction?
 
it's Lua, you don't use [ ] much besides accessing keys in a table. use the Lua evaluator and the docs and other scripts and what not to understand what Lua tlo syntax should look like.
 
also don't use macro things like .Equals when you can just directly use Lua ==

https://docs.macroquest.org/lua/ lot of links there to get started

if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member(mq.TLO.Me.Mercenary.CleanName()).PctAggro() <= 85 then

you might also want an "or 0" or "or 100" or something in there in case it ever returns nil if you don't have a merc out or something, to ensure the left hand side is always a number value
 
Looking for some help trouble shooting. Converting an old macro snippet to LEM for practice:
Code:
-- Mercenary Stance script:
-- Simple script to control mercs.
-- If the target is 2 levels over your toon, a named, or you have more than 1 thing on Xtarget, will put cleric mercs into reactive stance.
-- If the target is below 90% HPs, and merc is below 85% aggro, puts DPS mercs into burn stance.
-- If merc aggro goes over 85%, or not in combat, changes DPS mercs and cleric mercs to balanced stance.
-- Does not alter Warrior mercs.
-- Revives dead mercs.

local mq = require('mq')

-- Do not edit this if condition
if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function condition()
    return  mq.TLO.Mercenary.State.Equal[ACTIVE]
end

local function action()
    if mq.TLO.Me.XTarget() == 0 and mq.TLO.Mercenary.Stance() ~= Balanced then
--        print ('Merc Stance \ay Balanced stage 1')
        mq.cmd('/stance Balanced')
        mq.delay(1)
        end
    if mq.TLO.Mercenary.Stance() ~= Balanced then
        if mq.TLO.Mercenary.Class.Name() == Rogue or mq.TLO.Mercenary.Class.Name() == Wizard then
            if mq.TLO.Me.GroupAssistTarget.PctHPs() >=91 or me.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() >= 86 then
--                print ('Merc Stance \ay Balanced Stage 2')
                mq.cmd('/stance Balanced')
                mq.delay(1)
                end
            end
        end
    if mq.TLO.Me.GroupAssistTarget.Type() ~= PC and mq.TLO.Me.GroupAssistTarget.PctHPs() <=90 then
--        print ('Burn check 1')
        if mq.TLO.Mercenary.Class.Name() == Cleric then
            if  mq.TLO.Mercenary.Stance() ~= Reactive and mq.TLO.Target.Named or mq.TLO.Me.XTarget() >=3 then
--                print ('Cleric Reactive')
                mq.cmd('/stance reactive')
                mq.delay(1)
                end
            end
        if  mq.TLO.Mercenary.Class.Name() == "Rogue" or mq.TLO.Mercenary.Class.Name() == "Wizard" then
--            print ('Burn check 2')
            if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() <= 85 then
                print ('Burning')
                mq.cmd('/stance Burn')
                mq.delay(1)
                end
            end
    if mq.TLO.Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled() and mq.TLO.Mercenary.State() == DEAD then
        mq.cmd ('/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp')
        mq.delay ('10s', mq.TLO.Mercenary.State() == "ACTIVE")
        end
    end
    mq.delay('1s')
end

return {onload=on_load, condfunc=condition, actionfunc=action}

Getting an error on this line:

Code:
            if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() <= 85 then

View attachment 75897
Could someone point me in the right direction?
mq.TLO.Group.Member(mq.TLO.Me.Mercenary.CleanName()).PctAggro()
 
Looking for some help trouble shooting. Converting an old macro snippet to LEM for practice:
Code:
-- Mercenary Stance script:
-- Simple script to control mercs.
-- If the target is 2 levels over your toon, a named, or you have more than 1 thing on Xtarget, will put cleric mercs into reactive stance.
-- If the target is below 90% HPs, and merc is below 85% aggro, puts DPS mercs into burn stance.
-- If merc aggro goes over 85%, or not in combat, changes DPS mercs and cleric mercs to balanced stance.
-- Does not alter Warrior mercs.
-- Revives dead mercs.

local mq = require('mq')

-- Do not edit this if condition
if not package.loaded['events'] then
    print('This script is intended to be imported to Lua Event Manager (LEM). Try "\a-t/lua run lem\a-x"')
end

local function condition()
    return  mq.TLO.Mercenary.State.Equal[ACTIVE]
end

local function action()
    if mq.TLO.Me.XTarget() == 0 and mq.TLO.Mercenary.Stance() ~= Balanced then 
--        print ('Merc Stance \ay Balanced stage 1')
        mq.cmd('/stance Balanced')
        mq.delay(1)
        end
    if mq.TLO.Mercenary.Stance() ~= Balanced then 
        if mq.TLO.Mercenary.Class.Name() == Rogue or mq.TLO.Mercenary.Class.Name() == Wizard then
            if mq.TLO.Me.GroupAssistTarget.PctHPs() >=91 or me.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() >= 86 then
--                print ('Merc Stance \ay Balanced Stage 2')
                mq.cmd('/stance Balanced')
                mq.delay(1)
                end
            end
        end
    if mq.TLO.Me.GroupAssistTarget.Type() ~= PC and mq.TLO.Me.GroupAssistTarget.PctHPs() <=90 then
--        print ('Burn check 1')
        if mq.TLO.Mercenary.Class.Name() == Cleric then
            if  mq.TLO.Mercenary.Stance() ~= Reactive and mq.TLO.Target.Named or mq.TLO.Me.XTarget() >=3 then
--                print ('Cleric Reactive')
                mq.cmd('/stance reactive')
                mq.delay(1)
                end
            end
        if  mq.TLO.Mercenary.Class.Name() == "Rogue" or mq.TLO.Mercenary.Class.Name() == "Wizard" then
--            print ('Burn check 2')
            if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() <= 85 then
                print ('Burning')
                mq.cmd('/stance Burn')
                mq.delay(1)
                end
            end
    if mq.TLO.Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled() and mq.TLO.Mercenary.State() == DEAD then
        mq.cmd ('/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp')
        mq.delay ('10s', mq.TLO.Mercenary.State() == "ACTIVE")
        end
    end
    mq.delay('1s')
end

return {onload=on_load, condfunc=condition, actionfunc=action}

Getting an error on this line:

Code:
            if mq.TLO.Mercenary.Stance() ~= "Burn" and mq.TLO.Group.Member[mq.TLO.Me.Mercenary.CleanName()].PctAggro() <= 85 then

View attachment 75897
Could someone point me in the right direction?

maybe you've noticed already but you have a bunch of other errors in there as well, like return mq.TLO.Mercenary.State.Equal[ACTIVE] just use return mq.TLO.Mercenary.State() == "ACTIVE". ACTIVE without quotes would be looking for a nonexisting variable called ACTIVE.
you have several more places like that too like PC, Cleric, Rogue, Bard, DEAD, Balanced and more places using [ ] like mq.TLO.Window.
and your mq.delay condition needs to take a function not just a boolean expression.
 
maybe you've noticed already but you have a bunch of other errors in there as well, like return mq.TLO.Mercenary.State.Equal[ACTIVE] just use return mq.TLO.Mercenary.State() == "ACTIVE". ACTIVE without quotes would be looking for a nonexisting variable called ACTIVE.
you have several more places like that too like PC, Cleric, Rogue, Bard, DEAD, Balanced and more places using [ ] like mq.TLO.Window.
and your mq.delay condition needs to take a function not just a boolean expression.
Aye, tackling it one issue at a time. With macro script I could test with echo as I wrote to be sure I was getting what I wanted, and exactly which part was initially giving issues. This way makes things a bit trickier, though being able to edit directly ingame is nice. Just a matter of getting my brain wrapped around new formatting again. Been tinkering with code since Tandy's and Commodores. Never enough to be a programmer, always just enough to tinker with things, heh. On the plus side, no heavy equipment tied to this =D
 
Aye, tackling it one issue at a time. With macro script I could test with echo as I wrote to be sure I was getting what I wanted, and exactly which part was initially giving issues. This way makes things a bit trickier, though being able to edit directly ingame is nice. Just a matter of getting my brain wrapped around new formatting again. Been tinkering with code since Tandy's and Commodores. Never enough to be a programmer, always just enough to tinker with things, heh. On the plus side, no heavy equipment tied to this =D
/Lua run mq/eval
/Lua parse mq.TLO.Me.Name()
 
Aye, tackling it one issue at a time. With macro script I could test with echo as I wrote to be sure I was getting what I wanted, and exactly which part was initially giving issues. This way makes things a bit trickier, though being able to edit directly ingame is nice. Just a matter of getting my brain wrapped around new formatting again. Been tinkering with code since Tandy's and Commodores. Never enough to be a programmer, always just enough to tinker with things, heh. On the plus side, no heavy equipment tied to this =D

what algar said. not being able to test your Lua in game is a wild take. there is also derples Lua console thing. and even just /Lua run <one off snippet little script testing something> if you really needed. if you forget mq/eval, its also there in the mq console tools menu.
edit: nm algar mentioned that one too i just didn't read past that big icon.
 
I made a simple LEM to help with using the bard song to remove drunkeness faster. I tried to get it to only fire if currently had the short buff, but could not figure out to so I just enable it when using bard song and disable it when finished. If anyone can help make it better I would love to learn from your changes.

Code:
cmV0dXJuIHsKIG5hbWUgPSAiR2V0IHNvYmVyIGZhc3RlciB3aXRoIEJhcmQgc29uZyBTb290aGluZyBQc2FsbSBvZiB0aGUgU3VucmlzZSIsCiBjYXRlZ29yeSA9ICIiLAogdHlwZSA9ICJjb25kaXRpb25zIiwKIGNvZGUgPSAiYkc5allXd2diWEVnUFNCeVpYRjFhWEpsS0NkdGNTY3BDbXh2WTJGc0lHSjFabVl4SUQwblUyOXZkR2hwYm1jZ1VITmhiRzBnYjJZZ2RHaGxJRk4xYm5KcGMyVW5DZ3BzYjJOaGJDQm1kVzVqZEdsdmJpQnZibDlzYjJGa0tDa0tDbVZ1WkFvS2JHOWpZV3dnWm5WdVkzUnBiMjRnWTI5dVpHbDBhVzl1S0NrS0lDQWdiWEV1WTIxa0tDY3ZjbVZ0YjNabFluVm1aaUJUZFc1eWFYTmxKeWtLSUNBZ2JYRXVaR1ZzWVhrb01qQXdNQ2tLWlc1a0NuSmxkSFZ5YmlCN2IyNXNiMkZrUFc5dVgyeHZZV1FzSUdOdmJtUm1kVzVqUFdOdmJtUnBkR2x2Ym4wPSIsCiBsb2FkID0gewogIGFsd2F5cyA9IGZhbHNlLAogIHpvbmUgPSAiIiwKICBjbGFzcyA9ICIiLAogfSwKfQ==
 
Release Lua Event Manager (LEM) Event Library

Users who are viewing this thread

Back
Top
Cart