Set Up
library(data.table)
library(dplyr)
library(tidyr)
library(ggplot2)
BASE_DIR <- here::here()
theme_set(theme_bw())
data <- rbind(read.csv("~/Desktop/hector_doeclim.csv", stringsAsFactors = FALSE),
read.csv("~/Desktop/hector_land-tracking.csv", stringsAsFactors = FALSE)) %>%
dplyr::filter(grepl(pattern = "ssp", x = scenario))
Objective
How much does Hector output change by when DOECLIM is integrated vs. fully integrated.
Compare Hector Outputs
Temperature
data %>%
dplyr::filter(variable %in% c("Tgav", "Tgav_land", "Tgav_ocean_air", "Tgav_ocean_ST")) %>%
ggplot(aes(year, value, color = version, linetype = version, groupby = interaction(variable, version, scenario))) +
geom_line() +
facet_wrap("variable", scales = "free") +
theme_bw() +
theme(legend.position = "bottom") +
labs(y = NULL, x = NULL)

data %>%
dplyr::filter(variable %in% c("Temp_HL", "Temp_LL")) %>%
ggplot(aes(year, value, color = version, linetype = version, groupby = interaction(variable, version, scenario))) +
geom_line() +
facet_wrap("variable", scales = "free") +
theme_bw() +
theme(legend.position = "bottom") +
labs(y = NULL, x = NULL)

Not surprising that we see a large change here since we are swtiching from tas to tos data so the fact that the HL and LL temp is now lower is not surprising.
Carbon Fluxes
data %>%
dplyr::filter(variable %in% c("atm_ocean_flux", "atm_ocean_flux_LL", "atm_ocean_flux_HL")) %>%
ggplot(aes(year, value, color = version, linetype = version, groupby = interaction(variable, version, scenario))) +
geom_line() +
facet_wrap("variable", scales = "free") +
theme_bw() +
theme(legend.position = "bottom") +
labs(y = NULL, x = NULL)

Ocean Vars
data %>%
dplyr::filter(variable %in% c("pH_HL", "pH_LL", "CO3_HL", "CO3_LL", "PCO2_HL", "PCO2_LL")) %>%
ggplot(aes(year, value, color = version, linetype = version, groupby = interaction(variable, version, scenario))) +
geom_line() +
facet_wrap("variable", scales = "free") +
theme_bw() +
theme(legend.position = "bottom") +
labs(y = NULL, x = NULL)

data %>%
dplyr::filter(variable %in% c("carbon_HL", "carbon_LL", "carbon_IO", "carbon_DO")) %>%
ggplot(aes(year, value, color = version, linetype = version, groupby = interaction(variable, version, scenario))) +
geom_line() +
facet_wrap("variable", scales = "free") +
theme_bw() +
theme(legend.position = "bottom") +
labs(y = NULL, x = NULL)

Terrestiral Carbon
data %>%
dplyr::filter(variable %in% c("npp")) %>%
ggplot(aes(year, value, color = version, linetype = version, groupby = interaction(variable, version, scenario))) +
geom_line() +
facet_wrap("variable", scales = "free") +
theme_bw() +
theme(legend.position = "bottom") +
labs(y = NULL, x = NULL)

Percent Difference
data %>%
tidyr::spread(version, value) %>%
dplyr::mutate(percent = 100 * (`full doeclim integration` - `land-tracking`)/ `land-tracking`) ->
percent_change_data
percent_change_data %>%
dplyr::group_by(variable, scenario) %>%
dplyr::summarise(value = mean(percent)) %>%
tidyr::spread(scenario, value) %>%
knitr::kable(digits = 3, caption = "(doeclim - land tracking) / land tracking")
`summarise()` has grouped output by 'variable'. You can override using the `.groups` argument.
(doeclim - land tracking) / land tracking
| atm_ocean_flux |
5.901 |
5.427 |
4.598 |
4.839 |
5.593 |
5.063 |
5.426 |
4.806 |
| atm_ocean_flux_HL |
0.734 |
0.828 |
0.870 |
0.979 |
0.826 |
0.965 |
0.930 |
1.090 |
| atm_ocean_flux_LL |
6.040 |
6.892 |
3.754 |
3.785 |
-12.513 |
4.261 |
7.906 |
3.677 |
| carbon_DO |
0.005 |
0.005 |
0.004 |
0.006 |
0.005 |
0.006 |
0.006 |
0.007 |
| carbon_HL |
0.042 |
0.047 |
0.049 |
0.058 |
0.050 |
0.057 |
0.055 |
0.065 |
| carbon_IO |
0.003 |
0.004 |
0.003 |
0.004 |
0.004 |
0.004 |
0.004 |
0.004 |
| carbon_LL |
0.053 |
0.058 |
0.058 |
0.066 |
0.062 |
0.067 |
0.066 |
0.071 |
| CO3_HL |
-2.358 |
-2.470 |
-2.587 |
-2.807 |
-2.499 |
-2.707 |
-2.626 |
-2.999 |
| CO3_LL |
-4.242 |
-4.344 |
-4.462 |
-4.658 |
-4.376 |
-4.555 |
-4.482 |
-4.834 |
| DIC_HL |
0.042 |
0.047 |
0.049 |
0.058 |
0.050 |
0.057 |
0.055 |
0.065 |
| DIC_LL |
0.053 |
0.058 |
0.058 |
0.066 |
0.062 |
0.067 |
0.066 |
0.071 |
| npp |
0.057 |
0.060 |
0.062 |
0.063 |
0.062 |
0.063 |
0.066 |
0.064 |
| PCO2_HL |
0.020 |
0.028 |
0.046 |
0.047 |
0.004 |
0.044 |
0.041 |
0.053 |
| PCO2_LL |
0.076 |
0.088 |
0.112 |
0.124 |
0.084 |
0.111 |
0.109 |
0.138 |
| pH_HL |
-0.016 |
-0.017 |
-0.019 |
-0.021 |
-0.016 |
-0.020 |
-0.019 |
-0.023 |
| pH_LL |
-0.014 |
-0.015 |
-0.017 |
-0.019 |
-0.015 |
-0.017 |
-0.016 |
-0.021 |
| Temp_HL |
-21.335 |
-21.482 |
-21.563 |
-21.813 |
-21.549 |
-21.733 |
-21.617 |
-21.948 |
| Temp_LL |
-5.555 |
-5.638 |
-5.702 |
-5.864 |
-5.679 |
-5.802 |
-5.748 |
-5.988 |
| Tgav |
2.774 |
2.750 |
1.721 |
2.704 |
2.740 |
2.713 |
2.737 |
2.687 |
| Tgav_land |
-0.007 |
-0.033 |
-0.821 |
-0.082 |
-0.043 |
-0.072 |
-0.044 |
-0.099 |
| Tgav_ocean_air |
1.475 |
1.451 |
-0.211 |
1.407 |
1.442 |
1.416 |
1.438 |
1.390 |
| Tgav_ocean_ST |
1.475 |
1.451 |
-0.211 |
1.407 |
1.442 |
1.416 |
1.438 |
1.390 |
Temperature
percent_change_data %>%
dplyr::filter(variable %in% c("Tgav", "Tgav_land", "Tgav_ocean_air", "Tgav_ocean_ST")) %>%
ggplot(aes(year, percent, color = scenario)) +
geom_hline(yintercept = 10, color = "grey", size = 1) +
geom_hline(yintercept = -10, color = "grey", size = 1) +
geom_line() +
coord_cartesian(ylim = c(-50, 50)) +
facet_wrap("variable") +
labs(caption = "grey lines at -10 & 10%") +
labs(x = NULL, y = "%")

percent_change_data %>%
dplyr::filter(variable %in% c("Temp_HL", "Temp_LL")) %>%
ggplot(aes(year, percent, color = scenario)) +
geom_hline(yintercept = 10, color = "grey", size = 1) +
geom_hline(yintercept = -10, color = "grey", size = 1) +
geom_line() +
facet_wrap("variable") +
labs(caption = "grey lines at -10 & 10%") +
labs(x = NULL, y = "%")

Carbon Fluxes
percent_change_data %>%
dplyr::filter(variable %in% c("atm_ocean_flux", "atm_ocean_flux_LL", "atm_ocean_flux_HL")) %>%
ggplot(aes(year, percent, color = scenario)) +
geom_hline(yintercept = 10, color = "grey", size = 1) +
geom_hline(yintercept = -10, color = "grey", size = 1) +
geom_line() +
facet_wrap("variable") +
coord_cartesian(ylim = c(-75, 75)) +
labs(caption = "grey lines at -10 & 10%") +
labs(x = NULL, y = "%")

Ocean Vars
percent_change_data %>%
dplyr::filter(variable %in% c("pH_HL", "pH_LL", "CO3_HL",
"CO3_LL", "PCO2_HL", "PCO2_LL")) %>%
ggplot(aes(year, percent, color = scenario)) +
geom_hline(yintercept = 10, color = "grey", size = 1) +
geom_hline(yintercept = -10, color = "grey", size = 1) +
geom_line() +
facet_wrap("variable") +
labs(caption = "grey lines at -10 & 10%") +
labs(x = NULL, y = "%")

percent_change_data %>%
dplyr::filter(variable %in% c("carbon_HL", "carbon_LL", "carbon_IO", "carbon_DO")) %>%
ggplot(aes(year, percent, color = scenario)) +
geom_hline(yintercept = 10, color = "grey", size = 1) +
geom_hline(yintercept = -10, color = "grey", size = 1) +
geom_line() +
facet_wrap("variable") +
labs(caption = "grey lines at -10 & 10%") +
labs(x = NULL, y = "%")

Terrestiral Carbon
percent_change_data %>%
dplyr::filter(variable %in% c("npp")) %>%
ggplot(aes(year, percent, color = scenario)) +
geom_hline(yintercept = 10, color = "grey", size = 1) +
geom_hline(yintercept = -10, color = "grey", size = 1) +
geom_line() +
facet_wrap("variable") +
labs(caption = "grey lines at -10 & 10%") +
labs(x = NULL, y = "%")

LS0tCnRpdGxlOiAiQ29tcGFyaW5nIEhlY3RvciBpbnRlZ3JhdGVkIHZzIG5vbiBpbnRlZ3JhdGVkIERPRUNMSU0iCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogJzQnCiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKLS0tCgojIFNldCBVcCAKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXJyb3IgPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UpCiMgc2VlIGh0dHBzOi8vYm9va2Rvd24ub3JnL3lpaHVpL3JtYXJrZG93bi1jb29rYm9vay8gZm9yIG1vcmUgaW5mbyBvbiBtYXJrZG93bnMKYGBgCgpgYGB7cn0KbGlicmFyeShkYXRhLnRhYmxlKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpsaWJyYXJ5KGdncGxvdDIpCgpCQVNFX0RJUiA8LSBoZXJlOjpoZXJlKCkKCnRoZW1lX3NldCh0aGVtZV9idygpKQoKCmRhdGEgPC0gcmJpbmQocmVhZC5jc3YoIn4vRGVza3RvcC9oZWN0b3JfZG9lY2xpbS5jc3YiLCBzdHJpbmdzQXNGYWN0b3JzID0gRkFMU0UpLCAKICAgICAgICAgICAgICByZWFkLmNzdigifi9EZXNrdG9wL2hlY3Rvcl9sYW5kLXRyYWNraW5nLmNzdiIsIHN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkpICU+JSAgCiAgICBkcGx5cjo6ZmlsdGVyKGdyZXBsKHBhdHRlcm4gPSAic3NwIiwgeCA9IHNjZW5hcmlvKSkKYGBgCgojIyBPYmplY3RpdmUgCgpIb3cgbXVjaCBkb2VzIEhlY3RvciBvdXRwdXQgY2hhbmdlIGJ5IHdoZW4gRE9FQ0xJTSBpcyBpbnRlZ3JhdGVkIHZzLiBmdWxseSBpbnRlZ3JhdGVkLiAKCiMgQ29tcGFyZSBIZWN0b3IgT3V0cHV0cwoKIyMgVGVtcGVyYXR1cmUgCgpgYGB7cn0KZGF0YSAlPiUgCiAgICBkcGx5cjo6ZmlsdGVyKHZhcmlhYmxlICVpbiUgYygiVGdhdiIsICJUZ2F2X2xhbmQiLCAiVGdhdl9vY2Vhbl9haXIiLCAiVGdhdl9vY2Vhbl9TVCIpKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2xvciA9IHZlcnNpb24sIGxpbmV0eXBlID0gdmVyc2lvbiwgZ3JvdXBieSA9IGludGVyYWN0aW9uKHZhcmlhYmxlLCB2ZXJzaW9uLCBzY2VuYXJpbykpKSArIAogICAgZ2VvbV9saW5lKCkgKyAKICAgIGZhY2V0X3dyYXAoInZhcmlhYmxlIiwgc2NhbGVzID0gImZyZWUiKSArIAogICAgdGhlbWVfYncoKSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgCiAgICBsYWJzKHkgPSBOVUxMLCB4ID0gTlVMTCkKYGBgCgoKYGBge3J9CmRhdGEgJT4lIAogICAgZHBseXI6OmZpbHRlcih2YXJpYWJsZSAlaW4lIGMoIlRlbXBfSEwiLCAiVGVtcF9MTCIpKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2xvciA9IHZlcnNpb24sIGxpbmV0eXBlID0gdmVyc2lvbiwgZ3JvdXBieSA9IGludGVyYWN0aW9uKHZhcmlhYmxlLCB2ZXJzaW9uLCBzY2VuYXJpbykpKSArIAogICAgZ2VvbV9saW5lKCkgKyAKICAgIGZhY2V0X3dyYXAoInZhcmlhYmxlIiwgc2NhbGVzID0gImZyZWUiKSArIAogICAgdGhlbWVfYncoKSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgCiAgICBsYWJzKHkgPSBOVUxMLCB4ID0gTlVMTCkKYGBgCgpOb3Qgc3VycHJpc2luZyB0aGF0IHdlIHNlZSBhIGxhcmdlIGNoYW5nZSBoZXJlIHNpbmNlIHdlIGFyZSBzd3RpY2hpbmcgZnJvbSB0YXMgdG8gdG9zIGRhdGEgc28gdGhlIGZhY3QgdGhhdCB0aGUgSEwgYW5kIExMIHRlbXAgaXMgbm93IGxvd2VyIGlzIG5vdCBzdXJwcmlzaW5nLiAKCgojIyBDYXJib24gRmx1eGVzIAoKYGBge3J9CmRhdGEgJT4lIAogICAgZHBseXI6OmZpbHRlcih2YXJpYWJsZSAlaW4lIGMoImF0bV9vY2Vhbl9mbHV4IiwgImF0bV9vY2Vhbl9mbHV4X0xMIiwgImF0bV9vY2Vhbl9mbHV4X0hMIikpICU+JSAKICAgIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbG9yID0gdmVyc2lvbiwgbGluZXR5cGUgPSB2ZXJzaW9uLCBncm91cGJ5ID0gaW50ZXJhY3Rpb24odmFyaWFibGUsIHZlcnNpb24sIHNjZW5hcmlvKSkpICsgCiAgICBnZW9tX2xpbmUoKSArIAogICAgZmFjZXRfd3JhcCgidmFyaWFibGUiLCBzY2FsZXMgPSAiZnJlZSIpICsgCiAgICB0aGVtZV9idygpICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKyAKICAgIGxhYnMoeSA9IE5VTEwsIHggPSBOVUxMKQpgYGAKCgojIyBPY2VhbiBWYXJzIAoKYGBge3J9CmRhdGEgJT4lIAogICAgZHBseXI6OmZpbHRlcih2YXJpYWJsZSAlaW4lIGMoInBIX0hMIiwgInBIX0xMIiwgIkNPM19ITCIsICJDTzNfTEwiLCAiUENPMl9ITCIsICJQQ08yX0xMIikpICU+JSAKICAgIGdncGxvdChhZXMoeWVhciwgdmFsdWUsIGNvbG9yID0gdmVyc2lvbiwgbGluZXR5cGUgPSB2ZXJzaW9uLCBncm91cGJ5ID0gaW50ZXJhY3Rpb24odmFyaWFibGUsIHZlcnNpb24sIHNjZW5hcmlvKSkpICsgCiAgICBnZW9tX2xpbmUoKSArIAogICAgZmFjZXRfd3JhcCgidmFyaWFibGUiLCBzY2FsZXMgPSAiZnJlZSIpICsgCiAgICB0aGVtZV9idygpICsgCiAgICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikgKyAKICAgIGxhYnMoeSA9IE5VTEwsIHggPSBOVUxMKQpgYGAKCmBgYHtyfQpkYXRhICU+JSAKICAgIGRwbHlyOjpmaWx0ZXIodmFyaWFibGUgJWluJSBjKCJjYXJib25fSEwiLCAiY2FyYm9uX0xMIiwgImNhcmJvbl9JTyIsICJjYXJib25fRE8iKSkgJT4lIAogICAgZ2dwbG90KGFlcyh5ZWFyLCB2YWx1ZSwgY29sb3IgPSB2ZXJzaW9uLCBsaW5ldHlwZSA9IHZlcnNpb24sIGdyb3VwYnkgPSBpbnRlcmFjdGlvbih2YXJpYWJsZSwgdmVyc2lvbiwgc2NlbmFyaW8pKSkgKyAKICAgIGdlb21fbGluZSgpICsgCiAgICBmYWNldF93cmFwKCJ2YXJpYWJsZSIsIHNjYWxlcyA9ICJmcmVlIikgKyAKICAgIHRoZW1lX2J3KCkgKyAKICAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArIAogICAgbGFicyh5ID0gTlVMTCwgeCA9IE5VTEwpCmBgYAoKIyMgVGVycmVzdGlyYWwgQ2FyYm9uIAoKYGBge3J9CmRhdGEgJT4lIAogICAgZHBseXI6OmZpbHRlcih2YXJpYWJsZSAlaW4lIGMoIm5wcCIpKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHZhbHVlLCBjb2xvciA9IHZlcnNpb24sIGxpbmV0eXBlID0gdmVyc2lvbiwgZ3JvdXBieSA9IGludGVyYWN0aW9uKHZhcmlhYmxlLCB2ZXJzaW9uLCBzY2VuYXJpbykpKSArIAogICAgZ2VvbV9saW5lKCkgKyAKICAgIGZhY2V0X3dyYXAoInZhcmlhYmxlIiwgc2NhbGVzID0gImZyZWUiKSArIAogICAgdGhlbWVfYncoKSArIAogICAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsgCiAgICBsYWJzKHkgPSBOVUxMLCB4ID0gTlVMTCkKYGBgCgojIFBlcmNlbnQgRGlmZmVyZW5jZSAKCmBgYHtyfQpkYXRhICU+JSAKICAgIHRpZHlyOjpzcHJlYWQodmVyc2lvbiwgdmFsdWUpICU+JSAKICAgIGRwbHlyOjptdXRhdGUocGVyY2VudCA9IDEwMCAqIChgZnVsbCBkb2VjbGltIGludGVncmF0aW9uYCAtIGBsYW5kLXRyYWNraW5nYCkvIGBsYW5kLXRyYWNraW5nYCkgLT4gCiAgICBwZXJjZW50X2NoYW5nZV9kYXRhIAoKcGVyY2VudF9jaGFuZ2VfZGF0YSAlPiUgCiAgICBkcGx5cjo6Z3JvdXBfYnkodmFyaWFibGUsIHNjZW5hcmlvKSAlPiUgIAogICAgZHBseXI6OnN1bW1hcmlzZSh2YWx1ZSA9IG1lYW4ocGVyY2VudCkpICU+JSAKICAgIHRpZHlyOjpzcHJlYWQoc2NlbmFyaW8sIHZhbHVlKSAlPiUgCiAgICBrbml0cjo6a2FibGUoZGlnaXRzID0gMywgY2FwdGlvbiA9ICIoZG9lY2xpbSAtIGxhbmQgdHJhY2tpbmcpIC8gbGFuZCB0cmFja2luZyIpCmBgYAoKIyMgVGVtcGVyYXR1cmUKCmBgYHtyfQpwZXJjZW50X2NoYW5nZV9kYXRhICU+JQogICAgZHBseXI6OmZpbHRlcih2YXJpYWJsZSAlaW4lIGMoIlRnYXYiLCAiVGdhdl9sYW5kIiwgIlRnYXZfb2NlYW5fYWlyIiwgIlRnYXZfb2NlYW5fU1QiKSkgJT4lIAogICAgZ2dwbG90KGFlcyh5ZWFyLCBwZXJjZW50LCBjb2xvciA9IHNjZW5hcmlvKSkgKyAKICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEwLCBjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IDEpICsgCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMTAsIGNvbG9yID0gImdyZXkiLCBzaXplID0gMSkgKyAKICAgIGdlb21fbGluZSgpICsgCiAgICBjb29yZF9jYXJ0ZXNpYW4oeWxpbSA9IGMoLTUwLCA1MCkpICsgCiAgICBmYWNldF93cmFwKCJ2YXJpYWJsZSIpICsgCiAgICBsYWJzKGNhcHRpb24gPSAiZ3JleSBsaW5lcyBhdCAtMTAgJiAxMCUiKSArIAogICAgbGFicyh4ID0gTlVMTCwgeSA9ICIlIikKYGBgCgpgYGB7cn0KcGVyY2VudF9jaGFuZ2VfZGF0YSAlPiUKICAgIGRwbHlyOjpmaWx0ZXIodmFyaWFibGUgJWluJSBjKCJUZW1wX0hMIiwgIlRlbXBfTEwiKSkgJT4lIAogICAgZ2dwbG90KGFlcyh5ZWFyLCBwZXJjZW50LCBjb2xvciA9IHNjZW5hcmlvKSkgKyAKICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDEwLCBjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IDEpICsgCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMTAsIGNvbG9yID0gImdyZXkiLCBzaXplID0gMSkgKyAKICAgIGdlb21fbGluZSgpICsgCiAgICBmYWNldF93cmFwKCJ2YXJpYWJsZSIpICsgCiAgICBsYWJzKGNhcHRpb24gPSAiZ3JleSBsaW5lcyBhdCAtMTAgJiAxMCUiKSArIAogICAgbGFicyh4ID0gTlVMTCwgeSA9ICIlIikKYGBgCgojIyBDYXJib24gRmx1eGVzCgpgYGB7cn0KcGVyY2VudF9jaGFuZ2VfZGF0YSAlPiUKICAgIGRwbHlyOjpmaWx0ZXIodmFyaWFibGUgJWluJSBjKCJhdG1fb2NlYW5fZmx1eCIsICJhdG1fb2NlYW5fZmx1eF9MTCIsICJhdG1fb2NlYW5fZmx1eF9ITCIpKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHBlcmNlbnQsIGNvbG9yID0gc2NlbmFyaW8pKSArIAogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMTAsIGNvbG9yID0gImdyZXkiLCBzaXplID0gMSkgKyAKICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0xMCwgY29sb3IgPSAiZ3JleSIsIHNpemUgPSAxKSArIAogICAgZ2VvbV9saW5lKCkgKyAKICAgIGZhY2V0X3dyYXAoInZhcmlhYmxlIikgKyAKICAgIGNvb3JkX2NhcnRlc2lhbih5bGltID0gYygtNzUsIDc1KSkgKwogICAgbGFicyhjYXB0aW9uID0gImdyZXkgbGluZXMgYXQgLTEwICYgMTAlIikgKyAKICAgIGxhYnMoeCA9IE5VTEwsIHkgPSAiJSIpCmBgYAoKIyMgT2NlYW4gVmFycwoKYGBge3J9CnBlcmNlbnRfY2hhbmdlX2RhdGEgJT4lCiAgICBkcGx5cjo6ZmlsdGVyKHZhcmlhYmxlICVpbiUgYygicEhfSEwiLCAicEhfTEwiLCAiQ08zX0hMIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDTzNfTEwiLCAiUENPMl9ITCIsICJQQ08yX0xMIikpICU+JSAKICAgIGdncGxvdChhZXMoeWVhciwgcGVyY2VudCwgY29sb3IgPSBzY2VuYXJpbykpICsgCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMCwgY29sb3IgPSAiZ3JleSIsIHNpemUgPSAxKSArIAogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTEwLCBjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IDEpICsgCiAgICBnZW9tX2xpbmUoKSArIAogICAgZmFjZXRfd3JhcCgidmFyaWFibGUiKSArIAogICAgbGFicyhjYXB0aW9uID0gImdyZXkgbGluZXMgYXQgLTEwICYgMTAlIikgKyAKICAgIGxhYnMoeCA9IE5VTEwsIHkgPSAiJSIpCmBgYAoKYGBge3J9CnBlcmNlbnRfY2hhbmdlX2RhdGEgJT4lCiAgICBkcGx5cjo6ZmlsdGVyKHZhcmlhYmxlICVpbiUgYygiY2FyYm9uX0hMIiwgImNhcmJvbl9MTCIsICJjYXJib25fSU8iLCAiY2FyYm9uX0RPIikpICU+JSAKICAgIGdncGxvdChhZXMoeWVhciwgcGVyY2VudCwgY29sb3IgPSBzY2VuYXJpbykpICsgCiAgICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAxMCwgY29sb3IgPSAiZ3JleSIsIHNpemUgPSAxKSArIAogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTEwLCBjb2xvciA9ICJncmV5Iiwgc2l6ZSA9IDEpICsgCiAgICBnZW9tX2xpbmUoKSArIAogICAgZmFjZXRfd3JhcCgidmFyaWFibGUiKSArIAogICAgbGFicyhjYXB0aW9uID0gImdyZXkgbGluZXMgYXQgLTEwICYgMTAlIikgKyAKICAgIGxhYnMoeCA9IE5VTEwsIHkgPSAiJSIpCmBgYAoKCiMjIFRlcnJlc3RpcmFsIENhcmJvbiAKCmBgYHtyfQpwZXJjZW50X2NoYW5nZV9kYXRhICU+JQogICAgZHBseXI6OmZpbHRlcih2YXJpYWJsZSAlaW4lIGMoIm5wcCIpKSAlPiUgCiAgICBnZ3Bsb3QoYWVzKHllYXIsIHBlcmNlbnQsIGNvbG9yID0gc2NlbmFyaW8pKSArIAogICAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMTAsIGNvbG9yID0gImdyZXkiLCBzaXplID0gMSkgKyAKICAgIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0xMCwgY29sb3IgPSAiZ3JleSIsIHNpemUgPSAxKSArIAogICAgZ2VvbV9saW5lKCkgKyAKICAgIGZhY2V0X3dyYXAoInZhcmlhYmxlIikgKyAKICAgIGxhYnMoY2FwdGlvbiA9ICJncmV5IGxpbmVzIGF0IC0xMCAmIDEwJSIpICsgCiAgICBsYWJzKHggPSBOVUxMLCB5ID0gIiUiKQpgYGAK