ACM101 ACM ICPC Training Module
This module is the official page for the Coders Guild. Sessions include training for the ACM International Collegiate Programming Contest, other related contests, as well as other fun programming related activities.
This module is a companion for the COS132 module. It is not for credits. It is an open online module which presents the material for the credited COS132 module presented at the Computer Science Department during the first semester every year It introduces imperative computer programming, which is a fundamental building block of computer science. The process of constructing a program for solving a given problem, of editing it, compiling, running and debugging it, is covered from the beginning. The aim is to master the elements of a programming language, and be able to put them together in order to construct programs using types, control structures, arrays, functions and libraries. After completing this module, the student should understand the fundamental elements of a program, the importance of good program design and user friendly interaction mechanisms. Students should be able to write complete elementary programs.
COS131 Introduction to Programming
The aim of this module is to acquire a sound knowledge of basic computer programming concepts and an introductory knowledge of data structures. The theory of these concepts, as well as design methodologies, will be investigated. Understanding rather than memorising is emphasised in order to stimulate creative thinking and the development of innovative skills amongst students in the field of computer programming. The C programming language is used to implement these concepts. At the end of the module a short introduction to object-oriented programming using C++ will be given. After completing this module, a student should be able to design and write structured, efficient programs using the C programming language, be familiar with the basic data structures, pointers and file processing, and have an introductory knowledge of advanced data structures and object orientation.
COS132 Imperative Programming
This module introduces imperative computer programming, which is a fundamental building block of computer science. The process of constructing a program for solving a given problem, of editing it, compiling, running and debugging it, is covered from the beginning. The aim is to master the elements of a programming language, and be able to put them together in order to construct programs using types, control structures, arrays, functions and libraries. After completing this module, the student should understand the fundamental elements of a program, the importance of good program design and user friendly interaction mechanisms. Students should be able to write complete elementary programs.
COS133 Introduction to Programming 1
Introduction to Programming 1 This module introduces imperative computer programming, which is a fundamental building block of computer science. The process of constructing a program for solving a given problem, of editing it, compiling (both manually and automatically), running and debugging it, is covered from the beginning. The aim is to master the elements of a programming language, and be able to put them together in order to construct programs using types, control structures and arrays. COS133 is part of the four-year programme for Computer Science.
COS135 Introduction to programming 3
The module follows a practical programming approach. It will consolidate fundamental prior problem solving and programming knowledge.
COS151 Introduction to Computer Science
This module introduces concepts and terminology related to the computer science discipline. Topics covered include the history of computing, machine level representation of data, Boolean logic and gates, basic computer systems organisation, algorithms and complexity and automata theory. The module also introduces some of the subdisciplines of computer science, such as computer networks, database systems, compilers, information security and intelligent systems. The module is divided into two parts. Firstly, an introduction to program design will be presented by means of flowcharts. The focus of this first part will be on practical, pen-and-paper program design prior to program implementation, in addition to a software-based practical flowcharting component. Secondly, a broad overview of the fundamental concepts underlying computer science, as well as many of the sub-disciplines within the field will be given. The practical focus of the second part will be on short research assignments.
SIT110 Information Technology Orientation
This module provides academic support and development within the context of Information Technology. The course will help guide students with regard to communication skills, study methodologies and values. Students will specifically be exposed to different study methods in order for them to develop their own, critical thinking, time management and prioritisation, taking of notes, and the use of references and citation thereof. Additionally the module will expose students to Information Technology and its influences.
SIT133 Information Technology Orientation 1
Information Technology Orientation 1 This module provides academic support and development within the context of Information Technology. The module will help guide students with regards to communication skills, study methodologies and values. Students will specifically be exposed to different study methods in order for them to develop their own critical thinking, time management and prioritisation, taking of notes, and the use of references and the citation thereof. Additionally, the module will expose students to Information Technology and its influences.
COS110 Program Design: Introduction
The focus is on object-oriented (OO) programming. Concepts including inheritance and multiple inheritance, polymorphism, operator overloading, memory management (static and dynamic binding), interfaces, encapsulation, re-use, etc. will be covered in the module. The module teaches sound program design with the emphasis on modular code, leading to well structured, robust and documented programs. A modern OO programming language is used as the vehicle to develop these skills. The module will introduce the student to basic data structures, lists, stacks and queues.
COS121 Software Modelling (C++)
The module will introduce the concepts of model-driven analysis and design as a mechanism to develop and evaluate complex software systems. Systems will be decomposed into known entities, such as design patterns, classes, relationships, execution loops and process flow, in order to model the semantic aspects of the system in terms of structure and behaviour. An appropriate tool will be used to support the software modelling. The role of the software model in the enterprise will be highlighted. Students who successfully complete this module will be able to conceptualise and analyse problems and abstract a solution.
COS143 Introduction to Programming 2
This module follows on from the previous module and introduces the concepts of functions, memory management and libraries in the imperative programming paradigm. An introduction to object orientation will be given. After completing this module and the module prerequisite, the student should understand the fundamental elements of a program, the importance of good program design and user friendly interfaces. Students should be able to conduct basic program analysis and write complete elementary programs.
SIT120 Information Technology Orientation
This module SIT 120 is a continuation of the SIT 110 module. Hence, it provides academic support and development within the context of Information Technology. The module will help guide students with regard to communication skills, study methodologies and values. Students will specifically be exposed to different study methods in order for them to develop their own, critical thinking, time management and prioritisation, taking of notes, and the use of references and citation thereof. Additionally the module will expose students to Information Technology and its influences.
SIT143 Information Technology Orientation 2
Continuation of the SIT133 module.
COS153 Introduction to Programming
Introduction to Programming 3 The module follows a practical programming approach. It will consolidate fundamental prior problem solving and programming knowledge.
COS212 Data Structures and Algorithms
Data abstraction is a fundamental concept in the design and implementation of correct and efficient software. In prior modules, students are introduced to the basic data structures of lists, stacks and queues. This module continues with advanced data structures such as trees, hash tables, heaps and graphs, and goes into depth with the algorithms needed to manipulate them efficiently. Classical algorithms for sorting, searching, traversing, packing and game playing are included, with an emphasis on comparative implementations and efficiency. At the end of this module, students will be able to identify and recognise all the classical data structures; implement them in different ways; know how to measure the efficiency of implementations and algorithms; and have further developed their programming skills, especially with recursion and polymorphism.
COS216 Netcentric Computer Systems
This module introduces the principles of netcentric computing that can be applied to the WWW and internet as well as to distributed applications. The main focus is on the concepts of client and server side programming, web-based applications, port and socket interaction, writing programs that require remote function calls, and achieving database connectivity using the appropriate technology. The supporting technologies of mark-up languages and scripting languages are also studied. It will also test the ability of a student to use, integrate and maintain the necessary software and hardware required to illustrate the concepts specified.
SIT153 Introduction to computing
Introduction to computing This module introduces essential concepts and terminology related to computing. Topics covered include machine level data representation, Boolean logic and gates, data structures and types, basic computer systems organisation and algorithms.
COS222 Operating Systems
Fundamental concepts of modern operating systems in terms of their structure and the mechanisms they use are studied in this module. Real Time, Multimedia and Multiple Processor Systems are defined and analysed. This module also deals with modern design issues of process management, deadlock, memory management, input/output management, file systems and security.
COS226 Concurrent Systems
Computer science courses mostly deal with sequential programs. This module looks at the fundamentals of concurrency; what it means, how it can be exploited, and what facilities are available to determine program correctness. Concurrent systems are designed, analysed and implemented.
COS284 Computer Organisation and Architecture
This module provides the foundations on which other modules build by enabling a deeper understanding of how software interacts with hardware. It will teach the design and operation of modern digital computers by studying each of the components that make up a digital computer and the interaction between these components. Specific areas of interest, but not limited to, are: representation of data on the machine-level; organisation of the machine on the assembly level; the architecture and organisation of memory; inter- and intra-component interfacing and communication; data paths and control; and parallelism. Topic-level detail and learning outcomes for each of these areas are given by the first 6 units of ‘Architecture and Organisation’ knowledge area as specified by the ACM/IEEE Computer Science Curriculum 2013. The concepts presented in the theory lectures will be reinforced during the practical sessions by requiring design and implementation of the concepts in simulators and assembly language using an open source operating system.
COS301 Software Engineering
The module exposes students to problems associated with software development on an industrial scale. Overall goals of the module are: to become familiar with the latest trends in software engineering; to understand the software engineering process and to appreciate its complexity; to be exposed to a variety of methodologies for tackling different stages of the software lifecycle; to understand and apply the concepts of systems administration and maintenance; to complete the development of a fairly large object orientation-based software product. The focus of the module is on a project that lasts the whole year. The project is completed in groups of approximately five (5) students and teaches students to take responsibility for a variety of roles within a group, and to understand the different requirements for these; to experience the advantages and problems of working in a group; professionalism with regards to particularly colleagues and clients. After the successful completion of this module, the student will be able too: understand the psychology of a client; work in groups; and have an appreciation for planning, designing, implementing and maintaining large projects. These qualities should place the students in a position in which they are able to handle software development in the corporate environment.
COS314 Artificial Intelligence
The main objective of this module is to introduce a selection of topics from Artificial Intelligence (AI), and to provide students with the background to implement AI techniques for solving complex problems. This module will cover topics from classical AI, as well as more recent AI paradigms. These topics include: Search methods, game playing, knowledge representation and reasoning, machine learning, neural networks, intelligent agents and evolutionary computation. In the practical part of this module, students will get experience in implementing (1) game trees with suitable algorithms, (2) a genetic algorithm and applying it to solve a real-world problem, and (3) a neural network and applying it to solve a real-world problem.
COS332 Computer Networks
The objective of this module is to acquaint the student with the terminology of communication systems and to establish a thorough understanding of exactly how data is transferred in such communication networks, as well as applications that can be found in such environments. The study material includes: concepts and terminology, the hierarchy of protocols according to the OSI and TCP/IP models, protocols on the data level, physical level and network level as well as higher level protocols. The practical component of the module involves programming TCP/IP sockets using a high level language. The emphasis throughout is on the technical aspects underlying the operation of networks, rather than the application of networks.
COS341 Compiler Construction
This web page constitutes the ONLINE STUDY GUIDE for module COS341 in the 1st Semester of 2015. Please check frequently for new announcements!
COS344 Computer Graphics
The aim of this module is to acquire a sound knowledge of the basic theory of interactive computer graphics and basic computer graphics programming techniques. The theory will cover graphics systems and models, graphics programming, input and interaction, geometric objects and transformations, viewing in 3D, shading and rendering techniques. The module includes a practical component that enables students to apply and test their knowledge in computer graphics.
COS326 Database Systems
This module builds on a prior introductory module on database technology and provides more advanced theoretical and practical study material.
COS330 Computer Security and Ethics
This module develops an appreciation of the fundamentals and design principles for information assurance and security. Students will develop a clear understanding of the basic information security services and mechanisms, enabling them to design and evaluate the integration of solutions into the user application environment. Emphasis will be placed on services such as authorisation and confidentiality. Students will acquire knowledge and skills of Security Models such as the Bell-LaPadula, Harrison-Ruzzoconfidentiality service by focusing on cryptology and the practical implementation thereof. The student will be introduced to professional and philosophical ethics. At the end of the module students will be able to engage in a debate regarding the impact (local and global) of computers on individuals, organisations and society. The professionalism of IT staff will be discussed against national and international codes of practices such as those of the CSSA, ACM and IEEE.
COS333 Programming Concepts
Programming languages are the backbone for software development. Each language has its own unique syntax and semantics, but there are many common concepts that can be illustrated and studied through the languages. This module concentrates on issues of object orientation, including delegation, iteration and polymorphism. It surveys how languages provide the basic building blocks for data and control, as well as exception handling and concurrency. At the end of the module, students will be able to appreciate the rich history behind programming languages, leading to independent principles that have evolved over time. They will be skilled at using a variety of programming languages (including new paradigms such as functional, logic and scripting), and will know how to learn a new language with ease. From this experience, they will be able to apply evaluation criteria for choosing an appropriate programming language in a given scenario.
COS700 Research Methods and Project
COS700 is COMPULSORY. All students ---also part-time students--- MUST take it in their FIRST study-year at Honours Level.
HON015 Hons-Curriculum: General Announcements for 2015
This page will convey general information about BSc-Hons (CS) in the academic year 2015. Please re-visit this page frequently such that you will not miss any important announcements.
COS710 Artificial Intelligence (I)
This module focuses on two Computational Intelligence paradigms, namely Evolutionary Computation and Swarm Intelligence. Within the Evolutionary Computation paradigm, algorithmic models of Darwinian evolution will be studied, including genetic algorithms, genetic programming, evolutionary strategies, evolutionary programming, differential evolution, cultural algorithms and co-evolution. Within the Swarm Intelligence paradigm algorithm models of social organisms found in nature will be studied, including ant algorithms and particle swarm optimisation. These algorithms will mostly be studied in the context of complex optimisation problems, including multi-objective optimisation, dynamic environments, constraints, and finding multiple solutions. Prior knowledge assumed include good programming skills and an undergraduate module in calculus.
COS720 Computer and information security (I)
This module focuses on state-of-the-art security topics that are current and relevant to industry. The curriculum for the module is determined annually to reflect the current research directions as pursued by the Information and Computer Security Architectures (ICSA) researh group. The main topics include, but are not limited to: Applied security, including operating system security, secure coding, and cryptography; Trust and trust management systems; Privacy and privacy-enhanced technologies; Social Engineering. Students will be challenged to contribute innovative research ideas in the field of Computer Security by completing a number of mini projects such as writing research papers and writing software programs.
COS730 Software Engineering, I
This web page constitutes the ONLINE STUDY GUIDE for module COS730 in the 1st Semester of 2015. Please check frequently for new announcements!
COS740 Formal aspects of computing (I)
The focus of this module is on a formal approach to deriving algorithms, known as "correctness by construction". It relies on Dijkstra's guarded command language (GCL) for specifying the derived algorithms. The requirements of an algorithm are initially stated in terms of a pre- and a post-condition, specified in first order predicate logic. Strategies are given for progressively refining these specifications to GCL notation which can, in turn, easily be translated into a conventional programming language. The surprising power of the method will be demonstrated. Not only are algorithms guaranteed to be correct (in the same sense that the proof of a mathematical theorem is guaranteed to be correct); they frequently turn out to be remarkably efficient. In the early part of the module, a number of well-known algorithms (such as linear and binary search, raising a number to an integer power, finding the approximate log of a number, etc) will be derived in order to become thoroughly familiar with the approach. Later various intermediate level algorithms will be derived (such as simple raster drawing algorithms, pattern matching algorithms, finding the longest string of a certain type, an algorithm to solve the majority voting problem, etc). Finally, the method will be used to derive state-of-the-art algorithms to minimize finite automata and to construct formal concept lattices. The theory necessary to understand these topics will be provided. The value-objectives of the module are: to develop an appreciation that theory can be effectively deployed to solve practical problems; to value the elegance of the algorithmic solutions; and to value a correctness-by-construction mindset over one that is content with debugging into correctness. A basic understanding is assumed of first order predicate logic, as well as competency in mathematical reasoning.
COS782 Generic programming
This module introduces the concepts of generic programming in order to generate code at compile-time. Of particular interest is the automatic generation of design pattern implementations at compile-time for use at run-time. To this end, design patterns and compile-time programming techniques such as: basic compile-time programming constructs, object allocation, generalised functors, smart pointer and multi-methods are discussed in detail and applied to design patterns.
COS785 Computer graphics
This module is intended as an advanced module in real-time computer graphics and shader programming. The module includes the following topics: Advanced texture mapping, curves and curved surfaces, shadow mapping, skeletal animation, ray tracing and collision detection. The module assumes prior knowledge of introductory graphics as presented in an undergraduate module and a working knowledge of linear algebra and calculus.
COS787 Spatial databases
This module covers the major themes of spatial databases with application to geographic information systems (GIS), i.e. systems concerning data with an implicit or explicit reference to a location relative to the earth. Topics covered include an introduction to spatial databases and spatial data management systems, representation of geographic data, spatial data modelling, computational geometry, spatial data indexing, query processing and spatial data standards. For Computer Science students the module is an introduction to the ever increasing application field of geographics information systems (GIS), and for Geoinformatics students the module provides insight into the Computer Science foundations of the field.
COS788 Information Hiding
Information hiding is a category of computer security that focuses on embedding information in digital objects. Information, such as digital signatures, is sometimes embedded in objects to indicate ownership or origin – a technology that is called watermarking. Alternatively information is sometimes hidden in digital objects to facilitate invisible or inaudible communication – called steganography. Steganography focuses on the confidentiality of information, while watermarking is used to protect intellectual property. This module covers the techniques and algorithms used in both technologies to embed information in objects with minimal perceptual and audible changes to the objects. The module also provides a brief overview of different multimedia formats, such as image, audio and video, in order to understand their potential and limitations in the field of information hiding. Potential attacks on information hiding systems are also investigated.
COS711 Artificial Intelligence (II)
This module focuses on three Computational Intelligence paradigms, namely Artificial Neural Networks, Artificial Immune Systems, and Fuzzy Systems. Within the Artificial Neural Networks paradigm algorithmic models of neural learning will be studied, including supervised, unsupervised, and reinforcement learning. Aspects that influence the performance of artificial neural networks will be studied in depth. Within the Artificial Immune Systems paradigm algorithm models of different views of the human biological immune system will be studied, including negative selection, clonal selection, network theory and danger theory models. The Fuzzy Systems paradigm include models of reasoning with uncertainty, specifically fuzzy logic and rough sets. Prior knowledge assumed include good programming skills and an undergraduate module in calculus.
COS721 Computer and information security (II)
In 2015 the module will explore the nature of and scientific basis (or bases) for digital evidence. We will differentiate between scientific evidence, other evidence (including eyewitness testimony) and expert opinion. However, our focus will be on the first category: scientific (digital) evidence. We consider scientific evidence to be conclusions that can be justified based on science. To illustrate, consider a non digital forensic discipline: Suppose science tells us that the probability of two humans having the same genetic markers is 1/n, for some n. Suppose further that the world population is currently p=7 000 000 000. Finally, assume that we found a DNA trace at the scene of a crime and we have obtained a DNA sample from a suspect. Can we say that the suspect was definitely at the scene of the crime if n=p? What if n=2p? Or 100 p? Or 1 000 000 p? At what point is the error rate so low that we can conclude that the two samples match? One of the immediate questions is whether we are able reach any scientifically justified conclusions in the digital realm. If we can, the next question has to be: how certain are we about our conclusions? Note that no satisfactory answer to the latter question exists (in general) at this time. This may be reason to doubt that we are indeed able to reach justified scientific conclusions in the digital realm in general. In the bigger forensic environment this course focusses solely on examination (or analysis) of evidence, and ignores (almost) all other phases of the (digital) forensic process. To appreciate the module you have to be able to explore and engage with a range of topics. Questions about the nature of science are inherently philosophical. We can (and should) learn from fields that reach scientific conclusions about the physical or biological world and offer such conclusions as evidence. Hence we need to think about DNA evidence, pathological evidence, toolmark evidence and questioned documents, to name but a few - even though most of us do not have any specialist knowledge about these fields. We should extrapolate from what they can (and cannot) do, and apply the lessons to our field. We should study the existing (albeit unsatisfactory) models that attempt to provide a scientific basis for digital evidence. And, finally, we should attempt to establish one or more scientific bases for digital evidence - and critique whatever we propose.
COS731 Software engineering (II)
This module discusses software architecture, including the representation of designs, definitions, styles and patterns of architecture. Its themes include model-driven architecture, formal modelling and analysis, and architectural description languages. The module will show that the architecture of a software system is determined by the collection of significant design decisions made early on in the development of that system – decisions concerning the components comprising the system, repeating-patterns of system-wide aspects, and the platforms on which the system will be built. It will discuss how, once these decisions are made and subsequently followed, they end up profoundly affecting the development, deployment, use and ongoing enhancement of that system. The module assumes that the student is familiar with software development lifecycle concepts, and that she/he has been part of at least one significant software development effort. Those who have not completed COS730 will be provided additional background.
COS741 Formal Aspects of Computing II
[20-July-2015]: In any engineering discipline it would be unthinkable to construct a large system without having a precise notion of what is to be built and without verifying how the system is functioning. Software engineering, if it truly deserves the title "engineering", should be no different in this respect. In order to support these goals, FORMAL METHODS involve the use of mathematical notation and calculus in software development. In this course COS741 we study particularly the SOFL method which is also CASE-tool-supported.
COS750 Educational software development
This module provides the foundation to evaluate and develop educational software. It will introduce didactic principles applicable to the discipline of Computer Science. Using these principles, educational software, such as tools for teaching programming, on-line testing software, and adaptive software to name a few, can be evaluated and developed. Computer Science topics of interest are: programming environments, persistence of information and knowledge, knowledge representation etc.
COS781 Data mining
Data mining is the extraction of novel knowledge, or hidden patterns, from large data bases. The focus of this course is on how the computational intelligence techniques (such as evolutionary algorithms, swarm algorithms and neural networks) can be used for knowledge extraction. In addition, traditional machine learning techniques (such as decision trees and rule induction) will be covered. The pre-processing of data in preparation for data mining algorithms, as well as the post-processing of results after data mining, will be discussed. Exploratory data analysis and statistical data mining methods are also investigated. Finally, some attention will be given to more modern problems, such as the extraction of hidden knowledge from unstructured data, such as text and images. It is highly recommended that students do COS710 and COS711, as knowledge of these modules are assumed.
COS783 Digital forensics and investigations
This module will teach the basic theoretical concepts of digital forensic investigations. This module is designed to prepare a student for a wide range of people including, but not limited to, law enforcers, crime investigators and people responsible for internal incident investigations in larger organisations. Digital forensics is a relatively new and upcoming field. It is a field that is not well known by most organisations and therefore, such organisations are ill informed about the digital forensic processes required to conduct a successful digital forensic investigation. The large number of digital devices used to commit crimes or other related incidents, such as fraud and corruption, proved motivation for this module in order to investigate and combat these incidents successfully. The main topics covered, but not limited to, include: An introduction to Digital Forensics; Digital forensic processes; Hardware forensics; Digital forensics tools (software forensics); Forensic readiness; A digital forensics laboratory/facility; Network forensics; Live forensics; Professionalism and ethics in digital forensics; Cyber forensics; Cyber law. Students will be challenged to contribute innovative research ideas in the field of Digital Forensics by completing a number of mini projects such as writing research papers and writing software programs.
COS786 Parallel and Distributed Computing
Computational science relies on the analysis of often complex models, as its empirical data and analyses typically involve an enormous amount of calculations. Parallel computing is one means of reducing the time needed to complete such calculations. This module will examine the kinds of problems that lend themselves to parallel computation and the methods for implementing programs to solve such problems. The aim of the module is to provide a background for parallel and distributed computing as well as practical knowledge of the implementation of computational experiments.
COS790 Mobile and Ubiquitous Computing
The course will look at technologies, software architectures and frameworks for mobile and ubiquitous computing including the Internet iof Things (IoT). Topics covered in this course include mobile application development, networking for mobile and ubiquitous computing, component frameworks, distributed computing, wireless sensor networks, the Eclipse Open IoT Stack, architectures and middleware, scalable persistence infrastructures, and big data processing.
COS791 Special Topics (Image Analysis and Understanding)
In this course you will learn the foundations of and how we can use this to understand the image better. image analysis. Topics that will be covered are: the human computer vision system, sampling and frequency domain processing (Fourier Transforms and other transforms), image processing operations, feature extraction and object description.
MIT840 Mini-dissertation (Class-based portion)
This part of MIT840 is the final preparation phase for the research component of the MIT degree.
MIT842 Computer Science in Perspective
Computer Science in Perspective: The aim of this module is to serve as an introduction to the discipline of Computer Science. We will be exploring algorithms on different levels of abstraction; some basic modelling of algorithms and code using UML; understanding the nature of programming and how to manage programmers. We will also be exploring some selected topics in Computer Science such as Formal Methods, Artificial Intelligence and Computer Security.
MIT860 ICT Infrastructure Management
The course covers various disciplines of IT infrastructure management from the perspective of people, process, and technology. Topics include performance management, network management, and capacity planning.
MIT850 Life Cycle and Maturity Models for IT
The module aims to introduce the fundamental techniques of software engineering, by looking at maturity models, software life cycles and methods, standards and procedures to assess and measure quality of processes.
MIT853 Corporate IT Systems
This module focuses on the problems posed by large systems typically exemplified by integrated IT applications in the corporate sector. Facets covered are the relationships between components in the system (hardware, software, people) and the processes in the system. The following themes will be covered: Enterprise Resource Planning (ERP) Systems, Customer Relationship Management (CRM) Systems, IT Security & Privacy, Free/Libre/Open Source Software and Corporates, Modern Mainframe Systems.
MIT862 IT Research
MIT862 introduces the student to research skills required to complete the research required for the mini-dissertation.