Commit Graph
100 Commits
Author SHA1 Message Date
Oliver Tappe 60f75e901c Merge liblocale.so into libbe.so.
* Make the locale kit a part of libbe.
* Drop the LocaleBackend kludge used from within libbe (and from
  other places, too) in order to access system catalog strings. 
  This is now done via gSystemCatalog, which is provided and initialized
  by libbe.
* Drop all references to liblocale.so from all Jamfiles.
* Add legacy symlink liblocale.so in order to keep optional packages
  that rely on it in a working state.

TODO: the documentation hasn't been updated.
2012-04-04 22:44:42 +02:00
Oliver Tappe 94cefc8f79 Fix target folder of libgutenberg data.
* as pointed out by diver: libgutenberg has been configured to
  expect its data files in /system/data, but we used to install them
  into common.
This way, the Gutenberg printer add-on actually shows some printers.
2012-04-01 18:47:16 +02:00
Oliver Tappe ee374beebf Reset ICU converter pointer after closing it.
* The pointer to the ICU converter that's kept in TLS needs to be
  reset (to NULL) immediately after closing it, as opening a new
  container may fail, leaving a dangling pointer to a now closed
  container in the TLS value.

Fixes #8361 & the userland cause of #8430.
2012-04-01 17:38:44 +02:00
Oliver Tappe a91e17db42 Cleanup: drop unused implementation file. 2012-04-01 17:22:59 +02:00
Oliver Tappe c9ce04c45e Fix warnings about MB_LEN_MAX being redefined.
* in our limits.h, move #include_next of GCC's limits.h to the end such
  that things defined in it will not disturb our own definitions
2012-02-26 22:45:16 +01:00
Oliver Tappe d9dc0dda43 Fix #8350: clockconfig has to use the current offset from GMT.
* instead of re-applying the fixed offset that had been set when the
  Time preflet was used last, use the stored timezone name in
  clockconfig in order to determine the current GMT-offset for that
  timezone
* clockconfig now requires liblocale.so
* drop the offset field from the settings as it is no longer used,
  clockconfig was the only client
* automatic whitespace cleanup
2012-02-26 19:07:29 +01:00
Oliver Tappe 0437cdba8f Cleanup: whitespace- and line-width-related adjustments. 2012-02-26 19:07:29 +01:00
Oliver Tappe d88a361cc9 Cleanup: fix typo. 2012-02-26 19:07:29 +01:00
Oliver Tappe dd7b8fc454 Cleanup: correct typo, bump copyright and adjust formatting. 2012-02-26 19:07:29 +01:00
Oliver Tappe e1aba79288 Activate locale settings in Deskbar & Time preflet.
* Both Deskbar and Time are using BCalendarView, which in turn uses
  DateTime, which uses strftime() to generate month/day names. Of
  course, this doesn't work as intended unless the locale has been
  initialized.
2012-02-23 23:15:37 +01:00
Oliver Tappe c4389ee8b2 Add setting of LC_* env-vars to SetupEnvironment.
* setting those environment variables in SetupEnvironment makes them
  available to applications started during system boot (like Deskbar
  and Tracker)
2012-02-23 23:15:37 +01:00
Oliver Tappe 98057dd02a Adjust /bin/locale to print time-related locale, too.
* add support for printing the time-related locale (which may contain
  a '@strings=messages' suffix if required by locale configuration
* adjust cmdline params of /bin/locale to be a bit clearer (but keep
  support for -c for compatibility)
* adjust /etc/profile to invoke /bin/locale accordingly
2012-02-23 23:15:36 +01:00
Oliver Tappe ec17468f63 Allow switching of timezone string to messages locale, too.
* adjust POSIX locale backend to redirect the timezone string
  through the messages/time-locale indirection
2012-02-23 23:15:36 +01:00
Oliver Tappe 1e1278f46f Implement taking date strings from messages locale.
* mimic LocaleKit and add option to POSIX locale backend for taking
  the date strings from the messages locale (instead of time locale)
2012-02-23 23:15:36 +01:00
Oliver Tappe 93efe98ec2 Cleanup: respect line-width limit. 2012-02-23 23:15:35 +01:00
Oliver Tappe cefa27bf82 Cleanup: fix a couple of styleguide violations. 2012-02-23 23:15:35 +01:00
Oliver Tappe 0bbc9d0e04 Remove some more glibc-files that are not required. 2012-02-07 22:32:19 +01:00
Oliver Tappe be601bbbcc Show correct text in fwide_test. 2012-02-07 22:31:23 +01:00
Oliver Tappe 86beacd179 Drop as much of gconv as possible. 2012-02-07 21:43:02 +01:00
Oliver Tappe 2370b92e15 Drop all unneeded gconv converters.
* implement wchar->multibyte & multibyte->wchar conversions, make those
  the default converters and drop all others (except for ascii)
2012-02-07 21:43:02 +01:00
Oliver Tappe 99916f57cc Adjust yet another version of mbstate_t in glibc:
* yuck, glibc uses yet another version of mbstate_t (__c_mbstate_t),
  adjusting this to match the other glibc-internal version (__mbstate_t)
  fixes another crash triggered by fwide_test.
2012-02-07 21:43:02 +01:00
Oliver Tappe 40135926f9 Adjust glibc's definition of mbstate_t
* instead of unification, we now keep both our and glibc's fields
  separate in order to allow for both our code and glibc's to use
  such a struct at the same time (independently)
2012-02-07 21:43:02 +01:00
Oliver Tappe 0d03f689b2 Fix crash in fwide():
* _IO_USER_BUF was being used to indicate a user-owned buffer without
  taking into account that there are two of those: one for the normal
  and another one for the wide version of a stream. Backport
  _IO_FLAGS2_USER_WBUF from current glibc version to fix that.
2012-02-07 21:43:01 +01:00
Oliver Tappe b3482508b4 Add tests with active locale to fwide_test. 2012-02-07 21:43:01 +01:00
Oliver Tappe c824d9d6ed Add test for fwide() and wide/non-wide streams. 2012-02-07 21:43:01 +01:00
Oliver Tappe e01182d02f Use correct ctype-locale for wcsftime()
* wcsftime invokes strftime and then converts the resulting string
  internally, so it relies on the correct ctype locale being active
* minor style cleanup
2012-02-07 21:43:01 +01:00
Oliver Tappe 2358eacd46 Add test for string formatting with sprintf() and swprintf(). 2012-02-07 21:43:00 +01:00
Oliver Tappe 752527a8fe Cleanup: correct variable name in mbrtowc() signature. 2012-02-07 21:43:00 +01:00
Oliver Tappe 174676503b Drop now unneeded glibc wchar-files (plus others). 2012-01-07 22:03:24 +01:00
Oliver Tappe b7417fbec1 Switch wchar from glibc to our own implementations. 2012-01-07 22:02:48 +01:00
Oliver Tappe 7efc2e3a0e Add our own implementations for all wchar.h functions.
* add implementation for wcpcpy(), wcpncpy(), wcscasecmp(), wcscat(),
  wcschr(), wcscmp(), wcscpy(), wcscspn(), wcsdup(), wcslcat(),
  wcslcpy(), wcslen(), wcsncasecmp(), wcsncat(), wcsncmp(), wcsncpy(),
  wcsnlen(), wcspbrk(), wcsrchr(), wcsspn(), wcsstr(), wcstok(),
  wmemchr(), wmemcmp(), wmemcpy(), wmemmove(), wmemset
* add implementations for GNU-extensions used by our glibc and some
  other programs/libs: wcschrnul(), wmempcpy()
* add stub for wcsftime()
2012-01-07 22:01:40 +01:00
Oliver Tappe d8ef8ef48b Add wcs_test, a testsuite for all wchar-related functions. 2012-01-07 21:59:28 +01:00
Oliver Tappe d7965519f2 Cleanup: LocaleBackend.h is not a local header for wchar. 2012-01-07 21:48:39 +01:00
Oliver Tappe bd55dcbefb Add our implementation for wcscoll() and wcsxfrm().
* add Wcscoll() and Wcsxfrm() ICU locale backend
* provide implementations of wcscoll() and wcsxfrm() that are using
  the respective methods of the locale backend
2012-01-07 21:47:31 +01:00
Oliver Tappe 3d438b9605 Fix collation-related part of locale_test.
* don't try to compute the size of an array passed in as parameter,
  but use end markers instead
* use fr_CA instead of fr_FR when testing reverse collation of secondary
  differences (fr_FR doesn't do that by default anymore)
2011-12-27 23:34:08 +01:00
Oliver Tappe 9cb0187a4f Adjust locale_test expectations to current ICU-data. 2011-12-27 14:16:16 +01:00
Oliver Tappe d68d73f7a6 Improve timezone names returned by BTimeZone.
* Use TimeZone::SHORT specifier instead of SHORT_COMMONLY_USED, since
  the former yields more appropriate (textual) values. Strangely enough,
  it used to be the other way around, which is why we didn't used SHORT
  in the past.
2011-12-27 14:15:21 +01:00
Oliver Tappe f4995c1381 Improve timezone names returned by POSIX functions.
* Use TimeZone::SHORT specifier instead of SHORT_COMMONLY_USED, since
  the former yields more appropriate (textual) values. Strangely enough,
  it used to be the other way around, which is why we didn't used SHORT
  in the past.
2011-12-27 14:14:55 +01:00
Oliver Tappe bb6b6a1504 Correct explicitly created symlinks for ICU-devel package
* skip the right amount of extensions until the actual abi version
  is reached
2011-12-20 21:59:33 +01:00
Oliver Tappe 63ffb518f8 Update icu-devel packages again, as they were broken. 2011-12-20 00:29:58 +01:00
Oliver Tappe 2ba22cc36a Fix crash of AboutSystem on gcc4.
* Glibc declares and uses its own version of mbstate_t, which is
  incompatibly with our own. Mix our own fields into glibc's
  mbstate_t, such that the two structs are compatible.
2011-12-19 18:49:16 +01:00
Oliver Tappe e94fa361f3 Fix #8098 (icu-devel breaking current abi symlink)
* provide separate icu-devel packages for x86/gcc{2,4} and ppc, in
  order to bypass problems with this package trying to make use of
  the /boot/develop/abi/current symlink.
2011-12-19 11:46:15 +01:00
Oliver Tappe 8ad8d2e5d2 Activate -Werror for POSIX locale backend and the code using it. 2011-12-15 13:26:45 +01:00
Oliver Tappe 7016aa1a90 Reactivate mbsrtowcs() tests, as those do work, now. 2011-12-15 13:22:20 +01:00
Oliver Tappe ec99f3b2a6 Adjust mbstate_t to embed the state of the ICU converter.
* make room in mbstate_t for containing an ICU-converter's state
  (well, in fact the whole converter object)
* adjust libroot's locale add-on to clone converters into a given
  mbstate_t directly
* adjust ICUThreadLocalStorageValue to contain the converter pointer
  instead of a converter-ID (if the converter is related to an
  mbstate_t, it points into the mbstate_t).
* adjust users of converters to directly use converter pointers
  instead of ICUConverterRef
* drop now unused ICUConverterManager and ICUConverterRef
* update gcc4 optional package

This brings our multibyte implementation into a fully working state,
both non-ascii and non-8-bit characters can now be handled normally
in the Terminal, i.e. this finally fixes #6276.

N.B.: Since the size of mbstate_t has changed, everything (including
the compiler!) needs to be rebuilt.
2011-12-15 13:18:11 +01:00
Oliver Tappe 8726c67f5e Add test for use case found in readline (used by bash).
* making a backup copy of an mbstate_t and then later restoring the
  original should allow to re-use the internal converter state
2011-12-15 13:18:11 +01:00
Oliver Tappe 05260c25c2 Fix build warnings with gcc4. 2011-12-15 13:18:10 +01:00
Oliver Tappe 5de93d5b1f Adjust libroot to invoke internal (__...) mbs-functions. 2011-12-12 17:27:44 +01:00
Oliver Tappe 8703b5fdf5 Fix gcc4-build and handling of src-pointer upon error.
* the reference to MB_CUR_MAX requires stdlib.h
* if an conversion error occurs, the returned src pointer must point to
  the character that triggered the error
2011-12-12 17:27:44 +01:00
Oliver Tappe 70dda8d85a Fix POSIX-specific mbsrtowcs() and wcsrtombs().
* src was sometimes accessed incorrectly (needs double dereference)
* the source pointers may only be adjusted in case there is the
  destination pointer is not NULL
2011-12-12 17:27:43 +01:00
Oliver Tappe 8057318361 Added tests, exposing problems in wcsrtombs() and mbsrtowcs(). 2011-12-12 17:27:43 +01:00
Oliver Tappe 0ad71bca30 Simplify wcrtomb() wrapper.
* since the backend now supports it, we can safely pass NULL as s
  to the backend
2011-12-12 17:27:43 +01:00
Oliver Tappe 47e0423a09 Drop public symbols for mbsnrtowcs() and wcsnrtombs().
We only implement POSIX_VERSION 199009, so these needn't be exported.
2011-12-12 17:27:43 +01:00
Oliver Tappe 0cf89c88d3 Activate our own wcs*tombs()-functions.
* add our own version of these functions to the build
* drop the glibc implementations of those functions
2011-12-12 17:27:42 +01:00
Oliver Tappe 995d6d827f Implement our own version of wcsrtombs().
* add WcharStringToMultibyte() to libroot's locale backend
* implement wcstombs(), wcsrtombs() and wcsnrtombs() on top of that
  new backend function
2011-12-12 17:27:42 +01:00
Oliver Tappe 5dd04ce5da Add tests for missing mbs/wcs-functions.
* add gnulib test for wcsrtombs()
* add gnulib tests for mbsnrtowcs() and wcsnrtombs(), both inactive
  as the respective functions are not publically available (they are
  part of the [CX] extended ISO-C standard which we do not yet support)
2011-12-12 17:27:42 +01:00
Oliver Tappe b8b6531011 Add implementation for mbstowcs().
* implement mbstowcs() on top of mbsrtowcs()
* drop glibc's version of mbstowcs()
2011-12-12 17:27:42 +01:00
Oliver Tappe 758e5e7dcd Drop a couple of mbsrtowcs() tests that can't work on Haiku.
* Our mbstate_t just references a corresponding ICU converter, but
  does not actually contain its state. So a mere copying of the mbstate
  won't duplicate the converter's intrinsic state, which means that
  restarting with the copied state won't work.
  If have experimented with cloning the converter into the mbstate_t,
  but I was unable to get that to work, either. Apparently, the state
  of the converter isn't cloned (but just the converter's settings
  and data).
2011-12-12 17:27:41 +01:00
Oliver Tappe 73186b2fcd Add implementation of mbsrtowcs() to our locale backend.
* add MultibyteStringToWchar() to ICU locale backend
* implement mbsrtowcs() and mbsnrtowcs() on top of 
  MultibyteStringToWchar()
* drop respective glibc files
2011-12-12 17:27:41 +01:00
Oliver Tappe d0e7bc307c Reset ICU-converter in case of error. 2011-12-12 17:27:41 +01:00
Oliver Tappe cfe553b378 Squash TODO: __STDC_ISO_10646__ is being defined now. 2011-12-12 17:27:41 +01:00
Oliver Tappe cf13327bef Whitespace cleanup. 2011-12-12 17:27:40 +01:00
Oliver Tappe 0983c476d9 Add gnulib-test-mbsrtowcs.c in order to test mbsrtowcs()
* the test exposes problems in our current (glibc's) implementation
  of mbsrtowcs()
2011-12-12 17:27:40 +01:00
Oliver Tappe e7be020ce5 Adjust GetBuildFile() to use correct cgit-URL. 2011-12-01 15:45:48 +01:00
Oliver Tappe 3032f55d28 Fix #8167: create compatibility symlink in /boot/home/config/be
* instead of in /boot/home/config/settings/be, the compatibility
  link has to live directly in the config folder, as otherwise
  it doesn't help compatibility-wise at all ;-)
2011-12-01 10:39:32 +01:00
Oliver Tappe 692e9b11e4 Build fix part 2: active libroot_build.a again:
* uncomment the building of libroot_build.a again
* add function remapper to HOST_STATIC_LIBROOT
* drop TODO about the function remapper not working with the static
  libroot

Ingo: please review - I think this should work, but I'm not so sure
where HOST_STATIC_LIBROOT should be in the list of libraries of its
only user (<build>bfs_fuse): where it is now or right at the end?

As it is now, the resulting binary still contains references to
host-libc-implementations of close() & others, which are triggered by
the other libs (like libfuse.so). If I put HOST_STATIC_LIBROOT right at
the end, those references are gone, though. But which is correct?
2011-11-25 22:04:51 +01:00
Oliver Tappe 8cdc273ad3 Build fix part 1: update generic fs-attr code 2011-11-25 21:56:27 +01:00
Oliver Tappe 323b65468e Filtered flat import of Oliver's svn package management branch
Bring the changes that aren't package management related and the ones
that are but don't take effect as long as they are ignored by the build
system into the master.

Summary of changes:
* Introduce private header <directories.h> with constants for a good
  deal of paths that should usually be retrieved via find_directory().
* Replace hard-coded paths by using find_directory() or the
  <directories.h> constants (e.g. in drivers and the kernel).
* Add find_directory() constants needed for package management.
* Add __HAIKU_ABI_NAME and B_HAIKU_ABI_NAME macros.
* src/apps/deskbar: BeMenu.* -> DeskbarMenu.*,
  DeskBarUtils.* -> DeskbarUtils.*
* Change deskbar menu settings directory from ~/config/be to
  ~/config/settings/deskbar.
* Other smaller cleanups, changes, and fixes.
2011-11-25 06:17:07 +01:00
Oliver Tappe 8fd51c0819 Use ErrnoMaintainer in setlocale() to protect errno.
* this avoids spurious errno changes leaking into application code,
  which could become confused - i.e. 'rm' on a gcc4 build would always
  prompt for confirmation

I spend a couple of hours hunting down the behavioural difference
between gcc2- and gcc4-builds and it turns out that the reason for that
is that gcc4's libstdc++-code initializes its own locale data via the
POSIX calls, which trigger (correct) errno value changes, which were the
ones leaking into application code.
2011-11-24 23:48:19 +01:00
Oliver Tappe 59e43b2ac9 Add tracing to some locale backend functions. 2011-11-24 23:48:18 +01:00
Oliver Tappe ae90193596 Introduce __set_errno() throughout libroot.
* add errno_private.h, which defines the __set_errno() macro with
  and without tracing
* instead of setting errno manually, all libroot's code now invokes
  __set_errno(), which makes it much easier to trace changes to errno
* redirect glibc's use of __set_errno() to our own version
2011-11-24 23:48:18 +01:00
Oliver Tappe 1f84898190 Let ErrnoMaintainer restore errno unconditionally.
* we never want to let ICU calls change the errno at all, so we always
  restore it to the value it had before entering ICU (not just if it
  was 0)
2011-11-24 23:48:18 +01:00
Oliver Tappe 210361191d Update gcc4 optional package. 2011-11-24 00:26:10 +01:00
Oliver Tappe c33232c167 Update optional gcc2 package. 2011-11-23 20:19:33 +01:00
Oliver Tappe c894d1868e Bring rewritten multibyte-support into repository.
* update copyrights of locale backend files

Multibyte-support has been rewritten to use ICU as backend.
While this does not necessarily work properly in every aspect
(e.g. the shell still has [different] problems with multibyte-
characters now), it does fix #6263 and #7700.
2011-11-23 19:55:34 +01:00
Oliver Tappe 53c09cffcb Actually store & use our assigned TLS-key (OOPS!) 2011-11-23 19:32:17 +01:00
Oliver Tappe 5c112a16ff Reset mbstate to initial in wcrtomb() with 0 wchar. 2011-11-23 19:31:13 +01:00
Oliver Tappe cdb7744bc7 Avoid warning about missing math.h.
* Apparently caused by the fact that we no longer run fixincludes,
  math.h is not being generated anymore. I haven't removed the rm
  from the script in order to be compatible with older compilers.
2011-11-23 17:02:23 +01:00
Oliver Tappe 9161a59746 Fix build of libroot-addon-icu with gcc4. 2011-11-22 23:27:17 +01:00
Oliver Tappe 25389523bd Touch c-gperf.h before building legacy gcc. 2011-11-22 22:28:09 +01:00
Oliver Tappe c51014771d Adjust required legacy gcc version. 2011-11-22 19:00:22 +01:00
Oliver Tappe bb79d18614 Drop no longer needed multibyte stuff from glibc. 2011-11-22 18:56:41 +01:00
Oliver Tappe b4435552a7 Drop our old, limited multibyte implementation. 2011-11-22 18:38:43 +01:00
Oliver Tappe cc5eca7554 Activate our new multibyte implementation.
* add implementations for the following multibyte-related
  functions:
    btwoc()
    mblen()
    mbrlen()
    mbrtowc()
    mbsinit()
    mbtowc()
    wcrtomb()
    wcswidth()
    wctob()
    wctomb()
* the implementation of the above function live in a symbol
  named __<name>, the above symbol names are defined as a weak
  alias to the internal ones - TODO: we need to make sure to
  only invoked the internal functions (i.e. prepended with __)
  in order to avoid problems with symbol preemption.
* deactivate the limited mb implementation we provided before,
  as well as respective stuff from glibc
2011-11-22 18:31:27 +01:00
Oliver Tappe 32a04e8721 Formatting cleanup of B_DEFINE_WEAK_ALIAS macro.
* This doesn't necessarily belong here, but we're going to make use
  of it in the next changeset. Additionally, this change to BeBuild.h
  will trigger a rebuild of nearly all files, and applying it during
  the multibyte-related work will skip another full rebuild ...
2011-11-22 18:19:28 +01:00
Oliver Tappe 28ae43d033 Add multibyte-support to ctype-locale backend.
* add actual converter methods MultibyteToWchar() and WcharToMultibyte()
  to locale backend and implement them in the ctype subpart
* add management code for maintaining converters referenced by mbstate_t
2011-11-22 18:17:58 +01:00
Oliver Tappe 0f21cf0ca0 Define MB_LEN_MAX to 16.
* we follow glibc's example and allow 16 bytes as maximum multibyte
  character length (ICU's data currently shows an actual maximum
  of 8 bytes)
2011-11-22 17:40:45 +01:00
Oliver Tappe e0eb1d38c4 Let MB_CUR_LEN lookup the actual value.
* instead of yielding 1, MB_CUR_LEN now looks up the correct
  value in the ctype data provided by the locale backend
2011-11-22 17:32:39 +01:00
Oliver Tappe fa02fc6907 Adjust mbstate_t to what we need.
* we maintain the character count and the ID of the corresponding
  ICU converter in mbstate_t
2011-11-22 17:23:04 +01:00
Oliver Tappe bf5ff48092 Use TLS and converter manager in locale backend. 2011-11-22 17:17:18 +01:00
Oliver Tappe bcadc4ca66 Start work on multibyte-support in locale backend.
* add ICUThreadLocaleStorageValue, which will be used to maintain
  per-thread ICU converters
* add ICUConverterManager
2011-11-22 16:55:39 +01:00
Oliver Tappe 02606f712c Provide BReferenceable in libreferenceable.a, too.
* the upcoming multibyte-implementation in libroot's ICU locale
  backend is going to use this, so it's not good enough to provide
  BReferenceable only in libbe.so
2011-11-22 16:43:53 +01:00
Oliver Tappe 3a57f54e4d Glibc-features: protect against existing __STDC_ISO_10646__.
* we define it in our compilers now, but glibc expects to define
  this itself - we let our own version overrule
2011-11-22 16:34:18 +01:00
Oliver Tappe 489c0689ec Fix typo in build_cross_tools. 2011-11-22 16:21:06 +01:00
Oliver Tappe fc4fa46848 Fix charset and drop debug output in gnulib-test-btwoc. 2011-11-22 16:21:03 +01:00
Oliver Tappe a1721a7c30 Remove superfluous link to changelog.txt of bonnie++ testsuite.
* Eclipse's Git-plugin chokes on symlinks, and since this is the
  only one in our repo and it isn't needed at all, it has to go
2011-11-19 13:27:30 +01:00
Oliver Tappe e67294d567 Update ReadMe to reflect our switch to Git. 2011-11-12 15:02:42 +01:00
Oliver Tappe acbd89984d Add more tests for wchar/multibyte converter functions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43091 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 00:10:54 +00:00
Oliver Tappe 3063b5a05e Add private headers for internal versions of wchar/multibye-functions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43090 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 00:09:52 +00:00
Oliver Tappe 3cb4f94295 Add macro to BeBuild.h for declaring a weak alias.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43089 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 00:06:53 +00:00