lsakizada Posted March 6, 2011 Share Posted March 6, 2011 I have a crash when I closing compiled application by clicking on the [x] button.but, when I closed the application that ran from sciTE editor its not crashed (also clicking on the [x] button).what can be the cause? Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
KaFu Posted March 6, 2011 Share Posted March 6, 2011 For example not properly discarded resources (gdi objects, imagelists...). OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
lsakizada Posted March 6, 2011 Author Share Posted March 6, 2011 (edited) For example not properly discarded resources (gdi objects, imagelists...). Actually I just saw that if the following line commented then there is no crash at all Local $Ret = DllCall($g_hShell32, 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'ptr', $p_tSHFILEINFO, 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags) the variable $g_hShell32 is defind on top of the file: Global $g_hShell32 = DllOpen('shell32.dll') but I do not want to comment it yehhh the all function is: Func __GetFileIcon($sPath, $bExt = 1, $iAttributes = 0) Static $tSHFILEINFO = DllStructCreate("ptr hIcon; int iIcon; DWORD dwAttributes; CHAR szDisplayName[255]; CHAR szTypeName[80];"), $p_tSHFILEINFO = DllStructGetPtr($tSHFILEINFO) Local $iFlags = BitOR(0x100, 0x1) ;$SHGFI_SMALLICON, $SHGFI_ICON If $bExt Then $iFlags = BitOR($iFlags, 0x10);SHGFI_USEFILEATTRIBUTES Local $Ret = DllCall($g_hShell32, 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'ptr', $p_tSHFILEINFO, 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags) If @error Then Return SetError(1, 0, 0) $Result = DllStructGetData($tSHFILEINFO, 'hIcon') Return $Result EndFunc ;==>__GetFileIcon Edited March 6, 2011 by lsakizada Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
KaFu Posted March 6, 2011 Share Posted March 6, 2011 SHGetFileInfo http://msdn.microsoft.com/en-us/library/bb762179%28v=vs.85%29.aspx "If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi, you are responsible for freeing it with DestroyIcon when you no longer need it." So for each call to that function an icon handle is created which needs to be destroyed with a respective call of _WinAPI_DestroyIcon($hIcon). OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
lsakizada Posted March 6, 2011 Author Share Posted March 6, 2011 (edited) SHGetFileInfo http://msdn.microsoft.com/en-us/library/bb762179%28v=vs.85%29.aspx "If SHGetFileInfo returns an icon handle in the hIcon member of the SHFILEINFO structure pointed to by psfi, you are responsible for freeing it with DestroyIcon when you no longer need it." So for each call to that function an icon handle is created which needs to be destroyed with a respective call of _WinAPI_DestroyIcon($hIcon). Hi Kafu, I am calling this function three times on my application and all time i destroy the icon expandcollapse popupCase StringUpper(".ico") $hIcon = __GetFileIcon($aResult[$i][5]) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; Case StringUpper(".exe") $hIcon = __GetFileIcon($aResult[$i][5]) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; Case StringUpper(".lnk") Local $aShortcut $azShortInfo = FileGetShortcut($aResult[$i][5]) If IsArray($azShortInfo) Then $sFile = $azShortInfo[0] $aShortcut = FileGetShortcut($aResult[$i][5]) ;$ext = _GetExtension($aShortcut[0]) $hIcon = __GetFileIcon($aShortcut[0]) ;$hIcon = _WinAPI_ShellExtractAssociatedIcon($ext, 1) ; ;ConsoleWrite("$hIcon=" & $hIcon & @LF) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; Edited March 6, 2011 by lsakizada Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
KaFu Posted March 6, 2011 Share Posted March 6, 2011 Do you release the $hImageList on exit? OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
lsakizada Posted March 6, 2011 Author Share Posted March 6, 2011 (edited) Do you release the $hImageList on exit? You might be right. I do not closing it (I commented it by mistake) But now when I try to use it its still crash.I close it at on exit function but still crashing. see my all function expandcollapse popupFunc _SetLinks($Control, $Group) Local $sSQLText Local $aResult, $iRows, $iColumns, $iRval _AutoItObject_Startup() $sSQLText = _oSQLText() $sSQLText.TableName = "Links" $sSQLText.Delimiter = "|" $sSQLText.Column = "LinkName|IsActive|HK1|HK2|Description|URL" $sSQLText.Where = "GroupName=" & "'" & $Group & "'" $iRval = _SQLite_GetTable2d(-1, $sSQLText.SelectColumns, $aResult, $iRows, $iColumns) If $iRval = $SQLITE_OK Then ;_SQLite_Display2DResult($aResult) _GUICtrlListView_BeginUpdate($A_CONTROL_TAB_0[4]) _GUICtrlListView_DeleteAllItems(GUICtrlGetHandle($A_CONTROL_TAB_0[4])) _ArrayDelete($aResult, 0) ; _GUICtrlListView_AddArray($A_CONTROL_TAB_0[4], $aResult) ;_ArrayDisplay($aResult) $hImageList = _GUIImageList_Create(16, 16, 6) ; _GUICtrlListView_SetImageList($A_CONTROL_TAB_0[4], $hImageList, 1) ; Local $ext For $i = 0 To UBound($aResult) - 1 $ext = _GetExtension($aResult[$i][5]) Switch StringUpper($ext) Case StringUpper(".ico") $hIcon = __GetFileIcon($aResult[$i][5]) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; Case StringUpper(".exe") $hIcon = __GetFileIcon($aResult[$i][5]) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; Case StringUpper(".lnk") Local $aShortcut $azShortInfo = FileGetShortcut($aResult[$i][5]) If IsArray($azShortInfo) Then $sFile = $azShortInfo[0] $aShortcut = FileGetShortcut($aResult[$i][5]) $hIcon = __GetFileIcon($aShortcut[0]) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; Case Else ;ConsoleWrite("3$ext[" & $aResult[$i][5] & "] = " & $ext & @LF) $hIcon = _WinAPI_ShellExtractAssociatedIcon($ext, 1) ; ;ConsoleWrite("$hIcon=" & $hIcon & @LF) _GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; _GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) _GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) _WinAPI_DestroyIcon($hIcon) ; EndSwitch ;$hIcon = _WinAPI_ShellExtractAssociatedIcon($ext, 1) ; ;ConsoleWrite("$hIcon=" & $hIcon & @LF) ;_GUIImageList_ReplaceIcon($hImageList, -1, $hIcon) ; ;_GUICtrlListView_AddItem($A_CONTROL_TAB_0[4], $aResult[$i][0], $i, _GUICtrlListView_GetItemCount($A_CONTROL_TAB_0[4]) + 9999) ; ;_GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][1], 1) ;_GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][2], 2) ;_GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][3], 3) ;_GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][4], 4) ;_GUICtrlListView_AddSubItem($A_CONTROL_TAB_0[4], $i, $aResult[$i][5], 5) ;_WinAPI_DestroyIcon($hIcon) ; Next _GUIImageList_Destroy($hImageList) For $x = 1 To _GUICtrlListView_GetColumnCount($A_CONTROL_TAB_0[4]) _GUICtrlListView_SetColumnWidth($A_CONTROL_TAB_0[4], $x - 1, $LVSCW_AUTOSIZE_USEHEADER) Next _GUICtrlListView_EndUpdate($A_CONTROL_TAB_0[4]) $sSQLText = 0 $aResult = 0 _AutoItObject_Shutdown() Else _Report_SQLLite_Error() $sSQLText = 0 _AutoItObject_Shutdown() Return 0 ; error EndIf EndFunc ;==>_SetLinks Edited March 6, 2011 by lsakizada Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
KaFu Posted March 6, 2011 Share Posted March 6, 2011 Hmmm, can't see anything obvious in that function. You're running an x64 system? Then the structure in __GetFileIcon() might be faulty. Try compiling as x86. Otherwise if you want you can PM me the whole code, will be handled confidential and deleted after review ... OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
lsakizada Posted March 6, 2011 Author Share Posted March 6, 2011 (edited) Hmmm, can't see anything obvious in that function. You're running an x64 system? Then the structure in __GetFileIcon() might be faulty. Try compiling as x86. Otherwise if you want you can PM me the whole code, will be handled confidential and deleted after review ...I am runnning under x86. I planed to run it on all systems. Why its faulty?EDIT: Yes you are right too: Its not running under x64 OS (windows 2008)Edit 2: It is working on windows 2008 64. See post #13 on this thread!The corrected function is on post # 11 Edited March 6, 2011 by lsakizada Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
rover Posted March 6, 2011 Share Posted March 6, 2011 I have a crash when I closing compiled application by clicking on the [x] button. but, when I closed the application that ran from sciTE editor its not crashed (also clicking on the [x] button). what can be the cause? WCHAR not CHAR you are using Unicode version of SHGetFileInfo I see fascists... Link to comment Share on other sites More sharing options...
lsakizada Posted March 6, 2011 Author Share Posted March 6, 2011 (edited) WCHAR not CHAR you are using Unicode version of SHGetFileInfo Hi Rover, thank you very much. This solve the crash. But Kafu put my attention to the fact that the function __GetFileIcon can not run on x64 machine. I went to test it immediately, and you know what it did not work indeed. Now I have bigger problem because my project stuck. Have you any idea how to change the structure in __GetFileIcon() so it will work on x64 machines? Or any other alternative to the function __GetFileIcon() ? have a Best One. EDIT: I am compiling it as x86 Func __GetFileIcon($sPath, $bExt = 1, $iAttributes = 0) Static $tSHFILEINFO = DllStructCreate("ptr hIcon; int iIcon; DWORD dwAttributes; WCHAR szDisplayName[255]; WCHAR szTypeName[80];"), $p_tSHFILEINFO = DllStructGetPtr($tSHFILEINFO) Local $iFlags = BitOR(0x100, 0x1) ;$SHGFI_SMALLICON, $SHGFI_ICON If $bExt Then $iFlags = BitOR($iFlags, 0x10);SHGFI_USEFILEATTRIBUTES Local $Ret = DllCall($g_hShell32, 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'ptr', $p_tSHFILEINFO, 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags) If @error Then Return SetError(1, 0, 0) $Result = DllStructGetData($tSHFILEINFO, 'hIcon') Return $Result EndFunc ;==>__GetFileIcon Edited March 6, 2011 by lsakizada Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
rover Posted March 6, 2011 Share Posted March 6, 2011 (edited) I'm not on an x64 OS, but to hazzard a guess, I would say use int_ptr instead of ptr.Edit: typoFunc __GetFileIcon($sPath, $bExt = 1, $iAttributes = 0) Static $tSHFILEINFO = DllStructCreate("int_ptr hIcon; int iIcon; DWORD dwAttributes; WCHAR szDisplayName[255]; WCHAR szTypeName[80];"), $p_tSHFILEINFO = DllStructGetPtr($tSHFILEINFO) Local $iFlags = BitOR(0x100, 0x1) ;$SHGFI_SMALLICON, $SHGFI_ICON If $bExt Then $iFlags = BitOR($iFlags, 0x10);SHGFI_USEFILEATTRIBUTES Local $Ret = DllCall($g_hShell32, 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'int_ptr', $p_tSHFILEINFO, 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags) If @error Then Return SetError(1, 0, 0) $Result = DllStructGetData($tSHFILEINFO, 'hIcon') Return $Result EndFunc ;==>__GetFileIcon Edited March 6, 2011 by rover I see fascists... Link to comment Share on other sites More sharing options...
lsakizada Posted March 6, 2011 Author Share Posted March 6, 2011 (edited) Hi Guys,I want to apologize, the function __GetFileIcon after the correction of rover is working on windows 2008 x64.It was a coding mistake of mine while I try to solve the crash with Kafu. ( some stupid typo crash it )Many many thanks to Kafu and rover that help me to figure out this issue.Also thanks to Yashied that shared the function and other goodies.Best reagrds G.K. Edited March 6, 2011 by lsakizada Be Green Now or Never (BGNN)! Link to comment Share on other sites More sharing options...
KaFu Posted March 6, 2011 Share Posted March 6, 2011 You're welcome, good to hear the issue's solved . OS: Win10-22H2 - 64bit - German, AutoIt Version: 3.3.16.1, AutoIt Editor: SciTE, Website: https://funk.eu AMT - Auto-Movie-Thumbnailer (2022-Nov-26) BIC - Batch-Image-Cropper (2023-Apr-01) COP - Color Picker (2009-May-21) DCS - Dynamic Cursor Selector (2024-Feb-16) HMW - Hide my Windows (2018-Sep-16) HRC - HotKey Resolution Changer (2012-May-16) ICU - Icon Configuration Utility (2018-Sep-16) SMF - Search my Files (2023-Jun-03) - THE file info and duplicates search tool SSD - Set Sound Device (2017-Sep-16) Link to comment Share on other sites More sharing options...
trancexx Posted March 6, 2011 Share Posted March 6, 2011 I'm not on an x64 OS, but to hazzard a guess, I would say use int_ptr instead of ptr. Edit: typo Func __GetFileIcon($sPath, $bExt = 1, $iAttributes = 0) Static $tSHFILEINFO = DllStructCreate("int_ptr hIcon; int iIcon; DWORD dwAttributes; WCHAR szDisplayName[255]; WCHAR szTypeName[80];"), $p_tSHFILEINFO = DllStructGetPtr($tSHFILEINFO) Local $iFlags = BitOR(0x100, 0x1) ;$SHGFI_SMALLICON, $SHGFI_ICON If $bExt Then $iFlags = BitOR($iFlags, 0x10);SHGFI_USEFILEATTRIBUTES Local $Ret = DllCall($g_hShell32, 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'int_ptr', $p_tSHFILEINFO, 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags) If @error Then Return SetError(1, 0, 0) $Result = DllStructGetData($tSHFILEINFO, 'hIcon') Return $Result EndFunc ;==>__GetFileIcon That doesn't make much sense. ♡♡♡ . eMyvnE Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now