Translation update done using Pootle.
[phpmyadmin/madhuracj.git] / ChangeLog
blobf87706e3f98d3f538025bc561a8df4f67ea904b2
1 phpMyAdmin - ChangeLog
2 ======================
4 3.5.0.0 (not yet released)
5 + rfe #2021981 [interface] Add support for mass prefix change.
6 + "up to date" message on main page when current version is up to date
7 + Update to jQuery 1.6.2
8 + Patch #3256122 [search] Show/hide db search results
9 + Patch #3302354 Add gettext wrappers around a message
10 + Remove deprecated function PMA_DBI_get_fields
11 + rfe #2098927 Remember recent tables
12 + rfe #3078542 Remember the last sort order for each table
13 + AJAX for Create table in navigation panel
14 + rfe #3310562 Wording about Column
15 + AJAX for Add a user in Database privileges
16 + Patch #3271804 for rfe #3177495, new DisableMultiTableMaintenance directive
17 + [interface] Reorganised server status page.
18 + [interface] Changed way of generating charts.
19 + rfe #939233 [interface] Flexible column width
20 + [interface] Mouse-based column reordering in query results
21 + AJAX for Insert to a table from database Structure page
22 - Patch #3316969 PMA_ajaxShowMessage() does not respect timeout
23 + AJAX for Change on multiple rows in table Browse
24 + [interface] Improved support for stored routines
25 + [display] More options for browsing GIS data
26 + [interface] Support for spatial indexes
27 + [display] GIS data visualization
28 + AJAX for table structure multiple-column change
29 + AJAX for table structure index edit
30 + Show/hide indexes in table Structure
31 + More compact navigation bar
32 + Display direction (horizontal/vertical) no longer displayed by default
33 + Shift/click support in database Structure
34 + Show/hide column in table Browse
35 - bug #3353856 [AJAX] AJAX dialogs use wrong font-size
36 - bug #3354356 [interface] Timepicker does not work in AJAX dialogs
37 + AJAX for table Structure Indexes Edit
38 + AJAX for table Structure column Change
39 + [interface] Improved support for events
40 + [interface] Improved support for triggers
41 + [interface] Improved server monitoring
42 + AJAX for table Structure column Add
43 + AJAX for table Operations copy table
44 - bug #3380946 [export] no uid Query result export (Suhosin limit)
45 + Grid editing in browse mode (replaces row inline edit)
46 + Zoom-search in table Search
47 + [interface] Editor for GIS data
48 + [import] Import GIS data from ESRI Shapefiles
49 + [interface] 'Function based search' for GIS data
50 + Support Drizzle database
51 - bug #3356456 [interface] Interface problems for queries having LIMIT clauses
52 + [interface] Remove DefaultPropDisplay feature
53 - bug #3299486 [prettyprint] Order By in a query containing comment character
54 + [interface] Improved ENUM/SET editor
55 + patch #3428376 [pmadb] pmadb on a different MySQL server
56 + patch #3410688 [interface] Improving field size for character columns
57 - [usability] Removed an unnecessary AJAX request from database search
58 - bug #3302419 [navi] Tabs break when squeezing page
59 + rfe #3406797 [navi] Stick table tools to top of page on scroll
60 + rfe #1632106 [interface] Improved error handling
61 + patch #3432835 [interface] Add useful intermediate pages to pageselector
62 + [interface] Improved index editor
63 + View editing via a generated ALTER VIEW
64 - bug #3408377 [interface] Deleting table from the DB does not change the table counter
66 3.4.9.0 (not yet released)
67 - bug #3442028 [edit] Inline editing enum fields with null shows no dropdown
68 - bug #3442004 [interface] DB suggestion not correct for user with underscore
69 - bug #3438420 [core] Magic quotes removed in PHP 5.4
70 - bug #3398788 [session] No feedback when result is empty (signon auth_type)
71 - bug #3384035 [display] Problems regarding ShowTooltipAliasTB
73 3.4.8.0 (2011-12-01)
74 - bug #3425230 [interface] enum data split at space char (more space to edit)
75 - bug #3426840 [interface] ENUM/SET editor can't handle commas in values
76 - bug #3427256 [interface] no links to browse/empty views and tables
77 - bug #3430377 [interface] Deleted search results remain visible
78 - bug #3428627 [import] ODS import ignores memory limits
79 - bug #3426836 [interface] Visual column separation
80 - bug #3428065 [parser] TRUE not recognized by parser
81 + patch #3433770 [config] Make location of php-gettext configurable
82 - patch #3430291 [import] Handle conflicts in some open_basedir situations
83 - bug #3431427 [display] Dropdown results - setting NULL does not work
84 - patch #3428764 [edit] Inline edit on multi-server configuration
85 - patch #3437354 [core] Notice: Array to string conversion in PHP 5.4
86 - [interface] When ShowTooltipAliasTB is true, VIEW is wrongly shown as the
87   view name in main panel db Structure page
88 - bug #3439292 [core] Fail to synchronize column with name of keyword
89 - bug #3425156 [interface] Add column after drop
90 - [interface] Avoid showing the password in phpinfo()'s output
91 - bug #3441572 [GUI] 'newer version of phpMyAdmin' message not shown in IE8
92 - bug #3407235 [interface] Entering the key through a lookup window does not reset NULL
93 - [security] Self-XSS on database names (Synchronize), see PMASA-2011-18
94 - [security] Self-XSS on database names (Operations/rename), see PMASA-2011-18
95 - [security] Self-XSS on column type (Create index), see PMASA-2011-18
96 - [security] Self-XSS on column type (table Search), see PMASA-2011-18
97 - [security] Self-XSS on invalid query (table overview), see PMASA-2011-18
99 3.4.7.1 (2011-11-10)
100 - [security] Fixed possible local file inclusion in XML import
101 (CVE-2011-4107).
103 3.4.7.0 (2011-10-23)
104 - bug #3418610 [interface] Links in navigation when $cfg['MainPageIconic'] = false
105 - bug #3418849 [interface] Inline edit shows dropdowns even after closing
106 - bug [view] View renaming did not work
107 - bug [navi] Wrong icon for view (MySQL 5.5)
108 - bug #3420229 [doc] Missing documentation section
109 - bug #3423725 [pdf] Broken PDF file when exporting database to PDF
110 - [core] Allow to set language in URL
111 - bug #3425184 [doc] Fix links to PHP documentation
112 - bug #3426031 [export] Export to bzip2 is not working
114 3.4.6.0 (2011-10-16)
115 - patch #3404173 InnoDB comment display with tooltips/aliases
116 - bug #3404886 [navi] Edit SQL statement after error
117 - bug #3403165 [interface] Collation not displayed for long enum fields
118 - bug #3399951 [export] Config for export compression not used
119 - bug #3400690 [privileges] DB-specific privileges won't submit
120 - bug #3410604 [config] Configuration storage incorrect suggested table name 
121 - bug #3383572 [interface] Cannot execute saved query
122 - bug #3411535 [display] Full text button unchecks results display options
123 - bug #3411224 [display] Broken binary column when 'Show binary contents' is not set
124 - bug #3411633 [core] Call to undefined function PMA_isSuperuser()
125 - bug #3413743 [interface] Display options link missing after search
126 - bug #3324161 [core] CSP policy causing designer JS buttons to fail
127 - bug #3412862 [relation] Relations/constraints are dropped/created on every change
128 - bug #3390832 [display] Delete records from last page breaks search
129 - bug #3392150 [schema] PMA_User_Schema::processUserChoice() is broken
130 - bug #3414744 [core] External link fails in 3.4.5
131 - patch #3314626 [display] CharTextareaRows is not respected
132 - bug #3417089 [synchronize] Extraneous db choices
133 - [security] Fixed local path disclosure vulnerability, see PMASA-2011-15
134 - [security] Fixed XSS in setup (host/verbose parameter), see PMASA-2011-16
136 3.4.5.0 (2011-09-14)
137 - bug #3375325 [interface] Page list in navigation frame looks odd
138 - bug #3313235 [interface] Error div misplaced
139 - bug #3374802 [interface] Comment on a column breaks inline editing
140 - patch #3383711 [display] Order by a column in a view doesn't work in some cases
141 - bug #3386434 [interface] Add missing space to server status
142 - [core] Remove library PHPExcel, due to license issues
143 - [export] Remove native Excel export modules (xls and xlsx formats)
144 - [import] Remove native Excel import modules (xls and xlsx formats)
145 - bug #3392920 [edit] BLOB emptied after editing another column
146 - [security] Fixed XSS in Inline Edit on save action, see PMASA-2011-14
147 - [security] Fixed XSS with db/table/column names, see PMASA-2011-14 
149 3.4.4.0 (2011-08-24)
150 - bug #3323060 [parser] SQL parser breaks AJAX requests if query has unclosed quotes
151 - bug #3323101 [parser] Invalid escape sequence in SQL parser
152 - bug #3348995 [config] $cfg['Export']['asfile'] set to false does not select asText option
153 - bug #3340151 [export] Working SQL query exports error page
154 - bug #3353649 [interface] "Create an index on X columns" form not validated
155 - bug #3350790 [interface] JS error in Table->Structure->Index->Edit
156 - bug #3353811 [interface] Info message has "error" class
157 - bug #3357837 [interface] TABbing through a NULL field in the inline mode resets NULL
158 - remove version number in /setup
159 - bug #3367993 [usability] Missing "Generate Password" button
160 - bug #3363221 [display] Missing Server Parameter on inline sql query
161 - bug #3367986 [navi] Drop field -> lost active table
162 - remove misleading comment on the "Rename database" interface
163 - bug #3374374 [interface] Fix footnote for inexact count while browsing
164 - bug #3372807 [interface] Fix security warning link in setup
165 - bug #3374347 [display] Backquotes in normal text on import page
166 - bug #3358750 [core] With Suhosin, urls are too long in edit links
167 - [security] Missing sanitization on the table, column and index names leads to XSS vulnerabilities, see PMASA-2011-13
169 3.4.3.2 (2011-07-23)
170 - [security] Fixed XSS vulnerability, see PMASA-2011-9
171 - [security] Fixed local file inclusion vulnerability, see PMASA-2011-10
172 - [security] Fixed local file inclusion vulnerability and code execution, see PMASA-2011-11
173 - [security] Fixed possible session manipulation in swekey authentication, see PMASA-2011-12
175 3.4.3.1 (2011-07-02)
176 - [security] Fixed possible session manipulation in swekey authentication, see PMASA-2011-5
177 - [security] Fixed possible code injection incase session variables are compromised, see PMASA-2011-6
178 - [security] Fixed regexp quoting issue in Synchronize code, see PMASA-2011-7
179 - [security] Fixed filtering of a file path, which allowed for directory traversal, see PMASA-2011-8
181 3.4.3.0 (2011-06-27)
182 - bug #3311170 [sync] Missing helper icons in Synchronize
183 - patch #3304473 [setup] Redefine a lable that was wrong
184 - bug #3304544 [parser] master is not a reserved word
185 - bug #3307616 [edit] Inline edit updates multiple duplicate rows
186 - patch #3311539 [edit] Inline edit does not escape backslashes
187 - bug #3313210 [interface] Columns class sometimes changed for nothing
188 - patch #3313326 [interface] Some tooltips do not disappear
189 - bug #3315720 [search] Fix search in non unicode tables
190 - bug #3315741 [display] Inline query edit broken
191 - patch #3317206 [privileges] Generate password option missing on new accounts
192 - bug #3317293 [edit] Inline edit places HTML line breaks in edit area
193 - bug #3319466 [interface] Inline query edit does not escape special characters
194 - minor XSS (require a valid token)
196 3.4.2.0 (2011-06-07)
197 - bug #3301249 [interface] Iconic table operations does not remove inline edit label
198 - bug #3303869 [interface] Unnecessary scrolling on Databases page
199 - patch #3303813 [setup] Define a label that was missing
200 - bug #3305606 [interface] Show all button wraps on privileges page
201 - bug #3305517 [config] Config for export compression not used
202 - bug #3305883 [interface] Table is dropped regardless of confirmation
203 - [auth] Fixed error handling for signon auth method.
204 - bug #3276001 [core] Avoid caching of index.php.
205 - bug #3306958 [interface] Unnecessary Details slider
206 - bug #3308476 [interface] "Show all" not persistent after a sort
207 - bug #3308072 [auth] Version disclosure to anonymous visitors
208 - bug #3306981 [interface] pmahomme and table statistics
210 3.4.1.0 (2011-05-20)
211 - bug #3301108 [interface] Synchronize and already configured host
212 - bug #3302457 Inline edit and $cfg['PropertiesIconic']
213 - Patch #3302313 Show a translated label
214 - bug #3300981 [navi] Table filter is case sensitive
215 - bug #3285929 [privileges] Revert temporary fix
216 - bug #3302872 [synchronize] Synchronize and user name
217 - bug #3302733 [core] Some browsers report an insecure https connection
218 - [security] Make redirector require valid token
220 3.4.0.0 (2011-05-11)
221 + rfe #2890226 [view] Enable VIEW rename 
222 + rfe #838637 [privileges] Export a user's privileges 
223 - [core] Updated mootools to fix some glitches with Safari.
224 + rfe #2816943 [interface] Add REGEXP ^...$ to select dialog.
225 + rfe #2924956 [interface] Add insert ignore option to editing row.
226 + rfe #2838080 [interface] Show warning when javascript is disabled.
227 + rfe #2823707 [edit] Call UUID function separately to show it in insert.
228 + rfe #2420684 [export] Allow export of timestamps in UTC.
229 + [core] Remove config data from session as it brings chicken-egg problem.
230 + [core] Cookie path now honors PmaAbsoluteUri.
231 + rfe #2393597 [core] phpMyAdmin honors https in PmaAbsoluteUri.
232 + rfe #1778337 [core] Try moving tables by RENAME and fail to CREATE/INSERT if that fails.
233 + rfe #1721189 [core] Force reload js on code change.
234 + rfe #1954161 [interface] Do not display long numbers in server status.
235 + rfe #2033616 [edit] Add option to just display insert query.
236 + rfe #1435032 [interface] Move SSL status to the end, it is usually empty.
237 + rfe #1340812 [interface] Show numbers of columns in table structure.
238 + rfe #1186511 [inrerface] Add link to reload navigation frame.
239 + rfe #2936156 [auth] Signon authentication forwards error message through session data.
240 + rfe #2835109 [interface] Move ^1 to the end of message.
241 + rfe #854911  [interface] Grey out non applicable actions in structure 
242 + [interface] Allow to create new table from navigation frame (in light mode).
243 + rfe #1025696 [browse] Add direct download of binary fields.
244 - [browse] Properly display NULL value for BLOB.
245 - rfe #1516803 [edit] Allow to set BLOB to/from NULL with ProtectBinary.
246 - [edit] Do not default to UNHEX when using file upload.
247 - rfe #1379201 [core] Add option to configure session_save_path.
248 + [interface] Provide links to documentation in highlighted SQL.
249 + [interface] It is now possible to bookmark most pages in JS capable browser.
250 - bug #2936482 [core] Fix SSL detection.
251 + rfe #2937850 [doc] Add some hints to chk_rel.php for quick setup.
252 + rfe #2938579 [interface] Add class to some elements for easier theming.
253 + rfe #2937840 [doc] Add some interesting configs to config.sample.inc.php.
254 + rfe #2792992 [doc] Added advice to re-login after changing pmadb settings
255 + patch #2952353 [interface] Prefill "Copy table to" in tbl_operations.php, thanks to iinl
256 + [lang] Add English (United Kingdom) translation, thanks to Robert Readman.
257 + patch #2948421 [auth] HTTP Basic auth realm name,
258   thanks to Harald Jenny - haraldj
259 - bug #2954916 [interface] Do not insert doc links to not formatted SQL.
260 + [lang] Chinese Simplified update, thanks to Shanyan Baishui - rimyxp 
261 + [lang] Turkish update, thanks to Burak Yavuz
262 + rfe #2963310 [interface] Focus TEXTAREA "sql_query" on click on "SQL" link
263 + [lang] Uzbek update, thanks to Orzu Samarqandiy
264 + rfe #2958013 [import] After import, also list uploaded filename, thanks
265   to Pavel Konnikov and Herman van Rink
266 + patch #2974341 [structure] Clicking on table name in db Structure should 
267   Browse the table if possible, thanks to bhdouglass - dougboybhd
268 + patch #2975533 [search] New search operators, thanks to
269   Martynas Mickevičius
270 + patch #2967320 [designer] Colored relations based on the primary key,
271   thanks to GreenRover - greenrover
272 - [core] Provide way for vendors to easily change paths to config files.
273 + patch #2979922, rfe #2804874 [interface] Add inline query editing, thanks to Muhammd Adnan.
274 - bug #2966752 [setup] Allow to configure changes tracking in setup script.
275 + patch #2981165 [edit] Optionally disable the Type column, 
276   thanks to Brian Douglass - bhdouglass
277 + patch #2984058 [edit] Buttons for quicky creating common SQL queries, thanks
278   to sutharshan.
279 + patch #2984337 [interface] Convert loading of export/import to jQuery ready
280   event, thanks to sutharshan.
281 - [edit] CURRENT_TIMESTAMP is also valid for datetime fields.
282 - patch #2985068 [engines] Fix parsing of PBXT status, thanks to Madhura Jayaratne.
283 - patch #2986073 [interface] Convert upload progress bar to jQuery, thanks to
284   Philip Frank.
285 - patch #2983960 [interface] Add javascript validation of datetime input,
286   thanks to Sutharshan Balachandren.
287 - rfe #2981999 [interface] Default sort order is now SMART.
288 - rfe #2972969 [interface] Fix flipping of headers in non-IE browsers.
289 + rfe #2964518 [interface] Allow to choose servers from configuration for
290   synchronisation.
291 + rfe #2988633 [relation] Improve ON DELETE/ON UPDATE drop-downs
292 + rfe #2988629 [relation] Improve labels in relation view 
293 + rfe #2983207, patch #2988715 [interface] Use jQuery calendar dialog, thanks
294   to Muhammad Adnan.
295 + [doc] Incorporate synchronisation docs into main document.
296 + [core] Include Content Security Policy HTTP headers.
297 - bug #3004216 [CSS] Field attributes use inline CSS
298 - patch #2999595, rfe #2998130 [interface] Cleanup navigation frame.
299 - patch #3025161 [core] Prevent sending of unnecessary cookies, 
300   thanks to Piotr Przybylski  - crackpl
301 - bug [password] Generate password only available if JS is enabled
302   (fixed for Privileges and Change password)
303 - [core] RecodingEngine now accepts none as valid option.
304 + [core] Dropped AllowAnywhereRecoding configuration variable.
305 - rfe #3016457 [interface] Define tab order in SQL form to allow easier tab
306   navigation.
307 + [core] Centralized format string expansion, @VARIABLES@ are recommended way
308   now, used by file name templates, default queries, export and title
309   generating.
310 + [validator] SQL validator works also with SOAP PHP extension.
311 - [interface] Better formatting for SQL validator results.
312 - [doc] The linked-tables infrastructure is now called phpMyAdmin
313   configuration storage.
314 - [interface] Move drop/empty links from being tabs to Operations tab.
315 - [interface] Fixed rendering of error/notice/info titles background.
316 - patch #3038293 [doc] Language and grammar fixes,
317   thanks to Isaac Bennetch - ibennetch
318 - patch #3038312 [export] JSON export, 
319   thanks to Hauke Henningsen - blubberkeks152
320 - rfe #1494550 [interface] Editor for SET/ENUM fields.
321 - rfe #2649375 [interface] Simplified interface to backup/restore.
322 - rfe #2973909 Users preferences
323 - [relations] Dropped WYSIWYG-PDF configuration variable.
324 - rfe #806035, #686260 [relations] Export relations to Dia, SVG and others
325 + [interface] Added charts to status tab, profiling page and query results
326 + [interface] AJAXification on various pages 
327 - [core] Remove last remaining parts of profiling code which was removed in 2006.
328 - bug #3042665 [parser] Add workaround for MySQL way of handling backtick.
329 - bug #3056610 [interface] Removed modification options for information_schema 
330 + patch #3055886 [config] Add Left frame table filter visibility config option, thanks to eesau
331 - [core] Force generating of new session on login
332 + rfe #1105678 [interface] Drop page-break-before as it is useless for smaller
333   tables.
334 + rfe #2956556 [interface] Allow to wrap enum values.
335 - bug #1669459 [interface] Do not automatically mark PDF schema rows to delete
336 - bug #3087682 [interface] Do not apply LeftFrameDBSeparator on first character.
337 + rfe #3111455 [interface] Column highlighting and marking in table view
338 + Visual query builder
339 - bug #3115519 [interface] Prevent long queries from being shown in confirmation popup
340 - patch #3112792 [navi] Left panel table grouping incorrect,
341   thanks to garas - garas
342 - bug #3123433 [interface] Avoid double escaping of MySQL errors.
343 - [interface] Use less noisy message and remove disable link on server charts and database statistics.
344 + rfe #3141330 [relation] When displaying results, show a link to the foreign 
345   table even when phpMyAdmin configuration storage is not active
346 - bug #3141327 [relation] Foreign key input options
347 - [export] Better handling of export to PHP array.
348 - rfe #3158867 [privileges] No DROP DATABASE warning if you delete a user
349 - [interface] Add link to documentation for status variables.
350 - [security] Redirect external links to avoid Referer leakage.
351 - [interface] Default to not count tables in database.
352 - patch #3172172 [interface] Shortcut for copying table row.
353 - bug #3175227 [auth] Reset user cache on login.
354 - rfe #3148361 [interface] Replace hard coded limit with $cfg['LimitChars'].
355 - bug #3177136 [interface] Indicate that bookmark is being used on browse.
356 - [interface] Indicate shared bookmarks in interface.
357 - patch #3176420 [Search] Ajaxify browse and delete criteria in DB Search,
358   thanks to Thilanka Kaushalya
359 - [interface] New default theme pmahomme, dropped darkblue_orange theme.
360 - rfe #2936155 [auth] Allow to pass additional parameters using signon method.
361 - rfe #1640812 [auth] Add example for OpenID authentication using signon method.
362 - rfe #1312657 [dbi] Default to mysqli extension.
363 - rfe #1168350 [interface] Add clear button to SQL edit box.
364 - [core] Update library PHPExcel to version 1.7.6
365 - bug #3206876 [core] Work without mbstring installed.
366 - rfe #3196075, patch #3212068 [interface] Add links to variables documentation.
367 - bug #3208723 [import] Fix import of utf-8 XML files.
368 - bug #3039384 [auth] Force signon auth on signon URL change.
369 - bug #3168733 [core] Synchronization does not honor AllowArbitraryServer
370 - bug #3134495 [synchronization] Data containing single quotes prevents sync,
371   thanks to jviewer
372 - Remove the custom color picker feature
373 - bug #3285929 [privileges] Don't fail silently on missing priviledge to execute REVOKE ALL PRIVILEGES
375 3.3.11.0 (not yet released)
377 3.3.10.1 (2011-05-20)
378 - [security] XSS on Tracking page
380 3.3.10.0 (2011-03-19)
381 - patch #3147400 [structure] Aria table size printed as unknown,
382   thanks to erickoh75 - erickoh75
383 - patch #3150164 [structure] Ordering by size gives incorrect results,
384   thanks to Madhura Jayaratne - madhuracj 
385 - bug #3153409 [core] 0 row(s) affected 
386 - bug #3155842 [core] Edit relational page and page number
387 - [security] Minor security fixes, see PMASA-2010-9 and PMASA-2010-10
388 - [lang] German update, thanks to to jannicars@users.sourceforge.net.
390 3.3.9.2 (2011-02-11)
391 - [security] SQL injection, see PMASA-2011-2
393 3.3.9.1 (2011-02-08)
394 - [security] Path disclosure, see PMASA-2011-1
396 3.3.9.0 (2011-01-03)
397 - bug [doc] Fix references to MySQL doc
398 - patch #3101490 Default function for TIMESTAMP, thanks to jirand - jirand
399 - bug #3103853 [js] Double quotes were not escaped in generated js
400 - bug #3077463 [core] Events were not copied when copying/renaming database
401 - bug #1762306 [core] Copy database with view of a view
402 - patch #3117535 [replication] Add quotes to database in initial statement,
403   thanks to Craig Duncan - duncan3dc
404 - bug #3112614 [pdf schema] Scratchboard for PDF pages not working
405 - bug #3125606 [parser] Query for table "level" causes strange display
406 - bug #3127904 [parser] Close all opened round brackets indents
408          --- Older ChangeLogs can be found on our project website ---
409                      http://www.phpmyadmin.net/old-stuff/ChangeLogs/
411 # vim: et ts=4 sw=4 sts=4
412 # vim: ft=changelog fenc=utf-8
413 # vim: fde=getline(v\:lnum-1)=~'^\\s*$'&&getline(v\:lnum)=~'\\S'?'>1'\:1&&v\:lnum>4&&getline(v\:lnum)!~'^#'
414 # vim: fdn=1 fdm=expr