--- a/AbstractFileApplicationNoteBookComponent.st Mon Jun 30 12:48:22 2003 +0200
+++ b/AbstractFileApplicationNoteBookComponent.st Mon Jun 30 15:24:18 2003 +0200
@@ -17,11 +17,11 @@
!AbstractFileApplicationNoteBookComponent class methodsFor:'queries'!
-canOpenItem:aItem
+canOpenItem:anItem
"
example:
- ^ (aItem suffix == 'cc')
+ ^ (anItem suffix == 'cc')
"
^ false
!
@@ -60,9 +60,9 @@
!AbstractFileApplicationNoteBookComponent methodsFor:'actions'!
-changeItem:aItem
+changeItem:anItem
- ^ self item:aItem.
+ ^ self item:anItem.
!
doClose
@@ -164,9 +164,9 @@
^ item
!
-item:aItem
+item:anItem
- item := aItem.
+ item := anItem.
^ true
!
@@ -193,5 +193,5 @@
!AbstractFileApplicationNoteBookComponent class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/AbstractFileApplicationNoteBookComponent.st,v 1.6 2003-02-06 17:20:20 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/AbstractFileApplicationNoteBookComponent.st,v 1.7 2003-06-30 13:24:10 cg Exp $'
! !
--- a/AbstractFileBrowser.st Mon Jun 30 12:48:22 2003 +0200
+++ b/AbstractFileBrowser.st Mon Jun 30 15:24:18 2003 +0200
@@ -2469,34 +2469,34 @@
^ nil
!
-openNewTextEditorOn:aItem
+openNewTextEditorOn:anItem
self
applicationNamed:#FileApplicationNoteBook
- ifPresentDo:[:appl | ^ appl openNewTextEditorOn:aItem ].
+ ifPresentDo:[:appl | ^ appl openNewTextEditorOn:anItem ].
^ nil
!
-openSearchFileOn:aItem
+openSearchFileOn:anItem
self
applicationNamed:#FileApplicationNoteBook
- ifPresentDo:[:appl | ^ appl openSearchFileOn:aItem].
+ ifPresentDo:[:appl | ^ appl openSearchFileOn:anItem].
^ nil.
!
-openTextEditorOn:aItem
+openTextEditorOn:anItem
self
applicationNamed:#FileApplicationNoteBook
- ifPresentDo:[:appl | ^ appl openTextEditorOn:aItem ].
+ ifPresentDo:[:appl | ^ appl openTextEditorOn:anItem ].
^ nil.
!
-openTextEditorOn:aItem type:aDirDescrOrFile
+openTextEditorOn:anItem type:aDirDescrOrFile
self
applicationNamed:#FileApplicationNoteBook
- ifPresentDo:[:appl | ^ appl openTextEditorOn:aItem type:aDirDescrOrFile].
+ ifPresentDo:[:appl | ^ appl openTextEditorOn:anItem type:aDirDescrOrFile].
^ nil.
!
@@ -2620,16 +2620,6 @@
!AbstractFileBrowser methodsFor:'applications'!
-applicationNamed:anApplicationName do:aBlock
- |appl|
-
- appl := self applications at:anApplicationName ifAbsent:nil.
- appl notNil ifTrue:[
- ^ aBlock value:appl
- ].
- ^ nil.
-!
-
applicationNamed:anApplicationName ifPresentDo:aBlock
|appl|
@@ -6381,5 +6371,5 @@
!AbstractFileBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.161 2003-06-30 10:48:22 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/AbstractFileBrowser.st,v 1.162 2003-06-30 13:24:07 cg Exp $'
! !
--- a/DirectoryContentsBrowser.st Mon Jun 30 12:48:22 2003 +0200
+++ b/DirectoryContentsBrowser.st Mon Jun 30 15:24:18 2003 +0200
@@ -1862,32 +1862,32 @@
^ browserItemList at:idx ifAbsent:nil
!
-getFileInfoFor:aItem
+getFileInfoFor:anItem
| type|
- type := aItem fileName fileType.
- aItem fileType:type.
+ type := anItem fileName fileType.
+ anItem fileType:type.
^ type
!
-getIconFor:aItem
+getIconFor:anItem
| key icon|
- key := aItem iconKey.
+ key := anItem iconKey.
icon := FileBrowser iconForKeyMatching:key.
- aItem isRemoteDirectory ifTrue:[
+ anItem isRemoteDirectory ifTrue:[
^ icon "/ do not query attributes
].
- ^ FileBrowser addOnIconsFor:(aItem fileName) to:icon.
+ ^ FileBrowser addOnIconsFor:(anItem fileName) to:icon.
!
-getIconForMimeType:mime for:aItem
+getIconForMimeType:mime for:anItem
| currentIcon newIcon icon|
newIcon := FileBrowser iconForKeyMatching:mime.
- currentIcon := aItem icon.
+ currentIcon := anItem icon.
(currentIcon class == MultiImage) ifTrue:[
| images |
images := currentIcon images.
@@ -1900,11 +1900,11 @@
^ icon
!
-getIconForMimeTypeByContents:aItem
- ^ self getIconForMimeType:(aItem mimeTypeForContents) for:aItem
+getIconForMimeTypeByContents:anItem
+ ^ self getIconForMimeType:(anItem mimeTypeForContents) for:anItem
!
-getPreviewFor:aItem
+getPreviewFor:anItem
| column icon|
@@ -1912,11 +1912,11 @@
column isNil ifTrue:[
previewIndex := 0.
] ifFalse:[
- (aItem hasMimeType and:[aItem mimeType isImage]) ifTrue:[
+ (anItem hasMimeType and:[anItem mimeType isImage]) ifTrue:[
Exception handle:[:ex|
icon := nil.
] do:[ |scale extent w h |
- icon := Image fromFile:(aItem fileName pathName).
+ icon := Image fromFile:(anItem fileName pathName).
icon notNil ifTrue:[
extent := icon extent.
w := column width - 4.
@@ -1932,14 +1932,14 @@
]
]
] ifFalse:[ icon := nil].
- aItem preview:(icon ? '').
+ anItem preview:(icon ? '').
].
^ icon
!
-updateChangesFor:aItem
-
- aItem resetItemForChanges.
+updateChangesFor:anItem
+
+ anItem resetItemForChanges.
!
updateColumnsCycle
@@ -2177,7 +2177,7 @@
filteredItems := newItems.
!
-evaluateFilter:aItemsList
+evaluateFilter:anItemsList
|showDir filterBlock newItemList noOfAddedFiles noOfFiles|
@@ -2186,13 +2186,13 @@
noOfAddedFiles := 0.
showDir := self viewDirsInContentsBrowser value.
filterBlock := self matchBlock.
- aItemsList size ~~ 0 ifTrue:[
- aItemsList do:[:aItem | |isDir|
- isDir := aItem isDirectory.
+ anItemsList size ~~ 0 ifTrue:[
+ anItemsList do:[:eachItem | |isDir|
+ isDir := eachItem isDirectory.
isDir not ifTrue:[noOfFiles := noOfFiles + 1].
- ((isDir and:[showDir]) or:[isDir not and:[filterBlock value:aItem baseName]]) ifTrue:[
+ ((isDir and:[showDir]) or:[isDir not and:[filterBlock value:eachItem baseName]]) ifTrue:[
isDir not ifTrue:[noOfAddedFiles := noOfAddedFiles + 1].
- newItemList add:aItem
+ newItemList add:eachItem
].
].
].
@@ -2216,8 +2216,8 @@
list := OrderedCollection new.
(directory notNil and:[directory exists]) ifTrue:[
contents := DirectoryContents directoryNamed:directory.
- contents itemsDo:[:aItem|
- list add:(DirectoryContentsBrowser itemClass forInfoItem:aItem).
+ contents itemsDo:[:eachItem|
+ list add:(DirectoryContentsBrowser itemClass forInfoItem:eachItem).
].
].
^ list
@@ -2744,12 +2744,12 @@
!DirectoryContentsBrowser::DirectoryContentsItem methodsFor:'compare'!
-= aItem
-
-"/ Transcript showCR:(aItem species == self species).
- aItem species == self species ifFalse:[ ^ false].
- aItem isNil ifTrue:[ ^ false].
- ^ (self fileName = aItem fileName)
+= anItem
+
+"/ Transcript showCR:(anItem species == self species).
+ anItem species == self species ifFalse:[ ^ false].
+ anItem isNil ifTrue:[ ^ false].
+ ^ (self fileName = anItem fileName)
!
hash
@@ -3012,5 +3012,5 @@
!DirectoryContentsBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.123 2003-06-25 08:35:50 penk Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/DirectoryContentsBrowser.st,v 1.124 2003-06-30 13:24:09 cg Exp $'
! !
--- a/DirectoryTreeBrowser.st Mon Jun 30 12:48:22 2003 +0200
+++ b/DirectoryTreeBrowser.st Mon Jun 30 15:24:18 2003 +0200
@@ -495,8 +495,8 @@
| items |
items := self selectedDirectoryItems.
- items do:[:aItem |
- aItem expand
+ items do:[:eachItem |
+ eachItem expand
].
!
@@ -1264,5 +1264,5 @@
!DirectoryTreeBrowser class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/DirectoryTreeBrowser.st,v 1.68 2003-06-20 14:24:35 penk Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/DirectoryTreeBrowser.st,v 1.69 2003-06-30 13:24:04 cg Exp $'
! !
--- a/FileApplicationNoteBook.st Mon Jun 30 12:48:22 2003 +0200
+++ b/FileApplicationNoteBook.st Mon Jun 30 15:24:18 2003 +0200
@@ -296,17 +296,17 @@
!FileApplicationNoteBook methodsFor:'actions-app-common'!
-changeItem:aItem for:aAppl
+changeItem:anItem for:aAppl
| applIndex string isDirectory |
applIndex := self getIndexFor:aAppl.
- aItem notNil ifTrue:[
- isDirectory := aItem isDirectory or:[aItem linkTargetIsDirectory ].
+ anItem notNil ifTrue:[
+ isDirectory := anItem isDirectory or:[anItem linkTargetIsDirectory ].
(isDirectory not) ifTrue:[
- (aAppl changeItem:aItem) ifFalse:[ ^ self].
- self fileHistory add:aItem.
+ (aAppl changeItem:anItem) ifFalse:[ ^ self].
+ self fileHistory add:anItem.
self enableFileHistory value:true.
].
].
@@ -411,56 +411,56 @@
].
!
-openApplByFileItem:aItem
+openApplByFileItem:anItem
" use the default class list for open of applications by item "
| applList applItem itemClass|
- aItem isNil ifTrue:[ ^ self ].
+ anItem isNil ifTrue:[ ^ self ].
applList := self applicationList.
self openAlwaysInTextEditor value ifTrue:[
- ^ self openDefaultApplicationByItem:aItem.
+ ^ self openDefaultApplicationByItem:anItem.
].
applItem := applList detect:[: aApplItem|
itemClass := self class classFor:aApplItem.
- (itemClass canOpenItem:aItem).
+ (itemClass canOpenItem:anItem).
] ifNone:[nil].
- applItem isNil ifTrue:[ ^ self openDefaultApplicationByItem:aItem].
+ applItem isNil ifTrue:[ ^ self openDefaultApplicationByItem:anItem].
applItem notNil ifTrue:[
| itemType appl|
itemType := self class typeFor:applItem.
itemClass := self class classFor:applItem.
- appl := self openApplicationClass:itemClass withItem:aItem withType:itemType.
+ appl := self openApplicationClass:itemClass withItem:anItem withType:itemType.
appl notNil ifTrue:[ ^ appl].
- ^ self openDefaultApplicationByItem:aItem.
+ ^ self openDefaultApplicationByItem:anItem.
].
!
-openApplicationClass:aClass withItem:aItem withType:aType
-
- ^ self openApplicationClass:aClass withItem:aItem withType:aType checkExisting:true
-!
-
-openApplicationClass:aClass withItem:aItem withType:aType checkExisting:checkExisting
+openApplicationClass:aClass withItem:anItem withType:aType
+
+ ^ self openApplicationClass:aClass withItem:anItem withType:aType checkExisting:true
+!
+
+openApplicationClass:aClass withItem:anItem withType:aType checkExisting:checkExisting
^ self openApplicationClass:aClass
- withItem:aItem
+ withItem:anItem
withType:aType
checkExisting:checkExisting
preSetItem:nil
!
-openApplicationClass:aClass withItem:aItem withType:aType checkExisting:checkExisting preSetItem:aBlock
+openApplicationClass:aClass withItem:anItem withType:aType checkExisting:checkExisting preSetItem:aBlock
|existingAppl newAppl|
"do not open unreadable items"
checkExisting ifTrue:[
- (aItem notNil and:[aItem isDirectory not and:[aItem fileName isReadable not]]) ifTrue:[
- Dialog warn:'Can not open unreadable file ', aItem fileName baseName.
+ (anItem notNil and:[anItem isDirectory not and:[anItem fileName isReadable not]]) ifTrue:[
+ Dialog warn:'Can not open unreadable file ', anItem fileName baseName.
AbortSignal raise.
].
- existingAppl := self tryToGetExistingApplFor:aClass withItem:aItem withType:aType preSetItem:aBlock.
+ existingAppl := self tryToGetExistingApplFor:aClass withItem:anItem withType:aType preSetItem:aBlock.
existingAppl notNil ifTrue:[
self doSelect:existingAppl.
^ existingAppl
@@ -471,9 +471,9 @@
aBlock value:newAppl.
].
newAppl type:aType.
- (newAppl item:aItem) ifFalse:[ ^ nil ].
- (aItem notNil and:[(aItem isDirectory not) and:[aType ~= #directoryDescription]]) ifTrue:[
- self fileHistory add:aItem.
+ (newAppl item:anItem) ifFalse:[ ^ nil ].
+ (anItem notNil and:[(anItem isDirectory not) and:[aType ~= #directoryDescription]]) ifTrue:[
+ self fileHistory add:anItem.
self enableFileHistory value:true.
].
self setSameFileIndexFor:newAppl.
@@ -481,7 +481,7 @@
^ newAppl
!
-openDefaultApplicationByItem:aItem
+openDefaultApplicationByItem:anItem
" open the default application if no application for item is available or the start of the
available application failed
"
@@ -492,7 +492,7 @@
| itemType itemClass|
itemType := self class typeFor:applItem.
itemClass := self class classFor:applItem.
- ^ self openApplicationClass:itemClass withItem:aItem withType:itemType.
+ ^ self openApplicationClass:itemClass withItem:anItem withType:itemType.
].
^ nil
!
@@ -570,7 +570,7 @@
].
!
-tryToGetExistingApplFor:aClass withItem:aItem withType:aType preSetItem:aBlock
+tryToGetExistingApplFor:aClass withItem:anItem withType:aType preSetItem:aBlock
| sameAppls changeAppl selAppl|
@@ -589,7 +589,7 @@
] ifFalse:[
"/ if item already changed select the application
selAppl := sameAppls detect:[ : appl |
- (appl item = aItem)
+ (appl item = anItem)
] ifNone:[nil].
].
] ifFalse:[
@@ -615,7 +615,7 @@
aBlock notNil ifTrue:[
aBlock value:changeAppl.
].
- self changeItem:aItem for:changeAppl.
+ self changeItem:anItem for:changeAppl.
selAppl := changeAppl.
].
^ selAppl.
@@ -654,12 +654,12 @@
^ self openApplicationClass:TextEditor withItem:nil withType:#file checkExisting:false
!
-openArchiveViewApplication:aItem
+openArchiveViewApplication:anItem
| result |
- result := self openApplicationClass:ArchiveViewApplication withItem:aItem withType:nil.
+ result := self openApplicationClass:ArchiveViewApplication withItem:anItem withType:nil.
result isNil ifTrue:[
- Dialog warn:'file type of ', aItem fileName baseName, ' not yet supported'.
+ Dialog warn:'file type of ', anItem fileName baseName, ' not yet supported'.
^ self.
].
!
@@ -680,19 +680,19 @@
].
!
-openNewTextEditorOn:aItem
-
- ^ self openApplicationClass:TextEditor withItem:aItem withType:#file checkExisting:false.
-!
-
-openSearchFileOn:aItem
-
- ^ self openApplicationClass:FindFileApplication withItem:aItem withType:nil
-!
-
-openTerminalApplication:aItem
-
- ^ self openApplicationClass:Terminal withItem:aItem withType:nil
+openNewTextEditorOn:anItem
+
+ ^ self openApplicationClass:TextEditor withItem:anItem withType:#file checkExisting:false.
+!
+
+openSearchFileOn:anItem
+
+ ^ self openApplicationClass:FindFileApplication withItem:anItem withType:nil
+!
+
+openTerminalApplication:anItem
+
+ ^ self openApplicationClass:Terminal withItem:anItem withType:nil
!
openTextEditor
@@ -705,20 +705,20 @@
^ self openTextEditorOn:(DirectoryContentsBrowser itemClass fileName:aFilename) type:#file
!
-openTextEditorOn:aItem
-
- ^ self openTextEditorOn:aItem type:#file
-!
-
-openTextEditorOn:aItem type:aDirDescrOrFile
-
- ^ self openApplicationClass:TextEditor withItem:aItem withType:aDirDescrOrFile
-!
-
-openTextEditorWithHexPresentationOn:aItem
+openTextEditorOn:anItem
+
+ ^ self openTextEditorOn:anItem type:#file
+!
+
+openTextEditorOn:anItem type:aDirDescrOrFile
+
+ ^ self openApplicationClass:TextEditor withItem:anItem withType:aDirDescrOrFile
+!
+
+openTextEditorWithHexPresentationOn:anItem
^ self openApplicationClass:TextEditor
- withItem:aItem
+ withItem:anItem
withType:#file
checkExisting:true
preSetItem:[:aTextEditor | aTextEditor presentation:#hexDump].
@@ -947,22 +947,6 @@
^ true
! !
-!FileApplicationNoteBook::ArchiveViewApplication class methodsFor:'common options'!
-
-classSelectorFor:aItem
-
- | class mimeType|
- aItem hasMimeType ifFalse:[^nil].
- mimeType := aItem mimeType.
- class := self supportedFiles at:mimeType ifAbsent:nil.
- (mimeType = 'application/x-gzip-compressed') ifTrue:[
- (aItem lastButOneSuffix = 'tar') ifTrue:[
- class := #tarGZipArchive.
- ].
- ].
- ^ class.
-! !
-
!FileApplicationNoteBook::ArchiveViewApplication class methodsFor:'defaults'!
tabStringFor:aApplicationType
@@ -1338,8 +1322,8 @@
!FileApplicationNoteBook::ArchiveViewApplication class methodsFor:'queries'!
-canOpenItem:aItem
- ^ (Archiver classForMimeType:aItem mimeType) notNil and:[OperatingSystem isUNIXlike]
+canOpenItem:anItem
+ ^ (Archiver classForMimeType:anItem mimeType) notNil and:[OperatingSystem isUNIXlike]
!
wantNewApplicationAnyway
@@ -1566,8 +1550,8 @@
].
!
-item:aItem
- super item:aItem.
+item:anItem
+ super item:anItem.
self removeErrorOutput.
archiver := Archiver newFor:self fileName.
@@ -1596,8 +1580,8 @@
!FileApplicationNoteBook::ArchiveViewApplication methodsFor:'actions'!
-changeItem:aItem
- self item:aItem.
+changeItem:anItem
+ self item:anItem.
self clearFileList.
self listAllFiles.
^ true
@@ -2328,27 +2312,6 @@
!FileApplicationNoteBook::ArchiveViewApplication methodsFor:'queries'!
-archivType
-
- | file firstsuffix secondsuffix|
-
- file := self fileName.
- firstsuffix := file withoutSuffix suffix.
- secondsuffix := file suffix.
- (secondsuffix = 'tgz' or:[firstsuffix = 'tar' and:[secondsuffix = 'gz']]) ifTrue:[
- ^ #tarFileCompressed
- ].
- (secondsuffix = 'tar') ifTrue:[
- ^ #tarFile
- ].
- (secondsuffix = 'gz') ifTrue:[
- ^ #gzipFile
- ].
- (secondsuffix = 'zip') ifTrue:[
- ^ #zipFile
- ].
-!
-
canDelete
^ (self hasOneSelectionInList and:[archiver class canRemoveFiles])
@@ -2999,9 +2962,9 @@
!FileApplicationNoteBook::HtmlViewApplication class methodsFor:'queries'!
-canOpenItem:aItem
-
- ^ (aItem hasMimeType and:[aItem mimeType isHtml])
+canOpenItem:anItem
+
+ ^ (anItem hasMimeType and:[anItem mimeType isHtml])
!
wantNewApplicationAnyway
@@ -3023,12 +2986,12 @@
htmlView := something.
!
-item:aItem
+item:anItem
|retVal|
- self labelHolder value:aItem fileName asString.
- retVal := super item:aItem.
+ self labelHolder value:anItem fileName asString.
+ retVal := super item:anItem.
self setupHtmlView.
^ retVal
! !
@@ -3285,9 +3248,9 @@
!FileApplicationNoteBook::ImageViewApplication class methodsFor:'queries'!
-canOpenItem:aItem
-
- ^ (aItem hasMimeType and:[aItem mimeType isImage])
+canOpenItem:anItem
+
+ ^ (anItem hasMimeType and:[anItem mimeType isImage])
!
wantNewApplicationAnyway
@@ -3337,9 +3300,9 @@
!FileApplicationNoteBook::ImageViewApplication methodsFor:'actions'!
-changeItem:aItem
-
- self item:aItem.
+changeItem:anItem
+
+ self item:anItem.
self setupImageView.
^ true
!
@@ -4891,5 +4854,5 @@
!FileApplicationNoteBook class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/FileApplicationNoteBook.st,v 1.98 2003-06-30 10:47:49 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/FileApplicationNoteBook.st,v 1.99 2003-06-30 13:24:02 cg Exp $'
! !
--- a/FileBrowserV2.st Mon Jun 30 12:48:22 2003 +0200
+++ b/FileBrowserV2.st Mon Jun 30 15:24:18 2003 +0200
@@ -1656,9 +1656,10 @@
!FileBrowserV2 methodsFor:'startup & release'!
closeRequest
- (self applicationNamed:#FileApplicationNoteBook do:[:appl | appl tryCloseApplications]) ifFalse:[
- ^ self
- ].
+ self
+ applicationNamed:#FileApplicationNoteBook
+ ifPresentDo:[:appl | appl tryCloseApplications ifFalse:[^ self] ].
+
^ super closeRequest.
!
@@ -1757,7 +1758,7 @@
!FileBrowserV2 class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/FileBrowserV2.st,v 1.85 2003-06-13 07:21:35 penk Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/FileBrowserV2.st,v 1.86 2003-06-30 13:24:18 cg Exp $'
! !
FileBrowserV2 initialize!
--- a/FindFileApplication.st Mon Jun 30 12:48:22 2003 +0200
+++ b/FindFileApplication.st Mon Jun 30 15:24:18 2003 +0200
@@ -882,11 +882,11 @@
!FindFileApplication methodsFor:'startup & release'!
-item:aItem
+item:anItem
|file newPattern|
- super item:aItem.
+ super item:anItem.
file := self fileName.
self searchDirectoryHolder value:(self getDirWithoutFileName:file).
@@ -894,7 +894,7 @@
file isDirectory ifTrue:[
newPattern := '*'.
] ifFalse:[
- newPattern := '*.', aItem suffix.
+ newPattern := '*.', anItem suffix.
].
self namePatternHolder value:newPattern.
self enableStop value:false.
@@ -921,5 +921,5 @@
!FindFileApplication class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libtool/FindFileApplication.st,v 1.12 2003-04-08 14:45:29 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libtool/FindFileApplication.st,v 1.13 2003-06-30 13:24:17 cg Exp $'
! !