演習

以下の指標の中から、二つを選択して、データの概要(description)を記録し、データを WDI で取得し、以下の分析をする。

  1. 各年毎のデータの数の棒グラフ
  2. 国または地域を選択
  3. それぞれの経年変化を表す折れ線グラフ
    1. 日本
    2. 選択した国または地域
  4. 二つのデータの散布図-必要に応じて log10 スケールを用いる
    1. すべての値の散布図
    2. NA ではない値の散布図、近似(回帰)直線を表示
    3. 地域を除き国のみの散布図、近似(回帰)直線を表示
    4. 最近の年を選択し、地域を除き国のもの散布図、近似(回帰)直線を表示

それぞれについて考察(気づいたこと、疑問など)を記す

データ情報

  • CO2 emissions (metric tons per capita) :EN.ATM.CO2E.PC [Link] (co2pcap)

  • Forest area (% of land area):AG.LND.FRST.ZS [Link] (forest)

  • Renewable electricity output (% of total electricity output):EG.ELC.RNEW.ZS [Link] (renewable)

  • Electricity production from oil, gas and coal sources (% of total):EG.ELC.FOSL.ZS [Link] (fossil)

  • Electricity production from nuclear sources (% of total):EG.ELC.NUCL.ZS [Link] (nuclear)

タイトル

データ

データ情報

  • データ1:名前、コード、変数名、リンク

  • 概要:

  • データ2:名前、コード、変数名、リンク

  • 概要:

データの取得

準備

library(tidyverse)
library(WDI)

データのダウンロードと保存:コードと変数名を指定。

データの名前は、変えたほうがよいので、例でも、df_w6eda_2 や、df_w6_2 に変えてあります。自分で決めたものを使うと、より練習になります。

df_w6eda_2 <- WDI(indicator = c(co2pcap = "EN.ATM.CO2E.PC",
                              forest = "AG.LND.FRST.ZS"),
                extra = TRUE)

2回目からは、data から読み込めるようにしておく ファイル (Rmd) の保存場所に data フォルダがあることを確認

write_csv(df_w6eda_2, "data/w6eda_1.csv")
df_w6eda_2 <- read_csv("data/w6eda_2.csv")

データの確認

df_w6eda_2
str(df_w6eda_2)

変数の選択(selecting)

df_w6_2 <- df_w6eda_2 |> 
  select(country, iso2c, year, co2pcap, forest, region, income)
df_w6_2

各年毎のデータの数の棒グラフ

df_w6eda_2 |> drop_na(co2pcap, forest) |>
  ggplot(aes(year)) + geom_bar()

国と地域

country には、国と地域両方が入っています。地域の iso2c は以下のものです。

REGION <- c("1A", "1W", "4E", "6F", "6N", "6X", "7E", "8S", "A4", "A5", 
"A9", "B1", "B2", "B3", "B4", "B6", "B7", "B8", "C4", "C5", "C6", 
"C7", "C8", "C9", "D2", "D3", "D4", "D5", "D6", "D7", "EU", "F1", 
"F6", "M1", "M2", "N6", "OE", "R6", "S1", "S2", "S3", "S4", "T2", 
"T3", "T4", "T5", "T6", "T7", "V1", "V2", "V3", "V4", "XC", "XD", 
"XE", "XF", "XG", "XH", "XI", "XJ", "XL", "XM", "XN", "XO", "XP", 
"XQ", "XT", "XU", "XY", "Z4", "Z7", "ZB", "ZF", "ZG", "ZH", "ZI", 
"ZJ", "ZQ", "ZT")

地域のリストを表示

df_w6eda_2 |> filter(iso2c %in% REGION) |> distinct(country, iso2c)

国名とその地域・所得レベルを表示

df_w6eda_2 |> filter(!(iso2c %in% REGION)) |> distinct(country, iso2c, region, income)

分析する国のリスト

BRICS <- c("Brazil", "Russian Federation", "India", "China", "South Africa")

経年変化

a. 日本

df_w6_2 |> drop_na(co2pcap) |> filter(country == "Japan") |>
  ggplot(aes(year, co2pcap)) + geom_line() + 
  labs(title = "日本の一人当たりの二酸化炭素排出量")

気づいたこと・疑問

df_w6_2 |> drop_na(forest) |> filter(country == "Japan") |>
  ggplot(aes(year, forest)) + geom_line() + 
  labs(title = "日本の森林面積(%)")

気づいたこと・疑問

b. 選択した国・地域

df_w6_2 |> drop_na(co2pcap) |> filter(country %in% BRICS) |>
  ggplot(aes(year, co2pcap, col = country)) + geom_line() + 
  labs(title = "BRICS の一人当たりの二酸化炭素排出量")

気づいたこと・疑問

df_w6_2 |> drop_na(forest) |> filter(country %in% BRICS) |>
  ggplot(aes(year, forest, col = country)) + geom_line() + 
  labs(title = "BRICSの森林面積(%)")

気づいたこと・疑問

二つのデータの散布図

必要に応じて log10 スケール

a. すべての値の散布図

df_w6_2 |> ggplot(aes(forest, co2pcap, col = region)) + geom_point()

b. NA ではない値の散布図、近似(回帰)直線を表示

df_w6_2 |> drop_na(co2pcap, forest) |> 
  ggplot(aes(forest, co2pcap)) + geom_point(aes(col = region)) +
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE)

c. 地域を除き国のみの散布図、近似(回帰)直線を表示

df_w6_2 |> filter(!(iso2c %in% REGION)) |> drop_na(co2pcap, forest) |> 
  ggplot(aes(forest, co2pcap)) + geom_point(aes(col = region)) +
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE)

d. 最近の年を選択し、地域を除き国のもの散布図、近似(回帰)直線を表示

df_w6_2 |> filter(!(iso2c %in% REGION)) |> filter(year == 2020) |> drop_na(co2pcap, forest) |> 
  ggplot(aes(forest, co2pcap)) + geom_point(aes(col = region)) +
  geom_smooth(formula = 'y~x', method = "lm", se = FALSE)

気づいたこと・疑問

df_w6_2 |> filter(!(iso2c %in% REGION)) |> filter(year == 2020) |> drop_na(co2pcap, forest) |> 
  select(co2pcap, forest) |> cor() 

気づいたこと・疑問

LS0tCnRpdGxlOiAi56ysNumAsSDmjqLntKLnmoTjg4fjg7zjgr/liIbmnpAgLSBFREEsIFBhcnQgSUkiCmF1dGhvcjogIklELCBMYXN0LCBGaXJzdCIKZGF0ZTogIjIwMjTlubQx5pyIMzDml6UiCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0Ci0tLQoKIyMg5ryU57+SCgrku6XkuIvjga7mjIfmqJnjga7kuK3jgYvjgonjgIHkuozjgaTjgpLpgbjmip7jgZfjgabjgIHjg4fjg7zjgr/jga7mpoLopoHvvIhkZXNjcmlwdGlvbu+8ieOCkuiomOmMsuOBl+OAgeODh+ODvOOCv+OCkiBXREkg44Gn5Y+W5b6X44GX44CB5Lul5LiL44Gu5YiG5p6Q44KS44GZ44KL44CCCgoxLiAg5ZCE5bm05q+O44Gu44OH44O844K/44Gu5pWw44Gu5qOS44Kw44Op44OVCjIuICDlm73jgb7jgZ/jga/lnLDln5/jgpLpgbjmip4KMy4gIOOBneOCjOOBnuOCjOOBrue1jOW5tOWkieWMluOCkuihqOOBmeaKmOOCjOe3muOCsOODqeODlQogICAgYS4gIOaXpeacrAogICAgYi4gIOmBuOaKnuOBl+OBn+WbveOBvuOBn+OBr+WcsOWfnwo0LiAg5LqM44Gk44Gu44OH44O844K/44Gu5pWj5biD5ZuzLeW/heimgeOBq+W/nOOBmOOBpiBsb2cxMCDjgrnjgrHjg7zjg6vjgpLnlKjjgYTjgosKICAgIGEuICDjgZnjgbnjgabjga7lgKTjga7mlaPluIPlm7MKICAgIGIuICBOQSDjgafjga/jgarjgYTlgKTjga7mlaPluIPlm7PjgIHov5HkvLzvvIjlm57luLDvvInnm7Tnt5rjgpLooajnpLoKICAgIGMuICDlnLDln5/jgpLpmaTjgY3lm73jga7jgb/jga7mlaPluIPlm7PjgIHov5HkvLzvvIjlm57luLDvvInnm7Tnt5rjgpLooajnpLoKICAgIGQuICDmnIDov5Hjga7lubTjgpLpgbjmip7jgZfjgIHlnLDln5/jgpLpmaTjgY3lm73jga7jgoLjga7mlaPluIPlm7PjgIHov5HkvLzvvIjlm57luLDvvInnm7Tnt5rjgpLooajnpLoKCuOBneOCjOOBnuOCjOOBq+OBpOOBhOOBpuiAg+Wvn++8iOawl+OBpeOBhOOBn+OBk+OBqOOAgeeWkeWVj+OBquOBqe+8ieOCkuiomOOBmQoKPCEtLSAqKjIwMjMuMi4zLjIzOjU5Kiog44G+44Gn44GrIE1vb2RsZSDjga7mvJTnv5Ljga7oqrLpoYzjg5zjg4Pjgq/jgrnjgavmj5Dlh7rjgZfjgZ/jgoLjga7jgavjgaTjgYTjgabjga/jgIHjgarjgovjgbnjgY/jgIHml6njgY/opovjgabjgIHjg5XjgqPjg7zjg4njg5Djg4Pjgq/jgpLmm7jjgY3jgb7jgZnjgILjgZ3jgozku6XpmY3jgavmj5Dlh7rjgZXjgozjgZ/jgoLjga7jgoLopovjgb7jgZnjgYzjgIHjg5XjgqPjg7zjg4njg5Djg4Pjgq/jga/pgYXjgY/jgarjgovjgajmgJ3jgaPjgabjgY/jgaDjgZXjgYTjgIIgLS0+CgoKCiMjIyDjg4fjg7zjgr/mg4XloLEKCi0gICBDTzIgZW1pc3Npb25zIChtZXRyaWMgdG9ucyBwZXIgY2FwaXRhKSDvvJpFTi5BVE0uQ08yRS5QQyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9FTi5BVE0uQ08yRS5QQyldIChjbzJwY2FwKQoKLSAgIEZvcmVzdCBhcmVhICglIG9mIGxhbmQgYXJlYSnvvJpBRy5MTkQuRlJTVC5aUyBbW0xpbmtdKGh0dHBzOi8vZGF0YS53b3JsZGJhbmsub3JnL2luZGljYXRvci9BRy5MTkQuRlJTVC5aUyldIChmb3Jlc3QpCgotICAgUmVuZXdhYmxlIGVsZWN0cmljaXR5IG91dHB1dCAoJSBvZiB0b3RhbCBlbGVjdHJpY2l0eSBvdXRwdXQp77yaRUcuRUxDLlJORVcuWlMgW1tMaW5rXShodHRwczovL2RhdGEud29ybGRiYW5rLm9yZy9pbmRpY2F0b3IvRUcuRUxDLlJORVcuWlMpXSAocmVuZXdhYmxlKQoKLSAgIEVsZWN0cmljaXR5IHByb2R1Y3Rpb24gZnJvbSBvaWwsIGdhcyBhbmQgY29hbCBzb3VyY2VzICglIG9mIHRvdGFsKe+8mkVHLkVMQy5GT1NMLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL0VHLkVMQy5GT1NMLlpTKV0gKGZvc3NpbCkKCi0gICBFbGVjdHJpY2l0eSBwcm9kdWN0aW9uIGZyb20gbnVjbGVhciBzb3VyY2VzICglIG9mIHRvdGFsKe+8mkVHLkVMQy5OVUNMLlpTIFtbTGlua10oaHR0cHM6Ly9kYXRhLndvcmxkYmFuay5vcmcvaW5kaWNhdG9yL0VHLkVMQy5OVUNMLlpTKV0gKG51Y2xlYXIpCgoKIyDjgr/jgqTjg4jjg6sKCiMjIOODh+ODvOOCvwoKIyMjIOODh+ODvOOCv+aDheWgsQoKLSAgIOODh+ODvOOCv++8ke+8muWQjeWJjeOAgeOCs+ODvOODieOAgeWkieaVsOWQjeOAgeODquODs+OCrwoKLSAgIOamguimge+8mgoKLSAgIOODh+ODvOOCv++8ku+8muWQjeWJjeOAgeOCs+ODvOODieOAgeWkieaVsOWQjeOAgeODquODs+OCrwoKLSAgIOamguimge+8mgoKCgojIyMg44OH44O844K/44Gu5Y+W5b6XCgojIyMjIOa6luWCmQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFdESSkKYGBgCgrjg4fjg7zjgr/jga7jg4Djgqbjg7Pjg63jg7zjg4njgajkv53lrZjvvJrjgrPjg7zjg4njgajlpInmlbDlkI3jgpLmjIflrprjgIIKCl/jg4fjg7zjgr/jga7lkI3liY3jga/jgIHlpInjgYjjgZ/jgbvjgYbjgYzjgojjgYTjga7jgafjgIHkvovjgafjgoLjgIFkZl93NmVkYV8yIOOChOOAgWRmX3c2XzIg44Gr5aSJ44GI44Gm44GC44KK44G+44GZ44CC6Ieq5YiG44Gn5rG644KB44Gf44KC44Gu44KS5L2/44GG44Go44CB44KI44KK57e057+S44Gr44Gq44KK44G+44GZ44CCXwoKYGBgCmRmX3c2ZWRhXzIgPC0gV0RJKGluZGljYXRvciA9IGMoY28ycGNhcCA9ICJFTi5BVE0uQ08yRS5QQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVzdCA9ICJBRy5MTkQuRlJTVC5aUyIpLAogICAgICAgICAgICAgICAgZXh0cmEgPSBUUlVFKQpgYGAKCmBgYHtyIGV2YWwgPSBGQUxTRX0KCgpgYGAKCirvvJLlm57nm67jgYvjgonjga/jgIFkYXRhIOOBi+OCieiqreOBv+i+vOOCgeOCi+OCiOOBhuOBq+OBl+OBpuOBiuOBjyDjg5XjgqHjgqTjg6sgKFJtZCkg44Gu5L+d5a2Y5aC05omA44GrIGRhdGEg44OV44Kp44Or44OA44GM44GC44KL44GT44Go44KS56K66KqNKgoKYGBgCndyaXRlX2NzdihkZl93NmVkYV8yLCAiZGF0YS93NmVkYV8xLmNzdiIpCmBgYAoKYGBge3IgZXZhbCA9IEZBTFNFfQoKYGBgCgpgYGAKZGZfdzZlZGFfMiA8LSByZWFkX2NzdigiZGF0YS93NmVkYV8yLmNzdiIpCmBgYAoKYGBge3J9CgpgYGAKCiMjIyDjg4fjg7zjgr/jga7norroqo0KCmBgYApkZl93NmVkYV8yCmBgYAoKYGBge3J9CgpgYGAKCmBgYApzdHIoZGZfdzZlZGFfMikKYGBgCgpgYGB7cn0KCmBgYAoKIyMjIyDlpInmlbDjga7pgbjmip7vvIhzZWxlY3RpbmfvvIkKCmBgYApkZl93Nl8yIDwtIGRmX3c2ZWRhXzIgfD4gCiAgc2VsZWN0KGNvdW50cnksIGlzbzJjLCB5ZWFyLCBjbzJwY2FwLCBmb3Jlc3QsIHJlZ2lvbiwgaW5jb21lKQpkZl93Nl8yCmBgYAoKYGBge3J9CgoKYGBgCgojIyMg5ZCE5bm05q+O44Gu44OH44O844K/44Gu5pWw44Gu5qOS44Kw44Op44OVCgpgYGAKZGZfdzZlZGFfMiB8PiBkcm9wX25hKGNvMnBjYXAsIGZvcmVzdCkgfD4KICBnZ3Bsb3QoYWVzKHllYXIpKSArIGdlb21fYmFyKCkKYGBgCgpgYGB7cn0KCgpgYGAKCgojIyMg5Zu944Go5Zyw5Z+fCgpjb3VudHJ5IOOBq+OBr+OAgeWbveOBqOWcsOWfn+S4oeaWueOBjOWFpeOBo+OBpuOBhOOBvuOBmeOAguWcsOWfn+OBriBpc28yYyDjga/ku6XkuIvjga7jgoLjga7jgafjgZnjgIIKCmBgYHtyfQpSRUdJT04gPC0gYygiMUEiLCAiMVciLCAiNEUiLCAiNkYiLCAiNk4iLCAiNlgiLCAiN0UiLCAiOFMiLCAiQTQiLCAiQTUiLCAKIkE5IiwgIkIxIiwgIkIyIiwgIkIzIiwgIkI0IiwgIkI2IiwgIkI3IiwgIkI4IiwgIkM0IiwgIkM1IiwgIkM2IiwgCiJDNyIsICJDOCIsICJDOSIsICJEMiIsICJEMyIsICJENCIsICJENSIsICJENiIsICJENyIsICJFVSIsICJGMSIsIAoiRjYiLCAiTTEiLCAiTTIiLCAiTjYiLCAiT0UiLCAiUjYiLCAiUzEiLCAiUzIiLCAiUzMiLCAiUzQiLCAiVDIiLCAKIlQzIiwgIlQ0IiwgIlQ1IiwgIlQ2IiwgIlQ3IiwgIlYxIiwgIlYyIiwgIlYzIiwgIlY0IiwgIlhDIiwgIlhEIiwgCiJYRSIsICJYRiIsICJYRyIsICJYSCIsICJYSSIsICJYSiIsICJYTCIsICJYTSIsICJYTiIsICJYTyIsICJYUCIsIAoiWFEiLCAiWFQiLCAiWFUiLCAiWFkiLCAiWjQiLCAiWjciLCAiWkIiLCAiWkYiLCAiWkciLCAiWkgiLCAiWkkiLCAKIlpKIiwgIlpRIiwgIlpUIikKYGBgCgoKCiMjIyMg5Zyw5Z+f44Gu44Oq44K544OI44KS6KGo56S6CgpgYGAKZGZfdzZlZGFfMiB8PiBmaWx0ZXIoaXNvMmMgJWluJSBSRUdJT04pIHw+IGRpc3RpbmN0KGNvdW50cnksIGlzbzJjKQpgYGAKCmBgYHtyfQoKYGBgCgojIyMjIOWbveWQjeOBqOOBneOBruWcsOWfn+ODu+aJgOW+l+ODrOODmeODq+OCkuihqOekugoKYGBgCmRmX3c2ZWRhXzIgfD4gZmlsdGVyKCEoaXNvMmMgJWluJSBSRUdJT04pKSB8PiBkaXN0aW5jdChjb3VudHJ5LCBpc28yYywgcmVnaW9uLCBpbmNvbWUpCmBgYAoKYGBge3J9CgpgYGAKCiMjIyDliIbmnpDjgZnjgovlm73jga7jg6rjgrnjg4gKCmBgYApCUklDUyA8LSBjKCJCcmF6aWwiLCAiUnVzc2lhbiBGZWRlcmF0aW9uIiwgIkluZGlhIiwgIkNoaW5hIiwgIlNvdXRoIEFmcmljYSIpCmBgYAoKYGBge3J9CgpgYGAKCiMjIyDntYzlubTlpInljJYKCiMjIyBhLiDml6XmnKwKCmBgYApkZl93Nl8yIHw+IGRyb3BfbmEoY28ycGNhcCkgfD4gZmlsdGVyKGNvdW50cnkgPT0gIkphcGFuIikgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIGNvMnBjYXApKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLml6XmnKzjga7kuIDkurrlvZPjgZ/jgorjga7kuozphbjljJbngq3ntKDmjpLlh7rph48iKQpgYGAKCmBgYHtyfQoKCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKYGBgCmRmX3c2XzIgfD4gZHJvcF9uYShmb3Jlc3QpIHw+IGZpbHRlcihjb3VudHJ5ID09ICJKYXBhbiIpIHw+CiAgZ2dwbG90KGFlcyh5ZWFyLCBmb3Jlc3QpKSArIGdlb21fbGluZSgpICsgCiAgbGFicyh0aXRsZSA9ICLml6XmnKzjga7mo67mnpfpnaLnqY3vvIjvvIXvvIkiKQpgYGAKCmBgYHtyfQoKCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgoKIyMjIGIuIOmBuOaKnuOBl+OBn+WbveODu+WcsOWfnwoKYGBgCmRmX3c2XzIgfD4gZHJvcF9uYShjbzJwY2FwKSB8PiBmaWx0ZXIoY291bnRyeSAlaW4lIEJSSUNTKSB8PgogIGdncGxvdChhZXMoeWVhciwgY28ycGNhcCwgY29sID0gY291bnRyeSkpICsgZ2VvbV9saW5lKCkgKyAKICBsYWJzKHRpdGxlID0gIkJSSUNTIOOBruS4gOS6uuW9k+OBn+OCiuOBruS6jOmFuOWMlueCree0oOaOkuWHuumHjyIpCmBgYAoKYGBge3J9CgoKYGBgCgoqKuawl+OBpeOBhOOBn+OBk+OBqOODu+eWkeWVjyoqCgpgYGAKZGZfdzZfMiB8PiBkcm9wX25hKGZvcmVzdCkgfD4gZmlsdGVyKGNvdW50cnkgJWluJSBCUklDUykgfD4KICBnZ3Bsb3QoYWVzKHllYXIsIGZvcmVzdCwgY29sID0gY291bnRyeSkpICsgZ2VvbV9saW5lKCkgKyAKICBsYWJzKHRpdGxlID0gIkJSSUNT44Gu5qOu5p6X6Z2i56mN77yI77yF77yJIikKYGBgCgpgYGB7cn0KCgpgYGAKCioq5rCX44Gl44GE44Gf44GT44Go44O755aR5ZWPKioKCiMjIyDkuozjgaTjga7jg4fjg7zjgr/jga7mlaPluIPlm7MKCuW/heimgeOBq+W/nOOBmOOBpiBsb2cxMCDjgrnjgrHjg7zjg6sKCiMjIyMgYS4g44GZ44G544Gm44Gu5YCk44Gu5pWj5biD5ZuzCgpgYGAKZGZfdzZfMiB8PiBnZ3Bsb3QoYWVzKGZvcmVzdCwgY28ycGNhcCwgY29sID0gcmVnaW9uKSkgKyBnZW9tX3BvaW50KCkKYGBgCgpgYGB7cn0KCmBgYAoKIyMjIyBiLiBOQSDjgafjga/jgarjgYTlgKTjga7mlaPluIPlm7PjgIHov5HkvLzvvIjlm57luLDvvInnm7Tnt5rjgpLooajnpLoKCmBgYApkZl93Nl8yIHw+IGRyb3BfbmEoY28ycGNhcCwgZm9yZXN0KSB8PiAKICBnZ3Bsb3QoYWVzKGZvcmVzdCwgY28ycGNhcCkpICsgZ2VvbV9wb2ludChhZXMoY29sID0gcmVnaW9uKSkgKwogIGdlb21fc21vb3RoKGZvcm11bGEgPSAneX54JywgbWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KCgpgYGAKCiMjIyMgYy4g5Zyw5Z+f44KS6Zmk44GN5Zu944Gu44G/44Gu5pWj5biD5Zuz44CB6L+R5Ly877yI5Zue5biw77yJ55u057ea44KS6KGo56S6CgpgYGAKZGZfdzZfMiB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpIHw+IGRyb3BfbmEoY28ycGNhcCwgZm9yZXN0KSB8PiAKICBnZ3Bsb3QoYWVzKGZvcmVzdCwgY28ycGNhcCkpICsgZ2VvbV9wb2ludChhZXMoY29sID0gcmVnaW9uKSkgKwogIGdlb21fc21vb3RoKGZvcm11bGEgPSAneX54JywgbWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KCgpgYGAKCiMjIyMgZC4g5pyA6L+R44Gu5bm044KS6YG45oqe44GX44CB5Zyw5Z+f44KS6Zmk44GN5Zu944Gu44KC44Gu5pWj5biD5Zuz44CB6L+R5Ly877yI5Zue5biw77yJ55u057ea44KS6KGo56S6CgpgYGAKZGZfdzZfMiB8PiBmaWx0ZXIoIShpc28yYyAlaW4lIFJFR0lPTikpIHw+IGZpbHRlcih5ZWFyID09IDIwMjApIHw+IGRyb3BfbmEoY28ycGNhcCwgZm9yZXN0KSB8PiAKICBnZ3Bsb3QoYWVzKGZvcmVzdCwgY28ycGNhcCkpICsgZ2VvbV9wb2ludChhZXMoY29sID0gcmVnaW9uKSkgKwogIGdlb21fc21vb3RoKGZvcm11bGEgPSAneX54JywgbWV0aG9kID0gImxtIiwgc2UgPSBGQUxTRSkKYGBgCgpgYGB7cn0KCgpgYGAKCioq5rCX44Gl44GE44Gf44GT44Go44O755aR5ZWPKioKCgoKYGBgCmRmX3c2XzIgfD4gZmlsdGVyKCEoaXNvMmMgJWluJSBSRUdJT04pKSB8PiBmaWx0ZXIoeWVhciA9PSAyMDIwKSB8PiBkcm9wX25hKGNvMnBjYXAsIGZvcmVzdCkgfD4gCiAgc2VsZWN0KGNvMnBjYXAsIGZvcmVzdCkgfD4gY29yKCkgCmBgYAoKCmBgYHtyfQoKCmBgYAoKKirmsJfjgaXjgYTjgZ/jgZPjgajjg7vnlpHllY8qKgo=