Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
APPX HTML Client 5.4.5This page gives installation instructions and an overview of the Appx HTML client. | ||||||||
Changed: | ||||||||
< < | ||||||||
> > | ||||||||
OverviewThe Appx HTML client is designed to allow you to connect to an Appx server and run Appx applications using a browser, either on the desktop, a tablet or a smartphone. When running the client in a browser, no software is required on the desktop, tablet or smart phone. When the user logs on, the necessary code is downloaded to their device as required. | ||||||||
Line: 14 to 14 | ||||||||
The client will support SSL connections if your web server is configured appropriately. If not, the client will use its own built in AES encryption but be aware that this is not sufficient to protect sensitive data. The Appx HTML client consists of two modules: | ||||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
Note that Appx does not have to be running on the same server as your web server, and the APPX Server Connector does not have be on the same server as either Appx or your web server. This gives you maximum flexibility in configuring your installation. Once the HTML client is working, you can connect to any Appx 5.4+ server, just as you can with the Appx Desktop Client. Due to the engine changes that were made in 5.4 to support the HTML client, you cannot connect to an earlier Appx engine. | ||||||||
Added: | ||||||||
> > | We have tested the HTML client on current versions of IE, Chrome, Firefox and Safari. | |||||||
Prerequisites | ||||||||
Changed: | ||||||||
< < | The server that will run the APPX Server Connector requires 'nodejs' (https://nodejs.org/). In Release 5.4.4 and higher you also need the Mongo Database (https://www.mongodb.org/). See below for details on installing these packages.
Local Connector | |||||||
> > | The server that will run the APPX Server Connector requires some additional software:
Local Connector vs Web BrowserThere are 2 ways of uploading/downloading/displaying files with the HTML client.Local ConnectorThe Local Connector is a small 'helper' program that allows you to upload/download and open files on the users desktop, similar to the way it can be done with the APPX Desktop Client. By default, the HTML client will check to see if the local connector program is running when the user logs in (is this true?). If it is not running, it will offer to install it, and if the user cancels they will be nagged the next time they log in. If your application does not require the ability to upload/download/open files on the desktop, or you want to use the Browser based method, you can turn this off (see Installation below). The Local Connector only runs on Windows, OS/X or Linux based desktops or tablets. | |||||||
Changed: | ||||||||
< < | Because of the tighter security in web browsers, it is not possible for HTML 5/javascript to seamlessly upload, download or open files unassisted on the users desktop the way it can be done with the Appx Desktop Client. To address this, the HTML client includes a small 'helper' program that supports this. This is called the 'LocalConnector'. By default, the HTML client will check to see if the local connector program is running when the user logs in. If it is not running, it will offer to install it, and if the user cancels they will be nagged the next time they log in. | |||||||
> > | There is a 'Connectivity' indicator in the lower right corner of the browser window with the words 'Remote' and 'Local'. If 'Local' is in green with a "+", it means the local connector is installed & running. Red means the connector is not installed. You can click the 'Local' sign to manually download and install the connector.
Web Browser | |||||||
Changed: | ||||||||
< < | If your application does not require the ability to upload/download/open files on the desktop, you can turn this off (see Installation below). | |||||||
> > | The other option is to use the Web Browser's built in ability to handle files. With this option, the APPX Server Connector stores the file in the Mongo database, then passes a URL to the Web Browser. The Web Browser will either display the file in a new tab if it knows how process that file type, or offer to save the file if it does not know how to display it. This is a better choice if you are planning to deploy your applications on non Windows tablets or smartphones. | |||||||
Changed: | ||||||||
< < | There is a 'Connectivity' indicator in the lower right corner of the browser window with the words 'Remote' and 'Local'. If 'Local' is in green with a "+", it means the local connector is installed & running. Red means the connector is not installed. The 'Remote' connector refers to the connection to the Appx Server Connector. This must be green with a "+" for any connection to work. | |||||||
> > | The file does not remain in the Mongo Database indefinitely (how long??), so if the user refreshes that tab they will get error 404. can you still drag & drop w/o the local connector? How do uploads work without a local connector? | |||||||
Differences between ADC and HTML ClientsThe HTML client has a different presentation for most non-Appx elements such as Date Choosers, File Upload/download dialog boxes, Tables, etc. The goal of the HTML client was to replicate the presentation of your screens as accurately as possible as far as the Appx elements are concerned (i.e., the widgets and fields you use in the Image Editor). Since we use different 3rd party tools and runtimes for other elements, they will look different compared to the Appx Desktop Client. | ||||||||
Line: 39 to 56 | ||||||||
The web server does not have to be on the same server as Appx. | ||||||||
Changed: | ||||||||
< < | If you plan to use an SSL connection, your web server must be configured to accept both SSL and non-SSL connections. | |||||||
> > | If you plan to use an SSL connection, your web server must be configured to accept both SSL and non-SSL connections. Note: if you are trying to use SSL with the local connector running you will receive an error saying that part of your connection is not secure. The local connector does not have the functionality to talk to the browser using SSL. Is this an error that prevents it from running, or just an informational message? | |||||||
If you are going to run the APPX Server Connector on a Windows server, make sure all patches have been applied. In particular, https://support.microsoft.com/en-us/kb/2731284 will break tables if it is not applied | ||||||||
Deleted: | ||||||||
< < | We have tested the HTML client on current versions of IE, Chrome, Firefox and Safari. | |||||||
Installation - Web Server Component1) Extract the Web Server File (webhost.zip) into the document folder for your web server. Depending on your web site layout, you may want to put this in its own folder within the web server documents, i.e., /var/www/html/appx. | ||||||||
Line: 52 to 67 | ||||||||
<meta name="appx-proxy-host" content="HOSTNAME"> <!-- Server Connector hostname or web server if tunneling --> | ||||||||
Changed: | ||||||||
< < | Change HOSTNAME to the name or IP address of the server running the Appx Server Connector. Do not use localhost you plan to run the HTML client on the same server as the Appx Server Connector, i.e., a testing/evaluation environment. | |||||||
> > | Change HOSTNAME to the name or IP address of the server running the Appx Server Connector. Do not use localhost unless you plan to run the HTML client on the same server as the Appx Server Connector, i.e., a testing/evaluation environment. | |||||||
Installation - APPX Server Connector Component | ||||||||
Changed: | ||||||||
< < | The APPX Server Connector is the software that connects the HTML clients and the APPX server. This can be installed on the same server as the web server, or the APPX Server, or a completely different machine. If you are not using tunnneling via the web server, then port 3014 (the default port) needs to be open between the server connector machine and your HTML clients. | |||||||
> > | The APPX Server Connector is the software that connects the HTML clients and the APPX server. This can be installed on the same server as the web server, or the APPX Server, or a completely different machine. If you are not using tunnneling via the web server, then port 3015 (the default port) needs to be open between the server connector machine and your HTML clients. | |||||||
Prerequisites | ||||||||
Changed: | ||||||||
< < | All releases of the APPX Server Connector require the 'nodejs' package from https://nodejs.org/. For rpm based Linux systems, you can install it via (as root): | |||||||
> > | The server that will run the APPX Server Connector requires some additional software:
| |||||||
Changed: | ||||||||
< < | curl --silent --location https://rpm.nodesource.com/setup | bash -yum install nodejs | |||||||
> > |
| |||||||
Deleted: | ||||||||
< < | To install on Windows, go to https://nodejs.org and download the Windows installer (msi) file and simply run the installer. As of Release 5.4.4 the APPX Server Connector also requires the MongoDB Database for caching images and other items. Instructions for downloading and configuring the database can be found at https://docs.mongodb.org/manual/tutorial/ | |||||||
Installation | ||||||||
Changed: | ||||||||
< < | 1) Extract the Appx Server Connector to a location of your choice. A folder in the /opt directory would be a good choice on a Linux server. Once the software is extracted, run the appxConnector-install.js script. This should be run as 'root' on Linux/Unix systems, and as an Administrator on Windows systems. This will check your system for the required modules. To run the script, open a terminal or DOS window and navigate to the folder where you installed the Appx Server Connector, then invoke the script via 'node':
[root@localhost ~]# cd /opt/appxConnector543 | |||||||
> > | 1) If you are upgrading from a prior release, you must uninstall the old Server Connector first by running 'appxConnector-uninstall.js'. You must do this before installing the new connector. This should be run as 'root' on Linux/Unix systems, and as an Administrator on Windows systems. To run the script, open a terminal or DOS window and navigate to the folder where you installed the Appx Server Connector, then invoke the script via 'node':
[root@localhost appxConnector]# node appxConnector-uninstall.js Using default mode: systemd Uninstall complete. The service exists: false [root@localhost appxConnector]#2) Extract the 5.4.5 Appx Server Connector to a location of your choice. A folder in the /opt directory would be a good choice on a Linux server. 3) Run the appxConnector-install.js script. This should also be run as 'root' on Linux/Unix systems, or as an Administrator on Windows systems. This will check your system for the required modules. To run the script, open a terminal or DOS window and navigate to the folder where you installed the Appx Server Connector, then invoke the script via 'node': [root@localhost ~]# cd /opt/appxConnector | |||||||
Notice in this example the module 'string' is missing and the instructions on how to install it are displayed. If any modules are missing on your system, run the appropriate 'npm' command to install them, then re-run the install script. If all modules are present, the service will be created: | ||||||||
Deleted: | ||||||||
< < | [root@localhost appxConnector543]# node appxConnector-install.js | |||||||
Changed: | ||||||||
< < | 2) Confirm the service is running. In Linux/Unix you can use 'ps -ef|grep appxConnector.js', and in Windows you can use the 'Services' control panel. | |||||||
> > | [root@localhost appxConnector]# node appxConnector-install.js4) Confirm the service is running. In Linux/Unix you can use 'ps -ef|grep appxConnector.js', and in Windows you can use the 'Services' control panel. | |||||||
Assuming the web server to which we installed the client is 192.168.0.15, and that we installed everything into an 'appx' folder on the web server, then we should be able to get a client login dialog box via: | ||||||||
Changed: | ||||||||
< < | http://192.168.0.15/appx/client.html | |||||||
> > | http://192.168.0.15/appx/client.html | |||||||
Changed: | ||||||||
< < | You must open port 3014 on the server running the APPX Server Connector for this connection to work. If you do not want to open any new ports on your firewall, see the section on 'Tunneling/Forwarding'. Upgrading an existing HTML client installation | |||||||
> > | You must open port 3015 on the server running the APPX Server Connector for this connection to work. If you do not want to open any new ports on your firewall, see the section on 'Tunneling/Forwarding'. Post Installation if upgrading an existing HTML client installation | |||||||
Changed: | ||||||||
< < | If you are upgrading an existing HTML client installation, the procedure is similar to installation except:
LocalConnector | |||||||
> > | If you are upgrading an existing HTML client installation, then you should check the following:
Local Connector or Web Browser Configuration | |||||||
Changed: | ||||||||
< < | As mentioned above, you can suppress the requirement for the LocalConnector by changing the following line in "client.html": | |||||||
> > | As mentioned above, you have a choice on how the HTML client should handle files sent to/from the browser. By default, the HTML client will try to use the local connector (is this true?). You can suppress the requirement for the Local Connector by changing the following line in "client.html": | |||||||
<meta name="appx-local-required" content="true" > Change the "true" to "false" to supress the requirement. | ||||||||
Deleted: | ||||||||
< < | LocalConnector Installation | |||||||
Changed: | ||||||||
< < | If you do not turn off the LocalConnector requirement as above, then when the 'client.html' page is loaded it will check to see if the local connector is running on the users desktop. If not, they will get a dialog box offering to download the local connector. The actual installation of the local connector varies by the O/S on the user's desktop: | |||||||
> > | If you do not turn off the Local Connector requirement as above, then when the 'client.html' page is loaded it will check to see if the local connector is running on the users desktop. If not, they will get a dialog box offering to download the local connector. The actual installation of the local connector varies by the O/S on the user's desktop: | |||||||
| ||||||||
Line: 106 to 130 | ||||||||
| ||||||||
Added: | ||||||||
> > | If you are going to use the Web Browser to handle files instead of the local connector, then turn off the requirement for a Local Connector as above, and change the following line in "client.html": <meta name="appx-upload-without-local" content="false" > Change the "true" to "false" to force the HTML client to use the Web Browser to handle files. The Application Designer can also control this. Each file chooser widget can be individually set to not use the local connector by using the macro: @FULC=F | |||||||
Tunneling/Forwarding | ||||||||
Changed: | ||||||||
< < | If you do not want to open port 3014 and would rather use port 80, you can use forwarding instead. For example, to configure Apache 2.4 on Linux you would do the following: | |||||||
> > | If you do not want to open port 3015 and would rather use port 80, you can use forwarding instead. For example, to configure Apache 2.4 on Linux you would do the following: | |||||||
| ||||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
| ||||||||
Changed: | ||||||||
< < | If you are using Windows IIS for your web sever platform, and do not wish to expose TCP 3014 then you'll need IIS 8.0 or greater to support Websockets with IIS ARR installed and the URL Rewrite module enabled. A web.config similar to the following should work. | |||||||
> > | If you are using Windows IIS for your web sever platform, and do not wish to expose TCP 3015 then you'll need IIS 8.0 or greater to support Websockets with IIS ARR installed and the URL Rewrite module enabled. A web.config similar to the following should work. | |||||||
<?xml version="1.0" encoding="UTF-8"?> <configuration> | ||||||||
Line: 149 to 179 | ||||||||
var sslEnabled = true; | ||||||||
Changed: | ||||||||
< < | For Unix/Linux hosts var sslPrivateKey = "/etc/pki/tls/private/example.key"; var sslCertificate = "/etc/pki/tls/certs/example.com.crt"; var sslCertAuthority = "/etc/pki/tls/certs/gd_bundle.crt"; For Windows hosts var sslPrivateKey = "c:\\appx\\SSL\\example.key"; var sslCertificate = "c:\\appx\\SSL\\example.crt"; var sslCertAuthority = "c:\\appx\\SSL\\gd_bundle.crt" | |||||||
> > | For Unix/Linux hosts var sslPrivateKey = "/etc/pki/tls/private/example.key"; var sslCertificate = "/etc/pki/tls/certs/example.com.crt"; var sslCertAuthority = "/etc/pki/tls/certs/gd_bundle.crt"; For Windows hosts var sslPrivateKey = "c:\\appx\\SSL\\example.key"; var sslCertificate = "c:\\appx\\SSL\\example.crt"; var sslCertAuthority = "c:\\appx\\SSL\\gd_bundle.crt" | |||||||
The SSL key values above are examples, you will need to change the file paths to point to your own SSL certificates. Once you have made the above changes, restart the Server Connector and refresh the Appx Login page in your browser (if it was still loaded when you made these changes). | ||||||||
Changed: | ||||||||
< < | NOTE: You still use 'http://' to connect to the client page. The client will switch to the SSL connection once the page is loaded. | |||||||
> > | NOTES:
| |||||||
StylesMany aspects of the presentation of the Appx Client are controlled by the APPX.css style sheet in the 'css' folder. If you are familiar with working with style sheets, feel free to experiment with different settings, however those changes will be lost the next time the client is updated. | ||||||||
Line: 182 to 207 | ||||||||
} This will set the background color of edittable fields to 'pink' and the default background color to 'white'. | ||||||||
Changed: | ||||||||
< < | Styles by website (5.4.4.1 HTML Client & up only) | |||||||
> > | Styles by website | |||||||
It is possible to have different CUSTOM.css style sheets. Install the client web server files as normal, then follow these steps: | ||||||||
Line: 195 to 220 | ||||||||
| ||||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
| ||||||||
Changed: | ||||||||
< < |
| |||||||
> > |
| |||||||
| ||||||||
Changed: | ||||||||
< < | Comments | |||||||
> > | Comments | |||||||
Changed: | ||||||||
< < | Read what other users have said about this page or add your own comments. | |||||||
> > | Read what other users have said about this page or add your own comments. | |||||||
Changed: | ||||||||
< < | ||||||||
> > | ||||||||
-- JeanNeron - 2015-12-18 \ No newline at end of file |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Added: | ||||||||
> > |
APPX HTML Client 5.4.5This page gives installation instructions and an overview of the Appx HTML client.OverviewThe Appx HTML client is designed to allow you to connect to an Appx server and run Appx applications using a browser, either on the desktop, a tablet or a smartphone. When running the client in a browser, no software is required on the desktop, tablet or smart phone. When the user logs on, the necessary code is downloaded to their device as required. In this release, you can only run the applications, you cannot design them. Specifically, the ILF editor, old ILF Debugger and Image Editor are not supported. You may be able to work in Application Design so long as you avoid those. The client will support SSL connections if your web server is configured appropriately. If not, the client will use its own built in AES encryption but be aware that this is not sufficient to protect sensitive data. The Appx HTML client consists of two modules:
Local ConnectorBecause of the tighter security in web browsers, it is not possible for HTML 5/javascript to seamlessly upload, download or open files unassisted on the users desktop the way it can be done with the Appx Desktop Client. To address this, the HTML client includes a small 'helper' program that supports this. This is called the 'LocalConnector'. By default, the HTML client will check to see if the local connector program is running when the user logs in. If it is not running, it will offer to install it, and if the user cancels they will be nagged the next time they log in. If your application does not require the ability to upload/download/open files on the desktop, you can turn this off (see Installation below). There is a 'Connectivity' indicator in the lower right corner of the browser window with the words 'Remote' and 'Local'. If 'Local' is in green with a "+", it means the local connector is installed & running. Red means the connector is not installed. The 'Remote' connector refers to the connection to the Appx Server Connector. This must be green with a "+" for any connection to work.Differences between ADC and HTML ClientsThe HTML client has a different presentation for most non-Appx elements such as Date Choosers, File Upload/download dialog boxes, Tables, etc. The goal of the HTML client was to replicate the presentation of your screens as accurately as possible as far as the Appx elements are concerned (i.e., the widgets and fields you use in the Image Editor). Since we use different 3rd party tools and runtimes for other elements, they will look different compared to the Appx Desktop Client.RequirementsYou will need a web server, either Linux or Windows based. If you are going to use the Apache web server and you want to use a forwarding proxy, it must be version 2.4 or higher. We have tested IIS on Win 7 with success, earlier versions of IIS have not been tested. The web server does not have to be on the same server as Appx. If you plan to use an SSL connection, your web server must be configured to accept both SSL and non-SSL connections. If you are going to run the APPX Server Connector on a Windows server, make sure all patches have been applied. In particular, https://support.microsoft.com/en-us/kb/2731284 will break tables if it is not applied We have tested the HTML client on current versions of IE, Chrome, Firefox and Safari.Installation - Web Server Component1) Extract the Web Server File (webhost.zip) into the document folder for your web server. Depending on your web site layout, you may want to put this in its own folder within the web server documents, i.e., /var/www/html/appx. 2) Set the name of the host running the Appx Server Connector in the 'client.html' web page: <meta name="appx-proxy-host" content="HOSTNAME"> <!-- Server Connector hostname or web server if tunneling --> Change HOSTNAME to the name or IP address of the server running the Appx Server Connector. Do not use localhost you plan to run the HTML client on the same server as the Appx Server Connector, i.e., a testing/evaluation environment.Installation - APPX Server Connector ComponentThe APPX Server Connector is the software that connects the HTML clients and the APPX server. This can be installed on the same server as the web server, or the APPX Server, or a completely different machine. If you are not using tunnneling via the web server, then port 3014 (the default port) needs to be open between the server connector machine and your HTML clients.PrerequisitesAll releases of the APPX Server Connector require the 'nodejs' package from https://nodejs.org/. For rpm based Linux systems, you can install it via (as root): curl --silent --location https://rpm.nodesource.com/setup | bash -yum install nodejsTo install on Windows, go to https://nodejs.org and download the Windows installer (msi) file and simply run the installer. As of Release 5.4.4 the APPX Server Connector also requires the MongoDB Database for caching images and other items. Instructions for downloading and configuring the database can be found at https://docs.mongodb.org/manual/tutorial/ Installation1) Extract the Appx Server Connector to a location of your choice. A folder in the /opt directory would be a good choice on a Linux server. Once the software is extracted, run the appxConnector-install.js script. This should be run as 'root' on Linux/Unix systems, and as an Administrator on Windows systems. This will check your system for the required modules. To run the script, open a terminal or DOS window and navigate to the folder where you installed the Appx Server Connector, then invoke the script via 'node':[root@localhost ~]# cd /opt/appxConnector543Notice in this example the module 'string' is missing and the instructions on how to install it are displayed. If any modules are missing on your system, run the appropriate 'npm' command to install them, then re-run the install script. If all modules are present, the service will be created: [root@localhost appxConnector543]# node appxConnector-install.js2) Confirm the service is running. In Linux/Unix you can use 'ps -ef|grep appxConnector.js', and in Windows you can use the 'Services' control panel. Assuming the web server to which we installed the client is 192.168.0.15, and that we installed everything into an 'appx' folder on the web server, then we should be able to get a client login dialog box via: http://192.168.0.15/appx/client.html You must open port 3014 on the server running the APPX Server Connector for this connection to work. If you do not want to open any new ports on your firewall, see the section on 'Tunneling/Forwarding'. Upgrading an existing HTML client installationIf you are upgrading an existing HTML client installation, the procedure is similar to installation except:
LocalConnectorAs mentioned above, you can suppress the requirement for the LocalConnector by changing the following line in "client.html": <meta name="appx-local-required" content="true" > Change the "true" to "false" to supress the requirement.LocalConnector InstallationIf you do not turn off the LocalConnector requirement as above, then when the 'client.html' page is loaded it will check to see if the local connector is running on the users desktop. If not, they will get a dialog box offering to download the local connector. The actual installation of the local connector varies by the O/S on the user's desktop:
Tunneling/ForwardingIf you do not want to open port 3014 and would rather use port 80, you can use forwarding instead. For example, to configure Apache 2.4 on Linux you would do the following:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="ReverseProxyInboundRule1"> <match url="appxws" /> <action type="Rewrite" url="http://localhost:3014/{R:0}" /> </rule> <rule name="ReverseProxyInboundRule2"> <match url="appxhttp" /> <action type="Rewrite" url="http://localhost:3014/{R:0}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>NOTE: If you are running selinux security on your server, you will have to configure it so that apache can initiate an outgoing network connections to the web socket server port. Use the following command: # setsebool -P httpd_can_network_connect 1 SSLIf you are running a secure web server (https), you can configure the Appx HTML client to use your SSL connection. Your web server must to configured to accept both SSL (https:) and non-SSL (http:) connections. Change your "client.html" settings as follows (this file is located on your web server): appx-proxy-host = hostname of httpd server (i.e., 192.168.1.11)appx-proxy-port = “443" appx-proxy-path = /appxwss/ appx-encryption = “ssl” Change your "appxConnector.js" as follows (this file is located on your APPX Server Connector server): var sslEnabled = true; For Unix/Linux hosts var sslPrivateKey = "/etc/pki/tls/private/example.key"; var sslCertificate = "/etc/pki/tls/certs/example.com.crt"; var sslCertAuthority = "/etc/pki/tls/certs/gd_bundle.crt"; For Windows hosts var sslPrivateKey = "c:\\appx\\SSL\\example.key"; var sslCertificate = "c:\\appx\\SSL\\example.crt"; var sslCertAuthority = "c:\\appx\\SSL\\gd_bundle.crt" The SSL key values above are examples, you will need to change the file paths to point to your own SSL certificates. Once you have made the above changes, restart the Server Connector and refresh the Appx Login page in your browser (if it was still loaded when you made these changes). NOTE: You still use 'http://' to connect to the client page. The client will switch to the SSL connection once the page is loaded. StylesMany aspects of the presentation of the Appx Client are controlled by the APPX.css style sheet in the 'css' folder. If you are familiar with working with style sheets, feel free to experiment with different settings, however those changes will be lost the next time the client is updated. Instead, you can add a CUSTOM.css style sheet with your own settings. This should be located in the same folder as APPX.css and will override the standard settings in the HTML client. For example: input { background-color: pink; } .appxbox { background-color: white; } This will set the background color of edittable fields to 'pink' and the default background color to 'white'.Styles by website (5.4.4.1 HTML Client & up only)It is possible to have different CUSTOM.css style sheets. Install the client web server files as normal, then follow these steps:
Troubleshooting
CommentsRead what other users have said about this page or add your own comments.-- JeanNeron - 2015-12-18 |