rmcilroy@chromium.org
f1f6d3095a
Fix deoptimization for out-of-line constant pool.
...
Ensure that the stack contains the correct constant pool pointer when a
function deopts.
This CL depends on https://codereview.chromium.org/183803022/ landing first.
R=ulan@chromium.org
Review URL: https://codereview.chromium.org/188063002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19940 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-03-14 15:11:58 +00:00
ulan@chromium.org
b9e0b87a5a
Clear optimized code cache in shared function info when code gets deoptimized.
...
This adds a pointer to the shared function info into deoptimization data of an optimized code. Whenever the code is deoptimized, it clears the cache in the shared function info.
This fixes the problem when the optimized function dies in new space GC before the code is deoptimized due to code dependency and before the optimized code cache is cleared in old space GC (see mjsunit/regress/regress-343609.js).
This partially reverts r19603 because we need to be able to evict specific code from the optimized code cache.
BUG=343609
LOG=Y
TEST=mjsunit/regress/regress-343609.js
R=yangguo@chromium.org
Review URL: https://codereview.chromium.org/184923002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19635 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-03-03 11:11:39 +00:00
jkummerow@chromium.org
85367a7db9
Fail early when re-entering code that has been patched for lazy deopt
...
R=ulan@chromium.org
Review URL: https://codereview.chromium.org/184373004
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19607 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2014-02-28 12:41:25 +00:00
ulan@chromium.org
21fb1401bd
Restore saved caller FP registers on stub failure
...
and preserve FP registers on NotifyStubFailure.
In debug mode, clobber FP registers on each runtime call to increase
chances of catching such bugs.
R=danno@chromium.org
Review URL: https://chromiumcodereview.appspot.com/78283002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18000 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-11-22 10:21:47 +00:00
mvstanton@chromium.org
9d6dddb9ae
Simplify behavior of code stubs that accept a variable number of stack
...
arguments in addition to their parameters. Before, we'd add a special
variable to the environment with the value of a register with the
number of arguments. Now, that register just appears as a parameter to
the code stub.
BUG=
R=verwaest@chromium.org
Review URL: https://codereview.chromium.org/70203002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17680 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-11-13 10:07:04 +00:00
mstarzinger@chromium.org
701417f955
Make stack_parameter_count a plain register.
...
R=rossberg@chromium.org , danno@chromium.org
Review URL: https://codereview.chromium.org/28993003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17275 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-10-18 14:55:21 +00:00
jkummerow@chromium.org
4e96d4dee6
Tweak Math.log on ia32/x64
...
ia32 and x64 more consistent now
1. use non-transcendental cache version of log for x64
2. use negative infinity constant instead of pushing to stack and loading to XMM register
3. remove movdbl, use movsd directly. movdbl seems confusing
BUG=
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/27197013
Patch from Weiliang Lin <weiliang.lin2@gmail.com>.
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17268 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-10-18 10:54:45 +00:00
olivf@chromium.org
66c610398f
Reland "Hydrogenisation of binops"
...
BUG=
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/25494007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17104 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-10-04 08:17:11 +00:00
olivf@chromium.org
9459ed3ab4
Revert "Hydrogenisation of binops"
...
This reverts r17052-17054 for various build breaks.
TBR=mstarzinger@chromium.org
BUG=
Review URL: https://codereview.chromium.org/25571002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17055 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-10-01 18:00:02 +00:00
olivf@chromium.org
7873f35eb2
Hydrogenisation of binops
...
BUG=
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/24072013
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17052 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-10-01 15:24:56 +00:00
yangguo@chromium.org
32ceb91735
Refactor back edge table related code into a new class.
...
This is mostly moving and renaming, except for the BackEdgeTableIterator.
Motivation is that the back edges in unoptimized code has nothing to do with the deoptimizer.
R=titzer@chromium.org
BUG=
Review URL: https://codereview.chromium.org/23526069
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16815 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-09-19 09:08:08 +00:00
titzer@chromium.org
49d9555a97
Generate a custom OSR entrypoint for OSR compiles on all platforms, and transition to optimized code using the special entrypoint, instead of through the deoptimizer. Do not install the OSR compiled code as _the_ optimized code for a function.
...
Remove OSR-related stuff from deoptimizer.
BUG=
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/21340002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16599 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-09-09 16:34:40 +00:00
yangguo@chromium.org
ecbfcd7e06
Turn interrupt and stack check into builtins.
...
R=jkummerow@chromium.org
BUG=
Review URL: https://codereview.chromium.org/23480013
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16444 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-08-30 11:24:58 +00:00
yangguo@chromium.org
b3cbe51f1c
Refactor interrupt check patching for OSR.
...
This is to prepare for speculative concurrent OSR. I'm planning to add
another builtin to patch to, to indicate a concurrent OSR.
R=titzer@chromium.org
BUG=
Review URL: https://codereview.chromium.org/23608004
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16425 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-08-29 13:06:04 +00:00
loislo@chromium.org
d2c443b774
Extract hardcoded error strings into a single place and replace them with enum.
...
I'd like to propagate bailout reason to cpu profiler.
So I need to save it into heap object SharedFunctionInfo.
But:
1) all bailout reason strings spread across all the sources.
2) they are native strings and if I convert them into String then I may have a performance issue.
3) one byte is enough for 184 bailout reasons. Otherwise we need 8 bytes for the pointer.
Also I think it would be nice to have error strings collected in one place.
In that case we will get additional benefits:
It allows us to keep this set of messages under control.
It gives us a chance to internationalize them.
It slightly reduces the binary footprint.
From the other hand the developers have to add new strings into that enum.
BUG=
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/20843012
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16024 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-08-02 09:53:11 +00:00
titzer@chromium.org
f612a29f8c
Factor out common code from platform-specific deoptimization. Fix Deoptimizer not to need to partition functions, but revoke their code before patching, allowing deoptimizing_code_list to be removed from Code; Add DeoptimizeCodeList API to deoptimizer, which works on a ZoneList<Code*>.
...
BUG=
R=mstarzinger@chromium.org , ulan@chromium.org
Review URL: https://codereview.chromium.org/19638014
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15854 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-07-24 11:12:17 +00:00
haitao.feng@intel.com
875fd8424b
Introduce kRegisterSize, kPCOnStackSize and kFPOnStackSize constants
...
BUG=None
R=danno@chromium.org
Review URL: https://codereview.chromium.org/19802002
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15829 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-07-23 13:46:10 +00:00
haitao.feng@intel.com
fa037d1602
Revert "Addressed danno's comments" and "Introduce kRegisterSize, kPCOnStackSize and kFPOnStackSize constants"
...
BUG=None
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/19483007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15824 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-07-23 13:30:44 +00:00
haitao.feng@intel.com
a9253143de
Introduce kRegisterSize, kPCOnStackSize and kFPOnStackSize constants
...
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15822 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-07-23 13:01:42 +00:00
titzer@chromium.org
2b9836af8c
Remove special-casing of EAGER and SOFT deoptimization calling conventions, allowing calling address to always be available to deoptimization entries.
...
BUG=
Review URL: https://codereview.chromium.org/18356008
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15640 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-07-12 07:26:00 +00:00
jkummerow@chromium.org
c7a9bffbcf
Clean up the usage of V8_TARGET_ARCH_${arch} and V8_HOST_ARCH_${arch}
...
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/18037002
Patch from Haitao Feng <haitao.feng@intel.com>.
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15391 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-06-28 15:34:48 +00:00
yangguo@chromium.org
7f8a3d803c
Make assertion scopes thread safe.
...
R=svenpanne@chromium.org
BUG=
Review URL: https://chromiumcodereview.appspot.com/15691017
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14919 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-06-03 15:32:22 +00:00
mstarzinger@chromium.org
80da843e22
Unify deoptimizer for JavaScript frames.
...
This unifies the translation of an optimized frame to a full JavaScript
frame. Only the frame's context and fp register as well as alignment
padding are different on each architecture and can be factored out.
R=svenpanne@chromium.org
Review URL: https://codereview.chromium.org/14843020
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14715 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-05-17 08:27:56 +00:00
svenpanne@chromium.org
a14adc418a
Cleaned up deopt output a bit.
...
Be a bit more consistent it what is printed. Removed the now superfluous
"*** DEOPT"-like output.
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/14612012
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14702 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-05-16 09:44:59 +00:00
danno@chromium.org
b65b6d735f
Ensure that soft-deopts don't count against opt_count
...
This makes sure that Crankshaft doesn't disable optimization to early on hot functions that still contain unexecuted code without type information.
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/14738009
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14658 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-05-14 11:45:33 +00:00
danno@chromium.org
ddd72aa14f
Only flush SharedFunctionInfo optimized code cache when necessary
...
R=mstarzinger@chromium.org
Review URL: https://codereview.chromium.org/14604007
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14650 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-05-13 19:22:18 +00:00
danno@chromium.org
cf1b80703f
Improve trace_opt output to help find compilation problems
...
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/14978003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14636 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-05-13 11:10:31 +00:00
yangguo@chromium.org
cd99870ee7
Refactor ExternalReference::isolate_address() to not rely on Isolate::Current().
...
R=svenpanne@chromium.org
BUG=
Review URL: https://chromiumcodereview.appspot.com/14429003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14400 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-04-24 07:39:35 +00:00
jkummerow@chromium.org
586c4e74b6
Replace OS::MemCopy with OS::MemMove (just as fast but more flexible).
...
Review URL: https://codereview.chromium.org/13932006
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14280 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-04-16 12:30:51 +00:00
yangguo@chromium.org
996a80df45
Fix OSR for nested loops.
...
R=jkummerow@chromium.org
BUG=v8:2618
Review URL: https://chromiumcodereview.appspot.com/13811014
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14202 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-04-10 09:24:31 +00:00
mstarzinger@chromium.org
0cfe1dce9e
Unify deoptimizer for stub failure trampoline frames.
...
This unifies the translation of a compiled stub frame to a stub failure
trampoline frame. Only the frame's register allocation is different on
each architecture and can be factored out.
R=danno@chromium.org
Review URL: https://codereview.chromium.org/12379045
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13887 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-03-08 16:18:50 +00:00
mstarzinger@chromium.org
2b7891c303
Unify deoptimizer for construct stub frames.
...
This unifies the translation of artificial construct stub frames. The
frame layout is almost the same on all architectures and only differs
in the presence of a slot holding the constructor function.
R=svenpanne@chromium.org
Review URL: https://codereview.chromium.org/12379042
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13843 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-03-06 16:12:24 +00:00
svenpanne@chromium.org
e4edbb0535
Cleaned up CpuFeature scope handling.
...
First of all, it has nothing to do with Isolates, it is related to the assembler
at hand. Furthermore, the saving/restoring is platform-independent. Cleaned up
some platform-specific stuff on the way.
Note that there are some things which still need some cleanup, like e.g. using
EnumSet instead of uint64_t, making Probe() more uniform across platforms etc.,
but the CL is already big enough.
BUG=v8:2487
Review URL: https://codereview.chromium.org/12391055
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13823 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-03-05 10:48:16 +00:00
mstarzinger@chromium.org
05f1be1bb3
Unify deoptimizer for accessor and arguments frames.
...
This unifies the translation of artificial accessor stub and arguments
adaptor frames. The frame layout is the same on all architectures and
the computation code can be shared.
R=svenpanne@chromium.org
Review URL: https://codereview.chromium.org/12374044
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13784 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-03-01 12:23:24 +00:00
svenpanne@chromium.org
bfaf38d2fd
Miscellaneous profile-driven Isolate plumbing.
...
While doing this, it became clear that quite a few functions should not be
static and should better live in various classes as instance methods, but I'll
leave this for a later CL.
BUG=v8:2487
Review URL: https://codereview.chromium.org/12314152
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13765 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-02-27 14:45:59 +00:00
mstarzinger@chromium.org
7d681e014d
Compile FastCloneShallowObjectStub using Crankshaft.
...
This changes FastCloneShallowObjectStub to be compiled independent of
the target architecture. It also adds tracing to the deoptimizer for
compiled stubs and contains some minor bugfixes.
R=danno@chromium.org
Review URL: https://codereview.chromium.org/12220074
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13732 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-02-26 13:08:08 +00:00
ulan@chromium.org
61bb1b78d3
Remove bogus check for TOP register in deoptimizer.
...
R=danno@chromium.org
BUG=176943
Review URL: https://chromiumcodereview.appspot.com/12300020
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13690 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-02-19 12:37:19 +00:00
danno@chromium.org
940b65160a
Add separate flag for --trace-stub-failures
...
R=svenpanne@chromium.org
Review URL: https://codereview.chromium.org/12208011
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13598 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-02-05 16:28:36 +00:00
danno@chromium.org
4c052815df
Support pass-through of stub caller arguments
...
Review URL: https://codereview.chromium.org/12093089
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13593 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-02-05 08:09:32 +00:00
danno@chromium.org
0c3575c874
Generate the TransitionElementsStub using Crankshaft
...
This includes:
* Adding support for saving callee-clobbered double registers in Crankshaft code.
* Adding a new "HTrapAllocationMemento" hydrogen instruction to handle AllocationSiteInfo data in crankshafted stubs.
* Adding a new "HAllocate" hydrogen instruction that can allocate raw memory from the GC in crankshafted code.
* Support for manipulation of the hole in HChange instructions for Crankshafted stubs.
* Utility routines to manually build loops and if statements containing hydrogen code.
Review URL: https://codereview.chromium.org/11659022
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13585 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-02-04 12:01:59 +00:00
danno@chromium.org
a6bc16b6f3
Add StubFailureTrampolineFrames
...
In preparation of supporting stubs that deopt and then need to push their
register-based parameters to an arguments area on the stack that gets properly
collected, add StubFailureTrampolineFrames to hold those parameters.
R=mstarzinger@chromium.org
Review URL: https://chromiumcodereview.appspot.com/12052053
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13533 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-01-29 09:12:20 +00:00
ulan@chromium.org
07c60c2dac
Check that FPU TOP register is zero and clear all exceptions instead of using fninit,
...
which causes performance regression on Windows.
BUG=168370
R=danno@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11962015
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13401 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-01-16 14:54:19 +00:00
danno@chromium.org
13db297761
Fix nosse2 crash introduced by r13320
...
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/11788030
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13335 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-01-08 16:21:39 +00:00
danno@chromium.org
4246ac3009
Generalize calling to C++ on stub deopt
...
Remove code specific to KeyedLoadICs in DoCompiledStubFrame on all platforms, driving stub frame translation by the register parameter information found in a stub's CodeStubInterfaceDescriptor.
Review URL: https://codereview.chromium.org/11635015
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13320 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-01-07 10:06:11 +00:00
ulan@chromium.org
0606abbaab
Rename RelocInfo::NONE to RelocInfo::NONE32.
...
This CL only does renaming, nothing else.
Followup to:
https://chromiumcodereview.appspot.com/11695006/
There are now NONE and NONE64 RelocInfo types, but only ARM uses them
both at the same time. They were added in:
https://chromiumcodereview.appspot.com/11191029/
R= ulan@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11744020
Patch from JF Bastien <jfb@chromium.org>.
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13311 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2013-01-04 10:56:24 +00:00
danno@chromium.org
1f4b4625ff
Re-land Crankshaft-generated KeyedLoad stubs.
...
R=jkummerow@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11528003
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13236 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2012-12-18 16:25:45 +00:00
ulan@chromium.org
6e12a16aac
Use a filter instead of a visitor to deoptimize selected functions in a context.
...
This makes the DeoptimizeAll function O(n) instead of O(n^2) where n in the number of optimized functions.
Before this change, DeoptimizeAll iterated over the optimized function list and called DeoptimizingVisitor for each function. The visitor iterated over the optimized function list again to remove the functions that share the same optimized code.
This change partitions the optimized function list into one or more lists of related functions in one pass over the optimized function list.
R=mstarzinger@chromium.org
Review URL: https://chromiumcodereview.appspot.com/11547015
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13226 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2012-12-17 10:23:52 +00:00
danno@chromium.org
64fc1f99cb
Revert 13157, 13145 and 13140: Crankshaft code stubs.
...
R=jkummerow@chromium.org
Review URL: https://codereview.chromium.org/11498006
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13179 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2012-12-10 11:09:12 +00:00
svenpanne@chromium.org
17def81fc9
Use count-based profiling exclusively.
...
Review URL: https://codereview.chromium.org/11437016
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13158 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2012-12-07 08:55:06 +00:00
danno@chromium.org
84f2454eac
Fix isolate bug introduced by generated code stubs
...
Review URL: https://codereview.chromium.org/11441013
git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13145 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
2012-12-05 16:16:32 +00:00