Shop Talk logo

I’m sure you’ve heard it said many times before: technology is constantly changing. One of the ways I attempt to stay up to date is to listen to podcasts on my daily commute. I try to listen to a mixture of podcasts; some are very technical, some are designed for a general audience, and some are just for fun. This way I stay interested and engaged throughout my week.

Strangely though, listening to podcasts tends to be a solitary activity, and I’ve only been able to discuss it with people when I’ve started a conversation. When I eventually do get talking to people about podcasts, I’ve been given great suggestions or have shared my favourites with others, and it’s a really good way to get the word out.

Since this has been so useful for me, I wanted to list of a few of my favourites as a recommendation for others – and I also want to welcome any additional recommendations, too. Don’t let it be a solitary activity: if you listen to podcasts that aren’t mentioned here, please let us know below. 

Technical podcasts

Listening to podcasts that are related to work is a great way to keep up with the technical community. Personally, I also read newsletters and blog posts but find that these are far too easy to skim-read, and I only really absorb the knowledge when I hear it on a podcast.

I also find that technical people tend to make technology easily understandable when they talk (rather than write) about it. I don’t know why this is, but a simple side-note on a podcast can give me a much better high-level understanding of something compared to a little paragraph in an email.

My top three technical podcasts are listed below with a little summary – please give us your own suggestions on Twitter or in the comments!


The ShopTalk show podcast is hosted by Dave Rupert and Chris Coyier (creator of CSS Tricks) and is a podcast all about web development. They cover a huge range of topics with a wide variety of guests and is a good way to pick up the general lingo of the technical industry.


Hanselminutes is a podcast hosted by Scott Hanselman, a Microsoft employee who enjoys programming, teaching and speaking about technology. The podcast covers a wide range of technical and less technical concepts, such as Lean Customer Development and WebVR. It’s a really approachable podcast that skims over high-level concepts really well, although rarely goes into technical detail.

My JS Stories on JavaScript Jabber

The podcast JavaScript Jabber covers a lot of information on JavaScript, frameworks and front end development. However, they have recently started a subsection of JavaScript Jabber called My JS Story, hosted by Charles Max Wood. My JS Story is a series of podcasts with various open source collaborators and JS programmers across the world that are asked to share their stories of how they got into programming in the first place, and then how they moved into JS from there.

Non-technical podcasts, but still work-related

There are also some podcasts that I listen to for fun, but which actually teach me things that I end up using at work. These are particularly interesting because things you never think will be useful pop up in a conversation and save the day.

My top three non-technical but work-related podcasts are below. Do you have any that you listen to for fun but find they’re actually useful too?

Note to Self

Note to Self is a podcast hosted by Manoush Zomorodi, and it covers the ethical and difficult questions about technology. It covers a huge variety of topics from new technologies, politics, mental health and others, and it always gives a brutally honest opinion on whether technology is helping or hindering us.

Science in Action

Science in Action is a BBC World Service weekly podcast that talks about new and interesting scientific discoveries and what they could mean for the future. It is rarely work-related, admittedly, but it does give you a host of interesting “Did you know…” facts you can spout to your teammates.

Happier with Gretchen Rubin

Happier is a weekly podcast from Gretchen Rubin and her sister Elizabeth Craft. Gretchen dedicates her time to researching and evangelising a happier life, and her podcast is full of easily accessible tips and tricks (and Happiness Hacks) for how you can improve your everyday life. These are not always life altering tips but they have helped me a lot over time, and help you to reflect on your own life and how you can help yourself be happier.

A bit of fun

Sometimes after a long day (or week) you really need a funny or interesting podcast that is 100% not going to be related to work. This helps me wind down and clear my mind after a day of coding, and makes me laugh after a difficult day.

My top fun podcasts are below. Please feel free to offer other recommendations on Twitter, I’m sure there are lots of fun ones going around!

No Such Thing As A Fish

No Such Thing As A Fish is the podcast from the QI Elves (the researchers behind the TV show) and hosts a panel of regulars that find an amusing fact from the week and explain it. This usually dissolves into a group discussion of something entirely irrelevant but hilarious, and you learn something along the way.

The Infinite Monkey Cage

The Infinite Monkey Cage is a BBC Radio 4 panel show hosted by Professor Brian Cox and Robin Ince. The panel usually consists of a couple of leading scientists in their field and a comedian or two to mix it up. They pick interesting and diverse topics and discuss the science behind the ideas. Although it sounds very factual (which it is) it is also hilarious and, refreshingly, British humour!

So, that’s it – all of my podcast recommendations. If you want to give a podcast a try, but aren’t sure how to get started, there is plenty of information available online on how to get set up. For example, I use the Stitcher app on my Android phone to listen to the podcasts above, but you can also find podcasts on iTunes and other apps.

Louise Formby, Software Engineer

May 24th, 2017

Posted In: Blog

Tags: , ,

Leave a Comment

Bot photo on the grid

When we were building the hardware architecture of the new warehouse in Andover, we realised we had developed a world first in radio design.

The new warehouse solution designed for our next generation of CFCs has thrown up lots of interesting technical challenges along the way. One of the first was how to communicate with over 10,000 robots concurrently.

More specifically, how do we get timely information on the locations of thousands of robots so we can efficiently control them? The answer lies in our unending striving for new and novel solutions to technical challenges.

Here is the story of how we taught robots to talk over 4G – and created a number of world firsts in the process.

Why Wi-Fi was a no-go

We started this project by studying the properties of Wi-Fi. The standard Wi-Fi network uses a distributed coordination function which is not a deterministic means of guaranteeing latency. The analogy often used is polite conversation at a dinner party: it is easy to have one single conversation at a table of two, much harder once you get to 12. Now imagine a state banquet; not everyone will have a chance to share their important information. There is provision in the standard for a point coordination function but nothing available on the open market supported this feature.

There is also the issue of scale, as most Wi-Fi access points (APs) can support a maximum of somewhere between 64 and 256 concurrent clients. Consider that we need to communicate with swarms of thousands of robots, talking to each ten times a second and with guaranteed latency. We needed to understand what this meant for the network design as well as how to accommodate it in an already busy spectrum plan.

Through our experience of existing systems, we knew we should enable a maximum of around 80 clients per AP and reduce the cell size to a very small area. This is similar to the approaches taken in high density deployments such as sports stadiums and auditoriums. However, unlike in those areas, the clients would be constantly moving and using the Wi-Fi network as their primary activity, rather than watching the sports game or concert. There is relatively little headroom above the bots, providing a further driver for many small cells.

Roaming would be required between the Wi-Fi APs – this is notoriously unpredictable. The best results we see in the real world are around 300ms, which would impact the command and control of traffic.

Another aspect to consider is that this approach would require complex planning and installation work for each warehouse, which would be expensive and difficult to maintain.

Ultimately, we found that Wi-Fi’s non deterministic performance would hinder our ability to develop an efficient real time control algorithm for the bots. Resolving this problem was therefore critical to the success of the overall project.

Working with Cambridge Consultants

We had a few ideas for solutions, but wanted to get a fresh perspective on the problem. Cambridge Consultants with their world class RF (radio frequency) and DSP (digital signal processing) skills were the obvious choice.

They also have the know-how and complete range of equipment onsite to manufacture small batches of the final product; in fact we learned a great deal from them about electronics manufacturing.

Base station image

The partnership has proven to be very successful because we produced a fully featured prototype within two years (it usually takes three to five). In addition (and maybe quite surprisingly to some), the initial system architecture we defined at the very start of the project remains unchanged.

The solution

The system we came up with takes advantage of modern wireless communication principles but has secret ingredients that tailors it to our environment. For example, it works in license-free spectrum so we can deploy it at a moment’s notice.

In fact, it’s the first deployment anywhere in the world to use the unlicensed 4G spectrum for warehouse automation. By making the system private, we were able to improve the performance and simplify overall complexity by minimising handshake and eliminating roaming aspects. The system guarantees a connection ten times a second to each of the 1,000 client hosts per base station – all working within a 150-metre radius.


Like all extremely low-latency, real-time systems, we also needed to include features to provide redundancy. The devices have physical attributes such as dual network and power links and also logical tools to enable failover to hot standby units; this has enabled us to upgrade the base station firmware without impacting its operation. These tools also enable us to automatically recover from network and power outages, which has been invaluable during site commissioning tests.

Through this project, we’ve also bought Precision Time Protocol into the business; one benefit is that it enables very tightly synchronised log capture across multiple machines, which was beneficial during the development of the system.

Where next?

Building and deploying this system from the drawing board in only three years was impressive in anyone’s book but we haven’t finished yet. By designing this system ourselves, we’re free to alter and add features as we see fit. Soon we’ll be analysing how alternate MAC layers could help improve warehouse efficiency and designing a custom roaming algorithm optimized for our specific application.

This is only one of several wireless projects that are defining new applications for wireless technology – with OSP, we need to expand our capabilities in the RF domain. We’re recruiting!

Right now we’re looking for two team leads: one for traditional Wi-Fi, RFID and Two Way Radio systems and another person to oversee our Internet of Things applications team, which includes this technology. In addition, we’re hiring two wireless engineers for testing and product development.

Because there are many alternative applications for our scalable solution – factories, construction sites, airfields etc – our next task is to create a demonstration system to show off the technology to interested businesses.

Strategically, there are a number of areas we can improve to make the system work even harder, for example: miniaturisation, increased processing power, and beyond. It’s not in our nature to just say job done and stop innovating, and I’m excited to see where we can take the system next.

Adam Green, Principal Wireless Engineer

November 24th, 2016

Posted In: Blog

Tags: , , , , , , , , ,

Contact Centre Agent

Being the world’s largest online-only grocery supermarket with over 500,000 active customers means we get the opportunity to interact with people all across the UK on a daily basis. Ocado prides itself on offering the best customer service in the industry which is one of the many reasons why our customers keep coming back.

Since Ocado doesn’t have physical stores, there are mainly two ways our customers and our employees interact directly. The first (and probably most common) is when our drivers deliver the groceries to the customers’ doorsteps; the second is when customers call or email us using our contact center based in the UK.

Today we’re going to tell you a bit more about how a customer contact center works and how Ocado is making it smarter.

The customer contact center

On the surface, Ocado operates the kind of contact center most people are already familiar with; we provide several ways for our customers to get in touch, including social media, a UK landline number, and a contact email.

Contact Centre

Customers can email, tweet or call Ocado

When it comes to emails, we get quite a variety of messages: from general feedback and redelivery requests to refund claims, payment or website issues – and even new product inquiries.

Getting in touch with a company can sometimes feel cumbersome. To make the whole process nice and easy for our customers, we don’t ask them to fill in any forms or self-categorise their emails. Instead, all messages gets delivered into a centralised mailbox no matter what they contain.

Contact Centre

Ocado customer service representatives filtering customer emails

However, a quick analysis of the classes of emails mentioned above reveals that not all of them should be treated with the same priority. In an old-fashioned contact centre, each email would be read and categorised by one of the customer service representatives and then passed on to the relevant department.

This model has a few major flaws: if the business starts scaling up quickly, customer service representatives may find it challenging to keep up, leading to longer delays which will anger customers. In addition, sifting through emails is a very repetitive task that often causes frustration for contact centre workers.

Clearly there must be a better way!

Machine learning to the rescue

Unbeknownst to many, Ocado has a technology division of 1000+ developers, engineers, researchers and scientists working hard to build an optimal technology infrastructure that revolutionises the way people shop online. This division is called Ocado Technology and includes a data science team that constantly finds new ways to apply machine learning and AI techniques to improve the processes related to running retail operations and beyond.

After analysing the latest research on the topic, the data science team discovered that machine learning algorithms can be adapted to help customer centres cope with vast amounts of emails.

The diagram below shows how we created our AI-based software application that helps our customer service team sort through the emails they receive daily.

Cloud computing model

The new AI-enhanced contact centre at Ocado

One of the fields related to machine learning is natural language processing (NLP), a discipline that combines computer science, artificial intelligence, and computational linguistics to create a link between computers and humans. Let’s use an email from a recent customer as an example to understand how we’ve deployed machine learning and NLP in our contact centres:

Example of feedback

The machine learning model identifies that the email contains general feedback and that the customer is happy

The software solution we’ve built parses through the body of the email and creates tags that help contact cenre workers determine the priority of each email. In our example, there is no immediate need for a representative to get in touch; the customer is satisfied with their order and has written a message thanking Ocado for their service.

We strive to deliver the best shopping experience for all our 500,000 + active customers. However, working in an omni channel contact centre can be challenging, with the team receiving thousands of contacts each day via telephone, email, webchat, social media and SMS. The new software developed by the Ocado Technology data science team will help the contact centre filter inbound customer contacts faster, enabling a quicker response to our customers which in turn will increase customer satisfaction levels. – Debbie Wilson, contact centre operations manager

In the case of a customer raising an issue about an order, the system detects that a representative needs to reply to the message urgently and therefore assigns the appropriate tag and colour code.

Data science at Ocado, using Google Cloud Platform and TensorFlow

This new ML-enhanced contact centre demonstrates how Ocado is using the latest technologies to make online shopping better for everyone.

Ocado was able to successfully deploy this new product in record time as a result of the close collaboration between three departments: data science, contact centre systems, and quality and development. Working together allowed us to share data and update models quickly, which we could then deploy in a real-world environment. Unlike a scientific demonstration where you’re usually working with a known set of quantities, the contact centre provided a much more dynamic scenario, with new data arriving constantly. – Pawel Domagala, product owner, last mile systems

Our in-house team of data scientists (check out our job openings here) trained the machine learning model on a large set of past emails. During the research phase, the team compared different architectures to find a suitable solution: convolutional neural networks (CNNs), long short term memory networks (LSTMs) and others. Once the software architecture was created, the model were then implemented using the TensorFlow library and the Python programming language.

TensorFlow and Python logos

Python is the de-facto most popular programming language in the data science community and provides the syntax simplicity and expressiveness capabilities we were looking for.

TensorFlow is a popular open-source machine learning toolkit that scales from research to production. TensorFlow is built around data flow graphs that can easily be constructed in Python, but the underlying computation is handled in C++ which makes it extremely fast.

We’re thrilled that TensorFlow helped Ocado adapt and extend state-of- the-art machine learning techniques to communicate more responsively with their customers. With a combination of open-source TensorFlow and Google Cloud services, Ocado and other leading companies can develop and deploy advanced machine learning solutions more rapidly than ever before. – Zak Stone, Product Manager for TensorFlow on the Google Brain Team

Understanding natural language is a particularly hard problem for computers. To overcome this obstacle, data scientists need access to large amount of computational resources and well-defined APIs for natural language processing. Thanks to the Google Cloud Platform, Ocado was able to use the power of cloud computing and train our models in parallel. Furthermore, Ocado has been an early adopter of Google Cloud Machine Learning (now available to all businesses in public beta) as well as the Cloud Natural Language API.

Google Cloud Platform logo

If you want to learn more about the technologies presented above, check out this presentation from Marcin Druzkowski, senior software engineer at Ocado Technology.

Make sure you also have a look at our Ocado Smart Platform for an overview of how Ocado is changing the game for online shopping and beyond.

October 13th, 2016

Posted In: Blog

Tags: , , , , , , , , ,

Anna Miedzionwska

Communication is important. Not just for a Product Owner, but the whole team. Especially if it’s not a collocated one.

Here is an excellent test for your team: a fun exercise that will uncover communication issues that nobody was aware of.


  • Time needed: 45 – 60 minutes (30 minutes for the exercise + time for discussion).
  • Number of people needed: 4-6.
  • Divide the team to 3 groups.
  • Groups A and C go to different rooms.
  • Group A gets a picture only they are allowed to see (a childlike drawing works well).
  • Group C gets a pen and a sheet of paper.
  • Group B, called ‘Runners’, stays with group A for now. Their task is to communicate between Group A and Group C.
  • Communication exercise-01


How it works:

  1. Group A and Runners discuss what’s on the picture. Runners can ask any questions they want, but they can’t see the picture and they can’t take notes. Group A can see the picture at all times.
  2. Runners move to Group C and convey the information.
  3. Group C draws a picture based on what they are told. They can ask additional questions about anything.
  4. Runners come back to Group A to ask for more details.
  5. Steps 2,3,4 are repeated as many times as needed until the time is up.
  6. The person facilitating the exercise should spend some time with each of the groups, silently observing.
  7. At the end, ask the teams how well they think they performed.
  8. Show both pictures to everyone and discuss. What went well? What could be improved? Any actions?

Some things to pay attention to:

  • Does the team start with the big picture or the small details?
  • Does the team optimise the way they work during the exercise?
  • Is the team aware of time and how fast they are progressing?
  • Is the team focussing on the most important elements?
  • What assumptions are made?

How my team performed:

Drawn by the team

What we observed:

  • The team jumped straight into details. Only 10 minutes into the exercise did they discuss the proportions of some key elements.
  • Runners split after the first exchange to save time. They didn’t, however, communicate between themselves, which meant they asked the same questions twice. Surprisingly, they sometimes got different answers to the same questions, which required extra communication.
  • Group A also split, so they could deal with Runners separately, which resulted in one member not knowing if the horse was going to be present on the team picture at all at the end of the exercise.
  • The team didn’t plan the execution for the time given. This caused rushing at the end and asking for extra time to complete.
  • Some key elements were described in detail, while others were very basic.
  • An assumption was made that characters on the picture sit at a table. It was quite quickly rectified though.
  • The overall result was good, but the team didn’t think so.
  • The team enjoyed working together and want to repeat the exercise in a few months to see if they can perform better.
  • The team is proud of their work.

It was definitely great fun and a good learning experience for the team. Try it yourself.

For more ideas about communications in non-collocated teams, see Ali’s posts, and check out my own blog for more product ownership ideas.

Thanks to my colleague, Lukasz Kucharski, who introduced me to this exercise!

Anna Miedzianowska, Product Owner

January 26th, 2016

Posted In: Blog

Tags: , , , , , ,

Ali Major

In my first blog post I illustrated the many factors to take into consideration when building a cohesive team. This time I want to explore the technology available.

Can you make do without technology in building an effective non-collocated team? For me the answer is yes. But would that team be as effective and could the quality of relationships be formed as quickly? I’m not convinced so.

What technologies I use and when

Working in the age of technology affords us the luxury of numerous online communication tools, both paid-for and free. So which to choose?

The ease of interaction and responsiveness is the ultimate measure. It shouldn’t feel like a hassle to keep in constant contact with the teams during the day, and this is crucial to being able to build that successful team.

In fact, online communication tools have become such an ingrained and easy way of working that I feel more put-out having to leave the comfort of my desk to walk to meetings in our other two adjacent buildings.

So here are the online tools I use and why.

Smile, you’re on camera

Don’t be shy, don’t be a voice from afar, and don’t try to hide in the back of the room.

I highly recommend conducting all meetings with an offshore team via video conference. People receive information better when they have more than one way in which the information is conveyed. Being able to see and hear is a vast improvement to staring out the window whilst on a phone call.

It may seem a little awkward to begin with, but you get the chance to pick up on visual queues: a smile, a frown, a blank stare. Remember to move once in a while – a nod will do – as on more than one occasion I’ve thought the connection was hanging when the team was sitting extremely still!

There are numerous free options such as Google Hangouts and Skype, and paid-for services such as GoToMeeting and Avaya Scopia®. I would recommend investing in any tool that permits screen share and the ability to have multiple parties on a call.


So far so obvious but, despite some arguments against relying on email, it remains wonderful for a record of conversation, lengthy discussions and non time-sensitive communications. (Of course, if an email chain is going back and forth, back and forth, consider whether a video call would be better to discuss the topic.)

What I will mention though is, when setting up folders, apply the ‘can I answer this in under one minute?’ rule to use your time most effectively.

Quick chat versus fluid conversation

Chat rooms or message services like the Google Hangout chat feature, which sync across devices, have worked well between stakeholders, my teams and myself.

My teams know that if you need a quick response to a question then Hangouts or Slack are best. Chat rooms address many of the shortfalls of online message services, especially where you can subscribe to groups. Until we started using Slack we tended to have many one-to-one chats using Hangouts. The downside was that the individual had to relay everything to the other team members.

Team chat rooms have provided a mechanism for fluid conversations, and I love that we can subscribe to specific topics of interest from within other areas of the business.

If you can find a chat service that allows you to search previous conversations I would highly recommend it, as it’s very useful in the age of information bombardment.

Keeping up to date

Our teams needs to know about changes, latest tools and processes, business objectives and so on. We rely on Google+ and recently Slack, in which users can subscribe to specific communities or channels.

Google Sites tends to be where we maintain product and/or team specific pages. Flipping this around, my teams and our Product Owner community can also leverage Google+ to create our own communities as a way to reach stakeholders within our business.

Managing requirements

I am a massive Atlassian fan (yes, I even have the t-shirt) and use Jira for backlog management and visualisation of our workflow.

There are many other great reasons to use Jira, for example tracking stories levied on other collocated or non-collocated teams, versioning, filtering, metrics and keeping stakeholders up to date at anytime during the day. We also use Jira as a tool to facilitate scrum ceremonies.

I would strongly suggest you display the team board on an additional monitor where the team sits. This way you still get the benefits (though likely on a smaller scale) of a physical board.

There are of course other online tools for managing backlogs such as Trello and Scrumwise. Still, personally, I like Jira more.

Last but crucial point

Technology is vital, but only as a means to achieve this goal: to become an effective team.

It does not remove the need for physical interaction and, as previously blogged, your intentions and resulting actions are more important.

And, dear reader, don’t forget the fallback position when that internet connection is slow or your company doesn’t support certain communication tools… pick up the telephone!

June 19th, 2015

Posted In: Blog

Tags: , , , ,

Ali Major

As a Product Owner working with a team across two different countries, there are lots of problems to tackle to make sure projects run smoothly. In this series of blog posts, I will explore how my team and I have overcome issues.

For a bit of background info, I’m based in Hatfield and my colleagues in Krakow. We use Agile. In this first blog, I’ll explain how we work cohesively even though we’re miles apart.

Is the structure You + Team, or are you part of the team?

Let’s not beat around the bush, you should be part of the team, so don’t treat your team as anything less. And to be frank, you cannot be part of the team when trust has not been established and you have not invested in building relationships! You’ll just be the PO who is nominally part of the team because Scrum says you are…

Building a solid relationship takes time and I have tried many different ways with varying success. What works for one team does not always work for the other so re-evaluating this continually is very important.

So what were some of the things that have worked?

Communicate regularly

Communication is a potential hazard, so I made a deliberate effort to ensure that we communicate regularly i.e. every 1-2 days either on a work or social level.

To begin with I focused heavily on communication with the team’s leads. As time passed I began to find ways to engage more and more with the team as a whole. It is easier to just keep going back to the one person, but this approach hinders your effectiveness in the long run.

Why? Well you end up relying on that one person and at some point they go on leave; also information is double-handled as they relay everything back to the team. Finally it reduces overall interaction with the team, which you need to build a solid working relationship.

Show positive attitude and willingness to build a cohesive team

Don’t underestimate how much your mood and choice of words are perceived via email and hangout. If you are strictly business every time you talk to your team and seemed rushed or disinterested, then it is only fair the team reciprocates.

Regular visits to Krakow

After numerous visits of varying length, we came to the conclusion that it is best to not nick off as soon as your agenda is done. Spread your agenda over an extra 1-2 days and mix your time there with meeting your agenda and with normal day-to-day business.

Just being there to be asked a simple question, to go for lunch with the team, to contribute to Agile ceremonies… ahh nothing beats the luxury of walking over to a teammate to ask a question once in a while! Also it challenges the perception that you are just flying in and out for your needs, and shows that you value time with the team.


I love games and I play them when I am in meetings in Krakow as well as from Hatfield on hangouts. Taboo, Pictionary, Charades, trivia, true & false, riddles…

Why? Games remove the perception ‘we only communicate about work content’. It can help a team to learn more about each other i.e. ‘I come from Australia so – true or false, dear reader – I have been bitten by a brown snake?’ Games makes meetings more fun and they can relieve tensions during heated and/or vigorous discussions.

Ali's team in Krakow

Agile ceremonies

I attend all the prescribed scrum ceremonies with the team bar the daily stand-up. The reason for not attending the daily stand-up is that, with daily interaction and the ability to track progress of tasks moving on the JIRA board, I have enough information on what is going on and any impediments. Also it’s easier for the teams to do their stand-up in Polish and this is meant to be a quick meeting.

Should I learn Polish?

English is the first language of our organisation. For my Polish to be at the same standard as the team’s English I would need many years of study. If you know me and have heard my attempt at Polish (or any language) you would probably come to the conclusion that I shouldn’t push it!…

I firmly believe making an attempt is appreciated, but in my situation investing time in developing my technical knowledge is time better spent.

Sometimes in our meetings it is easier for the team to discuss technical details in Polish. I would encourage this as being acceptable, but that this is not the norm and they need to re-summarise in English what the discussion was about.

April 17th, 2015

Posted In: Blog

Tags: , , , , , ,

Scroll Up