| Author |
Topic |
|
Errko
Starting Member
4 Posts |
Posted - 2012-06-28 : 02:40:45
|
| Hi,I´m really struggling with a basic SELECT DISTINCT "column" FROM "table" ORDER BY "column"The problem is that I can´t figure out in which table and column I can find the list of four digit ID´s that I need.Also, I don´t have direct access to the database, which makes it impossible for me to list all columns in different tables. I use an interface where I write the query in a .ini file (with notepad) and it then outputs a logfile when i run the program.The ID´s I need is in a Cisco table. I have read all the related Cisco documentation, but there is no mentioning of the AgentTeamSkillID as a column in the schema. I think that the only way for you guys to have a chance of helping me, is for me to post the entire SQL from a standard report that contains information regarding the ID that I need. I have marked it with red text below.If someone can read out the correct table and column to find the list of all ID´s, I would be extremely grateful! Maybe I need to change my SQL query in order for it to work? I´m unfortunately a novice on SQL.-------SELECT AgentTeamName= AgentSkillGroup.AgentTeamName ,Supervisor= AgentSkillGroup.Supervisor,Media = AgentSkillGroup.Media, Interval = AgentSkillGroup.Interval, Year= AgentSkillGroup.Year, Month = AgentSkillGroup.Month, Week= AgentSkillGroup.Week, DOY= AgentSkillGroup.DOY, DOW= AgentSkillGroup.DOW, Date= AgentSkillGroup.Date, FullName = AgentSkillGroup.FullName, AgentSkillID= AgentSkillGroup.AgentSkillID, AgentTeamSkillID= AgentSkillGroup.AgentTeamSkillID, PriSupervisorSkillTargetID= AgentSkillGroup.PriSupervisorSkillTargetID, CallsAnswered= AgentSkillGroup.CallsAnswered, CallsHandled = AgentSkillGroup.CallsHandled, AbandRingCalls = AgentSkillGroup.AbandRingCalls, AbandRingCallsTime = AgentSkillGroup.AbandRingCallsTime, RedirectCalls = AgentSkillGroup.RedirectCalls, RedirectCallsTime= AgentSkillGroup.RedirectCallsTime, AbandonHoldCalls= AgentSkillGroup.AbandonHoldCalls, TransferInCalls = AgentSkillGroup.TransferInCalls, TransferOutCalls= AgentSkillGroup.TransferOutCalls, ConsultativeCalls= AgentSkillGroup.ConsultativeCalls, ConferenceInCalls= AgentSkillGroup.ConferenceInCalls,ConferenceOutCalls= AgentSkillGroup.ConferenceOutCalls, OutExtnCalls= AgentSkillGroup.OutExtnCalls, ShortCalls= AgentSkillGroup.ShortCalls, SupAssistCalls= AgentSkillGroup.SupAssistCalls, BargeInCalls= AgentSkillGroup.BargeInCalls, InterceptCalls= AgentSkillGroup.InterceptCalls, MonitorCalls= AgentSkillGroup.MonitorCalls, WhisperCalls= AgentSkillGroup.WhisperCalls, EmergencyAssistCalls= AgentSkillGroup.EmergencyAssistCalls, SupAssistCallsTime= AgentSkillGroup.SupAssistCallsTime, AgentOutCallsOnHold= AgentSkillGroup.AgentOutCallsOnHold, AgentOutCallsOnHoldTime= AgentSkillGroup.AgentOutCallsOnHoldTime, InCallsOnHold= AgentSkillGroup.InCallsOnHold, InCallsOnHoldTime= AgentSkillGroup.InCallsOnHoldTime, IntCallsOnHold= AgentSkillGroup.IntCallsOnHold, IntCallsOnHoldTime= AgentSkillGroup.IntCallsOnHoldTime, TalkTime= AgentSkillGroup.TalkTime, HandledCallsTime= AgentSkillGroup.HandledCallsTime, LoggedOnTime= AgentSkillGroup.LoggedOnTime, HoldTime= AgentSkillGroup.HoldTime, AvailTime= AgentHalfHour.AvailTime, NotReadyTime= AgentHalfHour.NotReadyTime, ReservedTime= AgentSkillGroup.ReservedTime, WrapTime= AgentSkillGroup.WrapTime, BusyOtherTime= AgentSkillGroup.BusyOtherTime, AnswerWaitTime= AgentSkillGroup.AnswerWaitTime, AutoOutCalls= AgentSkillGroup.AutoOutCalls, AutoOutCallsTime= AgentSkillGroup.AutoOutCallsTime, AutoOutCallsTalkTime= AgentSkillGroup.AutoOutCallsTalkTime, AutoOutCallsOnHold= AgentSkillGroup.AutoOutCallsOnHold, AutoOutCallsOnHoldTime= AgentSkillGroup.AutoOutCallsOnHoldTime, PreviewCalls= AgentSkillGroup.PreviewCalls, PreviewCallsTime= AgentSkillGroup.PreviewCallsTime, PreviewCallsTalkTime= AgentSkillGroup.PreviewCallsTalkTime , PreviewCallsOnHold= AgentSkillGroup.PreviewCallsOnHold, PreviewCallsOnHoldTime= AgentSkillGroup.PreviewCallsOnHoldTime, ReserveCalls= AgentSkillGroup.ReserveCalls, ReserveCallsTime= AgentSkillGroup.ReserveCallsTime, ReserveCallsTalkTime= AgentSkillGroup.ReserveCallsTalkTime, ReserveCallsOnHold= AgentSkillGroup.ReserveCallsOnHold, ReserveCallsOnHoldTime= AgentSkillGroup.ReserveCallsOnHoldTime, TalkAutoOutTime= AgentSkillGroup.TalkAutoOutTime, TalkPreviewTime= AgentSkillGroup.TalkAutoOutTime, TalkReserveTime= AgentSkillGroup.TalkReserveTime, AgentOutCallsTalkTime= AgentSkillGroup.AgentOutCallsTalkTime, AgentTerminatedCalls= AgentSkillGroup.AgentTerminatedCalls, CallbackMessages= AgentSkillGroup.CallbackMessages, CallbackMessagesTime= AgentSkillGroup.CallbackMessagesTime, ConsultativeCallsTime= AgentSkillGroup.ConsultativeCallsTime, ConferencedInCallsTime= AgentSkillGroup.ConferencedInCallsTime, ConferencedOutCallsTime= AgentSkillGroup.ConferencedOutCallsTime, HandledCallsTalkTime= AgentSkillGroup.HandledCallsTalkTime, InternalCallsRcvd= AgentSkillGroup.InternalCallsRcvd, InternalCallsRcvdTime= AgentSkillGroup.InternalCallsRcvdTime, InternalCalls= AgentSkillGroup.InternalCalls, InternalCallsTime= AgentSkillGroup.InternalCallsTime, TransferredInCallsTime= AgentSkillGroup.TransferredInCallsTime, TalkOtherTime= AgentSkillGroup.TalkOtherTime,TalkOutTime= AgentSkillGroup.TalkOutTime, TimeZone= AgentSkillGroup.TimeZone, RecoveryKey= AgentSkillGroup.RecoveryKey, InterruptedTime= AgentSkillGroup.InterruptedTime, WorkNotReadyTime= AgentSkillGroup.WorkNotReadyTime, WorkReadyTime= AgentSkillGroup.WorkReadyTime, NetConsultativeCalls= AgentSkillGroup.NetConsultativeCalls, NetConsultativeCallsTime= AgentSkillGroup.NetConsultativeCallsTime, NetConferencedOutCalls= AgentSkillGroup.NetConferencedOutCalls, NetConfOutCallsTime= AgentSkillGroup.NetConfOutCallsTime, NetTransferredOutCalls= AgentSkillGroup.NetTransferredOutCalls, DbDateTime= AgentSkillGroup. DbDateTime,AgentLoggedOnTime= AgentHalfHour.LoggedOnTime,AHT = ISNULL(AgentSkillGroup.HandledCallsTime / AgentSkillGroup.CallsHandled, 0),AHoldT = ISNULL(AgentSkillGroup.InCallsOnHoldTime / AgentSkillGroup.InCallsOnHold, 0),perActiveTime = ISNULL(AgentSkillGroup.TalkTime * 1.0 / AgentHalfHour.LoggedOnTime, 0),perHoldTime = ISNULL(AgentSkillGroup.HoldTime * 1.0 / AgentHalfHour.LoggedOnTime, 0),perNotActive = ISNULL(AgentHalfHour.AvailTime * 1.0 / AgentHalfHour.LoggedOnTime, 0),perNotReady = ISNULL(AgentHalfHour.NotReadyTime * 1.0 / AgentHalfHour.LoggedOnTime, 0),perReserved = ISNULL(AgentSkillGroup.ReservedTime * 1.0 / AgentHalfHour.LoggedOnTime, 0),perWrapup = ISNULL(AgentSkillGroup.WrapTime * 1.0 / AgentHalfHour.LoggedOnTime, 0),perBusyOther = ISNULL(AgentSkillGroup.BusyOtherTime * 1.0 / AgentHalfHour.LoggedOnTime, 0) FROM (SELECT Agent_Team.EnterpriseName AS AgentTeamName, Supervisor=(SELECT Person.LastName + ', ' + Person.FirstName FROM Agent (nolock), Person (nolock) WHERE Agent.SkillTargetID = Agent_Team.PriSupervisorSkillTargetID AND Agent.PersonID = Person.PersonID), Media_Routing_Domain.EnterpriseName AS Media, ASGHH.DateTime AS Interval, DATEPART(yy, ASGHH.DateTime) AS Year, DATEPART(mm, ASGHH.DateTime) AS Month, DATEPART(ww, ASGHH.DateTime) AS Week, DATEPART(dy, ASGHH.DateTime) AS DOY, DATEPART(dw, ASGHH.DateTime) AS DOW, CONVERT(char(10), ASGHH.DateTime, 101) AS Date, Person.LastName + ', ' + Person.FirstName AS FullName, Agent.SkillTargetID AS AgentSkillID, Agent_Team.AgentTeamID AS AgentTeamSkillID, Agent_Team.PriSupervisorSkillTargetID, SUM(ISNULL(ASGHH.CallsAnswered, 0)) AS CallsAnswered, SUM(ISNULL(ASGHH.CallsHandled, 0)) AS CallsHandled, SUM(ISNULL(ASGHH.AbandonRingCalls, 0)) AS AbandRingCalls, SUM(ISNULL(ASGHH.AbandonRingTime, 0)) AS AbandRingCallsTime, SUM(ISNULL(ASGHH.RedirectNoAnsCalls, 0)) AS RedirectCalls, SUM(ISNULL(ASGHH.RedirectNoAnsCallsTime, 0)) AS RedirectCallsTime, SUM(ISNULL(ASGHH.AbandonHoldCalls, 0)) AS AbandonHoldCalls, SUM(ISNULL(ASGHH.TransferredInCalls, 0)) AS TransferInCalls, SUM(ISNULL(ASGHH.TransferredOutCalls, 0)) AS TransferOutCalls, SUM(ISNULL(ASGHH.ConsultativeCalls, 0)) AS ConsultativeCalls, SUM(ISNULL(ASGHH.ConferencedInCalls, 0)) AS ConferenceInCalls, SUM(ISNULL(ASGHH.ConferencedOutCalls, 0)) AS ConferenceOutCalls, SUM(ISNULL(ASGHH.AgentOutCalls, 0)) AS OutExtnCalls, SUM(ISNULL(ASGHH.AgentOutCalls, 0)) AS AgentOutCalls, SUM(ISNULL(ASGHH.ShortCalls, 0)) AS ShortCalls, SUM(ISNULL(ASGHH.SupervAssistCalls, 0)) AS SupAssistCalls, SUM(ISNULL(ASGHH.BargeInCalls, 0)) AS BargeInCalls, SUM(ISNULL(ASGHH.InterceptCalls, 0)) AS InterceptCalls, SUM(ISNULL(ASGHH.MonitorCalls, 0)) AS MonitorCalls, SUM(ISNULL(ASGHH.WhisperCalls, 0)) AS WhisperCalls, SUM(ISNULL(ASGHH.EmergencyAssists, 0)) AS EmergencyAssistCalls, SUM(ISNULL(ASGHH.SupervAssistCallsTime, 0)) AS SupAssistCallsTime, SUM(ISNULL(ASGHH.AgentOutCallsOnHold, 0)) AS AgentOutCallsOnHold, SUM(ISNULL(ASGHH.AgentOutCallsOnHoldTime, 0)) AS AgentOutCallsOnHoldTime, SUM(ISNULL(ASGHH.IncomingCallsOnHold, 0)) AS InCallsOnHold, SUM(ISNULL(ASGHH.IncomingCallsOnHoldTime, 0)) AS InCallsOnHoldTime, SUM(ISNULL(ASGHH.InternalCallsOnHold, 0)) AS IntCallsOnHold, SUM(ISNULL(ASGHH.InternalCallsOnHoldTime, 0)) AS IntCallsOnHoldTime, sum(isnull(ASGHH.TalkInTime,0)) + sum(isnull(ASGHH.TalkOutTime,0)) +sum(isnull(ASGHH.TalkOtherTime,0)) + sum(isnull(ASGHH.TalkAutoOutTime,0)) +sum(isnull(ASGHH.TalkPreviewTime,0)) + sum(isnull(ASGHH.TalkReserveTime,0))AS TalkTime, SUM(ISNULL(ASGHH.HandledCallsTime, 0)) AS HandledCallsTime, SUM(ISNULL(ASGHH.LoggedOnTime, 0)) AS LoggedOnTime, SUM(ISNULL(ASGHH.HoldTime, 0)) AS HoldTime, SUM(ISNULL(ASGHH.AvailTime, 0)) AS AvailTime, SUM(ISNULL(ASGHH.NotReadyTime, 0)) AS NotReadyTime, SUM(ISNULL(ASGHH.ReservedStateTime, 0)) AS ReservedTime, SUM(ISNULL(ASGHH.WorkNotReadyTime + ASGHH.WorkReadyTime, 0)) AS WrapTime, SUM(ISNULL(ASGHH.BusyOtherTime, 0)) AS BusyOtherTime, SUM(ISNULL(ASGHH.AnswerWaitTime, 0)) AS AnswerWaitTime, SUM(ISNULL(ASGHH.AutoOutCalls, 0)) AS AutoOutCalls, SUM(ISNULL(ASGHH.AutoOutCallsTime, 0)) AS AutoOutCallsTime, SUM(ISNULL(ASGHH.AutoOutCallsTalkTime, 0)) AS AutoOutCallsTalkTime, SUM(ISNULL(ASGHH.AutoOutCallsOnHold, 0)) AS AutoOutCallsOnHold, SUM(ISNULL(ASGHH.AutoOutCallsOnHoldTime, 0)) AS AutoOutCallsOnHoldTime, SUM(ISNULL(ASGHH.PreviewCalls, 0)) AS PreviewCalls, SUM(ISNULL(ASGHH.PreviewCallsTime, 0)) AS PreviewCallsTime, SUM(ISNULL(ASGHH.PreviewCallsTalkTime, 0)) AS PreviewCallsTalkTime, SUM(ISNULL(ASGHH.PreviewCallsOnHold, 0)) AS PreviewCallsOnHold, SUM(ISNULL(ASGHH.PreviewCallsOnHoldTime, 0)) AS PreviewCallsOnHoldTime, SUM(ISNULL(ASGHH.ReserveCalls, 0)) AS ReserveCalls, SUM(ISNULL(ASGHH.ReserveCallsTime, 0)) AS ReserveCallsTime, SUM(ISNULL(ASGHH.ReserveCallsTalkTime, 0)) AS ReserveCallsTalkTime, SUM(ISNULL(ASGHH.ReserveCallsOnHold, 0)) AS ReserveCallsOnHold, SUM(ISNULL(ASGHH.ReserveCallsOnHoldTime, 0)) AS ReserveCallsOnHoldTime, SUM(ISNULL(ASGHH.TalkAutoOutTime, 0)) AS TalkAutoOutTime, SUM(ISNULL(ASGHH.TalkPreviewTime, 0)) AS TalkPreviewTime, SUM(ISNULL(ASGHH.TalkReserveTime, 0)) AS TalkReserveTime, SUM(ISNULL(ASGHH.AgentOutCallsTalkTime, 0)) AS AgentOutCallsTalkTime, SUM(ISNULL(ASGHH.AgentTerminatedCalls, 0)) AS AgentTerminatedCalls, SUM(ISNULL(ASGHH.CallbackMessages, 0)) AS CallbackMessages, SUM(ISNULL(ASGHH.CallbackMessagesTime, 0)) AS CallbackMessagesTime, SUM(ISNULL(ASGHH.ConsultativeCallsTime, 0)) AS ConsultativeCallsTime, SUM(ISNULL(ASGHH.ConferencedInCallsTime, 0)) AS ConferencedInCallsTime, SUM(ISNULL(ASGHH.ConferencedOutCallsTime, 0)) AS ConferencedOutCallsTime, SUM(ISNULL(ASGHH.HandledCallsTalkTime, 0)) AS HandledCallsTalkTime, SUM(ISNULL(ASGHH.InternalCallsRcvd, 0)) AS InternalCallsRcvd, SUM(ISNULL(ASGHH.InternalCallsRcvdTime, 0)) AS InternalCallsRcvdTime, SUM(ISNULL(ASGHH.InternalCalls, 0)) AS InternalCalls, SUM(ISNULL(ASGHH.InternalCallsTime, 0)) AS InternalCallsTime, SUM(ISNULL(ASGHH.TransferredInCallsTime, 0)) AS TransferredInCallsTime, SUM(ISNULL(ASGHH.TalkOtherTime, 0)) AS TalkOtherTime, SUM(ISNULL(ASGHH.TalkOutTime, 0)) AS TalkOutTime, MAX(ASGHH.TimeZone) AS TimeZone, MAX(ASGHH.RecoveryKey) AS RecoveryKey, SUM(ISNULL(ASGHH.InterruptedTime, 0)) AS InterruptedTime, SUM(ISNULL(ASGHH.WorkNotReadyTime, 0)) AS WorkNotReadyTime, SUM(ISNULL(ASGHH.WorkReadyTime, 0)) AS WorkReadyTime, SUM(ISNULL(ASGHH.NetConsultativeCalls, 0)) AS NetConsultativeCalls, SUM(ISNULL(ASGHH.NetConsultativeCallsTime, 0)) AS NetConsultativeCallsTime, SUM(ISNULL(ASGHH.NetConferencedOutCalls, 0)) AS NetConferencedOutCalls, SUM(ISNULL(ASGHH.NetConfOutCallsTime, 0)) AS NetConfOutCallsTime, SUM(ISNULL(ASGHH.NetTransferredOutCalls, 0)) AS NetTransferredOutCalls, MAX(ASGHH.DbDateTime) AS DbDateTime FROM Agent (nolock), --Agent_Skill_Group_Half_Hour ASGHH (nolock), Agent_Skill_Group_Interval ASGHH (nolock), Agent_Team_Member (nolock), Agent_Team (nolock), Skill_Group (nolock), Person (nolock), Media_Routing_Domain (nolock) WHERE ( ASGHH.SkillGroupSkillTargetID = Skill_Group.SkillTargetID) and ( Media_Routing_Domain.MRDomainID = Skill_Group.MRDomainID) and ( Skill_Group.SkillTargetID NOT IN (SELECT BaseSkillTargetID FROM Skill_Group (nolock) WHERE (Priority > 0) AND (Deleted <> 'Y')))and( Agent.SkillTargetID = ASGHH.SkillTargetID ) and ( Agent.SkillTargetID = Agent_Team_Member.SkillTargetID ) and ( Agent_Team_Member.AgentTeamID = Agent_Team.AgentTeamID ) and ( Agent.PersonID = Person.PersonID ) GROUP BY Agent_Team.AgentTeamID,Agent_Team.EnterpriseName,Agent_Team.PriSupervisorSkillTargetID,Agent.SkillTargetID,Person.LastName,Person.FirstName,Media_Routing_Domain.EnterpriseName, ASGHH.DateTime) AgentSkillGroup, (SELECT Media = Media_Routing_Domain.EnterpriseName,LoggedOnTime =sum( AHH.LoggedOnTime), AvailTime = SUM(ISNULL(AHH.AvailTime, 0)),NotReadyTime = SUM(ISNULL(AHH.NotReadyTime, 0)),AgentSkillID = AHH.SkillTargetID, Interval=AHH.DateTime FROM Agent (nolock), Agent_Interval AHH (nolock), Media_Routing_Domain (nolock) WHERE Agent.SkillTargetID= AHH.SkillTargetID and AHH.MRDomainID = Media_Routing_Domain.MRDomainID GROUP BY AHH.SkillTargetID,Media_Routing_Domain.EnterpriseName,AHH.DateTime) AgentHalfHour Where AgentSkillGroup.AgentTeamSkillID IN (5031) and (DATEPART(dw, AgentSkillGroup.Interval) in(2,3,4,5,6,7,1) and AgentSkillGroup.Interval between convert(DATETIME,'2012-06-28 00:00:00',21) and convert(DATETIME,'2012-06-28 23:59:59',21) and convert([char], AgentSkillGroup.Interval, 108) between '00:00:00' and '23:59:59') and AgentSkillGroup.AgentSkillID = AgentHalfHour.AgentSkillID and AgentSkillGroup.Interval = AgentHalfHour.Interval and AgentSkillGroup.Media = AgentHalfHour.Media ORDER BY AgentSkillGroup.AgentTeamName,AgentSkillGroup.FullName,AgentSkillGroup.Media,AgentSkillGroup.AgentSkillID,AgentSkillGroup.Interval |
|
|
sunitabeck
Master Smack Fu Yak Hacker
5155 Posts |
Posted - 2012-06-28 : 07:31:47
|
I didn't quite follow what you are trying to find. Assuming you are trying to find the base table that lists all the AgentTeamSkillID values, look in table Agent_Team for column AgentTeamID. The reason I say this is shown in red below, which is part of the query you posted..... Agent.SkillTargetID AS AgentSkillID, Agent_Team.AgentTeamID AS AgentTeamSkillID, Agent_Team.PriSupervisorSkillTargetID,.... |
 |
|
|
xhostx
Constraint Violating Yak Guru
277 Posts |
Posted - 2012-06-28 : 07:44:01
|
| I have notice that AgentTeamSkillID showing in few lines:=>AgentTeamSkillID= AgentSkillGroup.AgentTeamSkillID, =>Agent_Team.AgentTeamID AS AgentTeamSkillID,be carefull AgentSkillGroup is an alia not a table.Use command desc tables_name to look at the colums that compose the table.--------------------------Get rich or die trying-------------------------- |
 |
|
|
Errko
Starting Member
4 Posts |
Posted - 2012-06-28 : 07:44:17
|
| Thanks for your reply.I know, it seemed quite obvious to me aswell. But...SELECT DISTINCT AgentTeamID FROM Agent_Team ORDER BY AgentTeamID renders the following log ouput:Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'AgentTeamID'.According to the Cisco Database Schema, there should be a column in Agent_Team table with the name AgentTeamID. There are however no indication that there is any column named AgentTeamSkillID in any table.But obviously the ID exists somewhere. |
 |
|
|
Errko
Starting Member
4 Posts |
Posted - 2012-06-28 : 07:51:38
|
| xhostx: Thank you, unfortunately I can´t issue that command since the only query I can run towards the database is SELECT querys. My only way in is via the interface that I´m using. |
 |
|
|
sunitabeck
Master Smack Fu Yak Hacker
5155 Posts |
Posted - 2012-06-28 : 07:56:53
|
quote: Originally posted by Errko Thanks for your reply.I know, it seemed quite obvious to me aswell. But...SELECT DISTINCT AgentTeamID FROM Agent_Team ORDER BY AgentTeamID renders the following log ouput:Error = [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'AgentTeamID'.According to the Cisco Database Schema, there should be a column in Agent_Team table with the name AgentTeamID. There are however no indication that there is any column named AgentTeamSkillID in any table.But obviously the ID exists somewhere.
Probably the most efficient approach is to request and get access the database, even if only temporarily, and even if only a copy of the database.It may be that the you don't have permissions on that table and/or column.You can try the following to see what columns the table has:SELECT TOP 10 * FROM Agent_Team |
 |
|
|
Errko
Starting Member
4 Posts |
Posted - 2012-06-28 : 08:51:15
|
| I´m trying to gain access to the database and run that query, that would be the easiest way to sort this out.In the interface I´m using, I have specified the following (in a .ini file):CallDataTable=Agent_Skill_Group_Half_HourQueueSQL=SELECT DISTINCT AgentTeamID FROM Agent_Team_Member ORDER BY AgentTeamIDQueueNameColumn=AgentTeamIDMaybe the QueueNameColumn tries to read from the CallDataTable instead of the Agent_Team_Member table? |
 |
|
|
|
|
|