ログとエラー コード
QlikView Server からのすべてのアラートは、Windows のイベント ログに表示されます。
QlikView Server からのログ
詳細なセッション ログはログ ディレクトリにあり、これは QlikView Management Console (QMC) で [システム (System)] > [設定 (Setup)] の順でクリックし、[ログ (Logging)] タブで指定します。既定の場所は %ProgramData%\QlikTech\QlikViewServer です。
ログ ファイルの分割 (新規作成) を、毎日、毎週、毎月、毎年、なしに設定できます。パフォーマンス ログの間隔を 1 分もしくはそれ以上に設定できます。
セッションのログ
1 セッションの定義は、1 つのドキュメントに 1 人のユーザーが接続することです。
セッション ログのファイル名は、Sessions*.log で、* はサーバー名と分割する間隔を示します。セッション ログの各エントリには、次の項目が含まれます。
エントリ | 説明 |
---|---|
Exe Type |
QVS ビルドの種類。 例:“RLS64” = 64 ビット リリース ビルド |
Exe Version |
QVS のフル バージョン番号。 例: “11.00.11076.0409.10” |
Server started | QVS が開始された日付および時刻。 |
タイムスタンプ | ログ エントリが作成された日付および時刻。 |
ドキュメント | アクセスした QlikView ドキュメント。 |
Document Timestamp | アクセスしたドキュメント ファイルのタイムスタンプ。 |
QlikView User | QlikView セクション アクセス ユーザー ID (使用されている場合) |
Exit Reason |
セッションの終了理由。
情報メモこれは完全なリストではありません。オペレーション システムから返される終了値もあります。
|
セッション ID | セッションの ID。 |
Session Start | セッションが開始された時間。 |
Session Duration | セッションの長さ (時間: 分: 秒) |
CPU Spent (s) | セッションが使用した CPU 秒。 |
Bytes Received | セッション中にサーバーが受信したバイト数。 |
Bytes Sent | セッション中にサーバーが送信したバイト数。 |
Calls | セッション中の QlikView コール数 (双方向)。 |
選択 | セッション中に行われた QlikView の選択数。 |
Authenticated User | 認証済み Windows NT® ユーザー ID (あれば)。 |
Identifying User | クライアント ユーザー識別。 |
Client Machine Identification |
クライアント マシン識別。 デフォルトでは、Windows Management Instrumentation (WMI) に対する呼び出しの、universally unique identifier (UUID) 受信者です。 UUID が使用できない場合は、代わりに次の ID のいずれかが表示されます。
|
(Serial Number) | QlikView クライアントのシリアル番号 (QlikView Desktop および QlikView プラグインがインストールされているクライアントのみ)。 |
Client Type |
クライアントの種類:
|
Client Build Version | QlikView クライアントのビルド バージョン。 |
Secure Protocol |
セキュア プロトコル:
|
Tunnel Protocol | 「Tunnel」は QVS トンネル通信が使用された場合。 |
Server Port | サーバーに使用されたポート。 |
Client Address | サーバーに接続 (上記「Server Port」項目で指定されたポートを使用) しているクライアントのクライアント IP 番号。 |
Client Port | クライアント ポート。 |
Cal の種類 |
Client Access License (CAL) の種類:
|
Cal Usage Count | Usage CAL の数。 |
パフォーマンスのログ
パフォーマンス ログは、QMC で [システム (System)] > [設定 (Setup)] の順でクリックし、[ログ (Logging)] タブで指定した間隔で更新されます。デフォルトの間隔は 5 分です。サーバーが開始あるいは停止した際には、追加のエントリが入力されます。ログのファイル名は、Performance*.log で、* はサーバー名と分割する間隔を示します。
ログの各エントリには、次の項目が含まれます。
エントリ | 説明 |
---|---|
Exe Type |
QVS ビルドの種類。 例:“RLS64” = 64 ビット リリース ビルド |
Exe Version |
QVS のフル バージョン番号。 例: “11.00.11076.0409.10” |
Server started | QVS が開始された日付および時刻。 |
タイムスタンプ | ログ エントリが作成された日付および時刻。 |
EntryType |
エントリの種類:
|
ActiveDocSessions | インターバルの間、そしてインターバルの終わりにまだ存在する活動を示すドキュメントのセッション* 数 |
DocSessions | インターバルの終わりに存在するドキュメントのセッション* 合計数 |
ActiveAnonymousDocSessions | インターバルの間、そしてインターバルの終わりにまだ存在する活動を示す匿名ユーザーのドキュメントのセッション* 数 |
AnonymousDocSessions | インターバルの終わりに存在する匿名ユーザーのドキュメントのセッション* 合計数 |
ActiveTunneledDocSessions | インターバルの間、そしてインターバルの終わりにまだ存在する活動を示すトンネル接続のドキュメントのセッション* 数 |
TunneledDocSessions | インターバルの終わりに存在するトンネル接続のドキュメントのセッション* 合計数 |
DocSessionStarts | インターバルの間に開始されたドキュメントのセッション* 数 |
ActiveDocs | ユーザー アクティビティが存在していたインターバルの、終了時にロードされていたドキュメントの数。 |
RefDocs | 終了時にセッションが存在しているインターバルの、終了時にロードされていたドキュメントの数。 |
LoadedDocs | インターバルの終了時にロードされていた、ドキュメントの総数。 |
DocLoads | インターバル中にロードされた、新規ドキュメントの数。 |
DocLoadFails | インターバル中にロードに失敗した、ドキュメントの数。 |
Calls | インターバル中に実行された、QVS に対するコールの総数。 |
選択 | インターバル中に実行された、選択コールの数。 |
ActiveIpAddrs |
インターバル中にアクティブになったことがあり、インターバルの終了時にもまだ存在していた、異なる IP アドレスの数。 情報メモ同一 IP アドレスに由来するトンネル セッションと複数のユーザーは、区別できないので注意が必要です。
|
IpAddrs |
インターバルの終了時に接続されていた、異なる IP アドレスの総数。 情報メモ同一 IP アドレスに由来するトンネル セッションと複数のユーザーは、区別できないので注意が必要です。
|
ActiveUsers |
インターバル中にアクティブになったことがあり、インターバルの終了時にもまだ存在していた、異なる NT ユーザーの数。 情報メモ匿名ユーザーは識別できないので注意が必要です。
|
Users |
インターバルの終了時に接続されていた、異なる NT ユーザーの総数。 情報メモ匿名ユーザーは識別できないので注意が必要です。
|
CPULoad | インターバル中の、QVS からの平均 CPU ロード。 |
VMAllocated(MB) | インターバル** の終了時点における、QVS に割り当てられた仮想メモリのサイズ (MB) |
VMCommitted(MB) | インターバル** の終了時点における、QVS が実際に使用した仮想メモリのサイズ (MB) この数値は、VMAllocated(MB) の一部です。許容外の応答時間を回避するため、物理メモリのサイズを超過しないようにします。 |
VMFree(MB) | QVS** で使用可能な割り当てられていない仮想メモリのサイズ (MB) |
VMLargestFreeBlock(MB) | QVS で使用可能な、割り当てられていない仮想メモリの最大連続ブロックのサイズ (MB)。この数値は VMFree(MB) の一部です。 |
UsageCalBalance | 「-1.00」= Usage CAL はありません。 |
CacheHits | 一般キャッシュ ヒット数 |
CacheLookups | 一般キャッシュ ルックアップ数 |
CacheObjectAdded | 一般キャッシュに追加されたオブジェクト数 |
CacheBytesAdded | 一般キャッシュに追加されたバイト数 |
CacheTimeAdded | 一般キャッシュへの新規オブジェクト追加での所要時間 |
CacheReplaced | 一般キャッシュ内で置き換えられたオブジェクト数 |
* 1 ユーザー + 1 ドキュメント = 1 ドキュメント セッション
**VMAllocated(MB) + VMFree(MB) = QVS プロセスに使用可能な合計最大仮想メモリ量。
サーバー サイド拡張ログ
サーバーサイド拡張 (SSE) ログのファイル名は、SSE*.log で、* はサーバー名と分割する間隔を示します。SSE ログの各エントリには、次の項目が含まれます。
エントリ | 説明 |
---|---|
Severity |
|
日付と時刻 | ログ エントリが作成された日付および時刻。 |
ProcessId | ログ メッセージの発信元のプロセスの ID。 |
ThreadId | ログ メッセージがファイルに書き込まれたときに使用されたスレッドの ID。 |
UserId | ユーザーの ID。 |
QixRequestId | 要求の発信側によって確立された ID。このメンバーが存在しない場合、RPC 呼び出しが通知であると見なされます。 |
AppId | 分析接続を介したサーバーサイド拡張 (SSE) プラグインに対する呼び出しを含むアプリの ID。 |
App Title | 分析接続を介した SSE プラグインに対する呼び出しを含むアプリのタイトル。 |
SSEPlugin |
SSE プラグインに対する呼び出し時にログ メッセージが作成された場合の、そのプラグインのマッピング/エイリアス、例えば Python プラグインの SSEPython。SSE プラグインに対する呼び出しがなくログ メッセージが作成された場合、例えば SSE の初期化中は、この値はダッシュ (-) です。 |
SSEPluginAddress |
SSE プラグインへの分析接続を定義する、コロンで区切られた 2 つの要素。
|
メッセージ | ログ メッセージ。 |
イベントのログ
イベント ログは、QVS から Windows のイベント ログにログが書き込まれる度に更新されます。保存される情報は、Windows イベント ログに書き込まれた情報のコピーです。イベント ログのファイル名は Events*.log で、* はサーバー名と分割する間隔を示します。
QMC の [システム (System)] > [設定 (Setup)] > [QlikView Server] > [ログ (Logging)] タブにある [イベント ログ レベル (Event Log Verbosity)] ラジオ ボタンを使用して、レベルを設定します。選択されたレベルによって、イベント ログに以下の入力が書き込まれます。
- Low (低): エラー メッセージ
- Medium (中): エラーおよび警告メッセージ
- High (高): エラー、警告、および情報メッセージ
ログの各エントリには、次の項目が含まれます。
エントリ | 説明 |
---|---|
Server started | QVS が開始された日付および時刻。 |
[日付と時刻] | ログ エントリが作成された日付および時刻。 |
SeverityID |
重要度レベルごとの ID:
|
EventID | イベントの種類ごとの一意の ID。 |
Severity | イベントの重要度レベル:
|
メッセージ | イベントの説明。 |
エンドユーザーの監査ログ
エンドユーザーの監査ログには、選択のクリアやアクティブ化されたシート、ブックマークの適用、アクセスのあったレポート、最大化されたオブジェクトなどに関するユーザー選択情報が含まれます。
AUDIT_<machinename> という名前のログ ファイルは、%ProgramData%\QlikTech\QlikViewServer に保存されます。
エントリ | 説明 |
---|---|
Session ID | セッション ID |
Server started | QVS が開始された日付および時刻。 |
Timestamp | ログ エントリが作成された日付および時刻。 |
Document | アクセスしたドキュメントへのパスとその名前。 |
Type |
選択やブックマークなど、行われた選択の種類。 使用できるタイプの概要については、下記の表をご覧ください。 |
User | ユーザー名。 |
Message |
選択の種類やドキュメントで作成されたアプリケーション ブックマークに関する情報 (たとえば、「Apply Server\Bookmark15」)。 このフィールドに表示される可能性のあるメッセージの概要については、下記のテーブルを参照してください。 |
Id | 操作に接続されているオブジェクトの ID (例えば、"Document\SH03")。操作に接続されたオブジェクトが存在しない場合は、この項目は空になります。 |
Session | セッション番号 |
エンドユーザーの監査ログでの種類とメッセージ
エンドユーザーの監査ログのタイプとメッセージ項目に投稿されるタイプとメッセージは、下記に掲載されています。
[Type] (種類) | メッセージ | 説明 |
---|---|---|
Action | action (#) [XXX] |
アクション # は XXX で実行されました。数値は次のアクションのうちの 1 つに対応します。
|
Action | action (#) [XXX] |
|
Bookmark | Apply XXX | ブックマーク XXX は、適用されました。 |
Bookmark Selection | XXX | ブックマークが選択されたので、選択 XXX が行われました。このタイプの入力は、詳細な監査ログが選択された場合にのみ、記録されます。 |
Document | Document XXX | ドキュメント XXX は展開または閉じられました。 |
Export | Sheet Object XXX | シート オブジェクト XXX はエクスポートされました。 |
Maximize | Sheet Object XXX | シート オブジェクト XXX は最大化されました。 |
Minimize | Sheet Object XXX | シート オブジェクト XXX は最小化されました。 |
Sheet Object XXX | シート オブジェクト XXX は印刷されました。 | |
Report | Accessed report XXX | レポート XXX へのアクセスがありました。 |
Restore | Sheet Object XXX | シート オブジェクト XXX は復元されました。 |
Selection | Clear All | 全選択がクリアされました。 |
Selection | XXX | 選択 XXX が行われました。 |
SendToExcel | Sheet Object XXX | シート オブジェクト XXX が Microsoft Excel に送られました。 |
Sheet Object | Sheet Object XXX | シート オブジェクト XXX に適用できるさまざまなアクティビティ。 |
Session Collaboration | Session Collaboration Initiated, ID:XXX | ID XXX のセッションのコラボレーションが開始しました。 |
Session Collaboration | Session Collaboration user XXX joined session, ID:YYY | ユーザー XXX が、ID YYY のセッションのコラボレーションに参加しました。 |
Session Collaboration | Session Collaboration user XXX left session, ID:YYY | ユーザー XXX が、ID YYY のセッションのコラボレーションから脱退しました。 |
次のサンプルは、ブックマーク (“Bookmark01”) が選択された場合のログ エントリを示しています。ログは、全体を把握しやすくするためにテーブル形式で表示しています。
エントリ | 値 |
---|---|
Session ID | b5134c4f-7f3d-4107-a37b-d842e9452d93 |
Server started | 20130506T101733.000+0900 |
Timestamp | 20130506T102328.000+0900 |
Document | C:\ProgramData\QlikTech\Documents\Test.qvw |
Type | ブックマーク |
User | QlikTech\jsmith |
Message | Apply Server\Bookmark01 |
Id | Document\SH03 |
Session | 3667 |
詳細な監査ログが選択されている場合、ブックマークが選択されたために行われた選択の詳細を記すログ エントリ (複数可) が、上記のログ エントリの後に続く場合があります。これらログ エントリでは、「ブックマーク選択」にタイプ項目が設定されます。
マネージャの監査ログ
監査ログを使うと、システムのタスクや設定で行われた変更をトラッキングして、誰がいつその変更を行ったかを確認できます。
監査ログは %ProgramData%\QlikTech\ManagementService\AuditLog に保存されます。テーブルごとにフォルダが作成されます。作成されるフォルダの数は、お使いのインストールの設定に応じて異なります。各フォルダには、タスクへ行われた変更が記載された日付ごとのファイルが含まれます。ログは、タブ区切りファイルです。
下記のタブには、すてべの監査ログ ファイルに共通のエントリが表示されています。各監査ログ ファイルには、各種類のログ ファイル専用のエントリがさらに含まれています。
エントリ | 説明 |
---|---|
TransactionID | トランザクション ID は、同時に行われた変更をトラッキングするのに便利です。 |
ChangeType | 操作の種類: Update (新規や変更されたエントリ) もしくは Delete (削除済みエントリ)。 |
ModifiedTime | 変更が行われた日付と時刻 (UTC) |
ModifiedByUser | ユーザー インターフェースで変更を行ったユーザー。System は、ユーザーではなくシステムが変更を行ったことを意味します。 |
[ID] | 変更された (更新あるいは削除された) ID 行。 |
以下は、AlertEmail テーブルの例です。ログは、全体を把握しやすくするためにテーブル形式で表示しています。この例には、すべてのエントリが示されているわけではありません。
エントリ | 値 |
---|---|
TransactionID | 455a241d-8428-4dc7-ba67-4ae7cb21cf3d |
ChangeType | Update |
ModifiedTime | 20100202T151254.000+0900 |
ModifiedByUser | MyDomain\mjn |
[ID] | b3745325-cee7-4fe7-b681-9c9efe22fc5c |
DistributionServiceID | 8846d7dd-bb3f-4289-9c9b-b0ca71b7c3b2 |
EmailAddress | mjn |
以下は QDSCluster テーブルの例です。2 つの例における TransactionID は同じです。これは、変更が同時に行われたことを意味します。この例には、すべてのエントリが示されているわけではありません。
エントリ | 値 |
---|---|
TransactionID | 455a241d-8428-4dc7-ba67-4ae7cb21cf3d |
ChangeType | Update |
ModifiedTime | 20100202T151254.000+0900 |
ModifiedByUser | MyDomain\mjn |
[ID] | a37f242c-6d80-42da-a10c-1742d2ec927f |
DistributionServiceID | 8846d7dd-bb3f-4289-9c9b-b0ca71b7c3b2 |
QDSWebAdress | http://computer-mjn:4720/qtxs.asmx |
CurrentWorkorderID | 96bff2dc-f1ea-84d2-b6c4-ea58bf5c98e5 |
タスク パフォーマンス サマリー
タスク パフォーマンス サマリーは、タスクのパフォーマンス情報の記録に使用します。
タスク パフォーマンス サマリーをアクティブにするには、次の手順を実行してください。
- テキスト エディタで Settings.ini ファイルを開きます。デフォルトでは、このファイルは次の場所に保存されています。
- Settings.ini ファイル内にある次のセクションを見つけます。
- [Add] (追加)
EnableQVBProcessSummary=1
を追加し、タスク パフォーマンス サマリーをアクティブにします。 - Settings.ini ファイルを保存します。
- QlikView Distribution Service (QDS) を再起動します。
C:\Windows\system32\config\systemprofile\AppData\Roaming\QlikTech\QlikViewBatch
[Settings 7]
InterfaceLanguage=English
InstalledLIBID110={4D121C39-415E-11D1-934D-0040333C91CC}
QDS の再起動が完了すると、タスク ログが更新されます。
エントリ | 値 |
---|---|
[Name] (名前) | qvb.exe |
PID | 1360 |
Peak CPU (ピーク時の CPU) | 50,0% |
Peak Physical RAM (ピーク時の物理 RAM) | 26.00 Mb |
Peak Virtual RAM (ピーク時の仮想 RAM) | 21.69 Mb |
Average CPU (平均 CPU) | CPU: 1,0% |
Average Physical RAM (平均物理 RAM) | 24.47 Mb |
Average Virtual RAM (平均仮想 RAM) | 20.37 Mb |
Peak Total CPU (ピーク時の合計 CPU) | 58,3% |
Peak Total Physical RAM (ピーク時の合計物理 RAM) | 6143.49 Mb |
Peak Total Virtual RAM (ピーク時の合計仮想 RAM) | 12285.17 Mb |
Elapsed Time (経過時間) | 00:00:36.4692722 |
Reload performance log
各タスクに専用の Reload performance log .xml ファイルを作成できるようにします。このログ ファイルには、タスクのリロード パフォーマンスのメタデータとプロセスのサマリーが収集されます。
次の手順を実行します。
- 既定で %System32%\config\systemprofile\AppData\Roaming\QlikTech\QlikViewBatch に格納されている QVB Settings.ini ファイルを開きます。
- [Settings 7] の下に次の行を追加します。
- Settings.ini ファイルを保存します。
EnableQVBReloadMetadata=1
リロードが実行されるたびに、タスクのリロード パフォーマンス ログの .xml ファイルが作成され、既定では %ProgramData%\QlikTech\DistributionService\TaskResults に保存されます。.xml ファイルの名前の形式は、次のとおりです。
ReloadMetaData_machine-name_20180904T104446_Document-name.xml
ここで、
- <machine-name> は実行したマシンの名前です
- <20180904T104446> は実行した日付と時刻です
- <Document-name> はリロードされたドキュメントの名前です
タスクのリロード パフォーマンス ログ ファイルには、次の reload_meta パフォーマンス項目があります。
エントリ | 説明 |
---|---|
cpu_time_spent_in_ms | CPU によるリロードの実行にかかった時間 (ミリ秒単位)。 |
logical_cores | CPU のコアの数。 |
total_memory | マシン上で使用可能な物理 RAM の合計。 |
static_byte_size | ドキュメントの静的メモリ使用量。 |
タスクのリロード パフォーマンス ログ ファイルには、次の ProcessSummary パフォーマンス項目があります。これらのエントリは、タスク パフォーマンス サマリー ログ ファイルに示されているエントリと同じです。参照:タスク パフォーマンス サマリー
エントリ | 説明 |
---|---|
App | リロードされたドキュメントの名前。 |
[日付] | 20180904T104446 の形式で示される日付。 |
CurrentProcessCpu | 現在の CPU 使用率 (パーセント単位)。例: 99.991681。 |
PeakPhysMemUsedByProc | プロセッサが使用する物理 RAM の最大量 (バイト単位)。 |
PeakVirtualMemUsedByProc | プロセッサが使用する仮想 RAM の最大量 (バイト単位)。 |
AvgCurrentProcessCpu | CPU の平均使用率 (パーセント単位)。例: 80.81025。 |
AvgPhysMemUsedByProc | プロセッサが使用する平均物理 RAM (バイト単位)。 |
AvgVirtualMemUsedByProc | プロセッサが使用する平均仮想 RAM (バイト単位)。 |
TotalCpu | マシン上で使用可能な CPU の合計。 |
TotalPhysMem | マシン上で使用可能な物理 RAM の合計。 |
TotalVirtualMem | マシン上で使用可能な仮想 RAM の合計。 |
リロード パフォーマンス ログには、FieldMetadata および TableMetadata のエントリを示すこともでき、これを使用して QlikView でテーブル ビューアーに表示できる項目とテーブルについて説明します。
QIX performance log
QIX performance log には、QIX Engineのパフォーマンスに関する詳細情報が含まれています。既定では、QIX Performance log ファイルは無効になっています。
QIX performance log の有効化
QIX performance log を有効にするには、QixPerformanceLogVerbosity 行を QlikView Server Service (QVS) Settings.ini ファイルに追加し、その後に適切なレベルを続けます。例:
QixPerformanceLogVerbosity=3
QIX performance log のレベルは次のとおりです。
- 0 = Off (オフ)
- 1 = Fatal (致命的)
- 2 = Error (エラー)
- 3 = Warning (警告)
- 4 = Info (情報)
- 5 = Debug (デバッグ)
QIX performance log を有効にして、QixPerformanceLogVerbosity をレベル 3 または 2 に設定した場合、次の 4 つのレベルも Settings.ini ファイルに追加されます。
WarningProcessTimeMs
ErrorProcessTimeMs
WarningPeakMemory
ErrorPeakMemory
警告またはエラー イベントをいつトリガーするかを判断するために、これらの 4 つのレベルが必要です。
次の手順を実行します。
- QlikView Server Service (QVS) Settings.ini ファイルを開きます。既定では、%ProgramData%\QlikTech\QlikViewServer にあります。
- 以下の行を追加します。
- Settings.ini ファイルを保存します。
- QlikView Server サービス (QVS) を再始動します。
QixPerformanceLogVerbosity=3
次の表には、QIX performance log に含まれているエントリが示されています。
エントリ | 説明 |
---|---|
[日付と時刻] | エンジンがログ メッセージをファイルに書き込んだ時刻。 |
ProcessId | ログ メッセージの発信元のエンジン プロセスの ID。 |
ThreadId | エンジンがログ メッセージをファイルに書き込んだときに使用されたスレッドの ID。 |
SessionId | QIX メソッド呼び出しが行われたエンジン セッションの ID。 |
CServerId | 要求を処理したサーバー インスタンスの ID。 |
Server started | エンジンが開始された時間。 |
メソッド | 呼び出された QIX メソッドの名前。 |
RequestId | QIX メソッド呼び出しが処理された要求の ID。 |
Target | QIX メソッド呼び出しのターゲットのメモリ アドレス。 |
RequestException | QIX メソッド呼び出しの結果として発生した例外 (存在する場合) の ID。 |
AnyException | 返されたエラー コード |
ProcessTime | 要求の処理に必要であった時間の合計。 |
WorkTime | 要求によって実際に作業が行われた時間の合計。 |
LockTime | 要求が内部ロックを待機しなければならなかった時間の合計。 |
ValidateTime | 要求によって検証に使用された時間の合計。 |
TraverseTime | ハイパーキューブ内での走査のために、スレッドまたはファイバーによって費やされた時間 (ミリ秒単位)。 |
Handle | 要求を処理したインターフェースの ID。このインターフェースは、グローバル、特定のシート、特定のオブジェクトなどが可能です。 |
DocId | QlikView ドキュメントのパスとその名前。 |
ObjectId | QlikView ドキュメントに含まれているオブジェクトの ID。 |
NetRAM | 現在の RAM の割り当て数 (バイト単位)。 |
PeakRAM | ピーク時の RAM の割り当て数 (バイト単位)。 |
ObjectType | QlikView ドキュメントに含まれているオブジェクトの種類。 |