Open Side Menu Go to the Top
Register
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars

07-20-2012 , 02:46 PM
Quote:
Originally Posted by _dave_
but it will be in program files\pokerstars.eu\ or something new now, no?
C:\Programme\PokerStars



... just as before

Also fwiw, my main lobby stays on top for a minute or 2 after each activation (like hitting the register button etc) ... wtf is this ****

Am I the only one with those issues?
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-20-2012 , 03:07 PM
I'm just guessing somewhat here since I don't have a PokerStars.EU, but surely it doesn't overwrite the old Pokerstars installation? isn't there any new PokerStars folders in Programme?

Last edited by _dave_; 07-20-2012 at 03:09 PM. Reason: view -> details is the optimal explorer setting :p in this case date modified for pokerstars.log.0 would be interesting
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-20-2012 , 03:18 PM
Nope, in fact it did overwrite the old Pokerstars installation; I was forced to update my .com client, pnly had to restore some graphic mods and gx.ini settings, everything else seems just like (and where) it was before.

I'd be happy to send you whatever files you need, could even zip the whole folder, just lmk->PM.

I quit my session now, so no more immediate urge for today.
Spoiler:
I need the script tomorrow tho


edit: wow that's interesting, last date of change was like 4h ago so it clearly doesn't use this file any more, amirite?

edit: now that I closed the client it seems it's still using it; last date of change now shows the actual time. I'll PM you the file.

Last edited by Baobhan-Sith; 07-20-2012 at 03:33 PM.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-23-2012 , 07:04 PM
Anyone else having problems after updating Stars? Timebank AHK does not seem to work for me with newest update . After I roll back to the previous stars version it works fine again.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-23-2012 , 07:49 PM
Try to replace this part...
Code:
FILE_CHECK:
If (_NEWLINES := CheckFile(_FILE))
{
  ;msgbox, %_NEWLINES%
  Loop, Parse, _NEWLINES, `n
  {
    if(regExMatch(a_loopfield, "MSG_TABLE_SITTING_STATUS\s(\w{8})\s1", m))
    {
      ;msgbox, %m1%
      PostStarsClick(sitin_x, sitin_y, ("0x" . m1))
      
    }
    else if (regExMatch(a_loopfield, "MSG_TABLE_TIMEBANK\s(\w{8})\stime=", m))
    {
      ;msgbox, %m1%
      PostStarsClick(timebank_x, timebank_y, ("0x" . m1))
    }
  }
;msgbox, %m1%
   
}
Return

... with this:
Code:
FILE_CHECK:
If (_NEWLINES := CheckFile(_FILE))
{
  ;msgbox, %_NEWLINES%
  Loop, Parse, _NEWLINES, `n
  {
     if(regExMatch(a_loopfield, "MSG_0x000A-T\s\w{8}\s(\w{8})\s", m))
    {
      ;msgbox, %m1%
      PostStarsClick(sitin_x, sitin_y, ("0x" . m1))
      
    }
    else if (regExMatch(a_loopfield, "MSG_0x0023-T\s\w{8}\s(\w{8})", m))
    {
      ;msgbox, %m1%
      PostStarsClick(timebank_x, timebank_y, ("0x" . m1))
    }
  }
;msgbox, %m1%
   
}
Return
That's what _dave_ came up with as a fix for the .eu client. Note that it doesn't sit you in if you intentionally sit out, i.e. it only works for 'forced sit outs' (aka timeouts).

HTH
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-23-2012 , 07:57 PM
Chances are the .eu update troubles Baobhan-Sith had above have crossed over to the main client I guess.

What happen is the log file is all messed up, there are no longer nice human readable messages like MSG_TABLE_SITTING_STATUS or whatever is is normally, it's more like MSG 0x-A00075-T and the like.

We got his working again after much experimentation trying to find these messages, but I don't remember the exact code needed. hopefully he can post the edits we made, and hopefully they work for you. Either that or I'll update my own Stars and see what's up when I get a chance

Last edited by _dave_; 07-23-2012 at 07:58 PM. Reason: ^^^ AHA Excellent :)
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-23-2012 , 08:32 PM
awesome, that worked! Thanks a lot
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-24-2012 , 01:44 AM
boo unreadable names

reverse engineering sucks

looking through my code, its so unreadable, but also so time consuming to make it look nice
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
07-31-2012 , 06:57 PM
any1 got coordinates for nova theme ?
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
08-01-2012 , 03:20 AM
You can easily grab them yourself, just use WindowSpy and make sure table to grab coords from has default size.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
08-21-2012 , 12:26 PM
Thanks guys that fixed it
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
08-31-2012 , 08:43 PM
hi guys... i am really looking for such a program like this.

i downloaded AHK for this, copy&paste the code from the 1st post and edited the paths...
but it doesnt work (nothing... no sit back in, no timebank clicker) i tried it with my standard tablepositioning and with default table size.

my setup: i use win7 and i play on pokerstars.FR !!! (not .com)
on pokerstars.FR i use the classic table theme and i have default cards

in my windwosfolder (C:\Users\pc\AppData\Local\PokerStars.FR) i have the following 4 logfiles:

PokerStarsUpdate.log.0
PokerStarsUpdate.log.1
PokerStarsUpdateE.log.0
PokerStarsUpdateE.log.1

this is my code:
Code:
#NoEnv
#Persistent
SetBatchLines -1


CheckTime := 500   ; Check every n MilliSeconds
sitin_x := 532
sitin_y := 468

timebank_x := 520
timebank_y := 460

_FILE := "C:\Users\pc\AppData\Local\PokerStars.FR\PokerStars.log.0"
;_FILE := "E:\sitout.txt"
SysGet, border, 32
SysGet, caption, 4
SetTimer, FILE_CHECK, %CheckTime%
return


FILE_CHECK:
If (_NEWLINES := CheckFile(_FILE))
{
  ;msgbox, %_NEWLINES%
  Loop, Parse, _NEWLINES, `n
  {
    if(regExMatch(a_loopfield, "MSG_TABLE_SITTING_STATUS\s(\w{8})\s1", m))
    {
      ;msgbox, %m1%
      PostStarsClick(sitin_x, sitin_y, ("0x" . m1))
      
    }
    else if (regExMatch(a_loopfield, "MSG_TABLE_TIMEBANK\s(\w{8})\stime=", m))
    {
      ;msgbox, %m1%
      PostStarsClick(timebank_x, timebank_y, ("0x" . m1))
    }
  }
;msgbox, %m1%
   
}
Return


CheckFile(File) {
   ; THX Sean for File.ahk : http://www.autohotkey.com/forum/post-124759.html
   Static CF := ""   ; Current File
   Static FP := 0    ; File Pointer
   Static OPEN_EXISTING := 3
   Static GENERIC_READ := 0x80000000
   Static FILE_SHARE_READ := 1
   Static FILE_SHARE_WRITE := 2
   Static FILE_SHARE_DELETE := 4
   Static FILE_BEGIN := 0
   BatchLines := A_BatchLines
   SetBatchLines, -1
   If (File != CF) {
      CF := File
      FP := 0
   }
   hFile := DllCall("CreateFile"
                  , "Str",  File
                  , "Uint", GENERIC_READ
                  , "Uint", FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE
                  , "Uint", 0
                  , "Uint", OPEN_EXISTING
                  , "Uint", 0
                  , "Uint", 0)
   If (!hFile) {
      CF := ""
      FP := 0
      SetBatchLines, %BatchLines%
      Return False
   }
   DllCall("GetFileSizeEx"
         , "Uint",   hFile
         , "Int64P", nSize)
   If (FP = 0 Or nSize <= FP) {
      FP := nSize
      SetBatchLines, %BatchLines%
      DllCall("CloseHandle", "Uint", hFile) ; close file
     Return False
   }
   DllCall("SetFilePointerEx"
         , "Uint",  hFile
         , "Int64", FP
         , "Uint",  0
         , "Uint",  FILE_BEGIN)
   VarSetCapacity(Tail, Length := nSize - FP, 0)
   DllCall("ReadFile"
         , "Uint",  hFile
         , "Str",   Tail
         , "Uint",  Length
         , "UintP", Length
         , "Uint",  0)
   DllCall("CloseHandle", "Uint", hFile)
   VarSetCapacity(Tail, -1)
   FP := nSize
   SetBatchLines, %BatchLines%
   Return Tail
}

relStarsClientPoint(id, ByRef x, ByRef y)
{
  global border
  global caption
  rw := 792
  rh := 546
  WinGetPos, , , w, h, ahk_id%id%
  w := w - (2*border)
  h := h - (2*border) - caption
  
  x := Floor( (x / rw ) * w )
  y := Floor( (y / rh) * h  )
  
}

;Juks rocks
PostLeftClick(x, y, table_id, activate=0) {
; ### JUK: Send the down left click, then the mouse-up messages.
; NOTE: This is relative to the top left of the client area and NOT the top left of the
;       window (ie: It *doesn't* include the title-bar like AHK's MouseClick does!!!).
If activate
 WinActivate, ahk_id%table_id%
PostMessage, 0x201, 0x0001, ((y<<16)^x), , ahk_id%table_id%
PostMessage, 0x202 , 0, ((y<<16)^x), , ahk_id%table_id%
}

PostStarsClick(x, y, id)
{
  relStarsClientPoint(id, x, y)
  PostLeftClick(x, y, id)
}
can you please help me
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-03-2012 , 02:29 PM
mukzr, see this post

also, note this:
Quote:
Originally Posted by Baobhan-Sith
You can easily grab them [button coords] yourself, just use WindowSpy and make sure table to grab coords from has default size.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-07-2012 , 12:27 AM
Does anyone have coordinates for slick theme? I ve got a slick-themed xtheme and the default coordinates don't seem to work.

I already have incorporated the changes Baobnan-Sith posted.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-07-2012 , 07:46 PM
Ok, I ended up using windows spy, I am fairly confident I got the right co-ordinates, it doesn't seem to work either for timeout or sitting back in.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-08-2012 , 07:46 PM
Quote:
Originally Posted by Baobhan-Sith
mukzr, see this post

also, note this:
thanks dude
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-09-2012 , 05:56 AM
yw

Leviathan, those work for me @ Slick:
Code:
sitin_x := 540
sitin_y := 480

timebank_x := 400
timebank_y := 480
Make sure your file location is correct:
Code:
_FILE := "C:\Users\x\AppData\Local\PokerStars.EU\PokerStars.log.0"
Hint: You can uncomment a MsgBox line (-> remove the semicolon) to check if it actually reads the .log.0 file:
Code:
;msgbox, %_NEWLINES%

Last edited by Baobhan-Sith; 09-09-2012 at 06:02 AM.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-13-2012 , 02:37 PM
Thank you man, thanks for your help.

I experimented it with it for a couple of days and it was bewildering. It worked on my laptop running windows xp 64, but it didn't work on desktop running either windows 7 or windows xp x64.

You won't believe what was the problem. On my laptop I had a autohotkey, version 1.0.48.05. In my desktop I had version 1.0.91.05. You would think the latter would be the latest and it be working right?

Nope. Their webpage says now 1.0.48.05 is their latest and most stable. And guess what? That's the difference between the program working and not working....

God damn you computers, god damn you!!
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-17-2012 , 12:58 PM
hi!
i use Hyper-Simple and since time ago it doesn´t work
what have i to change?
tks
regards

here is the code:

#NoEnv
#Persistent
SetBatchLines -1


CheckTime := 500 ; Check every n MilliSeconds
sitin_x := 532
sitin_y := 468

timebank_x := 520
timebank_y := 460

_FILE := A_ProgramFiles . "\PokerStars\PokerStars.log.0"
;_FILE := "E:\sitout.txt"
SysGet, border, 32
SysGet, caption, 4
SetTimer, FILE_CHECK, %CheckTime%
return


FILE_CHECK:
If (_NEWLINES := CheckFile(_FILE))
{
;msgbox, %_NEWLINES%
Loop, Parse, _NEWLINES, `n
{
if(regExMatch(a_loopfield, "MSG_TABLE_SITTING_STATUS\s(\w{8})\s1", m))
{
;msgbox, %m1%
PostStarsClick(sitin_x, sitin_y, ("0x" . m1))

}
else if (regExMatch(a_loopfield, "MSG_TABLE_TIMEBANK\s(\w{8})\stime=", m))
{
;msgbox, %m1%
PostStarsClick(timebank_x, timebank_y, ("0x" . m1))
}
}
;msgbox, %m1%

}
Return


CheckFile(File) {
; THX Sean for File.ahk : http://www.autohotkey.com/forum/post-124759.html
Static CF := "" ; Current File
Static FP := 0 ; File Pointer
Static OPEN_EXISTING := 3
Static GENERIC_READ := 0x80000000
Static FILE_SHARE_READ := 1
Static FILE_SHARE_WRITE := 2
Static FILE_SHARE_DELETE := 4
Static FILE_BEGIN := 0
BatchLines := A_BatchLines
SetBatchLines, -1
If (File != CF) {
CF := File
FP := 0
}
hFile := DllCall("CreateFile"
, "Str", File
, "Uint", GENERIC_READ
, "Uint", FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE
, "Uint", 0
, "Uint", OPEN_EXISTING
, "Uint", 0
, "Uint", 0)
If (!hFile) {
CF := ""
FP := 0
SetBatchLines, %BatchLines%
Return False
}
DllCall("GetFileSizeEx"
, "Uint", hFile
, "Int64P", nSize)
If (FP = 0 Or nSize <= FP) {
FP := nSize
SetBatchLines, %BatchLines%
DllCall("CloseHandle", "Uint", hFile) ; close file
Return False
}
DllCall("SetFilePointerEx"
, "Uint", hFile
, "Int64", FP
, "Uint", 0
, "Uint", FILE_BEGIN)
VarSetCapacity(Tail, Length := nSize - FP, 0)
DllCall("ReadFile"
, "Uint", hFile
, "Str", Tail
, "Uint", Length
, "UintP", Length
, "Uint", 0)
DllCall("CloseHandle", "Uint", hFile)
VarSetCapacity(Tail, -1)
FP := nSize
SetBatchLines, %BatchLines%
Return Tail
}

relStarsClientPoint(id, ByRef x, ByRef y)
{
global border
global caption
rw := 792
rh := 546
WinGetPos, , , w, h, ahk_id%id%
w := w - (2*border)
h := h - (2*border) - caption

x := Floor( (x / rw ) * w )
y := Floor( (y / rh) * h )

}

;Juks rocks
PostLeftClick(x, y, table_id, activate=0) {
; ### JUK: Send the down left click, then the mouse-up messages.
; NOTE: This is relative to the top left of the client area and NOT the top left of the
; window (ie: It *doesn't* include the title-bar like AHK's MouseClick does!!!).
If activate
WinActivate, ahk_id%table_id%
PostMessage, 0x201, 0x0001, ((y<<16)^x), , ahk_id%table_id%
PostMessage, 0x202 , 0, ((y<<16)^x), , ahk_id%table_id%
}

PostStarsClick(x, y, id)
{
relStarsClientPoint(id, x, y)
PostLeftClick(x, y, id)
}
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-17-2012 , 06:41 PM
^ might want to read some of my posts itt
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-18-2012 , 10:13 AM
i have changed this line

_FILE := A_ProgramFiles . "\PokerStars\PokerStars.log.0"

for this one:

_FILE := "C:\Archivos de programas\PokerStars\PokerStars.log.0"


but i don´t sure if it´s ok what im doing, but it doesn´t work using the location
of the PokerStarts.log.0 file

what can i try? i have windows xp! and the autotimebank work ok until some month ago, maybe some updates in PS?

tks
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-18-2012 , 01:02 PM
http://forumserver.twoplustwo.com/sh...&postcount=105

Also, this:

Quote:
Originally Posted by Baobhan-Sith
Hint: You can uncomment a MsgBox line (-> remove the semicolon) to check if it actually reads the .log.0 file:
Code:
;msgbox, %_NEWLINES%
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-18-2012 , 07:41 PM
i have replaced the code mentioned in the link and it seems to work ok again!!!

i didn´t uncomment the "Msg line", it´s necesary to do it?

many many tks for your help!
it´s a very nice tool for multitable!
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-23-2012 , 10:49 AM
Hi, When this was working it was simple and awesome no need for me to buy/use Table Ninja.

But, upon looking in a freshly installed Pokerstars, There is no file called Pokerstars.log, there's pokerstars.ini and install.log but not Pokerstars.log.0 I'm using 64bit windows 7 ultimate

What's the next step to getting this awesome script to work for the newest client versions?

Edit: Found the Pokerstars.log.0 in a different location in Appdata instead.

I got the appropriate coordinates for my theme using a screen shot picture taking software so I just get the client window no bars etc and I loaded it onto paint

So I changed the coordinates and the file location... script still doesn't work what so ever.

Where am I going wrong? Any help at all would be appreciated, thanks.

Here's my code:
Code:
#NoEnv
#Persistent
SetBatchLines -1


CheckTime := 500   ; Check every n MilliSeconds
sitin_x := 532
sitin_y := 468

timebank_x := 382
timebank_y := 419

_FILE := "C:\Users\Harry\AppData\Local\PokerStars\PokerStars.log.0"
;_FILE := "E:\sitout.txt"
SysGet, border, 32
SysGet, caption, 4
SetTimer, FILE_CHECK, %CheckTime%
return


FILE_CHECK:
If (_NEWLINES := CheckFile(_FILE))
{
  ;msgbox, %_NEWLINES%
  Loop, Parse, _NEWLINES, `n
  {
    if(regExMatch(a_loopfield, "MSG_TABLE_SITTING_STATUS\s(\w{8})\s1", m))
    {
      ;msgbox, %m1%
      PostStarsClick(sitin_x, sitin_y, ("0x" . m1))
      
    }
    else if (regExMatch(a_loopfield, "MSG_TABLE_TIMEBANK\s(\w{8})\stime=", m))
    {
      ;msgbox, %m1%
      PostStarsClick(timebank_x, timebank_y, ("0x" . m1))
    }
  }
;msgbox, %m1%
   
}
Return


CheckFile(File) {
   ; THX Sean for File.ahk : http://www.autohotkey.com/forum/post-124759.html
   Static CF := ""   ; Current File
   Static FP := 0    ; File Pointer
   Static OPEN_EXISTING := 3
   Static GENERIC_READ := 0x80000000
   Static FILE_SHARE_READ := 1
   Static FILE_SHARE_WRITE := 2
   Static FILE_SHARE_DELETE := 4
   Static FILE_BEGIN := 0
   BatchLines := A_BatchLines
   SetBatchLines, -1
   If (File != CF) {
      CF := File
      FP := 0
   }
   hFile := DllCall("CreateFile"
                  , "Str",  File
                  , "Uint", GENERIC_READ
                  , "Uint", FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE
                  , "Uint", 0
                  , "Uint", OPEN_EXISTING
                  , "Uint", 0
                  , "Uint", 0)
   If (!hFile) {
      CF := ""
      FP := 0
      SetBatchLines, %BatchLines%
      Return False
   }
   DllCall("GetFileSizeEx"
         , "Uint",   hFile
         , "Int64P", nSize)
   If (FP = 0 Or nSize <= FP) {
      FP := nSize
      SetBatchLines, %BatchLines%
      DllCall("CloseHandle", "Uint", hFile) ; close file
     Return False
   }
   DllCall("SetFilePointerEx"
         , "Uint",  hFile
         , "Int64", FP
         , "Uint",  0
         , "Uint",  FILE_BEGIN)
   VarSetCapacity(Tail, Length := nSize - FP, 0)
   DllCall("ReadFile"
         , "Uint",  hFile
         , "Str",   Tail
         , "Uint",  Length
         , "UintP", Length
         , "Uint",  0)
   DllCall("CloseHandle", "Uint", hFile)
   VarSetCapacity(Tail, -1)
   FP := nSize
   SetBatchLines, %BatchLines%
   Return Tail
}

relStarsClientPoint(id, ByRef x, ByRef y)
{
  global border
  global caption
  rw := 792
  rh := 546
  WinGetPos, , , w, h, ahk_id%id%
  w := w - (2*border)
  h := h - (2*border) - caption
  
  x := Floor( (x / rw ) * w )
  y := Floor( (y / rh) * h  )
  
}

;Juks rocks
PostLeftClick(x, y, table_id, activate=0) {
; ### JUK: Send the down left click, then the mouse-up messages.
; NOTE: This is relative to the top left of the client area and NOT the top left of the
;       window (ie: It *doesn't* include the title-bar like AHK's MouseClick does!!!).
If activate
 WinActivate, ahk_id%table_id%
PostMessage, 0x201, 0x0001, ((y<<16)^x), , ahk_id%table_id%
PostMessage, 0x202 , 0, ((y<<16)^x), , ahk_id%table_id%
}

PostStarsClick(x, y, id)
{
  relStarsClientPoint(id, x, y)
  PostLeftClick(x, y, id)
}

Last edited by _dave_; 09-23-2012 at 11:20 AM.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote
09-23-2012 , 11:29 AM
Could be any of a few things

I think your coordinates are probably wrong. "default" table size that coordinates should be obtained at are a client area size of 792x546. A few pixels here and there won't make much difference, but yours are 736x507, probably enough to miss the button even if everything else is ok. An easy way to get a good table size is to open up a Window Spy so it shows you the size of the window, and resize it to 800 wide. This is also how big it should make a table with all layouts / remember table positioning off iirc.

maybe you have the new "L" version of AHK? for some reason this script won't work in it. Needs 1.0.48.05. http://www.autohotkey.com/download/

maybe you are on pokerstars.eu, or .be etc. if so, maybe it needs these edits: http://forumserver.twoplustwo.com/sh...&postcount=105

In Line 24 of the code in your post, it looks like this:
Code:
;msgbox, %_NEWLINES%
If you edit, remove the ; save and reload the script - this will make it spam popups every time it finds new text in the log file. this is most unsuitable for use when playing, but will confirm (or not) that the script is able to read the logfile OK. No need to be playing, logfile gets tons of messages all the time just moving between lobbies and stuff.
New AHK: TimeOut Helper (Instant Sit Back In) and Auto Timebank for PokerStars Quote

      
m