From e7d24a715de4a035835f75c30be31767d1dd7c8e Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Tue, 5 May 2026 14:57:27 +0300 Subject: [PATCH 1/9] add dates --- .../commons/TeamParticipants/Controller.lua | 15 ++ .../commons/TeamParticipants/Parse/Wiki.lua | 2 + .../commons/TeamParticipants/Repository.lua | 128 +++++++++++++++++- 3 files changed, 144 insertions(+), 1 deletion(-) diff --git a/lua/wikis/commons/TeamParticipants/Controller.lua b/lua/wikis/commons/TeamParticipants/Controller.lua index ff03ef69e71..fa721be5cb0 100644 --- a/lua/wikis/commons/TeamParticipants/Controller.lua +++ b/lua/wikis/commons/TeamParticipants/Controller.lua @@ -42,6 +42,7 @@ function TeamParticipantsController.fromTemplate(frame) local parsedData = TeamParticipantsWikiParser.parseWikiInput(parsedArgs) TeamParticipantsController.importParticipants(parsedData) TeamParticipantsController.fillIncompleteRosters(parsedData) + TeamParticipantsController.enrichPlayerDates(parsedData) local shouldStore = Logic.readBoolOrNil(args.store) ~= false and Lpdb.isStorageEnabled() @@ -142,6 +143,20 @@ function TeamParticipantsController.mergeManualAndImportedPlayers(manualPlayers, end) end +--- Enriches each player with join/leave dates from the transfer LPDB table. +--- Explicit dates from wiki input take precedence over auto-fetched ones. +---@param parsedData {participants: TeamParticipant[], expectedPlayerCount: integer?} +function TeamParticipantsController.enrichPlayerDates(parsedData) + Array.forEach(parsedData.participants, function(participant) + Array.forEach(participant.opponent.players or {}, function(player) + local dates = TeamParticipantsRepository.getPlayerDates(player, participant.aliases) + player.extradata = player.extradata or {} + player.extradata.joinDate = dates.joinDate + player.extradata.leaveDate = dates.leaveDate + end) + end) +end + --- Fills incomplete rosters for all participants with TBD players if needed. --- May mutate the input. ---@param parsedData {participants: TeamParticipant[], expectedPlayerCount: integer?} diff --git a/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua b/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua index 57ef8b57445..eba366a1236 100644 --- a/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua +++ b/lua/wikis/commons/TeamParticipants/Parse/Wiki.lua @@ -237,6 +237,8 @@ function TeamParticipantsWikiParser.parsePlayer(playerInput) played = Logic.nilOr(playedInput, true), results = Logic.nilOr(resultsInput, playedInput, true), number = tonumber(playerInput.number), + joinDate = Logic.nilIfEmpty(playerInput.joindate), + leaveDate = Logic.nilIfEmpty(playerInput.leavedate), } return player end diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index b33121ec70f..b31492bb38b 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -8,13 +8,22 @@ local Lua = require('Module:Lua') local Array = Lua.import('Module:Array') +local DateExt = Lua.import('Module:Date/Ext') local FnUtil = Lua.import('Module:FnUtil') local Json = Lua.import('Module:Json') +local Logic = Lua.import('Module:Logic') local PageVariableNamespace = Lua.import('Module:PageVariableNamespace') local Table = Lua.import('Module:Table') local TeamTemplate = Lua.import('Module:TeamTemplate') local Variables = Lua.import('Module:Variables') +local Condition = Lua.import('Module:Condition') +local ConditionTree = Condition.Tree +local ConditionNode = Condition.Node +local Comparator = Condition.Comparator +local BooleanOperator = Condition.BooleanOperator +local ColumnName = Condition.ColumnName + local Opponent = Lua.import('Module:Opponent/Custom') local prizePoolVars = PageVariableNamespace('PrizePool') @@ -146,12 +155,129 @@ function TeamParticipantsRepository.setPageVars(participant) globalVars:set(combinedPrefix .. 'dn', player.displayName) globalVars:set(combinedPrefix .. 'id', player.apiId) globalVars:set(combinedPrefix .. 'faction', player.faction) - -- TODO: joindate, leavedate + globalVars:set(combinedPrefix .. 'joindate', player.extradata.joinDate) + globalVars:set(combinedPrefix .. 'leavedate', player.extradata.leaveDate) end) end) end) end +---@param playerPageName string +---@param teamAliases string[] +---@param status 'active'|'activeAlt'|'inactive'|'former' +---@return {joinDate: string?, leaveDate: string?} +function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAliases, status) + local startDate = Variables.varDefault('tournament_startdate', DateExt.getContextualDateOrNow()) + local endDate = Variables.varDefault('tournament_enddate', os.date('%F')) + + local toTeamComparator, toTeamOperator, fromTeamComparator, fromTeamOperator + if status == 'active' then + toTeamComparator, toTeamOperator = Comparator.eq, BooleanOperator.any + fromTeamComparator, fromTeamOperator = Comparator.neq, BooleanOperator.all + elseif status == 'activeAlt' or status == 'inactive' then + toTeamComparator, toTeamOperator = Comparator.eq, BooleanOperator.any + fromTeamComparator, fromTeamOperator = Comparator.eq, BooleanOperator.any + else -- former + toTeamComparator, toTeamOperator = Comparator.neq, BooleanOperator.all + fromTeamComparator, fromTeamOperator = Comparator.eq, BooleanOperator.any + end + + local toTeamTree = ConditionTree(toTeamOperator) + Array.forEach(teamAliases, function(alias) + toTeamTree:add(ConditionNode(ColumnName('toteam'), toTeamComparator, alias)) + end) + + local fromTeamTree = ConditionTree(fromTeamOperator) + Array.forEach(teamAliases, function(alias) + fromTeamTree:add(ConditionNode(ColumnName('fromteam'), fromTeamComparator, alias)) + end) + + local conditions = ConditionTree(BooleanOperator.all):add{ + ConditionTree(BooleanOperator.any):add{ + ConditionNode(ColumnName('player'), Comparator.eq, playerPageName), + ConditionNode(ColumnName('player'), Comparator.eq, playerPageName:gsub('_', ' ')), + }, + ConditionNode(ColumnName('date'), Comparator.gt, startDate), + ConditionNode(ColumnName('date'), Comparator.lt, endDate), + toTeamTree, + fromTeamTree, + } + + if status == 'active' then + conditions:add(ConditionTree(BooleanOperator.any):add{ + ConditionNode(ColumnName('role2'), Comparator.eq, ''), + ConditionNode(ColumnName('role2'), Comparator.eq, 'Loan'), + }) + elseif status == 'activeAlt' then + conditions:add(ConditionNode(ColumnName('role1'), Comparator.eq, 'Inactive')) + conditions:add(ConditionNode(ColumnName('role2'), Comparator.eq, '')) + elseif status == 'inactive' then + conditions:add(ConditionNode(ColumnName('role2'), Comparator.eq, 'Inactive')) + end + + local transferData = mw.ext.LiquipediaDB.lpdb('transfer', { + conditions = tostring(conditions), + order = 'date desc', + limit = 1, + }) + + if not transferData[1] then + return {} + end + + if status == 'active' or status == 'activeAlt' then + return {joinDate = DateExt.toYmdInUtc(transferData[1].date)} + end + return {leaveDate = DateExt.toYmdInUtc(transferData[1].date)} +end + +---@param player standardPlayer +---@param teamAliases string[] +---@return {joinDate: string?, leaveDate: string?} +function TeamParticipantsRepository.getPlayerDates(player, teamAliases) + local pageName = Logic.nilIfEmpty(player.pageName) + if not pageName or pageName:lower() == 'tbd' then + return {} + end + + local extradata = player.extradata or {} + local playerDates = { + joinDate = extradata.joinDate, + leaveDate = extradata.leaveDate, + } + + if Logic.isNotEmpty(playerDates.joinDate) and Logic.isNotEmpty(playerDates.leaveDate) then + return playerDates + end + + local isFormer = extradata.status == 'former' + + playerDates = Table.merge( + TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'active'), + playerDates + ) + if Logic.isEmpty(playerDates.joinDate) then + playerDates = Table.merge( + TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'activeAlt'), + playerDates + ) + end + if isFormer then + playerDates = Table.merge( + TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'inactive'), + playerDates + ) + if Logic.isEmpty(playerDates.leaveDate) then + playerDates = Table.merge( + TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'former'), + playerDates + ) + end + end + + return playerDates +end + ---@param opponent standardOpponent ---@return placement[] function TeamParticipantsRepository.getPrizepoolRecordsForTeam(opponent) From 8b6b113ab85157650937a4e0123cf33284e95ae8 Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Tue, 5 May 2026 14:57:31 +0300 Subject: [PATCH 2/9] add tests --- lua/definitions/mw.lua | 13 ++ lua/spec/team_participants_dates_spec.lua | 223 ++++++++++++++++++++++ 2 files changed, 236 insertions(+) create mode 100644 lua/spec/team_participants_dates_spec.lua diff --git a/lua/definitions/mw.lua b/lua/definitions/mw.lua index 112ff071d31..d6604cd2a32 100644 --- a/lua/definitions/mw.lua +++ b/lua/definitions/mw.lua @@ -446,6 +446,19 @@ function mw.language:formatDate(format, timestamp, localTime) return day or '' end return os.date(outFormat, ostimeWrapper(timestamp)) --[[@as string]] + elseif format == 'Y-m-d' then + if not timestamp then + return os.date('!%Y-%m-%d') --[[@as string]] + end + if type(timestamp) == 'string' and string.sub(timestamp, 1, 1) == '@' then + return os.date('!%Y-%m-%d', tonumber(string.sub(timestamp, 2))) --[[@as string]] + end + if type(timestamp) == 'string' then + local year, month, day = parseDateString(timestamp) + if not year then return '' end + return year .. '-' .. month .. '-' .. day + end + return os.date('!%Y-%m-%d', ostimeWrapper(timestamp)) --[[@as string]] end return '' end diff --git a/lua/spec/team_participants_dates_spec.lua b/lua/spec/team_participants_dates_spec.lua new file mode 100644 index 00000000000..555684f5427 --- /dev/null +++ b/lua/spec/team_participants_dates_spec.lua @@ -0,0 +1,223 @@ +--- Triple Comment to Enable our LLS Plugin +describe('TeamParticipants player dates', function() + local TeamParticipantsRepository + local Variables + local PageVariableNamespace + local LpdbQuery + + before_each(function() + Variables = require('Module:Variables') + Variables.varDefine('tournament_startdate', '2024-01-01') + Variables.varDefine('tournament_enddate', '2024-12-31') + PageVariableNamespace = require('Module:PageVariableNamespace') + TeamParticipantsRepository = require('Module:TeamParticipants/Repository') + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() return {} end) + end) + + after_each(function() + LpdbQuery:revert() + Variables.varDefine('tournament_startdate') + Variables.varDefine('tournament_enddate') + end) + + describe('getPlayerDates', function() + it('returns empty for player with no pageName', function() + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = nil, extradata = {}}, + {'Team Liquid'} + ) + assert.are_same({}, dates) + assert.stub(LpdbQuery).called(0) + end) + + it('returns empty for TBD player', function() + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'TBD', extradata = {}}, + {'Team Liquid'} + ) + assert.are_same({}, dates) + assert.stub(LpdbQuery).called(0) + end) + + it('returns explicit dates without querying LPDB when both are set', function() + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {joinDate = '2024-03-01', leaveDate = '2024-09-01'}}, + {'Team Liquid'} + ) + assert.are_equal('2024-03-01', dates.joinDate) + assert.are_equal('2024-09-01', dates.leaveDate) + assert.stub(LpdbQuery).called(0) + end) + + it('fetches joinDate from active transfer for active player', function() + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() return {{date = '2024-03-15'}} end) + + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {}}, + {'Team Liquid'} + ) + assert.are_equal('2024-03-15', dates.joinDate) + assert.is_nil(dates.leaveDate) + end) + + it('falls back to activeAlt when active query returns nothing', function() + local callCount = 0 + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + callCount = callCount + 1 + if callCount == 2 then + return {{date = '2024-04-01'}} + end + return {} + end) + + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {}}, + {'Team Liquid'} + ) + assert.are_equal('2024-04-01', dates.joinDate) + assert.are_equal(2, callCount) + end) + + it('fetches joinDate and leaveDate for former player', function() + local callCount = 0 + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + callCount = callCount + 1 + if callCount == 1 then + return {{date = '2024-02-01'}} -- active → joinDate + elseif callCount == 2 then + return {{date = '2024-08-15'}} -- inactive → leaveDate + end + return {} + end) + + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {status = 'former'}}, + {'Team Liquid'} + ) + assert.are_equal('2024-02-01', dates.joinDate) + assert.are_equal('2024-08-15', dates.leaveDate) + end) + + it('falls back to former query when inactive returns nothing for former player', function() + local callCount = 0 + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + callCount = callCount + 1 + if callCount == 4 then + return {{date = '2024-09-30'}} -- former → leaveDate + end + return {} + end) + + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {status = 'former'}}, + {'Team Liquid'} + ) + assert.is_nil(dates.joinDate) + assert.are_equal('2024-09-30', dates.leaveDate) + assert.are_equal(4, callCount) -- active, activeAlt, inactive, former + end) + + it('explicit joinDate takes precedence over LPDB result', function() + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() return {{date = '2024-03-15'}} end) + + local dates = TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {joinDate = '2023-01-01'}}, + {'Team Liquid'} + ) + assert.are_equal('2023-01-01', dates.joinDate) + end) + end) + + describe('setPageVars', function() + it('writes joindate and leavedate to global vars under team prefixes', function() + local TeamTemplateMock = require('wikis.commons.Mock.TeamTemplate') + TeamTemplateMock.setUp() + local globalVars = PageVariableNamespace() + + TeamParticipantsRepository.setPageVars({ + aliases = {'team liquid'}, + opponent = { + players = {{ + pageName = 'Alexis', + flag = 'us', + displayName = 'alexis', + faction = nil, + apiId = nil, + extradata = { + type = 'player', + joinDate = '2024-03-15', + leaveDate = nil, + }, + }}, + }, + }) + + assert.are_equal('2024-03-15', globalVars:get('Team Liquid_p1joindate')) + assert.is_nil(globalVars:get('Team Liquid_p1leavedate')) + TeamTemplateMock.tearDown() + end) + + it('writes both joindate and leavedate for former player', function() + local TeamTemplateMock = require('wikis.commons.Mock.TeamTemplate') + TeamTemplateMock.setUp() + local globalVars = PageVariableNamespace() + + TeamParticipantsRepository.setPageVars({ + aliases = {'team liquid'}, + opponent = { + players = {{ + pageName = 'Alexis', + flag = 'us', + displayName = 'alexis', + faction = nil, + apiId = nil, + extradata = { + type = 'player', + status = 'former', + joinDate = '2024-02-01', + leaveDate = '2024-08-15', + }, + }}, + }, + }) + + assert.are_equal('2024-02-01', globalVars:get('Team Liquid_p1joindate')) + assert.are_equal('2024-08-15', globalVars:get('Team Liquid_p1leavedate')) + TeamTemplateMock.tearDown() + end) + end) + + describe('parsePlayer date input', function() + it('stores explicit joindate from wiki input in extradata', function() + local TeamParticipantsWikiParser = require('Module:TeamParticipants/Parse/Wiki') + local player = TeamParticipantsWikiParser.parsePlayer{'Alexis', joindate = '2024-03-01'} + assert.are_equal('2024-03-01', player.extradata.joinDate) + assert.is_nil(player.extradata.leaveDate) + end) + + it('stores explicit leavedate from wiki input in extradata', function() + local TeamParticipantsWikiParser = require('Module:TeamParticipants/Parse/Wiki') + local player = TeamParticipantsWikiParser.parsePlayer{'Alexis', leavedate = '2024-09-01'} + assert.is_nil(player.extradata.joinDate) + assert.are_equal('2024-09-01', player.extradata.leaveDate) + end) + + it('stores nothing for missing date input', function() + local TeamParticipantsWikiParser = require('Module:TeamParticipants/Parse/Wiki') + local player = TeamParticipantsWikiParser.parsePlayer{'Alexis'} + assert.is_nil(player.extradata.joinDate) + assert.is_nil(player.extradata.leaveDate) + end) + + it('treats empty string date input as nil', function() + local TeamParticipantsWikiParser = require('Module:TeamParticipants/Parse/Wiki') + local player = TeamParticipantsWikiParser.parsePlayer{'Alexis', joindate = ''} + assert.is_nil(player.extradata.joinDate) + end) + end) +end) From 0d878b779964c66d0847a78259aae58bbb74fe03 Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Tue, 5 May 2026 15:50:46 +0300 Subject: [PATCH 3/9] include tournament start and end date --- lua/wikis/commons/TeamParticipants/Repository.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index b31492bb38b..a413383656c 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -197,8 +197,8 @@ function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAl ConditionNode(ColumnName('player'), Comparator.eq, playerPageName), ConditionNode(ColumnName('player'), Comparator.eq, playerPageName:gsub('_', ' ')), }, - ConditionNode(ColumnName('date'), Comparator.gt, startDate), - ConditionNode(ColumnName('date'), Comparator.lt, endDate), + ConditionNode(ColumnName('date'), Comparator.ge, startDate), + ConditionNode(ColumnName('date'), Comparator.le, endDate), toTeamTree, fromTeamTree, } From cd844dbd6618d0513a9e46fa372f82a3fda7a12f Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Wed, 6 May 2026 09:36:50 +0300 Subject: [PATCH 4/9] update order of former and inactive --- lua/spec/team_participants_dates_spec.lua | 8 ++++---- lua/wikis/commons/TeamParticipants/Repository.lua | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lua/spec/team_participants_dates_spec.lua b/lua/spec/team_participants_dates_spec.lua index 555684f5427..8b75a311b2f 100644 --- a/lua/spec/team_participants_dates_spec.lua +++ b/lua/spec/team_participants_dates_spec.lua @@ -88,7 +88,7 @@ describe('TeamParticipants player dates', function() if callCount == 1 then return {{date = '2024-02-01'}} -- active → joinDate elseif callCount == 2 then - return {{date = '2024-08-15'}} -- inactive → leaveDate + return {{date = '2024-08-15'}} -- former → leaveDate end return {} end) @@ -101,13 +101,13 @@ describe('TeamParticipants player dates', function() assert.are_equal('2024-08-15', dates.leaveDate) end) - it('falls back to former query when inactive returns nothing for former player', function() + it('falls back to inactive query when former returns nothing for former player', function() local callCount = 0 LpdbQuery:revert() LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() callCount = callCount + 1 if callCount == 4 then - return {{date = '2024-09-30'}} -- former → leaveDate + return {{date = '2024-09-30'}} -- inactive → leaveDate end return {} end) @@ -118,7 +118,7 @@ describe('TeamParticipants player dates', function() ) assert.is_nil(dates.joinDate) assert.are_equal('2024-09-30', dates.leaveDate) - assert.are_equal(4, callCount) -- active, activeAlt, inactive, former + assert.are_equal(4, callCount) -- active, activeAlt, former, inactive end) it('explicit joinDate takes precedence over LPDB result', function() diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index a413383656c..7f4de084c14 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -264,12 +264,12 @@ function TeamParticipantsRepository.getPlayerDates(player, teamAliases) end if isFormer then playerDates = Table.merge( - TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'inactive'), + TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'former'), playerDates ) if Logic.isEmpty(playerDates.leaveDate) then playerDates = Table.merge( - TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'former'), + TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'inactive'), playerDates ) end From 084bc2ec56ec6df4b7ef4987d16946e5211052fd Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Wed, 6 May 2026 10:23:06 +0300 Subject: [PATCH 5/9] clean up --- .../commons/TeamParticipants/Repository.lua | 70 +++++-------------- 1 file changed, 18 insertions(+), 52 deletions(-) diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index 7f4de084c14..2e50377bd60 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -20,6 +20,7 @@ local Variables = Lua.import('Module:Variables') local Condition = Lua.import('Module:Condition') local ConditionTree = Condition.Tree local ConditionNode = Condition.Node +local ConditionUtil = Condition.Util local Comparator = Condition.Comparator local BooleanOperator = Condition.BooleanOperator local ColumnName = Condition.ColumnName @@ -170,44 +171,25 @@ function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAl local startDate = Variables.varDefault('tournament_startdate', DateExt.getContextualDateOrNow()) local endDate = Variables.varDefault('tournament_enddate', os.date('%F')) - local toTeamComparator, toTeamOperator, fromTeamComparator, fromTeamOperator + local toTeamFn, fromTeamFn if status == 'active' then - toTeamComparator, toTeamOperator = Comparator.eq, BooleanOperator.any - fromTeamComparator, fromTeamOperator = Comparator.neq, BooleanOperator.all + toTeamFn, fromTeamFn = ConditionUtil.anyOf, ConditionUtil.noneOf elseif status == 'activeAlt' or status == 'inactive' then - toTeamComparator, toTeamOperator = Comparator.eq, BooleanOperator.any - fromTeamComparator, fromTeamOperator = Comparator.eq, BooleanOperator.any + toTeamFn, fromTeamFn = ConditionUtil.anyOf, ConditionUtil.anyOf else -- former - toTeamComparator, toTeamOperator = Comparator.neq, BooleanOperator.all - fromTeamComparator, fromTeamOperator = Comparator.eq, BooleanOperator.any + toTeamFn, fromTeamFn = ConditionUtil.noneOf, ConditionUtil.anyOf end - local toTeamTree = ConditionTree(toTeamOperator) - Array.forEach(teamAliases, function(alias) - toTeamTree:add(ConditionNode(ColumnName('toteam'), toTeamComparator, alias)) - end) - - local fromTeamTree = ConditionTree(fromTeamOperator) - Array.forEach(teamAliases, function(alias) - fromTeamTree:add(ConditionNode(ColumnName('fromteam'), fromTeamComparator, alias)) - end) - local conditions = ConditionTree(BooleanOperator.all):add{ - ConditionTree(BooleanOperator.any):add{ - ConditionNode(ColumnName('player'), Comparator.eq, playerPageName), - ConditionNode(ColumnName('player'), Comparator.eq, playerPageName:gsub('_', ' ')), - }, + ConditionUtil.anyOf(ColumnName('player'), {playerPageName, playerPageName:gsub('_', ' ')}), ConditionNode(ColumnName('date'), Comparator.ge, startDate), ConditionNode(ColumnName('date'), Comparator.le, endDate), - toTeamTree, - fromTeamTree, + toTeamFn(ColumnName('toteam'), teamAliases), + fromTeamFn(ColumnName('fromteam'), teamAliases), } if status == 'active' then - conditions:add(ConditionTree(BooleanOperator.any):add{ - ConditionNode(ColumnName('role2'), Comparator.eq, ''), - ConditionNode(ColumnName('role2'), Comparator.eq, 'Loan'), - }) + conditions:add(ConditionUtil.anyOf(ColumnName('role2'), {'', 'Loan'})) elseif status == 'activeAlt' then conditions:add(ConditionNode(ColumnName('role1'), Comparator.eq, 'Inactive')) conditions:add(ConditionNode(ColumnName('role2'), Comparator.eq, '')) @@ -246,33 +228,17 @@ function TeamParticipantsRepository.getPlayerDates(player, teamAliases) leaveDate = extradata.leaveDate, } - if Logic.isNotEmpty(playerDates.joinDate) and Logic.isNotEmpty(playerDates.leaveDate) then - return playerDates + local function tryQuery(status, field) + if Logic.isNotEmpty(playerDates[field]) then return end + local result = TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, status) + playerDates[field] = result[field] end - local isFormer = extradata.status == 'former' - - playerDates = Table.merge( - TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'active'), - playerDates - ) - if Logic.isEmpty(playerDates.joinDate) then - playerDates = Table.merge( - TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'activeAlt'), - playerDates - ) - end - if isFormer then - playerDates = Table.merge( - TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'former'), - playerDates - ) - if Logic.isEmpty(playerDates.leaveDate) then - playerDates = Table.merge( - TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, 'inactive'), - playerDates - ) - end + tryQuery('active', 'joinDate') + tryQuery('activeAlt', 'joinDate') + if extradata.status == 'former' then + tryQuery('former', 'leaveDate') + tryQuery('inactive', 'leaveDate') end return playerDates From f5bf37f4604c4cedaec486f77257202d660e7ec5 Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Wed, 6 May 2026 13:11:00 +0300 Subject: [PATCH 6/9] fix query --- lua/spec/team_participants_dates_spec.lua | 19 +++++++++++++++++++ .../commons/TeamParticipants/Repository.lua | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/lua/spec/team_participants_dates_spec.lua b/lua/spec/team_participants_dates_spec.lua index 8b75a311b2f..bdbf7f7190a 100644 --- a/lua/spec/team_participants_dates_spec.lua +++ b/lua/spec/team_participants_dates_spec.lua @@ -131,6 +131,25 @@ describe('TeamParticipants player dates', function() ) assert.are_equal('2023-01-01', dates.joinDate) end) + + it('queries against the team-template columns, not display-name columns', function() + local capturedConditions + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function(_, options) + capturedConditions = options.conditions + return {} + end) + + TeamParticipantsRepository.getPlayerDates( + {pageName = 'Alexis', extradata = {}}, + {'team liquid'} + ) + + assert.is_truthy(capturedConditions:find('toteamtemplate', 1, true)) + assert.is_truthy(capturedConditions:find('fromteamtemplate', 1, true)) + assert.is_nil(capturedConditions:find('[[toteam::', 1, true)) + assert.is_nil(capturedConditions:find('[[fromteam::', 1, true)) + end) end) describe('setPageVars', function() diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index 2e50377bd60..f1f59030e08 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -184,8 +184,8 @@ function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAl ConditionUtil.anyOf(ColumnName('player'), {playerPageName, playerPageName:gsub('_', ' ')}), ConditionNode(ColumnName('date'), Comparator.ge, startDate), ConditionNode(ColumnName('date'), Comparator.le, endDate), - toTeamFn(ColumnName('toteam'), teamAliases), - fromTeamFn(ColumnName('fromteam'), teamAliases), + toTeamFn(ColumnName('toteamtemplate'), teamAliases), + fromTeamFn(ColumnName('fromteamtemplate'), teamAliases), } if status == 'active' then From 66ea5ad40d6d346e9e2227eb5ca2d28dbeaaf973 Mon Sep 17 00:00:00 2001 From: Eetwalt <75437856+Eetwalt@users.noreply.github.com> Date: Wed, 6 May 2026 10:20:52 +0000 Subject: [PATCH 7/9] chore: update visual snapshots --- lua/spec/snapshots/dota2 rankings.png | Bin 80699 -> 81986 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lua/spec/snapshots/dota2 rankings.png b/lua/spec/snapshots/dota2 rankings.png index 9e547b50925493e4aa23c0047ea549b2ecb70715..e61cb14992eacd988c8c02d268744d07659bc1ff 100644 GIT binary patch literal 81986 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

>{znW*ab62U+jMZ3-DJ0r&tZH{LpW5l0BDMx{A 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 literal 80699 zcmeFZXH-*N7cPn@Dk7pFpdg?~k=}_?UqO0PTIfM~??q}*qzg!gARxU2Lhn_o)X+i= zgkD1LC6Ju(z26z<-ZAcv`{Um8>#RRnJ7Z_BwdR^@&SySz?u30*l_PyX^MHVWfK);L zgE|2L5xz?}e4h~i@ehOIEdqka1PUMCYkv8)Jx5~jbUjme-&*aLHHWmRr;vGhMq|}2 zF(L(>Oqj{btT#_z6MlOC+Ui5G!Nb}<<^-jVt_RO3e>?~a2n%@9`44lJPUwdpX4X#c zp1cKpzD9FL?sk9wlRf}R_ZMgk_>FAJ#$17g%`Gh~El|%Bz1Ers1aOyF)E)dp@U3lZ zH{`$FfG7VD-2M04>;Qs?|Mp~W-Fo(K?*}0v@4vlgM0bq;?eRXi-}Z0M`03*S{G#x! z?afPq+yChWeEL5Ryb;9zk>P*T;s2=3f5hXY2K;KKC{Dyhm~kixoc_5Rg3oLw28lARxaB zVT*hD8&y>($#8Xu!eP(OP+<5R7Mp>)VBo$jiP^5K!&`;`*6}H!Hj%X5nQB|y0R!&U zQI_Ki|xmb@17(rtkgh5u&ow0AmMQ@MGlf`BZ+8n)@xjX`QNzOhyN z-)T&rZh&zZlojsA#05G}-o;^BaZ30;ehhjd8hi)e7TEq@n?U$uvhSw`hv>4R(tB!* zL>7s{LoK&%DcKVtm9%x64iIT29nHE6^-!lze#41}yNf`H4o8&Fh&truIBWJ~=j55o zR$_NcYmc1r%{JY%<)Z+?{eX-xE+VG)8&ydOGrJR)u@l|egFcNDx+Axhep(203clOm zivO$r&wUG>X)(2}``8k?r0OddNs5RIttUA;c3B{!Ilb3=h*p{Wf*7cH7deyhf1XY7 zEdL&DfCA?Cz?{UTL7&Zv*XKnUx`qizw*yZ9)|8#~lFxzqWmK)61>Nx&?lap&lyujE_}?i69C&>RH0JADgI}mNOIB7r8R_)X000j!JcA?h?aH?= zTC|7d+y1?mSCy=WxC-`;$J@^f%wP6&Vf~F<6kg4V-dNCo&qMk8*1zto?XB3x`?4B(;fLS4_ze#s zOHIg%wb=7Jf4>$w_4L%VlOx-EzAsiES;IFJWbg24vHy}T-fgj1b z>WhpyvkB%Pvy!z&6DST&~nyp*MsYQ zCNp#yDI~1Rz%)d6$pS-O@p}hKe(7O&Erp+1TQdFOOC8C$yC1rV>cZ+GGO-Gtcu5*g zT>-Lbt)FrFVJus)K(vLxIeU1GOJYhwlBX$tNniASeos-d`yQP; zvM0F{=Jq7=fH_}0=|u}zcIoRs{ltg%@+nj2cZp&WnLa;+8PvO+pb?IETh}9rJ%EF; zuH`ynywKX(S}0Trihv|1haQJw_UAlN&a(|3J2d?j$OqsPC`cS{Cp4kZ8K`sZd1AIaVjkgT!zbE>_tCsy1BPOZrOP^ohB>==E&w`?@YLuc{M+rdst zgYy=_{`gCk55l9<+QICqwYl^24%7Ns{Ti{HT|U0D&F~(Z*#y10hbDwiX1GbKn18%i zQX)x`2Oq{|Btszcb#-bI<{O~Zk5{G*@gPF zGta^$aR&Kg&Y4NGcWP@QsCh(0M6erjl1ppsPs2-FF3};9SFfns8&8bBED~`O-xyZj zztY>c@wV?Qki7ZD(@oO}4xUmVjot`vc=qPvty0dPB5(VQbQyrdf1`Q-3bJtP$BkXO z%k4tykJ>p9NS7ISM4U8`C+^)_MUYVqU;Vc0V4AHZB4Kfe$8km@kq!+7Eyg08yB>6W zL-#$aWnK)i4PVygIrsrvWaX!mi<|Um+5XG5dDVw5_|?GeFa~L;V^&Syj2vjwd+s&E zq3UqpZe#A;)$o zNRNBfCCqIXS+8CgACVo$qGDrfiA+iDk zBj;Gmo}8C;8-mGob8=?J`*eHy(W6I5GGu@2^^W6r32WEQB&CI;b$C**8Ir0#EQ#BY z5ifD$H+aAt5T;~RIqr2gGtqPZy*ei8IQf{SWJ;9DzDNI)!?&oW?^W!~O8v1YTwH2E z)k7~FGQTk?d+McEm=;3M0!vCi?b^eN858qbKtMkx`zP+) zm_hONbFLVqvi;WL?UO1?JM{wPziuz0=HutBmNInzaHZ_3fQ`;E=VC;!tK2K8t!TGq zF&Z3WpLixA@^g0g+;taYEoFTjpl=q^`p7(qX8)d3(@kB%)a>TifqEUc}5nOml{KU+2xnrkuB-JXV7 zZ8ouVWE=T3{g(G*mbQOUV43d9p>gAYL92fnX73*v4&ZZJtGEHggv<2#+F+{W^`;sT zVT+)AtRMie?!UmlZ_n|GJs~nO5~=@?r_`wVM({TWyQZs-(go+YTfhF02aG++aK){n zf7Rn$Hj^+sz@33E$K87l5eCmJbSL(y@cZ!W#;5asjbUMgjGyp}aQ6@!MPYs)2Kx1W zm54Az`UXl}+1-~h4LLon{YVZUUs`4`>muTGch%jdAYXeIXl<{_-vL8)j`|=>IG%7l zZEfPS;!C1ebAN_r)s}1YQP)GLislphBP!Rw8>Bjpbp~IxxHpibcy`S*vk(x zA{vLW723fc0rapjh*$8P#?TjP3Y{&>VV#q6E@+r+8=w=-3b9uY1i6ysf<9Lxie{ zwI0j6-os%XH8dyy(8fm0Qdb0vcP-ax2g4z_q7}0%+R^`Ki_gyXaHY4_zW;GF-nAOH z1=8OkAt0cqlI7s(XM4xyxU(BAkrSENT&Ym1%EmJwikzC^EBh4|swVIGs6iQ`OZt#s z1)>XyVMW*kuTtmKB_$I2>6r;7@z^Sqk82N8)3bdoiG2PE@h8YepB7NK5Z?p~j8U|f z^{V*9@pCg|o8i8th<#(?@7%=eUX7PE8K2d&8AxL4ePPSCUn7s&9^<5xQkbU;Hil1s z_Bqg5GgF@Jyx@Y^+G=yM2FpPPYxuVG#qF(aWhV-&A9BQc_iuc^bnVm9){f6RiT_qc z8kZuz@V>onduDpNP`$7YV#NI$d%Xu<=Vwg{ujlO3S~)bAnVVq*5)WJ_L8)5onI$iJ z)pFD~*S%3-oH)=6(@w(kEbGLWF=oRNjM3NEpXC8xC^>K-J;JcRZLRqI)@$5E=x#ts z;7ypUd^@ER_CL7*W08{Bkr6C3opB!m3p^=%;yrlbtFnR)Er4=A3IhOS z%2!=H{(RdHNN1PWvu+^bvpaaw!FXx3YC_P6g$wA6s8W{8Zo*h{7rtsyzm9X$DN%>M z-hCJZiE3CY9TcPJKt7C~Hm{mPx_o;g+-7x;Ub+YUY}b+^?yJ^mh)nECkv|6VnKp0J zyZYgK7epmesm~)uJSku+-lizs5%b{)>nI(gPoFN zkdFrK^jCTFpV$TD&YxDTs;fD#7HaII3%i%(2&!Lx4E~VLZ{CNjcO{LC#9iVY2;TWt zl$9;`3xA*bbJ84qIrX_?rxxXZ6PTe49{w9hslwC6eWtqn@o2+&6B6;q;DkTvd;PJk z727r5<(F~xm!NnVkJ~&HM&G7OsDIkK^V zI3`ku0cx#ZTTfV$l~-N?(|@CH=B_VotNv2>byeRZca%j{-&((4^*~O_&O-`qIsIvQ zOC?eqr;LS3d1zi8Af{PS1`Ics^-~=YH(^-F%*eW)$p78N-C8{=Ohui2)G^byt}%g(v=4=_w!e-w?TYD|LW^%qjWK^LrL6) z8uzt}q>irca~2vJDKdIMKd%TiJrN$TIMM#cjY>^I9TLFY>$o&1bcUiuqIjiZN>q3t zrSvd&khA3PZg(sMjzFJ6e&zgnR6Yp5zgCf0iph~z&vz&;jPoo|h$(rVS^vs!wk{^lvl?<`G+Q}_p=%0`IE+Bd!q-rLz)g@`L1vLN0iL1A_cU{+;@XKkqzbyW| zwY{_=BqiW|zY)3%`GJ~zW|W+)t7z`rIKiDZi*nSedc*!HB{7cr$|hY0P4z5={dG|+ zxl16hGG$NZvSE7sDOFcUt!#5`KdW;pzc|4D`oWC)8r9=evurMT`61m(*~YzQtIgr3 z@-ydmbl4x+9SpA7*kpKy`EuCpIw5kZa=~jp7Un_bo3<6)XXGsK#_yfoUXR2+hSs>m zJ?QIi1gO4aM26KIe zk~~sIfy_FVeeW4P>MqI5&0PiK&cOAx59yCm^z%Qy8MhM5@I53>$|YT#o|%E*MIDgo zzhAm1NBe5|aJAnPTX+}GUu59pEuL(^d7$T27n!$JL0F&`edKgi2=Uu8INat~&Ff@F z5|8x}2QIgghkNESu2xuU2Un%6Jw0o+p{s}NXJ>Ag$D182v(9KV`Vt=-)R#ETHrP{9 zXO`k)pq&{ZZfn;BxP^s9@H!bP)mj5AvBr<$)xS1 zu?WvPUGb(LYGYNJ>~z+!kI`TLVe;-6T5_q@iN0AvjCg@Wn}N!=qb7vU%yW|^(}a*o zE~hBiCknFL*?+yXP8AR9Su>dk2-3BSE5xk(Q*~DdkW=G}v+npnI^YQ;S*Q)&mt3ad z%I|qDPjA{NCR@%b7Dzlt&Er>aJ0CwK`mEf>tt4_ajz0FPI<|QHm;}%4q@oB13-lAB zn+X%lMP?e^|I1p7(a|dqO!yo9dePvWGVtfq;rA1j^L*NK>Ztb1oI@bZQ z>f0}>gXHMA#r|*oJhrs87!j^8+An&+w_dCHboB}t&ND=(z$=Xsnqv>%Ntf*e-8xGA zKuMinqQ5p^Z#7>Luu}AuYPz_B-T8z(B`|Ki;d@|Y-ygEupA&>qMz;KnJYq%O)|W(0 zYxGz;YRBxf+WBOkx=gbGHyheLu%th--u`hUu1(Ii>xE_#MMAz-^U}#>gI0ynSABV% zCKn}}1}Yx=goTb#-4*dd>1l>X4pOF9KlGuwB_0r={5|j5I}^O z?)cd9$3CF+y<_q89yz~_j_xR?hlE_*r{9%C4@2KqfV$_O&7C>RuVH%4iIAgEkE#)f zw>SGE;V9q|3~$l9_(Q-EzQZ0xJeWwLy;D>Sd;6FXvBvy;brYy+1vl@>0gNhnzF_m= zae*~3LD4SYEt-@YK}{TYlEms0dN$3_^xws4dvBe}?mtu^@_2;D=n zW;;EWi*joizdgpV&irjk_`cBMeLbq~*jjJ$>izwsyY|J7%0;5N56gt&l7Jq`b=&t1 z?Yg?Gr@J5T!B<5St{v~sdv<0#4*h<)GZTkLk?w!$!Gr*OY6d>EB?^#ro-+cT0j1IbGabKO+>Jc+qt+zOf ziJb+=5h3plpPo?sV2fUwXqtBJ@pf-8(w>}6USd{xE_Pu_Bb)!aPM66GnjoN%`jhEj zLXCi8K$@)We*rMNlft+W4_B>{YjK~T#E9D()c3lJC?i=TjvlSBn1xBodp^g_5F73- z^y$%MBgzfvNF51}CBm09u-0c;$Yh^aU!+V6##7PcfOu@&!dJ})DSt#NW;7X9% ziLLzu&12d(6b~QN=CrB*!>;lsmgH~XX(lk_Pxim_VfiJ;|3FY-NN3?pBdJK{X_DX-yx(I=d>ibbU^$yyWFx_nH{r`O6Ux_S@pPki7^P_(4Q>W0e* zbdp1U-!T!W02Xe59VoIT@;6w1{x=)O0=f4*z`Yr*eX)M1k9(@f)o-pZAf>CJp8pX_ zsg=Sequ0N#;-)9mfv$=q>eX+Ljeu9%3fai4er;-S_?p`sN|L~&a%==EwT-W}4VHKx zN~Hryv7*HpOb(SnqFPtXlGsAb2IsrC>yFv|HH5r~T+(v;8TnN1+fykJfhNtE_6jwM z65Q`qC>=YF9%Ktfa1k{hX0JvXqN7}i*sM=jYAl$tCn_%WKzjLFfRV`ilN91M!H_UO%>aCX6$@*6?D^_@J&=2dFGuC>s1mD}` zC~7$_1;M5cgKKwiRhrGUd+=f(gJjda`lY}iW`-t^OI}*?CPQ4==ax`L|3l8{Ij1Yl z!9v*`o;ic!jrTiMo1m$y!yYhHqRjP7ltI%y+3Q}*@9V3>N*+vIC^o;kqUnU%-`0Pm z38PlepecB&>N$HDf;xb{_BT1r7{ldfFD|2(8K}T-aAdV7O1SLR2!_ADb6gn|vwE>< zq+OVKwj@y6Qq#LNck1_^(!JPkR03oSa*Ce}-Pbfvn5EX%4wtToxJ}ZU#CSMd!RF9Y zUF&~*e?=qI?k_#p6Vup7G{!Zq5Y zijRPx4hXfWl*8xMhZ4;*H_Vx>^9Ca6a+VNj#u*5qI{3JH`oJw7_*@ z3dsQ%+OzCH{4sb4Gs4`vb)BbjeUaR6(CA^`{o^^_h_z9y#vI@JZ)W!k@_*%N#e@ts z*vdhR`TqYkb!}z;!2&nd=6_GlGRU&qUS-3$674n41xEC|m4i9P4;UGXI<+WBt(e??z`W_XM@} zxV#kFQ|F2VaweqsqmwH3y<>T5sbXO-9p>x2SJ42V9(<)6R3DRajP^se3Z*!hGpC4oT`oUr z6*JsBp+yn~`b@tN9lggmC+YvK+RbSogg`?uqlIh5oyW#jTTz_6Ni22@Tj&Z&}8$>;Zok9%@f zm80bq{p~QvtAC)+=MrXioEwM0W6n$29%nv|U(8I(Iaz$3ADAVJ%}to-RilfrT_;-r zw;RnKL%)h5v}cTIHq#oO@jkMd1Wpoft=H*&?%Hf$T3(+mMZQcIs*Sz4dxyJf3C87? z#?U3ZUP~eT%G$rP=ZX-d65I5&%xjs~KHrCDjoA)Uu$5`iw*dpz>+_$-uoguC? zkRoZ@*Our$DO&1uQVdsM>9oH(XoS6m#GS=7ZKbBhv8dJRJwBHWC@#JB*h5LOalG}` zo_9Z4Td~$YRWc&|5|n|Me7ZlKRMR<7e>f7t008+-pqWvmUtL3wf-V?-**8l}`=8M2 z8&%6x6A=7tEi-)ScWSo-0N^t*usGFM#B;#)2-gQTltqpXhdbH!)OWECCoix{mhu!E zn?)^qDaqf1fRdNLFMTm5Y&E;IjD%}qp3B;`QEKY9B~ogb{HQ(U_Pq7o5AOBAkD#kQ zh$&9rF1Yli6DI5D*bcRxiUe*tato-5v|QdQ@hKgr-sO5b>wnTcr~p?q!=_3jOCExm z>KtdbYx^Ok$nr($zz}E@G*7K41+dcY?E%lj>=Hfk)W+g{% z{z9NM)d#Z(U+JZ|7O%^TrR;o4V3@V*73w@~vcraNh_3i*M=lI#Dtvrx_%b8)B=)+h zk^yvsIk3D0>cf)G_6T2RG}d24z(#KRg5&#%<2G|A;!)e4YAQOn>N!QL&Y49dC0mU!6G13T!m>+2VW@Zmg#S$f{C{BR!jh zZpAe#%&HxU{xQewgvks79hD(0DH8QZ9dwPVTNEof3ZAfi@8$XAx^{R&ON!k|>c#1p zgOT<1x!OodFkCA35@7JIF%BcllAbDYu||rRZlb%0BwNRvHZ<)=gD>lvua|4d>s9te zoeck|)r$;bnNuxK?mfkaU7IKSHUaJ+A@G-`YnJz7wiwziHUpu(ge?~Gu*g9)>RxZ2 zue-=WWZEF=&5)-dc(cCOZ?EqC6syH|`TPwL$shjNzm=FJOVQQUG&-LhF>~h`_{D<-$NN$y;`aOpISaNX61z*>j39*>3NzcRMi)kBC5Nq)<-wLpBSx6V zlQE`5c)jC1+9A`nKO(%aX%tahhqe^=i_L_+2kayO;y@Q&cxu3Iv4{!gp^BYLH}k}< z?s*7-?CqOIInusaOc2PzYD;Ri#ZWq4;Xz%MEACw(T^WAT%CUEH%+Fo4vYYL_h(9s7 z`?;LI_Qbs0dgZu{Nw4QK?`4SfEm66Y4M&U3UM65ThFX+Xsxu5P)^u$>TispjBx!*( zaL+j=mRZM8+;aQ+akHikWwQn+{b7=G=~6aXYCT+d+B*vI^g1J*tey-oEx{x(A4sx# z*!)=muL_#87qMhsm!?E#at<@!N>UvE=IwjlYWMK-aGi3m@jHIcMIDu2pTBdzdKJg0 z-PyBJ4FEgU>7HV+r;7mhiT9#4Eypho5*9Hv_2owm+wW0Zs}Af}eAN}UGv9uiuN*W* z*RqmlmMV*s*H-w=d;`P*`dL8uJTu}cX8opMBp(q-+6K@^P2=-{3v6*rO0NTt15=bH-pO>Mm-W3F3d0ES=aN z7`UE}@@qYg(~q^H)nf-+3}Yz^D3Yy({hW9=|~2%~^Ie*SWHpi5%cT%CFLkU)ro}NpCTT9OG=H=AWqqJsM&WB1WH4sy% zT6$c*cn_ERNjGAPEEk4(hsiCyOY}GWwV6if)OfV#?vlXOUj1=Dcv3B?MKJ9K3xRV}Pzc+LAlLfvRqS?|5-h4cHub5@eda^sA#HnelL(*8hXz7bW1RuCL>VLLV)=ffJj+L}joy!n+6Z09Vn#e4=s6+>8wL#lbrcM%lSU=tUyum)Vf0r7VH~_yYSipX zZITu>b2VWJZ|FgK>#PFv8(~M$|L}vqu?JxIw+0ooOYL;UE&JNspC)bO8%SovC2RY* zj~+9(lB5ZwH5vIBPo{9xw&M4@Zj6c6FC(ogmKgx)a`}UU-UH;#RAX-6(+Hn(wl+g zus&)2uU8meOuUR_){i+Uwt&Lie5|3+YOkQn&teW&&GlO>;3NOu_N1K3;`A*9PJ%0sd6}QZ6eFWJ}|AZaM;5fncvD%#QWP*Qp zxm_P|hOuea)KuD)ej1wrorm{{n1PF6NbQ%<-!N70ZB4I~q zmvR;0+_xx+D^Ip}gWCL&7#uWQt>HLO6b<_eN8?yrP!rEI@loi)CvU4jW0jOuhW*it zDm7U8yN_>sE=g0@>sqmR#evjAQ;t>=CR9g#$uk=Y&kGjLE5D99!{U4$qEJxnL9d+> zhNr)hS}sPV)qXcP!uBcK#yFYa5(WhShH#fFG{0%efBqI0h{i+X~%H4nez-!Yz_;l%MC2$2$OWpmQZ99LfVWs41 zirAI#>U@`d*>Ou+^`h&kfAOu0MZ@Wx)`R`>OAIRmqGnzUHI0qk5j+f5#D;}KixcV< z=}jyI%U#IyTtr$9`z(WqGN$Yd&yi1QGl2GxBfV5tbzos$3 z*=!v&HK}zU_1N_tzk|Ul({qB=@M^ex`Z(jZSeFFv0^rav!?0vf@-0{{XD>07_JU!& zhJ7W@yx%`*QA8%aHhaM?>8c5>HS1hU@S2P2E@$Byk4m^i{A{qq!XjV(-+4~#(E>4` z#Re1JDC;$}q(FQ2rSBJj-(w2sdwg(l#J~}1O^zWV@w+W{?lI>oWjaCbWqx>S(Y10> z+TA%de{QutYaTwa7J+(u_3cK;EL8nVXJWu)4JYl9t7%G;!^&9H7a}{OZb^o72ffRm zV<2yHY?z^CX%WOW%zCJ0*Qiyk;o=lV29bpBG9JT+49QpamOo!Rwf?LxquIEe)~^P_ zsn@_Jw3YksNJ>}eS_`lRS*KTsyxmK%amdIPrQlcWr>utLwxYCogY@Gy^6`Mb*$y(#;X9#2LHn|41W z#Or?8;bYqy<}cl3GL?*Jtro?UH_iD|?=dKCz2~W~#}Ii6Uk(TlL0F&K+}ySsw#(t= zJTzai2E7Ev4el6T3*T)zCVAc4dVAV8_A3M~7gEGH zbs&RlS55pZ$R!{2byHj^$HZ0jAgUy_-F8Y%J&1de9 zOI@X!0W%?`8)vtow zPVX!Kh1%1)5n8FriMsmK6%|C%>D_tnYWALWzxwbc>6!Z=oz;3uZ3eG!6fMVb#Ib=$ z%oB8pc++^vrSZhM^G#AL-pFKU3w3n8N>qE?4 zO=zn0huu9XF&{7l&2sW5ee5*ME@_sM(h*%0Z*qTY5dT2+GvgzccMx)lKjJ%NvmQ)m zA1TW1w$c+wICra!r-r28k8s(NnQ=cQkEWIhHK?^WWL{JZ*!kosB&7Mm$5ZKXWhw87 zb&>zq^cu7tC0mXVDJ9qBFN6F?{sIb$O*LKhsYhMEO@)f`DiMfW;y>)C#zTFt%uQ`} zc0c>Q$zK{%<%viMwA@hB%GCHC_pa-qk-)4jc{BHgM!WY{pAFkbf?@zN^#y`eT?CJ|TZhak?w3ruZYDjGMQLEe4ali(s zTG!3VgC?aKNgGL;-D(rZ1Xprjm=q6MW4YL9O^1FSHAzhlWr@-%MmNz-6tZ!KuKM## z(+B^iW2|lV-_j2y*OA;s-Efd!zKP$uRkv>P$v^I5?K-S;KGKKySvb`o`KDeGPXRKC zjLDc=Q;?55?Drl`Jh=!Axgd`u;jX=-LqYbSzpA>>ZLRZzvm>U1A3{IsyVz$=va>7R zedbnO@JvchnSjaOVST~M{+v^lq#2oJg^NUl&cao#NZM*mk$0C)=u5EFwMl7xHd?Ri*+xeSAzSOoeOv1(yTYnT&^Q>ae(NNg&&- z*V5no;*N=S@!&=lqoWe{ehP__9kg>*whnA4qo&5y1@aOwh?nI;*x4Pyufo-Ojq8EG zsw?wUks_&krPveSP}@=5ll2_jiRjV@f5KZG3WKF)giQhoCH0i(IyINkZ9z}-u%tUoz8i)9*nhcYSW+x>Qp>&2q zJzN!4f^5Tss;!yDGpdLn>CAL~e+Bq{6Un94nc$}6WM-39#s$w|iJ9ST0afU(UHm|i z&C%=INi>NEQ^_vMC|-{%jKCMIG#P9wu>@?wo$>;{V@o(UrtPw2D3Lks=cu9e9S&xz z+waVjceI==L)%IN57p0mY)*PU4GF`Zt6a_hXtJ)U6cHalnMR4D+H^oqgI`j94_-Pw^2NAC9t z@>e6-BS`vPHrGk>D9zb0iojH6D1;p%$jBP4+cCc3Ov}jTvQNXQy;~|??Sr60>|Q=q z5e@oK_o#3(m$PYpYT=(MO{7hn%KbFq?{7DX&Zw%z;wKJx=Syu7DOV37=Yl8cg08;m zX$^nLH2#=+3%l}40n6NvcDrMK{(P4fT0cJeuDcMGeVHY5^8IWFuM5u*al`kf#*w~K zs4LuV|54`Wj5B4wL~l-@wbVT_(W2GPe*{MawLnbURBs<8v1w8ge}1mgPARHrqe>s@ z#7Lu_#ZLo^eCx+65zb2;y&`xY@S@-%XU#aYj9JtxUn0E7M!=+kc4IY#A#DoRaMIPh zDPu1ZPD5@~2Q_G%iVfuWkYl#`$2BP&Futb!^j7i)@o2=F zA*wGJG&npmVDFw;&&M*fc-zay8E)Up(A?Em0IcS$fHwHHV^#guSDX{{SUVj5t|9HCj7Cj* zzBqf1hoB_nKc#bihn1Jn71|J^FP=)8+!-)=hrKH5h|_ewlbJ+%K1cM=gcqFAWsF2h z6=;21(|Ve+7{J_EJYD+7QD(PD`MFBdSv^}V>*LhiOR;ANBY78Y@SW+JwEn$~FTFk6uTp$@^WvaX`9V~II4SqVFL6UNwqMPP zE}B*=-MA=CnT@r_rgL9?CwIL(eHUNf;c~CxNcp6M#0eqOQuuAFLKHg6784j(4`X}H zQdp%RG(qG8lx_@8UtM&PtF-9z#S+?9KnrEW%f@noY&-RA-8YAp)x2>#VK!o*NpVm- zeZ$M+2lbU?w~|_Hj>cSR?~C$~wdl4)ZGI+J552;?EKAE>gkJdpEC7bI)-mac?M@&` z-2MyXD?&W?GlkctFW)xoeb=qJLEwbsO*6@3!acb$`_ZVuJhT!LH=`tWS4y;0*R8#W zTGNOMd6HAK*-6ySJ@J0ZVv` z>;v85`7t$vSjqs7KVDfem*35MRO+~2w&s%EqnO_$fY4~3*V*divM#q-Egt=Gsv7Jr z_!RFYY8o0$!De7$s1^O;Ux zL-ETCGmqXPbt3H}38faSIO^d2J=?gXQ`F7+Ar8e`* zc>4@^E3Z`P$#vXU5#kQf_v`lK>U9zq#Y zo=UB^P&aqGuiaMPK*Q;<@ei$gBUz`&+&szed}bbB4G)UNGI#x-bb7yT<5M{#(eG(8 z<{RSACLMs->b2vU$b4GIMzF)>c4?l(kSMW~sHa>*N!C}jw4y{bl}%zu_RkjQ^+PhiAI8a=Egj_Vn8Wk-l^MIKuFPK?jmwC41SVkmP zAJ*C)Mh=Ovk{ZjcFL{u>Su{txYWhrhY7Ov5Zd^pRV`J9=EPMXc*PWHkIT-Umg7~mGRuoRXX2R(Q7pbtG9}(D^Ze=_R66jIHZyItz3QNLS8ha4H^gY zBZ4TXb#0|(P`t_|bIXr3jjXOV+9oJr6Y=PQ#!nKibb!Qp+|QM~sM4SYa!c1Uqc-FA z=v&Yt@p%(;6>_siR4Kl`r>1?*v8$z~v+3xg=F|{L@KLK=4}wrbwUl*dI)SRT^{2P$bk=JWxeV9xJ zt56UY&+Z5@j0+aeog2=7W#-mkRbC|C5qq&wfDTsW;r?Cq(_?n~d#6*Ng~pnZsNx4o znTx%(eBWR2RVJvpLdtBS{*SlUQItPDwJXbMV1y1%5tiz21ewG5HhAo21rikn?yBW7 zL$G~{4w2F#ZsZ-MvC%!X^Qsym9#(bcq8#K>wV*2h>yq|_M*@Q?(}_Q{zFOXFaMLrh ziznW1GB-=a5%)f|jP^NwRVCRhhZf0B3(mT~5!|+q9Gj?GBJ!A6%Y)3w?#BNot#mcR#m&T085z?& zU9I|#KCqGk-16jyP2KA*ei|X5XmP0|gRgdSqr?36Myq(^-+piAThUKFmzR}UH}@}j zcjkj8qF_kL(p3_E?Gn*gjb={A+^)mhk^T1)om@_wV(*;qaFy&HP8mn)E%@MHE*-em zbaT4ORJpYcYtr%S@luhV=-$8b=(FBx;k=2`zo1_cM1Mv6QvM>ju>ly5sJs}qo!M#+ zS%e1?w!q&l)PK4B{zfuftxdIkLx7d0poXfCZ*X^LqU3fzL=^VJ)!=#IX46NEztL_? z&YdtJoI%QBe)PJcJi~k4M7sOW42W#u$;-4FOfs?B{S>doJ_N!{*}i^wy96VPFi+P1 z69PSCV&ne$2*Ox@h|eYd`+otY)`iV~^-4k?I{UqEO`}hMjLfZKe_XwK!>#LlkzkHl zX6e_0AI8*4`bBxYHXc{0EJ6#UeU~=q48OQc{##<$@z^uSezv}EeXd3{Z;Zs_$}76j zpZZ=jp}0Jmq;Z1NJZ%_~$QjjRj7Pgndtw@MrHgj@_)ALv4rSamIWsJDN9%jQH%Yri0VTT$EYKn%PrQ1f*Yq^1=KOX0YSz*Itb zXwEG^drh6B3FlFHP#wn%aR)aq3qN9x54FmY5gOop#?$BRwf3ITTjMH*>-~1rFH$pW zH|0;FJ5}!B2|e5YY~v+<8_^iteKSqSCY7+=?wDd_)ShvxzG5Bxw?D&Riq=8s9nF|VD8M_go|%M z6M6B&CfL4`HM`lOs|dp%!B)>aL_PzeR9usC)}D@a)rw8@P^#$LMmqO*{7Ge8XA2ZDBJ;l0r&7V zG_%ZZ4-WL+z8%z~APs3(1A-npyESARD_g=sb$l4>-iV@1wYTNTN){RJbG}p8bhaqU zi*%V0mcs5_Faq8#gj%mG`rQg-57mv7?IO=(Y|-}HSKvqd>6dnCdgEzX(oxd$at)+>QBQSpFGmA zsHWxipbG-)16LI8EZHWpD9%$F{7B`&n1jMd>2ku6a!hvNlJrNj%ShW>qdfR9Acl4E zU0acoy-jd5fF_YyA3`&r<(n~_LKSUnHEij>xkm1@lS&N+U?$ptj%?j!#38;nWH14(CZEO@RMhhs6JpWW)I(;Izl4!)VT{8q= z_?2l*>{)22_epc>vDx6SL6rXcf!LqaLJ)chShOQp_FZgVrIG%Y6U%E;pG+rcNLh)= zx`+S$0{g4SAG67_`s`DNjl>M~Ib6z8-yP-!k=wp<&8w>V_heG#o*APeJ=wc_A#yHDzDBmZ_xYFPD-*h^DiL)Tk1&=7tA z15&7Myw7j7I5urox?=|DJy7{uh_#OA<>EI^pli5^Ro3+f*@yiOMnit3eD((P4o@2P zoZC0d&m#NV3NiOhG<=1&s_elNiZ=(Hmxe-;;H;{dwqZB40cURAo~I7O_AQe2oR<3D zk^YLcx-2z9d9RyMOkXlrV5ue3mfcl1WyCBD5Hn&5Y+D9QWFIDrqF9Ow3T)HZ;hBJZF~+jU_aAhn2uD)UYz=JUJ9FSw6sCb2)d$3=|K?ybqqbEzB* zF4zoMb4-TXhZ&isC&$;1@dN*)BG~lx5_i}YT~z=8`xRKez@3943*#_!0FAn_0R^2;K3OsX;5r>~#OBGHvzY>9ZS=bxk}`S^ z1kw_;R99K}{w-d6F!v3YA4rt-gKLlFWv!AXhON@7^kS21>=916w&-V{zS#T;%aZPS z*dIq2mZmYhJDvc`Hki;@+f4<;3!51*ExdoewFNO368YA&Q{R%u(^MlGJ)a8HOHFh7 zF6r@zW0W7T#c@=4@#G!}vyUs;CK(4;h5qAD&+6L`xb<|}{+>Vdow^j7XnzF2*J`vS z|6gk&`AqNL;-#sP%N-e63l8osM(ZRy#;%>jE|Cf_ptb%7dv6`pX1Mn0R-hCprASM$ zQY<(Wmmn?f?gV#tDBe<}xVyUqDS_Zt+}(q_26vmZ``h2%GjqsFDIs(-8>uXG`iaui%Ze$tu~K!*UYzGAO1i`y+JLunq+`8X+6stVcC zOfjv8A7YtZ9X_Wa5`DxaP5&MV9iCDrX0-{u@(cBw%)65sbMMqLCp@D6M`M4Y-ajxz zI6)aAZ(Ww~1C0Fr%_si{Tp$0!H~*#C`D!vi`EWh#^T)OE=aS=^_+z|4T>s??o;Dn; zZ%G%$14olKr$l+L(RrsSiFgZ4P?!5e(y!6f08*>FRW-xh2`f9x)aQe$pXSj;^2=jP z9ms{|*`1ARPaDqz6n)p{%aauP)`P%WC(Sz1aTr zV!6dE(V<`QCDnA8YJWBOvXIzvR084BTl6g?IM5#S4fIo)qPXFa(0yI5j43^yE~VqJ zm9$Bulc(!vUfvt7*(BU0gqLhWJFmU&1^KW zbLR#(^Fqg8{RUFx{9`k}8l_r8ZIF%3B&{sF%aW$(`YIj;OUf5)*RbldSFgur(WqCy z>*0E|u_lgq9ghXs@59Y~X2MUNQx5u>3g_2UUg@9*NEz#+mU=fR>b}E{2$6pmU1|H4 z1fZUu!%Hs3h!%<-je0fi$AT5|VT8E_xSL!hV>|VW)rfJ?o`o=ZvN+`t6nT3)1$RYT z6$OgN28G$mzcH5x=eH!oy&Vr%ncfeTELU9O*VZHaW!O?+vkaAmsYmLxsV9%#X|c3n z?@AlU)Do9!BlK(6@J-nln%`C#-)1|SGE3+0N`IpG z_iG$1@L(}3%)=hG-!lj$*M0S9w(>ZfUJiw*48Gx6t;p`IR;+lS3NXu+=o=W*;kdO2 z2qBahJOybhmx~^w&y5=fG?k31LHifAS6r+~992Jo#_i90peMzhYyB2TDoxkHFfBUCx`>Z+j9!aE z5AkAasc@Q6*(i?}6)slbtq=Xgl6rvLy15@glW6eW8WKNm8@{#iC6iBl9XTQ)dGSaI zUu~i26LxOursUB5md`|EAJoCr{WIGQpEsAc5mJMZGg=W{x|NjzOp9lwda<+z zzBXCv;+W;HZI`;1hW8b*vVBlh>#Aiy6#yv_)wlyo_|<1W{KUKCqtOVqmF72;|<3>&0r=VX9j<2y%BN4Hv#e zt71VxWP@`!BPfa4B4oc?7rbR0n*=S%s0waf%4rdsT` zn2h#WYN8UF7A+5nXgC`?C|84)V>Im=$*7b?*-Sc&IW0s}`QQ8W&cZakGZo&{?p^h+ z9U`IQa^rJ5c#}G7y9mmXH?f_I&%&S3iRh?G1cp--Wp#d;6@9mV%0X^=wGWOXdG(8I zf-0sxX7^=62RRjZNzMU4i(>#8!soGwjxB2_JHp+m%sIIN>YD`nCY}>krdX3L0k2mW zbv3;|HXS*3{gRq@*eI=zx{a7tg`-#OG6u<&)t8>q!gR0`BEgwP-z#j5ZP24x*v(Pv zwh|lWGPFnpS1)xI%9b1s(LBplAHEdEm95#G<)4Y-JPric?~?BWF_&QyQrJWvFM((ZEd-?bwvIY>?H|I}AVmIXqeNuTnmXgsGoq5nPeHAS zevp4;0mK`w^s`{A#(|%B*B<>PwdisRX7Np0fm40}_l(-Av>!vun(QU!&=a={S5CnQ=llV)-+x$ z+l!%dHX=<;f;ZbHy&GMfixA%%rDwx$9_!|#4M=QLa%PD^yt{iy)RD;Ul9cnqg2N-< zlrl^o>!RoaznG#JLuvQgMf^TfOz2t;zXS2((!b{&%3>@!_72Fha(F<=(%tMMN=X6ocpexyZ zbH~9t)*Y`UzK-*DmR^pU#?m|Z|MOx#(AHYXRD=0EP@uO4<7l2>U^A zB?Jo&CM*0D!K@Xr7ixVk8H_mu=q!o75;UB}z|p^6#SCuirp;OrRz5!mu}q@qMT6Hl zSxX{w&4Y1&nw~jdZ|d&GzQWtt&g#dC9SOayNP-a>935a)t7&AoW|k<}U++CA+vMvz ztu19l(N(DrZuDy^(i6X@48@+AOTe&`BY$loy^+?f+t~V% zF$C)6F9e#-Ab$|1yLBy zGS2f{=|?|(%~|c@ba^qzfpr`xT|r* zlm3Nn8pa|kcw|BWQoQMmUt`R;s|0^IIsamGV7D*H)E9j+spth4O~q`HirYaRp7k)Q zy2I@EWR|XGkK$@M1HKJkv~B=!Ky>@KltJ6iEPQqHC7jB<%(z%lc;AW89rB;Apcw3L z>?dtke)BGs&>f)Q7Jt3Hd!a6GP0o?7@MpEji$^qocaz6`#N)+9!tcX*J@4yEZIpD^ z6jA9{g0N0So^bHbQ?{MLl@nWfJni~Gjc{xRFYsq&=h|O|AJ>$h;sNM=2r~#8lzCUr zU}~SEU3K2ulP0cUqi~NfMBqB;hra(2uJ2U;IOOi^J+)i}0M!!C;BtRG#bv&utuu1A zWacNVoFiR{KPZ+&bS6X5W?WjeENHTwgZEoy&RuH+$aP-rUNvu1T$-b}d?68bo|kzl zG?vq?fSqHVtP(HWxo%;MC2`0N(+o0`(VkD{L|K^44DjO(CUAQ5ay9){0s?XZR26u) zTunsw-Yl1vNkvE$<6Tj}B`a%UUj~)=E?wij*8E8XQHieaZpsuM%TpN3yMb?@U}K}9 zIm*@VpG+3auS6h%UcoMvlcV>)7EX95X)tP84HX3YXBp=OhVvNbnar=h6Uf0Hrf~k; zlXm0fi3MfBuZq3#dJ7pB!u3ZrZ0unk)g8D_k&qtk9q|@KPtk-2*|SeDo%qqMyQJk56p0YQ#};&1%SV^40PeH%}zj4C#opU_!c?X1;dlhqaT`)-Ia?Y3ja@NRx? zpvag?*CimdFayE_R6f27t=(%kz~59AHhv$U8vr1&w)6rIjREOl&pLH#0$EYk^&LITfeft3ZIe}|C;p?q_6F=#tp;xDFLSf6kBt%V&tSSvlK&8vTuL)-ctFUntBSSi?y{NGH z+C{At%ak2j)aSyZOjh13vGzHb@A8xBODSF-wmaDxzlbzOwSDKB*hA)8fO#K>f;gq~ zAjq0T1tRg@gI}RDr|-wgpPqv=T2!u{TdY0u-EGL62oxL$97%1F?p)r|J$Bw5*f#Oe zk2?BaTaq95Kjs!Z#(vE;gNZ19S*R;k(!{x?Xx7;O#VrBTnJ(mT^qvjQ_gk&w$1v23ENTE9?~4Yo45j1cXx zn0Q6`MzLez)#u{912biddEuLY`Q7k-P2c`7*A7xey|Ee$W5YNQFjvxb{~jNoGL=~< z(=yi8?7s8nBGsxU8=CUQE%=ZOJG|PQ;rH|>B`@}Y5(t9SU0C3&391j|Z~bFniQyr( zHYPu?JsK*UN?h;?T;nLL z9wX4%Q;Y~eD1<&Ei|rLQLpxT7AiQj>uzfGs&(<9GJL~Iu{l+ftD{}@j9^9UItSaO%EEqY78Pb{WaX3Kq<5ajuQw&(> z-dcoJ--Fy_?E{AfbfhEL(%$2JA2iT{@xWSXsicISis#XccEsDg>%ZGg_L;7(KT1>ojvpfQfHnCM6}C(z>nEdN;Vs zXiLhP!+|lqSe%0kTEB45`Xb^vU5bE1Z*y}eQ)ZH*JQ--1ZDM;QY16#A1z-x{jFc{@ zb~t^G(I*yjlbX=%O}#Vs7MWRuelAm_+Qbi%pDUZCN>|LH6kHWQoU&bIvH9hWM{%{2 zu&J{zJ8aM3^%UDl%g)v=ZKZ)PYqB#(dI*Zk*HCi)oywW%~PUH<^}&Ks^y5ft!D9ISXf?YipH)i-RgOUMP+N*Z#9s+46 zQw67sWFJ`P`eXo%(-L^Iq4Oe|Ra_h@X;INJC+^I;3^$EV3j5!`iKyZlv)?%h%7i{o zNDw6BQ-V}-l+Fkk4jHs$%JTr5?Prh|;^z`f;|lzsWpgb|W3Ju&3U0kC`!X8DO;veK z^m<~6f5K4;9K~g#Wg%tCQks=w|ABqAJWBUdc9ELh40Bi*EZg1ngSd_o%`f|7ofKRe zc#o{OltyL6Wz+NYwYiMZk@$zC!=$*k@pgj>B^OA0Zpl+kYWFBL6V zyvvX7l)hy5i>Ksk3&se#SEAKi#Scc-e+|s59}Sy5o^82AU8uw zHGO%XY|kjci&?V4RPu|C-4LP2s{;LqtE-_TSO_uc?sr3;;B1aKOeX_ssaeG?V%FQz zKv%+IyE^$2LKcH35e*SlhL~w;@;WtCc_6U|Y5H?nN%mCRiJr>k=41RTJ}CiJtB_~N zPo5Z_{P6L5JXA2zZT58AohU+TH4AWBFq({Gwj8T^ihPL7J6{m@DR{uS1zfqHkV-AI z;IGh%g_0;=_HWcO%Sy`U_Kt!wDczQ{Nd|LIbc>C;)ie(R4-poR37S8d(394V6C^&A z_W;__)gEPQNlDedJ!3=;I_9CJ_#{2=sjD6Vj_!hD9@bDZmkrvkjNza8fv0Bql1 zd=vBEQFJm3Bq2@BHC5L{jq-V#PV`4P^hAyfkyN(k2ufMyVgF5Amzlqi=>2`dC;vy~ z;_3K~L4QO#e>%GnS1ZnI_SV0T{;M+Ef2q-rgprml8S*3u6NY?7O*TV@K72>@$77>^ ziZnVN+uUQaS)N92$zC&TE^dDh9h4ppWpb~@W7tW*C_BdB>(EwGK>{{!>&{%~#$9@O zu2)nPkK_OTFh9H9bUGH}Nu~qDg7>6RwBJ{r0?*XLxm}xQF=_<*E44&nX@TywEAWc6 zN&EB*)-5CwB@F5D)G*iP(;gn1k`bmc#~oqO!Wveev#r|F;30uh0?$?r73;2IZVuM_ zlZ@>pF2oy__$Hkcz*Aky#(x!o=ZCH;(r6=7HTi)%8mj~le2J{Cgmh$_X%fgW~XKX2Z>U|2J6Ue&qtr*F>H&-S@eBb;`-n zqejj8u+8fmLz!gB0h00Zf3nE<4#H-Rchv$k>XShSSu}5pVFl<19Q%xCV+)$H!I91PWo_DxV&QYVZE~QMsS+e5`^PuHcB5=mUrXZ=XL%0+2)BY4tdneKe1@m zS|3JuN7E;$3+6At2i$mbOQoHGprF;oi$G&GzTE4!xc+x@3m&0|I~EGee&JtBq#1PV zszx3sgxC_J8M2eYWy2$wA}>kJ9f2rfdqMUgNboEYyV-wc0jk5D*>`}`!CRc5Cc?|t zNro2s)2{Uh4<;EfM`k-6I`untqj^ohn7H~KT%)KZXPtdXvxawNe6H++7*MGi%yal^ z2fCFhV*WK6(RYA|MRgIeXw}X@4qSH$%o^q3J9Qx-c%r6I98vtL*aG?W1uN_U}`O_2hU4bIYdIpOm`rgozv;H3l?S zZblpOm)6xPaV9h@u0am8v(0SQySL6NC>O6^Y%6`*p2tif$t6vdBm2m z9Y*WV=9*P&KnL5!+%{2pc@p1kTy8LoCtZpeiO|ktkEPrLwzNme>kA|v>t1h&+#U_C z`7k(Q47{InfY|mI&)xO3<^>q@a^w?P?jhJp{Kn!Tvd1MP61Bbh;Jd90_U~|Wy1H}5 zjFJ83nj+e^trlF+*H!u4no3Lcb7&Tw8_k^|^k$9PlyEu};B70q$Oh9$`>=V)97yMQ zdwrAriHN!V=9Jdu#c^kwS6L{Ib+J?)YX5bPp@5)5D2YcYslbHN62-a5*2ZXHbM0iK zx?>hKX%B30MAO;YvuMTaXmTf=C1QQ7?W<2&;epOc1igh~5dnmw{urZF_aunkx^4;3 z$Hzd~`y2f3xZwK&*<;ULfW813Oe1Q&U}-xw?+gB9g8PenHAmCf=1ESq=-(1=t$#>C zj)a@DP|MQ1)o#Pp6i{vL&-ch2NM4Tbgu~+V>^p| zyU>y8Y@r3qhp(b?A1Emu_jT>n-yWUTw!B25TX5z-W@T@ z=4w>xi=_e8udu3(s17FrNmQ&wrCpvk@t)@3-0Ide*K#%$%7`h{EaYVF8%Vt_ zdlMBMhcc{9yZ9+aK27{(xPTD7^!;|sO^$h4N5wY74n_dINOVa($D^S|Cw!b8g?v!! zq+P9i&xY)yKZ_; zVqD7BbOett1o7`g%`ciWy*uDD+=Vjm87xka(s8SQ&=*0AH=3-O>T+P$Be$(DpaJq` zjzE_lYywUR$*@{{R zJ-mci0~0W(!Bh6)fEI1J{>3nTTV2Q^NL|U*{n13Ce<*Ae@u6f4l)@3L;r!)77wxj& z7p(r7-72E55N>Jt8KV96kmIE;6YsggkfzO0y~=kFm9nDl-3XI9Y$!e~0=h8l4Bd2+ z{EBcOLQcX;7J#es{?>KO5^r7Sb4Mls$SrQ6Nl+GNG1U&Znh3j5F79!6ODHqn%F9oET0(9msy@05YxOhONw9r3+hPxq zy}I)4>-VL5r!pRd?x$Vy(weZ+iYq^$?znfgv7$--2={#K<-cd~kK-_JK{=t^y5ALF-AU=!@BWBRc0b@op# zSTHi}Ys0!v29|0eJ~|3QkueFRbtycJ&A;1|`@=rarJW2Z%bmL$mg3apb{5A~O0v!Y z@u#9VJa60x8;NQ$a0JVHFi3QJxV+;L$?8f5#M@df4oJ$zsVu>b)-V(R1#Ryp2~<5j zrM_jAB-}|42@FntIXz(wCb|Z)oa){RiI>`TC9$Rv?$^57S4f@Ak*unQ+d~kCPNl#| z-#+O4A|cB+^2xDCMUO9)s=7_X*i~zDgZ-!$Wv%_$OD)*-QbJCMYkb<`bXe(5Qh1VXx9gce zwWa%PLKho!RCKGWyZZqygOVX%P<|eic(uga|Ab}K2Q&2}y9knjzc+PVfWTZ%h@Z|^ zyO9cL*V1xiXYC9I;8;(mroN&yubHy*#mc8sn<1WEY)hNP&M%T7chamFi(|4m#Q^TV zt16;S{&w5`e-8(ntO6gN=FlU0me`T0S_m5zYHmN5j2|pL;bU-HNr9xi3@nBD?vJ4S zY5&ualYFviAU)+BSY0h=DW`1e*ZBs;1t~K@ParF;f&AV?L}=Op-BL!%8J(SOR6)FY zq3)ygijlRZ7d5T?#>xhKcm2q>jy=QfrHkKA4Y~i+RCaT}VlW3KYFd7vaS$Vhlos#| zQ;Xsc0~}i&+T34Kd|*JOPrNfBz=lWZ@QZc0$a;5w6h$vMekMrzmP1%6SKdJ1LOpt2 z2cnJ0Va@L8g0y}7aVXjFMul-|I6IcpOq0synz+RXH0!JGy=+7XL^&Vs@#_RbCY@Z& z#e>>Q9%yML&AK~BgR2<>mKE{;fdXIr69tAJ=T|ezJTgkLg|1vY6A7l63W$(QLNhNj zqJLEp`%&f^M)0a7wdh*9yJ3HGe%!fQhOTODJmGuM~9!oQ^R$UqaDG`0Td3Dc6awzQXdGhPFrZ@cbR=I1;>}AENEgmz*D+ z7AVW6O*F&8E!F;7BQL)+D-5gb7u@orU{XVuNrQtxVK}tNc~jQqIfj^DB@xB?EF;{= z9(xx-axC+Ct|7;-482iuEYN7nCP#fr;0m8MXdb6WM{g)Xnx|4#@o4Ovpc&k$9*<_Z zoKZDfbSWyzy6MO&{6uEz(}9Fff4HM>(M0Pk5cMY2liHJN&N*?EEK4V}}~yXy5V@7;>-`%#_H2PNl~@fM3_5^sPxhsOiDfDcIJogfes zg(n!1=Vrr-wZt2&K~DH(c>rTLG)GujA@o&o#AbM;oQ&>zpR)RD@#LjY>&fxe6s#_?^EF0|m8po} z_C?54d5cQzm_7iHT8l*$IlZpo9-sS3C1@t!FTdtOnM7EFaSPu7pCPxKpXz^Pgh5pk z6Qb_juj(tmprRz8aToSb3z0QZ@i6k>B=0gXsbD6RU@jKV#U5R0uJlcKX@pOKWIRkC z>NkFj?~Vi<&Vw5kLRLh-Z`w4z3`!5!UrtoCkXVHywtDpWip7S6UNJV{ITJ+JT?36n zw+u@BMtE=J4z6)u8h!G2z-u8XNQ9mD>WV?P(Dij7i^1aXNAXeLpQ#hmCS*kOn5xbz zfBE1v{19wSV7?-8ADB^5&TL7RC^U}cY3GYsl zL_|4|y^~6hO8+bg2SZs4eIv1JS}ANqC5purguhkGqB!oBb#dP~PcDIqz2}R;TJ%pQ z_}Xt&;7hledl%7CB1v~>m1g?;6;c8x+>) z@`Dln8l4|@^YYuMHE3PIse!eK_fP{Y=Rz}~gXbgZJaDixK-OS0_=_u-`XC+#hDBD4 zm`}`eC3GPAjkqaZ`(n2>(R(ao#OCiKRuj!bPy9z0v7r|bHlF;#G?%%00ZRq~)u#xj zY~s<=#5yMm@(17c4-F4g`7FB}Z-q3_i^RN)g=H!okE_T5fN>3Yc-ve+utivr5Wy0? z%M7VBTY?3l@+SH_%@jq!kZZb{>>bQ@7#kFw9B#M&iDo@09&5MEePpC=;nGhPDzH~qyxq`#MH`;au#@S1Hn zyiR6<@9b&5FzBJscqhr_x#8e>p)yZaT~V_VSMS2fwwB_!Q;Dj~8%(%_M$WRuWF14w z#i6{EvvoswqBBgeszXzlLmSb)$+T^Y53=m}$uw3f?Xgz98SvV(=7x3gC6Pq^hxVa=_`dye;1uH?1S!OLPW6(Jj|iI zMOhGAO!?s^%6a*n5*;Shc(oi;bmja%vD;s*3_EWbXu~!Y+oSdo*lpd9f5UF85!fvr zPq{M(uE~B=>+7YHxYd&o*>Od$P5K1v163sMv)J6+qr)+$bOssJqYDh+n9Hcux?vKQ&s+>Ej8GVDumwyxO@^}9hn~_zLR>UwN1vqQA#upvy7WgG zhoQ#`@+5RlL!%$C1U)NdM${Sp$H&@Nsr5{Q+8qT;)_-dV(g1IgGw(fQva_Q zTo5e!KN;L|az@fv~fI+mbcTDe4M{86Yb*n`liPXD6R3CB~Y86@&%$d zbwLGkn4zy{?!RA0xk@Q{veptf&h@byXk|~&Tu;xNCxMp-cVihC5MWAfU3jhe^v|=G z06w2_+X!)@cO^duoC*k8vRSI{T-LM>-LWu-l?$x>kzb1hhWp)gn7tg84n&r?<@7jm z>u^`Guu$t8qIk^9SC#!hSe-X(ev*R&@$zIxS^WU7tQ%ZdQ*4NKfnyxa)7jf$1~04# zD|d*s5HGjGxqlhx(e$;^fz{QceG1vg0U2+2YHj)6K%zL3g z2aI^Z&PcPDp-bNX9lt9qhDPxR;KkS?TnZG>Gxd0k?vD9!eIvQ|Gl!C}#GZWB8d81PsQ*HDWv&1tpN@+xl! zUt4O%;~mw1h(C_}gfKq+{R5u-7uh!c1t0S&JWW(VaDv=iHyhOI&tCdQnKrLdJF8=> z6*PGb)xDBK5i7E-_Fd7TX7NhnjUmKeEi0mHPunULDDfQYyXEIUnNdI2g|vAg^z3R| zRRXD_GX#S$7l_UAPUX*;&30`3~)49dtSIE-{Nfn zL4z#=xx+C!cGBR-paxMb_ZKKTR>-)=pFaijt>8;TKs6?N$Cqiy?;UHV zu-#SMn%elRj!kFoQER9N-C-AcL8@W1D%LE9U=^JQhYHVV&kx3ttDgcdJa%8`>>-TN zJCvb$_=8JpJ+DKqD~C2~zQc0=BE8vH+d4OT`=DgqrQUTJiBf}%OzQ_DS8aVA#b>0S z2L6;t;=a*@i(Q|q8VRkE~R7FsOeap19vm5mUu`${$LepgK+V8qlVZ zjiB7wtzuO;KZJTux~1pr$H@eBhHaru^~Y1(iLe?8XoyrlLJq>_`i)aSd3$KrUG36h z#wYH>3Fi!?y0ftw)6<{gz{D6|-84WN8k$EeN!~&pyRjB-_OXZ0yd{ix>*ou}t zf;v&w)EWlYR3WXbT(?ZSK*AcxZhc$rvKmJJ)fs0N(c{A_9Tl}>_XGwX_>?xI&f(lN zQt}R$`<^y9$6@zXSm5>MjZ_=vG;VjP&MLlk4t{-fCv!o4gIs3=(A}i>x(VNHyaWPZ zb#EH(2PFaPc0$_hI$rGws3+m{;h|sFLFB5zu>R=#tDH5qKgl+jTkZWugCCtw^Mbi& z#j0wh(!o||Zx;Akh}_F0 z*ZOb`Ikoewy~vwHi2ZLZudwyv&OOk8!s%JwH%F|B3TGLgR6N>rH)_~zH9otm_y9HF z+orZ`Rq2zQCBz`=`NjdghsF)Lbmv|#ssIS>nK2bfyFKYu0F`;Otj(y31zXAo%(*e2 zZVwG_4&PD2)WSXV;;QPWPZjx(gWpkktJg6p&bglYBgo(6iJh~S_kGEtQ1Q*NM{Cg_ zBdLTwio%B`&XQ{FETXmPNCi4vuGyzgmWwWokn}`#BDKWa1MH@MUyg)d>NmJ#@zXp$ zV#yBm5)Qaq2=w#h!bv}ne!n*$l(a9dcuW?dD>tXKO3iDp!bMEX>s6R__%3Jh`#3mN z9)C0uD`BA!ACZH5{=Te^Co#iCg7bJI(B9wAL}W$7Q+0oayhr5@I~$uIH*R=dg6pP1 zNz4=*Jr$R;Lbe>A!8+BZq*xs>&;?N5j&5ofwfW!}fG0l9&#*B{oPakqjc^-`-b zV4JB$#imw2Y=8oO`qEVrwce@~TO#X0K+x;n@;6&gYFq-X0fG z6HU`-hd^a^*^PKT=e^s?;o9j{u9yRfF3kPvGv5Jz3N9_qYmHuDpinv$a>!UQld_0} zxy!l?>j~c|jj`l+sqN~433UOf^HIOpoSW2q-N)-y?1R;gOS+|qDuwuta$OQ#rkUD9 zE;ZcM{*4{CJ1irZ<6Xes#vU(4%u=|*x_{?-wblz_E*FA_sdX;^WlVw7~7(2h46DA0mnKWt z9ACli?gzcV7a5oI#+sHz?eRqD&ZV(t%GG7DoOj}`5NE!1FISNX&2e_2yoZcRnfFF$ zHpP}vxufzr8CG#-x4&GuAwxTLUx)zS*B1?EoR$U1^9?uX>M$Mh>1bA~P70D4o~qc- znMHk{=C_Yu4HYVfdyyjtw7bN0BbDjmSX|A0c$b5?82~%4fv3o5_(j-}sRLZIEP9%Q*R7)@ILs;FpqmqZW`^v~;Q>H%2!GYuVumX%U zPszmtnw2uD$&+N0HV#GFZR!@oULE5#W6{Q*C9N(_>bL$TvklH>GG^Io{C7?U;ty*l z0Gf+esP0L+;>(*14C32n(-24J!8nJs8K7T7Y94BZ4@DNJMTA>*Pp3MkF|%SCz{Vl% zgLUU%mJ4zA`XXVt43ZOa*z%RnOrcEheCN@RwkwCqD|ENzAQkM@XdQ0iYRB$YiIFh- zOe3=(wj2xFJ>W&^4e#x67>N57+GFfwaS0|K*0U&iA1^*FyK7LWV41Bp_s~6lUKm>r zHUGSHtyRc*)XBA3nXZ-HeR4^?yYaVD{2E!o|KN{LcmFT=)*DlF{=)nU zQG+Lbh`D|>W;6`P(hTuCW>KGYJz4B)cz@+9^wtJl0V#OetQ73Np}TTX*eq6}rwG)5 z-gdpkaE)!`V*sOVBzW9++w{?Y<)${WF_cu5=FBqM>UuHAzQ0{4@_V>Ox8FKMcWM@< z1X3B8bh<{Z2ls8Pr`C$gX~DGx4-3C-4l5C0J!bfkLK{DUcOgBjid}Ks?M{{+ z&;@_)l7Vq12WD~ska~KRgjDn8lmSsxgQx_rVb1!>j=xsh46#SHQH{^@Pr*M%wH%UB z&5f)w8EF4}obIq6KSuzT&;m&yrwfA*@!bqu@-kgUfWTq9IQ+^({(VZy&OX=q6tBgu zBhwL6%Wd}Ro%!JUb=i16qCtDaBq~<6$f~hX*{aBzFYlxE>OQh^cN%)~PviKrqUc(g zg%Ccxx}Mx>GAaI*H~TNgZN<>&OK-}7G|AwwX>$)}`mBjvY5Kg?W;z7HGq7oDT$*#p z0*0HZV8`o2@bAH_Db|KAndwsbH&3LKe_9W`qN6ZRCPQAu_j)UQCzTexGKA#5?SMqd zw&rcMd12DSWo}gt;XnMWk+XU-eP1*$-M-z`B0#QYR*~GF0L@kB`6T(C@)wkuytvkL z$Woy8RZS3*Es#Sy@i}kT;m#~+9#oNuDNMzim95-Q+Z7Ia|{4r@cVPpDAIU8 zlUPVeuIubz(ti#<{5P`s1}xqF&n)2oA?3W*$WGz#8Uunkz$MpH9Z-*fl!g`JJAwD@ z>+-90{$|wP3kQ`Z9_N~PTrRD1VkG#{Oo)Wg6ZnDI{x6tz^#g&5d!|b4C%R>tN%Ez8Y*LxK2-GKt_z*b5M&XSw-}N^G*WX zpP0nO)%k0}2_`lWM(z%851#w>9&%kA>|V*B>azh;!nWrAg*6_ZT~=56_93}*8P|K7 z)9>)t3+Ojk|Geg;Nd3Mcul~Qsq_gq=w=roa&3JULv%mTcVppZs$g^$x*bcK4 zlQ>ER<~mIc;W3Y)YE?2#CA^x=!7r{Hg`~&H*)NEZd~3HBpV8x`p&k@1G4Zn-LHMnU z_s0I`v5-IBkp)`C<-)C*sH2ntfE3iEGu1nlP#s)^HZTA)yG6kP45aN`!2c+bZyO(8 z3&O6=H0pT`GrNwI#i}|W^U=`v_k8w9fam7S>dX@q5o=V`2epe2HU68!@8ho>PXg_!e)@xMv>)bkTIk79zaNk#eadRikFv7O%Y|JP zH^5gCHnRQYswSwUb7H3xaM$AsC_@+!NRmRk9LaFp8?^;dtP)wyH^6KC=x#*jzCJ#8 zDrG2yVQqR_fY#xQ9OY>?o;b}>fsaCXbB)o_9q?k;ypG&s!(@uDlJ(wUNW*IFSlfSIyqq373 zO)GsWow`KZ??i|g^xa9K@STlpXxQNh^>a#)d01oFwI%Ct$0yEq6_%WXsof8qKYG=n zckmG3a#z6B3$*8!qf1sJ!>c);^f!s{_V}*&hg(lG-iuu8b6Xp>r}y^)O*5|EXQ-Z6 zjaGB$07^VfUftWQ$exE5TKTK2dr0vA7~+xq$ihk*`#cQe>tB;Uyx zOf^42MAEfrbVZqP&?HT1kQcTtTYJEBYY*+5xq)kAx@7F&tsCLQ9iC_CT5+NAW<&_D z1~6Pk=~)H-ELhngF6-t-Tt-ZLZ<<_SrJ(%0Y$O^c#Z3cAT6lb=qncwv{XLQlo{s`8 ztI1I)vd7sWL@akkOH@YAMTH%4w41Kirg32^4hNC63l*29MzMBXufCTlEM}eK?b&wy zS_q!95nQKf4vBHBlCeZ>4oKQ-1NWtup#V@8+q9Zg-dbP83N?Kft+ zki*kDTZynnNP2^|z67sly$21Nq8?zR7g*~!9{)&DqB>eKfo0$w|9L=#t{VH9l=)*! zMy=vjx7I3WD>WJf?7o0~iS+B1vneTN%Y=|h2+8{+8*vz#=rX5akL^pCPI~+z^~*VS ziu)63tLv%DunfBAR_AF=N#Uo&nqvcspPq^dc}B~x<`p&kTxXC_vAsFrOz;W#Q^687 z%8qy@gGy07Haqs+C*A}=!2pS!3-*s7GvGH|;bF4)p*8xwvxb0INg$1+hE_n8;H`o6 z@5A;>Z3eYE(1>#`fcj{At~DBpUs^2o_y%=uOh(j|tvb5e2BAS$)riAsq5)JYW=)yF zhU2zyUAG7JJI}<&gY2I;`5Lu8IRL-xBGT*4tq|{FdXq%FCRy$p!m zqS%R&S4N6lL>VG(=MSCZH|i5T)nWyKuamL>)r3;V(n zCH{_x*030YzOMPK>xV*3KZ3PSscR7AfhR~UUe$rhzSk(ZoBo3ZK9I( z>hoZq@|BEi?RL(RH+9JL>F}uEopOU&AeZM1{0&Oq)$rRn_C0 z0ecQi`X`N2;#R3t89rh%L$TtUJ7nTTy;n_br*gUBnoKLW2}-Q6br%96DS_$G+9RF;>)(xJ$-v>*%6l>!DD0lQU zngsE62(T#aol-Wr4DDEd$y`Cr z{9i-kzJL+CCE*ZqB`6Jz22FXwF_VPUp|!-*ukkPDzne>YI!jF+EtpFnLI}*OAbZ$f z9Qy;=|Idu${wr$#m*?YO%=o82r=|FoyJ-&Az&owv#WA7Ja!NO3Wo)VcM8!AI`dHV{ z%Tf{56TSoOH9~k+kMi5!;Y>GpE|89xjlTi>mtJS9s?xDAeku2L!M29+(cH^5+vI z=5rGs@}6GUIuLe;y}c1}=dpAZy{Y5AAf8I2;z4s;(pU$!lFQM3o*82X447ElQ5Z!PwR6Pi$ze)-Yns`iaQj zJ^cNCxwLtF-LrGog!n2Y{`?^kjj#m@iii}tNmZQ!H6tF@VeWGbW7S7x2{G$^dR^7;z% zRPy%vOOa2sQR))CMZEN{PXOLeOzNIUzoZP8J*C=qzFrdvF$r>FK$Lvp{V3R<5`0qL z2MLe3Vo0JAtJ&C5!2OG$9^crHGk-~IrAV5}{>|R$b9P7v@ybBeBk)B-PdT-aU{a?J zzt+DZ#ncwJ=TR-E!a~!UdqGzzQ{yK#o_+Wxi&N1E12zHL;-r^K?xvuqo&3%s8dG2< z3It)m-XPq6S!>FN7jlv^zGC#~~CS%SqlR19l9``?( zIm5`@AuGzqh3-^DJI}>pA780Gd#_=|p8P=F-0~Ok4JiKA?nQ~Z-n#Njeaj?7c zFLNsO*4Da8ooUsEC-6ZIiquc~z^t-PR0wIl|^_ zQht(M=r`1yezVbCeGy+tx1s`&jTX6#@8dJ5~3L%)BnQ9q z6_N>vkYkUgC`S%3{+0EL!E0nS%X{J=elw5&A7ENU{^FJ%(D}%_sIWelq zi77-NP6O_`0!EIyrp_zWW-}j$FUI*mCYAkiX$x|saXbM{9uWGvP2yDr9A1}c1tywj z^}-fOg)BJE81Dkiwfg=$Q2qIT0;-GS|0ke&7|iqwW~1qsnU1)3KynHy2COuga)Um# z+ClW|ci#T$3D+YuaPcuj4m*#rm9=a=hx0kSNrF5QAHiqis@wzdzrGx@EA^MEf>gnEUlHg!3m|sc_xm{P<_&~Uf zlj8XtP!E>;KQc-C{`V$n5}BF*(j+baziE;NJ7!FE?fb|qjybP>#Xnd#Hf4sMY3h|; zpMRZm`Th}x$O65#Wl!($u%o*HjcA+ zZ`?=^pmAC$5HsWpL)3DKUmU?0bS>Ouyzh6fXCO)Uw?|tT^q^9p_Vqr;YUGN2A0zL| z8U{TJ#-W?ygyZUCef+)mmVEYIQ8K0?Y7y<82U2;7z>`Gr^-uM>qr;s*vT*3i*wEba zMvGO#Yd2Br%S++TlghsndN|0va2`FQE<>tUVcLnSc;kDM)5a%+X$;q>06x}RPVCZx zIaQuhn)TbM``3zl$#$DEThI6$?&poEkos!t4FUl_qy)1-MB>Yaru7jfVN0ZixkN$Z zFO4F|qAB{U-NEL@ZSHpLVN@^}ed^~F{wdmT&m2Q9zxo?q)SV8^d*;pDsE4^;Ed-&pDD` z_6Ok&*sFO-l5D(ABw}5XU)SLa=h-oH$heP<{yG6Itk0NqTi*SoH(YR7vk{nVfPZz`= zkiUuFf(|9OQTr=+F)2L+J{)kS7VbETiaHn zI7zw+o&T5|M)|(o*D@q?mxDfW1~^-4a!9_9Xx655D}`T_wL`^SPN<;{;OwPhvu#al z{Sxy6>kJbr-WNU9eE8W+DaC*yEYYWh$PyIVsqb_?)_D1_i2ggvjwSX_o%IM(XT9fB z&y!IVo%#!Ee6DSxVujC#z9*4)pHW8}`6Ja;)=J4VLJ&m>+AeD}TSJ~i;fE8_^nxPF zy~mjqn4JZOd~m+|{g=@?Gw6?1WUx|3?O-v55|c@L_Fj`W(tjk(+gt1v(lATArE)V5i zWeEo=L;dHmPt1FlCiN~iWCl!m!*NzPnckWz6bA%>B9ZTfoCxpeaU zm%^5wa&h5>OGtrI(%8qmjVk|Cg%NS}sTzCI;e3;iz6J2Y@w>0Wwx=1#VeP{&i_Lpq zU<@`(@K`RySK^)EBWDIJa0OA$!eq53Uo|+M+Jf2Oy5LOcmyKQcae&hGeY0SGAb0kX zfb954l(FtTz1>_A|L)x{gl1M|-h=5%imt-YZR?CVJcR1#iIJDy^}e@ayJ3Fy>si-N z!wNvoB>V-{1>sq%N?e?_D!QEhM(3D7`ry;00lBMB>9FG(&A6C4tGbTBu_N_Il1t@^ zs%_`5e`xVX3uo*kROx$6S!=s@Dw=mL7jWPoUUPFoXZSdUpAwTr*fgf*I_?kK_BpG5 z@U?C>ySvu%V<0iH_o<*VR9Q}hAtPGUk9~etQf6)-Ie1U-gq>5fKLRPbmJ3ke8gM3g zf$6Tb2IVYq@ky-i!ohP}p%&B@e7G|qbf^Qr)&0S*dle`#*B zPD1cI7ElSN-{ZfOoOK+Y`7-jM!0_rGBU^vwUO**P0zCrqwp3;ze#2~FVgkGg(MppG z_1m--`M6sOV$=^zjj3}t@ZluWNF0m`JpkN7StH;AZ>DUsu(oT9WfDefOn!2JlTjbJ zc&JbKv8QIY?SYLL?`W3@F>`hJP7SmbZf?qu0sFr*>qU@!PD~BrwzE09ypo%WKM?M6 z0pbb&vmLHn3O;O4nKl&x9IOY5okU$`r=Z4*fsnnDpe!m-jqVQly^Z`3LNpN+oSXh| zDrDtlJnd7^9L$H;xG4?5f-eLROVj5iB?!(IasR(W*WoaTkZ_(<@4TIH%37}k5;mPh zoY_Zwppq!Y;OfuzPZvyMAoqM?3|Hv-{0D2_$CiwIBdN(G7kc~}lb%uPJ$CpXok`*s zrvM-csU-T&??}-xMfb=mO>Dx|>+fEC0`#0&u)aIOD-n6%@yaQK8pdLL`ZOtXwLMaA zEgP1nv5(ByRVGY%(F1A&-=4v_DQl}h1goWGR(xt#4eq8O6t~~uLPvH}+MgENB~){* z8>`Gy3%U3<)RCo++HMD*^k0OILsN4lNygaCwl3=xqcV?ZQ2=v07@Co47TEzSyfE>s z)!pi@LhIcAgOuW)dH>n!Dcz3^5jca;vF4B*ty(wlyTUHl;v;-DundmC57mLx69Nvi zhJOgGt@ru|>=B~E?3yN>q_SG(VJH{23X^^8SU4les}Yvy2Hm(n`jHFRP5JxRF-U1|VCV8FiTGaw4lNf~T7wNrxNxt1A4BCU=OmZnJgJeiX zFP+ocUg>AnDbM|4(=8jGjlt3E*R7jKvC@k5E)N-bjoBtk(|PupK#G<%FM-*!&#+12 zAN2d@;VCyYvw;I+T&kpv>A#Zpe>kiweE;FF-a{tsv-KRlwh8P%a4u}JDl;-AMTWsu zLX>M#(iG#I998Cz8PCllRcfI5&qvsLv^j>ztj37GL-Y?J1x9>B?`%dE795iE6|PY# zQ-Q+=<%{**HTv+53L=mMjT20-6ReiH?&9CvAE zN1Z)O+WzT3nrbWg-kQV-bIrn`lnuqqh2ZxAX;Cq6?zNK!D|6@`EjH8RcV7PE22xnwKIjN0sINg*jlltxb`#aBE3L>lXpY%7RF?#7SXhItSq_LY z#9}LKJqNU>y=Yx+;8d}@A;B?azH3B5H}nB~gQBzZga47NZyyRhNuMO(+5rFou&3vm)k!7 zTxlY)yd4Yk(V(%V3&iHla-bva-SP)o$34+D9MTSz^SX*i+slSF<41GBpMTD?T=G3s~ zs=ksXb{5}-r7sLrG0_2!ujyA^Qig7LOYuha0jj$%1P2#1{dO>tmxA|Z(vp|mWj^&e zZS0wsM^%R=WItK@me%H{^T*nfpozAB-*Vdx%b{x`1cvcgZ4i|+jez!VL5I+Om17g9 z-nckpnA9jxd>#t=>h>f$t$C+L{KG2@)vqS?W0-^rgj!y(lM--a;7yy*eU0()vQ~}r zAaYTy1jK9`SofQgi<8aJy?SWg=zC19_!C$2QP7M&*0A!F6%`uEDHh4>wyQ!Gr6`hI zH{j-5bp1rPr&3U$O~)5~8=s`f<7zn_XOh_)S)6@smq|88uonndS z(=&@gCoc9Mb#={2?4U+JIP1}olmDn>)m~v$Wg_VyB1y?e=77Y%u}Qc> zX8!+*+wU?jN3IqYbE0D98L+%9(W;6MW|*sa!SgsYctn@{k2Ynehxp0f$n{Q$>D#*uga7$TEjlAw%Vsw$lDr!W5obt^DWX|2q*H}6NDh;+z|)# zveO9;uGPBoiYOxrO3FV|J`YUen~36mwtu*}2F3ypR;lYbRf;}MOnZU|BSUn5c3VD^ zoadY!W&b2$%J3@??YqK0`jDP5qC=XdvmBOpr_a}m6~lp>hMl-Lxa!VCpsMjMZg{tb z0d7owQv2MPoaaXMMB|4sZ!derdS*-Q`^0ZT09xGg?MEbMXyG6Ffd-Tw?IKu&bgwZ2 z1CS>N*V#gL^A%aoSEdy7Z-2YE>(`upTe$SPyyO;IK&jQ`?;Cx~IkMn3yz%i-%JaQM zO{4y8-58aHwKkmWfAIWeFaAf5)W_82=k?##u?z%65Qi8mCfC18Y6{>$D6_FvvW``y zMHMZ4MMYQ7`b1~i&h9n&XS%@T=1D*G;Zv)PO&d{uTHv6?(PU8IAI*$-ml@$`f5+UJ z@tk|a$$x3zK6!e2LIL>7H98Zqa*v;7t-{v+?y=Z!C@FJH2-jgS&8aZf%fz-+>&lLr zIHh%?8VtM~$f}KCd9Tt_r}a^iqrg7HQD|GKYLgHwxT=O5bU^*5*By4X+dM8=86}}~ zj!uHB)DN%5$JY;}>A{uMn(yA9JM0mr-*f%gAtz94Feqj*lm6Nt ziZ)5#%f@xh{FCPsZ*v7NM`K~L)9zn_naw#eUPvF0M#{Ug_8=QrE$`+sPlV`TsftW2;iuXyEIY&w@}>GxiV?F|LEN_%|A zeU&!m{cS`p7CT&T$yHsWEp^Vi$$PreRm1km*lNvLmqsM-N2FJ5D6!Q}^I9XL5b^Kr z8rli?Qx(m*Zzu)#{uor6F;E-vY2e6n8-q8-b)3ao>fdC(@ueevOjI+(7^dWfYG%|z zj{b_KtXt9aRObrEM@^K)T@8+l24BezHm$htQctFD{fl;6xUR*k95V-bL+jFNx&j#V z*BD81MQMvlWx{*oFgz47!qwJ&djmT|Yxl(l0>{wSSoqzw`mi`&JO+~px!$Jg`B2bM ziVw16m-fkan`g)8lG4qQ=;d_x(eDgLe&B?DqMhsh?zw2P{xaRO>h#AWRo`nPdlyBL zl_-~WBlwNv;8$Z|nModz11!m%`n?x&k%D~m5zV+JxwL^A&8)B)>eI$(vcuDy4YW}V zA=8(zb|$q&3*x#57psk?*F}d>m+OUdypW0mDm(PL7gBfxH>#V}@9C7H<9@n_|6S+t zgV)i-!8H@2v;|?YLFTKu!~06yM#_fcWT-g5NHFRU;H`6cbIC9GB67ZKs+v?#Ue3Lf z+OOAFMD=uV<>!{5{c_rsE3@RRHEWCPCXMl=j4#0CkOdPz98-Hly_6@ zSJ!EGa;$5UPJ zS`OYJCsc#~tOjh-Ni{YPtrn$(e#XepQR7uuoC@>7v8@D@4TF}MJgI(%oI;N@uw@F#t(JSu1lF5 z4nOP9+8?5|$|e*&Sutt#lXg^W0<``=jN8_!zOwuH#2f5law{WT0O=nHk`uCNclU}a z)~r&EJ%|lT|Nn$|KWZ#LlQ4bkSy$Q+S&kljx)vgWoLeuh<0&qDVDgm}mukZi*&=%3 z<Uu?%jz&p}^le+qeuHaDKF?re=n8Siw?wuLduO<2NT#xKf8M{!N|9jkZ z2{zXwNd@cc3ZnTEr)*s+0%Bx1elZw!PO3)sSXCoYE5ABOCMrmR>Jh>x%B54Rr)>D5>N2rQ`9q` zSh`GEz0u#Rh2j2#L%++yLI3Xz+mA=l^hUp08k(q+OOCyvdp-24z$c!Us!f#lUnq2c z0uLMC1C_}w5?YWl@V;IsHrbqD;SyoG{(?!>;i@9;jWn7Vde)O_E|afsSM$1~2gIbo?tWIAM$ zSi+%40QWZ;E3u_5t*&OS>CaYVV;2>|e<9;>1FgQ5@aCRR-p0$X{szZuKl7FPf$Xsy z)%_0~Hf8CdeT}-%9Gg{Z3LgH(57eOqNj{vX0<2muG$qZ~OBsdQk=3AF3IUfWGEpA@ z34x4g%-T=6nB%BV53T*Fe6bn_Sm7aC&TsBRo^Kb<-s}EuhkzjuCrgX>Y?rCT{Vd+q zdo5?yV}U_m%wXzLT@xJi0svl%+FRm2?GP+()t6M7*Q!4GySDlYUpfmOm)bJ@i&DFV zEOgFpBw(e2fM=K|;?0Xr(kz*-k3bcj$)dB$XL6h?tqU!=-M^Fb#0W^@q;+fX)+$+x zNN_TzOAFWY_f?C&S)n!58Hw$^nej>9J^HIqqAaoYPUkF@3Eub0Hvis=O^#g{fscYg^ zBL+*@BPjsaV80CS7%}z-O`x04iUaSWEQD zJ9D{g3~!j!SgonF%ojAekonl~zhx@OS^B4Ok1M2#4oJFT5iW1u?5bsw_z7im-IrLp z7lAjjLAr|{yy)iDE*s`psAV3^qh3!lN1@~Hf{1!9RHf>}AR$EhWy(??;QysddzIp` z8h6$hX1lCc!a6I%sf1vOKr;u|xYcnBw|~IQ{J!$g@!|dgs}h?D4Yz=& zbBFw|I?UBkzyl+1KML0BNbUg@?}>k^v{70vEULgW zoDo(-=s+b$Wb}-?RnyD1(5Y+Mv#Y+4fEGKN{-P0;Quk!W%U2V2LK+XFh63Lu)PMS@ zT4Khpkph0tO)h==r9LK|eZIheZ4>+5j6}24lTfj_S(n7J(?r&^BRl{|01Qz|t}w9f zEeR^o0`^%7zskx#B1A5?a3YH=qbj&X=-1b

|jJa)`{%u63ha)$Ljh9+qgQlu7Xy$RY;t;(*vH+u=tRh#O zYA>8*GvOmtf_Ka?wJEoUyQoQ}JpQ7x=&nc70TTR!I(6q_r$Nmm{4%v{u8J5xB5^st);BtfH&;ga>RXFb(%Uh;W_ zGY-kya}CcDCb>A(F8p<>8gvBrv+IUS<$|@6*NZQD)iW&x#wH6g{0Y2{;r4v$t^jj^ za@#VzvC!#OSHBqZ5-d<*e9;vO|8j07_c+nJ-LL(6LR8lVs#ztkpzMSF!rpFmFOez2E%_8Xdd0o1Z0c*}=ix z5&aTUrXKw>xvRyY201?Q0r1AgqjFq_WUWy-}YpgnFLdkjM)%?iSaI7Y?j(wiJRG(DG zBwptaIZawlJm=T-MG0qqs-(u)^`N&8a zZG1!JWr6m}4Mt!T>eicryH}ZD9alW!ijyC>o!B~6odvbNL*vuKvLDN!lX&n;==WE= z!yFl_(M&2ES@=oqiCX68?P#`DeLij6<+mAr*k>r54WLs%x9hv*L*&60M{i&Hv0g0J z>k6?ju-IwXYtf7(ZxXyFUFprsBS-znRPEsOrt>Y$UELrYl1NN~mdvq6K!7`(m{R3z zm*!KInefz8B%9Rej|1FEmpwWd8E7FHEJ5|fNgWGx1A@rfy$h6rvER{8A?z^n@ zTK#tN+?92Z4!=@&PQ@4Qw{F9nE@PG$CEBSu##iP*1s*qVVHc0(&q9PGdDgrH_0-KZ z&T05HToGD=s>I>@$IJ0t-ZKrkOC+c+^XRqH6MQV^4R`PD4$$Tw2+`gRo^y(2An@Bw zm+v}tipPaRH(sKk@UCZogzjtt7p<(UaA{;epor*C02QLJL!jo7v1C|Ualg)c<{vP0 zv-3*l>Q~{4AxtyG2lB9Q8G1^OE~$X^jy)|c-;n9eyqefRSjzG}6$=1ZcN_u24WH_H zTk>{hPLYAH!&x=|ABOO4dm#=Ve+AiFVTlGdW@etlD*k&W<9$++wI8PDE!_nS-1l}? z8TKt+F|OS!jx6)HNDB-y8bV3>jM|c)VO;=HeC2^*7tH#R3!D7maVXJWhHwO>GBT;|N+y){_ueS;Tk?;d{k{Ev_E|3<-s#n{K&v^UN5n1kzW#kk zF*IZ=|JwY|zs!Huy4L(=4Cv~b1lEILFL6CvC0AqmAvL+J(4N`tR6~g_@HPLHwQrkr zW|OBEqtJ0Ar~_-vOXz4#jV9t?*SV^)A#+7S#oe`XwOYizx=46~zyODDu zK(#TF|*ffsH$4Q#Ib8zvXXwvu7+I7 zifr@pMc6e8V+F8^vJWtJlco}5+D@XFEJg4b>)Av{!{%W8SGOscBkd`X_cmX5>;(q- zTv0eJnfnf6td)c``E#ik+;xvH;GyXuW&{SZ+6p4Ai`|h)IPEWmEAf`<9NCxO10{M8 zN_jE_(kRQ;dd4(dXq|7nt@j1T(^9NHy@6gIn2b?9T7kTHvw;Toe_B<>qqXpXL#QbN z+(hV_A4la&@#n&TEzgC})b)(a-S6}(3M=U(F)8BLH@F@@1`o*z-8o*JZrH7Lh7q#+ z&x;s#A#eJX*}S*-&2F-gyf|rQu9{d~uYQC1h=n7F7kIfPPn_2aW_Q=%L@j{!yLxQi z>b}Zl3!nVznnq26W~mn#F;)3-hq$s?2dpmn(z|9rl*0$5Mf(>o*w&_MJxqYOhxtMK z?)qgDjhctY@wV$o6jWfO@@k;v8vAEl+ls&LXiiK~=xm$eA4ojRYZ!hA8Q{5eD$hg~-|aGb^-eV$I$uIUR^IS0}1 zdAXExwO@jU)bJ=WIwDm^OaRK1O&zdQg61D@5-n6V50EV7xT%&7-r9&ams$>_$>B5F z6pT1Gp2qSE?k6Wn%C%c1T1?o{-49H%lNg=vY;Vic)-%uo=kHFs4zDe=w6xsaVddrJ zKYskEs^aXcFda(UP(1lYi5=2$2HoG^C-u72XJ==(@1jnSF#UOSCV12^3fHk?g(UWu zrH(7bHeOhTthUNU%m^Xol6RqNjA^O-@U9~{&k}M)}+WlT2<8|BUmSmFdhtff6g!GEQZ`E6|!J*1r~BKxRl3( zZ8b}Rk)47+|1b-s|5OyU>aLJ#Xc0C!q{dr1uDi{Tr&?)n0~RQVE1CA{+#5I=8ZT;| z5UVa%$}{p3Y-XP7H~szfOcD!&nxCE^tP3Q^fAU0ad?V^$Na$gHe!jo)VAtzpRg`&B zHkH?@KY_LRYQUy{U;qNFYt7jp7wZViC@q!M)z$q_j}d!`j!W&Dz^|w_aUXlJJ0CJ& zm5vh`kfC!Vye|)IJl&o)|1SRQdfzabv~ek*KLhP=-J7p>8JPEEQ$Cd!_4jowbdkCjgUe3V zy1-5it}l`IjQmsxOY?11Ukf!g^?E4*yS4woI=XI698`DB1`aIw7538PyyRkWfx1_% zna}pJQpqq)=A0wRO%4Kn_DyRcy0Y=X2PUpp&*3%HStrw$u}sWfmdWc14}K$fcPOhB zeu-S_i3Po(MyaeQ92?Id;&YhF#%zD*<~o zz(Y3y>-k!7QrB!75wk;1?q`P`h$ZhKQL|F{dH6+Xf~Aq3kPiI!))Lqe*l*+2-f42W z&e|xAh(!Nhj_Xx#|HbKG6U*80_V_?<9_5X9ul`GLgU8v&Dc(|?q;uqIUvMFPLC~p= z$=ztl0v{2|VP-O7ouf^ju}EGw0!F0Tfg{%PYv*jC%XqoO9q008Lnlr3*U75kw;Mh8 zMToSlgFoZn&-nA)kJRl-8xj*{2=0lzle=V-D|irz8=LEUZkVi7LM;0GXopls+yYa3-Z!ducKgQ-@Ds z*}F!kO9!_nD2H{((-7J&^YsnW=^{#hp{C|Iv|ZWv!$rt10KS#L&yQ;J_KwJkcnS^< zl9}Gei(;K#Z9YbSYNQW8Mf7R^V&ROLDirMt^D2S;>G0uwu8zIoulAPB*=d%Bqwj9Q zSuE(iu0tNClQR2^de`%wW>r>qPgthAAJ#3#^=rR;`I1?;X+B>R`gFxK-7}6j3Zo}C zHy7DOfFCyte*=5sF&goify>C6wwl_gb8~aiFufGNu>1Avi@Uc(v+d(1kICa92;!oL z?3$h}o0y4x@6sW|pHR6IK;gCislyPjIjBx4j9QKo({*CWUGBiOcw}NQ3X3HsdWm}W zHjV`w+#UT&H-F5V_Xtbr&m#!p*>v=n0kL}ylqiqMvOG!h_&8 z+M3vt^_%ByN+zBS-*ZGL}O`LPO z$EhUqGlzw)2(lq#?b1FDrc;ary$@AnXB~XH5!x$WV@j@FGPVdP^V0p$bP0{1lbea( zm7!tKX3;fMVS%l62k}qRa(b8s)9Es^3 z?$6&-9Yj6sd1_)U%@}b{#S!?*#ixyOcB3dqky*Z#DsI?ngK&ugbX--f zh%PuXA!&tG036uYasorwz}0A<6+e=^`1)rVajISO6Ft=o@;9PkgNA9Wn@y?{P3vA< zs(X{LCC@eQz5C+jZjH#U7(3K{|9d4^rs(0@2SIte!>T9-5~F?&k;t109tP83$WpgO zXj;HS1A5*d^;=JD`#2W)XuD?k1ynADJ5g?2jT4~zAkjTU=5g7BMs`7VlNIfJXI#q7 zjQ*@vsnFlkhatSzeQ{H)q=(A4!gcRXAWhrVxkZ4-YCVo%2?yK#6Wu;7cdg4|{km;l zkOx_H-TPisEyJO2T?T4raH%n;qm5!V(Z@|n9?t{~uIWL(dG|=1Pu6vNR_=i~6Rf3` z?BnyuM*&h*k{Bweh)Ri^pvR(k_XmKv+ZJ?t^$!VS%Yg{W|9FUi=yCX_|H))= zI*EI>*dWgPuiBMxtm;WF7O@z5n|-CobqhmKCW43IA5&u zBkUUz83`?ORVj<(qjmzr zsR=J4406EX3ny(0+bCXJa5j8f9bCgHWU1ukHb}TyZ(RiYaqf)&axRJFjmlA#fLD0n zt%X^+p+w+WZ|yjgZO`}cKwQD@W1Wl@K2C-F&BA(D+jm*PW~Y#V746w4hp$98Cd=~o z-Fjyi`lg(C+N!5i;$lr2c2XVK3=p{;qcApzn_@uD{buKN)^5lWn!4*r^>DlJ)#pad zimcnQSreD5j?169t3MLU6`;Ql-{Tg5Z~4Mg8-JLO1Fm|^0g9+z&27%kI08j2&&e?K zhhBx^B;5u#6Cuw|?GkcG*WWvoQcSs-;dAKFKELvFnr}ESlda&=sHi6B=_^28o1>?L zC*ZD!sIIb>`w_#gV4;FECh3vjvm8Hmeh-tMbH5WlxhMaG`KfSoR)gA&ptX%xBl)ow zQcEKXPT?H~T`o?bMj(J=T}>>6HywgnDb*6#`6~zOrb#R_%xNB+L06Mb;`r@Z&NQGQ)ZV6MX69; zERjmGJs!J3tX7xqQ%C>L6%|ZnqjXg=S!QL&SILO*pPscwfsr#*i&L^L-pG3<5 z;V-+7cvWe6a9?I(=xi*yDFs8KI%c`ulQ}NU4Rwk$aW$PiZlZWgF6s-8{ME>R0qzk_ zEom6>g8hU-IuDEZ`UX|8*NiM*#`vhJE5LbsweI$3NZYG%vt*AV5Oj&*=JPs($C*oV zU1^chz2N6P7ge34w<8n2izcPwwxf1d(lc7==}lP{JvuwJ7eAZNXAsz& zKEw2^3dsb8IfXs6oIpQ&mD?^cY-EYK8tN3|H#_g6X}sZHqpbs_>hjTdp@*h(ZG9b8DX?I?lhw?dsywv za?kp)Qjv8YSXmP58oPwPb#sNtUOKd)a0j#`@`|itK)9LGJ z66#$_#SIoCr(@@-^%1MRf%`;t4Q!m3#%N8h2MpM*+H+p%)WZv8bo^;I+BRZ5r@gyElTQ(`KC@*zNz<4@-TF(nKLWU+-PzADY=H+k? zjNl^rm>vz)17qjh;ASwHw_B>Q>fZ;cc|PM% zyncCz5`B@432-(_uSDEoDMkau>F+hc6fObFy;Cp~B zL?+Ak3^%y&g-8jZ^RZ+RNO7ubqv{0-YF15WfIDH|Qb@479Px71+JmWc_^Dr5Km^$< zR-1t!U>#e9%y#n)K@DxT)m0GTEs+uNSc9c?Q_JXN26yz>D*j{Ccbqi1S*;Wmb4<4| zVj)}#Fa53+0tNwrBFv*$?}Y8kC(VyIQe{|-NJLgeNX~bDo8I7U0oOtmp?zKZN(;JL|4wDu6AXGkv{pB%Y4D{kRm{_Za3phpIS*yc+#rV|BL$ z7W)TekNu{gf3AxvBP|dG9z$2KVTK;<>Mg$`IS9k}2Ek2&C9#*&fM&HZ>$WK%bb=y` z!o_}oD{jo08O@p8xIu(-4f{%RG#a%Q4>uj0U{r(M7Cg%GV273wGtSv!^GfLF@XP`) zdtre>&)|3pk4{!(JzBAI4BOXT5@AiXQY(^DCziRGbd4EvQUcQT?yV9YAMz471G@vg zr)j-26}WS@YicF|gNLPd&NwdhP5m>Mp>_Wlx7y_9_|fq~6Ik-s7Y82NC75+n6jPtm zqtkOeXTIA{r8v&0SW2kvl0#)eUzqwhK{uX zoVt*towrT(mKyfv8buL)g50v1k#2qgZZ91GyYkT{#cD@_y9;~>Rb@|O#T`Q9sf!_; zMndU3JWX5nZboM=+J1^~FF}XP*yVlw*tavv5F-*%MMT1aGdEfPsPNj}BgOsKZ}hg_ zs^xNENjP(pI$B@hzH$p+A=i#ys&x7>$mJArmdg{Jsx9}fmD2MHuWZ%tQ3inXiyu!q za}~krsF{;#Uea^8UmySP#D8)DB1ezRM5Zn+`7kLDi3Vk7b=I_iGlkB0XBtu>=Ub2q zyLB#N5mN-AhN&Q@4$=DWp&!Ew6SW_Ua!V?8`yLJ>K3$^KpK66o|88S0f}Vx~4`e3r z)vARK>#2^P;#w!4J%3>i(Q=h9nL~GZohoIVmwRVqQ9n8|K{Hxc^@)#$ecuUwaTm!B zc>rFW+9a3Tw8L@582fOLb85;O+Qy!IBhi{LH2=$i$kp2|t7We@D;b=>gET-trkM&d zoVoA2$DPn7Apky+Vv$x)rel0OWYz~n{05Y1Vi>kY?fRa1wjG2@f<*Q8^%Yap>jj>B zXSfIUZ)vgHburB0NrlD2Y4&K(o->dyIG%lTQ{*$;G?Hyky1)l+@y%*z1%@$Q{&?^F z^N>5!x06}`fM>5Ed$5gVG;oNW~R+UdL*u{D7u&{y10&=gC6HbZzGD(mfE z=jBEiFH`j>VKh2v4;=Q>fFKD+3bQ`M{Z>~`ZDrH{yu_L_CP)(TmN)ndUt{-dUueyQAxIuF@e6d9%K&d#>Q&z9Sg zmAkpo1%!T_0IS|KjW~MPRvK~hc9-8s}IxK7-&UlS8K^<>{kHz!7fkc7kpmt0oon+ zD`*9Uv$4Fs`;gYz@Pm6-GKNIbWKwY`Wh@+UAW)+=ihGtE=6r@D6$axb_8-ZjJBZ7= z!6NhCYz40SpuACNza$&ja0c-C)_3D z1xNabhqLN5*r5es%J!pUP~0K&GHOmsD-!`@k_v$t3~wNkknrK!MJ=mmW+@V0`&pKA z<5kDND9K?U+AHxO zeO6=Ph_E@_;!sS{Y^pP-qv9sr?4{9+?Ui^u0OrTQ+|;>?jwx=GU_46Rm!Yd*Qa6LO z#WNLQ2XVv3qzh+G>H1mj*RGy+0_D$Hj~rUX8f?3E{2Gr;czNd}@6=2h)aEz$L7`7P z_-bFiYyJ`bBD_Zfrg=6s{`w&HJh*qfN@faz<(!#cu_{$qo>m>c*;jLbiX|OVA~31t z{)A2w)N9Yieu`_5(+TsG+4g}g^+vw#h#h`jROgk zk<KrYKso$)l)svF06gA*!7*(}u)#|n8`po&w;W3UPUC?}KM!i&f!I&X4 z>RWWw$ko@dZ<$>-wLHeT0$&k80pUQKP%X8*JmN|1+bcCnl}Zi{mYiUopFWQ3%=gK( zgy|w`#sU#QrJ{R0S`?%#=V^3@l-T&+K8}9OkO%q|Hx~<3XPzH?a;Nhq{U`D>*kKCY zuyr}l%6bilrKwDX%*>`Jbb@%|>h?GcKSNY(HYr*my4%;r$Vy^Wx*%H}E8v;ne**L| zF0R|^HH*7FdLGcB=&`RC&n1w`mo(=qIm+Xy9il6b*j*62M)^&s%Gg~nZ)CwEkDmMGs*4a8t79~cJ z#WXg!=)r4uStZ?DTqAyfj?%@=L%&ug37)00EJo|tRHr|4X;3rXyvk9_z03u^&qB0& zGsucN*zx%F7;OBI#DwyR40qfT_eGVN*%~))jaw1Bms5wy7cxDKFo~zO`%+e{R|<3gSPe(`=#dz zD`Y~Nw_1|wX)A6y>Va{L&xNl^Oe};7OTgJ+M}Ep0t9Oe!X?6bcb2IC1&LQ9`8ZkB` z`r|uVs>3w;7?EvoR9=sTh%!^NvF#<<`=0 z^asp?$C?ZAU_Lc1tkjVK1F_A8oFZ-6X`@F0!H$yFZ|LNa(2xA-OvY70!ZPiaip(&f z%6t=-Sae7#B)O2+Y%!j!A-DGYgPNAJh}j{W)Al~en1mfADJ6NPmbv63!*CXmlgNFh zIn`jE#-X$?T9$FLdaP*5dGo~x-tnkbZMM^-7^eRr_!OMg&(J^gJusW$C5FW<+B+T# z71c)jLU~oJU0W8GigK&w-ILElS(P8-vmj+Pd@TIwu;Y!Gf_XffhaG?>lzV8_#QZu0 zkx>?vmvYl<9-yXtW+iVX;pE=2Cw2=@0=k@yviX4+%N2E^Tx9k)P8&NaoY0edCeL|g z8gALemL+^{{18&R+5ryg&IB^@EUNo>Sx6>m#?fX2%R}Q!=Y733vsgt*$@*w4-a^+j zEU0AgiwpAk=oW7a2=m$Is=U>g1TnUe8Ifx63BgKaT_ z3M_~Aw0DcrXM8hf!{}|iI(MHun}wO!+2FOdt*q~dz5P8KM|}x0_(|)98VVL~##DL( zU(MDhZScunk_bP3O*MFvh_5ZU5;%fcahiCx{&g=EK2HJm9JF`xABj)m>zB`pu1d}t zO?h*;X+hi1m^AjMH~4iA>)`k+5x=qm48RgLVu>cA>NpPP5Sl{SbWlGA9ryE+3$KX~ z%8mtY!5YMtE>gBE7^ADMX6|pjw7nt*6Bge`Ec5mT9>35OeZ)zBYE_k0md6Qtw>#?QKsB9N8$ZjXJ|Br&tPJ%SsPr&yc_ww_Oz#otaOa!w?sM4t^9TZ( zrs*J@WM!emsER~lnSWzV9b|JsYT?vkG7PAHGI2sd{YNd~)ExG9lo0!J ze)9Q06&kBQ!r8cXtxA+_cy5Ts|6#j)GH_qjss5Tdo=v*~igct0HBA)>lLUjH9 zNK5&h=N$N1f#Q}wRieRpv5X$Xt$V+K2nZHf_~nk;M#Kj@ZrYxQL{7vEE|)vaWm6c% z*x^(9rn2jCb8@~xN@Q2b%CKi-l44#~YXczxx|!_)rgjy5%PBhZOm)?tgnYOjQGy9G%jcFir-xk9oHCop_ht^%GDrG0Dd-jp$ak*X4chXz;=U?!K)A|<% zFG@6Xd2UIG-ST1YJArSJT&VM*bDZY(_N<1Gi<+7 zpj>g8iA=Sw7r%n1*&{A#o?KONc@w?$UeKIvRpF2JJ0IYst!f#kHBBPnFO(9$9$Dano7`+&{pHi& zd$#W_#%(9_iu(FR_Xk$f=ryL?AzON0?Is(u4_+inTX~NEZ3N;dFAnE-yl$(n*WL9A zG>XdqdbO&TlGX#*t4VB(6Oau%6-OuK8J>G%J|CTWUORtny}^Xc?zD*>K{maJd%T;ELBaZZ%Tgf1xWho?-6hT}F()#@<*fFfwx4FyEDHqfGJ$5V94SmG#ILAg6yQmp{N|$lm87yN67QWDn z_?EJ{Jh!c4r<}adH!3-?gzJr$qWp*qc>d9xRL)Lo=_v^K|gapy@9yh}an>5B{Vt%xW zBUhxIkBGY64*z6V&GW$`VF`o#^&C({ve#Ew%N6l#hu91Dq-nb8$1nD>QtK9#6!s>= zc4EtW`aA55k3ew@fkG*V2CbzNH#u+lev)91b?D2~T?5AVnO8YE80}A`kqi?_rIv(U z)K|PoY$@7nz@K=YJORe;Pz!Jp^K)8=R#m!~)iW!=d$NQ>7B*#&AEJ|OZ%K;V>LduJ(- z>@}H2g|X8!SC*b=QWI0t&&sc_3_vM94|g|6fJrxR+>yiD#-@Q78nC~&SMTY2d7urq zgN=&jUu>otI8#~K+HQPuu&`iAjnO^?KRzIi#1IEOAk2nAUg7~Vv3gc41Ade2hx&fi zg4Mz7Dkb0hk$Id}y_04^DhBqst34jdIu%^v{p0N(ziB#$z2S@X&y`Jp`S5erY#zT| zj0rA%u{&H9lksPW^vQ!>n~aQr`ilGq6E|((T|E@?lG=aRnQS9YH`fZo@R zOz~aelb-G}7q7{oU(iJM$6%W&fgmCh!4_Nhox`lEFuGM)TQoMos;1JZZ-th(`jD|k z*0S3To^HjbSNZ1_L;jZ$%FC7q69uxmU7IOCbSj8mhUgYR^77V;a{M#+?H0PDh$U$7 zG>@`)tyGSVq3w?d*kdaKE(8E%W@M1D%fWNMl zhObJmGq}Qnt+Duwuy*TxV}zn9Pvk2=)~za*Juev)0kDgQ`2M#v>rzrmRJ+%=VX;nM zNk5hDAAVza3w%K~__wM3{X^|ffQ=mIwE|e@p4It3`3)PxL0H7G2~Kvj;NK(OmNWx3@+9)ma9@)p93~H)geV;4Vd%%Rf{cL#y9(>Z7xA`QL=4y`C z#FAYe8$YmD_`Uf#+So`~2`b0&xw2`6DpZ0xR9`&Up|Q+KU1smxu4Ai+AgxPRuQ=8~ZSOUH(VC zGnfKJK*jAC#_VV%E>DWm{m92?ue4T70i&(0u(7XF-ibW-JN5CqfP=MAw8Y+3Wh}W zZ1<*0bZELrAelQP8MnW` z??Px|{{k_!#0k8-6C)Gs4&VfnY3mbbA1<6g$q#RKM9X(uOn8WGn)F>MtS?)pc`DpGNupz78aVH+*W)}| zHV4|E0Y0#0d6OPeMN)yf-PL|cV+35Icb1*mpIpcYs`X&6iL014rYG7mvFx9J!hBOe zRU;Id!J7M?jAKTRKkNNRA)Xjy3SFO?onl62dRYdGW`pODK+8j&p4$lncg5q2w>xnZ zh`dtW5-;g4j=k7N-SSRs^AEFQ_=DP#rUufrwk3GT442$@n$zV(bI#f+RW$+ygM(#2 zeIJd?HZ|-VUPh}3CgP-d+1kxb?)dvBvWIX3Wpy?7#JNS{o1Od(Z{?q78BOWhnH{j>nqI2%al1HoXcNZeEjUYvT(^CS1xA$}2 zKXteqmK``|0 zpjcUxoHmKP{`TX+zNGGr>uDq542<%@chf+ph%B;2&%9gsS9pK1H!VCb_60(E!@Z;x zWBx)u=L%Pd4R{Q%o`os$2k?)V@Z{z@Il0o}y)f|L+Pek1o;KEKZ5?qjG? z67yZHiG>1=Uh-?e4D*WCjO|^zE<0YF&dG8p7@SNN-Dvg`b{Tq(6_Z_}f!;A6d1V4> z-=;3wEH+;}P%6^u@N#%dt%2{mWx|yE1hIAmX>Ea zdp!bMC%Cr-^z7sP!$$FlWvusIErbirbxh-vuZIKRILP!SF27{H4%Gl8p;{#DdRX*` zJ>FDNF^u%wv=`4V%*aVnl?35=t?1tDopl4na#k8vmb8)Z=LgNz7sw?jT&fsUL#haW562vFb!E>pELOzu#v+gn^f5`Q4F~wAIa{Z8EzUSZr*gRfkhxWu{UJ zD#q7xba5WTc0k0g2j@~1&aHHV^tfo2u;8bnZ9;J86!)q*c*dRx#T)b)`Z(Jc@KTO` z8D#=lPP`bdplEsW^+$sUCW{#5j00lzg~5Wi=Q{cLtCqk1srEw>KGd{iVh2ol)+88I zN-wd|-_CveOy7UJRZZ1Nqvv*IX6hbbv4#>Z?(~QN<^Gn0??AWTscL(GPj7?7=>JC~ zZBWIA8A-iDaTpHX)4mR%TFBly%S|~EIu+vpX zskop!R4?^>Xm)mlJ^Oel^o11Iy6a()R$9`~yG`_T;K%ymq_0OW`Ux7q zLJHGpEHZistYH&}C}X_AMCzHdvr{?c@j_8P1iy3Pd1SRyD<^OhC7pMjofgj+`=)5NOUtCY0N>tbUge!%Ci9DLLtk;~1~ z)K6#X@zs6y{@=i|<0_3j(}qMlB6oKl`vr~A9VB9l;wU6J$k&e4G*j;T^|v|zgUGVL z@`;kL1yIp2&u|NojgF1ZwCU9K&0t)s*5Rq5>U!k7{WgrLr6a*7JYEMtz|6=qG*Q32o+*yPN*!z z4LRKL-F-NnNGh(8F*mv!Z>A7^>qgoyC{G4Ys|_fLse926Jp?I|dLFQs2(FlX+Mw!w z-kXHq8zUvg{GNRML#$K?y{4kT2R!h$R{zNo>f1xX_^J@LdjYIEE(RKF3kth!K&zEaO-^m&J8El- z5bw`tF88t|-iI7Z5BOJ1uzPyGqvsix8L{OCiCQJwEww*ub}Vy+&a7r~XnC%y(O+L( zBwt8P43f+qr+pAoZi{brp)(|-|B<7lrcPo#{5x1N!{L!Cb(Yx`D|(rX3U0<4z`+a` zu?w7yeax8`93bYW6!m}C)y&7>ygAUv{p%5K0?qwix5;3BZ1det?hL$Iy@~xuertBh z4vlwkx*aLkC@DL-18ouNYT#mS@JAOc#t{?dqieD75_&W-a<_oN@2 z*bCcFex6~oMRleTTlC(a$hR{X|Xe7;`QLOFjkzYX(DrW64zJt z4b}Rlg_(KkKnAX^1D!WyN?(`+}P`BNreEQZ^cq}%R#DZZ(w%%Zdj-hKFF z;juqdTqsE|r0TNe86&wz`FkOrWm2|9{LB78ZAE7VWgU}PHF#2(Q@AgF^oz?Aah-il z^DVX85!XW*cyw)CWi?kSz`zkQ$STC-ihZ2jkIi)9C=kF=P@+EUE)em0;igds;9MyI z3KC@ylfU_y0L1a@5VHgG-aKv*{L;$TW8wK`M`+~6SFx9V58%Y*5)-e9-x>&)8hO>b z7;_EgK-k1PuP+|Jn|M*OM@e-E;RPpdXQ(gs-x&kiQb92@Upyi+8H`R0V zKRKh`-QFBug(bfC(K3_ZpJvgPik}iOhb#@FSJ!+usB>=Za;J7lS2cIQT|EmLA8g|I zt(nt50%E{fjc=WS@^)c9{gi3_^`(obo;BBYAs!ANrI(reGTN{GOC?;)*5Evt_mvFn zE;0EKPIL1Ub4&{{4xGc1e6Rtm`9y^3th7zt?R--x0IN>=bMxu#?(7llLUn#*C6Zn? zdLthC(!ZH$=avseGnbW>J1`)3v#;7;wFxf3hF`T9enY}y$72~QUFEeO4^pO-ngEsg z8nYByZTyE=RX7+|-4ts`vo9)=wBa15+`ZEwmIarxY`5M0;w*(H?4^r1$c>pB4vTr* z`&?{MO)09Rf@aAA9=0C$^mSk*{(C2Fg^Kq}TF#0Q{|QE`HsTvaJ|c$kSC#aro!@_t zXf+naH}=hq+?_Pv{<26<7MO7?x^eqw)t=l7r%(^_@%Ti_MId!oE?*VJ0lNM03q#6(pBM*6ExWMi6I znF|<98AU`&etV>IeO~Iv?G2YN4{IE{xg9R6Pn16`900Ek)w0-hc+mNfB+g`z(VMLr zPM>+THi#s`)L@|OJh87Qmh}q;43I<8b6eHu)~p83A~5JesOj<}@lURX+F`?uIqKHb za5CE<)wa329W46*tKW_$vrFXRd0D*Y$@LQ*?;q29va-lxbmZr6BpM0KROe6bg7;@@ zx({GAN<%oyn53Q?BT@(Q`GL2^|KPdO`k zw^{iNp1)Z_7rvv$^LXK>NY*{B`qrVpQPNlEr9ePyhH$mXW<3Y&;cCyrf8{Iu^4w}9 z(Hq^@GdFlVR?TdA5!_bp;Kw`|UWNq|r->piPY+)k(9motG-iJcbvdc^3tY84>5xxf z>!8&}=SfsBca}Qr;gIMF<4D3;xbMMJni@uz)P14hq8+`bN1e2Do17E8hGX53VRTAm z!Ekk0+G`fGEUoOvpqLmW)xUYXAACanP5lxRVk>Ke{3C3MP;_lJpDMTpF#+c9 zu)H~oSC7Uz4Yn7AFc;pGt}48A%>o$N8%bmFS=I3|@Y)tl*y|1Xqhk_qEMJOi4!=-!Gc4Og^G`Jdw7j>ZGE~ydDmSf@%1q<&{M9&2F=bE@s{_ zKXXl&F@*x>Z+w#f18pTd#&Au;pblLqHMLNIW=vOKVqDb{TxRls4utOruV;ICf^qA~ zM5ixDk`sV7(b>z#NOkA~_HE1ghL=ZUyV0vVb8$lET1TPR)xK$Y zeWc^QRR6ybQ@c@riK*8CPeSbO8STF7KZB#N>5;T$b%A1-d|jNVuO6KKvC~rLZ3(uY z_7uAFjn@b;@sX8+3RT*&$~L8A3O>b$ATTFpc{+2$bN1!@R1%Y?>0GhFlpj0l0Xs~I zumNwi)7aaF*@98U#$TzHhtD_n80QzjVRWOIum$TC&IqVWbX7G)VybH8(Vm6yP6KLP zEhiheaEyhneNmy@o>^hkeqsmxOZuP2L?8`sz@M*?{iA)=FC2;Lh>I+yEQ?XggmgD! z#u@h`2bmdJFkL(h_9r&F=&Ziw5Ztr>P>b7;?kQ#Gw66r5%nDsL)#=e*p z#LSE>vXd<Ef8i^g zP1=U1??s0A+M$Bay!?iXvh-jHK=PZC8=3WjRrkBFgJ!*gAnmIDPpw*|AdbPIzGA%R z2lH!2eVP?~rvqy$n8rr-!UvwsxPq1$-8+wu^LeVKIVRG zn|*~z9cyJ zGI$Y}%FtcV-O|G$y~?|Pv$`vKCU3c5x&r^~&!Spb5Q|C;a$@SYNjc#1d_d!9`|y?? z?A(r;MXa;Qu-%I`&9PK1WO|aaw08G{mdPd|^F65vi%<^R$A!UBNfp$>Z#bfq`JCq3 zv7tM=KsNcgoe_cLBZ5G-yF76rNI@^V5Ie7js{thejh#${O!)tjr`omJ$a)<&ld-WR`e@F2Gr=K17ds$*)g)v}8>3!;w8Y_iv)T4N-0Mtw+# z69nA(V7Ince|mvsQ!FCL_Jg2`{;dcbpS9gv7|jB;qemd5Zn|@*eQ9?hT4bK-mmSRN z{Ct?=>E*Nf(G>{p>IyOv?S#~`t%{hXwjBd0!;I16>LCksh@acr*krzQqCq8jS+-?u z8m*NtAN9W{p->zv_5PbICHPHu>G4W@>RXWRb#E<3@BT*QOyq%GNphC45X;nSTWDdh@k5h=%qpi6E zYVm6WD#V{HhYNzu{Qcsd##THfb?Lysa(AgiF6)IeXC~FfiF~3(rc0`rMeUoCgS;;m zva@y;M`t0AC;(rNiuVTJU+=&TZ=$mjH67O?mPMjU8%%-Wsnu+dS?^^p<*_<~;r|LY zeLJe<1+Uyy*61PMdizsjwZG5xF&yGyT-z96q2W$rU*a((&xHHpSHmOIAZ96o%7WQi zF=-I#KX&rIh}p!%vf?(5E&+aM$Cn+q^L2ewx?su?msYCmg5m=_>*Ob2@+!`#xBaqI z-?j7Cf9z}7fVfr7GfdoS4Z1xC)toM-5q9^+Q_5cPLl4QBtDLIwkVvB%j8nF}{7#FF z%hef?)i7BWRJkAvpU}YYn10n{Q+H#Srg&gw{3yAWBF6TLk39ONtj$V*U#bj00_~{m zEx-RsCO><+Lg`h=^R^0+ryT-+y>v9Nm%J#0&c&O7pdHPrI_DPDSj4W+I z=oCs>G}Ly1*z1?I|2wql#d&XdQ50XTggSSsL_)SbGDKDbK=!gpm5U90p=%~tsp3P|_!A$%;AG5`P#>l;_IGT=Z9lTf#DHDc+uVy^S{O?kni-vFgLCASJQ>mgEoLRJn7el>*SDK`?KN2q7AcZ< zqvb@w%x?T_IZyH@4IUOh!r6j;#W1bnA6-b6ry}d?+EeG z2gR26?QRf&!Ax7b37YM;Bo?5v<`D1M!k_@9246GP?%{c}pjh1v3%+dQqPX+)c)_Sp z*v3}R^?RT-Lz3EcZJO?+^O%ph2Z5!!_{fE#*Rw*`06C3U!icM~ zY6bF_P9BagnH#49=-O}}l-M6Rr~W{hq=6%3NVBnvvhnw;uiFh~_I$u5#>N?~*=wGc zbvGwbAqahG1~Suampq~qn_lbh5?rrjYTm5y@!X6jeGRf{csd$bDs23)mgF)JY8RE` zXMcg5&NrC(LEPgX!))qqu#$g>Y&Tl0|zd3yGJz^AebQ^uTx+TZ!7vJ((-L2dK zJI#*q{rCr9<1lybjeJ!ZhU;jd%J+k|?+zk}A7>MDqVlHdwSxOiMNN#Bix+6z=b@TP zU3Np&dh0cWU#91S_iLl3pr==u_m?RKpPKf6VYfDIAq~WNX#66{K0)Kc0>r?FEYpv7 zC#vZHTM0c8OG#EE#uRmzvd{flx%l%#d-LhzlKlMmb(ibUdC?o$%GZ4D&Nwezk`HVv zurdXaLSLVxDoP=P4BgY@pU<9pQ1XH91g6{IKO?hG_vu{Yho8tcUVe5cRZ=6)qD^t} ziG7POHbYbXC_SA^4|I+clQFPR99aL9IKY98)QKYzIk(X98t3uS^R?SBDPK!99BHl&}?+(5sON0S}=if8LeWX z*GT|EYTgG!VdMV7hM)V%l4>_LMqdq2*5{t72&#R=^ciuZIu!w3U-j z?Qlv1hUG?4+>8S5=zDFaz4n|T(=hS8m-gWmww=GmE*xf6sx|DO31p9<6^)GMBCtkh zx__i%HnG!65e}Ce9k={7--q`+b<`}L61IZXzP(b9%m^U3=%+PoVJxeb`9bJauCRyW ztW^-ub*)jG01>nC;o&`j%(bzzwx4u;Ody5tMCo4AO7Rb(_{qlWDYo%Jd9#Ln*wFNI z&%SW5U4?kGhHEsH5%UU!DJ=kv&Zmc5#|jQwcq!z~D@ zu~db;5>P%|)?=_2g;Ur*e|8yhv#9qiX}9re#J|p>*qK}`^mnjz=J%nttby38*AUb4 z03M69vH`S0dzYB0>7&#u{zJ_y4km}f8$;-$X5o^WJEi(Ni8cd`3@V38=D8npwHUv_ zS4d@G&oIU&MiPo zo6%RQsD?M_2vF`E&kR))NQD$*>81EAWS+RCx>?n+Zxdp9e9-3mm!-Icu~UNDVTfl_ zKZ3|};Xn^I_S4X!diqGSIy8I#$&ct~U40BcYCJ2fNa5E>cJDHjL3O&s6l-0Oupbb6 zaoGxwor1W%oX*WyYC}DHb;hGsFXXXf z$mbLpr(arOI_!T@5tz^|U8E>b2~IjjKPq1>bCB@FaVa=fN+gK-7DlMh z5ZKS_JJ3Du0TdW=C)_m_8RirZgrF-tj!{KET3+H6(N(_d>W98$H*|72dW)Yzn@V*J z_rUGPN<9(Q=~3Sdz@I-*1>kz!TR-!el&f&T)tNz>;H1yHh;&43T8k`iD zGIQCrC;n*flq1;Zu35dqD^syA2`=<(BvEFzbNf*z@CuHrI|K7!q=1`WNJgtemln zh1`UdIwr}d*4wRD3HWuUr8OLR2)n4UGiRyGIq^P2@LcRUATwu3dCV5-F*ast!LC(i zWG@G9rkKjuN(+iOeiJG`#p)xO&wNRS8*&R$9AOh=Q5~n5v_R&d4ET6aLYm+&@E;{a7$m;~7CpauN?`GxX^bUONhb5xySm|wL-8>M&8C*55 zF&hoIdFi=%_Y`zrU!|y*G>O0J#-3Gm%$30B5`WDW36N>uOG(iCMY+(_Cu;KWs6mx% zGZhKI{TY^-^RYD~w?X0~>4Mx*ze`PDLX=lzDAD1;cv9Dp>l`2)Tf|CZNhyiEMr+Z3 z5jsR&{<%bhX-W_Fy|62^P;WJeD4Zk`4-nCqf=0ihXj6Q%Y8jDU5pyX2n9a8r5Xh1a zATi8iUvNL}85mXKab&SPaRrFGNkhrn=30(4`3#KFBvVo(J1O-hLlx{(Hpo5R2j?V} z{@O7~?^_-=Uqcb+4sBVagowPjt`P5>1vC^eS8*L$Y1nKKRrC4A?n zm8*=UDDaC|e0Ubh|MrQSNd;DS)naFbj5y?)jjIew;%`4G0MWotR~8dxstWR2F(bI$twAriZ`Q&`uB6hz>#bCj+%&w)72jf-M5M3 zA59zDLowKx9o$XGBCVMQEoJdYcbt@Ky6j|Q>sMBm{e0F%p@S3$na$+YeBSZnKbIWH zP`jbLDjL5u;#=9Wnc}~Eh&TFeoh&(-Rx|d##6h!1Xq$yd1b!6|g+ z_kAbZqV6lg`kNoSHkn{yyCJ$Kb^KN(N4xREqd(DuS&?;cb?E9vix%DtSZhrrzaqus zxvRQ;m1qvcL3`d(@f-I2yU6T>8jVuYH)LXgE>$?(BRhDny3g{HWD33|ZK{BbQClDqr9;!dLoGR#=1>15gfU&Fwy5d02-{7Z2v?b4Kk6 z6)Odut{<+{DWDqBna_@D%6o8|m6|%kZ6oX4Lic>(nL*N+*9vs`lW6z zPG5G(rHk2{=;rP%P_DNTRb0>$p-Wo3@%r7M3LFWjqxoK=W>k23l_OazdP&TUk z#`Ar;-{+W4EEo$-)t_zW&#bgB4o6THEtsO@h|3om4b^MPFB1vE+zaf0IhJXuYrJwi z#tVJ^@x!1O_89L-vl%tN{LrTy4-$l^Au2QWmmHir*TJ0fB$>0h_XmiS6Q+13vJbH5 z89;lrptXd^Ln{=RN6Rs;;!C+wK1{KM6|02+5zOoh=xr;oM(!7$^k-Xj=!9;3!8MTr z>mNhQNeLkC_X``EIM9U&B)=lpc{Yr~*7QK&Kw95E@*jv-^w|oK(|sXnxFK##G>58u zc5Lew9XzykDch#m2HLMbmassVRWop#^8Hkp{%AfRVvo<31~+D5X5wH}d0~rx{q!6a zXvI8|nlwn~vYr0YGJf246dS+JXm{C#%^Hn~>bFo;bBOdLjW|Yy{VI^s2G^Dlo4!_t z+Y&GjpJ}2|wP!E0I&lRq!fDwxs8y9|Kt#L=i;I?1*qg&Ii7}|8wX~6I!f-4Hdsn$A z@4|6ieWi*wL*ZK%j?fA2*H!~%fY+ju3+~|Z<~j|@E)GEK8yajrE3{RXArUl%x|{PV zo#DRh#m}$-zIKsk{FP`6shaUuCqL2DSWLO>~)ZP5pzZW-I%r z?hULq0i@NMhtQpt$7PQ#%{4c7bDW ztQR{{7QArfamXAWC1>ZrByo!S%$y9@UZ{f86{$yngI)fd)8CawVB*XJ9ZU1yu<@7t z3?h*x`BPD8IbObr450PNt7*fWzey0MZpBQMB;s3t-X%`r>mi@ni1v=FR_HOoJ@-!S z&+_+aWeJ&1G+EoX_}cv=Et^R(QNJ30?N{HmEu1Y>$W1!4a@opT;zRJGz%;?)aiwgj ztW^?9P5*$wSt~SKlMcN9lpjb?RzuZLE2_{3PN|k99ATC%_ugCiJ52(=>IJ-KJ|bln zu$E`{IIugLLHG#Az^!=ds}dQ|x)sTO_C6ao7#(_Kxk<*5(=#XC0@q;{;`+N4nEvUh z0M8XC6>H)+4=Pz2H@$gplN?1VpNS2^TJ51q!&if)S?~eVPY3`Ab)ipx%M#ETDCIU(veEa_2;yU>k>#9?p3er z^^f~CI7KDakM*U!tB6|O;rD$=o@+ax^Q~sIw>unMbix1eJga81vCD0*tHnnDy|pEe zhjgC?aiK61uhpUKL*`{eyulN@Tjy|#pxIwNAP50^PSDllws)hPSe1jp&YsKae3Kt^ zS;lt$2hmm7BXJK~C_Oc*3r9Eqs}w@5)_C&D*yzOrgPL?9D(Y;}L5JSAiU=S}{NG`N zm|WeG>QPp*&|;c=Xo)=kO(;JHLw;LTxR{`^_aGp9W&Zn;V2TtEPD=x0X-K#{>)~Tk zBb@Tc9nSMl^5*kJy{IjTqc6}}HbL8A{Z@<)==Z1lDK6R?(^`u^=>{gH|M+o?6tN1B z_v_d*J4Gni<3vHP%*UuZ3_d(86n<7zEe~o69&MMBGcb!`rPs>;n?^v{cscnPy0bJh zV{T~p0VTAf)bu4b?XLCYz`!!D4tbs@8-q{sJcqYhL8<(?zLWKB>=nU*auYIoaMtk~ zQYpKl6@HEZPb;Sz@yXuLAZabIJnIePFY?VznOpo>_%AU!57YiDnui?tjqiRzUvYl1 zrt=LXX*WS0qwJU!o8&bxv!)N>IM^{xdZ2<5<*mx|^F!eqDQexS6bGXU%u>5hsy}__+w-wxJxQ8)vlpfz~@LKvvu?If6%8 zBJM5w>KA{eCIJ!i{cqNb`f(eY6e|#G+nHi4oPL)Z%$-bP1CQsk0Tk+2`+O%S7(6*V zF>ZK@WRn&;FkhFN^21J!RhYaC9U9jH zapAZL1>_Y;dx>TiRco;uyZCGTN-El{weLF{o3Rt|7a%T*rky=ML?yE zkj`l(hyRb8?ClK;bep-nSD}IDM=90cI~{OsiPMf5Ua2Y zO*M$dwPF@cBLzqR4sg~ywu0|43^xf$ow(*N4&>MW?laX>~Rvy%H83AF*{- zjLj0>ew5Ej_wwGfFu3zuHWi@0xr8=|CHpFhStMUYepGb3k{;DorMOC|6!O0;o?2G) zUJr8Xy%`lqVzi91h`T<2=D;G}=5@L=6+qtxGbMhvzLF75`4u( zTqvuVn+v3WJ5V@YDQo4J)6Pug=Ze0(66ni8sk<;WXR37^6q>mE{fz$a_gb%td^Vn* zW#DDh|5e+0Mm6>A>l#EvMFgn=3JL;J0@A@yR0tiV_udJF7MdU+Rq4_aI?_8xCm>Cl z^cs4TDlI52bnfC`_TJ~*Gw#^ujB~$bP-#JoB|ikCnxI!R>6cNuwr&>q^DBfM`;~#MU=73|LB9_@Q=w?H}9y&y;ge2H)nq zLwL1d0KsAH>x{b__TAL_(q(;OZDTlIS6r=Eut<%QR}Vt7&G z=iwyWP2`AYqh6X+!!l1sC){7jmz={F-;D)~T^SkR3@9Eo%Y-cFykxmRKIP;Sz$ zV97Jz+{B@YF@}t{~T-+^33) z;Cul?3=H(d;luT7zEM%iJGv!xJ?ihTsx06?s!K}xhlh6sn~sUb&%Xr{8hRhEEO*7A z#`R<_R+H>422vH3-8MbG7Iv10M4Hb|#0mWLdK-RzD8KfR>l91h#OCmNrV@AcN61D~ zcDBnD^UnLnyMxDnxTf)(idrN%MjfcEJZ@%+r956m!I&r>Szda6lL=A41##yL# z0T80Z!oS>DXb8SWT*Q;5R6_ z+uN`JMd|CC>6nxqxiy_W1OnHW7lN9*DLm%4u_qhoLOl@-O_*_f$&~%L%>OSb>!Zcl-7!L3$MZgWaLVk=#<+hTsuF0i;(3Lk$2ka#u{iW-jboiiH{?vK2Z`q z-P?no_xyem{*qtlZn!}x*x@!i*fR8*=0r}<+BoG>LHeGrA)V=0_ocg}w8`;gl#(Zw zMi52l#8j_G_j5DPa;iV4G8iOIQC?R_*wkcRlZd1ILa*VP*7^@=Ry%7T6ie^5Kcsvi zvy!ix>l!#65)x9vNgCYN+gs#@Q*x~rU!N1}G#?mRdsTTt?{nsu(Xi-tc7*9M=nSXr zr10eetoPF^5u!Y@Y>C!mJKQpcVVm_FADV8B9n`-tRHyf9!bo&H8->hxweMt_GDk2X z8|#berlMJ0xY80lU{n;W>~h%1(Y8Wi&H7%4a?Nq=dOhqY%WwQ9CGKDg6aVud3bnrlI?AKdv2uGVw9MJ+UgFRn8O7QkAb>&@xYRM@`2ua!9y`kEM>Ew$lBbT zUn8{eK3qRbWxdjRq^@H!E?GKG*1{r+GHd^6jox63Z7i}XG5fMNa-Ny~GH1T8q~rpt zozY?yv4b8B&SAp`W=__V? zgCT_39V()Lg%7I}7=bZy0Wc_0e;dzRj-$?nwO^)A>k1$9QCXqx%uJWnd}5~ztv3K# zsTy}ca8GmPUC^jvAjiy0e18Jj{U)Lr(>Gk~mXwVg`w;m8JQNMpir2(D&9 z%CkO>v3yhWF6!|e&YHvTx)ML%QBoGq`Uu!NxX3@Op=U`PbFGqU4V<|xC8PX`jF8oIabxEb zeL_@h|51E}V!JkVyBr=DvCTyW0$7Ic|71;?8VyhvU#RA-N*S^%P8~sc?J4~&4>u9rA`zje7#0Y+%Yoi0^pQm6h z25s?vP1SckysOELtN+=Kcz)d5w9_%hHL%Z#Hjj08f+aVo{|xHbwbrGP(KkZB^t|`1 zb<0QLk~y<-MalbMZ6ggoEEPTSW*ZC82VE_RMk-@_7HRKJk}|VFonj(2d(sz-uGIs! zsn}74AB@*=Zsg|45?{a_EwS~7MS?cvH}Cbo5qfaxCnLmS0*K6Xprca?jgU%-1q_b8 zjo4eFU6x0DbBFfE^<4YT7yqHD?T@B`Is2`4x!2-z~%@Hp}Sej^&nCT8egUkg?EZpPhoH8TQuqD*uim? z9=J99b@t%P7q%aZibPlh+);)8E4-_SCc|3i^J=V({Y7wof7%4?kDcv(k(w^;K3DyF zDz%xg^nJutB;%NuxwRGt2ZjjmlN~)&bXkt~ud(#G)YY*6T zn%Ds1!2SkIte7Xc-npwTn>0whQjKCObYCp-bSh$$Bq>;5g0-8>|J&WvOk2d)jkUwX z7mTGKaWAN4{Ao)@c!Dm1<_Gd-!;RS(GL1f!SGg`jsX2bBprEMxw~r#p1CAwAEONPS z1*g3hBsYH$5=t&p{tb3r;^2?t1?cK{(f@Ep7xdP2K&rgQN3)5pk0nAwnTy%NPXBZG zZNe=kZ@TG_0v$vm11|jjZ|Aa{>O8sC@;pIY_;HO6%51R|24@}u&cC?Y#or6IfTlsAlG z5d%+URhn08YEqn+o>B=3m+U;5Xws!DN-IQzW7acoSv?7o(c&4NdVUq*oiUV>C$sYH z+8uQpLA*(GH_fAn4_roHWP;CKhe#4LSb043PV2IUu};mU22QF7G?M$mbum!O<1p0rJL0AZzlz!ITLhT7+*?<5ftI?Z zFqXSgp!0?}YQcC<2dTGi651LXsrM=e4~5}9$LtJu5k6nXr+2ZNZw~B{ePhfZrwe&h zIg?wv0&i)kv=r;CwY}uT@J>4Y$xY-Z0PWFXIYioDSk<16`w{rZ7^lW;`pK-hnE?D)S zyR<*xM&+!0#`Xe*0tG?In`yf@71l4}iypZj?r2)32$3&h7Rc3{^Dkw*>Ce*jE{ya1 zQK~BZ;(|at55_5XXV>7@SBm*xTK{jt#}Q9mqJ;%Cy8oU;u%fXEtW*BTD1~gqY0>I{ z$@@k(ygQBoDR|9e*dD7SWp^u(BKMPbdg)8-@=O9_Tu=@~a0jK$mL^&9tqH60_(E3LZkqI;SnwWI1b^HXyZ+5Hf?of;2qTIu!ssb z+m8hTgf&54>MsM7b#ruF^rq_a5BBal5eM5+Y7JMhbOX6eax`S^>1IK+KJ=Sg(?;;fTJS;F@F=YuR+AvYJLTIYOnM zW9p=a%+r8Zw1)k+5uRI?XRGk-DISrvW>RkRpKm`ezB^>&Eh)KQ^?a8vf$FlxC$<5( zAUS8)BvAHsvlfw|^|ot{c%2FSnu7jj)F_6?+x)FcmHAQqrBLH^O#W)MFK`6pu>SXX zoAYVsxma&5WGEZ@AgZ}o0vRr7aSH7&2|}% z%Q(Vw|33pag8J_H;gfpImMc|NJl)PE+kM4LOd}~dydhI>bkqXk(qgRd_n=1X@77(5 z!YO|Cxe0h3Xf#@3XZtw1cM8uz*!9+r*CmUU@+Q(fT4erfprukr&zcA@)08N~iGDph z@<_q{pv1(v+qrM#K(HI-t^a{>@mkHXcr&Y;cJneCYSrhG(tMPyd#adVBzBye5n>OJi`MavAaqG%MgV<<$!D{#|> zU9#r08C-MppTWw5j5}0;U%4agTb}AHSXa1tN%;Gv^l3C1_R)Bh5IXRXk}#$@3@=vY znAa|;R{yY)LQOg8JAWi=;#@199#q*(ar`nfFjvfuBD6Kot!j=X)F%|#=6y}2=zKcj z;u&k)47h!%lX)+n-wa6Anp8&V zI!hjGOaSUEe(-SXw!KJpc0u1wgBTS>TLH;a?L`I~KvV57%N6-@(L`Z4b^F#PLWmnJ z`_fpO2)lZ=9~Z%XK=nK_5M4BJq5no3`7cF`+t5uB*W}}{&OR3L;os|;)GXeKCg%ai zWNi-2%s zRDOPKJ#XL5rx`!kxQpr_Ej&2_L9@~d462^;kEvI$#uUkV!2e zU-tQwNdmCRWMWJh+Z)V}6~@l{2g`F8BtsjDNM~?xZr{1e2s|+fda7er>&q?Z!&LuD zw9+lgtK;mlSd48vk3x{{1+k#G|2skmJk*b;GGUJFv2_#^l{5trXlgQ(H8^4Y@1SJ* zQ(>#J>ho$;f`nGEO0h~_edA-rU?Ro(axoAIH#wsKsSAiut~qT?X|HvNlvkH_I_W~R zCyjSuZ1@+FRB1|;-V4Dxf4}h!_p#VlS)nr;tq7@fO4RiyTQU*e=%5ls?FNP%$re~f z#jNd5_^F8-B3ZMnAjq!`2D$y}xA=$09xX7Ec+T+o3P;Wnho=*lK>}hS8_Q_+%5^ul zDW|q8<@o1WE()Uyp}Ex4waV`>jezl~2C%sHr;Xhn!*@ci1@4|0^~FhN+Yw9l@9=s} z@xyimZzK4*`kOa1Ucac3n=i3b<1GEBCpCquH1slFCZwoNNd%#7{9wkegeD$*M7YPAh+x5`E!!jd?4xIV`(ws+@h4hi+P@aNcHFC%)AXTn5kvSMl{vZ^qrwV?U7_P#z9 z<+fkpcYn5cw!r?g1*}T*ki9$R+#f42d`Roc@`raE@5(!_q2W>|2m84^3a2G+T<%O( z`lbFQ7@I-z%r&v)aOOiNr~UU?wLKNw16V_li0JVP3@@iD{W|sX)cDT$TYP;6&Kzl# zTm@Qr4F7+EK$zU1F9g1SA=MqYsXIUdfvb1@2uqPR&A6j@)o+aF))dG17aHtM_jTL_74~p+FMeHLu1<^j)PGS2ybQyv-+5YrC9Qw8coVSp&K#&1oRS zXb#Cu3RY~ZW2&fPVXQ4XGqHR!~6))lO%SJ2w^vV%39 zUW3Zh+T#xJr7AcArF%mAyC`Mqbo>dQAgZS{k>vP%QDpC@ACc&WBw(wMdvaDS6{))O zZlMTPK8E0r#UZ+h?29K*!S1X7Mfz3iyl^zq#1qN2&10aGdu?h}Uti|rC_?rdz}INNuHV2X|BS>=CC6YN{+NTv4&d=i$=8gt#ejqMDO}B1U57K+Eap!di2|mqn#4W zFe0kBAfCi+)XQ%Iz)rgaQv7HI&y@vH^UPYu>}fh0^sdJg1~-IA$QDQ6nPRKH$}z?! z^+0t*W~+f5qaLdYB)B$)hS6H7P+2fmkX`S|S#?V{jSjh_nL9kwRA-boe0A3kif;_; zU;LL4h;$iMgW1o&xQCfvZNsuZ9+|h^6Pb0(lV!hYXpCXqD(}mUL_?(xXP7-c+Pn{b zu~6N{__SoA5E^HZkfMuU2gR%v(~<=Pu&TF%b8yTR+hgeL-FYpH)cBAGnu^B(o`0mdM=kZ239Q5L$lBsbx${zFBjY(gI+gQ~bof&} zNYm~oYG`#%?1s~pnxkHSrmCy67QvgO$xG7t2(HG{Gu?0Ao{rnYp=X|eEqAB-VubE7 zHueh6c!V7k{@r6Ae>bsl0^tWsM|UDVTw0?VB+*KhdrElh+Lqt%jHS$w4(;QQtbd=; z7aqB+eDOrQ%tn(!o@n9%kwfh(rF_L_Omz%91*a*>n&>4P@6*1P%1U4U)t>?}JI3s* zBN)LIkHsHWh_UjWsmrS$_s_uFoLX&V=kN60rwNv^YiS{+6<0mz^mL>6v>r4n44ag7 z4&CEzdzo%@QrH7~&B6rhCxvM}f^5 ztk_i209d1DpS&yN5W`{2(XJM%$L$Bde#YPIf1zPDf)p%a$IhQ2vklO`g)>Kl2y`FQ z2iFx18{4sV0%rmzU)YQNf}n*4)bNL5}sQ6Fz^e zANZU3!qIF%Q80(eb|&_T=O1OJ{r8!0wa{O<9NLHGI$}}EHclvpxIW#To!@-r^PkE( zpTTy9$YhNP_`@dJEYJ}|zK4uY%VwEOS>D_Zpn#Sc|ZHqY7@bMwHK$;(?nPVnIn@h!gOss*&* ztN6b36+9xVpNkf7zV)9;7gaswJgvwax=+h=V)2y>Wy+vuWo3p{jFO(mlQL}0u~rxx z`L42?k*ze}KEe=8om|`-ZavKZZM-5x*mSXy(<5{GOYkSef0wVQe`!?xZh)Yg2}MAh zCUg6>GW2PBdUmnywI!o&)xT}Oq4?X>?K}P_v=I_V>_-r5Rjmk z*zTfgqbGl$IPEFqYLzy$G6~hj^c*G3;WVH0@{DQaRnoWslZPvRcP_yW zzFXMe+=KLxDL!xk>FxN>Q6TS?C0)W;ohL9T%9)?f!hDAS6rubT5!2AUMI~CGf@bz8 z72@~mJiT>z(-=S=Xd-~y`2}z1CIEeq;?|Z;#)^#da|3u3 Date: Wed, 6 May 2026 14:13:53 +0300 Subject: [PATCH 8/9] batch queries --- lua/spec/team_participants_dates_spec.lua | 185 +++++++++++++----- .../commons/TeamParticipants/Controller.lua | 6 +- .../commons/TeamParticipants/Repository.lua | 103 ++++++---- 3 files changed, 210 insertions(+), 84 deletions(-) diff --git a/lua/spec/team_participants_dates_spec.lua b/lua/spec/team_participants_dates_spec.lua index bdbf7f7190a..72a5097262f 100644 --- a/lua/spec/team_participants_dates_spec.lua +++ b/lua/spec/team_participants_dates_spec.lua @@ -20,45 +20,43 @@ describe('TeamParticipants player dates', function() Variables.varDefine('tournament_enddate') end) - describe('getPlayerDates', function() - it('returns empty for player with no pageName', function() - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = nil, extradata = {}}, - {'Team Liquid'} - ) - assert.are_same({}, dates) - assert.stub(LpdbQuery).called(0) - end) - - it('returns empty for TBD player', function() - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'TBD', extradata = {}}, + describe('getPlayersDates', function() + it('skips players with no pageName or TBD without querying', function() + local result = TeamParticipantsRepository.getPlayersDates( + { + {pageName = nil, extradata = {}}, + {pageName = 'TBD', extradata = {}}, + }, {'Team Liquid'} ) - assert.are_same({}, dates) + assert.are_same({}, result) assert.stub(LpdbQuery).called(0) end) - it('returns explicit dates without querying LPDB when both are set', function() - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {joinDate = '2024-03-01', leaveDate = '2024-09-01'}}, + it('returns explicit dates without querying LPDB when both are set for all players', function() + local result = TeamParticipantsRepository.getPlayersDates( + { + {pageName = 'Alexis', extradata = {joinDate = '2024-03-01', leaveDate = '2024-09-01'}}, + }, {'Team Liquid'} ) - assert.are_equal('2024-03-01', dates.joinDate) - assert.are_equal('2024-09-01', dates.leaveDate) + assert.are_equal('2024-03-01', result['Alexis'].joinDate) + assert.are_equal('2024-09-01', result['Alexis'].leaveDate) assert.stub(LpdbQuery).called(0) end) it('fetches joinDate from active transfer for active player', function() LpdbQuery:revert() - LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() return {{date = '2024-03-15'}} end) + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + return {{date = '2024-03-15', player = 'Alexis'}} + end) - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {}}, + local result = TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Alexis', extradata = {}}}, {'Team Liquid'} ) - assert.are_equal('2024-03-15', dates.joinDate) - assert.is_nil(dates.leaveDate) + assert.are_equal('2024-03-15', result['Alexis'].joinDate) + assert.is_nil(result['Alexis'].leaveDate) end) it('falls back to activeAlt when active query returns nothing', function() @@ -67,16 +65,16 @@ describe('TeamParticipants player dates', function() LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() callCount = callCount + 1 if callCount == 2 then - return {{date = '2024-04-01'}} + return {{date = '2024-04-01', player = 'Alexis'}} end return {} end) - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {}}, + local result = TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Alexis', extradata = {}}}, {'Team Liquid'} ) - assert.are_equal('2024-04-01', dates.joinDate) + assert.are_equal('2024-04-01', result['Alexis'].joinDate) assert.are_equal(2, callCount) end) @@ -86,19 +84,19 @@ describe('TeamParticipants player dates', function() LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() callCount = callCount + 1 if callCount == 1 then - return {{date = '2024-02-01'}} -- active → joinDate - elseif callCount == 2 then - return {{date = '2024-08-15'}} -- former → leaveDate + return {{date = '2024-02-01', player = 'Alexis'}} -- active → joinDate + elseif callCount == 3 then + return {{date = '2024-08-15', player = 'Alexis'}} -- former → leaveDate end return {} end) - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {status = 'former'}}, + local result = TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Alexis', extradata = {status = 'former'}}}, {'Team Liquid'} ) - assert.are_equal('2024-02-01', dates.joinDate) - assert.are_equal('2024-08-15', dates.leaveDate) + assert.are_equal('2024-02-01', result['Alexis'].joinDate) + assert.are_equal('2024-08-15', result['Alexis'].leaveDate) end) it('falls back to inactive query when former returns nothing for former player', function() @@ -107,29 +105,31 @@ describe('TeamParticipants player dates', function() LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() callCount = callCount + 1 if callCount == 4 then - return {{date = '2024-09-30'}} -- inactive → leaveDate + return {{date = '2024-09-30', player = 'Alexis'}} -- inactive → leaveDate end return {} end) - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {status = 'former'}}, + local result = TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Alexis', extradata = {status = 'former'}}}, {'Team Liquid'} ) - assert.is_nil(dates.joinDate) - assert.are_equal('2024-09-30', dates.leaveDate) + assert.is_nil(result['Alexis'].joinDate) + assert.are_equal('2024-09-30', result['Alexis'].leaveDate) assert.are_equal(4, callCount) -- active, activeAlt, former, inactive end) it('explicit joinDate takes precedence over LPDB result', function() LpdbQuery:revert() - LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() return {{date = '2024-03-15'}} end) + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + return {{date = '2024-03-15', player = 'Alexis'}} + end) - local dates = TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {joinDate = '2023-01-01'}}, + local result = TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Alexis', extradata = {joinDate = '2023-01-01'}}}, {'Team Liquid'} ) - assert.are_equal('2023-01-01', dates.joinDate) + assert.are_equal('2023-01-01', result['Alexis'].joinDate) end) it('queries against the team-template columns, not display-name columns', function() @@ -140,8 +140,8 @@ describe('TeamParticipants player dates', function() return {} end) - TeamParticipantsRepository.getPlayerDates( - {pageName = 'Alexis', extradata = {}}, + TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Alexis', extradata = {}}}, {'team liquid'} ) @@ -150,6 +150,99 @@ describe('TeamParticipants player dates', function() assert.is_nil(capturedConditions:find('[[toteam::', 1, true)) assert.is_nil(capturedConditions:find('[[fromteam::', 1, true)) end) + + it('batches multiple players into a single query per status', function() + local callCount = 0 + local capturedConditions = {} + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function(_, options) + callCount = callCount + 1 + table.insert(capturedConditions, options.conditions) + if callCount == 1 then + return {{date = '2024-03-15', player = 'Alexis'}} + elseif callCount == 2 then + return {{date = '2024-04-20', player = 'Bob'}} + end + return {} + end) + + local result = TeamParticipantsRepository.getPlayersDates( + { + {pageName = 'Alexis', extradata = {}}, + {pageName = 'Bob', extradata = {}}, + }, + {'Team Liquid'} + ) + + assert.are_equal('2024-03-15', result['Alexis'].joinDate) + assert.are_equal('2024-04-20', result['Bob'].joinDate) + -- 2 queries total (active + activeAlt) for 2 players, not 4 (one per player per status) + assert.are_equal(2, callCount) + assert.is_truthy(capturedConditions[1]:find('Alexis', 1, true)) + assert.is_truthy(capturedConditions[1]:find('Bob', 1, true)) + -- Second query (activeAlt) should only ask about Bob since Alexis already resolved + assert.is_nil(capturedConditions[2]:find('"Alexis"', 1, true)) + assert.is_truthy(capturedConditions[2]:find('Bob', 1, true)) + end) + + it('picks the latest transfer per player when multiple rows are returned', function() + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + return { + {date = '2024-05-01', player = 'Alexis'}, + {date = '2024-03-01', player = 'Alexis'}, + {date = '2024-04-01', player = 'Bob'}, + } + end) + + local result = TeamParticipantsRepository.getPlayersDates( + { + {pageName = 'Alexis', extradata = {}}, + {pageName = 'Bob', extradata = {}}, + }, + {'Team Liquid'} + ) + assert.are_equal('2024-05-01', result['Alexis'].joinDate) + assert.are_equal('2024-04-01', result['Bob'].joinDate) + end) + + it('matches transfers under either underscore or space variant of the page name', function() + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function() + return {{date = '2024-06-01', player = 'Some Player'}} + end) + + local result = TeamParticipantsRepository.getPlayersDates( + {{pageName = 'Some_Player', extradata = {}}}, + {'Team Liquid'} + ) + assert.are_equal('2024-06-01', result['Some_Player'].joinDate) + end) + + it('only queries former/inactive for players whose status is former', function() + local capturedConditions = {} + LpdbQuery:revert() + LpdbQuery = stub(mw.ext.LiquipediaDB, 'lpdb', function(_, options) + table.insert(capturedConditions, options.conditions) + return {} + end) + + TeamParticipantsRepository.getPlayersDates( + { + {pageName = 'Active', extradata = {}}, + {pageName = 'Former', extradata = {status = 'former'}}, + }, + {'Team Liquid'} + ) + + -- 4 calls total: active, activeAlt (both players), former, inactive (only former player) + assert.are_equal(4, #capturedConditions) + assert.is_truthy(capturedConditions[1]:find('Active', 1, true)) + assert.is_truthy(capturedConditions[1]:find('Former', 1, true)) + -- Latter two queries should only mention 'Former' + assert.is_nil(capturedConditions[3]:find('"Active"', 1, true)) + assert.is_truthy(capturedConditions[3]:find('Former', 1, true)) + end) end) describe('setPageVars', function() diff --git a/lua/wikis/commons/TeamParticipants/Controller.lua b/lua/wikis/commons/TeamParticipants/Controller.lua index fa721be5cb0..f5cf8451e9c 100644 --- a/lua/wikis/commons/TeamParticipants/Controller.lua +++ b/lua/wikis/commons/TeamParticipants/Controller.lua @@ -148,8 +148,10 @@ end ---@param parsedData {participants: TeamParticipant[], expectedPlayerCount: integer?} function TeamParticipantsController.enrichPlayerDates(parsedData) Array.forEach(parsedData.participants, function(participant) - Array.forEach(participant.opponent.players or {}, function(player) - local dates = TeamParticipantsRepository.getPlayerDates(player, participant.aliases) + local players = participant.opponent.players or {} + local datesByPlayer = TeamParticipantsRepository.getPlayersDates(players, participant.aliases) + Array.forEach(players, function(player) + local dates = datesByPlayer[player.pageName] or {} player.extradata = player.extradata or {} player.extradata.joinDate = dates.joinDate player.extradata.leaveDate = dates.leaveDate diff --git a/lua/wikis/commons/TeamParticipants/Repository.lua b/lua/wikis/commons/TeamParticipants/Repository.lua index f1f59030e08..766fdd2873d 100644 --- a/lua/wikis/commons/TeamParticipants/Repository.lua +++ b/lua/wikis/commons/TeamParticipants/Repository.lua @@ -163,11 +163,15 @@ function TeamParticipantsRepository.setPageVars(participant) end) end ----@param playerPageName string +---@param playerPageNames string[] ---@param teamAliases string[] ---@param status 'active'|'activeAlt'|'inactive'|'former' ----@return {joinDate: string?, leaveDate: string?} -function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAliases, status) +---@return table -- pageName -> date (YYYY-MM-DD) +function TeamParticipantsRepository.getPlayerTransferDates(playerPageNames, teamAliases, status) + if #playerPageNames == 0 then + return {} + end + local startDate = Variables.varDefault('tournament_startdate', DateExt.getContextualDateOrNow()) local endDate = Variables.varDefault('tournament_enddate', os.date('%F')) @@ -180,8 +184,20 @@ function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAl toTeamFn, fromTeamFn = ConditionUtil.noneOf, ConditionUtil.anyOf end + local variantToCanonical = {} + local nameVariants = {} + Array.forEach(playerPageNames, function(name) + variantToCanonical[name] = name + table.insert(nameVariants, name) + local alt = name:gsub('_', ' ') + if alt ~= name then + variantToCanonical[alt] = name + table.insert(nameVariants, alt) + end + end) + local conditions = ConditionTree(BooleanOperator.all):add{ - ConditionUtil.anyOf(ColumnName('player'), {playerPageName, playerPageName:gsub('_', ' ')}), + ConditionUtil.anyOf(ColumnName('player'), nameVariants), ConditionNode(ColumnName('date'), Comparator.ge, startDate), ConditionNode(ColumnName('date'), Comparator.le, endDate), toTeamFn(ColumnName('toteamtemplate'), teamAliases), @@ -200,48 +216,63 @@ function TeamParticipantsRepository.getPlayerTransferDate(playerPageName, teamAl local transferData = mw.ext.LiquipediaDB.lpdb('transfer', { conditions = tostring(conditions), order = 'date desc', - limit = 1, + limit = 5000, }) - if not transferData[1] then - return {} - end - - if status == 'active' or status == 'activeAlt' then - return {joinDate = DateExt.toYmdInUtc(transferData[1].date)} - end - return {leaveDate = DateExt.toYmdInUtc(transferData[1].date)} + local datesByPlayer = {} + Array.forEach(transferData, function(row) + local canonical = variantToCanonical[row.player] + if canonical and not datesByPlayer[canonical] then + datesByPlayer[canonical] = DateExt.toYmdInUtc(row.date) + end + end) + return datesByPlayer end ----@param player standardPlayer +---@param players standardPlayer[] ---@param teamAliases string[] ----@return {joinDate: string?, leaveDate: string?} -function TeamParticipantsRepository.getPlayerDates(player, teamAliases) - local pageName = Logic.nilIfEmpty(player.pageName) - if not pageName or pageName:lower() == 'tbd' then - return {} - end +---@return table +function TeamParticipantsRepository.getPlayersDates(players, teamAliases) + local validPlayers = Array.filter(players, function(player) + local pageName = Logic.nilIfEmpty(player.pageName) + return pageName ~= nil and pageName:lower() ~= 'tbd' + end) - local extradata = player.extradata or {} - local playerDates = { - joinDate = extradata.joinDate, - leaveDate = extradata.leaveDate, - } + local datesByPlayer = {} + Array.forEach(validPlayers, function(player) + local extradata = player.extradata or {} + datesByPlayer[player.pageName] = { + joinDate = extradata.joinDate, + leaveDate = extradata.leaveDate, + } + end) - local function tryQuery(status, field) - if Logic.isNotEmpty(playerDates[field]) then return end - local result = TeamParticipantsRepository.getPlayerTransferDate(pageName, teamAliases, status) - playerDates[field] = result[field] + local function tryBatchQuery(playerSubset, status, field) + local needsQuery = Array.filter(playerSubset, function(player) + return Logic.isEmpty(datesByPlayer[player.pageName][field]) + end) + if #needsQuery == 0 then + return + end + local pageNames = Array.map(needsQuery, function(player) return player.pageName end) + local fetched = TeamParticipantsRepository.getPlayerTransferDates(pageNames, teamAliases, status) + Array.forEach(needsQuery, function(player) + if fetched[player.pageName] then + datesByPlayer[player.pageName][field] = fetched[player.pageName] + end + end) end - tryQuery('active', 'joinDate') - tryQuery('activeAlt', 'joinDate') - if extradata.status == 'former' then - tryQuery('former', 'leaveDate') - tryQuery('inactive', 'leaveDate') - end + tryBatchQuery(validPlayers, 'active', 'joinDate') + tryBatchQuery(validPlayers, 'activeAlt', 'joinDate') + + local formerPlayers = Array.filter(validPlayers, function(player) + return (player.extradata or {}).status == 'former' + end) + tryBatchQuery(formerPlayers, 'former', 'leaveDate') + tryBatchQuery(formerPlayers, 'inactive', 'leaveDate') - return playerDates + return datesByPlayer end ---@param opponent standardOpponent From d560c353e01b49da8b112f4aabcdcea39330c5f5 Mon Sep 17 00:00:00 2001 From: Eetu Rantanen Date: Wed, 6 May 2026 14:43:07 +0300 Subject: [PATCH 9/9] sure --- lua/definitions/mw.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/definitions/mw.lua b/lua/definitions/mw.lua index d6604cd2a32..9acbdf610f6 100644 --- a/lua/definitions/mw.lua +++ b/lua/definitions/mw.lua @@ -451,7 +451,9 @@ function mw.language:formatDate(format, timestamp, localTime) return os.date('!%Y-%m-%d') --[[@as string]] end if type(timestamp) == 'string' and string.sub(timestamp, 1, 1) == '@' then - return os.date('!%Y-%m-%d', tonumber(string.sub(timestamp, 2))) --[[@as string]] + local seconds = tonumber(string.sub(timestamp, 2)) + if not seconds then return '' end + return os.date('!%Y-%m-%d', seconds) --[[@as string]] end if type(timestamp) == 'string' then local year, month, day = parseDateString(timestamp)