KELÉNYI LAYOUT
5/19/11
8:51 AM
Page 142
CONSUMER COMMUNICATIONS AND NETWORKING
Using Home Routers as Proxies for Energy-Efficient BitTorrent Downloads to Mobile Phones Imre Kelényi and Ákos Ludányi, Budapest University of Technology and Economics Jukka K. Nurminen, Aalto University
ABSTRACT Using proxy servers to cache and shape network traffic can significantly improve the energy efficiency of the participating mobile clients. In this article, we analyze the implications of hosting a BitTorrent proxy on a broadband router, which pushes the content to a mobile phone over wireless radio (WLAN or 3G). The amount of memory in a router is limited; therefore, our interest is in how to efficiently use memory to download BitTorrent content as fast as possible and at the same time transfer it to the mobile phone in an energy-efficient way. We investigate these aspects via a series of measurements. The results show that the proxy-based solution outperforms the torrent client running on the phone in terms of energy and download time. We also simulate the BitTorrent operation to understand how these memory-limited devices would influence the operation of the whole community.
INTRODUCTION
This work is connected to the scientific program of the “The Development of Quality-Oriented and Cooperative R+D+I Strategy and Functional Model at BUTE” project. This project is supported by Nokia Research Center and the New Hungary Development Plan (Project ID: TÁMOP-4.2.1/B09/1/KMR-2010-0002). Most of this research was done when Jukka K. Nurminen was working for Nokia Research Center.
142
Most peer-to-peer applications, including BitTorrent, were originally designed for PC devices. When they are used on handheld devices, such as mobile phones, new problems arise because of limited resources and more constrained communication. A particular worry, which is also the target of this article, is how the applications influence the energy consumption of the device. Frequent need to recharge is inconvenient for the user, and at times the electricity grid can be inaccessible. BitTorrent is currently the most popular peerto-peer content sharing solution, used all around the Internet. BitTorrent’s key idea is that clients downloading content, which is often referred to as torrents, also become uploaders, and share the downloaded pieces with other peers. This enables scalability and robustness, making BitTorrent a serious alternative to centralized content sharing solutions such as FTP or HTTP. Running BitTorrent on mobile phones is clearly interesting for users as evidenced by close to 100,000 downloads of the native BitTorrent
0163-6804/11/$25.00 © 2011 IEEE
client for Symbian-based mobile phones in 2009–2010 [1]. In our earlier work to improve the energy efficiency of content downloading [2] we investigated ways of using an intermediate server hosted in the Internet to download BitTorrent content. In that case, the transfer was split into two parts. Regular BitTorrent was used to download the content to the server, which was hosted on the Amazon EC2 cloud computing platform, and normal HTTP was used to transfer the complete file from the server to the phone. When receiving content from the proxy, the mobile phone experienced a higher bit rate, which, as earlier studies show [3], improves the energy efficiency of file transfer. The speed of BitTorrent download can vary considerably and is often well below the capacity of the wireless interface. In contrast, a proxy equipped with a high bandwidth upload link can send the data to the mobile phone in a fast energy-efficient burst. A practical problem of the proxy solution is where to host the proxies. One possibility is that the proxy is hosted on the Internet, but it is unclear how to cover the hosting costs of such a service. Another alternative is that users run the proxies on their PCs. This requires that PCs be accessible from mobile devices and powered on all the time, requiring careful security and energy consumption considerations. The third option, and the focus of this article, is that proxies are run on broadband routers in homes. The router platform is attractive for a number of reasons. First, since most homes are equipped with them, the installed base of routers is large. Second, many of the router platforms allow modifying the operating system. Third, routers are typically powered up all the time, and the energy consumption of the router is almost constant no matter how actively it is used. Running proxies on broadband routers would thus introduce no new costs. A number of new problems, however, arise because a broadband router has more limited resources than an average PC computer. Although some models allow hardware extensions with USB devices, and some high-end router models even have built-in support for tor-
IEEE Communications Magazine • June 2011
KELÉNYI LAYOUT
5/19/11
8:51 AM
Page 143
rent download, typically, the memory size is limited and no mass memory is available. Future routers are likely to be more capable but we think that it is important to be able to work on minimalistic hardware, especially if we consider the generality of the idea, other extension cases in the future, and utilization of today’s home routers. Prior research has investigated the use of helper nodes, peers that assist in content downloading without their own interest in the content [4, 5]. These ideas are related to our research but, in contrast to our work, they assume that the helper nodes are regular PCs with plentiful resources. In this research, we extend the earlier work in two directions. First, our explicit interest is in how the system can use a proxy peer to energyefficiently deliver a torrent to a battery powered, wirelessly connected mobile device. Second, in our solution we use regular router models, which do not have space to store the whole torrent. The ability to store and share pieces that a peer has already downloaded is one of the key concepts of BitTorrent. If the storage space is limited, downloaded pieces have to be discarded when the memory fills up, and thus cannot be shared any longer. Consequently, we investigate how this influences BitTorrent’s behavior and what policies and mechanisms are needed to manage the memory. Our target is that these solutions are compatible with the existing BitTorrent clients and that they do not harm the download performance of regular peers. We explore these mechanisms in detail. We describe our prototype implementation and the measurement results of the performance of the system. We discuss our simulations for analyzing the effect of our key mechanisms to the performance of both proxy and regular peers on a large scale. We briefly review related studies, and then conclude the article and discuss some ideas for further research.
THE ROUTER PROXY SOLUTION AND ITS DIFFICULTIES With the proxy solution, the torrent download is divided into two overlapping activities. To the swarm (the set of peers downloading and sharing a particular torrent) the proxy looks like a regular BitTorrent peer; it downloads and uploads content with the normal mechanisms. At the same time, it forwards downloaded content to the mobile phone. Because these two activities have to be done using the limited memory of the router, two interesting questions arise: how to serve other peers when the whole torrent does not fit into the memory and when to communicate with the mobile device. A key assumption of BitTorrent operation is that when a peer has completely downloaded a piece of the torrent, it announces the availability of the piece to its peers. The peers can then assume that the announced piece is available for download. This is, however, not the case if only part of the content fits in the router memory. To be able to download the whole torrent, the router has to delete some pieces after they have
IEEE Communications Magazine • June 2011
been sent to the mobile device, and then reuse the memory to download additional pieces. The assumption that a piece a peer has downloaded is available for others is thus no longer valid. The trivial solution to this problem is to ignore it. The BitTorrent client in the router would announce the pieces normally. Then it would later receive requests for pieces that have already been deleted from the memory and cannot be uploaded to other peers anymore. This would have a negative effect on the download speed because most clients stop serving or even disconnect peers that cannot serve a requested piece. Another alternative is to announce no pieces at all and miss the opportunity to serve other peers. However, this free-rider behavior is bad for the proxy itself because BitTorrent’s tit-fortat algorithm ranks it low, resulting in slow download speed. Furthermore, if the number of such proxies in the BitTorrent swarm is high, it can have a negative effect on the download speed of other peers. In order to both serve other peers and ensure that all of the piece announcements the proxy peer makes are valid, our solution divides the available memory into two buffers. The download buffer holds transient data on the way to the mobile; the pieces are downloaded from peers, sent to the mobile device, and discarded. Then the same memory space is reused to download other pieces. The content of the download buffer is thus constantly changing as the download of the torrent progresses. The upload buffer, on the other hand, stores pieces that are served to the swarm. After a piece in the upload buffer has been downloaded and sent to the mobile device, it remains in the memory and is made available for other peers with the normal BitTorrent piece transfer mechanisms. The concept is illustrated in Fig. 1. The system also has to decide when to communicate with the mobile device. We use a parameter, chunk size, to indicate how many pieces should be completely available before they are sent to the mobile. Intuitively, a bigger chunk size would reduce download speed and waste memory because a number of completely downloaded pieces are waiting for other pieces to complete. On the other hand, sending a bigger set of data to the mobile phone in one pass would improve energy-efficiency.
Future routers are likely to be more capable but we think that it is important to be able to work on minimalistic hardware, especially if we consider the generality of the idea, other extension cases in the future, and utilization of today’s home routers.
UPLOAD/DOWNLOAD BUFFER ALLOCATION Determining how to allocate the router’s memory to upload and the download buffers is not trivial. A large download buffer would allow downloading more pieces in parallel. However, if the peer cannot serve others, BitTorrent’s titfor-tat mechanism may prevent it from utilizing its full download capacity. As a rule of thumb, the peer should allocate as much of its storage capacity for downloading as needed to maintain the maximum number of parallel downloads, while using the remaining capacity for uploading to maintain a good tit-fortat ranking. Because the number of parallel downloads depends on the dynamic characteristics of the swarm, a static upload/download buffer ratio does not work in all cases. There-
143
KELÉNYI LAYOUT
5/19/11
8:51 AM
Page 144
BitTorrent
Standard BitTorrent traffic via TCP
Router memory
5
23
69
6
Upload buffer (3 pieces)
7
Download buffer (4 pieces) High speed bursty transfers
Figure 1. ProxyTorrent architecture. fore, we developed an adaptive buffer allocation algorithm to optimize the download speed of torrents with different swarm characteristics. The main idea of the algorithm is to try to start downloading from as many peers as possible, and then dynamically reallocate the unused part of the download buffer to the upload buffer. Thus, after joining the swarm and establishing the connections, we set the number of download pieces to be equal to the number of accessible peers with pieces we like to download. Then we periodically check the utilization of the download buffer. If it is underutilized, we reallocate some space from the download buffer to the upload buffer. In this way, the download buffer size can only shrink during the download process. This is in line with the fact that the number of peers we are interested in is also likely to decrease as the download progresses because when the peer is getting more pieces, the number of peers in possession of still missing pieces gets smaller.
ENERGY MEASUREMENTS AND RESULTS THE ROUTER-BASED BITTORRENT PROXY PROTOTYPE In our prototype system we used a Linux-based router to host the proxy. The Linux distribution we installed on the routers is DD-WRT [6], which is an open source embedded operating system especially tailored for routers. In addition to giving us the ability to fully control the router’s network configuration setup, DD-WRT allows us to build and execute custom applications on a wide range of commercially available routers. We used Asus WL-500gP, which has a 266 MHz CPU, 8 Mbytes flash storage, and 32 Mbytes RAM. For the BitTorrent downloads we used the
144
Enhanced CTorrent BitTorrent client [7], which we extended with the proxy functionality. CTorrent is a standard BitTorrent client designed to be quick and lightweight, which are the key requirements for a client running on a router with limited resources. The modified version allows us to specify the size of the upload and download buffers plus the chunk size. We used Nokia N82 phones to perform the measurements. The energy consumption was measured using Nokia Energy Profiler [8]. We developed a mobile client with Java ME, which can start torrent downloads and receive the downloaded pieces from the proxy. The mobile client establishes multiple TCP connections with the proxy and uses them in parallel when downloading new pieces from the proxy. We varied the number of parallel TCP connections and found that more connections resulted in higher speeds. However, increasing the number of connections beyond five did not improve the speed anymore. Therefore, we used five sessions for the measurements. We allocated roughly 13 Mbytes of the router’s RAM memory for ProxyTorrent to have capacity for 100 BitTorrent pieces (of 128 kbyte in size); the remaining memory was used by the operating system and services running on the router. We performed a set of tests with different memory buffer allocations, which showed that for good performance the majority of the memory should be allocated for the upload buffer. This was also verified by the simulations. Consequently, we used a fixed allocation of 75 percent upload buffer and 25 percent download buffer. We performed all of the measurements in a one-week period. We repeated each measurement at least three times, and calculated the average download time and energy consumption. The scenario was to download a popular, heavily seeded 105-Mbyte torrent with 128-kbyte piece size to the phone. During the tests, the swarm had around 500 peers and around 1:5 leecher/ seeder ratio. For comparison, we also downloaded the same torrent with SymTorrent, the phonebased standard BitTorrent client, and CloudTorrent, our Amazon EC2-based centralized proxy solution.
MEASUREMENT RESULTS The third-generaton (3G) and WLAN-based measurement results are shown in Fig. 2. The router-based proxy results are labeled “ProxyTorrent” plus the chunk size used for the transfer (e.g., CS 5 means five pieces are sent to the phone in one chunk). ProxyTorrent outperforms both SymTorrent and CloudTorrent. Compared with SymTorrent, using the router-based proxy consumes 40 percent less energy with 3G and 55 percent less with WLAN. As expected, doing transfers at higher speeds significantly improves the energy efficiency. In addition to better bandwidth utilization, shorter download times and lower protocol overhead contribute to energy savings. Figure 2 also shows that transferring data in larger chunks reduces the energy consumption of 3G downloads to some degree (the difference between using 1 and 10 chunks is 9 percent), but with WLAN the chunk size does not influence
IEEE Communications Magazine • June 2011
Page 145
SIMULATION RESULTS In the simulations, we focused on two cases: a swarm with a small number of proxy peers (5 percent) and a swarm with 50 percent of proxy peers. We used different static upload/download buffer allocation ratios as well as the adaptive strategy introduced earlier. It should also be noted that in contrast with the measurements, a larger, 500-Mbyte torrent was used, so that different buffer allocation strategies have a more
IEEE Communications Magazine • June 2011
600 400 500 200 0
10
5
1
S
S
Pr ox yT or re nt
-C
S
-C
-C
Pr ox yT or re nt
Pr ox yT or re nt
Sy
Cl ou
dT or re nt
m To rr en t
0
Figure 2. Measured energy consumption and download time of a 105-Mbyte torrent with different systems and access technologies. Different chunk sizes (CS) were used in the three ProxyTorrent measurements.
12000 Standard peer Proxy peer 10000
8000
6000
4000
2000
/1 99
/5 95
0 /1 90
5 /2 75
0 /5 50
5 /7 25
10 0/
Ad a
pt
iv
e
0
0
d
The goal of the simulations was to investigate how the system would work on a larger scale and to validate the proposed adaptive upload/download buffer allocation algorithm. We used a modified version of a discrete-event BitTorrent simulator originally developed by Microsoft Research [9]. The simulator models most BitTorrent mechanisms, including tit-for-tat, choking, and rarest first piece selection. Support for end-game mode is missing, which increases the download time of the last few pieces of the torrent; however, since all of the simulated peers suffer from this, their relative performance is not affected significantly. The network model is based on a fluid model of connections, which assumes that the flows traversing a link share the link bandwidth equally. The dynamics of TCP connections are not modeled. Thus, it is assumed that the bottleneck link is either the uplink of the sending node or the downlink of the receiving node. The simulated proxy peers were configured to use chunk size 1 and stopped uploading to other BitTorrent peers while uploading to the mobile.
800
1000
ite
SIMULATION SETUP
1000 WLAN energy 3G energy WLAN download time 3G download time
lim
BITTORRENT SWARM SIMULATIONS
1500
Download time (s)
energy consumption. The reason for the different behavior is the power saving mechanisms of these two radio technologies; WLAN can switch the radio interface to idle mode rapidly after a transfer has finished, while with 3G returning to idle state after a completed transfer typically takes around 10 s (the exact time depends on the operator). Thus, with WLAN the best strategy is to send each received piece immediately to the mobile because it reduces the total download time. In contrast, for 3G bigger chunk sizes are better. One strange phenomenon is the relatively poor performance of CloudTorrent. CloudTorrent first downloads the full torrent to the cloud server; then the client starts requesting the content file by file via HTTP requests. During the measurements, we experienced transfers to the mobile from the cloud being much slower than transfers from the proxy. A possible explanation is the different geographical locations (the router proxy was in the same city as the phone) and the different technologies used for transferring the data (CloudTorrent used parallel HTTP transfers with complete files; ProxyTorrent transferred smaller chunks of data via TCP connections). Nevertheless, CloudTorrent still outperformed the dedicated mobile client with both 3G and WLAN, and the proxy-based solution was more energy-efficient and faster than both alternatives.
Un
8:51 AM
Energy consumptino (J)
5/19/11
Download time (s)
KELÉNYI LAYOUT
Figure 3. The simulated effect of different memory allocation alternatives to torrent download times with 5 percent proxy peers.
visible effect. The results are shown in Figs. 3 and 4. The labels on the X axis refer to the different allocation strategies; for example, 25/75 means that 25 percent of the storage was used for the upload buffer and 75 percent for the download buffer. We also simulated “unlimited” buffer capacity, which equals using standard BitTorrent without any limitations. In both the 5 and 50 percent simulations, choosing the right allocation strategy has a significant effect on the download speed of the proxy peers (the download time difference between 0/100 and 75/25 is more than 25 percent). Furthermore, it is clearly visible that increasing the size of the upload buffer (and decreasing the size of the download buffer) is beneficial until some point (somewhere around 90/10), but after that, further decreasing the size of the download buffer starts to have a negative effect on the proxy peer since the client cannot
145
KELÉNYI LAYOUT
5/19/11
8:51 AM
Page 146
do enough parallel transfers. Using only 25 percent of the memory (3 Mbytes) for uploads, which is less than 1 percent of the full size of the torrent, already resulted in a major increase in download performance, compared with the freerider case. In the 5 percent case, the download speed of the standard peers is only slightly affected by the buffer allocation strategy, which is not surprising, since the low number of limited peers cannot have a real impact on the swarm’s performance. In the 50 percent case, however, using different buffer sizes has a more significant effect, since a larger portion of the peers and their capacities are affected. Although proxy peers start to suffer if they have an undersized download buffer, standard peers always benefit from a larger number of upload slots.
12000 Standard peer Proxy peer
Download time (s)
10000
8000
6000
4000
2000
/1 99
95 /5
0 /1 90
5 /2 75
0 /5 50
5 /7 25
0 0/
10
tiv ap Ad
Un
lim
ite
d
e
0
Figure 4. The simulated effect of different memory allocation alternatives on torrent download times: the case of 50 percent proxy peers.
The adaptive strategy performed well, matching the best download times achieved with static allocation strategies. Figure 5 shows how the adaptive algorithm controls the download buffer size as time passes (the charts show average values over all proxy peers). The buffer allocation gradually settles to around 90/10 upload/download ratio. A slight difference between the 5 percent and 50 percent cases is also visible: in the swarm with the larger number of standard peers, the proxy peers are also served a bit more frequently, thus their download buffer size remains at a higher level for a longer period.
RELATED WORK So far the energy efficiency of BitTorrent, or peer-to-peer file downloading in general, has mainly been investigated from two different angles: how to reduce the standby energy consumption of PC peers [10, 11] and how to perform active content download energy-efficiently with a mobile peer [2, 12, 13]. In another track, the use of helper nodes to speed up torrent downloads has shown promising results [5, 4]. The use of memory-limited devices to help torrent downloads seems to be absent in prior work. In general, the use of proxies to improve energy efficiency of mobile applications has been widely studied. For instance, Flinn and Satyanarayanan [14] discuss how to create energyadaptive applications based on proxies and Shenov and Radkov [15] use a proxy to improve the energy-efficiency of streaming content to mobile devices. The nano data center concept [16] provides services with hardware distributed at homes. This operator-controlled community solution is based on enhanced versions of normal routers. While savings in the overall energy consumption is a key target, the focus is on the infrastructure side, not on the energy-efficient operation of the terminal devices.
CONCLUSIONS 50 50% limited 5% limited
Download buffer size
40
30
20
10
80 00
70 00
60 00
50 00
40 00
30 00
20 00
10 00
0
0
Time since join (s)
Figure 5. Simulated effect of the adaptive buffer allocation algorithm. The average share of download buffer of proxy peers as a function of the time spent since joining the network.
146
In this article, we have analyzed how proxies running on resource-limited broadband routers can help mobile phones download content with BitTorrent. The particular challenge of hosting the proxy on a router is that the memory capacity is very limited. Therefore, new mechanisms for efficient memory use are needed. The most important conclusions of this study are: •The proxy peer solution helps the mobile device save battery power when downloading BitTorrent content. The amount of energy saved depends on several factors, including the popularity of the torrent, and the bandwidth of the proxy and the mobile phone. In comparison to downloading the torrent directly to the phone with a native client, we can save around 40–50 percent energy according to our measurement results. •The performance of the router proxy depends strongly on efficient use of the limited memory space of the router. The amount of memory allocated to serve uploads to other peers strongly influences the torrent download speed. We introduced an adaptive buffer allocation algorithm
IEEE Communications Magazine • June 2011
KELÉNYI LAYOUT
5/19/11
8:51 AM
Page 147
that can be used to determine the optimal allocation ratio. The download speed is also influenced by the amount of data that is sent to the mobile in one pass, especially in 3G networks. •The energy consumption of the mobile phone depends on both the torrent download speed and the chunk size. Higher download speeds and bigger chunk sizes result in energy savings. This is especially true with 3G cellular networks. With WLAN connections, using optimal parameters is less important.
REFERENCES [1] SymTorrent, http://symtorrent.aut.bme.hu. [2] I. Kelényi and J. K. Nurminen, “CloudTorrent – EnergyEfficient BitTorrent Content Sharing for Mobile Devices via Cloud Services,” Proc. 7th IEEE CCNC, Las Vegas, NV, 2010. [3] J. K. Nurminen, “Parallel Connections and their Effect on the Battery Consumption of a Mobile Phone,” Proc. 7th IEEE CCNC, Las Vegas, NV, 2010. [4] P. Garbacki et al., “2Fast: Collaborative Downloads in P2P Networks,” Proc. 6th IEEE P2P, Los Alamitos, CA, 2006. [5] J., Wong, “Enhancing collaborative Content Delivery with Helpers,” Master’s yhesis, Univ. of British Columbia, 2004. [6] DD-WRT, http://www.dd-wrt.com/. [7] Enhanced CTorrent, http://www.rahul.net/dholmes/ctorrent/. [8] G. Bosch Creus and M. Kuulusa, “Optimizing Mobile Software with Built-in Power Profiling,” F. Fitzek and F. Reichert, Eds., Mobile Phone Programming and Uts Application to Wireless Networking, Springer, 2007. [9] A. Bharambe, C. Herley, and V. N. Padmanabhan, “Analyzing and Improving a BitTorrent Network’s Performance Mechanisms,” Proc. 25th IEEE INFOCOM, 2006. [10] J. Blackburn and K. Christensen, “A Simulation Study of a New Green BitTorrent,” Proc. 1st Int’l. Wksp. Green Commun., 2009. [11] M. Jimeno and K. Christensen, “A Prototype Power Management Proxy for Gnutella Peer-to-Peer File Sharing,” Proc. 32nd IEEE Conf. Local Computer Networks, 2007.
IEEE Communications Magazine • June 2011
[12] J. K. Nurminen and J. Nöyränen, “Energy-Consumption in Mobile Peer-to-Peer — Quantitative Results from File Sharing,” Proc. 5th IEEE CCNC, Las Vegas, NV, 2008. [13] I. Kelényi and J. K. Nurminen. Energy-Efficient Peer-to-Peer Content Sharing Using Application-Level Traffic Sharing,” Proc. 4th ACM PM2HW2N, Tenerife, Spain, 2009. [14] J. Flinn and M. Satyanarayanan, “Energy-Aware Adaptation for Mobile Applications,” Proc. 17th ACM Symp. Operating Systems Principles, Charleston, SC, 1999. [15] P. J. Shenoy and P. Radkov, “Proxy-Assisted Power-Friendly Streaming to Mobile Devices,” Proc. SPIE, 2003. [16] V. Valancius et al., Greening the Internet with Nano Data Centers,” Proc. CoNEXT ’09, 2009.
BIOGRAPHIES I MRE K ELÉNYI (
[email protected]) is currently an assistant professor in the Department of Automation and Applied Informatics, Budapest University of Technology and Economics (BME), Hungary. He received his Master’s degree in technical informatics from BME in 2007. He completed BME’s Ph.D. course in 2010. Currently he is preparing his Ph.D. dissertation on energy-efficient mobile peer-to-peer systems, which is also his primary research interest. He is the creator of the world’s first ever mobile BitTorrent and Gnutella clients, SymTorrent and Symella. He has worked as a contract software engineer for various companies including Nokia, Nokia Siemens Networks, and T-Mobile. ÁKOS LUDANYI (
[email protected]) received an outstanding B.Sc. degree in computer engineering from BME in 2010. Now he is attending an M.Sc. course on applied informatics at BME. His research interest is mobile P2P applications. He worked at NavNGo, developing car navigation systems. Currently he is working as a software engineer for BME’s Applied Mobile Research Group and Nokia.
The energy consumption of the mobile phone depends on both the torrent download speed and the chunk size. Higher download speeds and bigger chunk sizes result in energy savings. This is especially true with 3G cellular networks. With WLAN connections, using optimal parameters is less important.
JUKKA K. NURMINEN (
[email protected]) is a professor of data communication software at Aalto University in Finland. Before returning to academia he spent almost 25 years at Nokia Research Center working on a variety of topics related to mobile applications and services. His current interests are mobile computing, peer-to-peer applications, and the energy efficiency of distributed solutions. He received his M.Sc. degree in 1986 and Ph.D. degree in 2003 from Helsinki University of Technology.
147