Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cam issues #5

Closed
9000h opened this Issue Jan 29, 2019 · 2 comments

Comments

Projects
None yet
1 participant
@9000h
Copy link

9000h commented Jan 29, 2019

I did give it a try but have some issues.
Technicrypt cryptoworks CAM detected OK and also an ORF card
Diablo CAM detected OK but needs more testing

AlphaCrypt Light 2.2 got not detected right also an older Alphacrypt shows the same issue

[94845.861529] usb 1-4: new high-speed USB device number 17 using xhci_hcd
[94846.009736] usb 1-4: New USB device found, idVendor=2040, idProduct=1100, bcdDevice= 0.02
[94846.009746] usb 1-4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[94846.010474] wintv_usb2ci: Found USB-CI device 2040:1100 (Ver.2) in cold state
[94846.010596] wintv_usb2ci: located firmware wintvci_cb.fw, size 6424 bytes
[94846.010606] wintv_usb2ci: *** FW *** block-size 16, block-cnt 292, RAM address range: 0x0000 - 0x0E06
[94846.022811] wintv_usb2ci:  * 291 firmware blocks written to internal RAM
[94846.026404] wintv_usb2ci:  * EEPROM: Boot-Mode: C0, V:P:D: 2040:1100-2.00 cfg: 04
[94846.043206] wintv_usb2ci:  * EEPROM: Size 16 kB ( 16384 [0x4000] bytes )
[94846.043549] wintv_usb2ci:  * REVID [0xE60A]: Silicon Revision 0x01
[94846.043865] wintv_usb2ci:  * REVCTL [0xE60B]: 0x00
[94846.044223] wintv_usb2ci:  * IFCONFIG [0xE601]=0x80 : FIFO/GPIF Clock 30 Mhz (internal)
[94846.044423] wintv_usb2ci:  * USBCS [0xE680]=0x80
[94846.044616] wintv_usb2ci:  * CPUCS [0xE600]=0x02 : CPU clock-speed 12 Mhz (12|24|48)
[94846.044620] wintv_usb2ci: CI-firmware wintvci_r2.fw selected
[94846.044736] wintv_usb2ci: located firmware wintvci_r2.fw, size 11200 bytes
[94846.044743] wintv_usb2ci: *** FW *** block-size 46, block-cnt 160, RAM address range: 0x0000 - 0x2620
[94846.051651] wintv_usb2ci:  * 159 firmware blocks written to internal RAM
[94846.051672] wintv_usb2ci: probe succesfull
[94846.202683] usb 1-4: USB disconnect, device number 17
[94846.202760] wintv_usb2ci: wintv_usb_ci_disconnect
[94846.202771] wintv_usb2ci: wintv_usb_ci_delete
[94846.202777] wintv_usb2ci: USB wintv-ci #-1 now disconnected
[94846.445101] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro,commit=600
[94847.992781] usb 1-4: new high-speed USB device number 18 using xhci_hcd
[94848.141282] usb 1-4: New USB device found, idVendor=1b0d, idProduct=5f0f, bcdDevice= 0.00
[94848.141288] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[94848.141291] usb 1-4: Product: USB2CI
[94848.141294] usb 1-4: Manufacturer: SMARDTV
[94848.141669] wintv_usb2ci: Found USB-CI device 1b0d:5f0f (Ver.0) in warm state
[94848.141673] wintv_usb2ci:              Product : USB2CI
[94848.141674] wintv_usb2ci:         Manufacturer : SMARDTV
[94850.231392] wintv_usb2ci:  * current configuration:1
[94850.231402] wintv_usb2ci:   EP 1 IN  (INTR) Addr : 0x81, Maxp   64 Ival 9
[94850.231407] wintv_usb2ci:   EP 1 OUT (BULK) Addr : 0x01, Maxp  512 Ival 8
[94850.231412] wintv_usb2ci:   EP 2 IN  (ISOC) Addr : 0x82, Maxp  752 Ival 1
[94850.231416] wintv_usb2ci:   EP 6 OUT (ISOC) Addr : 0x06, Maxp  752 Ival 1
[94850.232649] wintv_usb2ci: Registering DVB Adapter
[94850.232656] dvbdev: DVB: registering new adapter (WinTV-CI)
[94850.232659] wintv_usb2ci: Attaching DVB CA Device
[94850.232664] wintv_usb2ci: ca_bulk_allocate : EP(01) init packet buffer: 64 bytes
[94850.232678] wintv_usb2ci: ca_intr_allocate : EP(81) init packet/message buffers: 64/255 bytes
[94850.233274] wintv_usb2ci: Attaching DVB CI Device
[94850.233298] wintv_usb2ci: ts_rb_alloc : EP(06) ringbuffer size 722672 bytes (8 x 480 | 3844 TS-packets)
[94850.233303] wintv_usb2ci: ci_isoc_allocate : EP(06) init 9 urbs (120 uframes | 480 TS-packets each urb)
[94850.233715] wintv_usb2ci: ci_isoc_setup : EP(06) initialize 9 urbs (DIR_OUT)
[94850.233738] wintv_usb2ci: ts_rb_alloc : EP(82) ringbuffer size 722672 bytes (8 x 480 | 3844 TS-packets)
[94850.233743] wintv_usb2ci: ci_isoc_allocate : EP(82) init 9 urbs (120 uframes | 480 TS-packets each urb)
[94850.234196] wintv_usb2ci: ci_isoc_setup : EP(82) initialize 9 urbs (DIR_IN)
[94850.234222] wintv_usb2ci: Reset CI Device
[94850.234225] wintv_usb2ci: ts_stop_streaming : stop streaming
[94850.234231] wintv_usb2ci: *** Quirks : set dummy IN packets from 120 to 1 uframes
[94850.234442] wintv_usb2ci: CI_send_CMD         : [90] 0/0/0
[94850.264859] wintv_usb2ci: CI_read_CMD_REPLY   : [08] 20/20/0
[94850.264866] wintv_usb2ci:  * FW_Version(2.00) FPGA_Version(1.d)
[94850.264870] wintv_usb2ci: cam_state_set       : 00 -> 01
[94850.264872] wintv_usb2ci: probe succesfull
[94850.704343] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro,commit=600
[94852.267826] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[94853.304718] wintv_usb2ci: CI_read_CMD_REPLY   : [02] 0/0/0
[94853.304723] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 1040 ms
[94853.304724] wintv_usb2ci: cam_state_set       : 01 -> 04
[94853.304725] wintv_usb2ci: Reset CI Device
[94853.304727] wintv_usb2ci: ts_stop_streaming : stop streaming
[94853.304731] wintv_usb2ci: CI_send_CMD         : [40] 0/0/0
[94853.405514] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro,commit=600
[94853.496722] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 127/60/67
[94853.528784] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 67/60/7
[94853.560782] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 7/7/0
[94853.560787] wintv_usb2ci: CI_WriteExchange    : [40/03] response after 256 ms
[94853.560789] wintv_usb2ci: cam_state_set       : 04 -> 05
[94853.560791] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: MASCOM
[94853.560793] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module
[94853.560794] wintv_usb2ci: parse_cis : CFG_BASE: 0x200 (Cfg.Reg[0] in Attrib.Memory)
[94853.560796] wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01
[94853.560798] wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched
[94853.560799] wintv_usb2ci: parse_cis : skip Interface description for IF-index 1, cfg-options 0x9
[94853.560800] wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF
[94853.560801] wintv_usb2ci: DVB-CI-Module detected
[94853.560804] wintv_usb2ci: CI_send_CMD         : [70] 5/5/0
[94853.624818] wintv_usb2ci: CI_read_CMD_REPLY   : [07] rc: 0 s:00 f:00 r:10 l:0
[94853.624827] wintv_usb2ci: CI_WriteExchange    : [70/07] response after 64 ms
[94853.624829] wintv_usb2ci: XR-rc(16 != 7) *** CAM-ERROR(70) ***
[94853.624834] wintv_usb2ci: cam_state_set       : 05 -> 01
[94855.655292] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[94856.168972] EXT4-fs (sda5): re-mounted. Opts: errors=remount-ro,commit=600
[94856.696815] wintv_usb2ci: CI_read_CMD_REPLY   : [02] 0/0/0
[94856.696820] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 1040 ms
[94856.696822] wintv_usb2ci: cam_state_set       : 01 -> 04
[94856.696823] wintv_usb2ci: Reset CI Device
[94856.696825] wintv_usb2ci: ts_stop_streaming : stop streaming
[94856.696830] wintv_usb2ci: CI_send_CMD         : [40] 0/0/0
[94856.888786] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 127/60/67
[94856.920833] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 67/60/7
[94856.952851] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 7/7/0
[94856.952857] wintv_usb2ci: CI_WriteExchange    : [40/03] response after 256 ms
[94856.952860] wintv_usb2ci: cam_state_set       : 04 -> 05
[94856.952864] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: MASCOM
[94856.952866] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module
[94856.952869] wintv_usb2ci: parse_cis : CFG_BASE: 0x200 (Cfg.Reg[0] in Attrib.Memory)
[94856.952872] wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01
[94856.952875] wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched
[94856.952877] wintv_usb2ci: parse_cis : skip Interface description for IF-index 1, cfg-options 0x9
[94856.952879] wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF
[94856.952880] wintv_usb2ci: DVB-CI-Module detected
[94856.952884] wintv_usb2ci: CI_send_CMD         : [70] 5/5/0
[94857.016812] wintv_usb2ci: CI_read_CMD_REPLY   : [07] rc: 0 s:00 f:00 r:10 l:0
[94857.016824] wintv_usb2ci: CI_WriteExchange    : [70/07] response after 64 ms
[94857.016827] wintv_usb2ci: XR-rc(16 != 7) *** CAM-ERROR(70) ***
[94857.016831] wintv_usb2ci: cam_state_set       : 05 -> 01
[94859.046562] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[94860.088919] wintv_usb2ci: CI_read_CMD_REPLY   : [02] 0/0/0
[94860.088927] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 1040 ms
[94860.088931] wintv_usb2ci: cam_state_set       : 01 -> 04
[94860.088934] wintv_usb2ci: Reset CI Device
[94860.088937] wintv_usb2ci: ts_stop_streaming : stop streaming
[94860.088945] wintv_usb2ci: CI_send_CMD         : [40] 0/0/0
[94860.280910] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 127/60/67
[94860.312923] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 67/60/7
[94860.344890] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 7/7/0
[94860.344898] wintv_usb2ci: CI_WriteExchange    : [40/03] response after 256 ms
[94860.344902] wintv_usb2ci: cam_state_set       : 04 -> 05
[94860.344907] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: MASCOM
[94860.344911] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module
[94860.344914] wintv_usb2ci: parse_cis : CFG_BASE: 0x200 (Cfg.Reg[0] in Attrib.Memory)
[94860.344918] wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01
[94860.344922] wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched
[94860.344925] wintv_usb2ci: parse_cis : skip Interface description for IF-index 1, cfg-options 0x9
[94860.344928] wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF
[94860.344930] wintv_usb2ci: DVB-CI-Module detected
[94860.344935] wintv_usb2ci: CI_send_CMD         : [70] 5/5/0
[94860.408913] wintv_usb2ci: CI_read_CMD_REPLY   : [07] rc: 0 s:00 f:00 r:10 l:0
[94860.408929] wintv_usb2ci: CI_WriteExchange    : [70/07] response after 64 ms
[94860.408933] wintv_usb2ci: XR-rc(16 != 7) *** CAM-ERROR(70) ***
[94860.408939] wintv_usb2ci: cam_state_set       : 05 -> 01
[94862.438045] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[94863.480940] wintv_usb2ci: CI_read_CMD_REPLY   : [02] 0/0/0
[94863.480948] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 1040 ms
[94863.480952] wintv_usb2ci: cam_state_set       : 01 -> 04
[94863.480954] wintv_usb2ci: Reset CI Device
[94863.480956] wintv_usb2ci: ts_stop_streaming : stop streaming
[94863.480964] wintv_usb2ci: CI_send_CMD         : [40] 0/0/0
[94863.672921] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 127/60/67
[94863.704927] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 67/60/7
[94863.736913] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 7/7/0
[94863.736922] wintv_usb2ci: CI_WriteExchange    : [40/03] response after 256 ms
[94863.736926] wintv_usb2ci: cam_state_set       : 04 -> 05
[94863.736931] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: MASCOM
[94863.736935] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module
[94863.736938] wintv_usb2ci: parse_cis : CFG_BASE: 0x200 (Cfg.Reg[0] in Attrib.Memory)
[94863.736941] wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01
[94863.736945] wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched
[94863.736949] wintv_usb2ci: parse_cis : skip Interface description for IF-index 1, cfg-options 0x9
[94863.736951] wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF
[94863.736953] wintv_usb2ci: DVB-CI-Module detected
[94863.736958] wintv_usb2ci: CI_send_CMD         : [70] 5/5/0
[94863.800920] wintv_usb2ci: CI_read_CMD_REPLY   : [07] rc: 0 s:00 f:00 r:10 l:0
[94863.800936] wintv_usb2ci: CI_WriteExchange    : [70/07] response after 64 ms
[94863.800940] wintv_usb2ci: XR-rc(16 != 7) *** CAM-ERROR(70) ***
[94863.800946] wintv_usb2ci: cam_state_set       : 05 -> 01

if I cange the CAM to the Diablo

[95018.091363] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[95020.107444] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[95022.123478] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[95022.872851] wintv_usb2ci: CI_read_CMD_REPLY   : [02] 0/0/0
[95022.872859] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 748 ms
[95022.872863] wintv_usb2ci: cam_state_set       : 01 -> 04
[95022.872866] wintv_usb2ci: Reset CI Device
[95022.872868] wintv_usb2ci: ts_stop_streaming : stop streaming
[95022.872877] wintv_usb2ci: CI_send_CMD         : [40] 0/0/0
[95023.064948] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 124/60/64
[95023.096926] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 64/60/4
[95023.128900] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 4/4/0
[95023.128908] wintv_usb2ci: CI_WriteExchange    : [40/03] response after 256 ms
[95023.128912] wintv_usb2ci: cam_state_set       : 04 -> 05
[95023.128917] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: SCM
[95023.128920] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: DVB CA Module
[95023.128924] wintv_usb2ci: parse_cis : CFG_BASE: 0x1FE (Cfg.Reg[0] in Attrib.Memory)
[95023.128927] wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x01
[95023.128931] wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched
[95023.128934] wintv_usb2ci: parse_cis : skip Interface description for IF-index 1, cfg-options 0x9
[95023.128937] wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF
[95023.128939] wintv_usb2ci: DVB-CI-Module detected
[95023.128944] wintv_usb2ci: CI_send_CMD         : [70] 5/5/0
[95023.416925] wintv_usb2ci: CI_read_CMD_REPLY   : [07] 0/0/0
[95023.416933] wintv_usb2ci: CI_WriteExchange    : [70/07] response after 288 ms
[95023.416937] wintv_usb2ci: cam_state_set       : 05 -> 06
[95023.416943] wintv_usb2ci: CI_send_CMD         : [60] 2/2/0
[95023.576921] wintv_usb2ci: CI_read_CMD_REPLY   : [04] 2/2/0
[95023.576927] wintv_usb2ci: CI_WriteExchange    : [60/04] response after 160 ms
[95023.576929] wintv_usb2ci: cam_state_set       : 06 -> 07

it looks fine

@9000h

This comment has been minimized.

Copy link
Author

9000h commented Feb 1, 2019

Matrix CAM Air has also issues
also with the proposed change
Code: CI_70_WriteCOR

//++++++++
    if (rc  == CI_ERR_10_LPDU_READ) {
        int n = 5;
        do {
            mdelay(500);
            rc = CI_WriteExchange(wintvci, CI_70_WRITE_COR, NULL, buf, sizeof buf);
        } while (rc == CI_ERR_10_LPDU_READ && n--);
        }
    //++++++++
[171284.524041] wintv_usb2ci: Reset CI Device
[171284.524043] wintv_usb2ci: ts_stop_streaming : stop streaming
[171284.524051] wintv_usb2ci: CI_send_CMD         : [40] 0/0/0
[171284.684036] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 101/60/41
[171284.716123] wintv_usb2ci: CI_read_CMD_REPLY   : [03] 41/41/0
[171284.716129] wintv_usb2ci: CI_WriteExchange    : [40/03] response after 192 ms
[171284.716131] wintv_usb2ci: cam_state_set       : 04 -> 05
[171284.716136]  CIS : 00000000: 1d 04 00 61 00 ff 1c 04 00 d3 00 ff 15 0b 05 00  ...a............
[171284.716138]  CIS : 00000010: 47 00 4d 00 4c 00 4c 00 ff 20 04 02 ca 12 60 1a  G.M.L.L.. ....`.
[171284.716140]  CIS : 00000020: 15 01 0f 00 02 03 c0 0e 41 02 44 56 42 5f 43 49  ........A.DVB_CI
[171284.716142]  CIS : 00000030: 5f 56 31 2e 30 30 1b 2a cf 04 09 7f 55 cd 19 d5  _V1.00.*....U...
[171284.716144]  CIS : 00000040: 19 3d 9e 25 26 54 22 c0 09 44 56 42 5f 48 4f 53  .=.%&T"..DVB_HOS
[171284.716146]  CIS : 00000050: 54 00 c1 0e 44 56 42 5f 43 49 5f 4d 4f 44 55 4c  T...DVB_CI_MODUL
[171284.716147]  CIS : 00000060: 45 00 14 00 ff                                   E....
[171284.716150] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 0: G
[171284.716151] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 1: M
[171284.716153] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 2: L
[171284.716154] wintv_usb2ci: parse_cis_vstrings : CFG_V1_STR 3: L
[171284.716156] wintv_usb2ci: parse_cis : CFG_BASE: 0x200 (Cfg.Reg[0] in Attrib.Memory)
[171284.716158] wintv_usb2ci: parse_cis : CFG_REGS present [0-7] = 0x03
[171284.716160] wintv_usb2ci: parse_cis : IF-CODE[0] 0x0241 'DVB_CI_V1.00' matched
[171284.716161] wintv_usb2ci: parse_cis : CFG-OPTIONS: 0xF
[171284.716162] wintv_usb2ci: DVB-CI-Module detected
[171284.716166] wintv_usb2ci: CI_send_CMD         : [70] 5/5/0
[171289.840673] wintv_usb2ci: CI_read_CMD_REPLY   : [07] rc: -110 s:00 f:00 r:03 l:41
[171289.840687] wintv_usb2ci: CI_WriteExchange    : [70/07] response after 5128 ms
[171289.840690] wintv_usb2ci: XR-rc(224 != 7) *** CAM-ERROR(70) ***
[171289.840696] wintv_usb2ci: cam_state_set       : 05 -> 01
[171291.856495] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[171297.008253] wintv_usb2ci: CI_read_CMD_REPLY   : [02] rc: -110 s:00 f:00 r:03 l:41
[171297.008267] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 5152 ms
[171297.008271] wintv_usb2ci: XR-rc(224 != 2) *** CAM-ERROR(10) ***
[171299.023925] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[171300.588099] wintv_usb2ci: CI_read_CMD_REPLY   : [02] rc: 0 s:00 f:00 r:10 l:0
[171300.588114] wintv_usb2ci: CI_WriteExchange    : [10/02] response after 1564 ms
[171300.588118] wintv_usb2ci: XR-rc(16 != 2) *** CAM-ERROR(10) ***
[171302.607865] wintv_usb2ci: CI_send_CMD         : [10] 1/1/0
[171302.635986] wintv_usb2ci: CI_read_CMD_REPLY   : [02] 0/0/0
[171302.635993] wintv_usb2ci: cam_state_set       : 01 -> 04
[171302.635995] wintv_usb2ci: Reset CI Device
@9000h

This comment has been minimized.

Copy link
Author

9000h commented Feb 11, 2019

will close this as the discussion is happen at vdr-portal

@9000h 9000h closed this Feb 11, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.