Bug 279874

Summary: reqkonq on Debian Sid consistently crashes when I visit https://ssl.scroogle.org
Product: [Unmaintained] rekonq Reporter: bicave
Component: generalAssignee: Andrea Diamantini <adjam7>
Status: RESOLVED DUPLICATE    
Severity: crash    
Priority: NOR    
Version: 0.7.0   
Target Milestone: ---   
Platform: Debian unstable   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description bicave 2011-08-11 10:18:17 UTC
Application: rekonq (0.7.0)
KDE Platform Version: 4.6.5 (4.6.5)
Qt Version: 4.7.3
Operating System: Linux 3.0.1 i686
Distribution: Debian GNU/Linux unstable (sid)

-- Information about the crash:
As the bug title explains, whenever I attempt to visit https://ssl.scroogle.org using
rekonq on my up-to-date Debian Sid computer, rekonq crashes with the attached
backtrace.

The crash can be reproduced every time.

-- Backtrace:
Application: rekonq (rekonq), signal: Segmentation fault
[Current thread is 1 (Thread 0xb2da3940 (LWP 24225))]

Thread 6 (Thread 0xb282bb70 (LWP 24226)):
#0  0xb76e8822 in ?? () from /lib/ld-linux.so.2
#1  0xb7517f86 in poll () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
#2  0xb38c7f5b in g_poll (fds=0x96c6bc8, nfds=1, timeout=-1) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gpoll.c:132
#3  0xb38b796f in g_main_context_poll (context=0x96c60e8, block=1, dispatch=1, self=<value optimized out>) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:3404
#4  g_main_context_iterate (context=0x96c60e8, block=1, dispatch=1, self=<value optimized out>) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:3086
#5  0xb38b80f3 in g_main_loop_run (loop=0x96c60d8) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:3299
#6  0xb2968274 in gdbus_shared_thread_func (data=0x0) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./gio/gdbusprivate.c:276
#7  0xb38e0b6f in g_thread_create_proxy (data=0x96c6178) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gthread.c:1897
#8  0xb4220c39 in start_thread () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#9  0xb752596e in clone () from /lib/i386-linux-gnu/i686/cmov/libc.so.6

Thread 5 (Thread 0xafc60b70 (LWP 24227)):
#0  0xb76e8822 in ?? () from /lib/ld-linux.so.2
#1  0xb422520a in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#2  0xb7532a5d in pthread_cond_wait () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
#3  0xb6ba751b in WTF::TCMalloc_PageHeap::scavengerThread (this=0xb71c0da0) at wtf/FastMalloc.cpp:2380
#4  0xb6ba763f in WTF::TCMalloc_PageHeap::runScavengerThread (context=0xb71c0da0) at wtf/FastMalloc.cpp:1501
#5  0xb4220c39 in start_thread () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#6  0xb752596e in clone () from /lib/i386-linux-gnu/i686/cmov/libc.so.6

Thread 4 (Thread 0xaf267b70 (LWP 24228)):
#0  0xb76e8822 in ?? () from /lib/ld-linux.so.2
#1  0xb422520a in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#2  0xb7532a5d in pthread_cond_wait () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
#3  0xb7347cc9 in ?? () from /usr/lib/libQtScript.so.4
#4  0xb7347d0f in ?? () from /usr/lib/libQtScript.so.4
#5  0xb4220c39 in start_thread () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#6  0xb752596e in clone () from /lib/i386-linux-gnu/i686/cmov/libc.so.6

Thread 3 (Thread 0xae74eb70 (LWP 24229)):
#0  0xb76e8822 in ?? () from /lib/ld-linux.so.2
#1  0xb422520a in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#2  0xb7532a5d in pthread_cond_wait () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
#3  0xb4394a10 in wait (this=0x975fff0, mutex=0x976d980, time=4294967295) at thread/qwaitcondition_unix.cpp:88
#4  QWaitCondition::wait (this=0x975fff0, mutex=0x976d980, time=4294967295) at thread/qwaitcondition_unix.cpp:160
#5  0xb55af246 in ThreadWeaver::WeaverImpl::blockThreadUntilJobsAreBeingAssigned (this=0x975ffd8, th=0x98c98b0) at ../../../threadweaver/Weaver/WeaverImpl.cpp:365
#6  0xb55b1d3b in ThreadWeaver::WorkingHardState::waitForAvailableJob (this=0x977f108, th=0x98c98b0) at ../../../threadweaver/Weaver/WorkingHardState.cpp:80
#7  0xb55aee7a in ThreadWeaver::WeaverImpl::waitForAvailableJob (this=0x975ffd8, th=0x98c98b0) at ../../../threadweaver/Weaver/WeaverImpl.cpp:356
#8  0xb55b1e3c in ThreadWeaver::WorkingHardState::applyForWork (this=0x977f108, th=0x98c98b0) at ../../../threadweaver/Weaver/WorkingHardState.cpp:71
#9  0xb55aedd3 in ThreadWeaver::WeaverImpl::applyForWork (this=0x975ffd8, th=0x98c98b0, previous=0x98b6860) at ../../../threadweaver/Weaver/WeaverImpl.cpp:351
#10 0xb55b0974 in ThreadWeaver::ThreadRunHelper::run (this=0xae74e304, parent=0x975ffd8, th=0x98c98b0) at ../../../threadweaver/Weaver/Thread.cpp:87
#11 0xb55b0a2a in ThreadWeaver::Thread::run (this=0x98c98b0) at ../../../threadweaver/Weaver/Thread.cpp:142
#12 0xb4394503 in QThreadPrivate::start (arg=0x98c98b0) at thread/qthread_unix.cpp:320
#13 0xb4220c39 in start_thread () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#14 0xb752596e in clone () from /lib/i386-linux-gnu/i686/cmov/libc.so.6

Thread 2 (Thread 0xa35b3b70 (LWP 24230)):
#0  0xb76e8822 in ?? () from /lib/ld-linux.so.2
#1  0xb4225703 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#2  0xb7532ab4 in pthread_cond_timedwait () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
#3  0xb439499e in wait (this=0x9b4b65c, mutex=0x9b4b658, time=30000) at thread/qwaitcondition_unix.cpp:86
#4  QWaitCondition::wait (this=0x9b4b65c, mutex=0x9b4b658, time=30000) at thread/qwaitcondition_unix.cpp:160
#5  0xb4387884 in QThreadPoolThread::run (this=0x9b7c4c8) at concurrent/qthreadpool.cpp:140
#6  0xb4394503 in QThreadPrivate::start (arg=0x9b7c4c8) at thread/qthread_unix.cpp:320
#7  0xb4220c39 in start_thread () from /lib/i386-linux-gnu/i686/cmov/libpthread.so.0
#8  0xb752596e in clone () from /lib/i386-linux-gnu/i686/cmov/libc.so.6

Thread 1 (Thread 0xb2da3940 (LWP 24225)):
[KCrash Handler]
#7  hash (family=...) at rendering/RenderTextControl.cpp:575
#8  hash (family=...) at ../JavaScriptCore/wtf/HashTable.h:279
#9  lookup<WebCore::AtomicString, WTF::IdentityHashTranslator<WebCore::AtomicString, WebCore::AtomicString, WebCore::AtomicStringHash> > (family=...) at ../JavaScriptCore/wtf/HashTable.h:484
#10 contains<WebCore::AtomicString, WTF::IdentityHashTranslator<WebCore::AtomicString, WebCore::AtomicString, WebCore::AtomicStringHash> > (family=...) at ../JavaScriptCore/wtf/HashTable.h:804
#11 contains (family=...) at ../JavaScriptCore/wtf/HashTable.h:327
#12 contains (family=...) at ../JavaScriptCore/wtf/HashSet.h:156
#13 WebCore::RenderTextControl::hasValidAvgCharWidth (family=...) at rendering/RenderTextControl.cpp:485
#14 0xb68293c2 in WebCore::RenderTextControl::getAvgCharWidth (this=0xaf386a10, family=...) at rendering/RenderTextControl.cpp:490
#15 0xb682beff in WebCore::RenderTextControlSingleLine::getAvgCharWidth (this=0xaf386a10, family=...) at rendering/RenderTextControlSingleLine.cpp:516
#16 0xb6826c1c in WebCore::RenderTextControl::calcPrefWidths (this=0xaf386a10) at rendering/RenderTextControl.cpp:516
#17 0xb67a5b79 in WebCore::RenderBox::minPrefWidth (this=0xaf386a10) at rendering/RenderBox.cpp:467
#18 0xb67aab23 in WebCore::RenderBox::calcWidthUsing (this=0xaf386a10, widthType=WebCore::Width, cw=0) at rendering/RenderBox.cpp:1379
#19 0xb67adacc in calcWidth (this=0xaf386a10) at rendering/RenderBox.cpp:1318
#20 WebCore::RenderBox::calcWidth (this=0xaf386a10) at rendering/RenderBox.cpp:1272
#21 0xb682b242 in WebCore::RenderTextControlSingleLine::layout (this=0xaf386a10) at rendering/RenderTextControlSingleLine.cpp:222
#22 0xb67a3ccb in layoutIfNeeded (this=0xaf38699c, relayoutChildren=false, repaintTop=@0xbf95a994, repaintBottom=@0xbf95a998) at rendering/RenderObject.h:500
#23 WebCore::RenderBlock::layoutInlineChildren (this=0xaf38699c, relayoutChildren=false, repaintTop=@0xbf95a994, repaintBottom=@0xbf95a998) at rendering/RenderBlockLineLayout.cpp:579
#24 0xb679932e in layoutBlock (this=0xaf38699c, relayoutChildren=false) at rendering/RenderBlock.cpp:1192
#25 WebCore::RenderBlock::layoutBlock (this=0xaf38699c, relayoutChildren=false) at rendering/RenderBlock.cpp:1124
#26 0xb6781a08 in WebCore::RenderBlock::layout (this=0xaf38699c) at rendering/RenderBlock.cpp:1116
#27 0xb678d658 in WebCore::RenderBlock::layoutBlockChild (this=0xaf386928, child=0xaf38699c, marginInfo=..., previousFloatBottom=@0xbf95aa9c, maxFloatBottom=@0xbf95ab7c) at rendering/RenderBlock.cpp:1809
#28 0xb67924ec in WebCore::RenderBlock::layoutBlockChildren (this=0xaf386928, relayoutChildren=false, maxFloatBottom=@0xbf95ab7c) at rendering/RenderBlock.cpp:1752
#29 0xb6798fbc in layoutBlock (this=0xaf386928, relayoutChildren=false) at rendering/RenderBlock.cpp:1194
#30 WebCore::RenderBlock::layoutBlock (this=0xaf386928, relayoutChildren=false) at rendering/RenderBlock.cpp:1124
#31 0xb6781a08 in WebCore::RenderBlock::layout (this=0xaf386928) at rendering/RenderBlock.cpp:1116
#32 0xb678d658 in WebCore::RenderBlock::layoutBlockChild (this=0xaf386484, child=0xaf386928, marginInfo=..., previousFloatBottom=@0xbf95ac7c, maxFloatBottom=@0xbf95ad5c) at rendering/RenderBlock.cpp:1809
#33 0xb67924ec in WebCore::RenderBlock::layoutBlockChildren (this=0xaf386484, relayoutChildren=false, maxFloatBottom=@0xbf95ad5c) at rendering/RenderBlock.cpp:1752
#34 0xb6798fbc in layoutBlock (this=0xaf386484, relayoutChildren=false) at rendering/RenderBlock.cpp:1194
#35 WebCore::RenderBlock::layoutBlock (this=0xaf386484, relayoutChildren=false) at rendering/RenderBlock.cpp:1124
#36 0xb6781a08 in WebCore::RenderBlock::layout (this=0xaf386484) at rendering/RenderBlock.cpp:1116
#37 0xb678d658 in WebCore::RenderBlock::layoutBlockChild (this=0xaf3863d0, child=0xaf386484, marginInfo=..., previousFloatBottom=@0xbf95ae5c, maxFloatBottom=@0xbf95af3c) at rendering/RenderBlock.cpp:1809
#38 0xb67924ec in WebCore::RenderBlock::layoutBlockChildren (this=0xaf3863d0, relayoutChildren=false, maxFloatBottom=@0xbf95af3c) at rendering/RenderBlock.cpp:1752
#39 0xb6798fbc in layoutBlock (this=0xaf3863d0, relayoutChildren=false) at rendering/RenderBlock.cpp:1194
#40 WebCore::RenderBlock::layoutBlock (this=0xaf3863d0, relayoutChildren=false) at rendering/RenderBlock.cpp:1124
#41 0xb6781a08 in WebCore::RenderBlock::layout (this=0xaf3863d0) at rendering/RenderBlock.cpp:1116
#42 0xb678d658 in WebCore::RenderBlock::layoutBlockChild (this=0xaf3862a0, child=0xaf3863d0, marginInfo=..., previousFloatBottom=@0xbf95b03c, maxFloatBottom=@0xbf95b11c) at rendering/RenderBlock.cpp:1809
#43 0xb67924ec in WebCore::RenderBlock::layoutBlockChildren (this=0xaf3862a0, relayoutChildren=false, maxFloatBottom=@0xbf95b11c) at rendering/RenderBlock.cpp:1752
#44 0xb6798fbc in layoutBlock (this=0xaf3862a0, relayoutChildren=false) at rendering/RenderBlock.cpp:1194
#45 WebCore::RenderBlock::layoutBlock (this=0xaf3862a0, relayoutChildren=false) at rendering/RenderBlock.cpp:1124
#46 0xb6781a08 in WebCore::RenderBlock::layout (this=0xaf3862a0) at rendering/RenderBlock.cpp:1116
#47 0xb678d658 in WebCore::RenderBlock::layoutBlockChild (this=0xaf386110, child=0xaf3862a0, marginInfo=..., previousFloatBottom=@0xbf95b21c, maxFloatBottom=@0xbf95b2fc) at rendering/RenderBlock.cpp:1809
#48 0xb67924ec in WebCore::RenderBlock::layoutBlockChildren (this=0xaf386110, relayoutChildren=false, maxFloatBottom=@0xbf95b2fc) at rendering/RenderBlock.cpp:1752
#49 0xb6798fbc in layoutBlock (this=0xaf386110, relayoutChildren=false) at rendering/RenderBlock.cpp:1194
#50 WebCore::RenderBlock::layoutBlock (this=0xaf386110, relayoutChildren=false) at rendering/RenderBlock.cpp:1124
#51 0xb6781a08 in WebCore::RenderBlock::layout (this=0xaf386110) at rendering/RenderBlock.cpp:1116
#52 0xb68374a8 in WebCore::RenderView::layout (this=0xaf386110) at rendering/RenderView.cpp:124
#53 0xb66d9279 in WebCore::FrameView::layout (this=0xaf3f4e00, allowSubtree=false) at page/FrameView.cpp:821
#54 0xb6432cce in WebCore::Document::implicitClose (this=0xaf429800) at dom/Document.cpp:2004
#55 0xb665184c in WebCore::FrameLoader::checkCallImplicitClose (this=0xaf370bac) at loader/FrameLoader.cpp:955
#56 0xb6658847 in WebCore::FrameLoader::checkCompleted (this=0xaf370bac) at loader/FrameLoader.cpp:903
#57 0xb6658a2e in WebCore::FrameLoader::finishedParsing (this=0xaf370bac) at loader/FrameLoader.cpp:842
#58 0xb6432505 in WebCore::Document::finishedParsing (this=0xaf429800) at dom/Document.cpp:4471
#59 0xb65ae9f6 in WebCore::LegacyHTMLTreeBuilder::finished (this=0xaf3dce10) at html/LegacyHTMLTreeBuilder.cpp:1684
#60 0xb65521e2 in WebCore::HTMLTreeBuilder::finished (this=0xaf38c280) at html/HTMLTreeBuilder.cpp:2815
#61 0xb654bbc8 in WebCore::HTMLDocumentParser::end (this=0xaf403000) at html/HTMLDocumentParser.cpp:277
#62 0xb654be89 in WebCore::HTMLDocumentParser::finish (this=0xaf403000) at html/HTMLDocumentParser.cpp:308
#63 0xb6428109 in WebCore::Document::finishParsing (this=0xaf429800) at dom/Document.cpp:2111
#64 0xb664f46e in WebCore::DocumentWriter::endIfNotLoadingMainResource (this=0xaf370c90) at loader/DocumentWriter.cpp:221
#65 0xb6643261 in WebCore::DocumentLoader::finishedLoading (this=0xaf370080) at loader/DocumentLoader.cpp:268
#66 0xb665864c in WebCore::FrameLoader::finishedLoading (this=0xaf370bac) at loader/FrameLoader.cpp:2223
#67 0xb6677af7 in WebCore::MainResourceLoader::didFinishLoading (this=0xaf366c00) at loader/MainResourceLoader.cpp:439
#68 0xb6685baf in WebCore::ResourceLoader::didFinishLoading (this=0xaf366c00) at loader/ResourceLoader.cpp:443
#69 0xb688ed8d in WebCore::QNetworkReplyHandler::finish (this=0x99c8560) at platform/network/qt/QNetworkReplyHandler.cpp:264
#70 0xb688f71c in WebCore::QNetworkReplyHandler::qt_metacall (this=0x99c8560, _c=QMetaObject::InvokeMetaMethod, _id=<value optimized out>, _a=0xbf95b884) at ./moc_QNetworkReplyHandler.cpp:84
#71 0xb449547d in metacall (object=0x99c8560, cl=QMetaObject::InvokeMetaMethod, idx=5, argv=0xbf95b884) at kernel/qmetaobject.cpp:237
#72 QMetaObject::metacall (object=0x99c8560, cl=QMetaObject::InvokeMetaMethod, idx=5, argv=0xbf95b884) at kernel/qmetaobject.cpp:232
#73 0xb44a41c0 in QMetaObject::activate (sender=0x983fdc0, m=0xb5567e64, local_signal_index=1, argv=0x0) at kernel/qobject.cpp:3278
#74 0xb5517c35 in QNetworkReply::finished (this=0x983fdc0) at .moc/release-shared/moc_qnetworkreply.cpp:152
#75 0xb54ab233 in QNetworkReplyImplPrivate::finished (this=0x99c8a80) at access/qnetworkreplyimpl.cpp:680
#76 0xb548c42e in QNetworkAccessBackend::finished (this=0x99c54a8) at access/qnetworkaccessbackend.cpp:298
#77 0xb54927c1 in QNetworkAccessHttpBackend::finished (this=0x99c54a8) at access/qnetworkaccesshttpbackend.cpp:342
#78 0xb5492b59 in QNetworkAccessHttpBackend::replyFinished (this=0x99c54a8) at access/qnetworkaccesshttpbackend.cpp:763
#79 0xb54a95be in QNetworkReplyImplPrivate::handleNotifications (this=0x99c8a80) at access/qnetworkreplyimpl.cpp:390
#80 0xb54a962b in QNetworkReplyImpl::event (this=0x983fdc0, e=0x98ec7c0) at access/qnetworkreplyimpl.cpp:890
#81 0xb47307a4 in notify_helper (this=0x96906b8, receiver=0x983fdc0, e=0x98ec7c0) at kernel/qapplication.cpp:4467
#82 QApplicationPrivate::notify_helper (this=0x96906b8, receiver=0x983fdc0, e=0x98ec7c0) at kernel/qapplication.cpp:4439
#83 0xb4735b32 in QApplication::notify (this=0x98ec7c0, receiver=0x983fdc0, e=0x98ec7c0) at kernel/qapplication.cpp:4214
#84 0xb5ab9571 in KApplication::notify (this=0xbf95c1c0, receiver=0x983fdc0, event=0x98ec7c0) at ../../kdeui/kernel/kapplication.cpp:311
#85 0xb448f0ce in QCoreApplication::notifyInternal (this=0xbf95c1c0, receiver=0x983fdc0, event=0x98ec7c0) at kernel/qcoreapplication.cpp:731
#86 0xb4492894 in sendEvent (receiver=0x0, event_type=0, data=0x96694e0) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:215
#87 QCoreApplicationPrivate::sendPostedEvents (receiver=0x0, event_type=0, data=0x96694e0) at kernel/qcoreapplication.cpp:1372
#88 0xb44929dc in QCoreApplication::sendPostedEvents (receiver=0x0, event_type=0) at kernel/qcoreapplication.cpp:1265
#89 0xb44bcec4 in sendPostedEvents (s=0x9695380) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:220
#90 postEventSourceDispatch (s=0x9695380) at kernel/qeventdispatcher_glib.cpp:277
#91 0xb38b7252 in g_main_dispatch (context=0x96952f0) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:2440
#92 g_main_context_dispatch (context=0x96952f0) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:3013
#93 0xb38b7a30 in g_main_context_iterate (context=0x96952f0, block=1, dispatch=1, self=<value optimized out>) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:3091
#94 0xb38b7ce4 in g_main_context_iteration (context=0x96952f0, may_block=1) at /build/buildd-glib2.0_2.28.6-1-i386-A3fp41/glib2.0-2.28.6/./glib/gmain.c:3154
#95 0xb44bd2f7 in QEventDispatcherGlib::processEvents (this=0x966a208, flags=...) at kernel/qeventdispatcher_glib.cpp:422
#96 0xb47e56fa in QGuiEventDispatcherGlib::processEvents (this=0x966a208, flags=...) at kernel/qguieventdispatcher_glib.cpp:204
#97 0xb448e0ed in QEventLoop::processEvents (this=0xbf95c124, flags=...) at kernel/qeventloop.cpp:149
#98 0xb448e331 in QEventLoop::exec (this=0xbf95c124, flags=...) at kernel/qeventloop.cpp:201
#99 0xb4492a8a in QCoreApplication::exec () at kernel/qcoreapplication.cpp:1008
#100 0xb472e624 in QApplication::exec () at kernel/qapplication.cpp:3741
#101 0xb76b98ee in kdemain (argc=1, argv=0xbf95c4e4) at /build/buildd-rekonq_0.7.0-1-i386-69PRIJ/rekonq-0.7.0/src/main.cpp:215
#102 0x0804855b in main (argc=1, argv=0xbf95c4e4) at /build/buildd-rekonq_0.7.0-1-i386-69PRIJ/rekonq-0.7.0/obj-i486-linux-gnu/src/rekonq_dummy.cpp:3

Possible duplicates by query: bug 272979, bug 272722, bug 272244, bug 270823, bug 268669.

Reported using DrKonqi
Comment 1 bicave 2011-08-18 11:34:58 UTC

*** This bug has been marked as a duplicate of bug 272244 ***