1 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))

1.1 Objective

How much does Hector output change by when DOECLIM is integrated vs. fully integrated.

2 Compare Hector Outputs

2.1 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.

2.2 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)

2.3 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)

2.4 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)

3 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
variable ssp119 ssp126 ssp245 ssp370 ssp434 ssp460 ssp534-over ssp585
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

3.1 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 = "%")

3.2 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 = "%")

3.3 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 = "%")

3.4 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