Introduction
The purpose of this data visualization analysis is to examine the
allocation of funds across States and Territories in the United States.
We will assess whether the allocation is equitable based on population
and explore any potential biases favoring the political interests of the
Biden administration.
Data Analysis
Import Libraries for this analysis
library(tidyverse)
library(knitr)
library(kableExtra)
Data sources
I merge the files in Excel and upload the data on GitHub.
Data Exploration
Import the data from GitHub
allocation_df <- as.data.frame(read.csv("https://raw.githubusercontent.com/Kossi-Akplaka/Data608-Visualization/main/Story%201/IIJA%20FUNDING%20DATA.csv"))
kable(head(allocation_df,5), "html") %>%
kable_styling(bootstrap_options = "striped", full_width = T)
|
State_Teritory_Tribal_Nation
|
Allocation
|
Population
|
Election_Winner
|
|
ALABAMA
|
3.0000
|
5024279
|
Republican
|
|
ALASKA
|
3.7000
|
733391
|
Republican
|
|
AMERICAN SAMOA
|
0.0686
|
49710
|
No electoral Vote
|
|
ARIZONA
|
3.5000
|
7151502
|
Democrat
|
|
ARKANSAS
|
2.8000
|
3011524
|
Republican
|
Let’s visualize the data to examine whether the allocation is
equitable based on population.
Population vs. Allocation Comparison
allocation_df$Population_millions <- as.numeric(allocation_df$Population) / 1e6
ggplot(allocation_df, aes(x = Population_millions , y = Allocation )) +
geom_point(color = 'Purple') +
labs(title = "Population vs. Allocation Comparison",
x = "Population (millions)",
y = "Allocation (Billions)") +
theme_minimal()

Based on the above scatter plot, there is a general trend of
proportionality between the population size and allocation of IIJA funds
for states and territories. However, notable deviations from this trend
are observed, with certain states or territories receiving allocations
that either exceed or fall short of what would be expected based solely
on their population size.
These variations suggest that factors beyond population alone may
influence the allocation of IIJA funds
Per Capita Allocation
Let’s take a closer look on the per capita allocation of funds for
each State and Territory.
# Calculate the fund allocation per capita
allocation_df$Per_capita <- round((as.numeric(allocation_df$Allocation)*1e9)/(as.numeric(allocation_df$Population)))
head(allocation_df$Per_capita)
## [1] 597 5045 1380 489 930 465
Plot the Per Capita Allocation
ggplot(allocation_df, aes(x = State_Teritory_Tribal_Nation, y = Per_capita)) +
geom_point(color = 'purple') +
labs(title = "Allocation Per Capita Scatter Plot",
x = "State / Territory / Tribal Nation",
y = "Per Capita Allocation") +
theme_minimal() +
theme(axis.text.x = element_blank())

Ideally, Per Capita Allocation should be relatively consistent across
different states and territories to ensure equitable distribution of
resources.
Let’s explore the other factors that can lead to variations in Per
Capita Allocation
Biases favoring the political interests of the Biden
administration
Let’s create a scatter plot comparing Per Capita Allocation for
states won by Republican and Democrat candidates in the 2020
election
State_Allocation <- allocation_df %>%
filter(Election_Winner == 'Republican'| Election_Winner == 'Democrat')
ggplot(State_Allocation, aes(x = State_Teritory_Tribal_Nation, y = Per_capita, color = Election_Winner)) +
scale_color_manual(values = c("Republican" = "red", "Democrat" = "blue"))+
geom_point() +
labs(title = "Allocation Per Capita Scatter Plot",
x = "State",
y = "Per Capita Allocation") +
geom_hline(yintercept = 1000, linetype = "dotted", color = "black")+
theme_minimal() +
theme(axis.text.x = element_blank())

This visualization indicates that the majority of states have a Per
Capita Allocation falling below $1000. Among the 9 states with Per
Capita Allocation exceeding 1000 dollars, 6 of them were won by
Republican in 2020. This observation suggests that there is no apparent
evidence supporting the presence of bias favoring the political
interests of the Biden administration in the allocation process.
Summary Statistics
Let’s create a table of the minimum, maximum, and average Per Capita
Allocation for Republican and Democrat states.
State_Allocation %>%
group_by(Election_Winner) %>%
summarise(
Min_PerCapita = min(Per_capita),
Max_PerCapita = max(Per_capita),
Avg_PerCapita = round(mean(Per_capita))
) %>%
bind_rows(
State_Allocation %>%
summarise(
Election_Winner = "Overall",
Min_PerCapita = min(Per_capita),
Max_PerCapita = max(Per_capita),
Avg_PerCapita = round(mean(Per_capita))
)
) %>%
kable("html") %>%
kable_styling(bootstrap_options = "striped", full_width = T)
|
Election_Winner
|
Min_PerCapita
|
Max_PerCapita
|
Avg_PerCapita
|
|
Democrat
|
437
|
1595
|
680
|
|
Republican
|
381
|
5045
|
1131
|
|
Overall
|
381
|
5045
|
910
|
The table clearly illustrates that, on average, Republican states
received a higher Per Capita Allocation compared to Democrat states.
This observation emphasizes that there is no apparent bias of Biden
administration in the allocation process.
Create a table that includes counts for both the number of states
above and below the average Per Capita Allocation
# Average Per capita allocation
average_allocation <- mean(State_Allocation$Per_capita)
# summary table
State_Allocation %>%
mutate(Above_Avg = Per_capita > average_allocation) %>%
group_by(Election_Winner) %>%
summarise(
Total_Count = n(),
Above_Avg_Count = sum(Above_Avg),
Below_Avg_Count = Total_Count - Above_Avg_Count
) %>%
select (Election_Winner, Above_Avg_Count, Below_Avg_Count) %>%
kable("html") %>%
kable_styling(bootstrap_options = "striped", full_width = T)
|
Election_Winner
|
Above_Avg_Count
|
Below_Avg_Count
|
|
Democrat
|
4
|
21
|
|
Republican
|
8
|
18
|
Conclusion
The purpose of this story is to assess whether the allocation is
equitable based on population and explore any potential biases favoring
the political interests of the Biden administration.
Although the biggest factors for allocation is the population,
there are others factors influencing funds allocations. This led to
variation in the per capita Allocation.
There is no evidence of potential biases favoring the political
interests of the Biden administration. In contrary, states won by
Republican party in 2020 saw a higher allocation on average.
LS0tDQp0aXRsZTogIkluZnJhc3RydWN0dXJlIEludmVzdG1lbnQgJiBKb2JzIEFjdCBGdW5kaW5nIEFsbG9jYXRpb24iDQphdXRob3I6ICJLb3NzaSBBa3BsYWthIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQNCi0tLQ0KDQojIyBJbnRyb2R1Y3Rpb24NCg0KVGhlIHB1cnBvc2Ugb2YgdGhpcyBkYXRhIHZpc3VhbGl6YXRpb24gYW5hbHlzaXMgaXMgdG8gZXhhbWluZSB0aGUgYWxsb2NhdGlvbiBvZiBmdW5kcyBhY3Jvc3MgU3RhdGVzIGFuZCBUZXJyaXRvcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gV2Ugd2lsbCBhc3Nlc3Mgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBpcyBlcXVpdGFibGUgYmFzZWQgb24gcG9wdWxhdGlvbiBhbmQgZXhwbG9yZSBhbnkgcG90ZW50aWFsIGJpYXNlcyBmYXZvcmluZyB0aGUgcG9saXRpY2FsIGludGVyZXN0cyBvZiB0aGUgQmlkZW4gYWRtaW5pc3RyYXRpb24uDQoNCg0KDQojIyBEYXRhIEFuYWx5c2lzDQoNCkltcG9ydCBMaWJyYXJpZXMgZm9yIHRoaXMgYW5hbHlzaXMNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmBgYA0KDQojIyMgRGF0YSBzb3VyY2VzDQoNCi0gUHJlc2VudCBhbGxvY2F0aW9uIG9mIHRoZSBJSUpBIGJ5IFN0YXRlIGFuZCBUZXJyaXRvcnk6DQoNCi0gW0xpc3Qgb2YgVS5TIHN0YXRlc19hbmRfdGVycml0b3JpZXNfYnlfcG9wdWxhdGlvbl0oImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfVS5TLl9zdGF0ZXNfYW5kX3RlcnJpdG9yaWVzX2J5X3BvcHVsYXRpb24iKSBhcyBvZiBBcHJpbCAyMDIwIENlbnN1cw0KDQotIFtVLlMuIDIwMjAgUHJlc2lkZW50aWFsIEVsZWN0aW9uIFJlc3VsdHMgUGVyIFN0YXRlXSgiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMUQtZWRhVkhUblpOaFZVODQwRVBVaHozQ2dkN20zOVVyeDdITThQcTZQdXMvZWRpdCNnaWQ9Mjk2MjI4NjIiKQ0KDQpJIG1lcmdlIHRoZSBmaWxlcyBpbiBFeGNlbCBhbmQgdXBsb2FkIHRoZSBkYXRhIG9uIEdpdEh1Yi4NCg0KDQojIyMgRGF0YSBFeHBsb3JhdGlvbg0KDQpJbXBvcnQgdGhlIGRhdGEgZnJvbSBHaXRIdWINCg0KYGBge3J9DQphbGxvY2F0aW9uX2RmIDwtIGFzLmRhdGEuZnJhbWUocmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9Lb3NzaS1Ba3BsYWthL0RhdGE2MDgtVmlzdWFsaXphdGlvbi9tYWluL1N0b3J5JTIwMS9JSUpBJTIwRlVORElORyUyMERBVEEuY3N2IikpDQprYWJsZShoZWFkKGFsbG9jYXRpb25fZGYsNSksICJodG1sIikgJT4lDQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSAic3RyaXBlZCIsIGZ1bGxfd2lkdGggPSBUKQ0KYGBgDQoNCg0KTGV0J3MgdmlzdWFsaXplIHRoZSBkYXRhIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgYWxsb2NhdGlvbiBpcyBlcXVpdGFibGUgYmFzZWQgb24gcG9wdWxhdGlvbi4NCg0KIyMjIFBvcHVsYXRpb24gdnMuIEFsbG9jYXRpb24gQ29tcGFyaXNvbg0KDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBwYWdlZC5wcmludD1GQUxTRX0NCmFsbG9jYXRpb25fZGYkUG9wdWxhdGlvbl9taWxsaW9ucyA8LSBhcy5udW1lcmljKGFsbG9jYXRpb25fZGYkUG9wdWxhdGlvbikgLyAxZTYNCg0KZ2dwbG90KGFsbG9jYXRpb25fZGYsIGFlcyh4ID0gUG9wdWxhdGlvbl9taWxsaW9ucyAsIHkgPSBBbGxvY2F0aW9uICkpICsNCiAgZ2VvbV9wb2ludChjb2xvciA9ICdQdXJwbGUnKSArDQogIGxhYnModGl0bGUgPSAiUG9wdWxhdGlvbiB2cy4gQWxsb2NhdGlvbiBDb21wYXJpc29uIiwNCiAgICAgICB4ID0gIlBvcHVsYXRpb24gKG1pbGxpb25zKSIsDQogICAgICAgeSA9ICJBbGxvY2F0aW9uIChCaWxsaW9ucykiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQoNCkJhc2VkIG9uIHRoZSBhYm92ZSBzY2F0dGVyIHBsb3QsIHRoZXJlIGlzIGEgZ2VuZXJhbCB0cmVuZCBvZiBwcm9wb3J0aW9uYWxpdHkgYmV0d2VlbiB0aGUgcG9wdWxhdGlvbiBzaXplIGFuZCBhbGxvY2F0aW9uIG9mIElJSkEgZnVuZHMgZm9yIHN0YXRlcyBhbmQgdGVycml0b3JpZXMuIEhvd2V2ZXIsIG5vdGFibGUgZGV2aWF0aW9ucyBmcm9tIHRoaXMgdHJlbmQgYXJlIG9ic2VydmVkLCB3aXRoIGNlcnRhaW4gc3RhdGVzIG9yIHRlcnJpdG9yaWVzIHJlY2VpdmluZyBhbGxvY2F0aW9ucyB0aGF0IGVpdGhlciBleGNlZWQgb3IgZmFsbCBzaG9ydCBvZiB3aGF0IHdvdWxkIGJlIGV4cGVjdGVkIGJhc2VkIHNvbGVseSBvbiB0aGVpciBwb3B1bGF0aW9uIHNpemUuDQoNClRoZXNlIHZhcmlhdGlvbnMgc3VnZ2VzdCB0aGF0IGZhY3RvcnMgYmV5b25kIHBvcHVsYXRpb24gYWxvbmUgbWF5IGluZmx1ZW5jZSB0aGUgYWxsb2NhdGlvbiBvZiBJSUpBIGZ1bmRzDQoNCiMjIyBQZXIgQ2FwaXRhIEFsbG9jYXRpb24NCg0KTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIG9uIHRoZSBwZXIgY2FwaXRhIGFsbG9jYXRpb24gb2YgZnVuZHMgZm9yIGVhY2ggU3RhdGUgYW5kIFRlcnJpdG9yeS4NCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgQ2FsY3VsYXRlIHRoZSBmdW5kIGFsbG9jYXRpb24gcGVyIGNhcGl0YQ0KYWxsb2NhdGlvbl9kZiRQZXJfY2FwaXRhIDwtIHJvdW5kKChhcy5udW1lcmljKGFsbG9jYXRpb25fZGYkQWxsb2NhdGlvbikqMWU5KS8oYXMubnVtZXJpYyhhbGxvY2F0aW9uX2RmJFBvcHVsYXRpb24pKSkNCg0KaGVhZChhbGxvY2F0aW9uX2RmJFBlcl9jYXBpdGEpDQpgYGANCg0KUGxvdCB0aGUgUGVyIENhcGl0YSBBbGxvY2F0aW9uDQpgYGB7ciB3YXJuaW5nPUZBTFNFfQ0KZ2dwbG90KGFsbG9jYXRpb25fZGYsIGFlcyh4ID0gU3RhdGVfVGVyaXRvcnlfVHJpYmFsX05hdGlvbiwgeSA9IFBlcl9jYXBpdGEpKSArDQogIGdlb21fcG9pbnQoY29sb3IgPSAncHVycGxlJykgKw0KICBsYWJzKHRpdGxlID0gIkFsbG9jYXRpb24gUGVyIENhcGl0YSBTY2F0dGVyIFBsb3QiLA0KICAgICAgIHggPSAiU3RhdGUgLyBUZXJyaXRvcnkgLyBUcmliYWwgTmF0aW9uIiwNCiAgICAgICB5ID0gIlBlciBDYXBpdGEgQWxsb2NhdGlvbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCkpDQpgYGANCg0KSWRlYWxseSwgUGVyIENhcGl0YSBBbGxvY2F0aW9uIHNob3VsZCBiZSByZWxhdGl2ZWx5IGNvbnNpc3RlbnQgYWNyb3NzIGRpZmZlcmVudCBzdGF0ZXMgYW5kIHRlcnJpdG9yaWVzIHRvIGVuc3VyZSBlcXVpdGFibGUgZGlzdHJpYnV0aW9uIG9mIHJlc291cmNlcy4NCg0KTGV0J3MgZXhwbG9yZSB0aGUgb3RoZXIgZmFjdG9ycyB0aGF0IGNhbiBsZWFkIHRvIHZhcmlhdGlvbnMgaW4gUGVyIENhcGl0YSBBbGxvY2F0aW9uDQoNCiMjIyBCaWFzZXMgZmF2b3JpbmcgdGhlIHBvbGl0aWNhbCBpbnRlcmVzdHMgb2YgdGhlIEJpZGVuIGFkbWluaXN0cmF0aW9uDQoNCkxldCdzIGNyZWF0ZSBhIHNjYXR0ZXIgcGxvdCBjb21wYXJpbmcgUGVyIENhcGl0YSBBbGxvY2F0aW9uIGZvciBzdGF0ZXMgd29uIGJ5IFJlcHVibGljYW4gYW5kIERlbW9jcmF0IGNhbmRpZGF0ZXMgaW4gdGhlIDIwMjAgZWxlY3Rpb24NCg0KYGBge3Igd2FybmluZz1GQUxTRX0NClN0YXRlX0FsbG9jYXRpb24gPC0gYWxsb2NhdGlvbl9kZiAlPiUgDQogIGZpbHRlcihFbGVjdGlvbl9XaW5uZXIgPT0gJ1JlcHVibGljYW4nfCBFbGVjdGlvbl9XaW5uZXIgPT0gJ0RlbW9jcmF0JykNCg0KZ2dwbG90KFN0YXRlX0FsbG9jYXRpb24sIGFlcyh4ID0gU3RhdGVfVGVyaXRvcnlfVHJpYmFsX05hdGlvbiwgeSA9IFBlcl9jYXBpdGEsIGNvbG9yID0gRWxlY3Rpb25fV2lubmVyKSkgKw0KICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygiUmVwdWJsaWNhbiIgPSAicmVkIiwgIkRlbW9jcmF0IiA9ICJibHVlIikpKw0KICBnZW9tX3BvaW50KCkgKw0KICBsYWJzKHRpdGxlID0gIkFsbG9jYXRpb24gUGVyIENhcGl0YSBTY2F0dGVyIFBsb3QiLA0KICAgICAgIHggPSAiU3RhdGUiLA0KICAgICAgIHkgPSAiUGVyIENhcGl0YSBBbGxvY2F0aW9uIikgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMDAwLCBsaW5ldHlwZSA9ICJkb3R0ZWQiLCBjb2xvciA9ICJibGFjayIpKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSkNCmBgYA0KDQpUaGlzIHZpc3VhbGl6YXRpb24gaW5kaWNhdGVzIHRoYXQgdGhlIG1ham9yaXR5IG9mIHN0YXRlcyBoYXZlIGEgUGVyIENhcGl0YSBBbGxvY2F0aW9uIGZhbGxpbmcgYmVsb3cgJDEwMDAuIEFtb25nIHRoZSA5IHN0YXRlcyB3aXRoIFBlciBDYXBpdGEgQWxsb2NhdGlvbiBleGNlZWRpbmcgMTAwMCBkb2xsYXJzLCA2IG9mIHRoZW0gd2VyZSB3b24gYnkgUmVwdWJsaWNhbiBpbiAyMDIwLiBUaGlzIG9ic2VydmF0aW9uIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgbm8gYXBwYXJlbnQgZXZpZGVuY2Ugc3VwcG9ydGluZyB0aGUgcHJlc2VuY2Ugb2YgYmlhcyBmYXZvcmluZyB0aGUgcG9saXRpY2FsIGludGVyZXN0cyBvZiB0aGUgQmlkZW4gYWRtaW5pc3RyYXRpb24gaW4gdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4NCg0KIyMjIFN1bW1hcnkgU3RhdGlzdGljcw0KDQpMZXQncyBjcmVhdGUgYSB0YWJsZSBvZiB0aGUgbWluaW11bSwgbWF4aW11bSwgYW5kIGF2ZXJhZ2UgUGVyIENhcGl0YSBBbGxvY2F0aW9uIGZvciBSZXB1YmxpY2FuIGFuZCBEZW1vY3JhdCBzdGF0ZXMuDQoNCmBgYHtyfQ0KU3RhdGVfQWxsb2NhdGlvbiAlPiUNCiAgZ3JvdXBfYnkoRWxlY3Rpb25fV2lubmVyKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIE1pbl9QZXJDYXBpdGEgPSBtaW4oUGVyX2NhcGl0YSksDQogICAgTWF4X1BlckNhcGl0YSA9IG1heChQZXJfY2FwaXRhKSwNCiAgICBBdmdfUGVyQ2FwaXRhID0gcm91bmQobWVhbihQZXJfY2FwaXRhKSkNCiAgKSAlPiUNCiAgYmluZF9yb3dzKA0KICAgIFN0YXRlX0FsbG9jYXRpb24gJT4lDQogICAgICBzdW1tYXJpc2UoDQogICAgICAgIEVsZWN0aW9uX1dpbm5lciA9ICJPdmVyYWxsIiwNCiAgICAgICAgTWluX1BlckNhcGl0YSA9IG1pbihQZXJfY2FwaXRhKSwNCiAgICAgICAgTWF4X1BlckNhcGl0YSA9IG1heChQZXJfY2FwaXRhKSwNCiAgICAgICAgQXZnX1BlckNhcGl0YSA9IHJvdW5kKG1lYW4oUGVyX2NhcGl0YSkpDQogICAgICApDQogICkgJT4lIA0KICBrYWJsZSgiaHRtbCIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gVCkNCmBgYA0KDQpUaGUgdGFibGUgY2xlYXJseSBpbGx1c3RyYXRlcyB0aGF0LCBvbiBhdmVyYWdlLCBSZXB1YmxpY2FuIHN0YXRlcyByZWNlaXZlZCBhIGhpZ2hlciBQZXIgQ2FwaXRhIEFsbG9jYXRpb24gY29tcGFyZWQgdG8gRGVtb2NyYXQgc3RhdGVzLiBUaGlzIG9ic2VydmF0aW9uIGVtcGhhc2l6ZXMgdGhhdCB0aGVyZSBpcyBubyBhcHBhcmVudCBiaWFzIG9mIEJpZGVuIGFkbWluaXN0cmF0aW9uIGluIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuDQoNCg0KQ3JlYXRlIGEgdGFibGUgdGhhdCBpbmNsdWRlcyBjb3VudHMgZm9yIGJvdGggdGhlIG51bWJlciBvZiBzdGF0ZXMgYWJvdmUgYW5kIGJlbG93IHRoZSBhdmVyYWdlIFBlciBDYXBpdGEgQWxsb2NhdGlvbg0KDQpgYGB7cn0NCiMgQXZlcmFnZSBQZXIgY2FwaXRhIGFsbG9jYXRpb24NCmF2ZXJhZ2VfYWxsb2NhdGlvbiA8LSBtZWFuKFN0YXRlX0FsbG9jYXRpb24kUGVyX2NhcGl0YSkNCiMgc3VtbWFyeSB0YWJsZQ0KU3RhdGVfQWxsb2NhdGlvbiAlPiUNCiAgbXV0YXRlKEFib3ZlX0F2ZyA9IFBlcl9jYXBpdGEgPiBhdmVyYWdlX2FsbG9jYXRpb24pICU+JQ0KICBncm91cF9ieShFbGVjdGlvbl9XaW5uZXIpICU+JQ0KICBzdW1tYXJpc2UoDQogICAgVG90YWxfQ291bnQgPSBuKCksDQogICAgQWJvdmVfQXZnX0NvdW50ID0gc3VtKEFib3ZlX0F2ZyksDQogICAgQmVsb3dfQXZnX0NvdW50ID0gVG90YWxfQ291bnQgLSBBYm92ZV9BdmdfQ291bnQNCiAgKSAlPiUgDQogIHNlbGVjdCAoRWxlY3Rpb25fV2lubmVyLCBBYm92ZV9BdmdfQ291bnQsIEJlbG93X0F2Z19Db3VudCkgJT4lIA0KICBrYWJsZSgiaHRtbCIpICU+JQ0KICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gInN0cmlwZWQiLCBmdWxsX3dpZHRoID0gVCkNCmBgYA0KDQojIyBDb25jbHVzaW9uDQoNClRoZSBwdXJwb3NlIG9mIHRoaXMgc3RvcnkgaXMgdG8gYXNzZXNzIHdoZXRoZXIgdGhlIGFsbG9jYXRpb24gaXMgZXF1aXRhYmxlIGJhc2VkIG9uIHBvcHVsYXRpb24gYW5kIGV4cGxvcmUgYW55IHBvdGVudGlhbCBiaWFzZXMgZmF2b3JpbmcgdGhlIHBvbGl0aWNhbCBpbnRlcmVzdHMgb2YgdGhlIEJpZGVuIGFkbWluaXN0cmF0aW9uLg0KDQotIEFsdGhvdWdoIHRoZSBiaWdnZXN0IGZhY3RvcnMgZm9yIGFsbG9jYXRpb24gaXMgdGhlIHBvcHVsYXRpb24sIHRoZXJlIGFyZSBvdGhlcnMgZmFjdG9ycyBpbmZsdWVuY2luZyBmdW5kcyBhbGxvY2F0aW9ucy4gIFRoaXMgbGVkIHRvIHZhcmlhdGlvbiBpbiB0aGUgcGVyIGNhcGl0YSBBbGxvY2F0aW9uLg0KDQotIFRoZXJlIGlzIG5vIGV2aWRlbmNlIG9mIHBvdGVudGlhbCBiaWFzZXMgZmF2b3JpbmcgdGhlIHBvbGl0aWNhbCBpbnRlcmVzdHMgb2YgdGhlIEJpZGVuIGFkbWluaXN0cmF0aW9uLiBJbiBjb250cmFyeSwgc3RhdGVzIHdvbiBieSBSZXB1YmxpY2FuIHBhcnR5IGluIDIwMjAgc2F3IGEgaGlnaGVyIGFsbG9jYXRpb24gb24gYXZlcmFnZS4NCg0KDQo=