Group/Individual Details
- Amal Joy (s3644794)
- Nupura Sanjay Sawle (s3639703)
- Soumyashree Giri (s3640845)
Executive Statement
Aim
Aim of this investigation is compare the prices of two major supermarkets in Australia; Coles and Woolworths; and find the cheapest of the both. Suitable statistical methods are used in R-Studio to analyse whether there is significant price difference between Coles and Woolworths.
Procedure
Data for the experiment is collected from online website of the respective supermarkets. Price for a product in both supermarkets are collected in such a way that each product is matched with the brand, quantity and quality, to make sure that there is uniformity in the prices. This data is then imported in to R-studio as CSV. The category of Liquor and Cigarettes were filtered out of the collected data set as it will be bringing unwanted discrepancies in the data. Summary of the prices data for both the stores and the price difference has to be generated to get an overview of the dataset. T-test is conducted using R with variables as Coles price and Woolworths price, where H0 = “No difference in prices between Coles and Woolworths”
Sample
Sampling technique used to collect the data was Stratified random sampling. Products where divided in to 13 strata like Stationary, Fruit, Vegetable, Drinks, House Hold etc. Sample consists of 520 observations and each strata is of 40 observations. Variables that we took are item, category, quantity, Coles Price, Woolworths Price and Price Difference.
Main Findings
By analysing the summary of the data set, from the aggregated proportional bar graph for Coles and Woolworths price, it can be interpreted that for most of the categories, the products in Coles are priced higher than in Woolworths. But by conducting the t-test, we found that p-value is 0.111 and the difference of the means (mA-mB =0.558) lies in between the 95% confident interval (-0.078 to 0.756) which states that the test is not statistically significant.
Conclusions
From the results obtained t-tests, it has been found that the test is not statistically significant, which means that there is no significant price difference between Coles and Woolworths.
Load Packages and Data
#Packages that are required for the analysis.
library(readr)
library(dplyr)
library(ggplot2)
library(graphics)
library(car)
library(data.table)
Put the excel on the source location and set the location as working directory. Import the excel using the below command. Filter out the the ’LIQUOR AND TOBACCO’from the list.
#read_csv("<excel_name>")
PriceWar <- read_csv("~/Study/Stats/PriceWar.csv")
View(PriceWar) #View the imported data
#Filtered data#
PriceWar_filter <- PriceWar %>% filter(Category != "LIQUOR AND TOBACCO")
View(PriceWar_filter) #View the filtered data
Adding the column for difference between the prices in both super markets.
#Price difference#
PriceDiffence <- PriceWar_filter %>% mutate(priceDiff = `Coles price` - `WoolWorths price`)
Summary Statistics
Calculating the descriptive statistic for Coles and Woolworths Prices
#Summary of coles data#
PriceWar_filter%>%
summarise(
Min = min(`Coles price`, na.rm = TRUE),
Q1 = quantile(`Coles price`, probs = .25, na.rm = TRUE),
Median = median(`Coles price`, na.rm = TRUE),
Q3 = quantile(`Coles price`, probs = .75, na.rm = TRUE),
Max = max(`Coles price`, na.rm = TRUE),
Mean = mean(`Coles price`, na.rm = TRUE),
SD = sd(`Coles price`, na.rm = TRUE),
n = n(),
Missing = sum(is.na(`Coles price`))
)
#Summary of Woolworths data#
PriceWar_filter%>%
summarise(
Min = min(`WoolWorths price`, na.rm = TRUE),
Q1 = quantile(`WoolWorths price`, probs = .25, na.rm = TRUE),
Median = median(`WoolWorths price`, na.rm = TRUE),
Q3 = quantile(`WoolWorths price`, probs = .75, na.rm = TRUE),
Max = max(`WoolWorths price`, na.rm = TRUE),
Mean = mean(`WoolWorths price`, na.rm = TRUE),
SD = sd(`WoolWorths price`, na.rm = TRUE),
n = n(),
Missing = sum(is.na(`WoolWorths price`))
)
As seen, the price of products on coles apear to be higher than that of Woolworths. We are using paired sample T-test to determine if this price difference can be considered statistically significant. The aggregated proportional bar graph plotted below visually represent the price difference in each of the 13 categories of products.
#Coles Woolworths price camparison using aggregated proportional bar graph#
PriceWar_Category <- data.table(Category=PriceWar$Category,`Coles Price`=PriceWar$`Coles price`,`Woolworths Price`=PriceWar$`WoolWorths price`)
PriceWar_Category <- PriceWar_Category[, lapply(.SD, sum), by = Category]
Category_Aggregate <- aggregate(.~ Category,data = PriceWar_Category,FUN=sum)
graph <- cbind(Category_Aggregate[1], prop.table(as.matrix(Category_Aggregate[-1]), margin = 1))
graph_melt <- melt(graph)
v <- ggplot(graph_melt, aes(x=Category,y= value,fill = Store)) + geom_bar(aes(fill = variable), stat="identity")
v+ theme(axis.text.x = element_text(angle = 60, hjust = 1)) +ggtitle("Pricewar") +
labs(x="Category",y="Proportion")+theme(plot.title = element_text( color="#666666", face="bold", size=15, hjust=0.5)) + theme(axis.title = element_text(color="#666666", face="bold",
size=15))

Calculating distributive statistics for the PriceDiff :
#Summaries price difference#
PriceDiffence%>%
summarise(
Min = min(priceDiff, na.rm = TRUE),
Q1 = quantile(priceDiff, probs = .25, na.rm = TRUE),
Median = median(priceDiff, na.rm = TRUE),
Q3 = quantile(priceDiff, probs = .75, na.rm = TRUE),
Max = max(priceDiff, na.rm = TRUE),
Mean = mean(priceDiff, na.rm = TRUE),
SD = sd(priceDiff, na.rm = TRUE),
n = n(),
Missing = sum(is.na(priceDiff))
)
Difference in prices between two stores is approxiately 0.339$. Since the number of observations are high enough (520>30), by central limit theorem, we can proceed with the paired-sample t-test even if the normality assumption is violated.
Hypothesis Test
You need to explain your choice of hypothesis test, any assumptions and the significance level.
Data has been collected for coles and woolworths.
#Paired samples t test#
t.test(PriceWar_filter$`Coles price`, PriceWar_filter$`WoolWorths price`,
paired = TRUE,
alternative = "two.sided")
Paired t-test
data: PriceWar_filter$`Coles price` and PriceWar_filter$`WoolWorths price`
t = 1.5961, df = 479, p-value = 0.1111
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-0.07825873 0.75563373
sample estimates:
mean of the differences
0.3386875
#Paired sample t test visualisation#
boxplot(
PriceWar_filter$`Coles price`,
PriceWar_filter$`WoolWorths price`,
ylab = "Price",
xlab = "Store"
)
axis(1, at = 1:2, labels = c("Coles", "Woolworths"))

Interpretation
From the t-test, it is observed that p-value is 0.111 > 0.05 and the difference of the means (muA-muB =0.558) lies in between the 95% confident interval (-0.078 to 0.756) which states that the test is not statistically significant.
Discussion
Strengths of this investigation is that there is enough amount of sample data available for analysis. Use of stratified random sampling make sure that sam.ple is not biased or whole of the population is represented. The data collected are for exact same items in both the stores. This makes the data perfectly suited for paired-ttest. Data which have taken is only those products which are not in special offer, so that price of the items is correctly represented.
Limitations of this experiments is that,the category Liquor and Tobbacco had to be filtered to remove the disparity that can arise due to this data. The sample may not be the exact representation of the population. The price of the items were taken over 1 week, which could have an effect on the pricing of the items in the store. When there is special offers running in the store those items are not included in the analisys. Data collecton was done through website of both the stores. Items that was considered can be only those items which most people buy together or the most popular items in the store as there is a tendency to take the first viewed observations. Since the products of same brand is considered, home brands of coles and woolworths are not being consided in the products which will determine the actual price difference between the store.
Improvement to this experiment can be made by increasing the sample size and also collecting all the data in a short time span. Data collection can be made less biased by collecting the data directly from the store so that there is no effect of ‘product popularity’ or ‘buy-together’.
LS0tCnRpdGxlOiAiTUFUSDEzMjQgQXNzaWdubWVudCAzIgpzdWJ0aXRsZTogU3VwZXJtYXJrZXQgUHJpY2UgV2FycwpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6IGRlZmF1bHQKLS0tCgojIyBHcm91cC9JbmRpdmlkdWFsIERldGFpbHMKCiogQW1hbCBKb3kgKHMzNjQ0Nzk0KQoqIE51cHVyYSBTYW5qYXkgU2F3bGUgKHMzNjM5NzAzKQoqIFNvdW15YXNocmVlIEdpcmkgKHMzNjQwODQ1KQoKIyMgRXhlY3V0aXZlIFN0YXRlbWVudAoKIyMjIEFpbQpBaW0gb2YgdGhpcyBpbnZlc3RpZ2F0aW9uIGlzIGNvbXBhcmUgdGhlIHByaWNlcyBvZiB0d28gbWFqb3Igc3VwZXJtYXJrZXRzIGluIEF1c3RyYWxpYTsgQ29sZXMgYW5kIFdvb2x3b3J0aHM7IGFuZCBmaW5kIHRoZSBjaGVhcGVzdCBvZiB0aGUgYm90aC4gU3VpdGFibGUgc3RhdGlzdGljYWwgbWV0aG9kcyBhcmUgdXNlZCBpbiBSLVN0dWRpbyB0byBhbmFseXNlIHdoZXRoZXIgdGhlcmUgaXMgc2lnbmlmaWNhbnQgcHJpY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIENvbGVzIGFuZCBXb29sd29ydGhzLgogCiMjIyBQcm9jZWR1cmUKRGF0YSBmb3IgdGhlIGV4cGVyaW1lbnQgaXMgY29sbGVjdGVkIGZyb20gb25saW5lIHdlYnNpdGUgb2YgdGhlIHJlc3BlY3RpdmUgc3VwZXJtYXJrZXRzLiBQcmljZSBmb3IgYSBwcm9kdWN0IGluIGJvdGggc3VwZXJtYXJrZXRzIGFyZSBjb2xsZWN0ZWQgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2ggcHJvZHVjdCBpcyBtYXRjaGVkIHdpdGggdGhlIGJyYW5kLCBxdWFudGl0eSBhbmQgcXVhbGl0eSwgdG8gbWFrZSBzdXJlIHRoYXQgdGhlcmUgaXMgdW5pZm9ybWl0eSBpbiB0aGUgcHJpY2VzLiBUaGlzIGRhdGEgaXMgdGhlbiBpbXBvcnRlZCBpbiB0byBSLXN0dWRpbyBhcyBDU1YuIFRoZSBjYXRlZ29yeSBvZiBMaXF1b3IgYW5kIENpZ2FyZXR0ZXMgd2VyZSBmaWx0ZXJlZCBvdXQgb2YgdGhlIGNvbGxlY3RlZCBkYXRhIHNldCBhcyBpdCB3aWxsIGJlIGJyaW5naW5nIHVud2FudGVkIGRpc2NyZXBhbmNpZXMgaW4gdGhlIGRhdGEuIFN1bW1hcnkgb2YgdGhlIHByaWNlcyBkYXRhIGZvciBib3RoIHRoZSBzdG9yZXMgYW5kIHRoZSBwcmljZSBkaWZmZXJlbmNlIGhhcyB0byBiZSBnZW5lcmF0ZWQgdG8gZ2V0IGFuIG92ZXJ2aWV3IG9mIHRoZSBkYXRhc2V0LiBULXRlc3QgaXMgY29uZHVjdGVkIHVzaW5nIFIgd2l0aCB2YXJpYWJsZXMgYXMgQ29sZXMgcHJpY2UgYW5kIFdvb2x3b3J0aHMgcHJpY2UsIHdoZXJlIEgwID0gIk5vIGRpZmZlcmVuY2UgaW4gcHJpY2VzIGJldHdlZW4gQ29sZXMgYW5kIFdvb2x3b3J0aHMiCiAKIyMjIFNhbXBsZQpTYW1wbGluZyB0ZWNobmlxdWUgdXNlZCB0byBjb2xsZWN0IHRoZSBkYXRhIHdhcyBTdHJhdGlmaWVkIHJhbmRvbSBzYW1wbGluZy4gUHJvZHVjdHMgd2hlcmUgZGl2aWRlZCBpbiB0byAxMyBzdHJhdGEgbGlrZSBTdGF0aW9uYXJ5LCBGcnVpdCwgVmVnZXRhYmxlLCBEcmlua3MsIEhvdXNlIEhvbGQgZXRjLiBTYW1wbGUgY29uc2lzdHMgb2YgNTIwIG9ic2VydmF0aW9ucyBhbmQgZWFjaCBzdHJhdGEgaXMgb2YgNDAgb2JzZXJ2YXRpb25zLiBWYXJpYWJsZXMgdGhhdCB3ZSB0b29rIGFyZSBpdGVtLCBjYXRlZ29yeSwgcXVhbnRpdHksIENvbGVzIFByaWNlLCBXb29sd29ydGhzIFByaWNlIGFuZCBQcmljZSBEaWZmZXJlbmNlLiAgICAgICAgICAgICAgCiAKIyMjIE1haW4gRmluZGluZ3MKQnkgYW5hbHlzaW5nIHRoZSBzdW1tYXJ5IG9mIHRoZSBkYXRhIHNldCwgZnJvbSB0aGUgYWdncmVnYXRlZCBwcm9wb3J0aW9uYWwgYmFyIGdyYXBoIGZvciBDb2xlcyBhbmQgV29vbHdvcnRocyBwcmljZSwgaXQgY2FuIGJlIGludGVycHJldGVkIHRoYXQgZm9yIG1vc3Qgb2YgdGhlIGNhdGVnb3JpZXMsIHRoZSBwcm9kdWN0cyBpbiBDb2xlcyBhcmUgcHJpY2VkIGhpZ2hlciB0aGFuIGluIFdvb2x3b3J0aHMuIEJ1dCBieSBjb25kdWN0aW5nIHRoZSB0LXRlc3QsIHdlIGZvdW5kIHRoYXQgcC12YWx1ZSBpcyAwLjExMSBhbmQgdGhlIGRpZmZlcmVuY2Ugb2YgdGhlIG1lYW5zIChtQS1tQiA9MC41NTgpIGxpZXMgaW4gYmV0d2VlbiB0aGUgOTUlIGNvbmZpZGVudCBpbnRlcnZhbCAoLTAuMDc4IHRvIDAuNzU2KSB3aGljaCBzdGF0ZXMgdGhhdCB0aGUgdGVzdCBpcyBub3Qgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4KIAojIyMgQ29uY2x1c2lvbnMKRnJvbSB0aGUgcmVzdWx0cyBvYnRhaW5lZCB0LXRlc3RzLCBpdCBoYXMgYmVlbiBmb3VuZCB0aGF0IHRoZSB0ZXN0IGlzIG5vdCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IHByaWNlIGRpZmZlcmVuY2UgYmV0d2VlbiBDb2xlcyBhbmQgV29vbHdvcnRocy4KCiMjIExvYWQgUGFja2FnZXMgYW5kIERhdGEKCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojUGFja2FnZXMgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBhbmFseXNpcy4KbGlicmFyeShyZWFkcikKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdyYXBoaWNzKQpsaWJyYXJ5KGNhcikKbGlicmFyeShkYXRhLnRhYmxlKQpgYGAKUHV0IHRoZSBleGNlbCBvbiB0aGUgc291cmNlIGxvY2F0aW9uIGFuZCBzZXQgdGhlIGxvY2F0aW9uIGFzIHdvcmtpbmcgZGlyZWN0b3J5LiBJbXBvcnQgdGhlIGV4Y2VsIHVzaW5nIHRoZSBiZWxvdyBjb21tYW5kLiBGaWx0ZXIgb3V0IHRoZSAgdGhlICdMSVFVT1IgQU5EIFRPQkFDQ08nZnJvbSB0aGUgbGlzdC4gIApgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JlYWRfY3N2KCI8ZXhjZWxfbmFtZT4iKQpQcmljZVdhciA8LSByZWFkX2Nzdigifi9TdHVkeS9TdGF0cy9QcmljZVdhci5jc3YiKQpWaWV3KFByaWNlV2FyKSAjVmlldyB0aGUgaW1wb3J0ZWQgZGF0YQoKI0ZpbHRlcmVkIGRhdGEjClByaWNlV2FyX2ZpbHRlciA8LSBQcmljZVdhciAlPiUgZmlsdGVyKENhdGVnb3J5ICE9ICJMSVFVT1IgQU5EIFRPQkFDQ08iKSAKVmlldyhQcmljZVdhcl9maWx0ZXIpICNWaWV3IHRoZSBmaWx0ZXJlZCBkYXRhCmBgYApBZGRpbmcgdGhlIGNvbHVtbiBmb3IgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBwcmljZXMgaW4gYm90aCBzdXBlciBtYXJrZXRzLgpgYGB7cn0KI1ByaWNlIGRpZmZlcmVuY2UjClByaWNlRGlmZmVuY2UgPC0gUHJpY2VXYXJfZmlsdGVyICU+JSBtdXRhdGUocHJpY2VEaWZmID0gYENvbGVzIHByaWNlYCAtIGBXb29sV29ydGhzIHByaWNlYCkKYGBgCgojIyBTdW1tYXJ5IFN0YXRpc3RpY3MKCkNhbGN1bGF0aW5nIHRoZSBkZXNjcmlwdGl2ZSBzdGF0aXN0aWMgZm9yIENvbGVzIGFuZCBXb29sd29ydGhzIFByaWNlcwpgYGB7cn0KI1N1bW1hcnkgb2YgY29sZXMgZGF0YSMKUHJpY2VXYXJfZmlsdGVyJT4lCiAgc3VtbWFyaXNlKAogIE1pbiA9IG1pbihgQ29sZXMgcHJpY2VgLCBuYS5ybSA9IFRSVUUpLAogIFExID0gcXVhbnRpbGUoYENvbGVzIHByaWNlYCwgcHJvYnMgPSAuMjUsIG5hLnJtID0gVFJVRSksCiAgTWVkaWFuID0gbWVkaWFuKGBDb2xlcyBwcmljZWAsIG5hLnJtID0gVFJVRSksCiAgUTMgPSBxdWFudGlsZShgQ29sZXMgcHJpY2VgLCBwcm9icyA9IC43NSwgbmEucm0gPSBUUlVFKSwKICBNYXggPSBtYXgoYENvbGVzIHByaWNlYCwgbmEucm0gPSBUUlVFKSwKICBNZWFuID0gbWVhbihgQ29sZXMgcHJpY2VgLCBuYS5ybSA9IFRSVUUpLAogIFNEID0gc2QoYENvbGVzIHByaWNlYCwgbmEucm0gPSBUUlVFKSwKICBuID0gbigpLAogIE1pc3NpbmcgPSBzdW0oaXMubmEoYENvbGVzIHByaWNlYCkpCiAgKQoKI1N1bW1hcnkgb2YgV29vbHdvcnRocyBkYXRhIwpQcmljZVdhcl9maWx0ZXIlPiUKICBzdW1tYXJpc2UoCiAgTWluID0gbWluKGBXb29sV29ydGhzIHByaWNlYCwgbmEucm0gPSBUUlVFKSwKICBRMSA9IHF1YW50aWxlKGBXb29sV29ydGhzIHByaWNlYCwgcHJvYnMgPSAuMjUsIG5hLnJtID0gVFJVRSksCiAgTWVkaWFuID0gbWVkaWFuKGBXb29sV29ydGhzIHByaWNlYCwgbmEucm0gPSBUUlVFKSwKICBRMyA9IHF1YW50aWxlKGBXb29sV29ydGhzIHByaWNlYCwgcHJvYnMgPSAuNzUsIG5hLnJtID0gVFJVRSksCiAgTWF4ID0gbWF4KGBXb29sV29ydGhzIHByaWNlYCwgbmEucm0gPSBUUlVFKSwKICBNZWFuID0gbWVhbihgV29vbFdvcnRocyBwcmljZWAsIG5hLnJtID0gVFJVRSksCiAgU0QgPSBzZChgV29vbFdvcnRocyBwcmljZWAsIG5hLnJtID0gVFJVRSksCiAgbiA9IG4oKSwKICBNaXNzaW5nID0gc3VtKGlzLm5hKGBXb29sV29ydGhzIHByaWNlYCkpCiAgKQpgYGAKQXMgc2VlbiwgdGhlIHByaWNlIG9mIHByb2R1Y3RzIG9uIGNvbGVzIGFwZWFyIHRvIGJlIGhpZ2hlciB0aGFuIHRoYXQgb2YgV29vbHdvcnRocy4gV2UgYXJlIHVzaW5nIHBhaXJlZCBzYW1wbGUgVC10ZXN0IHRvIGRldGVybWluZSBpZiB0aGlzIHByaWNlIGRpZmZlcmVuY2UgY2FuIGJlIGNvbnNpZGVyZWQgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudC4gVGhlIGFnZ3JlZ2F0ZWQgcHJvcG9ydGlvbmFsIGJhciBncmFwaCBwbG90dGVkIGJlbG93IHZpc3VhbGx5IHJlcHJlc2VudCB0aGUgcHJpY2UgZGlmZmVyZW5jZSBpbiBlYWNoIG9mIHRoZSAxMyBjYXRlZ29yaWVzIG9mIHByb2R1Y3RzLgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI0NvbGVzIFdvb2x3b3J0aHMgcHJpY2UgY2FtcGFyaXNvbiB1c2luZyBhZ2dyZWdhdGVkIHByb3BvcnRpb25hbCBiYXIgZ3JhcGgjClByaWNlV2FyX0NhdGVnb3J5IDwtICBkYXRhLnRhYmxlKENhdGVnb3J5PVByaWNlV2FyJENhdGVnb3J5LGBDb2xlcyBQcmljZWA9UHJpY2VXYXIkYENvbGVzIHByaWNlYCxgV29vbHdvcnRocyBQcmljZWA9UHJpY2VXYXIkYFdvb2xXb3J0aHMgcHJpY2VgKQoKClByaWNlV2FyX0NhdGVnb3J5IDwtIFByaWNlV2FyX0NhdGVnb3J5WywgbGFwcGx5KC5TRCwgc3VtKSwgYnkgPSBDYXRlZ29yeV0KCkNhdGVnb3J5X0FnZ3JlZ2F0ZSA8LSBhZ2dyZWdhdGUoLn4gQ2F0ZWdvcnksZGF0YSA9IFByaWNlV2FyX0NhdGVnb3J5LEZVTj1zdW0pCgoKZ3JhcGggPC0gY2JpbmQoQ2F0ZWdvcnlfQWdncmVnYXRlWzFdLCBwcm9wLnRhYmxlKGFzLm1hdHJpeChDYXRlZ29yeV9BZ2dyZWdhdGVbLTFdKSwgbWFyZ2luID0gMSkpCgpncmFwaF9tZWx0IDwtIG1lbHQoZ3JhcGgpCgp2IDwtIGdncGxvdChncmFwaF9tZWx0LCBhZXMoeD1DYXRlZ29yeSx5PSB2YWx1ZSxmaWxsID0gU3RvcmUpKSArIGdlb21fYmFyKGFlcyhmaWxsID0gdmFyaWFibGUpLCBzdGF0PSJpZGVudGl0eSIpCgp2KyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDYwLCBoanVzdCA9IDEpKSArZ2d0aXRsZSgiUHJpY2V3YXIiKSArCiAgbGFicyh4PSJDYXRlZ29yeSIseT0iUHJvcG9ydGlvbiIpK3RoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoIGNvbG9yPSIjNjY2NjY2IiwgZmFjZT0iYm9sZCIsIHNpemU9MTUsICBoanVzdD0wLjUpKSArIHRoZW1lKGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoY29sb3I9IiM2NjY2NjYiLCBmYWNlPSJib2xkIiwKc2l6ZT0xNSkpCgpgYGAKQ2FsY3VsYXRpbmcgZGlzdHJpYnV0aXZlIHN0YXRpc3RpY3MgZm9yIHRoZSBQcmljZURpZmYgOgpgYGB7cn0KI1N1bW1hcmllcyBwcmljZSBkaWZmZXJlbmNlIwpQcmljZURpZmZlbmNlJT4lCiAgc3VtbWFyaXNlKAogIE1pbiA9IG1pbihwcmljZURpZmYsIG5hLnJtID0gVFJVRSksCiAgUTEgPSBxdWFudGlsZShwcmljZURpZmYsIHByb2JzID0gLjI1LCBuYS5ybSA9IFRSVUUpLAogIE1lZGlhbiA9IG1lZGlhbihwcmljZURpZmYsIG5hLnJtID0gVFJVRSksCiAgUTMgPSBxdWFudGlsZShwcmljZURpZmYsIHByb2JzID0gLjc1LCBuYS5ybSA9IFRSVUUpLAogIE1heCA9IG1heChwcmljZURpZmYsIG5hLnJtID0gVFJVRSksCiAgTWVhbiA9IG1lYW4ocHJpY2VEaWZmLCBuYS5ybSA9IFRSVUUpLAogIFNEID0gc2QocHJpY2VEaWZmLCBuYS5ybSA9IFRSVUUpLAogIG4gPSBuKCksCiAgTWlzc2luZyA9IHN1bShpcy5uYShwcmljZURpZmYpKQogICkKYGBgCkRpZmZlcmVuY2UgaW4gcHJpY2VzIGJldHdlZW4gdHdvIHN0b3JlcyBpcyBhcHByb3hpYXRlbHkgMC4zMzkkLiBTaW5jZSB0aGUgbnVtYmVyIG9mIG9ic2VydmF0aW9ucyBhcmUgaGlnaCBlbm91Z2ggKDUyMD4zMCksIGJ5IGNlbnRyYWwgbGltaXQgdGhlb3JlbSwgd2UgY2FuIHByb2NlZWQgd2l0aCB0aGUgcGFpcmVkLXNhbXBsZSB0LXRlc3QgZXZlbiBpZiB0aGUgbm9ybWFsaXR5IGFzc3VtcHRpb24gaXMgdmlvbGF0ZWQuCgoKIyMgSHlwb3RoZXNpcyBUZXN0CgoKCllvdSBuZWVkIHRvIGV4cGxhaW4geW91ciBjaG9pY2Ugb2YgaHlwb3RoZXNpcyB0ZXN0LCBhbnkgYXNzdW1wdGlvbnMgYW5kIHRoZSBzaWduaWZpY2FuY2UgbGV2ZWwuIAoKRGF0YSBoYXMgYmVlbiBjb2xsZWN0ZWQgZm9yIGNvbGVzIGFuZCB3b29sd29ydGhzLiAKCgpgYGB7cn0KI1BhaXJlZCBzYW1wbGVzIHQgdGVzdCMKdC50ZXN0KFByaWNlV2FyX2ZpbHRlciRgQ29sZXMgcHJpY2VgLCBQcmljZVdhcl9maWx0ZXIkYFdvb2xXb3J0aHMgcHJpY2VgLAogICAgICAgcGFpcmVkID0gVFJVRSwKICAgICAgIGFsdGVybmF0aXZlID0gInR3by5zaWRlZCIpCgojUGFpcmVkIHNhbXBsZSB0IHRlc3QgdmlzdWFsaXNhdGlvbiMKYm94cGxvdCgKICBQcmljZVdhcl9maWx0ZXIkYENvbGVzIHByaWNlYCwKICBQcmljZVdhcl9maWx0ZXIkYFdvb2xXb3J0aHMgcHJpY2VgLAogIHlsYWIgPSAiUHJpY2UiLAogIHhsYWIgPSAiU3RvcmUiCiAgKQpheGlzKDEsIGF0ID0gMToyLCBsYWJlbHMgPSBjKCJDb2xlcyIsICJXb29sd29ydGhzIikpCmBgYAoKIyMgSW50ZXJwcmV0YXRpb24KRnJvbSB0aGUgdC10ZXN0LCBpdCBpcyBvYnNlcnZlZCB0aGF0IHAtdmFsdWUgaXMgMC4xMTEgPiAwLjA1IGFuZCB0aGUgZGlmZmVyZW5jZSBvZiB0aGUgbWVhbnMgKG11QS1tdUIgPTAuNTU4KSBsaWVzIGluIGJldHdlZW4gdGhlIDk1JSBjb25maWRlbnQgaW50ZXJ2YWwgKC0wLjA3OCB0byAwLjc1Nikgd2hpY2ggc3RhdGVzIHRoYXQgdGhlIHRlc3QgaXMgbm90IHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuCgojIyBEaXNjdXNzaW9uIAoKU3RyZW5ndGhzIG9mIHRoaXMgaW52ZXN0aWdhdGlvbiBpcyB0aGF0IHRoZXJlIGlzIGVub3VnaCBhbW91bnQgb2Ygc2FtcGxlIGRhdGEgYXZhaWxhYmxlIGZvciBhbmFseXNpcy4gVXNlIG9mIHN0cmF0aWZpZWQgcmFuZG9tIHNhbXBsaW5nIG1ha2Ugc3VyZSB0aGF0IHNhbS5wbGUgaXMgbm90IGJpYXNlZCBvciB3aG9sZSBvZiB0aGUgcG9wdWxhdGlvbiBpcyByZXByZXNlbnRlZC4gVGhlIGRhdGEgY29sbGVjdGVkIGFyZSBmb3IgZXhhY3Qgc2FtZSBpdGVtcyBpbiBib3RoIHRoZSBzdG9yZXMuIFRoaXMgbWFrZXMgdGhlIGRhdGEgcGVyZmVjdGx5IHN1aXRlZCBmb3IgcGFpcmVkLXR0ZXN0LiBEYXRhIHdoaWNoIGhhdmUgdGFrZW4gaXMgb25seSB0aG9zZSBwcm9kdWN0cyB3aGljaCBhcmUgbm90IGluIHNwZWNpYWwgb2ZmZXIsIHNvIHRoYXQgcHJpY2Ugb2YgdGhlIGl0ZW1zIGlzIGNvcnJlY3RseSByZXByZXNlbnRlZC4KCkxpbWl0YXRpb25zIG9mIHRoaXMgZXhwZXJpbWVudHMgaXMgdGhhdCx0aGUgY2F0ZWdvcnkgTGlxdW9yIGFuZCBUb2JiYWNjbyBoYWQgdG8gYmUgZmlsdGVyZWQgdG8gcmVtb3ZlIHRoZSBkaXNwYXJpdHkgdGhhdCBjYW4gYXJpc2UgZHVlIHRvIHRoaXMgZGF0YS4gVGhlIHNhbXBsZSBtYXkgbm90IGJlIHRoZSBleGFjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9wdWxhdGlvbi4gVGhlIHByaWNlIG9mIHRoZSBpdGVtcyB3ZXJlIHRha2VuIG92ZXIgMSB3ZWVrLCB3aGljaCBjb3VsZCBoYXZlIGFuIGVmZmVjdCBvbiB0aGUgcHJpY2luZyBvZiB0aGUgaXRlbXMgaW4gdGhlIHN0b3JlLiBXaGVuIHRoZXJlIGlzIHNwZWNpYWwgb2ZmZXJzIHJ1bm5pbmcgaW4gdGhlIHN0b3JlIHRob3NlIGl0ZW1zIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIGFuYWxpc3lzLiBEYXRhIGNvbGxlY3RvbiB3YXMgZG9uZSB0aHJvdWdoIHdlYnNpdGUgb2YgYm90aCB0aGUgc3RvcmVzLiBJdGVtcyB0aGF0IHdhcyBjb25zaWRlcmVkIGNhbiBiZSBvbmx5IHRob3NlIGl0ZW1zIHdoaWNoIG1vc3QgcGVvcGxlIGJ1eSB0b2dldGhlciBvciB0aGUgbW9zdCBwb3B1bGFyIGl0ZW1zIGluIHRoZSBzdG9yZSBhcyB0aGVyZSBpcyBhIHRlbmRlbmN5IHRvIHRha2UgdGhlIGZpcnN0IHZpZXdlZCBvYnNlcnZhdGlvbnMuIFNpbmNlIHRoZSBwcm9kdWN0cyBvZiBzYW1lIGJyYW5kIGlzIGNvbnNpZGVyZWQsIGhvbWUgYnJhbmRzIG9mIGNvbGVzIGFuZCB3b29sd29ydGhzIGFyZSBub3QgYmVpbmcgY29uc2lkZWQgaW4gdGhlIHByb2R1Y3RzIHdoaWNoIHdpbGwgZGV0ZXJtaW5lIHRoZSBhY3R1YWwgcHJpY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBzdG9yZS4KCkltcHJvdmVtZW50IHRvIHRoaXMgZXhwZXJpbWVudCBjYW4gYmUgbWFkZSBieSBpbmNyZWFzaW5nIHRoZSBzYW1wbGUgc2l6ZSBhbmQgYWxzbyBjb2xsZWN0aW5nIGFsbCB0aGUgZGF0YSBpbiBhIHNob3J0IHRpbWUgc3Bhbi4gRGF0YSBjb2xsZWN0aW9uIGNhbiBiZSBtYWRlIGxlc3MgYmlhc2VkIGJ5IGNvbGxlY3RpbmcgdGhlIGRhdGEgZGlyZWN0bHkgZnJvbSAgdGhlIHN0b3JlIHNvIHRoYXQgdGhlcmUgaXMgbm8gZWZmZWN0IG9mICdwcm9kdWN0IHBvcHVsYXJpdHknIG9yICdidXktdG9nZXRoZXInLgoKCgo=