Andrew Talbot
|
13e405c149
|
dsound: Remove unused variable.
|
2008-04-17 11:41:04 +02:00 |
Maarten Lankhorst
|
98933362f3
|
dsound: Hold lock in GetStatus.
|
2008-04-07 11:34:28 +02:00 |
Austin English
|
b4f52938e4
|
Spelling fixes.
|
2008-04-02 23:18:21 +02:00 |
Andrew Talbot
|
e8aebfcb4b
|
dsound: Assign to structs instead of using CopyMemory.
|
2008-03-31 12:50:30 +02:00 |
Maarten Lankhorst
|
021019ff8f
|
dsound: Add an option to mix sound buffers in the mixer again.
|
2008-03-17 14:44:46 +01:00 |
Aric Stewart
|
6e8c8c28eb
|
dsound: Set the status from STATE_STARTING to STATE_PLAYING before mixing our next buffer so that we do not potentially skip early event when starting.
|
2008-03-14 13:01:16 +01:00 |
Ken Thomases
|
2de653552c
|
dsound: Adjust for partial block before prepare-header and add-buffer steps.
Otherwise, the wave-in driver(s) may copy incorrect data to internal structures.
|
2008-03-12 12:01:14 +01:00 |
Rob Shearman
|
48000893f9
|
makefiles: Simplify the use of the IMPORTLIB variable in the DLL makefiles.
Only specify the root to keep platform-specifics out of the individual
DLL makefiles.
|
2008-03-04 20:55:01 +01:00 |
Rob Shearman
|
fc1b62bd7d
|
dsound: Don't use typeof as it's not portable.
|
2008-02-27 14:52:24 +01:00 |
Andrew Talbot
|
2cf2807052
|
dsound: Remove unneeded casts.
|
2008-01-02 12:38:41 +01:00 |
Andrew Riedi
|
68a6ddf623
|
dsound: DPRINTF -> TRACE.
|
2007-12-12 13:49:01 +01:00 |
Alexandre Julliard
|
c0b12351e0
|
Avoid size_t types in traces.
|
2007-12-07 18:49:18 +01:00 |
Paul Vriens
|
52ccb14155
|
dsound/tests: Better check to see if class is not available.
|
2007-11-13 13:29:17 +01:00 |
Paul Vriens
|
65d3682c22
|
dsound/tests: Fix test failures on WinXP.
|
2007-11-13 13:29:11 +01:00 |
Maarten Lankhorst
|
8de6c8b4a9
|
dsound: Return primary_done when no mixing needs to be done instead of 0.
|
2007-11-12 12:56:21 +01:00 |
Maarten Lankhorst
|
8c3f9c8c7e
|
dsound: Reassign pointers back to null when destroying structure.
|
2007-11-12 12:56:15 +01:00 |
Paul Vriens
|
d66722db31
|
dsound/tests: Fix tests after addition of 24/32 bits buffer tests.
|
2007-11-12 11:40:25 +01:00 |
Maarten Lankhorst
|
3f965d582f
|
dsound: Make AngleBetweenVectorsRad when vectors have no magnitude.
|
2007-11-12 11:40:10 +01:00 |
Maarten Lankhorst
|
545a774fcc
|
dsound: Implement AngleBetweenVectorsDeg as a call to AngleBetweenVectorsRad.
|
2007-11-12 11:40:04 +01:00 |
Paul Vriens
|
8454cb17a8
|
dsound/tests: Fix test failures on WinXP and 2003.
|
2007-11-09 12:27:20 +01:00 |
Maarten Lankhorst
|
4d1129f785
|
dsound: Use a 2 stage mixing/normalization for sound.
|
2007-11-09 12:24:06 +01:00 |
Maarten Lankhorst
|
a938f69360
|
dsound: Add mixing and normalization functions.
|
2007-11-09 12:23:54 +01:00 |
Maarten Lankhorst
|
fa3663d6c7
|
dsound: Add support for 24/32 bits input sound buffers.
|
2007-11-09 12:20:20 +01:00 |
Maarten Lankhorst
|
511af0d186
|
dsound: Add conformance tests for 24/32 bits buffers and waveformatextensible.
|
2007-11-07 11:54:34 +01:00 |
Maarten Lankhorst
|
2a117a2017
|
dsound: Add support for WAVEFORMATEXTENSIBLE format.
|
2007-11-07 11:48:56 +01:00 |
Francois Gouget
|
c4b1195c0c
|
Assorted spelling fixes.
|
2007-10-23 18:20:27 +02:00 |
Maarten Lankhorst
|
80192b93eb
|
dsound: Only warn for unsupported channels (or bits) when volume adjustment is done.
|
2007-10-16 13:19:20 +02:00 |
Maarten Lankhorst
|
0595ed39f2
|
dsound: Remove a few null initializations in DirectSoundDevice_Create.
The memory is allocated with HEAP_ZERO_MEMORY.
|
2007-10-15 16:55:19 +02:00 |
Maarten Lankhorst
|
3230ea026a
|
dsound: Make sure device buflen is initially set to ds_hel_buflen.
|
2007-10-15 14:52:30 +02:00 |
Maarten Lankhorst
|
6ad603d219
|
dsound: Release buffer before reopening when buffer is too small.
|
2007-10-09 17:52:46 +02:00 |
Maarten Lankhorst
|
546447152e
|
dsound: Fix IDirectSoundBuffer_GetPosition.
|
2007-10-02 11:43:49 +02:00 |
Maarten Lankhorst
|
847d5565fc
|
dsound: Call waveInUnPrepareHeader and waveInPrepareHeader when submitting new buffer.
|
2007-10-01 12:42:57 +02:00 |
Maarten Lankhorst
|
3bafbb22b8
|
dsound: Use smaller buffers for wavein capture.
|
2007-10-01 12:42:42 +02:00 |
Maarten Lankhorst
|
6506dff8b8
|
dsound: Check if hardware buffer is big enough before accepting it.
|
2007-09-27 11:08:05 +02:00 |
Maarten Lankhorst
|
d65ae3ffe9
|
dsound: Support arbitrarily sized buffers for waveout.
|
2007-09-11 12:38:04 +02:00 |
Maarten Lankhorst
|
0c4ec8a1cc
|
dsound: Fix overshot calculations.
|
2007-09-11 12:38:01 +02:00 |
Maarten Lankhorst
|
aaa9e41fdf
|
dsound: Change default bpp and sample frequency to be better for the ears.
|
2007-09-11 12:33:56 +02:00 |
Maarten Lankhorst
|
beaa1cde64
|
dsound: Runtime link to advapi32.RegDeleteTree.
|
2007-09-11 11:47:01 +02:00 |
Maarten Lankhorst
|
7a04c24e63
|
dsound: Fix detection of different sample rates in setformat.
|
2007-09-10 15:29:47 +02:00 |
Maarten Lankhorst
|
7144849d0b
|
dsound: Fix null pointer dereference for waveout in creating buffer.
|
2007-09-10 15:29:47 +02:00 |
Maarten Lankhorst
|
e56a302f7d
|
dsound: Increase dll refcount and disable thread calls.
|
2007-08-30 19:48:01 +02:00 |
Francois Gouget
|
a116879507
|
Assorted spelling fixes.
|
2007-08-30 12:26:02 +02:00 |
Stefan Leichter
|
6357676c54
|
dsound: Remove 'recursive registry key delete' function.
|
2007-08-29 11:58:13 +02:00 |
Maarten Lankhorst
|
5d0b1fabd3
|
dsound: Update DSOUND_PrimarySetFormat to follow flags and return values more precisely.
|
2007-08-27 19:28:03 +02:00 |
Maarten Lankhorst
|
7519326d03
|
dsound: Add a function to (re)open sound device to avoid code duplication.
|
2007-08-27 19:27:47 +02:00 |
Maarten Lankhorst
|
7ce277d018
|
dsound: Handle secondary hardware buffers more correctly.
Only try hardware if asked for it, then return an error instead of
falling back to software.
|
2007-08-27 12:26:25 +02:00 |
Maarten Lankhorst
|
3838a770c1
|
dsound: Make sure waveOutClose is only called when using mmsystem.
|
2007-08-27 12:25:52 +02:00 |
Maarten Lankhorst
|
2ececbeda9
|
dsound: Transparantly fall back to software mode if hardware mode is unavailable.
|
2007-08-23 12:37:47 +02:00 |
Maarten Lankhorst
|
4ef6e8eaa0
|
dsound: Move assignment of DSBCAPS_LOC to primary buffer creation time.
|
2007-08-22 12:18:59 +02:00 |
Alexandre Julliard
|
3d30204156
|
dsound: Fix a compiler warning.
|
2007-08-21 12:43:15 +02:00 |
Maarten Lankhorst
|
9c469e1a94
|
dsound: Handle failing of IDsDriver_CreateSoundBuffer better.
|
2007-08-20 22:22:10 +02:00 |
Maarten Lankhorst
|
33e1b6ffef
|
dxguid: Remove dsdriver.h from imports.
|
2007-08-17 12:01:37 +02:00 |
Maarten Lankhorst
|
b42287ca66
|
dsound: Handle failing of obtaining IDsDriverNotify.
|
2007-08-16 11:10:54 +02:00 |
Francois Gouget
|
ebadbd4bd5
|
Assorted spelling fixes.
|
2007-08-09 14:13:07 +02:00 |
Maarten Lankhorst
|
cdbd17bdb8
|
dsound: Make hardware acceleration work again.
|
2007-08-07 12:42:29 +02:00 |
Maarten Lankhorst
|
c3ebd3652a
|
dsound: Acceleration fixes for wavein emulation.
|
2007-08-06 13:56:40 +02:00 |
Maarten Lankhorst
|
abe8c127d9
|
dsound: Make timer more robust.
|
2007-08-06 13:56:34 +02:00 |
Maarten Lankhorst
|
3f762d5d0b
|
dsound: Sound acceleration fixes.
|
2007-08-06 13:56:20 +02:00 |
Michael Stefaniuc
|
efe4573bc8
|
dsound: Remove redundant NULL check before HeapFree. Found by Smatch.
|
2007-08-06 12:18:08 +02:00 |
Maarten Lankhorst
|
36e9054629
|
dsound: Move resampling away from mixer thread.
|
2007-08-02 11:53:31 +02:00 |
Maarten Lankhorst
|
575f34e548
|
dsound: Add SndQueueMin to have less lock contention in mixer.
|
2007-07-31 22:20:55 +02:00 |
Maarten Lankhorst
|
60f4db0345
|
dsound: Get rid of DS_HEL_FRAGS.
|
2007-07-31 22:20:21 +02:00 |
Maarten Lankhorst
|
7fcce036da
|
dsound: Add a registry setting for hel buffer length.
|
2007-07-31 22:19:57 +02:00 |
Maarten Lankhorst
|
3b9877fa14
|
dsound: Constify DSOUND_CheckEvent.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
bfa05bf232
|
dsound: Remove some more unused variables.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
34893a914b
|
dsound: Silence the IDirectSoundBuffer_Initialize warnings.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
a335f68bfb
|
dsound: Fix locking in mixer.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
8aaeb0d4ed
|
dsound: Small mixer optimizations.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
de9cecaaa8
|
dsound: Reset state when stopping device.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
237b293829
|
dsound: Replace buffer critical section with a rw-lock.
|
2007-07-30 23:37:58 +02:00 |
Maarten Lankhorst
|
f3ed32bca0
|
dsound: Allow mixing the same buffer multiple times if we are looping.
|
2007-07-27 12:23:53 +02:00 |
Maarten Lankhorst
|
0c3cd2a0e4
|
dsound: Some cosmetic changes.
|
2007-07-27 12:23:27 +02:00 |
Maarten Lankhorst
|
59a5669a97
|
dsound: Fix CheckEvent in mixer.
|
2007-07-27 12:22:33 +02:00 |
Maarten Lankhorst
|
f94114a88d
|
dsound: Make sure secondary_remainder and buflen are aligned to primary buffer in mixer.
|
2007-07-27 12:22:27 +02:00 |
Maarten Lankhorst
|
976f56d6c0
|
dsound: Simplify IDirectSoundBufferImpl_GetCurrentPosition.
|
2007-07-09 12:15:58 +02:00 |
Maarten Lankhorst
|
a6ab4c51cf
|
dsound: Fix division by zero in DSOUND_Calc3DBuffer.
|
2007-07-09 12:15:45 +02:00 |
Maarten Lankhorst
|
2b8a1815e6
|
dsound: Remove some more unused variables.
|
2007-07-09 12:15:40 +02:00 |
Maarten Lankhorst
|
f13f48876c
|
dsound: Clean up some unused variables.
|
2007-07-06 19:28:59 +02:00 |
Maarten Lankhorst
|
c45d4f77c6
|
dsound: Revert "dsound: Disable property sets if hardware doesn't support it.".
|
2007-07-06 19:28:53 +02:00 |
Romain Iehl
|
684a121aed
|
dsound: Correct field access.
|
2007-07-06 18:19:40 +02:00 |
Romain Iehl
|
8de6b7da40
|
dsound: Simplify the calculation of sound attenuation due to distance.
|
2007-07-06 18:19:34 +02:00 |
Romain Iehl
|
3a8ae53de4
|
dsound: Fix bug preventing correct calculation of the sound parameters
of a 3Dbuffer, when an application calls CommitDeferredSettings after
the 3DBuffer has been released.
|
2007-07-06 18:15:57 +02:00 |
Francois Gouget
|
a3317a5c01
|
Assorted spelling fixes.
|
2007-07-05 19:56:34 +02:00 |
Maarten Lankhorst
|
6d97123536
|
dsound: Fix calcplayposition to handle mixed amount > buffer length better.
|
2007-06-29 18:58:13 +02:00 |
Maarten Lankhorst
|
f4d5f127dd
|
dsound/winealsa: Remove writelead for alsa directsound.
|
2007-06-28 12:16:14 +02:00 |
Francois Gouget
|
2f0ca64dac
|
dsound: Add missing '\n' to Wine trace.
|
2007-06-26 12:12:04 +02:00 |
Alex Villacís Lasso
|
1a23836f91
|
dsound: Reset device playpos/mixpos on buflen change.
|
2007-06-26 11:54:51 +02:00 |
Alex Villacís Lasso
|
f2626bab14
|
dsound: Make test recover from failure to preserve primary buffer length after SetFormat().
|
2007-06-26 11:53:16 +02:00 |
Michael Stefaniuc
|
2323e79e36
|
dsound: Fix missing unlock on an error path. Found by Smatch.
|
2007-06-25 11:43:44 +02:00 |
Maarten Lankhorst
|
e28da99e4c
|
dsound: Tune some parameters for alsa waveout.
|
2007-06-22 12:23:24 +02:00 |
Maarten Lankhorst
|
a7d6ed8ea6
|
dsound: Simplify mixing by removing remixing support, and fix its waveout breakage.
Based on a patch by Peter Dons Tychsen.
|
2007-06-22 12:23:18 +02:00 |
Maarten Lankhorst
|
9591246002
|
dsound: Give rougher estimates for fraglen to satisfy alsa.
|
2007-06-22 12:20:00 +02:00 |
Maarten Lankhorst
|
1081a9b144
|
dsound: Use TIME_KILL_SYNCHRONOUS on sound timer.
|
2007-06-14 13:20:34 +02:00 |
Maarten Lankhorst
|
faa29e9238
|
dsound: Unset variable on failure in IKsBufferPropertySetImpl_Create.
|
2007-06-12 11:18:46 +02:00 |
Maarten Lankhorst
|
3e1fcc0eb7
|
dsound: Disable property sets if hardware doesn't support it.
|
2007-06-04 12:56:13 +02:00 |
Maarten Lankhorst
|
13af056628
|
dsound: Recalculate 3d buffer on SetVolume.
|
2007-06-04 12:55:47 +02:00 |
Maarten Lankhorst
|
909ed9937a
|
dsound: Fix buffer caps.
|
2007-06-04 12:55:41 +02:00 |
Francois Gouget
|
24b315c51f
|
dsound/tests: Fix the Visual C++ double to float conversion warnings.
|
2007-05-29 13:47:06 +02:00 |
Maarten Lankhorst
|
c83fd812f1
|
dsound: Fix stupid mistake.
|
2007-05-29 11:55:14 +02:00 |
Maarten Lankhorst
|
2360358944
|
dsound: Block align SetCurrentPosition and add test for it.
|
2007-05-25 19:31:05 +02:00 |
Robert Reif
|
91d580433c
|
dsound: Add missing interface ID.
|
2007-05-23 14:35:05 +02:00 |
Maarten Lankhorst
|
2e9fa34d67
|
dsound: IDirectSound_Compact should return DS_OK on priolevel >= DSSCL_PRIORITY.
|
2007-05-15 12:20:00 +02:00 |
Maarten Lankhorst
|
6e9276e970
|
dsound: Primary buffer isn't an IDirectSoundBuffer8.
|
2007-05-14 14:29:33 +02:00 |
Andrew Talbot
|
1e4c97175e
|
dsound: Exclude unused headers.
|
2007-05-03 14:23:53 +02:00 |
Rob Shearman
|
543a7d8f2d
|
dsound: Implement QueryInterface for KsPropertySet objects.
|
2007-04-30 12:33:12 +02:00 |
Rob Shearman
|
ade2984e03
|
dsound: Implement QueryInterface for the class factory objects.
|
2007-04-30 12:33:07 +02:00 |
Andrew Talbot
|
824c9c8ee6
|
dsound: Constify some variables.
|
2007-04-30 12:32:30 +02:00 |
Maarten Lankhorst
|
364e65a872
|
dsound: Don't deadlock in capture because of callback.
|
2007-04-23 14:05:52 +02:00 |
Maarten Lankhorst
|
836776ae4f
|
dsound: Make sure we're holding the lock on Drop And Stop.
|
2007-04-23 14:05:42 +02:00 |
Andrew Riedi
|
447d5c219b
|
dsound: Change a couple DPRINTF's to TRACE's
|
2007-03-29 21:01:14 +02:00 |
Andrew Talbot
|
6eba82d418
|
dsound: Replace inline static with static inline.
|
2007-03-20 13:00:51 +01:00 |
Jan Zerebecki
|
4c4821e305
|
dsound: Conform critical section DebugInfo names.
|
2007-03-12 13:40:22 +01:00 |
Stefan Huehner
|
51a7ca3440
|
Change some functions arguments from () -> (void).
|
2007-03-12 12:25:31 +01:00 |
Tomas Carnecky
|
9b4f99782e
|
dsound: Update prototypes for IDirectSoundBuffer::Lock/Unlock.
|
2007-03-08 21:30:54 +01:00 |
Maarten Lankhorst
|
c38bcb96d7
|
dsound: Use an inline for ring buffer pointer difference calculation.
|
2007-02-22 11:26:42 +01:00 |
Maarten Lankhorst
|
0036298a14
|
dsound: Add some comments from earlier patch that makes code a little better understandable.
|
2007-02-22 11:25:35 +01:00 |
Robert Reif
|
2e44a3b2a2
|
dsound: Fix tests for old versions of windows.
|
2007-01-16 11:19:30 +01:00 |
Francois Gouget
|
3327c5f6ff
|
dsound/tests: Replace some '#if 0's with 'if (0)'s.
|
2007-01-12 11:25:11 +01:00 |
Francois Gouget
|
42d25ef95d
|
dsound/tests: The tests link with dsound.dll so use GetModuleHandle() instead of LoadLibrary().
|
2007-01-12 11:25:06 +01:00 |
Francois Gouget
|
e48d86308d
|
dsound/tests: Replace some '#if 0's with 'if (0)'s.
|
2007-01-12 11:24:49 +01:00 |
Michael Stefaniuc
|
3cf9f84561
|
dsound: Remove stray '\' at end of lines.
|
2007-01-09 12:03:46 +01:00 |
Andrew Talbot
|
6a9d6ef275
|
dsound: Remove unused function.
|
2007-01-09 12:03:38 +01:00 |
Alexandre Julliard
|
6addb22017
|
dsound: The dsconf.h GUIDs are now in libdxguid.
|
2007-01-08 22:01:56 +01:00 |
Patrik Stridvall
|
6e062a4e08
|
dsound: The GUID:s defined in dsconf.h should be exported by dxguid.
|
2007-01-08 21:14:31 +01:00 |
Marcus Meissner
|
f0280cbd1e
|
made functions and variables static in some testcases.
|
2006-12-11 12:18:29 +01:00 |
Dmitry Timoshkov
|
616b65532b
|
dsound: Make some data const.
|
2006-11-29 12:44:40 +01:00 |
Francois Gouget
|
cc1cb0ad8e
|
dsound/tests: Remove unneeded NONAMELESS* macros.
|
2006-11-24 11:48:50 +01:00 |
Francois Gouget
|
1ccf944900
|
Assorted spelling fixes.
|
2006-11-13 13:01:53 +01:00 |
Michael Stefaniuc
|
26bd2ec9c3
|
dsound: Win64 printf format warning fixes.
|
2006-11-13 12:49:04 +01:00 |
Michael Stefaniuc
|
0f08667c8a
|
dsound: Fix the declaration/definition of DSOUND_timer().
|
2006-11-13 12:48:27 +01:00 |
Francois Gouget
|
30e44c85c8
|
Assorted spelling fixes.
|
2006-11-07 15:25:24 +01:00 |
Michael Stefaniuc
|
15765dd953
|
The Data1 member of the GUID struct needs to be an unsigned int too for Win64 compatibility.
|
2006-10-16 10:53:04 +02:00 |
Michael Stefaniuc
|
65aac34c56
|
dsound/tests: Win64 printf format warning fixes.
|
2006-10-10 11:56:56 +02:00 |
Francois Gouget
|
be87fe8c7c
|
dsound: Don't use state.buffer_size before it has been initialized.
|
2006-09-29 17:53:31 +02:00 |
Michael Stefaniuc
|
85ce5117c5
|
Add a WINE_NO_LONG_INT define to many makefiles to ease the transition of DWORD/LONG/ULONG from long to int.
|
2006-09-29 16:08:30 +02:00 |
Alexandre Julliard
|
32ab895e46
|
makefiles: Generate the dependencies line to avoid some code duplication.
|
2006-09-14 09:38:16 +02:00 |
Alexandre Julliard
|
5cf75e615a
|
makefiles: Only run test and documentation targets in directories that need them.
|
2006-08-28 13:37:44 +02:00 |
Robert Reif
|
02bd4ad437
|
dsound: Remove unused parameter from propset functions.
|
2006-08-23 11:58:38 +02:00 |
Robert Reif
|
425608a120
|
dsound: Add class factory tests.
|
2006-08-18 12:04:54 +02:00 |
Robert Reif
|
595d6aa6fb
|
dsound: Class factory cleanup.
Consolidate all class factories into a single implementation.
Fixes a problem discovered by oleview.
|
2006-08-18 12:04:49 +02:00 |
Alexandre Julliard
|
179a4e0a2e
|
dsound: Make some functions static.
|
2006-08-02 13:26:14 +02:00 |
Andrew Talbot
|
70642e2511
|
dsound/tests: Write-strings warning fix.
|
2006-07-31 21:57:54 +02:00 |
Alexandre Julliard
|
77dc0d9be5
|
.gitignore: Added wildcards to ignore generated resource files.
|
2006-07-10 21:39:00 +02:00 |
Alexandre Julliard
|
0fa8baafcb
|
make_dlls: Recursively ignore .ok files in all tests directories.
|
2006-07-10 21:26:50 +02:00 |
Alexandre Julliard
|
edd100b899
|
make_dlls: Recursively ignore testlist.c in all tests directories.
|
2006-07-10 21:19:42 +02:00 |
Alexandre Julliard
|
5258e061dc
|
make_dlls: Ignore generated import libraries from the top-level .gitignore.
|
2006-07-10 20:55:58 +02:00 |
Alexandre Julliard
|
cc2b3b48e6
|
Take advantage of the recursive nature of .gitignore for Makefile entries.
Prefix other entries with '/' to make them non-recursive.
|
2006-07-10 20:47:54 +02:00 |
Paul Vriens
|
8f143f190c
|
Use the return value of register_key_guid.
|
2006-06-30 21:08:07 +02:00 |
Alexandre Julliard
|
bc99ac09d3
|
dsound: Don't use sizeof in traces to avoid printf format warnings.
|
2006-06-13 14:10:32 +02:00 |
Alexandre Julliard
|
bbeeea4b88
|
dsound: Make the virtual table functions static where possible.
|
2006-06-10 11:57:48 +02:00 |