For this project I am looking at how different governments responded to Covid-19 and how this affected the spread of the disease. In this study, I look at each government’s response to Covid-19. I looked at Sweden, China, Germany, South Korea, Nigeria, Brazil, and New Zealand. I also looked at 5 US states to see the potential differences with each state’s response. I choose Sweden because they did not have a lot of regulation when it comes to Covid and they are a very technologically advanced country. China is interesting to look at because (i) that is where the disease originated,(ii) they have reported low case numbers recently, and (iii) they are the most populated country. Germany is the 2nd most populous country in Europe next to Russia, Russia is too big to study though so Germany is a better country evaluate. South Korea was praised earlier in the year for having proper safety and testing during Covid so I thought it would be interesting to look at now. Nigeria and Brazil are the two most populous countries in their respected continent. New Zealand was my final country and they have been very successful in keeping the virus away so I thought they would be great to examine.

I choose to look at 5 different states from America because each state is doing there own thing and has different rules and mandates. The 5 states that I choose were California, New York, Illinois, Texas, and North Dakota. This accounts for around 90 million Americans or around 30.6% of the population.

I’m predicting that governments that view Covid as very serious will do much better controlling the virus then governments who viewed it as less serious or not that big of an issue.

California’s Covid Data


data2cali <- filter(datacali, datacali$state == "CA") %>% #I dont think this filter is needed, but I had problems without it
  mutate(date = ymd(date))

data2cali %>% 
  ggplot(aes(x=date, y=positiveIncrease)) + 
  geom_point()+
  geom_line()+
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = 0.5))+
  ggtitle("California's response to covid") +
  xlab("Date") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)


#I had a lot of problems with the dates on the x-axis so I used this website for help https://community.rstudio.com/t/too-many-dates-in-plot/66820

In the beginning, California was one of the first states to impose a stay-at-home order which was issued on March 19,2020. On February 14th, San Diego county declared a state of emergency. This early action helped mitigate the cases early. On June 5th a lot of counties in California started to move to stage 3 which may have been too early as by late June they were already rolling back stage 3.

New York Covid data


data2ny <- filter(datanewyork, datanewyork$state == "NY") %>%
  mutate(date = ymd(date))

data2ny %>% 
  ggplot(aes(x=date, y=positiveIncrease)) + 
  geom_point()+
  geom_smooth() +
  geom_line()+
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = 0.5))+
  ggtitle("New York's response to covid") +
  xlab("Dates") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA

New York was hit very hard early and then since then has been good about keeping their Covid cases low. Andrew Cuomo,the Governor of New York, declared a state of emergency on March 7th. New York was one of the first states hit hard by Covid and because of this it made a lot of local residents leave to find somewhere safer to stay or residents stayed in at home. Now there is an increase in cases again, this is likely due to people becoming more relaxed over time and a longing for pre-Covid times.

Texas Covid data


data2texas <- filter(datatexas, datatexas$state == "TX") %>%
  mutate(date = ymd(date))

data2texas %>% 
  ggplot(aes(x=date, y=positiveIncrease)) + 
  geom_point()+
  geom_line()+
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = 0.5))+
  ggtitle("Texas's response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA

In the beginning, Texas did very well. Their governor declared a state of disaster on March 13th. They were said to be in one of the best states for limiting the spread of Covid. Which may be seen as a plus, but it may also give people a false sense of security. In the end of April, there was a slight increase in cases, between May and June the government loosened up restrictions on everything which could’ve contributed to the rise of cases in late summer. The extreme spike of cases on September 19th is due to counting cases that were not counted before. Texas Governor Greg Abbott implemented a stay at home order on March 26th, which was then lifted for the entire state on April 30th.

Illinois Covid data


data2il <- filter(dataillinois, dataillinois$state == "IL") %>%
  mutate(date = ymd(date))

data2il %>% 
  ggplot(aes(x=date, y=positiveIncrease)) + 
  geom_point()+
  geom_line()+
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = 0.5))+
  ggtitle("Illinois' response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA

Illinois did a decent job in the beginning of keeping the virus under control. In Illinois, 9.5 out of the 12.6 million people live in Chicago or in the suburbs of Chicago so most of the cases are related to this area. On March 9, Governor J.B. Pritzker issued a state of emergency. Then on March 20th he issued a stay at home order, the stay at home order was extended through May 21st which is a major contributor to why cases reminded so low during the summer. Similarly to New York I think cases are rising again because people are becoming more relaxed with what they need to be doing to be safe. Additionally, in states like New York and Illinois which have intense cold winters the winter could be very dangerous for people ther because it drives people inside and seems to boost transmission.

North Dakota Covid Data


data2Nd <- filter(dataNd, dataNd$state == "ND") %>%
  mutate(date = ymd(date))

data2Nd %>% 
  ggplot(aes(x=date, y=positiveIncrease)) + 
  geom_point()+
  geom_line()+
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = 0.5))+
  ggtitle("North Dakotas' response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA

North Dakota’s response to Covid was pretty strong, especially for being a colder state they did a good job keeping the virus under control in the beginning. Part of the reason for low cases was could be their population is under 1 million. Compared to most other states North Dakota cases have been relatively low. Recently within the past month they have had an increase in cases, which I think could have been mitigated with a stay-at-home order. The governor of North Dakota, Doug Burgum, also contributed to the rise of cases recently. For months he has resisted issuing a mandate for masks to be worm statewide. On November 9th, Governor Burgum announced that all the hospitals throughout the state were at 100% capacity, then on November 13th he made a state wide mandate to wear the mask which while it will still be effective will should’ve occurred earlier.

New Zealands Covid Data

data2NZ <- filter(dataworldwide, location == "New Zealand") %>%
  mutate(date = ymd(date))

data2NZ %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("New Zealand's response to covid") +
  xlab("Dates") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA

New Zealands response to covid has been one of the best in the world. Besides an outbreak around March and April New Zealand has been able to keep their daily new cases under 25. On February 3rd, the New Zealand Government started implementing travel bans permitting only New Zealand residents, permanent residents and family to enter. On March 14th, they started shutting down public events and they released a comprehensive level system to deal with the virus. On March 21st, they moved to level 2 which means that if you are over 70 or have a compromised immune system you were asked to stay home. The New Zealand government clearly took coronavirus very seriously as they started implementing their travel bans February 3rd which was extremely early compared to the rest of the world.

Sweden Covid data



datasweden <- filter(dataworldwide, location == "Sweden") %>% 
  mutate(date = ymd(date))

datasweden %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("Sweden's response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA
NA

Sweden’s unique response to Covid was why I choose to look at them. At no point have they issued a stay-at-home order, or closed down any of their bars,restaurants,salons, gyms, or public transport. On June 5th, it was recommended by the World Health Organization to wear masks whenever in public and following that more people in Sweden started wearing masks. There was a small spike in cases in the end of June, but it went down pretty fast most likely due to the masks. Throughout the pandemic Sweden was spreading safety rules like wearing a facemask and social distancing of 1.5 meters.

China Covid data



datachina <- filter(dataworldwide, location == "China") %>% 
  mutate(date = ymd(date))

datachina %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("China's response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA
NA

Since Covid-19 started in China, I had to choose it as a country evaluate. From the numbers that China reports it seems that they have been doing really well with cases recently. They had a major outbreak at the start of 2020 which they mitigated by placing a strict stay-at-home order, additionally they had constant temperature checks through most public places. Another thing that they did was have bleach trucks and sanitation teams go throughout Wuhan and major populous areas cleaning. The Chinese government definitely realized Covid was very dangerous and needed to be kept under control. The extreme spike in cases was on February 12th. It is believed that the spike was due to so many prior cases not be reported and counted.

Germany Covid data



datagermany <- filter(dataworldwide, location == "Germany") %>% 
  mutate(date = ymd(date))

datagermany %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("Germany's response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA
NA

Germany’s response to Covid in the beginning was weak. On January 22, 2020, the German government said Covid was “far less dangerous” then SARS and that it was a very low risk. Then on March 31st, the first major German city announced a mandate for everyone to wear masks. This kind of delayed reactions and unaware government officals most likely helped contribute to the first spike.

South Korea Covid Data



dataSK <- filter(dataworldwide, location == "South Korea") %>% 
  mutate(date = ymd(date))

dataSK %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("South Korea's response to covid") +
  xlab("Time") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA
NA

South Korea’s response to Covid was also very good. South Korea was one of the few countries to limit the spread of Covid without closing businesses or issuing stay-at-home orders like lots of other wealthy countries. South Korea was able to do this because the government took a very serious approach to it. The government worked closely with the medical private sector to build hundreds of screening and testing facilities across the country. There were around 600 testing facilities constructed which were able to do between 15,000 and 20,000 tests a day. Not only did they have vastly increased testing, but they also had incredible contact tracing. There were hundreds of workers who were tasked with contact tracing and were given access to credit card transactions and closed-circuit television footage. If comparing South Korea to California, South Korea has 11 million more citizens than California yet their daily Covid cases have not reached 1000. Compared to California where the last time they were under 1000 daily cases was April 19th. This shows how different governments reactions have different outcomes.

Nigeria Covid Data



dataNigeria <- filter(dataworldwide, location == "Nigeria") %>% 
  mutate(date = ymd(date))

dataNigeria %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("Nigeria's response to covid") +
  xlab("Dates") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA
NA

Nigeria has done pretty well with Covid-19. There daily cases have so far never reached 1000 which is really good. Nigeria has been letting different state governments decide what to do for their people. March through June most of the states went into a lockdown at some point. The government also imposed a curfew from 8 p.m. to 6 a.m. which lasted 4 weeks from April to May.

Brazil Covid Data



databrazil <- filter(dataworldwide, location == "Brazil") %>% 
  mutate(date = ymd(date))

databrazil %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("Brazil's response to covid") +
  xlab("Dates") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA
NA

Brazil is an example of why governments need to view Covid as serious and figure out ways of how to deal with it properly. On 6th of March, President Jair Bolsonaro advised to strictly follow the experts recommendations. Then a month later on the 16th of April he fired his Minister of Health over disagreements with the President about social distancing guidelines and when stores should open again. At this point, cases started to rise again. Nelson Teich who was appointed to replace the the Minister of Health was soon appointed. On May 15th, less then a month after he was appointed, Teich resigned. He cited similar reasons as his predecessor for wanting to leave, he fought with the president on social distancing guidelines, the use of hydroxychloroquine(A medication used to treat Malaria), and being overruled on rules that his position decided. Because President Bolsonaro didn’t listen to his either of his Ministers of Health and fought with what he early advised, he created a worse outbreak in Brazil.

The United States



dataUS <- filter(dataworldwide, location == "United States") %>% 
  mutate(date = ymd(date))

dataUS %>%
  ggplot(aes(x=date, y=new_cases)) +
  geom_point() +
  geom_line() +
  geom_smooth() +
  scale_x_date(breaks = seq.Date(from = as.Date("2020-01-01"), 
                                 to = as.Date("2020-11-27"), by = 15)) +
  theme(axis.text.x = element_text(angle = 70, vjust = 0.5, hjust = .5))+
  ggtitle("United State's response to covid") +
  xlab("Dates") + ylab("Covid-19 daily new cases")+
  scale_y_continuous(labels = comma)

NA
NA

Out of all the countries, the United States has had the most Covid cases. There are various contributing factors for why we have the most cases like increased testing, or that our country has higher population, but regardless it is apparent that we have not done a good job managing the virus. Because the US is so large most of the Covid decisions are decided by city or state governments. This makes it tricky to look at what factors may have influenced the spread of Covid. A definite contributing factor though was our President’s level of seriousness throughout the pandemic and inconsistent messaging. President Trump has likely negatively influenced people’s actions unhealthily through his bad habits as he was photographed multiple times in the summer not wearing a mask.He has also made fun of President-elect Biden for wearing a mask. Doing this shows that he is not very worried about Covid. He gave each Governor the responsibility to decide on how to manage Covid in their state. While this works for some states there are also governors who don’t or didn’t view Covid as very serious which could cause problems.

This has negatively affected the US, but it proves my hypothesis. As I have shown and explained above the more a country views Covid-19 as dangerous the better they do in fighting the spread. Great examples of this are New Zealand, South Korea, Nigeria, and China (if their recent new case counts are accurate). Countries that did not view Covid as a major threat are the US and Brazil and now these countries have the highest daily new cases.

Some other resources I used: https://rstudio.com/wp-content/uploads/2015/02/rmarkdown-cheatsheet.pdf

https://ourworldindata.org/coronavirus-testing

https://covidtracking.com/data/download

LS0tCnRpdGxlOiAiQ29tcGFyaW5nIGdvdmVybm1lbnRzIHJlYWN0aW9ucyB0byBjb3ZpZC0xOSBhbmQgaG93IHRoaXMgYWZmZWN0ZWQgdGhlIHNwcmVhZCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZHBseXIsIHdhcm4uY29uZmxpY3RzID0gRkFMU0UpCmxpYnJhcnkobHVicmlkYXRlKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShzY2FsZXMpCmBgYAoKRm9yIHRoaXMgcHJvamVjdCBJIGFtIGxvb2tpbmcgYXQgaG93IGRpZmZlcmVudCBnb3Zlcm5tZW50cyByZXNwb25kZWQgdG8gQ292aWQtMTkgYW5kIGhvdyB0aGlzIGFmZmVjdGVkIHRoZSBzcHJlYWQgb2YgdGhlIGRpc2Vhc2UuIEluIHRoaXMgc3R1ZHksIEkgbG9vayBhdCBlYWNoIGdvdmVybm1lbnQncyByZXNwb25zZSB0byBDb3ZpZC0xOS4gSSBsb29rZWQgYXQgU3dlZGVuLCBDaGluYSwgR2VybWFueSwgU291dGggS29yZWEsIE5pZ2VyaWEsIEJyYXppbCwgYW5kIE5ldyBaZWFsYW5kLiBJIGFsc28gbG9va2VkIGF0IDUgVVMgc3RhdGVzIHRvIHNlZSB0aGUgcG90ZW50aWFsIGRpZmZlcmVuY2VzIHdpdGggZWFjaCBzdGF0ZSdzIHJlc3BvbnNlLiBJIGNob29zZSBTd2VkZW4gYmVjYXVzZSB0aGV5IGRpZCBub3QgaGF2ZSBhIGxvdCBvZiByZWd1bGF0aW9uIHdoZW4gaXQgY29tZXMgdG8gQ292aWQgYW5kIHRoZXkgYXJlIGEgdmVyeSB0ZWNobm9sb2dpY2FsbHkgYWR2YW5jZWQgY291bnRyeS4gQ2hpbmEgaXMgaW50ZXJlc3RpbmcgdG8gbG9vayBhdCBiZWNhdXNlIChpKSB0aGF0IGlzIHdoZXJlIHRoZSBkaXNlYXNlIG9yaWdpbmF0ZWQsKGlpKSB0aGV5IGhhdmUgcmVwb3J0ZWQgbG93IGNhc2UgbnVtYmVycyByZWNlbnRseSwgYW5kIChpaWkpIHRoZXkgYXJlIHRoZSBtb3N0IHBvcHVsYXRlZCBjb3VudHJ5LiBHZXJtYW55IGlzIHRoZSAybmQgbW9zdCBwb3B1bG91cyBjb3VudHJ5IGluIEV1cm9wZSBuZXh0IHRvIFJ1c3NpYSwgUnVzc2lhIGlzIHRvbyBiaWcgdG8gc3R1ZHkgdGhvdWdoIHNvIEdlcm1hbnkgaXMgYSBiZXR0ZXIgY291bnRyeSBldmFsdWF0ZS4gU291dGggS29yZWEgd2FzIHByYWlzZWQgZWFybGllciBpbiB0aGUgeWVhciBmb3IgaGF2aW5nIHByb3BlciBzYWZldHkgYW5kIHRlc3RpbmcgZHVyaW5nIENvdmlkIHNvIEkgdGhvdWdodCBpdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBsb29rIGF0IG5vdy4gTmlnZXJpYSBhbmQgQnJhemlsIGFyZSB0aGUgdHdvIG1vc3QgcG9wdWxvdXMgY291bnRyaWVzIGluIHRoZWlyIHJlc3BlY3RlZCBjb250aW5lbnQuIE5ldyBaZWFsYW5kIHdhcyBteSBmaW5hbCBjb3VudHJ5IGFuZCB0aGV5IGhhdmUgYmVlbiB2ZXJ5IHN1Y2Nlc3NmdWwgaW4ga2VlcGluZyB0aGUgdmlydXMgYXdheSBzbyBJIHRob3VnaHQgdGhleSB3b3VsZCBiZSBncmVhdCB0byBleGFtaW5lLgoKSSBjaG9vc2UgdG8gbG9vayBhdCA1IGRpZmZlcmVudCBzdGF0ZXMgZnJvbSBBbWVyaWNhIGJlY2F1c2UgZWFjaCBzdGF0ZSBpcyBkb2luZyB0aGVyZSBvd24gdGhpbmcgYW5kIGhhcyBkaWZmZXJlbnQgcnVsZXMgYW5kIG1hbmRhdGVzLiBUaGUgNSBzdGF0ZXMgdGhhdCBJIGNob29zZSB3ZXJlIENhbGlmb3JuaWEsIE5ldyBZb3JrLCBJbGxpbm9pcywgVGV4YXMsIGFuZCBOb3J0aCBEYWtvdGEuIFRoaXMgYWNjb3VudHMgZm9yIGFyb3VuZCA5MCBtaWxsaW9uIEFtZXJpY2FucyBvciBhcm91bmQgMzAuNiUgb2YgdGhlIHBvcHVsYXRpb24uIAoKSSdtIHByZWRpY3RpbmcgdGhhdCBnb3Zlcm5tZW50cyB0aGF0IHZpZXcgQ292aWQgYXMgdmVyeSBzZXJpb3VzIHdpbGwgZG8gbXVjaCBiZXR0ZXIgY29udHJvbGxpbmcgdGhlIHZpcnVzIHRoZW4gZ292ZXJubWVudHMgd2hvIHZpZXdlZCBpdCBhcyBsZXNzIHNlcmlvdXMgb3Igbm90IHRoYXQgYmlnIG9mIGFuIGlzc3VlLgoKYGBgIHtyLCBpbmNsdWRlPUZBTFNFfQpkYXRhY2FsaSA8LSByZWFkLmNzdigiRGVza3RvcC9jYWxpZm9ybmlhLWhpc3RvcnkuY3N2IiwgaGVhZGVyID1UKQpkYXRhbmV3eW9yayA8LSByZWFkLmNzdigiRGVza3RvcC9OZXd5b3JraGlzdG9yeS5jc3YiLCBoZWFkZXIgPSBUKQpkYXRhdGV4YXMgPC0gcmVhZC5jc3YoIkRlc2t0b3AvVGV4YXNoaXN0b3J5LmNzdiIsIGhlYWRlciA9IFQpCmRhdGFpbGxpbm9pcyA8LSByZWFkLmNzdigiRGVza3RvcC9pbGxpbm9pc2hpc3RvcnkuY3N2IixoZWFkZXIgPSBUKQpkYXRhTmQgPC0gcmVhZC5jc3YoIkRlc2t0b3AvTmRoaXN0b3J5LmNzdiIsIGhlYWRlciA9IFQpCmRhdGF3b3JsZHdpZGUgPC0gcmVhZC5jc3YoIkRlc2t0b3AvT1dJRENvdmlkRGF0YS5jc3YiLCBoZWFkZXIgPSBUKQpgYGAKCiMgQ2FsaWZvcm5pYSdzIENvdmlkIERhdGEKYGBgIHtyLCBpbmNsdWRlPVRSVUV9CgpkYXRhMmNhbGkgPC0gZmlsdGVyKGRhdGFjYWxpLCBkYXRhY2FsaSRzdGF0ZSA9PSAiQ0EiKSAlPiUgI0kgZG9udCB0aGluayB0aGlzIGZpbHRlciBpcyBuZWVkZWQsIGJ1dCBJIGhhZCBwcm9ibGVtcyB3aXRob3V0IGl0CiAgbXV0YXRlKGRhdGUgPSB5bWQoZGF0ZSkpCgpkYXRhMmNhbGkgJT4lIAogIGdncGxvdChhZXMoeD1kYXRlLCB5PXBvc2l0aXZlSW5jcmVhc2UpKSArIAogIGdlb21fcG9pbnQoKSsKICBnZW9tX2xpbmUoKSsKICBnZW9tX3Ntb290aCgpICsKICBzY2FsZV94X2RhdGUoYnJlYWtzID0gc2VxLkRhdGUoZnJvbSA9IGFzLkRhdGUoIjIwMjAtMDEtMDEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvID0gYXMuRGF0ZSgiMjAyMC0xMS0yNyIpLCBieSA9IDE1KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNzAsIHZqdXN0ID0gMC41LCBoanVzdCA9IDAuNSkpKwogIGdndGl0bGUoIkNhbGlmb3JuaWEncyByZXNwb25zZSB0byBjb3ZpZCIpICsKICB4bGFiKCJEYXRlIikgKyB5bGFiKCJDb3ZpZC0xOSBkYWlseSBuZXcgY2FzZXMiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCgojSSBoYWQgYSBsb3Qgb2YgcHJvYmxlbXMgd2l0aCB0aGUgZGF0ZXMgb24gdGhlIHgtYXhpcyBzbyBJIHVzZWQgdGhpcyB3ZWJzaXRlIGZvciBoZWxwIGh0dHBzOi8vY29tbXVuaXR5LnJzdHVkaW8uY29tL3QvdG9vLW1hbnktZGF0ZXMtaW4tcGxvdC82NjgyMAoKYGBgCgoKSW4gdGhlIGJlZ2lubmluZywgQ2FsaWZvcm5pYSB3YXMgb25lIG9mIHRoZSBmaXJzdCBzdGF0ZXMgdG8gaW1wb3NlIGEgc3RheS1hdC1ob21lIG9yZGVyIHdoaWNoIHdhcyBpc3N1ZWQgb24gTWFyY2ggMTksMjAyMC4gT24gRmVicnVhcnkgMTR0aCwgU2FuIERpZWdvIGNvdW50eSBkZWNsYXJlZCBhIHN0YXRlIG9mIGVtZXJnZW5jeS4gVGhpcyBlYXJseSBhY3Rpb24gaGVscGVkIG1pdGlnYXRlIHRoZSBjYXNlcyBlYXJseS4gT24gSnVuZSA1dGggYSBsb3Qgb2YgY291bnRpZXMgaW4gQ2FsaWZvcm5pYSBzdGFydGVkIHRvIG1vdmUgdG8gc3RhZ2UgMyB3aGljaCBtYXkgaGF2ZSBiZWVuIHRvbyBlYXJseSBhcyBieSBsYXRlIEp1bmUgdGhleSB3ZXJlIGFscmVhZHkgcm9sbGluZyBiYWNrIHN0YWdlIDMuCgojIE5ldyBZb3JrIENvdmlkIGRhdGEKYGBgIHtyLCBpbmNsdWRlPVRSVUV9CgpkYXRhMm55IDwtIGZpbHRlcihkYXRhbmV3eW9yaywgZGF0YW5ld3lvcmskc3RhdGUgPT0gIk5ZIikgJT4lCiAgbXV0YXRlKGRhdGUgPSB5bWQoZGF0ZSkpCgpkYXRhMm55ICU+JSAKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1wb3NpdGl2ZUluY3JlYXNlKSkgKyAKICBnZW9tX3BvaW50KCkrCiAgZ2VvbV9zbW9vdGgoKSArCiAgZ2VvbV9saW5lKCkrCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAwLjUpKSsKICBnZ3RpdGxlKCJOZXcgWW9yaydzIHJlc3BvbnNlIHRvIGNvdmlkIikgKwogIHhsYWIoIkRhdGVzIikgKyB5bGFiKCJDb3ZpZC0xOSBkYWlseSBuZXcgY2FzZXMiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCgoKYGBgCk5ldyBZb3JrIHdhcyBoaXQgdmVyeSBoYXJkIGVhcmx5IGFuZCB0aGVuIHNpbmNlIHRoZW4gaGFzIGJlZW4gZ29vZCBhYm91dCBrZWVwaW5nIHRoZWlyIENvdmlkIGNhc2VzIGxvdy4gQW5kcmV3IEN1b21vLHRoZSBHb3Zlcm5vciBvZiBOZXcgWW9yaywgZGVjbGFyZWQgYSBzdGF0ZSBvZiBlbWVyZ2VuY3kgb24gTWFyY2ggN3RoLiBOZXcgWW9yayB3YXMgb25lIG9mIHRoZSBmaXJzdCBzdGF0ZXMgaGl0IGhhcmQgYnkgQ292aWQgYW5kIGJlY2F1c2Ugb2YgdGhpcyBpdCBtYWRlIGEgbG90IG9mIGxvY2FsIHJlc2lkZW50cyBsZWF2ZSB0byBmaW5kIHNvbWV3aGVyZSBzYWZlciB0byBzdGF5IG9yIHJlc2lkZW50cyBzdGF5ZWQgaW4gYXQgaG9tZS4gTm93IHRoZXJlIGlzIGFuIGluY3JlYXNlIGluIGNhc2VzIGFnYWluLCB0aGlzIGlzIGxpa2VseSBkdWUgdG8gcGVvcGxlIGJlY29taW5nIG1vcmUgcmVsYXhlZCBvdmVyIHRpbWUgYW5kIGEgbG9uZ2luZyBmb3IgcHJlLUNvdmlkIHRpbWVzLgoKIyBUZXhhcyBDb3ZpZCBkYXRhCmBgYCB7ciwgaW5jbHVkZT1UUlVFfQoKZGF0YTJ0ZXhhcyA8LSBmaWx0ZXIoZGF0YXRleGFzLCBkYXRhdGV4YXMkc3RhdGUgPT0gIlRYIikgJT4lCiAgbXV0YXRlKGRhdGUgPSB5bWQoZGF0ZSkpCgpkYXRhMnRleGFzICU+JSAKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1wb3NpdGl2ZUluY3JlYXNlKSkgKyAKICBnZW9tX3BvaW50KCkrCiAgZ2VvbV9saW5lKCkrCiAgZ2VvbV9zbW9vdGgoKSArCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAwLjUpKSsKICBnZ3RpdGxlKCJUZXhhcydzIHJlc3BvbnNlIHRvIGNvdmlkIikgKwogIHhsYWIoIlRpbWUiKSArIHlsYWIoIkNvdmlkLTE5IGRhaWx5IG5ldyBjYXNlcyIpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKCgpgYGAKSW4gdGhlIGJlZ2lubmluZywgVGV4YXMgZGlkIHZlcnkgd2VsbC4gVGhlaXIgZ292ZXJub3IgZGVjbGFyZWQgYSBzdGF0ZSBvZiBkaXNhc3RlciBvbiBNYXJjaCAxM3RoLiBUaGV5IHdlcmUgc2FpZCB0byBiZSBpbiBvbmUgb2YgdGhlIGJlc3Qgc3RhdGVzIGZvciBsaW1pdGluZyB0aGUgc3ByZWFkIG9mIENvdmlkLiBXaGljaCBtYXkgYmUgc2VlbiBhcyBhIHBsdXMsIGJ1dCBpdCBtYXkgYWxzbyBnaXZlIHBlb3BsZSBhIGZhbHNlIHNlbnNlIG9mIHNlY3VyaXR5LiBJbiB0aGUgZW5kIG9mIEFwcmlsLCB0aGVyZSB3YXMgYSBzbGlnaHQgaW5jcmVhc2UgaW4gY2FzZXMsIGJldHdlZW4gTWF5IGFuZCBKdW5lIHRoZSBnb3Zlcm5tZW50IGxvb3NlbmVkIHVwIHJlc3RyaWN0aW9ucyBvbiBldmVyeXRoaW5nIHdoaWNoIGNvdWxkJ3ZlIGNvbnRyaWJ1dGVkIHRvIHRoZSByaXNlIG9mIGNhc2VzIGluIGxhdGUgc3VtbWVyLiBUaGUgZXh0cmVtZSBzcGlrZSBvZiBjYXNlcyBvbiBTZXB0ZW1iZXIgMTl0aCBpcyBkdWUgdG8gY291bnRpbmcgY2FzZXMgdGhhdCB3ZXJlIG5vdCBjb3VudGVkIGJlZm9yZS4gVGV4YXMgR292ZXJub3IgR3JlZyBBYmJvdHQgaW1wbGVtZW50ZWQgYSBzdGF5IGF0IGhvbWUgb3JkZXIgb24gTWFyY2ggMjZ0aCwgd2hpY2ggd2FzIHRoZW4gbGlmdGVkIGZvciB0aGUgZW50aXJlIHN0YXRlIG9uIEFwcmlsIDMwdGguIAoKIyBJbGxpbm9pcyBDb3ZpZCBkYXRhCmBgYCB7ciwgaW5jbHVkZT1UUlVFfQoKZGF0YTJpbCA8LSBmaWx0ZXIoZGF0YWlsbGlub2lzLCBkYXRhaWxsaW5vaXMkc3RhdGUgPT0gIklMIikgJT4lCiAgbXV0YXRlKGRhdGUgPSB5bWQoZGF0ZSkpCgpkYXRhMmlsICU+JSAKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1wb3NpdGl2ZUluY3JlYXNlKSkgKyAKICBnZW9tX3BvaW50KCkrCiAgZ2VvbV9saW5lKCkrCiAgZ2VvbV9zbW9vdGgoKSArCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAwLjUpKSsKICBnZ3RpdGxlKCJJbGxpbm9pcycgcmVzcG9uc2UgdG8gY292aWQiKSArCiAgeGxhYigiVGltZSIpICsgeWxhYigiQ292aWQtMTkgZGFpbHkgbmV3IGNhc2VzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQoKCmBgYApJbGxpbm9pcyBkaWQgYSBkZWNlbnQgam9iIGluIHRoZSBiZWdpbm5pbmcgb2Yga2VlcGluZyB0aGUgdmlydXMgdW5kZXIgY29udHJvbC4gSW4gSWxsaW5vaXMsIDkuNSBvdXQgb2YgdGhlIDEyLjYgbWlsbGlvbiBwZW9wbGUgbGl2ZSBpbiBDaGljYWdvIG9yIGluIHRoZSBzdWJ1cmJzIG9mIENoaWNhZ28gc28gbW9zdCBvZiB0aGUgY2FzZXMgYXJlIHJlbGF0ZWQgdG8gdGhpcyBhcmVhLiBPbiBNYXJjaCA5LCBHb3Zlcm5vciBKLkIuIFByaXR6a2VyIGlzc3VlZCBhIHN0YXRlIG9mIGVtZXJnZW5jeS4gVGhlbiBvbiBNYXJjaCAyMHRoIGhlIGlzc3VlZCBhIHN0YXkgYXQgaG9tZSBvcmRlciwgdGhlIHN0YXkgYXQgaG9tZSBvcmRlciB3YXMgZXh0ZW5kZWQgdGhyb3VnaCBNYXkgMjFzdCB3aGljaCBpcyBhIG1ham9yIGNvbnRyaWJ1dG9yIHRvIHdoeSBjYXNlcyByZW1pbmRlZCBzbyBsb3cgZHVyaW5nIHRoZSBzdW1tZXIuIFNpbWlsYXJseSB0byBOZXcgWW9yayBJIHRoaW5rIGNhc2VzIGFyZSByaXNpbmcgYWdhaW4gYmVjYXVzZSBwZW9wbGUgYXJlIGJlY29taW5nIG1vcmUgcmVsYXhlZCB3aXRoIHdoYXQgdGhleSBuZWVkIHRvIGJlIGRvaW5nIHRvIGJlIHNhZmUuIEFkZGl0aW9uYWxseSwgaW4gc3RhdGVzIGxpa2UgTmV3IFlvcmsgYW5kIElsbGlub2lzIHdoaWNoIGhhdmUgaW50ZW5zZSBjb2xkIHdpbnRlcnMgdGhlIHdpbnRlciBjb3VsZCBiZSB2ZXJ5IGRhbmdlcm91cyBmb3IgcGVvcGxlIHRoZXIgYmVjYXVzZSBpdCBkcml2ZXMgcGVvcGxlIGluc2lkZSBhbmQgc2VlbXMgdG8gYm9vc3QgdHJhbnNtaXNzaW9uLgoKIyBOb3J0aCBEYWtvdGEgQ292aWQgRGF0YQpgYGAge3IsIGluY2x1ZGU9VFJVRX0KCmRhdGEyTmQgPC0gZmlsdGVyKGRhdGFOZCwgZGF0YU5kJHN0YXRlID09ICJORCIpICU+JQogIG11dGF0ZShkYXRlID0geW1kKGRhdGUpKQoKZGF0YTJOZCAlPiUgCiAgZ2dwbG90KGFlcyh4PWRhdGUsIHk9cG9zaXRpdmVJbmNyZWFzZSkpICsgCiAgZ2VvbV9wb2ludCgpKwogIGdlb21fbGluZSgpKwogIGdlb21fc21vb3RoKCkgKwogIHNjYWxlX3hfZGF0ZShicmVha3MgPSBzZXEuRGF0ZShmcm9tID0gYXMuRGF0ZSgiMjAyMC0wMS0wMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPSBhcy5EYXRlKCIyMDIwLTExLTI3IiksIGJ5ID0gMTUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA3MCwgdmp1c3QgPSAwLjUsIGhqdXN0ID0gMC41KSkrCiAgZ2d0aXRsZSgiTm9ydGggRGFrb3RhcycgcmVzcG9uc2UgdG8gY292aWQiKSArCiAgeGxhYigiVGltZSIpICsgeWxhYigiQ292aWQtMTkgZGFpbHkgbmV3IGNhc2VzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQoKCmBgYApOb3J0aCBEYWtvdGEncyByZXNwb25zZSB0byBDb3ZpZCB3YXMgcHJldHR5IHN0cm9uZywgZXNwZWNpYWxseSBmb3IgYmVpbmcgYSBjb2xkZXIgc3RhdGUgdGhleSBkaWQgYSBnb29kIGpvYiBrZWVwaW5nIHRoZSB2aXJ1cyB1bmRlciBjb250cm9sIGluIHRoZSBiZWdpbm5pbmcuIFBhcnQgb2YgdGhlIHJlYXNvbiBmb3IgbG93IGNhc2VzIHdhcyBjb3VsZCBiZSB0aGVpciBwb3B1bGF0aW9uIGlzIHVuZGVyIDEgbWlsbGlvbi4gQ29tcGFyZWQgdG8gbW9zdCBvdGhlciBzdGF0ZXMgTm9ydGggRGFrb3RhIGNhc2VzIGhhdmUgYmVlbiByZWxhdGl2ZWx5IGxvdy4gUmVjZW50bHkgd2l0aGluIHRoZSBwYXN0IG1vbnRoIHRoZXkgaGF2ZSBoYWQgYW4gaW5jcmVhc2UgaW4gY2FzZXMsIHdoaWNoIEkgdGhpbmsgY291bGQgaGF2ZSBiZWVuIG1pdGlnYXRlZCB3aXRoIGEgc3RheS1hdC1ob21lIG9yZGVyLiBUaGUgZ292ZXJub3Igb2YgTm9ydGggRGFrb3RhLCBEb3VnIEJ1cmd1bSwgYWxzbyBjb250cmlidXRlZCB0byB0aGUgcmlzZSBvZiBjYXNlcyByZWNlbnRseS4gRm9yIG1vbnRocyBoZSBoYXMgcmVzaXN0ZWQgaXNzdWluZyBhIG1hbmRhdGUgZm9yIG1hc2tzIHRvIGJlIHdvcm0gc3RhdGV3aWRlLiBPbiBOb3ZlbWJlciA5dGgsIEdvdmVybm9yIEJ1cmd1bSBhbm5vdW5jZWQgdGhhdCBhbGwgdGhlIGhvc3BpdGFscyB0aHJvdWdob3V0IHRoZSBzdGF0ZSB3ZXJlIGF0IDEwMCUgY2FwYWNpdHksIHRoZW4gb24gTm92ZW1iZXIgMTN0aCBoZSBtYWRlIGEgc3RhdGUgd2lkZSBtYW5kYXRlIHRvIHdlYXIgdGhlIG1hc2sgd2hpY2ggd2hpbGUgaXQgd2lsbCBzdGlsbCBiZSBlZmZlY3RpdmUgd2lsbCBzaG91bGQndmUgb2NjdXJyZWQgZWFybGllci4KCiMgTmV3IFplYWxhbmRzIENvdmlkIERhdGEKYGBgIHtyLCBpbmNsdWRlPVRSVUV9CmRhdGEyTlogPC0gZmlsdGVyKGRhdGF3b3JsZHdpZGUsIGxvY2F0aW9uID09ICJOZXcgWmVhbGFuZCIpICU+JQogIG11dGF0ZShkYXRlID0geW1kKGRhdGUpKQoKZGF0YTJOWiAlPiUKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1uZXdfY2FzZXMpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9zbW9vdGgoKSArCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAuNSkpKwogIGdndGl0bGUoIk5ldyBaZWFsYW5kJ3MgcmVzcG9uc2UgdG8gY292aWQiKSArCiAgeGxhYigiRGF0ZXMiKSArIHlsYWIoIkNvdmlkLTE5IGRhaWx5IG5ldyBjYXNlcyIpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKCgpgYGAKTmV3IFplYWxhbmRzIHJlc3BvbnNlIHRvIGNvdmlkIGhhcyBiZWVuIG9uZSBvZiB0aGUgYmVzdCBpbiB0aGUgd29ybGQuIEJlc2lkZXMgYW4gb3V0YnJlYWsgYXJvdW5kIE1hcmNoIGFuZCBBcHJpbCBOZXcgWmVhbGFuZCBoYXMgYmVlbiBhYmxlIHRvIGtlZXAgdGhlaXIgZGFpbHkgbmV3IGNhc2VzIHVuZGVyIDI1LiBPbiBGZWJydWFyeSAzcmQsIHRoZSBOZXcgWmVhbGFuZCBHb3Zlcm5tZW50IHN0YXJ0ZWQgaW1wbGVtZW50aW5nIHRyYXZlbCBiYW5zIHBlcm1pdHRpbmcgb25seSBOZXcgWmVhbGFuZCByZXNpZGVudHMsIHBlcm1hbmVudCByZXNpZGVudHMgYW5kIGZhbWlseSB0byBlbnRlci4gT24gTWFyY2ggMTR0aCwgdGhleSBzdGFydGVkIHNodXR0aW5nIGRvd24gcHVibGljIGV2ZW50cyBhbmQgdGhleSByZWxlYXNlZCBhIGNvbXByZWhlbnNpdmUgbGV2ZWwgc3lzdGVtIHRvIGRlYWwgd2l0aCB0aGUgdmlydXMuIE9uIE1hcmNoIDIxc3QsIHRoZXkgbW92ZWQgdG8gbGV2ZWwgMiB3aGljaCBtZWFucyB0aGF0IGlmIHlvdSBhcmUgb3ZlciA3MCBvciBoYXZlIGEgY29tcHJvbWlzZWQgaW1tdW5lIHN5c3RlbSB5b3Ugd2VyZSBhc2tlZCB0byBzdGF5IGhvbWUuIFRoZSBOZXcgWmVhbGFuZCBnb3Zlcm5tZW50IGNsZWFybHkgdG9vayBjb3JvbmF2aXJ1cyB2ZXJ5IHNlcmlvdXNseSBhcyB0aGV5IHN0YXJ0ZWQgaW1wbGVtZW50aW5nIHRoZWlyIHRyYXZlbCBiYW5zIEZlYnJ1YXJ5IDNyZCB3aGljaCB3YXMgZXh0cmVtZWx5IGVhcmx5IGNvbXBhcmVkIHRvIHRoZSByZXN0IG9mIHRoZSB3b3JsZC4gCgojIFN3ZWRlbiBDb3ZpZCBkYXRhCmBgYHtyLCBpbmNsdWRlPVRSVUV9CgoKZGF0YXN3ZWRlbiA8LSBmaWx0ZXIoZGF0YXdvcmxkd2lkZSwgbG9jYXRpb24gPT0gIlN3ZWRlbiIpICU+JSAKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSkKCmRhdGFzd2VkZW4gJT4lCiAgZ2dwbG90KGFlcyh4PWRhdGUsIHk9bmV3X2Nhc2VzKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fc21vb3RoKCkgKwogIHNjYWxlX3hfZGF0ZShicmVha3MgPSBzZXEuRGF0ZShmcm9tID0gYXMuRGF0ZSgiMjAyMC0wMS0wMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPSBhcy5EYXRlKCIyMDIwLTExLTI3IiksIGJ5ID0gMTUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA3MCwgdmp1c3QgPSAwLjUsIGhqdXN0ID0gLjUpKSsKICBnZ3RpdGxlKCJTd2VkZW4ncyByZXNwb25zZSB0byBjb3ZpZCIpICsKICB4bGFiKCJEYXRlcyIpICsgeWxhYigiQ292aWQtMTkgZGFpbHkgbmV3IGNhc2VzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQoKCgpgYGAKU3dlZGVuJ3MgdW5pcXVlIHJlc3BvbnNlIHRvIENvdmlkIHdhcyB3aHkgSSBjaG9vc2UgdG8gbG9vayBhdCB0aGVtLiBBdCBubyBwb2ludCBoYXZlIHRoZXkgaXNzdWVkIGEgc3RheS1hdC1ob21lIG9yZGVyLCBvciBjbG9zZWQgZG93biBhbnkgb2YgdGhlaXIgYmFycyxyZXN0YXVyYW50cyxzYWxvbnMsIGd5bXMsIG9yIHB1YmxpYyB0cmFuc3BvcnQuIE9uIEp1bmUgNXRoLCBpdCB3YXMgcmVjb21tZW5kZWQgYnkgdGhlIFdvcmxkIEhlYWx0aCBPcmdhbml6YXRpb24gdG8gd2VhciBtYXNrcyB3aGVuZXZlciBpbiBwdWJsaWMgYW5kIGZvbGxvd2luZyB0aGF0IG1vcmUgcGVvcGxlIGluIFN3ZWRlbiBzdGFydGVkIHdlYXJpbmcgbWFza3MuIFRoZXJlIHdhcyBhIHNtYWxsIHNwaWtlIGluIGNhc2VzIGluIHRoZSBlbmQgb2YgSnVuZSwgYnV0IGl0IHdlbnQgZG93biBwcmV0dHkgZmFzdCBtb3N0IGxpa2VseSBkdWUgdG8gdGhlIG1hc2tzLiBUaHJvdWdob3V0IHRoZSBwYW5kZW1pYyBTd2VkZW4gd2FzIHNwcmVhZGluZyBzYWZldHkgcnVsZXMgbGlrZSB3ZWFyaW5nIGEgZmFjZW1hc2sgYW5kIHNvY2lhbCBkaXN0YW5jaW5nIG9mIDEuNSBtZXRlcnMuCgojIENoaW5hIENvdmlkIGRhdGEKYGBge3IsIGluY2x1ZGU9VFJVRX0KCgpkYXRhY2hpbmEgPC0gZmlsdGVyKGRhdGF3b3JsZHdpZGUsIGxvY2F0aW9uID09ICJDaGluYSIpICU+JSAKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSkKCmRhdGFjaGluYSAlPiUKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1uZXdfY2FzZXMpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9zbW9vdGgoKSArCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAuNSkpKwogIGdndGl0bGUoIkNoaW5hJ3MgcmVzcG9uc2UgdG8gY292aWQiKSArCiAgeGxhYigiRGF0ZXMiKSArIHlsYWIoIkNvdmlkLTE5IGRhaWx5IG5ldyBjYXNlcyIpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkKCgoKYGBgClNpbmNlIENvdmlkLTE5IHN0YXJ0ZWQgaW4gQ2hpbmEsIEkgaGFkIHRvIGNob29zZSBpdCBhcyBhIGNvdW50cnkgZXZhbHVhdGUuIEZyb20gdGhlIG51bWJlcnMgdGhhdCBDaGluYSByZXBvcnRzIGl0IHNlZW1zIHRoYXQgdGhleSBoYXZlIGJlZW4gZG9pbmcgcmVhbGx5IHdlbGwgd2l0aCBjYXNlcyByZWNlbnRseS4gVGhleSBoYWQgYSBtYWpvciBvdXRicmVhayBhdCB0aGUgc3RhcnQgb2YgMjAyMCB3aGljaCB0aGV5IG1pdGlnYXRlZCBieSBwbGFjaW5nIGEgc3RyaWN0IHN0YXktYXQtaG9tZSBvcmRlciwgYWRkaXRpb25hbGx5IHRoZXkgaGFkIGNvbnN0YW50IHRlbXBlcmF0dXJlIGNoZWNrcyB0aHJvdWdoIG1vc3QgcHVibGljIHBsYWNlcy4gQW5vdGhlciB0aGluZyB0aGF0IHRoZXkgZGlkIHdhcyBoYXZlIGJsZWFjaCB0cnVja3MgYW5kIHNhbml0YXRpb24gdGVhbXMgZ28gdGhyb3VnaG91dCBXdWhhbiBhbmQgbWFqb3IgcG9wdWxvdXMgYXJlYXMgY2xlYW5pbmcuIFRoZSBDaGluZXNlIGdvdmVybm1lbnQgZGVmaW5pdGVseSByZWFsaXplZCBDb3ZpZCB3YXMgdmVyeSBkYW5nZXJvdXMgYW5kIG5lZWRlZCB0byBiZSBrZXB0IHVuZGVyIGNvbnRyb2wuIFRoZSBleHRyZW1lIHNwaWtlIGluIGNhc2VzIHdhcyBvbiBGZWJydWFyeSAxMnRoLiBJdCBpcyBiZWxpZXZlZCB0aGF0IHRoZSBzcGlrZSB3YXMgZHVlIHRvIHNvIG1hbnkgcHJpb3IgY2FzZXMgbm90IGJlIHJlcG9ydGVkIGFuZCBjb3VudGVkLgoKIyBHZXJtYW55IENvdmlkIGRhdGEKYGBge3IsIGluY2x1ZGU9VFJVRX0KCgpkYXRhZ2VybWFueSA8LSBmaWx0ZXIoZGF0YXdvcmxkd2lkZSwgbG9jYXRpb24gPT0gIkdlcm1hbnkiKSAlPiUgCiAgbXV0YXRlKGRhdGUgPSB5bWQoZGF0ZSkpCgpkYXRhZ2VybWFueSAlPiUKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1uZXdfY2FzZXMpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9zbW9vdGgoKSArCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAuNSkpKwogIGdndGl0bGUoIkdlcm1hbnkncyByZXNwb25zZSB0byBjb3ZpZCIpICsKICB4bGFiKCJEYXRlcyIpICsgeWxhYigiQ292aWQtMTkgZGFpbHkgbmV3IGNhc2VzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQoKCgpgYGAKR2VybWFueSdzIHJlc3BvbnNlIHRvIENvdmlkIGluIHRoZSBiZWdpbm5pbmcgd2FzIHdlYWsuIE9uIEphbnVhcnkgMjIsIDIwMjAsIHRoZSBHZXJtYW4gZ292ZXJubWVudCBzYWlkIENvdmlkIHdhcyAiZmFyIGxlc3MgZGFuZ2Vyb3VzIiB0aGVuIFNBUlMgYW5kIHRoYXQgaXQgd2FzIGEgdmVyeSBsb3cgcmlzay4gVGhlbiBvbiBNYXJjaCAzMXN0LCB0aGUgZmlyc3QgbWFqb3IgR2VybWFuIGNpdHkgYW5ub3VuY2VkIGEgbWFuZGF0ZSBmb3IgZXZlcnlvbmUgdG8gd2VhciBtYXNrcy4gVGhpcyBraW5kIG9mIGRlbGF5ZWQgcmVhY3Rpb25zIGFuZCB1bmF3YXJlIGdvdmVybm1lbnQgb2ZmaWNhbHMgbW9zdCBsaWtlbHkgaGVscGVkIGNvbnRyaWJ1dGUgdG8gdGhlIGZpcnN0IHNwaWtlLiAKCiMgU291dGggS29yZWEgQ292aWQgRGF0YQpgYGB7ciwgaW5jbHVkZT1UUlVFfQoKCmRhdGFTSyA8LSBmaWx0ZXIoZGF0YXdvcmxkd2lkZSwgbG9jYXRpb24gPT0gIlNvdXRoIEtvcmVhIikgJT4lIAogIG11dGF0ZShkYXRlID0geW1kKGRhdGUpKQoKZGF0YVNLICU+JQogIGdncGxvdChhZXMoeD1kYXRlLCB5PW5ld19jYXNlcykpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fbGluZSgpICsKICBnZW9tX3Ntb290aCgpICsKICBzY2FsZV94X2RhdGUoYnJlYWtzID0gc2VxLkRhdGUoZnJvbSA9IGFzLkRhdGUoIjIwMjAtMDEtMDEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvID0gYXMuRGF0ZSgiMjAyMC0xMS0yNyIpLCBieSA9IDE1KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNzAsIHZqdXN0ID0gMC41LCBoanVzdCA9IC41KSkrCiAgZ2d0aXRsZSgiU291dGggS29yZWEncyByZXNwb25zZSB0byBjb3ZpZCIpICsKICB4bGFiKCJEYXRlcyIpICsgeWxhYigiQ292aWQtMTkgZGFpbHkgbmV3IGNhc2VzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQoKCgpgYGAKU291dGggS29yZWEncyByZXNwb25zZSB0byBDb3ZpZCB3YXMgYWxzbyB2ZXJ5IGdvb2QuIFNvdXRoIEtvcmVhIHdhcyBvbmUgb2YgdGhlIGZldyBjb3VudHJpZXMgdG8gbGltaXQgdGhlIHNwcmVhZCBvZiBDb3ZpZCB3aXRob3V0IGNsb3NpbmcgYnVzaW5lc3NlcyBvciBpc3N1aW5nIHN0YXktYXQtaG9tZSBvcmRlcnMgbGlrZSBsb3RzIG9mIG90aGVyIHdlYWx0aHkgY291bnRyaWVzLiBTb3V0aCBLb3JlYSB3YXMgYWJsZSB0byBkbyB0aGlzIGJlY2F1c2UgdGhlIGdvdmVybm1lbnQgdG9vayBhIHZlcnkgc2VyaW91cyBhcHByb2FjaCB0byBpdC4gVGhlIGdvdmVybm1lbnQgd29ya2VkIGNsb3NlbHkgd2l0aCB0aGUgbWVkaWNhbCBwcml2YXRlIHNlY3RvciB0byBidWlsZCBodW5kcmVkcyBvZiBzY3JlZW5pbmcgYW5kIHRlc3RpbmcgZmFjaWxpdGllcyBhY3Jvc3MgdGhlIGNvdW50cnkuIFRoZXJlIHdlcmUgYXJvdW5kIDYwMCB0ZXN0aW5nIGZhY2lsaXRpZXMgY29uc3RydWN0ZWQgd2hpY2ggd2VyZSBhYmxlIHRvIGRvIGJldHdlZW4gMTUsMDAwIGFuZCAyMCwwMDAgdGVzdHMgYSBkYXkuIE5vdCBvbmx5IGRpZCB0aGV5IGhhdmUgdmFzdGx5IGluY3JlYXNlZCB0ZXN0aW5nLCBidXQgdGhleSBhbHNvIGhhZCBpbmNyZWRpYmxlIGNvbnRhY3QgdHJhY2luZy4gVGhlcmUgd2VyZSBodW5kcmVkcyBvZiB3b3JrZXJzIHdobyB3ZXJlIHRhc2tlZCB3aXRoIGNvbnRhY3QgdHJhY2luZyBhbmQgd2VyZSBnaXZlbiBhY2Nlc3MgdG8gY3JlZGl0IGNhcmQgdHJhbnNhY3Rpb25zIGFuZCBjbG9zZWQtY2lyY3VpdCB0ZWxldmlzaW9uIGZvb3RhZ2UuIElmIGNvbXBhcmluZyBTb3V0aCBLb3JlYSB0byBDYWxpZm9ybmlhLCBTb3V0aCBLb3JlYSBoYXMgMTEgbWlsbGlvbiBtb3JlIGNpdGl6ZW5zIHRoYW4gQ2FsaWZvcm5pYSB5ZXQgdGhlaXIgZGFpbHkgQ292aWQgY2FzZXMgaGF2ZSBub3QgcmVhY2hlZCAxMDAwLiBDb21wYXJlZCB0byBDYWxpZm9ybmlhIHdoZXJlIHRoZSBsYXN0IHRpbWUgdGhleSB3ZXJlIHVuZGVyIDEwMDAgZGFpbHkgY2FzZXMgd2FzIEFwcmlsIDE5dGguIFRoaXMgc2hvd3MgaG93IGRpZmZlcmVudCBnb3Zlcm5tZW50cyByZWFjdGlvbnMgaGF2ZSBkaWZmZXJlbnQgb3V0Y29tZXMuCgojIE5pZ2VyaWEgQ292aWQgRGF0YQpgYGB7ciwgaW5jbHVkZT1UUlVFfQoKCmRhdGFOaWdlcmlhIDwtIGZpbHRlcihkYXRhd29ybGR3aWRlLCBsb2NhdGlvbiA9PSAiTmlnZXJpYSIpICU+JSAKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSkKCmRhdGFOaWdlcmlhICU+JQogIGdncGxvdChhZXMoeD1kYXRlLCB5PW5ld19jYXNlcykpICsKICBnZW9tX3BvaW50KCkgKwogIGdlb21fbGluZSgpICsKICBnZW9tX3Ntb290aCgpICsKICBzY2FsZV94X2RhdGUoYnJlYWtzID0gc2VxLkRhdGUoZnJvbSA9IGFzLkRhdGUoIjIwMjAtMDEtMDEiKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvID0gYXMuRGF0ZSgiMjAyMC0xMS0yNyIpLCBieSA9IDE1KSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNzAsIHZqdXN0ID0gMC41LCBoanVzdCA9IC41KSkrCiAgZ2d0aXRsZSgiTmlnZXJpYSdzIHJlc3BvbnNlIHRvIGNvdmlkIikgKwogIHhsYWIoIkRhdGVzIikgKyB5bGFiKCJDb3ZpZC0xOSBkYWlseSBuZXcgY2FzZXMiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCgoKCmBgYApOaWdlcmlhIGhhcyBkb25lIHByZXR0eSB3ZWxsIHdpdGggQ292aWQtMTkuIFRoZXJlIGRhaWx5IGNhc2VzIGhhdmUgc28gZmFyIG5ldmVyIHJlYWNoZWQgMTAwMCB3aGljaCBpcyByZWFsbHkgZ29vZC4gTmlnZXJpYSBoYXMgYmVlbiBsZXR0aW5nIGRpZmZlcmVudCBzdGF0ZSBnb3Zlcm5tZW50cyBkZWNpZGUgd2hhdCB0byBkbyBmb3IgdGhlaXIgcGVvcGxlLiBNYXJjaCB0aHJvdWdoIEp1bmUgbW9zdCBvZiB0aGUgc3RhdGVzIHdlbnQgaW50byBhIGxvY2tkb3duIGF0IHNvbWUgcG9pbnQuIFRoZSBnb3Zlcm5tZW50IGFsc28gaW1wb3NlZCBhIGN1cmZldyBmcm9tIDggcC5tLiB0byA2IGEubS4gd2hpY2ggbGFzdGVkIDQgd2Vla3MgZnJvbSBBcHJpbCB0byBNYXkuCgojIEJyYXppbCBDb3ZpZCBEYXRhCmBgYHtyLCBpbmNsdWRlPVRSVUV9CgoKZGF0YWJyYXppbCA8LSBmaWx0ZXIoZGF0YXdvcmxkd2lkZSwgbG9jYXRpb24gPT0gIkJyYXppbCIpICU+JSAKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSkKCmRhdGFicmF6aWwgJT4lCiAgZ2dwbG90KGFlcyh4PWRhdGUsIHk9bmV3X2Nhc2VzKSkgKwogIGdlb21fcG9pbnQoKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fc21vb3RoKCkgKwogIHNjYWxlX3hfZGF0ZShicmVha3MgPSBzZXEuRGF0ZShmcm9tID0gYXMuRGF0ZSgiMjAyMC0wMS0wMSIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gPSBhcy5EYXRlKCIyMDIwLTExLTI3IiksIGJ5ID0gMTUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA3MCwgdmp1c3QgPSAwLjUsIGhqdXN0ID0gLjUpKSsKICBnZ3RpdGxlKCJCcmF6aWwncyByZXNwb25zZSB0byBjb3ZpZCIpICsKICB4bGFiKCJEYXRlcyIpICsgeWxhYigiQ292aWQtMTkgZGFpbHkgbmV3IGNhc2VzIikrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKQoKCgpgYGAKQnJhemlsIGlzIGFuIGV4YW1wbGUgb2Ygd2h5IGdvdmVybm1lbnRzIG5lZWQgdG8gdmlldyBDb3ZpZCBhcyBzZXJpb3VzIGFuZCBmaWd1cmUgb3V0IHdheXMgb2YgaG93IHRvIGRlYWwgd2l0aCBpdCBwcm9wZXJseS4gT24gNnRoIG9mIE1hcmNoLCBQcmVzaWRlbnQgSmFpciBCb2xzb25hcm8gYWR2aXNlZCB0byBzdHJpY3RseSBmb2xsb3cgdGhlIGV4cGVydHMgcmVjb21tZW5kYXRpb25zLiBUaGVuIGEgbW9udGggbGF0ZXIgb24gdGhlIDE2dGggb2YgQXByaWwgaGUgZmlyZWQgaGlzIE1pbmlzdGVyIG9mIEhlYWx0aCBvdmVyIGRpc2FncmVlbWVudHMgd2l0aCB0aGUgUHJlc2lkZW50IGFib3V0IHNvY2lhbCBkaXN0YW5jaW5nIGd1aWRlbGluZXMgYW5kIHdoZW4gc3RvcmVzIHNob3VsZCBvcGVuIGFnYWluLiBBdCB0aGlzIHBvaW50LCBjYXNlcyBzdGFydGVkIHRvIHJpc2UgYWdhaW4uIE5lbHNvbiBUZWljaCB3aG8gd2FzIGFwcG9pbnRlZCB0byByZXBsYWNlIHRoZSB0aGUgTWluaXN0ZXIgb2YgSGVhbHRoIHdhcyBzb29uIGFwcG9pbnRlZC4gT24gTWF5IDE1dGgsIGxlc3MgdGhlbiBhIG1vbnRoIGFmdGVyIGhlIHdhcyBhcHBvaW50ZWQsIFRlaWNoIHJlc2lnbmVkLiBIZSBjaXRlZCBzaW1pbGFyIHJlYXNvbnMgYXMgaGlzIHByZWRlY2Vzc29yIGZvciB3YW50aW5nIHRvIGxlYXZlLCBoZSBmb3VnaHQgd2l0aCB0aGUgcHJlc2lkZW50IG9uIHNvY2lhbCBkaXN0YW5jaW5nIGd1aWRlbGluZXMsIHRoZSB1c2Ugb2YgaHlkcm94eWNobG9yb3F1aW5lKEEgbWVkaWNhdGlvbiB1c2VkIHRvIHRyZWF0IE1hbGFyaWEpLCBhbmQgYmVpbmcgb3ZlcnJ1bGVkIG9uIHJ1bGVzIHRoYXQgaGlzIHBvc2l0aW9uIGRlY2lkZWQuIEJlY2F1c2UgUHJlc2lkZW50IEJvbHNvbmFybyBkaWRuJ3QgbGlzdGVuIHRvIGhpcyBlaXRoZXIgb2YgaGlzIE1pbmlzdGVycyBvZiBIZWFsdGggYW5kIGZvdWdodCB3aXRoIHdoYXQgaGUgZWFybHkgYWR2aXNlZCwgaGUgY3JlYXRlZCBhIHdvcnNlIG91dGJyZWFrIGluIEJyYXppbC4KCgojIFRoZSBVbml0ZWQgU3RhdGVzCmBgYHtyLCBpbmNsdWRlPVRSVUV9CgoKZGF0YVVTIDwtIGZpbHRlcihkYXRhd29ybGR3aWRlLCBsb2NhdGlvbiA9PSAiVW5pdGVkIFN0YXRlcyIpICU+JSAKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSkKCmRhdGFVUyAlPiUKICBnZ3Bsb3QoYWVzKHg9ZGF0ZSwgeT1uZXdfY2FzZXMpKSArCiAgZ2VvbV9wb2ludCgpICsKICBnZW9tX2xpbmUoKSArCiAgZ2VvbV9zbW9vdGgoKSArCiAgc2NhbGVfeF9kYXRlKGJyZWFrcyA9IHNlcS5EYXRlKGZyb20gPSBhcy5EYXRlKCIyMDIwLTAxLTAxIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byA9IGFzLkRhdGUoIjIwMjAtMTEtMjciKSwgYnkgPSAxNSkpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDcwLCB2anVzdCA9IDAuNSwgaGp1c3QgPSAuNSkpKwogIGdndGl0bGUoIlVuaXRlZCBTdGF0ZSdzIHJlc3BvbnNlIHRvIGNvdmlkIikgKwogIHhsYWIoIkRhdGVzIikgKyB5bGFiKCJDb3ZpZC0xOSBkYWlseSBuZXcgY2FzZXMiKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gY29tbWEpCgoKYGBgCk91dCBvZiBhbGwgdGhlIGNvdW50cmllcywgdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIGhhZCB0aGUgbW9zdCBDb3ZpZCBjYXNlcy4gVGhlcmUgYXJlIHZhcmlvdXMgY29udHJpYnV0aW5nIGZhY3RvcnMgZm9yIHdoeSB3ZSBoYXZlIHRoZSBtb3N0IGNhc2VzIGxpa2UgaW5jcmVhc2VkIHRlc3RpbmcsIG9yIHRoYXQgb3VyIGNvdW50cnkgaGFzIGhpZ2hlciBwb3B1bGF0aW9uLCBidXQgcmVnYXJkbGVzcyBpdCBpcyBhcHBhcmVudCB0aGF0IHdlIGhhdmUgbm90IGRvbmUgYSBnb29kIGpvYiBtYW5hZ2luZyB0aGUgdmlydXMuIEJlY2F1c2UgdGhlIFVTIGlzIHNvIGxhcmdlIG1vc3Qgb2YgdGhlIENvdmlkIGRlY2lzaW9ucyBhcmUgZGVjaWRlZCBieSBjaXR5IG9yIHN0YXRlIGdvdmVybm1lbnRzLiBUaGlzIG1ha2VzIGl0IHRyaWNreSB0byBsb29rIGF0IHdoYXQgZmFjdG9ycyBtYXkgaGF2ZSBpbmZsdWVuY2VkIHRoZSBzcHJlYWQgb2YgQ292aWQuIEEgZGVmaW5pdGUgY29udHJpYnV0aW5nIGZhY3RvciB0aG91Z2ggd2FzIG91ciBQcmVzaWRlbnQncyBsZXZlbCBvZiBzZXJpb3VzbmVzcyB0aHJvdWdob3V0IHRoZSBwYW5kZW1pYyBhbmQgaW5jb25zaXN0ZW50IG1lc3NhZ2luZy4gUHJlc2lkZW50IFRydW1wIGhhcyBsaWtlbHkgbmVnYXRpdmVseSBpbmZsdWVuY2VkIHBlb3BsZSdzIGFjdGlvbnMgdW5oZWFsdGhpbHkgdGhyb3VnaCBoaXMgYmFkIGhhYml0cyBhcyBoZSB3YXMgcGhvdG9ncmFwaGVkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzdW1tZXIgbm90IHdlYXJpbmcgYSBtYXNrLkhlIGhhcyBhbHNvIG1hZGUgZnVuIG9mIFByZXNpZGVudC1lbGVjdCBCaWRlbiBmb3Igd2VhcmluZyBhIG1hc2suIERvaW5nIHRoaXMgc2hvd3MgdGhhdCBoZSBpcyBub3QgdmVyeSB3b3JyaWVkIGFib3V0IENvdmlkLiBIZSBnYXZlIGVhY2ggR292ZXJub3IgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIGRlY2lkZSBvbiBob3cgdG8gbWFuYWdlIENvdmlkIGluIHRoZWlyIHN0YXRlLiBXaGlsZSB0aGlzIHdvcmtzIGZvciBzb21lIHN0YXRlcyB0aGVyZSBhcmUgYWxzbyBnb3Zlcm5vcnMgd2hvIGRvbid0IG9yIGRpZG4ndCB2aWV3IENvdmlkIGFzIHZlcnkgc2VyaW91cyB3aGljaCBjb3VsZCBjYXVzZSBwcm9ibGVtcy4gIAoKVGhpcyBoYXMgbmVnYXRpdmVseSBhZmZlY3RlZCB0aGUgVVMsIGJ1dCBpdCBwcm92ZXMgbXkgaHlwb3RoZXNpcy4gQXMgSSBoYXZlIHNob3duIGFuZCBleHBsYWluZWQgYWJvdmUgdGhlIG1vcmUgYSBjb3VudHJ5IHZpZXdzIENvdmlkLTE5IGFzIGRhbmdlcm91cyB0aGUgYmV0dGVyIHRoZXkgZG8gaW4gZmlnaHRpbmcgdGhlIHNwcmVhZC4gR3JlYXQgZXhhbXBsZXMgb2YgdGhpcyBhcmUgTmV3IFplYWxhbmQsIFNvdXRoIEtvcmVhLCBOaWdlcmlhLCBhbmQgQ2hpbmEgKGlmIHRoZWlyIHJlY2VudCBuZXcgY2FzZSBjb3VudHMgYXJlIGFjY3VyYXRlKS4gQ291bnRyaWVzIHRoYXQgZGlkIG5vdCB2aWV3IENvdmlkIGFzIGEgbWFqb3IgdGhyZWF0IGFyZSB0aGUgVVMgYW5kIEJyYXppbCBhbmQgbm93IHRoZXNlIGNvdW50cmllcyBoYXZlIHRoZSBoaWdoZXN0IGRhaWx5IG5ldyBjYXNlcy4KCgoKU29tZSBvdGhlciByZXNvdXJjZXMgSSB1c2VkOgpodHRwczovL3JzdHVkaW8uY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE1LzAyL3JtYXJrZG93bi1jaGVhdHNoZWV0LnBkZgoKaHR0cHM6Ly9vdXJ3b3JsZGluZGF0YS5vcmcvY29yb25hdmlydXMtdGVzdGluZwoKaHR0cHM6Ly9jb3ZpZHRyYWNraW5nLmNvbS9kYXRhL2Rvd25sb2FkCgo=