This is the documentation for the package at prettydates
A beginner level knowledge of R is assumed.
Totally new to R? Some resources are cited at the bottom of the page. Also if you have any questions about this or any issues with getting or using the package, feel free to reach me at my twitter
Package can be installed using install_github('ebinabo/prettydates')
Load the Libaries
library(prettydates)
library(purrr) # map functions
library(knitr) # to use the kable function for pretty tables
The library takes in dates in Date
, POSIXct
, POSIXt
, etc formats and prints them to the screen in a more easily readable format.
These are particularly useful for creating documents where you might want the date out in full, so they could be easily read out or skimmed through.
Let’s list out all the functions currently listed in the package…
Some of the prefixes and suffixes used and their descriptions for a better overview;
long_
dates with weekday, month, year in full
short_
dates with weekday, month, year in short
_day_month_
displaying day and month, w/o year
_dt12
datetime in a 12hr format
_dt24
datetime in a 24hr format
_w
dates including day of week
_us
dates in the american format
Usage
Functions can be used on different classes of objects including;
- a single date or datetime object
- a vector of dates or datetime objects
- a column of dates or datetime objects
- a column of dates or datetime objects within a list using the map() family of functions
There is also the as_ordinal()
function which is used alongside the above functions. It parses the date to an ordinal format eg. “Monday, December 31st, 2018” instead of “Monday, December 31st, 2018” if you just ran long_dt12_us_w(()
Here are some examples
Single Date or Datetime object
long_date(Sys.Date())
long_dt12_us(Sys.time()) %>% as_ordinal()
Vector of Dates or Datetime objects
seq_date <- seq.Date(Sys.Date()-70, Sys.Date(), 7)
short_date(seq_date)
times <- c(Sys.time(), Sys.time()-1e07, Sys.time()-2e07, Sys.time()-3e07, Sys.time()-4e07)
times <- short_dt24_us(times)
times
map_chr(times, as_ordinal) # explained later on in tutorial
Column of Dates or Datetime objects
Lets create a sample dataframe showing different orders made on different days
order_id <- paste("Order", 1:10, sep = " ")
order_dates <- seq.Date(Sys.Date()-70, Sys.Date(), 1)
order_dates <- sample(order_dates, 10)
order_history <- as.data.frame(order_dates)
row.names(order_history) <- order_id
names(order_history) <- "Date"
kable(order_history)
Now let’s use one of the funtions from prettydates to change the display rendered. The time of order is set to a default 12:00:00 AM because we’re using a sample of dates
order_history$Date <- short_dt12_us_w(order_history$Date)
kable(order_history)
Column of Dates or Datetime objects in a list
For this we’ll be using the map()
function from the purrr package. map()
takes in two arguments, map(.x, .f)
.x
is a list or vector .f
is the function to be applied to the individual elements
order_history_1 <- order_history
order_history_1$Date <- map(order_history_1$Date, long_day_month)
order_history_1$Date <- map(order_history_1$Date, ~as_ordinal(.x))
kable(order_history_1)
Notice that while using map()
, two different syntaxes are used. This is because, as_ordinal()
is not a mapper function like all the other functions so we need a ~
(pronounced tilde) to tell r that for all the elements in order_history_1$Date
also represented as .x
, call as_ordinal
.
However, it can also be used as without them :). This is something you could try if you have a map()
function that isn’t working.
map()
always returns a list, to return a vector use map_chr()
instead.
All the functions in action
Here are what all the functions should return if used on the current date
todays_date <- Sys.Date()
current_time <- Sys.time()
long_date(todays_date) #1
long_date_us(todays_date) #2
long_date_us_w(todays_date) #3
long_date_w(todays_date) #4
long_day_month(todays_date) #5
long_day_month_dt12(current_time) #6
long_day_month_dt12_us(current_time) #7
long_day_month_dt12_us_w(current_time) #8
long_day_month_dt12_w(current_time) #9
long_day_month_dt24(current_time) #10
long_day_month_dt24_us(current_time) #11
long_day_month_dt24_us_w(current_time) #12
long_day_month_us(todays_date) #13
long_day_month_us_w(todays_date) #14
long_day_month_w(current_time) #15
long_dt12(current_time) #16
long_dt12_us(current_time) #17
long_dt12_us_w(current_time) #18
long_dt12_w(current_time) #19
long_dt24(current_time) #20
long_dt24_us(current_time) #21
long_dt24_us_w(current_time) #22
long_dt24_w(current_time) #23
short_date(todays_date) #24
short_date_us(todays_date) #25
short_date_us_w(todays_date) #26
short_date_w(todays_date) #27
short_day_month(todays_date) #28
short_day_month_dt12(current_time) #29
short_day_month_dt12_us(current_time) #30
short_day_month_dt12_us_w(current_time) #31
short_day_month_dt12_w(current_time) #32
short_day_month_dt24(current_time) #33
short_day_month_dt24_us(current_time) #34
short_day_month_dt24_us_w(current_time) #35
short_day_month_us(todays_date) #36
short_day_month_us_w(todays_date) #37
short_day_month_w(current_time) #38
short_dt12(current_time) #39
short_dt12_us(current_time) #40
short_dt12_us_w(current_time) #41
short_dt12_w(current_time) #42
short_dt24(current_time) #43
short_dt24_us(current_time) #44
short_dt24_us_w(current_time) #45
short_dt24_w(current_time) #46
long_date(todays_date) %>% as_ordinal() #47
long_date_us(todays_date) %>% as_ordinal() #48
long_date_us_w(todays_date) %>% as_ordinal() #49
long_date_w(todays_date) %>% as_ordinal() #50
long_day_month(todays_date) %>% as_ordinal() #51
long_day_month_dt12(current_time) %>% as_ordinal() #52
long_day_month_dt12_us(current_time) %>% as_ordinal() #53
long_day_month_dt12_us_w(current_time) %>% as_ordinal() #54
long_day_month_dt12_w(current_time) %>% as_ordinal() #55
long_day_month_dt24(current_time) %>% as_ordinal() #56
long_day_month_dt24_us(current_time) %>% as_ordinal() #57
long_day_month_dt24_us_w(current_time) %>% as_ordinal() #58
long_day_month_us(todays_date) %>% as_ordinal() #59
long_day_month_us_w(todays_date) %>% as_ordinal() #60
long_day_month_w(current_time) %>% as_ordinal() #61
long_dt12(current_time) %>% as_ordinal() #62
long_dt12_us(current_time) %>% as_ordinal() #63
long_dt12_us_w(current_time) %>% as_ordinal() #64
long_dt12_w(current_time) %>% as_ordinal() #65
long_dt24(current_time) %>% as_ordinal() #66
long_dt24_us(current_time) %>% as_ordinal() #67
long_dt24_us_w(current_time) %>% as_ordinal() #68
long_dt24_w(current_time) %>% as_ordinal() #69
short_date(todays_date) %>% as_ordinal() #70
short_date_us(todays_date) %>% as_ordinal() #71
short_date_us_w(todays_date) %>% as_ordinal() #72
short_date_w(todays_date) %>% as_ordinal() #73
short_day_month(todays_date) %>% as_ordinal() #74
short_day_month_dt12(current_time) %>% as_ordinal() #75
short_day_month_dt12_us(current_time) %>% as_ordinal() #76
short_day_month_dt12_us_w(current_time) %>% as_ordinal() #77
short_day_month_dt12_w(current_time) %>% as_ordinal() #78
short_day_month_dt24(current_time) %>% as_ordinal() #79
short_day_month_dt24_us(current_time) %>% as_ordinal() #80
short_day_month_dt24_us_w(current_time) %>% as_ordinal() #81
short_day_month_us(todays_date) %>% as_ordinal() #82
short_day_month_us_w(todays_date) %>% as_ordinal() #83
short_day_month_w(current_time) %>% as_ordinal() #84
short_dt12(current_time) %>% as_ordinal() #85
short_dt12_us(current_time) %>% as_ordinal() #86
short_dt12_us_w(current_time) %>% as_ordinal() #87
short_dt12_w(current_time) %>% as_ordinal() #88
short_dt24(current_time) %>% as_ordinal() #89
short_dt24_us(current_time) %>% as_ordinal() #90
short_dt24_us_w(current_time) %>% as_ordinal() #91
short_dt24_w(current_time) %>% as_ordinal() #92
LS0tDQp0aXRsZTogInByZXR0eWRhdGVzIg0KYXV0aG9yOiAiZWJpbmFibyINCmRhdGU6ICJEZWNlbWJlciAzMSwgMjAxOCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0KICBodG1sX25vdGVib29rOiBkZWZhdWx0DQotLS0NCg0KVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHBhY2thZ2UgYXQgW3ByZXR0eWRhdGVzXShodHRwczovL2dpdGh1Yi5jb20vZWJpbmFiby9wcmV0dHlkYXRlcykNCg0KQSBiZWdpbm5lciBsZXZlbCBrbm93bGVkZ2Ugb2YgUiBpcyBhc3N1bWVkLg0KDQpUb3RhbGx5IG5ldyB0byBSPyBTb21lIHJlc291cmNlcyBhcmUgY2l0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZS4gQWxzbyBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMgb3IgYW55IGlzc3VlcyB3aXRoIGdldHRpbmcgb3IgdXNpbmcgdGhlIHBhY2thZ2UsIGZlZWwgZnJlZSB0byByZWFjaCBtZSBhdCBbbXkgdHdpdHRlcl0oaHR0cHM6Ly93d3cudHdpdHRlci5jb20va2luZ25hbWVkam9obm55KQ0KDQpQYWNrYWdlIGNhbiBiZSBpbnN0YWxsZWQgdXNpbmcgYGluc3RhbGxfZ2l0aHViKCdlYmluYWJvL3ByZXR0eWRhdGVzJylgDQoNCg0KIyMgTG9hZCB0aGUgTGliYXJpZXMNCg0KDQpgYGB7ciBsaWJyYXJpZXMsIG1lc3NhZ2U9RkFMU0V9DQogIGxpYnJhcnkocHJldHR5ZGF0ZXMpDQogIGxpYnJhcnkocHVycnIpICMgbWFwIGZ1bmN0aW9ucw0KICBsaWJyYXJ5KGtuaXRyKSAjIHRvIHVzZSB0aGUga2FibGUgZnVuY3Rpb24gZm9yIHByZXR0eSB0YWJsZXMNCmBgYA0KDQpUaGUgbGlicmFyeSB0YWtlcyBpbiBkYXRlcyBpbiBgRGF0ZWAsIGBQT1NJWGN0YCwgYFBPU0lYdGAsIGV0YyBmb3JtYXRzIGFuZCBwcmludHMgdGhlbSB0byB0aGUgc2NyZWVuIGluIGEgbW9yZSBlYXNpbHkgcmVhZGFibGUgZm9ybWF0Lg0KDQpUaGVzZSBhcmUgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgY3JlYXRpbmcgZG9jdW1lbnRzIHdoZXJlIHlvdSBtaWdodCB3YW50IHRoZSBkYXRlIG91dCBpbiBmdWxsLCBzbyB0aGV5IGNvdWxkIGJlIGVhc2lseSByZWFkIG91dCBvciBza2ltbWVkIHRocm91Z2guDQoNCkxldCdzIGxpc3Qgb3V0IGFsbCB0aGUgZnVuY3Rpb25zIGN1cnJlbnRseSBsaXN0ZWQgaW4gdGhlIHBhY2thZ2UuLi4NCg0KU29tZSBvZiB0aGUgcHJlZml4ZXMgYW5kIHN1ZmZpeGVzIHVzZWQgYW5kIHRoZWlyIGRlc2NyaXB0aW9ucyBmb3IgYSBiZXR0ZXIgb3ZlcnZpZXc7DQoNCi0gYGxvbmdfYCBkYXRlcyB3aXRoIHdlZWtkYXksIG1vbnRoLCB5ZWFyIGluIGZ1bGwNCi0gYHNob3J0X2AgZGF0ZXMgd2l0aCB3ZWVrZGF5LCBtb250aCwgeWVhciBpbiBzaG9ydA0KLSBgX2RheV9tb250aF9gIGRpc3BsYXlpbmcgZGF5IGFuZCBtb250aCwgdy9vIHllYXINCi0gYF9kdDEyYCBkYXRldGltZSBpbiBhIDEyaHIgZm9ybWF0DQotIGBfZHQyNGAgZGF0ZXRpbWUgaW4gYSAyNGhyIGZvcm1hdA0KLSBgX3dgIGRhdGVzIGluY2x1ZGluZyBkYXkgb2Ygd2Vlaw0KLSBgX3VzYCBkYXRlcyBpbiB0aGUgYW1lcmljYW4gZm9ybWF0DQoNCmBgYHtyIGxzIGZ1bmN0aW9ucywgZWNobz1GQUxTRX0NCnVuY2xhc3MobHNmLnN0cihlbnZpciA9IGFzTmFtZXNwYWNlKCJwcmV0dHlkYXRlcyIpLCBhbGwgPSBUKSkNCmBgYA0KDQoNCiMjIFVzYWdlDQoNCg0KRnVuY3Rpb25zIGNhbiBiZSB1c2VkIG9uIGRpZmZlcmVudCBjbGFzc2VzIG9mIG9iamVjdHMgaW5jbHVkaW5nOw0KDQotIGEgc2luZ2xlIGRhdGUgb3IgZGF0ZXRpbWUgb2JqZWN0DQotIGEgdmVjdG9yIG9mIGRhdGVzIG9yIGRhdGV0aW1lIG9iamVjdHMNCi0gYSBjb2x1bW4gb2YgZGF0ZXMgb3IgZGF0ZXRpbWUgb2JqZWN0cw0KLSBhIGNvbHVtbiBvZiBkYXRlcyBvciBkYXRldGltZSBvYmplY3RzIHdpdGhpbiBhIGxpc3QgdXNpbmcgdGhlIG1hcCgpIGZhbWlseSBvZiBmdW5jdGlvbnMNCg0KVGhlcmUgaXMgYWxzbyB0aGUgYGFzX29yZGluYWwoKWAgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCBhbG9uZ3NpZGUgdGhlIGFib3ZlIGZ1bmN0aW9ucy4gSXQgcGFyc2VzIHRoZSBkYXRlIHRvIGFuIG9yZGluYWwgZm9ybWF0IGVnLiAgKiJNb25kYXksIERlY2VtYmVyIDMxc3QsIDIwMTgiKiAgaW5zdGVhZCBvZiAgKiJNb25kYXksIERlY2VtYmVyIDMxc3QsIDIwMTgiKiAgaWYgeW91IGp1c3QgcmFuIGBsb25nX2R0MTJfdXNfdygoKWANCg0KSGVyZSBhcmUgc29tZSBleGFtcGxlcw0KDQoNCiMjIyBTaW5nbGUgRGF0ZSBvciBEYXRldGltZSBvYmplY3QNCg0KDQpgYGB7ciBzaW5nbGV9DQpsb25nX2RhdGUoU3lzLkRhdGUoKSkNCmxvbmdfZHQxMl91cyhTeXMudGltZSgpKSAlPiUgYXNfb3JkaW5hbCgpDQpgYGANCg0KDQojIyMgVmVjdG9yIG9mIERhdGVzIG9yIERhdGV0aW1lIG9iamVjdHMNCg0KDQpgYGB7ciB2ZWN0b3J9DQpzZXFfZGF0ZSA8LSBzZXEuRGF0ZShTeXMuRGF0ZSgpLTcwLCBTeXMuRGF0ZSgpLCA3KQ0Kc2hvcnRfZGF0ZShzZXFfZGF0ZSkNCg0KdGltZXMgPC0gYyhTeXMudGltZSgpLCBTeXMudGltZSgpLTFlMDcsIFN5cy50aW1lKCktMmUwNywgU3lzLnRpbWUoKS0zZTA3LCBTeXMudGltZSgpLTRlMDcpDQp0aW1lcyA8LSBzaG9ydF9kdDI0X3VzKHRpbWVzKQ0KDQp0aW1lcw0KDQptYXBfY2hyKHRpbWVzLCBhc19vcmRpbmFsKSAjIGV4cGxhaW5lZCBsYXRlciBvbiBpbiB0dXRvcmlhbA0KYGBgDQoNCg0KIyMjIENvbHVtbiBvZiBEYXRlcyBvciBEYXRldGltZSBvYmplY3RzDQoNCg0KTGV0cyBjcmVhdGUgYSBzYW1wbGUgZGF0YWZyYW1lIHNob3dpbmcgZGlmZmVyZW50IG9yZGVycyBtYWRlIG9uIGRpZmZlcmVudCBkYXlzDQoNCmBgYHtyIGRmIGluaXR9DQpvcmRlcl9pZCA8LSBwYXN0ZSgiT3JkZXIiLCAxOjEwLCBzZXAgPSAiICIpDQpvcmRlcl9kYXRlcyA8LSBzZXEuRGF0ZShTeXMuRGF0ZSgpLTcwLCBTeXMuRGF0ZSgpLCAxKQ0Kb3JkZXJfZGF0ZXMgPC0gc2FtcGxlKG9yZGVyX2RhdGVzLCAxMCkNCm9yZGVyX2hpc3RvcnkgPC0gYXMuZGF0YS5mcmFtZShvcmRlcl9kYXRlcykNCnJvdy5uYW1lcyhvcmRlcl9oaXN0b3J5KSA8LSBvcmRlcl9pZA0KbmFtZXMob3JkZXJfaGlzdG9yeSkgPC0gIkRhdGUiDQprYWJsZShvcmRlcl9oaXN0b3J5KQ0KYGBgDQoNCk5vdyBsZXQncyB1c2Ugb25lIG9mIHRoZSBmdW50aW9ucyBmcm9tIHByZXR0eWRhdGVzIHRvIGNoYW5nZSB0aGUgZGlzcGxheSByZW5kZXJlZC4gVGhlIHRpbWUgb2Ygb3JkZXIgaXMgc2V0IHRvIGEgZGVmYXVsdCAxMjowMDowMCBBTSBiZWNhdXNlIHdlJ3JlIHVzaW5nIGEgc2FtcGxlIG9mIGRhdGVzDQoNCmBgYHtyIGRmIHcgcHJldHR5ZGF0ZXN9DQpvcmRlcl9oaXN0b3J5JERhdGUgPC0gc2hvcnRfZHQxMl91c193KG9yZGVyX2hpc3RvcnkkRGF0ZSkNCmthYmxlKG9yZGVyX2hpc3RvcnkpDQpgYGANCg0KDQojIyMgQ29sdW1uIG9mIERhdGVzIG9yIERhdGV0aW1lIG9iamVjdHMgaW4gYSBsaXN0DQoNCg0KRm9yIHRoaXMgd2UnbGwgYmUgdXNpbmcgdGhlIGBtYXAoKWAgZnVuY3Rpb24gZnJvbSB0aGUgcHVycnIgcGFja2FnZS4NCmBtYXAoKWAgdGFrZXMgaW4gdHdvIGFyZ3VtZW50cywgYG1hcCgueCwgLmYpYCANCg0KYC54YCBpcyBhIGxpc3Qgb3IgdmVjdG9yDQpgLmZgIGlzIHRoZSBmdW5jdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBpbmRpdmlkdWFsIGVsZW1lbnRzIA0KDQpgYGB7ciBlcnJvcj1GfQ0Kb3JkZXJfaGlzdG9yeV8xIDwtIG9yZGVyX2hpc3RvcnkNCm9yZGVyX2hpc3RvcnlfMSREYXRlIDwtIG1hcChvcmRlcl9oaXN0b3J5XzEkRGF0ZSwgbG9uZ19kYXlfbW9udGgpDQpvcmRlcl9oaXN0b3J5XzEkRGF0ZSA8LSBtYXAob3JkZXJfaGlzdG9yeV8xJERhdGUsIH5hc19vcmRpbmFsKC54KSkNCmthYmxlKG9yZGVyX2hpc3RvcnlfMSkNCg0KYGBgDQoNCg0KTm90aWNlIHRoYXQgd2hpbGUgdXNpbmcgYG1hcCgpYCwgdHdvIGRpZmZlcmVudCBzeW50YXhlcyBhcmUgdXNlZC4gVGhpcyBpcyBiZWNhdXNlLCBgYXNfb3JkaW5hbCgpYCBpcyBub3QgYSBtYXBwZXIgZnVuY3Rpb24gbGlrZSBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyBzbyB3ZSBuZWVkIGEgYH5gICoocHJvbm91bmNlZCB0aWxkZSkqIHRvIHRlbGwgciB0aGF0IGZvciBhbGwgdGhlIGVsZW1lbnRzIGluIGBvcmRlcl9oaXN0b3J5XzEkRGF0ZWAgYWxzbyByZXByZXNlbnRlZCBhcyBgLnhgLCBjYWxsIGBhc19vcmRpbmFsYC4gDQoNCkhvd2V2ZXIsIGl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgd2l0aG91dCB0aGVtIDopLiBUaGlzIGlzIHNvbWV0aGluZyB5b3UgY291bGQgdHJ5IGlmIHlvdSBoYXZlIGEgYG1hcCgpYCBmdW5jdGlvbiB0aGF0IGlzbid0IHdvcmtpbmcuDQoNCmBtYXAoKWAgYWx3YXlzIHJldHVybnMgYSBsaXN0LCB0byByZXR1cm4gYSB2ZWN0b3IgdXNlIGBtYXBfY2hyKClgIGluc3RlYWQuDQoNCg0KIyMjIFJlc291cmNlcw0KDQoNClNvbWUgdXNlZnVsIHJlc291cmNlcyBhcmUgY2l0ZWQgYmVsb3cgdG8gaGVscCB5b3UgZ3Jhc3Agc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgYmV0dGVyDQoNCjxodHRwczovL3d3dy5kYXRhY2FtcC5jb20vY291cnNlcy9mcmVlLWludHJvZHVjdGlvbi10by1yPiBmb3IgYW4gaW50cm9kdWN0aW9uIHRvIFINCg0KPGh0dHBzOi8vamVubnliYy5naXRodWIuaW8vcHVycnItdHV0b3JpYWw+IGZvciBhIHB1cnJyIHR1dG9yaWFsDQoNCjxodHRwczovL3d3dy5kYXRhY2FtcC5jb20vY291cnNlcy9pbnRlcm1lZGlhdGUtZnVuY3Rpb25hbC1wcm9ncmFtbWluZy13aXRoLXB1cnJyPiBmb3IgY3JlYXRpbmcgbWFwcGVycw0KDQoNCiMjIyBBbGwgdGhlIGZ1bmN0aW9ucyBpbiBhY3Rpb24NCg0KDQpIZXJlIGFyZSB3aGF0IGFsbCB0aGUgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gaWYgdXNlZCBvbiB0aGUgY3VycmVudCBkYXRlDQoNCmBgYHtyIGluIGFjdGlvbiwgZXJyb3I9Rn0NCnRvZGF5c19kYXRlIDwtIFN5cy5EYXRlKCkNCmN1cnJlbnRfdGltZSA8LSBTeXMudGltZSgpDQoNCmxvbmdfZGF0ZSh0b2RheXNfZGF0ZSkgIzENCmxvbmdfZGF0ZV91cyh0b2RheXNfZGF0ZSkgIzINCmxvbmdfZGF0ZV91c193KHRvZGF5c19kYXRlKSAjMw0KbG9uZ19kYXRlX3codG9kYXlzX2RhdGUpICM0DQpsb25nX2RheV9tb250aCh0b2RheXNfZGF0ZSkgIzUNCmxvbmdfZGF5X21vbnRoX2R0MTIoY3VycmVudF90aW1lKSAjNg0KbG9uZ19kYXlfbW9udGhfZHQxMl91cyhjdXJyZW50X3RpbWUpICM3DQpsb25nX2RheV9tb250aF9kdDEyX3VzX3coY3VycmVudF90aW1lKSAjOA0KbG9uZ19kYXlfbW9udGhfZHQxMl93KGN1cnJlbnRfdGltZSkgIzkNCmxvbmdfZGF5X21vbnRoX2R0MjQoY3VycmVudF90aW1lKSAjMTANCmxvbmdfZGF5X21vbnRoX2R0MjRfdXMoY3VycmVudF90aW1lKSAjMTENCmxvbmdfZGF5X21vbnRoX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICMxMg0KbG9uZ19kYXlfbW9udGhfdXModG9kYXlzX2RhdGUpICMxMw0KbG9uZ19kYXlfbW9udGhfdXNfdyh0b2RheXNfZGF0ZSkgIzE0DQpsb25nX2RheV9tb250aF93KGN1cnJlbnRfdGltZSkgIzE1DQpsb25nX2R0MTIoY3VycmVudF90aW1lKSAjMTYNCmxvbmdfZHQxMl91cyhjdXJyZW50X3RpbWUpICMxNw0KbG9uZ19kdDEyX3VzX3coY3VycmVudF90aW1lKSAjMTgNCmxvbmdfZHQxMl93KGN1cnJlbnRfdGltZSkgIzE5DQpsb25nX2R0MjQoY3VycmVudF90aW1lKSAjMjANCmxvbmdfZHQyNF91cyhjdXJyZW50X3RpbWUpICMyMQ0KbG9uZ19kdDI0X3VzX3coY3VycmVudF90aW1lKSAjMjINCmxvbmdfZHQyNF93KGN1cnJlbnRfdGltZSkgIzIzDQoNCnNob3J0X2RhdGUodG9kYXlzX2RhdGUpICMyNA0Kc2hvcnRfZGF0ZV91cyh0b2RheXNfZGF0ZSkgIzI1DQpzaG9ydF9kYXRlX3VzX3codG9kYXlzX2RhdGUpICMyNg0Kc2hvcnRfZGF0ZV93KHRvZGF5c19kYXRlKSAjMjcNCnNob3J0X2RheV9tb250aCh0b2RheXNfZGF0ZSkgIzI4DQpzaG9ydF9kYXlfbW9udGhfZHQxMihjdXJyZW50X3RpbWUpICMyOQ0Kc2hvcnRfZGF5X21vbnRoX2R0MTJfdXMoY3VycmVudF90aW1lKSAjMzANCnNob3J0X2RheV9tb250aF9kdDEyX3VzX3coY3VycmVudF90aW1lKSAjMzENCnNob3J0X2RheV9tb250aF9kdDEyX3coY3VycmVudF90aW1lKSAjMzINCnNob3J0X2RheV9tb250aF9kdDI0KGN1cnJlbnRfdGltZSkgIzMzDQpzaG9ydF9kYXlfbW9udGhfZHQyNF91cyhjdXJyZW50X3RpbWUpICMzNA0Kc2hvcnRfZGF5X21vbnRoX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICMzNQ0Kc2hvcnRfZGF5X21vbnRoX3VzKHRvZGF5c19kYXRlKSAjMzYNCnNob3J0X2RheV9tb250aF91c193KHRvZGF5c19kYXRlKSAjMzcNCnNob3J0X2RheV9tb250aF93KGN1cnJlbnRfdGltZSkgIzM4DQpzaG9ydF9kdDEyKGN1cnJlbnRfdGltZSkgIzM5DQpzaG9ydF9kdDEyX3VzKGN1cnJlbnRfdGltZSkgIzQwDQpzaG9ydF9kdDEyX3VzX3coY3VycmVudF90aW1lKSAjNDENCnNob3J0X2R0MTJfdyhjdXJyZW50X3RpbWUpICM0Mg0Kc2hvcnRfZHQyNChjdXJyZW50X3RpbWUpICM0Mw0Kc2hvcnRfZHQyNF91cyhjdXJyZW50X3RpbWUpICM0NA0Kc2hvcnRfZHQyNF91c193KGN1cnJlbnRfdGltZSkgIzQ1DQpzaG9ydF9kdDI0X3coY3VycmVudF90aW1lKSAjNDYNCg0KbG9uZ19kYXRlKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM0Nw0KbG9uZ19kYXRlX3VzKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM0OA0KbG9uZ19kYXRlX3VzX3codG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzQ5DQpsb25nX2RhdGVfdyh0b2RheXNfZGF0ZSkgJT4lIGFzX29yZGluYWwoKSAjNTANCmxvbmdfZGF5X21vbnRoKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM1MQ0KbG9uZ19kYXlfbW9udGhfZHQxMihjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzUyDQpsb25nX2RheV9tb250aF9kdDEyX3VzKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNTMNCmxvbmdfZGF5X21vbnRoX2R0MTJfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzU0DQpsb25nX2RheV9tb250aF9kdDEyX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM1NQ0KbG9uZ19kYXlfbW9udGhfZHQyNChjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzU2DQpsb25nX2RheV9tb250aF9kdDI0X3VzKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNTcNCmxvbmdfZGF5X21vbnRoX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzU4DQpsb25nX2RheV9tb250aF91cyh0b2RheXNfZGF0ZSkgJT4lIGFzX29yZGluYWwoKSAjNTkNCmxvbmdfZGF5X21vbnRoX3VzX3codG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzYwDQpsb25nX2RheV9tb250aF93KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNjENCmxvbmdfZHQxMihjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzYyDQpsb25nX2R0MTJfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM2Mw0KbG9uZ19kdDEyX3VzX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM2NA0KbG9uZ19kdDEyX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM2NQ0KbG9uZ19kdDI0KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNjYNCmxvbmdfZHQyNF91cyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzY3DQpsb25nX2R0MjRfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzY4DQpsb25nX2R0MjRfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzY5DQoNCnNob3J0X2RhdGUodG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzcwDQpzaG9ydF9kYXRlX3VzKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3MQ0Kc2hvcnRfZGF0ZV91c193KHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3Mg0Kc2hvcnRfZGF0ZV93KHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3Mw0Kc2hvcnRfZGF5X21vbnRoKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM3NA0Kc2hvcnRfZGF5X21vbnRoX2R0MTIoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM3NQ0Kc2hvcnRfZGF5X21vbnRoX2R0MTJfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM3Ng0Kc2hvcnRfZGF5X21vbnRoX2R0MTJfdXNfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzc3DQpzaG9ydF9kYXlfbW9udGhfZHQxMl93KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNzgNCnNob3J0X2RheV9tb250aF9kdDI0KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjNzkNCnNob3J0X2RheV9tb250aF9kdDI0X3VzKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODANCnNob3J0X2RheV9tb250aF9kdDI0X3VzX3coY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM4MQ0Kc2hvcnRfZGF5X21vbnRoX3VzKHRvZGF5c19kYXRlKSAlPiUgYXNfb3JkaW5hbCgpICM4Mg0Kc2hvcnRfZGF5X21vbnRoX3VzX3codG9kYXlzX2RhdGUpICU+JSBhc19vcmRpbmFsKCkgIzgzDQpzaG9ydF9kYXlfbW9udGhfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzg0DQpzaG9ydF9kdDEyKGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODUNCnNob3J0X2R0MTJfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM4Ng0Kc2hvcnRfZHQxMl91c193KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODcNCnNob3J0X2R0MTJfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzg4DQpzaG9ydF9kdDI0KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjODkNCnNob3J0X2R0MjRfdXMoY3VycmVudF90aW1lKSAlPiUgYXNfb3JkaW5hbCgpICM5MA0Kc2hvcnRfZHQyNF91c193KGN1cnJlbnRfdGltZSkgJT4lIGFzX29yZGluYWwoKSAjOTENCnNob3J0X2R0MjRfdyhjdXJyZW50X3RpbWUpICU+JSBhc19vcmRpbmFsKCkgIzkyDQpgYGANCg0KDQo=