diff options
author | Michael Lauer <mickey@vanille-media.de> | 2006-05-13 19:16:07 +0000 |
---|---|---|
committer | OpenEmbedded Project <openembedded-devel@lists.openembedded.org> | 2006-05-13 19:16:07 +0000 |
commit | 95e7c0ab24272bde3c1c5d4b89f53ecd8c402125 (patch) | |
tree | fc48957a9b3f25ad855ae572e3a62b67e31c91d3 /packages/xqt2 | |
parent | bbd7bd75f82d177e6ea894672148a76f0b0e6d92 (diff) |
add Xqt2, an X server for Opie environments. patch courtesy Enodr <nicolasfr@gmail.com> - thanks!
Diffstat (limited to 'packages/xqt2')
-rw-r--r-- | packages/xqt2/.mtn2git_empty | 0 | ||||
-rw-r--r-- | packages/xqt2/files/.mtn2git_empty | 0 | ||||
-rw-r--r-- | packages/xqt2/files/KeyMap.patch | 19 | ||||
-rw-r--r-- | packages/xqt2/files/cross.patch | 62 | ||||
-rw-r--r-- | packages/xqt2/files/fephack.patch | 32 | ||||
-rw-r--r-- | packages/xqt2/files/imake-staging.patch | 38 | ||||
-rw-r--r-- | packages/xqt2/files/moc_call.patch | 11 | ||||
-rw-r--r-- | packages/xqt2/files/xchar2b.patch | 25 | ||||
-rw-r--r-- | packages/xqt2/files/xqt-make.patch | 43 | ||||
-rw-r--r-- | packages/xqt2/xqt2_20060509.bb | 111 |
10 files changed, 341 insertions, 0 deletions
diff --git a/packages/xqt2/.mtn2git_empty b/packages/xqt2/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/xqt2/.mtn2git_empty diff --git a/packages/xqt2/files/.mtn2git_empty b/packages/xqt2/files/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/xqt2/files/.mtn2git_empty diff --git a/packages/xqt2/files/KeyMap.patch b/packages/xqt2/files/KeyMap.patch new file mode 100644 index 0000000000..62564cf248 --- /dev/null +++ b/packages/xqt2/files/KeyMap.patch @@ -0,0 +1,19 @@ +--- xc/../xqt2/xfree86/xqt-driver/KeyMap.h 2004-10-16 08:06:07.000000000 +0200 ++++ xc/../xqt2/xfree86/xqt-driver/KeyMap~.h 2006-05-10 19:41:16.000000000 +0200 +@@ -75,6 +75,7 @@ + /* [ */ K(BracketLeft, XK_bracketleft, XK_braceleft) // Fn+T + /* { */ K(BraceLeft, XK_braceleft, NoSymbol) // ??? + /* cent */ K(cent, XK_cent, NoSymbol) // Fn+U ++/* Enter */ K(Enter, XK_Return, NoSymbol) + /* Return */ K(Return, XK_Return, NoSymbol) + /* OK */ K(F33, XK_Return, NoSymbol) + /* Control */ K(Control, XK_Control_L, NoSymbol) +@@ -162,7 +163,7 @@ + /* F30 */ K(F30, XK_F30, NoSymbol) + /* F31 */ K(F31, XK_F31, NoSymbol) + /* F32 */ K(F32, XK_F32, NoSymbol) +-/* F33 */ K(F33, XK_F33, NoSymbol) ++/* F33 */ /* K(F33, XK_F33, NoSymbol) */ // Key already defined as 'ok' + /* F34 */ K(F34, XK_F34, NoSymbol) + /* F35 */ K(F35, XK_F35, NoSymbol) + diff --git a/packages/xqt2/files/cross.patch b/packages/xqt2/files/cross.patch new file mode 100644 index 0000000000..c00068aa26 --- /dev/null +++ b/packages/xqt2/files/cross.patch @@ -0,0 +1,62 @@ +diff -ur xc.org/config/cf/X11.tmpl xc/config/cf/X11.tmpl +--- xc.org/config/cf/X11.tmpl 2003-02-26 06:57:52.000000000 +0900 ++++ xc/config/cf/X11.tmpl 2004-09-16 19:19:46.000000000 +0900 +@@ -1582,9 +1582,9 @@ + MKFONTDIR = $(CLIENTENVSETUP) $(PRELOADFONTSETUP) $(XBUILDBINDIR)/mkfontdir + XCURSORGEN = $(CLIENTENVSETUP) $(PRELOADSETUP) $(XBUILDBINDIR)/xcursorgen + # elif UseInstalledOnCrossCompile +- MKFONTDIR = $(BINDIR)/mkfontdir +- FONTC = $(BINDIR)/bdftopcf +- XCURSORGEN = $(BINDIR)/xcursorgen ++ MKFONTDIR = /usr/X11R6/bin/mkfontdir ++ FONTC = /usr/X11R6/bin/bdftopcf ++ XCURSORGEN = /usr/X11R6/bin/xcursorgen + # endif + # if HasPerl + MKHTMLINDEX = RunPerlScript($(CONFIGSRC)/util/mkhtmlindex.pl,) +diff -ur xc.org/config/cf/cross.def xc/config/cf/cross.def +--- xc.org/config/cf/cross.def 2002-04-04 23:05:33.000000000 +0900 ++++ xc/config/cf/cross.def 2004-09-16 19:19:46.000000000 +0900 +@@ -5,7 +5,7 @@ + * compiler images. It will have to be edited to reflect these + * given your local configuration. + */ +-#if 0 ++#if 1 + #undef i386Architecture + #define Arm32Architecture + +@@ -14,18 +14,18 @@ + #define ServerCDebugFlags -O2 + #undef StandardDefines + #define StandardDefines -Dlinux -D__arm__ -D_POSIX_SOURCE \ +- -D_BSD_SOURCE -D_GNU_SOURCE -DX_LOCALE ++ -D_BSD_SOURCE -D_GNU_SOURCE + #undef CcCmd +-#define StdIncDir /skiff/local/arm-linux/include ++#define StdIncDir $(TOPDIR)/tmp/cross/arm-linux/include + #define PreIncDir + #undef PostIncDir +-#define PostIncDir /skiff/local/lib/gcc-lib/arm-linux/2.95.2/include +-#define CcCmd /skiff/local/bin/arm-linux-gcc ++#define PostIncDir $(TOPDIR)/tmp/cross/lib/gcc-lib/arm-linux/2.95.2/include ++#define CcCmd $(TOPDIR)/tmp/cross/bin/arm-linux-gcc + #undef CplusplusCmd + #define HasCplusplus YES +-#define CplusplusCmd /skiff/local/bin/arm-linux-g++ ++#define CplusplusCmd $(TOPDIR)/tmp/cross/bin/arm-linux-g++ + #define DoRanlibCmd YES +-#define RanlibCmd /skiff/local/bin/arm-linux-ranlib ++#define RanlibCmd $(TOPDIR)/tmp/cross/bin/arm-linux-ranlib + #undef ExtraLoadFlags + #define ExtraLoadFlags + #define FbNoPixelAddrCode +@@ -33,7 +33,7 @@ + #define TermcapLibrary -ltermcap + + #undef LdPostLib +-#define LdPostLib -L/skiff/local/arm-linux/lib ++#define LdPostLib -L$(TOPDIR)/tmp/cross/arm-linux/lib + + #undef ExtensionOSDefines + #define ExtensionOSDefines diff --git a/packages/xqt2/files/fephack.patch b/packages/xqt2/files/fephack.patch new file mode 100644 index 0000000000..c09a7ed507 --- /dev/null +++ b/packages/xqt2/files/fephack.patch @@ -0,0 +1,32 @@ +diff -ur xc.org/lib/X11/KeyBind.c xc/lib/X11/KeyBind.c +--- xc.org/lib/X11/KeyBind.c 2001-12-15 04:54:02.000000000 +0900 ++++ xc/lib/X11/KeyBind.c 2004-09-16 19:19:46.000000000 +0900 +@@ -545,6 +545,13 @@ + unsigned int modifiers; + KeySym symbol; + ++ /* X/Qt hack start */ ++ if (event->keycode & 0x100) { ++ *buffer = event->keycode & 0xff; ++ return 1; ++ } ++ /* X/Qt hack end */ ++ + if (! _XTranslateKey(event->display, event->keycode, event->state, + &modifiers, &symbol)) + return 0; +diff -ur xc.org/lib/X11/XlibInt.c xc/lib/X11/XlibInt.c +--- xc.org/lib/X11/XlibInt.c 2003-02-18 14:15:27.000000000 +0900 ++++ xc/lib/X11/XlibInt.c 2004-09-16 19:19:46.000000000 +0900 +@@ -2358,6 +2358,11 @@ + ev->state = event->u.keyButtonPointer.state; + ev->same_screen = event->u.keyButtonPointer.sameScreen; + ev->keycode = event->u.u.detail; ++ /* X/Qt hack start */ ++ if (event->u.keyButtonPointer.pad1 == 0xff) { ++ ev->keycode |= 0x100; ++ } ++ /* X/Qt hack end */ + } + break; + case ButtonPress: diff --git a/packages/xqt2/files/imake-staging.patch b/packages/xqt2/files/imake-staging.patch new file mode 100644 index 0000000000..bf2e350830 --- /dev/null +++ b/packages/xqt2/files/imake-staging.patch @@ -0,0 +1,38 @@ +--- xc/config/cf/Imake.tmpl.orig 2004-07-28 04:24:29.000000000 +0100 ++++ xc/config/cf/Imake.tmpl 2004-09-14 21:03:06.000000000 +0100 +@@ -2038,11 +2038,11 @@ + */ + ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(INSTALLED_INCLUDES) $(STD_INCLUDES) + ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(THREADS_DEFINES) $(MODULE_DEFINES) $(DEFINES) $(EXTRA_DEFINES) +- CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(MODULE_CFLAGS) $(ALLDEFINES) ++ CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(MODULE_CFLAGS) $(ALLDEFINES) $(CC_STAGING) + LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES) $(DEPEND_DEFINES) + LDPRELIB = LdPreLib $(INSTALLED_LIBS) + LDPOSTLIB = LdPostLib +- LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS) ++ LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_LDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS) $(LD_STAGING) + CXXLDOPTIONS = $(CXXDEBUGFLAGS) $(CXXOPTIONS) $(EXTRA_LDOPTIONS) $(THREADS_CXXLDFLAGS) $(LOCAL_LDFLAGS) $(LDPRELIBS) + + LDLIBS = $(LDPOSTLIBS) $(THREADS_LIBS) $(SYS_LIBRARIES) $(EXTRA_LIBRARIES) +--- xc/config/cf/Library.tmpl~ 2004-05-24 20:06:57.000000000 +0100 ++++ xc/config/cf/Library.tmpl 2004-09-14 21:10:29.000000000 +0100 +@@ -114,7 +114,7 @@ + STD_DEFINES = LibraryDefines $(PROJECT_DEFINES) + CDEBUGFLAGS = LibraryCDebugFlags + CLIBDEBUGFLAGS = LibraryDebugOpt +- CFLAGS = $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) ++ CFLAGS = $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) $(CC_STAGING) + # if defined(LargePICTable) && LargePICTable && defined(LargePositionIndependentCFlags) + PICFLAGS = LargePositionIndependentCFlags + # endif +--- xc/config/cf/X11.tmpl~ 2004-09-03 17:18:18.000000000 +0100 ++++ xc/config/cf/X11.tmpl 2004-09-14 21:30:30.000000000 +0100 +@@ -3359,7 +3359,7 @@ + FREETYPE2LIBDIR = Freetype2LibDir + FREETYPE2INCDIR = Freetype2IncDir + #if Freetype2LibDirStandard +-FREETYPE2LIB = -lfreetype ++FREETYPE2LIB = $(LD_STAGING) -lfreetype + #else + FREETYPE2LIB = -L$(FREETYPE2LIBDIR) LinkerRuntimeLibraryPathFlag($(FREETYPE2LIBDIR)) -lfreetype + #endif diff --git a/packages/xqt2/files/moc_call.patch b/packages/xqt2/files/moc_call.patch new file mode 100644 index 0000000000..6e150e201a --- /dev/null +++ b/packages/xqt2/files/moc_call.patch @@ -0,0 +1,11 @@ +--- xc/../xqt2/xfree86/xqt-driver/Imakefile 2006-05-09 11:59:07.000000000 +0200 ++++ xc/../xqt2/xfree86/xqt-driver/Imakefile 2004-09-16 12:40:30.000000000 +0200 +@@ -12,7 +12,7 @@ + + QTDIR = QtDir + +-MOC = QtDir/bin/moc ++MOC = MocBin + + INCLUDES = -I. \ + -I$(XBUILDINCDIR) -I$(FONTINCSRC) \ diff --git a/packages/xqt2/files/xchar2b.patch b/packages/xqt2/files/xchar2b.patch new file mode 100644 index 0000000000..5561bc4ec7 --- /dev/null +++ b/packages/xqt2/files/xchar2b.patch @@ -0,0 +1,25 @@ +* XChar2b patch + +This is *EXTREMELY* important patch to handle strings contains 2-byte character +correctly on ARM architecture hardware. + +On ARM architecture, size of the XChar2b structure will be 4, because gcc +adds 2 byte padding at the last of the structure. This will breaks the +XChar2b stream! + +This patch makes the size of the structure to 2 byte, with +__attribute__ ((packed)) declaration. + + +diff -ur xc.org/lib/X11/Xlib.h xc/lib/X11/Xlib.h +--- xc.org/lib/X11/Xlib.h 2002-06-01 03:45:42.000000000 +0900 ++++ xc/lib/X11/Xlib.h 2004-09-16 19:19:46.000000000 +0900 +@@ -1059,7 +1059,7 @@ + typedef struct { /* normal 16 bit characters are two bytes */ + unsigned char byte1; + unsigned char byte2; +-} XChar2b; ++} __attribute__ ((packed)) XChar2b; + + typedef struct { + XChar2b *chars; /* two byte characters */ diff --git a/packages/xqt2/files/xqt-make.patch b/packages/xqt2/files/xqt-make.patch new file mode 100644 index 0000000000..f031b26794 --- /dev/null +++ b/packages/xqt2/files/xqt-make.patch @@ -0,0 +1,43 @@ +diff -ur xc.org/programs/Xserver/Imakefile xc/programs/Xserver/Imakefile +--- xc.org/programs/Xserver/Imakefile 2003-02-18 02:06:40.000000000 +0900 ++++ xc/programs/Xserver/Imakefile 2004-09-16 19:37:14.000000000 +0900 +@@ -1350,13 +1350,38 @@ + + #endif /* XDarwinServer */ + ++#if defined(XqtXServer) ++XCOMM ++XCOMM Xqt Server Section ++XCOMM ++ ++QTDIR = QtDir ++ ++KDDIRS = StdKdDirs ++ ++XQTDDXDIR = hw/xqt ++SHADOWDIR = miext/shadow ++XQTDIRS = $(STDDIRS) $(KDDIRS) $(XQTDDXDIR) $(SHADOWDIR) $(LAYERDIR) $(DEPDIRS) ++ ++XQTLIB = $(XQTDDXDIR)/LibraryTargetName(xqt) ++XQTOBJS = ++ ++XQTLIBS = PreFbLibs $(XQTLIB) KdLibs $(SHADOW) $(LAYER) FbPostFbLibs ++XQTSYSLIBS = StdKdSysLibs -L$(QTDIR)/lib QtLibs ++ ++/* C++ linker must be used to build Xqt server */ ++CCLINK = $(CXXLINK) ++ ++ServerTarget(Xqt,$(XQTDIRS),$(XQTOBJS),$(XQTLIBS),$(XQTSYSLIBS)) ++#endif /* XqtServer */ ++ + + CFBDIRS = $(CFB8DIR) $(CFB16DIR) $(CFB24DIR) $(CFB32DIR) + MIEXTDIRS = $(SHADOWDIR) $(LAYERDIR) + IPLANDIRS = $(IPLAN2P2DIR) $(IPLAN2P4DIR) $(IPLAN2P8DIR) + DDXDIRS = $(DECWSDDXDIR) $(SUNDDXDIR) $(LYNXDDXDIR) \ + $(HPDDXDIR) $(XFREE86DDXDIR) $(XWINDDXDIR) $(DARWINDDXDIR) \ +- $(XVFBDDXDIR) $(XNESTDDXDIR) ++ $(XVFBDDXDIR) $(XNESTDDXDIR) $(XQTDDXDIR) + SUBDIRS = $(STDDIRS) $(MFBDIR) $(CFBDIRS) $(IPLANDIRS) $(ILBMDIR) $(AFBDIR) \ + $(LMFCFBDIR) $(DDXDIRS) $(FBDIR) $(KDRIVEDIRS) $(MIEXTDIRS) \ + $(XWINPARSERDIR) diff --git a/packages/xqt2/xqt2_20060509.bb b/packages/xqt2/xqt2_20060509.bb new file mode 100644 index 0000000000..1b294475a4 --- /dev/null +++ b/packages/xqt2/xqt2_20060509.bb @@ -0,0 +1,111 @@ +DESCRIPTION = "Xqt2 is an X-Server than runs within the Opie environment" +HOMEPAGE = "http://xqt.sourceforge.jp" +DEPENDS = "freetype libxi xmu flex-native virtual/libqte2 libqpe-opie" +LICENSE = "GPL" +SECTION = "opie/applications" +APPTYPE = "binary" +APPNAME = "Xqt" +PR = "r0" + +inherit palmtop + +SRC_URI = "cvs://anonymous@cvs.sourceforge.jp/cvsroot/xqt;module=xqt2;method=pserver;date=${PV} \ + http://ring.asahi-net.or.jp/archives/XFree86/4.3.0/source/X430src-1.tgz \ + http://ring.asahi-net.or.jp/archives/XFree86/4.3.0/source/X430src-2.tgz \ + http://ring.asahi-net.or.jp/archives/XFree86/4.3.0/source/X430src-3.tgz \ + http://ring.asahi-net.or.jp/archives/XFree86/4.3.0/source/X430src-4.tgz \ + http://ring.asahi-net.or.jp/archives/XFree86/4.3.0/source/X430src-5.tgz \ + file://KeyMap.patch;patch=1 \ + file://moc_call.patch;patch=1 \ + file://imake-staging.patch;patch=1 \ + file://cross.patch;patch=1 \ + file://fephack.patch;patch=1 \ + file://xchar2b.patch;patch=1 \ + file://xqt-make.patch;patch=1 " +S = "${WORKDIR}/xc" + +QT_LIBRARY = '${@base_conditional("PALMTOP_USE_MULTITHREADED_QT", "yes", "qte-mt", "qte",d)}' +QT_LIBRARY_append_c7x0 = " -laticore" + +do_configure() { + #general config + echo "#define BuildServersOnly YES" > config/cf/host.def + echo "#define ProjectRoot /usr" >> config/cf/host.def + + # do not build these XServers + echo "#define XnestServer NO" >> config/cf/host.def + echo "#define XdmxServer NO" >> config/cf/host.def + + # build commands + echo "#define CcCmd ${CC}" >> config/cf/host.def + echo "#define CplusplusCmd ${CXX}" >> config/cf/host.def + echo "#define LdCmd ${LD}" >> config/cf/host.def + + # Qt defines + echo "#define QtCmnDefs -fno-exceptions -fno-rtti" >> config/cf/host.def + echo "#define QtDir ${QTDIR}" >> config/cf/host.def + echo "#define QtLibs -lqpe -l${QT_LIBRARY} -lm -lpng -ljpeg -lts -lsupc++" >> config/cf/host.def + echo "#define MocBin ${STAGING_BINDIR}/moc" >> config/cf/host.def + echo "#define QtDefs -DQWS -DOPIE_NEW_MALLOC -DOPIE_NO_ERASE_RECT_HACKFIX QtCmnDefs" >> config/cf/host.def + + # Build these XServers + echo "#define XqtXServer YES" >> config/cf/host.def + echo "#define XF86Server NO" >> config/cf/host.def + echo "#define TinyXServer YES" >> config/cf/host.def + echo "#define KDriveXServer YES" >> config/cf/host.def + echo "#define KdriveServerExtraDefines -DDDXOSFATALERROR -DDDXOSVERRORF" >> config/cf/host.def + + # General Config + echo "#define SystemUsrIncDir ${STAGING_INCDIR}" >> config/cf/host.def + echo "#define IncRoot ${STAGING_INCDIR}" >> config/cf/host.def + echo "#define LdPostLib -L${STAGING_LIBDIR}" >> config/cf/host.def + + echo "#undef BuildRandR " >> config/cf/host.def + echo "#define BuildRandR YES" >> config/cf/host.def + echo "#define BuildLBX YES" >> config/cf/host.def + + # change standard defines + if [ ${TARGET_ARCH} == "arm" ]; then + echo "#define StandardDefines -Dlinux -D__arm__ -D_POSIX_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE" >> config/cf/host.def + echo "#define Arm32Architecture" >> config/cf/host.def + fi + echo "" > config/cf/date.def +} + +do_compile() { + export TOPDIR=${TOPDIR} + mkdir -p programs/Xserver/hw/xqt + #cp -r ../xqt-driver/* programs/Xserver/hw/xqt + (cd programs/Xserver/hw/xqt && ln -s ../../../../../xqt2/xfree86/xqt-driver/* .) + unset CC + make -C config/imake -f Makefile.ini CC="${BUILD_CC}" BOOTSTRAPCFLAGS="${BUILD_CFLAGS}" clean imake + make CC="${BUILD_CC}" xmakefile + make Makefiles + make clean + #make depend + make includes CC="${BUILD_CC}" + make -C config/util CC="${BUILD_CC}" + for l in font xtrans Xdmcp Xau lbxutil; do make -C lib/$l CC="${CC}" LD="${LD}" CC_STAGING="-I${STAGING_INCDIR}" LD_STAGING="-L${STAGING_LIBDIR}"; done + make -C programs/Xserver CC="${CC}" LD="${LD}" CC_STAGING="-I${STAGING_INCDIR}" LD_STAGING="-L${STAGING_LIBDIR}" INSTALLED_LIBS="" +} + +do_stage() { + install -d ${STAGING_INCDIR}/xserver-xqt + install -m 0644 programs/Xserver/hw/xfree86/common/fourcc.h ${STAGING_INCDIR}/xserver-xqt +} + +do_install() { + oe_runmake -C programs/Xserver DESTDIR="${D}" CC="${CC}" LD="${LD}" \ + CC_STAGING="-I${STAGING_INCDIR}" LD_STAGING="-L${STAGING_LIBDIR}" INSTALLED_LIBS="" install + oe_runmake -C lib/font DESTDIR="${D}" CC="${CC}" LD="${LD}" \ + CC_STAGING="-I${STAGING_INCDIR}" LD_STAGING="-L${STAGING_LIBDIR}" INSTALLED_LIBS="" install + + install -d ${D}${palmtopdir}/Apps/applications/ + install -m 0644 ${WORKDIR}/xqt2/xfree86/files/Xqt.desktop ${D}${palmtopdir}/Apps/applications + install -d ${D}${palmtopdir}/bin/ + install -m 0755 ${D}${bindir}/Xqt ${D}${palmtopdir}/bin/Xqt + install -d ${D}${palmtopdir}/pics + install -m 0644 programs/Xserver/hw/xqt/Xqt.png ${D}${palmtopdir}/pics +} + +PACKAGE_ARCH_c7x0 = "${MACHINE_ARCH}" |