1
1
mirror of https://github.com/wader/fq.git synced 2024-12-20 20:01:59 +03:00
fq/format/rtmp/testdata/ffmpeg_client_stream.fqtest
Mattias Wadman 2dc509ab2f interp: Refactor dump and revert #259 for now
Causes address bar to not be shown in some cases.
Will have to rethink and redo the whole dump thing somehow.
2022-05-20 12:38:43 +02:00

304 lines
32 KiB
Plaintext

$ fq -d rtmp dv ffmpeg_client_stream
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: ffmpeg_client_stream (rtmp) 0x0-0xdbd.7 (3518)
| | | handshake{}: 0x0-0xc00.7 (3073)
| | | s0{}: 0x0-0x0.7 (1)
0x000|03 |. | version: 3 0x0-0x0.7 (1)
| | | s1{}: 0x1-0x600.7 (1536)
0x000| 00 00 00 00 | .... | time: 0 0x1-0x4.7 (4)
0x000| 09 00 7c 02 | ..|. | zero: 151026690 0x5-0x8.7 (4)
0x000| f7 78 55 1e ce ab 8e| .xU....| random: raw bits 0x9-0x600.7 (1528)
0x010|1e 36 2f 07 c5 86 8a 70 b2 66 d4 02 20 e5 08 61|.6/....p.f.. ..a|
* |until 0x600.7 (1528) | |
| | | s2{}: 0x601-0xc00.7 (1536)
0x600| 00 00 00 00 | .... | time: 0 0x601-0x604.7 (4)
0x600| 00 00 00 00 | .... | time2: 0 0x605-0x608.7 (4)
0x600| 39 cf 0b bf 4a 34 14| 9...J4.| random: raw bits 0x609-0xc00.7 (1528)
0x610|11 65 b1 a2 55 28 d5 69 f0 4f 76 41 25 75 5d 6a|.e..U(.i.OvA%u]j|
* |until 0xc00.7 (1528) | |
| | | messages[0:8]: 0xc01-NA (0)
| | | [0]{}: message 0x0-0xd1.7 (210)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "command_message" (20) 0x0-NA (0)
| | | command_name{}: (amf0) 0x0-0x9.7 (10)
0x00|02 |. | type: "string" (2) 0x0-0x0.7 (1)
0x00| 00 07 | .. | length: 7 0x1-0x2.7 (2)
0x00| 63 6f 6e 6e 65 63 74 | connect | value: "connect" 0x3-0x9.7 (7)
| | | transaction_id{}: (amf0) 0xa-0x12.7 (9)
0x00| 00 | . | type: "number" (0) 0xa-0xa.7 (1)
0x00| 3f f0 00 00 00| ?....| value: 1 0xb-0x12.7 (8)
0x10|00 00 00 |... |
| | | command_object{}: (amf0) 0x13-0xd1.7 (191)
0x10| 03 | . | type: "object" (3) 0x13-0x13.7 (1)
| | | value[0:9]: 0x14-0xd1.7 (190)
| | | [0]{}: pair 0x14-0x26.7 (19)
| | | key{}: 0x14-0x18.7 (5)
0x10| 00 03 | .. | length: 3 0x14-0x15.7 (2)
0x10| 61 70 70 | app | value: "app" 0x16-0x18.7 (3)
| | | value{}: 0x19-0x26.7 (14)
0x10| 02 | . | type: "string" (2) 0x19-0x19.7 (1)
0x10| 00 0b | .. | length: 11 0x1a-0x1b.7 (2)
0x10| 74 65 73 74| test| value: "test_stream" 0x1c-0x26.7 (11)
0x20|5f 73 74 72 65 61 6d |_stream |
| | | [1]{}: pair 0x27-0x40.7 (26)
| | | key{}: 0x27-0x30.7 (10)
0x20| 00 08 | .. | length: 8 0x27-0x28.7 (2)
0x20| 66 6c 61 73 68 56 65| flashVe| value: "flashVer" 0x29-0x30.7 (8)
0x30|72 |r |
| | | value{}: 0x31-0x40.7 (16)
0x30| 02 | . | type: "string" (2) 0x31-0x31.7 (1)
0x30| 00 0d | .. | length: 13 0x32-0x33.7 (2)
0x30| 4c 4e 58 20 39 2c 30 2c 31 32 34 2c| LNX 9,0,124,| value: "LNX 9,0,124,2" 0x34-0x40.7 (13)
0x40|32 |2 |
| | | [2]{}: pair 0x41-0x6b.7 (43)
| | | key{}: 0x41-0x47.7 (7)
0x40| 00 05 | .. | length: 5 0x41-0x42.7 (2)
0x40| 74 63 55 72 6c | tcUrl | value: "tcUrl" 0x43-0x47.7 (5)
| | | value{}: 0x48-0x6b.7 (36)
0x40| 02 | . | type: "string" (2) 0x48-0x48.7 (1)
0x40| 00 21 | .! | length: 33 0x49-0x4a.7 (2)
0x40| 72 74 6d 70 3a| rtmp:| value: "rtmp://localhost:1935/test_stream" 0x4b-0x6b.7 (33)
0x50|2f 2f 6c 6f 63 61 6c 68 6f 73 74 3a 31 39 33 35|//localhost:1935|
0x60|2f 74 65 73 74 5f 73 74 72 65 61 6d |/test_stream |
| | | [3]{}: pair 0x6c-0x73.7 (8)
| | | key{}: 0x6c-0x71.7 (6)
0x60| 00 04 | .. | length: 4 0x6c-0x6d.7 (2)
0x60| 66 70| fp| value: "fpad" 0x6e-0x71.7 (4)
0x70|61 64 |ad |
| | | value{}: 0x72-0x73.7 (2)
0x70| 01 | . | type: "boolean" (1) 0x72-0x72.7 (1)
0x70| 00 | . | value: 0 0x73-0x73.7 (1)
| | | [4]{}: pair 0x74-0x8a.7 (23)
| | | key{}: 0x74-0x81.7 (14)
0x70| 00 0c | .. | length: 12 0x74-0x75.7 (2)
0x70| 63 61 70 61 62 69 6c 69 74 69| capabiliti| value: "capabilities" 0x76-0x81.7 (12)
0x80|65 73 |es |
| | | value{}: 0x82-0x8a.7 (9)
0x80| 00 | . | type: "number" (0) 0x82-0x82.7 (1)
0x80| 40 2e 00 00 00 00 00 00 | @....... | value: 15 0x83-0x8a.7 (8)
| | | [5]{}: pair 0x8b-0xa0.7 (22)
| | | key{}: 0x8b-0x97.7 (13)
0x80| 00 0b | .. | length: 11 0x8b-0x8c.7 (2)
0x80| 61 75 64| aud| value: "audioCodecs" 0x8d-0x97.7 (11)
0x90|69 6f 43 6f 64 65 63 73 |ioCodecs |
| | | value{}: 0x98-0xa0.7 (9)
0x90| 00 | . | type: "number" (0) 0x98-0x98.7 (1)
0x90| 40 af ce 00 00 00 00| @......| value: 4071 0x99-0xa0.7 (8)
0xa0|00 |. |
| | | [6]{}: pair 0xa1-0xb6.7 (22)
| | | key{}: 0xa1-0xad.7 (13)
0xa0| 00 0b | .. | length: 11 0xa1-0xa2.7 (2)
0xa0| 76 69 64 65 6f 43 6f 64 65 63 73 | videoCodecs | value: "videoCodecs" 0xa3-0xad.7 (11)
| | | value{}: 0xae-0xb6.7 (9)
0xa0| 00 | . | type: "number" (0) 0xae-0xae.7 (1)
0xa0| 40| @| value: 252 0xaf-0xb6.7 (8)
0xb0|6f 80 00 00 00 00 00 |o...... |
| | | [7]{}: pair 0xb7-0xce.7 (24)
| | | key{}: 0xb7-0xc5.7 (15)
0xb0| 00 0d | .. | length: 13 0xb7-0xb8.7 (2)
0xb0| 76 69 64 65 6f 46 75| videoFu| value: "videoFunction" 0xb9-0xc5.7 (13)
0xc0|6e 63 74 69 6f 6e |nction |
| | | value{}: 0xc6-0xce.7 (9)
0xc0| 00 | . | type: "number" (0) 0xc6-0xc6.7 (1)
0xc0| 3f f0 00 00 00 00 00 00 | ?....... | value: 1 0xc7-0xce.7 (8)
| | | [8]{}: pair 0xcf-0xd1.7 (3)
| | | key{}: 0xcf-0xd0.7 (2)
0xc0| 00| .| length: 0 0xcf-0xd0.7 (2)
0xd0|00 |. |
| | | value: "" 0xd1-NA (0)
| | | value{}: 0xd1-0xd1.7 (1)
0xd0| 09| | .| | type: "object_end" (9) 0xd1-0xd1.7 (1)
| | | arguments[0:0]: 0xd2-NA (0)
| | | [1]{}: message 0x0-0x3.7 (4)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "window_acknowledgement_size" (5) 0x0-NA (0)
0x00|00 26 25 a0| |.&%.| | window_size: 2500000 0x0-0x3.7 (4)
| | | [2]{}: message 0x0-0x18.7 (25)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "command_message" (20) 0x0-NA (0)
| | | command_name{}: (amf0) 0x0-0xe.7 (15)
0x00|02 |. | type: "string" (2) 0x0-0x0.7 (1)
0x00| 00 0c | .. | length: 12 0x1-0x2.7 (2)
0x00| 63 72 65 61 74 65 53 74 72 65 61 6d | createStream | value: "createStream" 0x3-0xe.7 (12)
| | | transaction_id{}: (amf0) 0xf-0x17.7 (9)
0x00| 00| .| type: "number" (0) 0xf-0xf.7 (1)
0x10|40 00 00 00 00 00 00 00 |@....... | value: 2 0x10-0x17.7 (8)
| | | command_object{}: (amf0) 0x18-0x18.7 (1)
0x10| 05| | .| | type: "null" (5) 0x18-0x18.7 (1)
| | | value: null 0x19-NA (0)
| | | arguments[0:0]: 0x19-NA (0)
| | | [3]{}: message 0x0-0x14.7 (21)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "command_message" (20) 0x0-NA (0)
| | | command_name{}: (amf0) 0x0-0xa.7 (11)
0x00|02 |. | type: "string" (2) 0x0-0x0.7 (1)
0x00| 00 08 | .. | length: 8 0x1-0x2.7 (2)
0x00| 5f 63 68 65 63 6b 62 77 | _checkbw | value: "_checkbw" 0x3-0xa.7 (8)
| | | transaction_id{}: (amf0) 0xb-0x13.7 (9)
0x00| 00 | . | type: "number" (0) 0xb-0xb.7 (1)
0x00| 40 08 00 00| @...| value: 3 0xc-0x13.7 (8)
0x10|00 00 00 00 |.... |
| | | command_object{}: (amf0) 0x14-0x14.7 (1)
0x10| 05| | .| | type: "null" (5) 0x14-0x14.7 (1)
| | | value: null 0x15-NA (0)
| | | arguments[0:0]: 0x15-NA (0)
| | | [4]{}: message 0x0-0x1e.7 (31)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "command_message" (20) 0x0-NA (0)
| | | command_name{}: (amf0) 0x0-0x11.7 (18)
0x00|02 |. | type: "string" (2) 0x0-0x0.7 (1)
0x00| 00 0f | .. | length: 15 0x1-0x2.7 (2)
0x00| 67 65 74 53 74 72 65 61 6d 4c 65 6e 67| getStreamLeng| value: "getStreamLength" 0x3-0x11.7 (15)
0x10|74 68 |th |
| | | transaction_id{}: (amf0) 0x12-0x1a.7 (9)
0x10| 00 | . | type: "number" (0) 0x12-0x12.7 (1)
0x10| 40 10 00 00 00 00 00 00 | @....... | value: 4 0x13-0x1a.7 (8)
| | | command_object{}: (amf0) 0x1b-0x1b.7 (1)
0x10| 05 | . | type: "null" (5) 0x1b-0x1b.7 (1)
| | | value: null 0x1c-NA (0)
| | | arguments[0:1]: 0x1c-0x1e.7 (3)
| | | [0]{}: argument (amf0) 0x1c-0x1e.7 (3)
0x10| 02 | . | type: "string" (2) 0x1c-0x1c.7 (1)
0x10| 00 00| | ..|| length: 0 0x1d-0x1e.7 (2)
| | | value: "" 0x1f-NA (0)
| | | [5]{}: message 0x0-0x1c.7 (29)
| | | message_stream_id: 1 0x0-NA (0)
| | | message_type_id: "command_message" (20) 0x0-NA (0)
| | | command_name{}: (amf0) 0x0-0x6.7 (7)
0x00|02 |. | type: "string" (2) 0x0-0x0.7 (1)
0x00| 00 04 | .. | length: 4 0x1-0x2.7 (2)
0x00| 70 6c 61 79 | play | value: "play" 0x3-0x6.7 (4)
| | | transaction_id{}: (amf0) 0x7-0xf.7 (9)
0x00| 00 | . | type: "number" (0) 0x7-0x7.7 (1)
0x00| 40 14 00 00 00 00 00 00| @.......| value: 5 0x8-0xf.7 (8)
| | | command_object{}: (amf0) 0x10-0x10.7 (1)
0x10|05 |. | type: "null" (5) 0x10-0x10.7 (1)
| | | value: null 0x11-NA (0)
| | | arguments[0:2]: 0x11-0x1c.7 (12)
| | | [0]{}: argument (amf0) 0x11-0x13.7 (3)
0x10| 02 | . | type: "string" (2) 0x11-0x11.7 (1)
0x10| 00 00 | .. | length: 0 0x12-0x13.7 (2)
| | | value: "" 0x14-NA (0)
| | | [1]{}: argument (amf0) 0x14-0x1c.7 (9)
0x10| 00 | . | type: "number" (0) 0x14-0x14.7 (1)
0x10| c0 9f 40 00 00 00 00 00| | ..@.....| | value: -2000 0x15-0x1c.7 (8)
| | | [6]{}: message 0x0-0x9.7 (10)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "user_control_message" (4) 0x0-NA (0)
0x00|00 03 |.. | type: "set_buffer_length" (3) 0x0-0x1.7 (2)
0x00| 00 00 00 01 | .... | stream_id: 1 0x2-0x5.7 (4)
0x00| 00 00 0b b8| | ....| | length: 3000 0x6-0x9.7 (4)
| | | [7]{}: message 0x0-0x21.7 (34)
| | | message_stream_id: 0 0x0-NA (0)
| | | message_type_id: "command_message" (20) 0x0-NA (0)
| | | command_name{}: (amf0) 0x0-0xe.7 (15)
0x00|02 |. | type: "string" (2) 0x0-0x0.7 (1)
0x00| 00 0c | .. | length: 12 0x1-0x2.7 (2)
0x00| 64 65 6c 65 74 65 53 74 72 65 61 6d | deleteStream | value: "deleteStream" 0x3-0xe.7 (12)
| | | transaction_id{}: (amf0) 0xf-0x17.7 (9)
0x00| 00| .| type: "number" (0) 0xf-0xf.7 (1)
0x10|40 18 00 00 00 00 00 00 |@....... | value: 6 0x10-0x17.7 (8)
| | | command_object{}: (amf0) 0x18-0x18.7 (1)
0x10| 05 | . | type: "null" (5) 0x18-0x18.7 (1)
| | | value: null 0x19-NA (0)
| | | arguments[0:1]: 0x19-0x21.7 (9)
| | | [0]{}: argument (amf0) 0x19-0x21.7 (9)
0x10| 00 | . | type: "number" (0) 0x19-0x19.7 (1)
0x10| 3f f0 00 00 00 00| ?.....| value: 1 0x1a-0x21.7 (8)
0x20|00 00| |..| |
| | | chunks[0:9]: 0xc01-0xdbd.7 (445)
| | | [0]{}: chunk 0xc01-0xc8c.7 (140)
0xc00| 03 | . | fmt: 0 0xc01-0xc01.1 (0.2)
0xc00| 03 | . | chunk_stream_id: 3 0xc01.2-0xc01.7 (0.6)
0xc00| 00 00 00 | ... | timestamp: 0 0xc02-0xc04.7 (3)
0xc00| 00 00 d2 | ... | message_length: 210 0xc05-0xc07.7 (3)
0xc00| 14 | . | message_type_id: "command_message" (20) 0xc08-0xc08.7 (1)
0xc00| 00 00 00 00 | .... | message_stream_id: 0 0xc09-0xc0c.7 (4)
| | | calculated_timestamp: 0 0xc0d-NA (0)
0xc00| 02 00 07| ...| data: raw bits 0xc0d-0xc8c.7 (128)
0xc10|63 6f 6e 6e 65 63 74 00 3f f0 00 00 00 00 00 00|connect.?.......|
* |until 0xc8c.7 (128) | |
| | | [1]{}: chunk 0xc8d-0xcdf.7 (83)
0xc80| c3 | . | fmt: 3 0xc8d-0xc8d.1 (0.2)
0xc80| c3 | . | chunk_stream_id: 3 0xc8d.2-0xc8d.7 (0.6)
| | | message_length: 210 (previous) 0xc8e-NA (0)
| | | message_type_id: 20 (previous) 0xc8e-NA (0)
| | | message_stream_id: 0 (previous) 0xc8e-NA (0)
| | | calculated_timestamp: 0 0xc8e-NA (0)
0xc80| 65 73| es| data: raw bits 0xc8e-0xcdf.7 (82)
0xc90|00 40 2e 00 00 00 00 00 00 00 0b 61 75 64 69 6f|.@.........audio|
* |until 0xcdf.7 (82) | |
| | | [2]{}: chunk 0xce0-0xcef.7 (16)
0xce0|02 |. | fmt: 0 0xce0-0xce0.1 (0.2)
0xce0|02 |. | chunk_stream_id: 2 0xce0.2-0xce0.7 (0.6)
0xce0| 00 00 00 | ... | timestamp: 0 0xce1-0xce3.7 (3)
0xce0| 00 00 04 | ... | message_length: 4 0xce4-0xce6.7 (3)
0xce0| 05 | . | message_type_id: "window_acknowledgement_size" (5) 0xce7-0xce7.7 (1)
0xce0| 00 00 00 00 | .... | message_stream_id: 0 0xce8-0xceb.7 (4)
| | | calculated_timestamp: 0 0xcec-NA (0)
0xce0| 00 26 25 a0| .&%.| data: raw bits 0xcec-0xcef.7 (4)
| | | [3]{}: chunk 0xcf0-0xd10.7 (33)
0xcf0|43 |C | fmt: 1 0xcf0-0xcf0.1 (0.2)
0xcf0|43 |C | chunk_stream_id: 3 0xcf0.2-0xcf0.7 (0.6)
0xcf0| 00 00 00 | ... | timestamp_delta: 0 0xcf1-0xcf3.7 (3)
0xcf0| 00 00 19 | ... | message_length: 25 0xcf4-0xcf6.7 (3)
0xcf0| 14 | . | message_type_id: "command_message" (20) 0xcf7-0xcf7.7 (1)
| | | message_stream_id: 0 (previous) 0xcf8-NA (0)
| | | calculated_timestamp: 0 0xcf8-NA (0)
0xcf0| 02 00 0c 63 72 65 61 74| ...creat| data: raw bits 0xcf8-0xd10.7 (25)
0xd00|65 53 74 72 65 61 6d 00 40 00 00 00 00 00 00 00|eStream.@.......|
0xd10|05 |. |
| | | [4]{}: chunk 0xd11-0xd2d.7 (29)
0xd10| 43 | C | fmt: 1 0xd11-0xd11.1 (0.2)
0xd10| 43 | C | chunk_stream_id: 3 0xd11.2-0xd11.7 (0.6)
0xd10| 00 00 00 | ... | timestamp_delta: 0 0xd12-0xd14.7 (3)
0xd10| 00 00 15 | ... | message_length: 21 0xd15-0xd17.7 (3)
0xd10| 14 | . | message_type_id: "command_message" (20) 0xd18-0xd18.7 (1)
| | | message_stream_id: 0 (previous) 0xd19-NA (0)
| | | calculated_timestamp: 0 0xd19-NA (0)
0xd10| 02 00 08 5f 63 68 65| ..._che| data: raw bits 0xd19-0xd2d.7 (21)
0xd20|63 6b 62 77 00 40 08 00 00 00 00 00 00 05 |ckbw.@........ |
| | | [5]{}: chunk 0xd2e-0xd58.7 (43)
0xd20| 08 | . | fmt: 0 0xd2e-0xd2e.1 (0.2)
0xd20| 08 | . | chunk_stream_id: 8 0xd2e.2-0xd2e.7 (0.6)
0xd20| 00| .| timestamp: 0 0xd2f-0xd31.7 (3)
0xd30|00 00 |.. |
0xd30| 00 00 1f | ... | message_length: 31 0xd32-0xd34.7 (3)
0xd30| 14 | . | message_type_id: "command_message" (20) 0xd35-0xd35.7 (1)
0xd30| 00 00 00 00 | .... | message_stream_id: 0 0xd36-0xd39.7 (4)
| | | calculated_timestamp: 0 0xd3a-NA (0)
0xd30| 02 00 0f 67 65 74| ...get| data: raw bits 0xd3a-0xd58.7 (31)
0xd40|53 74 72 65 61 6d 4c 65 6e 67 74 68 00 40 10 00|StreamLength.@..|
0xd50|00 00 00 00 00 05 02 00 00 |......... |
| | | [6]{}: chunk 0xd59-0xd81.7 (41)
0xd50| 08 | . | fmt: 0 0xd59-0xd59.1 (0.2)
0xd50| 08 | . | chunk_stream_id: 8 0xd59.2-0xd59.7 (0.6)
0xd50| 00 00 00 | ... | timestamp: 0 0xd5a-0xd5c.7 (3)
0xd50| 00 00 1d| ...| message_length: 29 0xd5d-0xd5f.7 (3)
0xd60|14 |. | message_type_id: "command_message" (20) 0xd60-0xd60.7 (1)
0xd60| 01 00 00 00 | .... | message_stream_id: 1 0xd61-0xd64.7 (4)
| | | calculated_timestamp: 0 0xd65-NA (0)
0xd60| 02 00 04 70 6c 61 79 00 40 14 00| ...play.@..| data: raw bits 0xd65-0xd81.7 (29)
0xd70|00 00 00 00 00 05 02 00 00 00 c0 9f 40 00 00 00|............@...|
0xd80|00 00 |.. |
| | | [7]{}: chunk 0xd82-0xd93.7 (18)
0xd80| 42 | B | fmt: 1 0xd82-0xd82.1 (0.2)
0xd80| 42 | B | chunk_stream_id: 2 0xd82.2-0xd82.7 (0.6)
0xd80| 00 00 01 | ... | timestamp_delta: 1 0xd83-0xd85.7 (3)
0xd80| 00 00 0a | ... | message_length: 10 0xd86-0xd88.7 (3)
0xd80| 04 | . | message_type_id: "user_control_message" (4) 0xd89-0xd89.7 (1)
| | | message_stream_id: 0 (previous) 0xd8a-NA (0)
| | | calculated_timestamp: 1 0xd8a-NA (0)
0xd80| 00 03 00 00 00 01| ......| data: raw bits 0xd8a-0xd93.7 (10)
0xd90|00 00 0b b8 |.... |
| | | [8]{}: chunk 0xd94-0xdbd.7 (42)
0xd90| 43 | C | fmt: 1 0xd94-0xd94.1 (0.2)
0xd90| 43 | C | chunk_stream_id: 3 0xd94.2-0xd94.7 (0.6)
0xd90| 00 00 00 | ... | timestamp_delta: 0 0xd95-0xd97.7 (3)
0xd90| 00 00 22 | .." | message_length: 34 0xd98-0xd9a.7 (3)
0xd90| 14 | . | message_type_id: "command_message" (20) 0xd9b-0xd9b.7 (1)
| | | message_stream_id: 0 (previous) 0xd9c-NA (0)
| | | calculated_timestamp: 0 0xd9c-NA (0)
0xd90| 02 00 0c 64| ...d| data: raw bits 0xd9c-0xdbd.7 (34)
0xda0|65 6c 65 74 65 53 74 72 65 61 6d 00 40 18 00 00|eleteStream.@...|
0xdb0|00 00 00 00 05 00 3f f0 00 00 00 00 00 00| |......?.......| |