Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 1 | ; Script generated by the Inno Setup Script Wizard. |
| 2 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! |
| 3 | |
| 4 | ; This is the whole ball of wax for an Inno installer for Python. |
| 5 | ; To use, download Inno Setup from http://www.jrsoftware.org/isdl.htm/, |
| 6 | ; install it, and double-click on this file. That launches the Inno |
| 7 | ; script compiler. The GUI is extemely simple, and has only one button |
| 8 | ; you may not recognize instantly: click it. You're done. It builds |
| 9 | ; the installer into PCBuild/Python-2.2a1.exe. Size and speed of the |
| 10 | ; installer are competitive with the Wise installer; Inno uninstall |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 11 | ; seems much quicker than Wise (but also feebler, and the uninstall |
| 12 | ; log is in some un(human)readable binary format). |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 13 | ; |
| 14 | ; What's Done |
| 15 | ; ----------- |
| 16 | ; All the usual Windows Python files are installed by this now. |
| 17 | ; All the usual Windows Python Start menu entries are created and |
| 18 | ; work fine. |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 19 | ; .py, .pyw, .pyc and .pyo extensions are registered. |
| 20 | ; PROBLEM: Inno uninstall does not restore their previous registry |
| 21 | ; associations (if any). Wise did. This will make life |
| 22 | ; difficult for alpha (etc) testers. |
| 23 | ; The Python install is fully functional for "typical" uses. |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 24 | ; |
| 25 | ; What's Not Done |
| 26 | ; --------------- |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 27 | ; None of "Mark Hammond's" registry entries are written. |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 28 | ; No installation of files is done into the system dir: |
| 29 | ; The MS DLLs aren't handled at all by this yet. |
| 30 | ; Python22.dll is unpacked into the main Python dir. |
| 31 | ; |
| 32 | ; Inno can't do different things on NT/2000 depending on whether the user |
| 33 | ; has Admin privileges, so I don't know how to "solve" either of those, |
| 34 | ; short of building two installers (one *requiring* Admin privs, the |
| 35 | ; other not doing anything that needs Admin privs). |
| 36 | ; |
| 37 | ; Inno has no concept of variables, so lots of lines in this file need |
| 38 | ; to be fiddled by hand across releases. Simplest way out: stick this |
| 39 | ; file in a giant triple-quoted r-string (note that backslashes are |
| 40 | ; required all over the place here -- forward slashes DON'T WORK in |
| 41 | ; Inno), and use %(yadda)s string interpolation to do substitutions; i.e., |
| 42 | ; write a very simple Python program to *produce* this script. |
| 43 | |
| 44 | [Setup] |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 45 | ; Note: we *want* the version number to show up everywhere. |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 46 | ; Which of these controls App Path??? |
| 47 | AppName=Python 2.2 alpha 1 |
| 48 | AppVerName=Python 2.2 alpha 1 |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 49 | AppId=Python 2.2 |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 50 | AppVersion=2.2a1 |
| 51 | AppCopyright=Copyright © 2001 Python Software Foundation |
| 52 | |
| 53 | ; Default install dir; value of {app} later (unless user overrides). |
| 54 | ; {sd} = system root drive, probably "C:". |
| 55 | DefaultDirName={sd}\Python22 |
| 56 | |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 57 | ; Start menu folder name; value of {group} later (unless user overrides). |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 58 | DefaultGroupName=Python 2.2 |
| 59 | |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 60 | ; Point SourceDir to one above PCBuild = src. |
| 61 | ; YAY! That actually worked: means this script can run unchanged from anyone's |
| 62 | ; CVS tree, no matter what they called the top-level directories. Wise |
| 63 | ; required hardcoded absolute paths all over the place. |
| 64 | SourceDir=.. |
| 65 | OutputDir=PCBuild |
| 66 | OutputBaseFilename=Python-2.2a1 |
| 67 | |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 68 | AppPublisher=PythonLabs at Digital Creations |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 69 | AppPublisherURL=http://www.python.org |
| 70 | AppSupportURL=http://www.python.org |
| 71 | AppUpdatesURL=http://www.python.org |
| 72 | |
| 73 | AlwaysCreateUninstallIcon=yes |
| 74 | ChangesAssociations=yes |
| 75 | UninstallLogMode=new |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 76 | |
| 77 | ; The fewer screens the better; leave these commented. |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 78 | ;LicenseFile=LICENSE |
| 79 | ;InfoBeforeFile=Misc\NEWS |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 80 | |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 81 | ; uncomment the following line if you want your installation to run on NT 3.51 too. |
| 82 | ; MinVersion=4,3.51 |
| 83 | |
| 84 | [Types] |
| 85 | Name: normal; Description: "Select desired components"; Flags: iscustom |
| 86 | |
| 87 | [Components] |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 88 | Name: main; Description: "Python interpreter, library and Tk"; Types: normal |
| 89 | Name: docs; Description: "Python documentation (HTML)"; Types: normal |
| 90 | Name: tools; Description: "Python utility scripts (Tools\)"; Types: normal |
| 91 | Name: test; Description: "Python test suite (Lib\test\)"; Types: normal |
| 92 | |
| 93 | [Tasks] |
| 94 | Name: startmenu; Description: "Create Start menu shortcuts"; Components: main docs tools |
| 95 | Name: extensions; Description: "Register file extensions (.py, .pyw, .pyc, .pyo)"; Components: main |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 96 | |
| 97 | [Files] |
| 98 | ; Caution: Using forward slashes instead screws up in amazing ways. |
| 99 | ; Unknown: By the time Components (and other attrs) are added to these lines, they're |
| 100 | ; going to get awfully long. But don't see a way to continue logical lines across |
| 101 | ; physical lines. |
| 102 | |
| 103 | Source: LICENSE; DestDir: "{app}"; DestName: LICENSE.txt; CopyMode: alwaysoverwrite |
| 104 | Source: README; DestDir: "{app}"; DestName: README.txt; CopyMode: alwaysoverwrite |
| 105 | Source: Misc\News; DestDir: "{app}"; DestName: NEWS.txt; CopyMode: alwaysoverwrite |
| 106 | Source: PC\*.ico; DestDir: "{app}"; CopyMode: alwaysoverwrite; Components: main |
| 107 | |
| 108 | |
| 109 | Source: PCbuild\python.exe; DestDir: "{app}"; CopyMode: alwaysoverwrite; Components: main |
| 110 | Source: PCbuild\pythonw.exe; DestDir: "{app}"; CopyMode: alwaysoverwrite; Components: main |
| 111 | Source: PCbuild\w9xpopen.exe; DestDir: "{app}"; CopyMode: alwaysoverwrite; Components: main |
| 112 | |
| 113 | Source: PCbuild\python22.dll; DestDir: "{app}"; CopyMode: alwaysoverwrite; Components: main |
| 114 | |
| 115 | Source: ..\tcl\bin\tcl83.dll; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 116 | Source: ..\tcl\bin\tk83.dll; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 117 | Source: ..\tcl\lib\*.*; DestDir: "{app}\tcl"; CopyMode: alwaysoverwrite; Components: main; Flags: recursesubdirs |
| 118 | |
| 119 | Source: PCbuild\_socket.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 120 | Source: PCbuild\_socket.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 121 | |
| 122 | Source: PCbuild\_sre.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 123 | Source: PCbuild\_sre.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 124 | |
| 125 | Source: PCbuild\_symtable.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 126 | Source: PCbuild\_symtable.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 127 | |
| 128 | Source: PCbuild\_testcapi.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 129 | Source: PCbuild\_testcapi.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 130 | |
| 131 | Source: PCbuild\_tkinter.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 132 | Source: PCbuild\_tkinter.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 133 | |
| 134 | Source: PCbuild\bsddb.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 135 | Source: PCbuild\bsddb.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 136 | |
| 137 | Source: PCbuild\mmap.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 138 | Source: PCbuild\mmap.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 139 | |
| 140 | Source: PCbuild\parser.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 141 | Source: PCbuild\parser.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 142 | |
| 143 | Source: PCbuild\pyexpat.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 144 | Source: PCbuild\pyexpat.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 145 | |
| 146 | Source: PCbuild\select.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 147 | Source: PCbuild\select.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 148 | |
| 149 | Source: PCbuild\unicodedata.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 150 | Source: PCbuild\unicodedata.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 151 | |
| 152 | Source: PCbuild\_winreg.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 153 | Source: PCbuild\_winreg.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 154 | |
| 155 | Source: PCbuild\winsound.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 156 | Source: PCbuild\winsound.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 157 | |
| 158 | Source: PCbuild\zlib.pyd; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
| 159 | Source: PCbuild\zlib.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 160 | |
| 161 | Source: PCbuild\python22.lib; DestDir: "{app}\libs"; CopyMode: alwaysoverwrite; Components: main |
| 162 | |
Tim Peters | faa7f11 | 2001-07-28 07:56:38 +0000 | [diff] [blame] | 163 | Source: ..\expat\Libs\expat.dll; DestDir: "{app}\DLLs"; CopyMode: alwaysoverwrite; Components: main |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 164 | |
| 165 | Source: Lib\*.py; DestDir: "{app}\Lib"; CopyMode: alwaysoverwrite; Components: main |
| 166 | Source: Lib\lib-tk\*.py; DestDir: "{app}\Lib\lib-tk"; CopyMode: alwaysoverwrite; Components: main |
| 167 | |
| 168 | Source: Lib\encodings\*.py; DestDir: "{app}\Lib\encodings"; CopyMode: alwaysoverwrite; Components: main |
| 169 | Source: Lib\distutils\*.py; DestDir: "{app}\Lib\distutils"; CopyMode: alwaysoverwrite; Components: main |
| 170 | Source: Lib\xml\*.py; DestDir: "{app}\Lib\xml"; CopyMode: alwaysoverwrite; Flags: recursesubdirs; Components: main |
| 171 | Source: Lib\lib-old\*.py; DestDir: "{app}\Lib\lib-old"; CopyMode: alwaysoverwrite; Components: main |
| 172 | Source: Lib\site-packages\README; DestDir: "{app}\Lib\site-packages"; DestName: README.txt; CopyMode: alwaysoverwrite; Components: main |
| 173 | Source: Include\*.h; DestDir: "{app}\include"; CopyMode: alwaysoverwrite; Components: main |
Tim Peters | 76f373d | 2001-07-26 21:34:59 +0000 | [diff] [blame] | 174 | Source: PC\pyconfig.h; DestDir: "{app}\include"; CopyMode: alwaysoverwrite; Components: main |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 175 | |
| 176 | Source: Tools\scripts\*.py; DestDir: "{app}\Tools\Scripts"; CopyMode: alwaysoverwrite; Components: tools |
| 177 | Source: Tools\scripts\*.pyw; DestDir: "{app}\Tools\Scripts"; CopyMode: alwaysoverwrite; Components: tools |
| 178 | Source: Tools\scripts\*.doc; DestDir: "{app}\Tools\Scripts"; CopyMode: alwaysoverwrite; Components: tools |
| 179 | Source: Tools\scripts\README; DestDir: "{app}\Tools\Scripts"; DestName: README.txt; CopyMode: alwaysoverwrite; Components: tools |
| 180 | |
| 181 | Source: Tools\webchecker\*.py; DestDir: "{app}\Tools\webchecker"; CopyMode: alwaysoverwrite; Components: tools |
| 182 | Source: Tools\webchecker\README; DestDir: "{app}\Tools\webchecker"; DestName: README.txt; CopyMode: alwaysoverwrite; Components: tools |
| 183 | |
| 184 | Source: Tools\versioncheck\*.py; DestDir: "{app}\Tools\versioncheck"; CopyMode: alwaysoverwrite; Components: tools |
| 185 | Source: Tools\versioncheck\README; DestDir: "{app}\Tools\versioncheck"; DestName: README.txt; CopyMode: alwaysoverwrite; Components: tools |
| 186 | |
| 187 | Source: Tools\idle\*.py; DestDir: "{app}\Tools\idle"; CopyMode: alwaysoverwrite; Components: tools |
| 188 | Source: Tools\idle\idle.pyw; DestDir: "{app}\Tools\idle"; CopyMode: alwaysoverwrite; Components: tools |
| 189 | Source: Tools\idle\*.txt; DestDir: "{app}\Tools\idle"; CopyMode: alwaysoverwrite; Components: tools |
| 190 | Source: Tools\idle\Icons\*.*; DestDir: "{app}\Tools\idle\Icons"; CopyMode: alwaysoverwrite; Components: tools |
| 191 | |
Tim Peters | ce42a8e | 2001-08-08 19:32:25 +0000 | [diff] [blame] | 192 | Source: Tools\compiler\*.py; DestDir: "{app}\Tools\compiler"; CopyMode: alwaysoverwrite; Components: tools |
| 193 | Source: Tools\compiler\README; DestDir: "{app}\Tools\compiler"; DestName: README.txt; CopyMode: alwaysoverwrite; Components: tools |
| 194 | Source: Tools\compiler\compiler\*.py; DestDir: "{app}\Tools\compiler\compiler"; CopyMode: alwaysoverwrite; Components: tools |
| 195 | Source: Tools\compiler\compiler\*.txt; DestDir: "{app}\Tools\compiler\compiler"; CopyMode: alwaysoverwrite; Components: tools |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 196 | |
| 197 | Source: Tools\pynche\*.py; DestDir: "{app}\Tools\pynche"; CopyMode: alwaysoverwrite; Components: tools |
| 198 | Source: Tools\pynche\pynche.pyw; DestDir: "{app}\Tools\pynche"; CopyMode: alwaysoverwrite; Components: tools |
| 199 | Source: Tools\pynche\X\*.txt; DestDir: "{app}\Tools\pynche\X"; CopyMode: alwaysoverwrite; Components: tools |
| 200 | Source: Tools\pynche\README; DestDir: "{app}\Tools\pynche"; DestName: README.txt; CopyMode: alwaysoverwrite; Components: tools |
| 201 | Source: Tools\pynche\pynche; DestDir: "{app}\Tools\pynche"; DestName: pynche.py; CopyMode: alwaysoverwrite; Components: tools |
| 202 | |
| 203 | Source: html\*.*; DestDir: "{app}\Doc"; CopyMode: alwaysoverwrite; Flags: recursesubdirs; Components: docs |
| 204 | |
| 205 | Source: Lib\test\*.py; DestDir: "{app}\Lib\test"; CopyMode: alwaysoverwrite; Components: test |
| 206 | Source: Lib\test\*.uue; DestDir: "{app}\Lib\test"; CopyMode: alwaysoverwrite; Components: test |
| 207 | Source: Lib\test\*.xml; DestDir: "{app}\Lib\test"; CopyMode: alwaysoverwrite; Components: test |
| 208 | Source: Lib\test\*.out; DestDir: "{app}\Lib\test"; CopyMode: alwaysoverwrite; Components: test |
| 209 | Source: Lib\test\audiotest.au; DestDir: "{app}\Lib\test"; CopyMode: alwaysoverwrite; Components: test |
| 210 | Source: Lib\test\output\*.*; DestDir: "{app}\Lib\test\output"; CopyMode: alwaysoverwrite; Components: test |
| 211 | |
| 212 | [Icons] |
Tim Peters | b5c61a8 | 2001-07-21 21:16:39 +0000 | [diff] [blame] | 213 | Tasks: startmenu; Name: "{group}\IDLE (Python GUI)"; Filename: "{app}\pythonw.exe"; WorkingDir: "{app}"; Parameters: """{app}\Tools\idle\idle.pyw"""; Components: tools |
| 214 | Tasks: startmenu; Name: "{group}\Module Docs"; Filename: "{app}\pythonw.exe"; WorkingDir: "{app}"; Parameters: """{app}\Tools\Scripts\pydoc.pyw"""; Components: tools |
| 215 | Tasks: startmenu; Name: "{group}\Python (command line)"; Filename: "{app}\python.exe"; WorkingDir: "{app}"; Components: main |
| 216 | Tasks: startmenu; Name: "{group}\Python Manuals"; Filename: "{app}\Doc\index.html"; WorkingDir: "{app}"; Components: docs |
| 217 | |
| 218 | [Registry] |
| 219 | ; Register .py |
| 220 | Tasks: extensions; Root: HKCR; Subkey: ".py"; ValueType: string; ValueName: ""; ValueData: "Python File"; Flags: uninsdeletevalue |
| 221 | Tasks: extensions; Root: HKCR; Subkey: ".py"; ValueType: string; ValueName: "Content Type"; ValueData: "text/plain"; Flags: uninsdeletevalue |
| 222 | Tasks: extensions; Root: HKCR; Subkey: "Python File"; ValueType: string; ValueName: ""; ValueData: "Python File"; Flags: uninsdeletekey |
| 223 | Tasks: extensions; Root: HKCR; Subkey: "Python File\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\Py.ico" |
| 224 | Tasks: extensions; Root: HKCR; Subkey: "Python File\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\python.exe"" ""%1"" %*" |
| 225 | |
| 226 | ; Register .pyc |
| 227 | Tasks: extensions; Root: HKCR; Subkey: ".pyc"; ValueType: string; ValueName: ""; ValueData: "Python CompiledFile"; Flags: uninsdeletevalue |
| 228 | Tasks: extensions; Root: HKCR; Subkey: "Python CompiledFile"; ValueType: string; ValueName: ""; ValueData: "Compiled Python File"; Flags: uninsdeletekey |
| 229 | Tasks: extensions; Root: HKCR; Subkey: "Python CompiledFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\pyc.ico" |
| 230 | Tasks: extensions; Root: HKCR; Subkey: "Python CompiledFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\python.exe"" ""%1"" %*" |
| 231 | |
| 232 | ; Register .pyo |
| 233 | Tasks: extensions; Root: HKCR; Subkey: ".pyo"; ValueType: string; ValueName: ""; ValueData: "Python CompiledFile"; Flags: uninsdeletevalue |
| 234 | |
| 235 | ; Register .pyw |
| 236 | Tasks: extensions; Root: HKCR; Subkey: ".pyw"; ValueType: string; ValueName: ""; ValueData: "Python NoConFile"; Flags: uninsdeletevalue |
| 237 | Tasks: extensions; Root: HKCR; Subkey: ".pyw"; ValueType: string; ValueName: "Content Type"; ValueData: "text/plain"; Flags: uninsdeletevalue |
| 238 | Tasks: extensions; Root: HKCR; Subkey: "Python NoConFile"; ValueType: string; ValueName: ""; ValueData: "Python File (no console)"; Flags: uninsdeletekey |
| 239 | Tasks: extensions; Root: HKCR; Subkey: "Python NoConFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\Py.ico" |
| 240 | Tasks: extensions; Root: HKCR; Subkey: "Python NoConFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\pythonw.exe"" ""%1"" %*" |
Tim Peters | 7e5dcf6 | 2001-07-20 09:32:16 +0000 | [diff] [blame] | 241 | |