pingpong.git
3 years agoAdding info about TP-Link bulb device IP.
rtrimana [Thu, 6 Sep 2018 23:45:51 +0000 (16:45 -0700)]
Adding info about TP-Link bulb device IP.

3 years agoAdding some changes related to the second batch of experiments to cluster pairs.
rtrimana [Thu, 6 Sep 2018 00:52:37 +0000 (17:52 -0700)]
Adding some changes related to the second batch of experiments to cluster pairs.

3 years agoImproving colors and looks of graph plots.
rtrimana [Wed, 5 Sep 2018 22:21:19 +0000 (15:21 -0700)]
Improving colors and looks of graph plots.

3 years agoMerging changes.
rtrimana [Wed, 5 Sep 2018 21:28:03 +0000 (14:28 -0700)]
Merging changes.

3 years agoAdding pair checking into the pairing process
rtrimana [Wed, 5 Sep 2018 21:25:44 +0000 (14:25 -0700)]
Adding pair checking into the pairing process

3 years agoDo some refactoring to prevent code duplication; change string sequence generation...
Janus Varmarken [Tue, 4 Sep 2018 19:08:21 +0000 (12:08 -0700)]
Do some refactoring to prevent code duplication; change string sequence generation/grouping to utilize Stream API.

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Sat, 1 Sep 2018 00:00:38 +0000 (17:00 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoAdding plotting scriptto plot both on and off plots at once.
rtrimana [Sat, 1 Sep 2018 00:00:17 +0000 (17:00 -0700)]
Adding plotting scriptto plot both on and off plots at once.

3 years agoMerging
rtrimana [Fri, 31 Aug 2018 23:31:51 +0000 (16:31 -0700)]
Merging

3 years agoAdding plotting using DBSCAN
rtrimana [Fri, 31 Aug 2018 23:30:15 +0000 (16:30 -0700)]
Adding plotting using DBSCAN

3 years agoConversation.java: added unconvetional TLS ports used by WeMo plugs and LiFX bulbs...
Janus Varmarken [Fri, 31 Aug 2018 22:38:00 +0000 (15:38 -0700)]
Conversation.java: added unconvetional TLS ports used by WeMo plugs and LiFX bulbs to isTls()

3 years agoSome exploratory work on extracting TLS App Data sequence
Janus Varmarken [Fri, 31 Aug 2018 22:21:27 +0000 (15:21 -0700)]
Some exploratory work on extracting TLS App Data sequence

3 years agoTcpConversationUtils.java: add method for grouping conversations by TLS Application...
Janus Varmarken [Fri, 31 Aug 2018 22:18:07 +0000 (15:18 -0700)]
TcpConversationUtils.java: add method for grouping conversations by TLS Application Data sequence; add method for getting packet length sequence for TLS Application data.

3 years agoAdding more checks for Application Data; basically if a packet has the Application...
rtrimana [Thu, 30 Aug 2018 21:37:54 +0000 (14:37 -0700)]
Adding more checks for Application Data; basically if a packet has the Application Data type (=23) and it exceeds the MTU size 1514, then the next packet should be Application Data packet as well.

3 years agoSimple Python script to plot datapoints based on clusters.
rtrimana [Tue, 28 Aug 2018 18:51:04 +0000 (11:51 -0700)]
Simple Python script to plot datapoints based on clusters.

3 years agoExtracting Application Data pairs into files for ON/OFF events.
rtrimana [Tue, 28 Aug 2018 00:02:24 +0000 (17:02 -0700)]
Extracting Application Data pairs into files for ON/OFF events.

3 years agoAdding a boolean variable to choose between the verbose or the concise version of...
rtrimana [Mon, 27 Aug 2018 18:43:19 +0000 (11:43 -0700)]
Adding a boolean variable to choose between the verbose or the concise version of the packet lengths string.

3 years agoConversation.java: implemented logging of TLS application data packets.
Janus Varmarken [Sat, 25 Aug 2018 07:14:50 +0000 (00:14 -0700)]
Conversation.java: implemented logging of TLS application data packets.

3 years agoAdding plotting of points with centroid coordinates and frequencies.
rtrimana [Thu, 23 Aug 2018 23:22:16 +0000 (16:22 -0700)]
Adding plotting of points with centroid coordinates and frequencies.

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Thu, 23 Aug 2018 17:26:54 +0000 (10:26 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoAdding Python ML examples of clustering data points.
rtrimana [Thu, 23 Aug 2018 17:26:31 +0000 (10:26 -0700)]
Adding Python ML examples of clustering data points.

3 years agoSequenceExtration.java: finish up naive implementation of extract(...) and move to...
Janus Varmarken [Tue, 21 Aug 2018 22:11:08 +0000 (15:11 -0700)]
SequenceExtration.java: finish up naive implementation of extract(...) and move to seqalignment subpackage.
Main.java: add code for exploring the number of false positives for sequence alignment.
TcpConversationUtils.java: move implementation of getPacketLengthSequence(Conversation) to this class from SequenceExtraction as it is a generally useful util method.

3 years agoupdate to gradle 4.9
Janus Varmarken [Tue, 21 Aug 2018 18:15:27 +0000 (11:15 -0700)]
update to gradle 4.9

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Mon, 20 Aug 2018 18:59:43 +0000 (11:59 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoFew more tests in Main.java
rtrimana [Mon, 20 Aug 2018 18:59:22 +0000 (11:59 -0700)]
Few more tests in Main.java

3 years agoSequenceExtraction.java: work in progress, ignore it.
Janus Varmarken [Sun, 19 Aug 2018 06:54:36 +0000 (23:54 -0700)]
SequenceExtraction.java: work in progress, ignore it.

3 years agoTcpConversationUtils.java: make SYNs, FINs, and RSTs part of sequence string produced...
Janus Varmarken [Sun, 19 Aug 2018 06:51:23 +0000 (23:51 -0700)]
TcpConversationUtils.java: make SYNs, FINs, and RSTs part of sequence string produced by groupConversationsByPacketSequence(Collection<Conversation>)

3 years agoTcpReassembler.java: add RST packets to Conversations; check if IP matches 10.0.1...
Janus Varmarken [Sun, 19 Aug 2018 06:49:05 +0000 (23:49 -0700)]
TcpReassembler.java: add RST packets to Conversations; check if IP matches 10.0.1.X or 192.168.1.X when creating a new Conversation from a non-SYN packet and initialize client/server end of Conversation accordingly; throw AssertionError instead of IllegalStateException to indicate incorrect internal assumption.

3 years agoConversation.java: make Direction enum public, and add toCompactString method.
Janus Varmarken [Sun, 19 Aug 2018 04:34:14 +0000 (21:34 -0700)]
Conversation.java: make Direction enum public, and add toCompactString method.

3 years agoConversation.java: add infrastructure for tracking TCP segments which have the RST...
Janus Varmarken [Fri, 17 Aug 2018 23:37:10 +0000 (16:37 -0700)]
Conversation.java: add infrastructure for tracking TCP segments which have the RST flag set.

3 years agoConversation: replace RuntimeExceptions with AssertionErrors to properly communicate...
Janus Varmarken [Fri, 17 Aug 2018 21:38:14 +0000 (14:38 -0700)]
Conversation: replace RuntimeExceptions with AssertionErrors to properly communicate that the error is due to an internal mistake (invalid assumption about set of enum values)

3 years agoMain.java: add paths for truncated TP Link Plug trace
Janus Varmarken [Wed, 15 Aug 2018 21:00:53 +0000 (14:00 -0700)]
Main.java: add paths for truncated TP Link Plug trace

3 years agoStashing preliminary work on sequence extraction
Janus Varmarken [Wed, 15 Aug 2018 20:59:37 +0000 (13:59 -0700)]
Stashing preliminary work on sequence extraction

3 years agoAdding more devices
rtrimana [Fri, 17 Aug 2018 22:36:04 +0000 (15:36 -0700)]
Adding more devices

3 years agoAdding more devices
rtrimana [Wed, 15 Aug 2018 20:50:14 +0000 (13:50 -0700)]
Adding more devices

3 years agoImplement a generic version of the sequence alignment algorithm from Kleinberg's...
Janus Varmarken [Sat, 11 Aug 2018 20:34:52 +0000 (13:34 -0700)]
Implement a generic version of the sequence alignment algorithm from Kleinberg's and Tardo's 'Algorithm Design'

3 years agoAdding a new device: Lifx light bulb.
rtrimana [Thu, 9 Aug 2018 16:06:15 +0000 (09:06 -0700)]
Adding a new device: Lifx light bulb.

3 years agoAdding one more entry in clicker.sh and Main.java
rtrimana [Wed, 8 Aug 2018 00:27:57 +0000 (17:27 -0700)]
Adding one more entry in clicker.sh and Main.java

3 years agoAdding Kwikset doorlock.
rtrimana [Mon, 6 Aug 2018 21:38:48 +0000 (14:38 -0700)]
Adding Kwikset doorlock.

3 years agoUpdating automation clicker.sh
rtrimana [Mon, 6 Aug 2018 16:55:30 +0000 (09:55 -0700)]
Updating automation clicker.sh

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Fri, 3 Aug 2018 23:36:27 +0000 (16:36 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoChanging Main.java
rtrimana [Fri, 3 Aug 2018 23:36:03 +0000 (16:36 -0700)]
Changing Main.java

3 years agoAdded grouping of conversations by sequence identifeir
Janus Varmarken [Fri, 3 Aug 2018 23:31:52 +0000 (16:31 -0700)]
Added grouping of conversations by sequence identifeir

3 years agoAdding paths etc.
rtrimana [Fri, 3 Aug 2018 22:23:25 +0000 (15:23 -0700)]
Adding paths etc.

3 years agoTrafficLabeler.java: provide functionality for extracting labeled traffic grouped...
Janus Varmarken [Fri, 3 Aug 2018 21:35:27 +0000 (14:35 -0700)]
TrafficLabeler.java: provide functionality for extracting labeled traffic grouped by hostname.
Main.java: add + update filepaths; add code for grouping ONs and OFFs sequence counts.
TriggerTrafficExtractor.java: change inclusion window to 20 seconds.
UserAction.java: overwrite toString() for debugging purposes.

3 years agoTrafficLabeler.java: implemented support for exporting the labeled traffic in differe...
Janus Varmarken [Thu, 2 Aug 2018 23:37:29 +0000 (16:37 -0700)]
TrafficLabeler.java: implemented support for exporting the labeled traffic in different representations (for example as reassembled TCP conversations).
Main.java: invoke TrafficLabeler to get the set of TCP conversations per user action.
TriggerTrafficExtractor.java: change inclusion interval to 10 seconds.

3 years agoMain.java: add paths to Wemo data files
Janus Varmarken [Thu, 2 Aug 2018 01:12:27 +0000 (18:12 -0700)]
Main.java: add paths to Wemo data files

3 years agoMain.java: add paths to TP-Link Bulb data
Janus Varmarken [Thu, 2 Aug 2018 00:31:07 +0000 (17:31 -0700)]
Main.java: add paths to TP-Link Bulb data

3 years agoinvoke TrafficLabeler from Main.java (ignoring results for now)
Janus Varmarken [Thu, 2 Aug 2018 00:05:08 +0000 (17:05 -0700)]
invoke TrafficLabeler from Main.java (ignoring results for now)

3 years agoFirst attempt at labeling traffic with user actions
Janus Varmarken [Wed, 1 Aug 2018 21:32:27 +0000 (14:32 -0700)]
First attempt at labeling traffic with user actions

3 years agoUpdating the automation script clicker.sh
rtrimana [Wed, 1 Aug 2018 20:27:33 +0000 (13:27 -0700)]
Updating the automation script clicker.sh

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Tue, 31 Jul 2018 23:40:51 +0000 (16:40 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoTcpConversationUtils.java and Main.java: add support for counting packet pair frequen...
Janus Varmarken [Fri, 27 Jul 2018 19:22:17 +0000 (12:22 -0700)]
TcpConversationUtils.java and Main.java: add support for counting packet pair frequencies per hostname; switch filepaths to point to D-Link files.

3 years agoMain.java: change filepaths to point to TPLink july experiment.
Janus Varmarken [Fri, 27 Jul 2018 01:17:53 +0000 (18:17 -0700)]
Main.java: change filepaths to point to TPLink july experiment.

3 years agoTriggerTrafficExtractor.java: simplify packet inclusion logic (shouldIncludePacket...
Janus Varmarken [Fri, 27 Jul 2018 01:16:14 +0000 (18:16 -0700)]
TriggerTrafficExtractor.java: simplify packet inclusion logic (shouldIncludePacket) -- NOTE: this comes with a high cost as it is an inefficient implementation compared to the previous one -- revert to previous implementation once its correctness has been verified.

3 years agoTriggerTimesFileReader.java: use try-with such that trigger times file is properly...
Janus Varmarken [Fri, 27 Jul 2018 01:02:41 +0000 (18:02 -0700)]
TriggerTimesFileReader.java: use try-with such that trigger times file is properly closed after use

3 years agoUpate date format to match format used in timestamp files produced by experiment...
Janus Varmarken [Thu, 26 Jul 2018 23:00:50 +0000 (16:00 -0700)]
Upate date format to match format used in timestamp files produced by experiment script

3 years agoMain.java: re-add counting of statistics using TcpConversationUtils
Janus Varmarken [Thu, 26 Jul 2018 22:34:36 +0000 (15:34 -0700)]
Main.java: re-add counting of statistics using TcpConversationUtils

3 years agoMain.java: cleanup - leave only code for extracting traffic generated by a device...
Janus Varmarken [Thu, 26 Jul 2018 22:02:09 +0000 (15:02 -0700)]
Main.java: cleanup - leave only code for extracting traffic generated by a device within x seconds of a trigger

3 years agoMain.java: cleanup - get rid of old, commented sample/debug code
Janus Varmarken [Thu, 26 Jul 2018 21:50:42 +0000 (14:50 -0700)]
Main.java: cleanup - get rid of old, commented sample/debug code

3 years agoMain.java: delete code that would compute statistics of conversations (now in separat...
Janus Varmarken [Thu, 26 Jul 2018 21:47:05 +0000 (14:47 -0700)]
Main.java: delete code that would compute statistics of conversations (now in separate class)

3 years agoTcpConversationUtils.java: add some utility functions for counting frequencies (of...
Janus Varmarken [Thu, 26 Jul 2018 20:43:51 +0000 (13:43 -0700)]
TcpConversationUtils.java: add some utility functions for counting frequencies (of packet lengths)

3 years agoTcpConversationUtils.java: added Javadoc
Janus Varmarken [Thu, 26 Jul 2018 00:03:30 +0000 (17:03 -0700)]
TcpConversationUtils.java: added Javadoc

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Wed, 25 Jul 2018 23:10:52 +0000 (16:10 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoAdding coordinates for the SmartThings app button.
rtrimana [Wed, 25 Jul 2018 23:10:30 +0000 (16:10 -0700)]
Adding coordinates for the SmartThings app button.

3 years agoTcpReassembler.java: bugfix: make mTerminatedConversations a list instead of prevent...
Janus Varmarken [Wed, 25 Jul 2018 23:10:24 +0000 (16:10 -0700)]
TcpReassembler.java: bugfix: make mTerminatedConversations a list instead of prevent older conversations from being overwritten when an ephemeral port number is reused in communication between the same two hosts

3 years agoImplement grouping of conversations by hostname
Janus Varmarken [Wed, 25 Jul 2018 22:16:21 +0000 (15:16 -0700)]
Implement grouping of conversations by hostname

3 years agoMain.java: count packet length frequencies and packet sequence frequencies; use 24...
Janus Varmarken [Tue, 24 Jul 2018 23:20:38 +0000 (16:20 -0700)]
Main.java: count packet length frequencies and packet sequence frequencies; use 24+h tplink pcap file

3 years agoPcapHandleReader: count and print (to std.err) the number of packets that appear...
Janus Varmarken [Tue, 24 Jul 2018 21:41:16 +0000 (14:41 -0700)]
PcapHandleReader: count and print (to std.err) the number of packets that appear out of order

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Tue, 24 Jul 2018 18:01:12 +0000 (11:01 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoAdding more formatting/information into clicker.sh script.
rtrimana [Tue, 24 Jul 2018 18:00:49 +0000 (11:00 -0700)]
Adding more formatting/information into clicker.sh script.

3 years agoAdded script for prepending dates to the timestamp files
Janus Varmarken [Tue, 24 Jul 2018 00:41:27 +0000 (17:41 -0700)]
Added script for prepending dates to the timestamp files

3 years agoMain.java: extracting pairs related to events.tplinkra.com
Janus Varmarken [Mon, 23 Jul 2018 21:37:42 +0000 (14:37 -0700)]
Main.java: extracting pairs related to events.tplinkra.com

3 years agoMake DnsMap implement PacketListener in order to allow it to be used with PcapHandleR...
Janus Varmarken [Mon, 23 Jul 2018 21:10:55 +0000 (14:10 -0700)]
Make DnsMap implement PacketListener in order to allow it to be used with PcapHandleReader

3 years agoMain.java: perform TCP reassembly and extract packet pairs.
Janus Varmarken [Mon, 23 Jul 2018 20:57:36 +0000 (13:57 -0700)]
Main.java: perform TCP reassembly and extract packet pairs.

3 years agoCleanup: Refactor PcapHandleReader to io package.
Janus Varmarken [Fri, 20 Jul 2018 21:39:54 +0000 (14:39 -0700)]
Cleanup: Refactor PcapHandleReader to io package.

3 years agoCorrect TcpReassembler to implement PacketListener interface instead of PcapPacketCon...
Janus Varmarken [Fri, 20 Jul 2018 21:20:12 +0000 (14:20 -0700)]
Correct TcpReassembler to implement PacketListener interface instead of PcapPacketConsumer interface deleted in last commit. Remove import of deleted PcapProcessingPipeline in Main.java

3 years agoDelete PcapReader.java, PcapProcessingPipeline.java and PcapPacketConsumer.java
Janus Varmarken [Fri, 20 Jul 2018 21:18:13 +0000 (14:18 -0700)]
Delete PcapReader.java, PcapProcessingPipeline.java and PcapPacketConsumer.java

3 years agoPerform trigger traffic extraction on data from Feb 13 experiment
Janus Varmarken [Fri, 20 Jul 2018 20:50:59 +0000 (13:50 -0700)]
Perform trigger traffic extraction on data from Feb 13 experiment

3 years agoMove trigger time file reader to separate class and convert to Java 8 time instead...
Janus Varmarken [Fri, 20 Jul 2018 00:43:41 +0000 (17:43 -0700)]
Move trigger time file reader to separate class and convert to Java 8 time instead of deprecated java date-time api.

3 years agoJavadoc for PcapHandleReader constructor.
Janus Varmarken [Thu, 19 Jul 2018 04:35:24 +0000 (21:35 -0700)]
Javadoc for PcapHandleReader constructor.

3 years agoTriggerTrafficExtractor: clean up
Janus Varmarken [Thu, 19 Jul 2018 04:12:04 +0000 (21:12 -0700)]
TriggerTrafficExtractor: clean up

3 years agoSome work-in-progress code for extracting trigger traffic
Janus Varmarken [Thu, 19 Jul 2018 04:09:18 +0000 (21:09 -0700)]
Some work-in-progress code for extracting trigger traffic

3 years agoSketch code for extracting packet pairs (unfinished - unsure how to apply it to recon...
Janus Varmarken [Wed, 18 Jul 2018 01:57:17 +0000 (18:57 -0700)]
Sketch code for extracting packet pairs (unfinished - unsure how to apply it to reconstructed tcp conversations).

3 years agoTcpReassembler: Provide method for retreiving reassembled conversations
Janus Varmarken [Wed, 18 Jul 2018 01:56:07 +0000 (18:56 -0700)]
TcpReassembler: Provide method for retreiving reassembled conversations

3 years agoPcapReader: provide parameter for specifying a Berkeley Packet Filter
Janus Varmarken [Wed, 18 Jul 2018 01:54:51 +0000 (18:54 -0700)]
PcapReader: provide parameter for specifying a Berkeley Packet Filter

3 years agoMove PcapProcessingPipeline to different package.
Janus Varmarken [Wed, 18 Jul 2018 01:53:30 +0000 (18:53 -0700)]
Move PcapProcessingPipeline to different package.

3 years agoConversation: ensure packets are added to list in descending order of their timestamps.
Janus Varmarken [Wed, 18 Jul 2018 01:52:52 +0000 (18:52 -0700)]
Conversation: ensure packets are added to list in descending order of their timestamps.

3 years agoCode for reassembling TCP streams. Not thoroughly tested, but seems to work for a...
Janus Varmarken [Fri, 13 Jul 2018 23:52:32 +0000 (16:52 -0700)]
Code for reassembling TCP streams. Not thoroughly tested, but seems to work for a simple, small pcap file

3 years agoAdd code for recording SYN packets in Conversation.
Janus Varmarken [Wed, 11 Jul 2018 22:24:46 +0000 (15:24 -0700)]
Add code for recording SYN packets in Conversation.

3 years agoBug-fix: Use seperate, direction-dependent sets of sequence numbers (used when determ...
Janus Varmarken [Wed, 11 Jul 2018 02:30:30 +0000 (19:30 -0700)]
Bug-fix: Use seperate, direction-dependent sets of sequence numbers (used when determining if a segment is a retransmission) as client and server may (after a while) end up using a sequence number that the other party has already used for sending a packet in the opposite direction.

3 years agoExperimenting with reverse engineered TP-link API
Janus Varmarken [Fri, 6 Jul 2018 22:19:31 +0000 (15:19 -0700)]
Experimenting with reverse engineered TP-link API

3 years agoA few more changes for capturing pairs.
rtrimana [Fri, 6 Jul 2018 21:47:42 +0000 (14:47 -0700)]
A few more changes for capturing pairs.

3 years agoAdding timestamp checks into the packet filtering for obtaining datapoints.
rtrimana [Mon, 18 Jun 2018 21:55:19 +0000 (14:55 -0700)]
Adding timestamp checks into the packet filtering for obtaining datapoints.

3 years agoGetting pairs of packets from the client-server communications.
rtrimana [Fri, 15 Jun 2018 18:29:37 +0000 (11:29 -0700)]
Getting pairs of packets from the client-server communications.

3 years agoMerge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic
rtrimana [Mon, 4 Jun 2018 23:36:34 +0000 (16:36 -0700)]
Merge branch 'master' of https://github.uci.edu/rtrimana/smart_home_traffic

3 years agoUsing adb to click automatically on Android app; enabling automation
rtrimana [Mon, 4 Jun 2018 23:36:11 +0000 (16:36 -0700)]
Using adb to click automatically on Android app; enabling automation

4 years agoFirst (rushed) implementation of pattern seach at the MAC layer. Not pretty, but...
Janus Varmarken [Sun, 20 May 2018 00:39:53 +0000 (17:39 -0700)]
First (rushed) implementation of pattern seach at the MAC layer. Not pretty, but seems functional.

4 years agocorrect typo
Janus Varmarken [Sun, 20 May 2018 00:36:31 +0000 (17:36 -0700)]
correct typo

4 years agoAdded sub sequence search function, and put this into effect; seems to work just...
Janus Varmarken [Fri, 11 May 2018 05:12:13 +0000 (22:12 -0700)]
Added sub sequence search function, and put this into effect; seems to work just fine. Added subset pcap trace of TP_LINK_LOCAL_ON.