First, let’s continue aggregating the data more cleanly


sustainable_loans <- process_iif_gb_issuance(range = "P4:U41", 
                                           issuance_type = "Sustainable loans")
iif_issuance_data <- iif_issuance_data %>%
  bind_rows(sustainable_loans)

green_bonds <- process_iif_gb_issuance(range = "W4:AB41", 
                                           issuance_type = "Green bonds")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(green_bonds)

green_abs <- process_iif_gb_issuance(range = "AD4:AI41", 
                                           issuance_type = "Green ABS")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(green_abs)

sustainability_bonds <- process_iif_gb_issuance(range = "AK4:AP41", 
                                           issuance_type = "Sustainability bonds")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(sustainability_bonds)

social_bonds <- process_iif_gb_issuance(range = "AR4:AW41", 
                                           issuance_type = "Social bonds")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(social_bonds)

green_municipal_bonds <- process_iif_gb_issuance(range = "AY4:BD41", 
                                           issuance_type = "Green municipal bonds")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(green_municipal_bonds)

sustainability_linked_bonds <- process_iif_gb_issuance(range = "BF4:BK41", 
                                           issuance_type = "Sustainability-linked bonds")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(sustainability_linked_bonds)

green_loans <- process_iif_gb_issuance(range = "BM4:BR41", 
                                           issuance_type = "Green loans")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(green_loans)

sustainability_linked_loans <- process_iif_gb_issuance(range = "BT4:BY41", 
                                           issuance_type = "Sustainability-linked loans")

iif_issuance_data <- iif_issuance_data %>%
  bind_rows(sustainability_linked_loans)

iif_issuance_data %>% glimpse()
Rows: 2,035
Columns: 4
$ date            <date> 2013-03-31, 2013-03-31, 2013-03-31, 2013-03-31, 2013-03-31, 2013-06-30, 2013-06-30, 2013…
$ geography       <chr> "Mature markets", "Emerging markets", "Offshore centers", "Supranationals", "Global", "Ma…
$ issuance_bn_usd <dbl> 6.18958089, 0.45115568, 0.00000000, 1.15915118, 7.79988775, 4.07821059, 0.59500834, 0.000…
$ issuance_type   <chr> "Sustainable debt (bonds and loans)", "Sustainable debt (bonds and loans)", "Sustainable …

Here, I save the data as a CSV file.

write_csv(iif_issuance_data, here("02_data_processed", "iif_combined.csv"))

Now, the fun part…

We’ve heard a lot about growth in the sustainable finance sector, but where is this growth located?

LS0tCnRpdGxlOiAiQXJpbidzIFdlZWsgOCBIb21ld29yayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoaGVyZSkKbGlicmFyeShqYW5pdG9yKQpsaWJyYXJ5KGNvdW50cnljb2RlKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShsdWJyaWRhdGUpCmxpYnJhcnkoZXNxdWlzc2UpCgpvcHRpb25zKHNjaXBlbj0xMCkgIyBmb3JjZXMgcmVndWxhciBub3RhdGlvbiB2cyBzY2llbnRpZmljIG5vdGF0aW9uIChpZTUpCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpoZXJlKCIwMV9kYXRhX3JhdyIsImltZl93ZW8iKSAlPiUKICBsaXN0LmZpbGVzKCkKYGBgCgpgYGB7ciBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CgpyYXdfd2VvX3RibCA8LSBoZXJlKCIwMV9kYXRhX3JhdyIsICJpbWZfd2VvIiwgIldFT09jdDIwMjJhbGwudHh0IikgJT4lCiAgcmVhZF90c3YoKSAKCnJhd193ZW9fdGJsCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpyYXdfd2VvX3RibCAlPiUgZ2xpbXBzZSgpCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIFZpZXcocmF3X3dlb190YmwpCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpyYXdfd2VvX3RibCA8LSBoZXJlKCIwMV9kYXRhX3JhdyIsICJpbWZfd2VvIiwgIldFT09jdDIwMjJhbGwudHh0IikgJT4lCiAgcmVhZF90c3YoY29sX3R5cGVzID0gY29scyguZGVmYXVsdCA9ICJjIiksIG5hID0gYygibi9hIiwgIiIsICItLSIpKSAKCnJhd193ZW9fdGJsCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpyYXdfd2VvX3RibCAlPiUKICBjbGVhbl9uYW1lcygpICU+JQogIHNlbGVjdChpc28sIGNvdW50cnkpICU+JQogIHVuaXF1ZSgpCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpyYXdfd2VvX3RibCAlPiUKICBjbGVhbl9uYW1lcygpICU+JQogIHNlbGVjdCh3ZW9fc3ViamVjdF9jb2RlLCBzdWJqZWN0X2Rlc2NyaXB0b3IsIHVuaXRzLCBzY2FsZSkgJT4lCiAgdW5pcXVlKCkKYGBgCgpgYGB7ciBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnZhcnNfd2Vfd2FudCA8LSB0cmliYmxlKAogIH53ZW9fc3ViamVjdF9jb2RlLCB+b3VyX25hbWUsCiAgIk5HRFBfUlBDSCIsICJSZWFsIEdEUCBHcm93dGggKCUpIgopCgp2YXJzX3dlX3dhbnQKYGBgCgpgYGB7ciBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CnJhd193ZW9fdGJsICU+JQogIGNsZWFuX25hbWVzKCkgJT4lCiAgcmlnaHRfam9pbih2YXJzX3dlX3dhbnQsIGJ5ID0gIndlb19zdWJqZWN0X2NvZGUiKQpgYGAKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kd2VvX2NvZGVzX3RibCA8LSB0cmliYmxlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfnNob3J0X25hbWVfdW5pdCwgICAgICAgICAgICAgICAgICAgfnNob3J0X25hbWUsICAgICAgICAgICB+c2hvcnRfdW5pdCwgICAgICAgICAgICAgICAgIH5jYXRlZ29yeSwgfndlb19zdWJqZWN0X2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlYWwgR0RQIChibiBsb2NhbCBjdXJyZW5jeSkiLCAgICAgICAgICAgICAgICAgICAgIlJlYWwgR0RQIiwgICAiYm4gbG9jYWwgY3VycmVuY3kiLCAgICAgICAgICAgICAgICAgICAgICJHRFAiLCAgICAgICAgICAiTkdEUF9SIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhbCBHRFAgKCUgY2hhbmdlKSIsICAgICAgICAgICAgICAgICAgICAiUmVhbCBHRFAiLCAgICAgICAgICAgICIlIGNoYW5nZSIsICAgICAgICAgICAgICAgICAgICAgIkdEUCIsICAgICAgICJOR0RQX1JQQ0giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb21pbmFsIEdEUCAoYm4gbG9jYWwgY3VycmVuY3kpIiwgICAgICAgICAgICAgICAgICJOb21pbmFsIEdEUCIsICAgImJuIGxvY2FsIGN1cnJlbmN5IiwgICAgICAgICAgICAgICAgICAgICAiR0RQIiwgICAgICAgICAgICAiTkdEUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9taW5hbCBHRFAgKGJuIFVTRCkiLCAgICAgICAgICAgICAgICAgIk5vbWluYWwgR0RQIiwgICAgICAgICAgICAgICJibiBVU0QiLCAgICAgICAgICAgICAgICAgICAgICJHRFAiLCAgICAgICAgICAgIk5HRFBEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb21pbmFsIEdEUCAoYm4gUFBQKSIsICAgICAgICAgICAgICAgICAiTm9taW5hbCBHRFAiLCAgICAgICAgICAgICAgImJuIFBQUCIsICAgICAgICAgICAgICAgICAgICAgIkdEUCIsICAgICAgICAgICJQUFBHRFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdEUCBEZWZsYXRvciAoaW5kZXgpIiwgICAgICAgICAgICAgICAgIkdEUCBEZWZsYXRvciIsICAgICAgICAgICAgICAgImluZGV4IiwgICAgICAgICAgICAgICAgICAgICAiR0RQIiwgICAgICAgICAgIk5HRFBfRCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWFsIEdEUCBwZXIgY2FwaXRhIChsb2NhbCBjdXJyZW5jeSkiLCAgICAgICAgICJSZWFsIEdEUCBwZXIgY2FwaXRhIiwgICAgICAibG9jYWwgY3VycmVuY3kiLCAgICAgICAgICAgICAgICAgICAgICJHRFAiLCAgICAgICAgICJOR0RQUlBDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhbCBHRFAgcGVyIGNhcGl0YSAoUFBQKSIsICAgICAgICAgIlJlYWwgR0RQIHBlciBjYXBpdGEiLCAgICAgICAgICAgICAgICAgIlBQUCIsICAgICAgICAgICAgICAgICAgICAgIkdEUCIsICAgICAgIk5HRFBSUFBQUEMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9taW5hbCBHRFAgcGVyIGNhcGl0YSAobG9jYWwgY3VycmVuY3kpIiwgICAgICAiTm9taW5hbCBHRFAgcGVyIGNhcGl0YSIsICAgICAgImxvY2FsIGN1cnJlbmN5IiwgICAgICAgICAgICAgICAgICAgICAiR0RQIiwgICAgICAgICAgIk5HRFBQQyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbWluYWwgR0RQIHBlciBjYXBpdGEgKFVTRCkiLCAgICAgICJOb21pbmFsIEdEUCBwZXIgY2FwaXRhIiwgICAgICAgICAgICAgICAgICJVU0QiLCAgICAgICAgICAgICAgICAgICAgICJHRFAiLCAgICAgICAgICJOR0RQRFBDIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9taW5hbCBHRFAgcGVyIGNhcGl0YSAoUFBQKSIsICAgICAgIk5vbWluYWwgR0RQIHBlciBjYXBpdGEiLCAgICAgICAgICAgICAgICAgIlBQUCIsICAgICAgICAgICAgICAgICAgICAgIkdEUCIsICAgICAgICAgICAiUFBQUEMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdXRwdXQgR2FwICglIG9mIHBvdGVudGlhbCBHRFApIiwgICAgICAgICAgICAgICAgICAiT3V0cHV0IEdhcCIsICAiJSBvZiBwb3RlbnRpYWwgR0RQIiwgICAgICAgICAgICAgICAgICAgICAiR0RQIiwgICAgICAiTkdBUF9OUEdEUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0RQICUgc2hhcmUgb2Ygd29ybGQgdG90YWwgKFBQUCkiLCAgIkdEUCAlIHNoYXJlIG9mIHdvcmxkIHRvdGFsIiwgICAgICAgICAgICAgICAgICJQUFAiLCAgICAgICAgICAgICAgICAgICAgICJHRFAiLCAgICAgICAgICAgIlBQUFNIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbXBsaWVkIFBQUCBDb252ZXJzaW9uIFJhdGUgKExDIHBlciBpbnQgZG9sbGFyKSIsICJJbXBsaWVkIFBQUCBDb252ZXJzaW9uIFJhdGUiLCAgICJMQyBwZXIgaW50IGRvbGxhciIsICAgICAgICAgICAgICAgICAgICJvdGhlciIsICAgICAgICAgICAiUFBQRVgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG90YWwgSW52ZXN0bWVudCAoJSBvZiBHRFApIiwgICAgICAgICAgICAiVG90YWwgSW52ZXN0bWVudCIsICAgICAgICAgICAgIiUgb2YgR0RQIiwgICAgInNhdmluZ3MgJiBpbnZlc3RtZW50IiwgICAgICAgICJOSURfTkdEUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHcm9zcyBOYXRpb25hbCBTYXZpbmdzICglIG9mIEdEUCkiLCAgICAgICJHcm9zcyBOYXRpb25hbCBTYXZpbmdzIiwgICAgICAgICAgICAiJSBvZiBHRFAiLCAgICAic2F2aW5ncyAmIGludmVzdG1lbnQiLCAgICAgICAiTkdTRF9OR0RQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZsYXRpb24gKGF2ZyAtIGluZGV4KSIsICAgICAgICAgICAgICAgICAgICJJbmZsYXRpb24iLCAgICAgICAgICJhdmcgLSBpbmRleCIsICAgICAgICAgICAgICAgImluZmxhdGlvbiIsICAgICAgICAgICAgIlBDUEkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkluZmxhdGlvbiAoYXZnIC0gJSBjaGFuZ2UpIiwgICAgICAgICAgICAgICAgICAgIkluZmxhdGlvbiIsICAgICAgImF2ZyAtICUgY2hhbmdlIiwgICAgICAgICAgICAgICAiaW5mbGF0aW9uIiwgICAgICAgICAiUENQSVBDSCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5mbGF0aW9uIChlb3AgLSBpbmRleCkiLCAgICAgICAgICAgICAgICAgICAiSW5mbGF0aW9uIiwgICAgICAgICAiZW9wIC0gaW5kZXgiLCAgICAgICAgICAgICAgICJpbmZsYXRpb24iLCAgICAgICAgICAgIlBDUElFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbmZsYXRpb24gKGVvcCAtICUgY2hhbmdlKSIsICAgICAgICAgICAgICAgICAgICJJbmZsYXRpb24iLCAgICAgICJlb3AgLSAlIGNoYW5nZSIsICAgICAgICAgICAgICAgImluZmxhdGlvbiIsICAgICAgICAiUENQSUVQQ0giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxJQk9SIC0gNm0gKCUpIiwgICAgICAgICAgICAgICAgICAiTElCT1IgLSA2bSIsICAgICAgICAgICAgICAgICAgICIlIiwgICAgICAgICAgICAgICAgICAgIm90aGVyIiwgICAgICAgICAiRkxJQk9SNiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW1wb3J0cyAtIEdvb2RzICYgU2VydmljZXMgKHZvbHVtZSAlIGNoYW5nZSkiLCAgIkltcG9ydHMgLSBHb29kcyAmIFNlcnZpY2VzIiwgICAgICJ2b2x1bWUgJSBjaGFuZ2UiLCAgICAgICAgICAgICAgICAiZXh0ZXJuYWwiLCAgICAgICAgICJUTV9SUENIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkltcG9ydHMgLSBHb29kcyAodm9sdW1lICUgY2hhbmdlKSIsICAgICAgICAgICAgICJJbXBvcnRzIC0gR29vZHMiLCAgICAgInZvbHVtZSAlIGNoYW5nZSIsICAgICAgICAgICAgICAgICJleHRlcm5hbCIsICAgICAgICAiVE1HX1JQQ0giLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cG9ydHMgLSBHb29kcyAmIFNlcnZpY2VzICh2b2x1bWUgJSBjaGFuZ2UpIiwgICJFeHBvcnRzIC0gR29vZHMgJiBTZXJ2aWNlcyIsICAgICAidm9sdW1lICUgY2hhbmdlIiwgICAgICAgICAgICAgICAgImV4dGVybmFsIiwgICAgICAgICAiVFhfUlBDSCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBvcnRzIC0gR29vZHMgKHZvbHVtZSAlIGNoYW5nZSkiLCAgICAgICAgICAgICAiRXhwb3J0cyAtIEdvb2RzIiwgICAgICJ2b2x1bWUgJSBjaGFuZ2UiLCAgICAgICAgICAgICAgICAiZXh0ZXJuYWwiLCAgICAgICAgIlRYR19SUENIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuZW1wbG95bWVudCBSYXRlICglKSIsICAgICAgICAgICAiVW5lbXBsb3ltZW50IFJhdGUiLCAgICAgICAgICAgICAgICAgICAiJSIsICJwb3B1bGF0aW9uICYgZW1wbG95bWVudCIsICAgICAgICAgICAgICJMVVIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW1wbG95bWVudCAobW4pIiwgICAgICAgICAgICAgICAgICAiRW1wbG95bWVudCIsICAgICAgICAgICAgICAgICAgIm1uIiwgInBvcHVsYXRpb24gJiBlbXBsb3ltZW50IiwgICAgICAgICAgICAgICJMRSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQb3B1bGF0aW9uIChtbikiLCAgICAgICAgICAgICAgICAgICJQb3B1bGF0aW9uIiwgICAgICAgICAgICAgICAgICAibW4iLCAicG9wdWxhdGlvbiAmIGVtcGxveW1lbnQiLCAgICAgICAgICAgICAgIkxQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlzY2FsIFJldmVudWUgKGJuIGxvY2FsIGN1cnJlbmN5KSIsICAgICAgICAgICAgICAiRmlzY2FsIFJldmVudWUiLCAgICJibiBsb2NhbCBjdXJyZW5jeSIsICAgICAgICAgICAiZmlzY2FsICYgZGVidCIsICAgICAgICAgICAgICJHR1IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXNjYWwgUmV2ZW51ZSAoJSBvZiBHRFApIiwgICAgICAgICAgICAgICJGaXNjYWwgUmV2ZW51ZSIsICAgICAgICAgICAgIiUgb2YgR0RQIiwgICAgICAgICAgICJmaXNjYWwgJiBkZWJ0IiwgICAgICAgICJHR1JfTkdEUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlzY2FsIEV4cGVuZGl0dXJlIChibiBsb2NhbCBjdXJyZW5jeSkiLCAgICAgICAgICAiRmlzY2FsIEV4cGVuZGl0dXJlIiwgICAiYm4gbG9jYWwgY3VycmVuY3kiLCAgICAgICAgICAgImZpc2NhbCAmIGRlYnQiLCAgICAgICAgICAgICAiR0dYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXNjYWwgRXhwZW5kaXR1cmUgKCUgb2YgR0RQKSIsICAgICAgICAgICJGaXNjYWwgRXhwZW5kaXR1cmUiLCAgICAgICAgICAgICIlIG9mIEdEUCIsICAgICAgICAgICAiZmlzY2FsICYgZGVidCIsICAgICAgICAiR0dYX05HRFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXNjYWwgQmFsYW5jZSAoYm4gbG9jYWwgY3VycmVuY3kpIiwgICAgICAgICAgICAgICJGaXNjYWwgQmFsYW5jZSIsICAgImJuIGxvY2FsIGN1cnJlbmN5IiwgICAgICAgICAgICJmaXNjYWwgJiBkZWJ0IiwgICAgICAgICAgIkdHWENOTCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpc2NhbCBCYWxhbmNlICglIG9mIEdEUCkiLCAgICAgICAgICAgICAgIkZpc2NhbCBCYWxhbmNlIiwgICAgICAgICAgICAiJSBvZiBHRFAiLCAgICAgICAgICAgImZpc2NhbCAmIGRlYnQiLCAgICAgIkdHWENOTF9OR0RQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlzY2FsIEJhbGFuY2UgLSBTdHJ1Y3R1cmFsIChibiAtIGxvY2FsIGN1cnJlbmN5KSIsICJGaXNjYWwgQmFsYW5jZSAtIFN0cnVjdHVyYWwiLCAiYm4gLSBsb2NhbCBjdXJyZW5jeSIsICAgICAgICAgICAiZmlzY2FsICYgZGVidCIsICAgICAgICAgICAgIkdHU0IiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpc2NhbCBCYWxhbmNlIC0gU3RydWN0dXJhbCAoJSBvZiBHRFApIiwgIkZpc2NhbCBCYWxhbmNlIC0gU3RydWN0dXJhbCIsICAgICAgICAgICAgIiUgb2YgR0RQIiwgICAgICAgICAgICJmaXNjYWwgJiBkZWJ0IiwgICAgICAiR0dTQl9OUEdEUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpc2NhbCBCYWxhbmNlIC0gUHJpbWFyeSAoYm4gLSBsb2NhbCBjdXJyZW5jeSkiLCAgICAiRmlzY2FsIEJhbGFuY2UgLSBQcmltYXJ5IiwgImJuIC0gbG9jYWwgY3VycmVuY3kiLCAgICAgICAgICAgImZpc2NhbCAmIGRlYnQiLCAgICAgICAgICJHR1hPTkxCIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGaXNjYWwgQmFsYW5jZSAtIFByaW1hcnkgKCUgb2YgR0RQKSIsICAgICJGaXNjYWwgQmFsYW5jZSAtIFByaW1hcnkiLCAgICAgICAgICAgICIlIG9mIEdEUCIsICAgICAgICAgICAiZmlzY2FsICYgZGVidCIsICAgICJHR1hPTkxCX05HRFAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVidCAtIE5ldCAoYm4gbG9jYWwgY3VycmVuY3kpIiwgICAgICAgICAgICAgICAgICAiRGVidCAtIE5ldCIsICAgImJuIGxvY2FsIGN1cnJlbmN5IiwgICAgICAgICAgICJmaXNjYWwgJiBkZWJ0IiwgICAgICAgICAgIkdHWFdETiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ0IC0gTmV0ICglIG9mIEdEUCkiLCAgICAgICAgICAgICAgICAgICJEZWJ0IC0gTmV0IiwgICAgICAgICAgICAiJSBvZiBHRFAiLCAgICAgICAgICAgImZpc2NhbCAmIGRlYnQiLCAgICAgIkdHWFdETl9OR0RQIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ0IC0gR3Jvc3MgKGJuIGxvY2FsIGN1cnJlbmN5KSIsICAgICAgICAgICAgICAgICJEZWJ0IC0gR3Jvc3MiLCAgICJibiBsb2NhbCBjdXJyZW5jeSIsICAgICAgICAgICAiZmlzY2FsICYgZGVidCIsICAgICAgICAgICJHR1hXREciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlYnQgLSBHcm9zcyAoJSBvZiBHRFApIiwgICAgICAgICAgICAgICAgIkRlYnQgLSBHcm9zcyIsICAgICAgICAgICAgIiUgb2YgR0RQIiwgICAgICAgICAgICJmaXNjYWwgJiBkZWJ0IiwgICAgICJHR1hXREdfTkdEUCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vbWluYWwgR0RQIEZZIChibiBsb2NhbCBjdXJyZW5jeSkiLCAgICAgICAgICAgICAgIk5vbWluYWwgR0RQIEZZIiwgICAiYm4gbG9jYWwgY3VycmVuY3kiLCAgICAgICAgICAgImZpc2NhbCAmIGRlYnQiLCAgICAgICAgICJOR0RQX0ZZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50IEFjY291bnQgQmFsYW5jZSAoYm4gVVNEKSIsICAgICAiQ3VycmVudCBBY2NvdW50IEJhbGFuY2UiLCAgICAgICAgICAgICAgImJuIFVTRCIsICAgICAgICAgICAgICAgICJleHRlcm5hbCIsICAgICAgICAgICAgICJCQ0EiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDdXJyZW50IEFjY291bnQgQmFsYW5jZSAoJSBvZiBHRFApIiwgICAgICJDdXJyZW50IEFjY291bnQgQmFsYW5jZSIsICAgICAgICAgICAgIiUgb2YgR0RQIiwgICAgICAgICAgICAgICAgImV4dGVybmFsIiwgICAgICAgIkJDQV9OR0RQRCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCgp3ZW9fY29kZXNfdGJsCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpyYXdfd2VvX3RibCAlPiUKICAjIGNvZXJzZSBhbGwgY29sdW1ucyB0byBjaGFyYWN0ZXIgc28gbm8gcHJvYmxlbXMgd2l0aCBwaXZvdF9sb25nZXIoKSAgCiAgbXV0YXRlKGFjcm9zcyguZm5zID0gYXMuY2hhcmFjdGVyKSkgJT4lIAogICMgcGl2b3QgbG9uZ2VyIGFsbCBjb2x1bW5zIHRoYXQgYXJlIHllYXJzLiAKICAjICJcXGR7NH0iIGlzIGEgcmVnZXggcGF0dGVybiBmb3IgZmluZGluZyBhbGwgY29sdW1ucyB3aG9zZSBuYW1lIGlzIDQgZGlnaXRzCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBtYXRjaGVzKCJcXGR7NH0iKSwgbmFtZXNfdG8gPSAieWVhciIpICU+JQogICMgamFuaXRvcjo6Y2xlYW5fbmFtZXMoKSB0byBtYWtlIGFsbCBzbmFrZV9jYXNlCiAgY2xlYW5fbmFtZXMoKSAlPiUKICAjIGNvZXJjZSBjb2x1bW5zIHRvIG51bWVyaWMKICBtdXRhdGUoYWNyb3NzKGMoImVzdGltYXRlc19zdGFydF9hZnRlciIsICJ5ZWFyIiwgInZhbHVlIiksIGFzLm51bWVyaWMpKSAlPiUKICAjIHJlbmFtZSB0byBpc28zYyB0byBhbGlnbiB3aXRoIG90aGVyIGRhdGFzZXRzCiAgcmVuYW1lKGlzbzNjID0gaXNvKSAlPiUKICAjIHVzZSBjb3VudHJ5Y29kZSBjb3VudHJ5CiAgbXV0YXRlKGNvdW50cnlfbmFtZSA9IGNvdW50cnljb2RlKGlzbzNjLCBvcmlnaW4gPSAiaXNvM2MiLCBkZXN0aW5hdGlvbiA9ICJjb3VudHJ5Lm5hbWUiKSkgJT4lCiAgIyBqb2luIHdpdGggbXkgY3VzdG9tIG5hbWVzCiAgbGVmdF9qb2luKHdlb19jb2Rlc190YmwsIGJ5ID0gIndlb19zdWJqZWN0X2NvZGUiKSAlPiUKICAjIHNlbGVjdCByZWxldmFudCBjb2x1bW5zLgogIHNlbGVjdChjb3VudHJ5X25hbWUsIGlzbzNjLCBzaG9ydF9uYW1lX3VuaXQ6Y2F0ZWdvcnksIHllYXIsIHZhbHVlKSAKYGBgCgpgYGB7ciBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9Cm1ha2VfdGlkeV93ZW9fYnlfY291bnRyeV9mcm9tX3JhdyA8LSBmdW5jdGlvbihyYXdfd2VvX3RibCwgd2VvX3ZpbnRhZ2UpIHsKICByYXdfd2VvX3RibCAlPiUKICAjIGNvZXJzZSBhbGwgY29sdW1ucyB0byBjaGFyYWN0ZXIgc28gbm8gcHJvYmxlbXMgd2l0aCBwaXZvdF9sb25nZXIoKSAgCiAgbXV0YXRlKGFjcm9zcyguZm5zID0gYXMuY2hhcmFjdGVyKSkgJT4lIAogICAgIyBwaXZvdCBsb25nZXIgYWxsIGNvbHVtbnMgdGhhdCBhcmUgeWVhcnMKICBwaXZvdF9sb25nZXIoY29scyA9IG1hdGNoZXMoIlxcZHs0fSIpLCBuYW1lc190byA9ICJ5ZWFyIikgJT4lCiAgIyBqYW5pdG9yOjpjbGVhbl9uYW1lcygpIHRvIG1ha2UgYWxsIHNuYWtlX2Nhc2UKICBjbGVhbl9uYW1lcygpICU+JQogICMgY29lcmNlIGNvbHVtbnMgdG8gbnVtZXJpYwogIG11dGF0ZShhY3Jvc3MoYygiZXN0aW1hdGVzX3N0YXJ0X2FmdGVyIiwgInllYXIiLCAidmFsdWUiKSwgYXMubnVtZXJpYykpICU+JQogICMgcmVuYW1lIHRvIGlzbzNjIHRvIGFsaWduIHdpdGggb3RoZXIgZGF0YXNldHMKICByZW5hbWUoaXNvM2MgPSBpc28pICU+JQogICMgdXNlIGNvdW50cnljb2RlIGNvdW50cnkKICBtdXRhdGUoY291bnRyeV9uYW1lID0gY291bnRyeWNvZGUoaXNvM2MsIG9yaWdpbiA9ICJpc28zYyIsIGRlc3RpbmF0aW9uID0gImNvdW50cnkubmFtZSIpKSAlPiUKICAjIGpvaW4gd2l0aCBteSBjdXN0b20gbmFtZXMKICBsZWZ0X2pvaW4od2VvX2NvZGVzX3RibCwgYnkgPSAid2VvX3N1YmplY3RfY29kZSIpICU+JQogICMgc2VsZWN0IHJlbGV2YW50IGNvbHVtbnMuICBub3QgCiAgc2VsZWN0KGNvdW50cnlfbmFtZSwgaXNvM2MsIHNob3J0X25hbWVfdW5pdDpjYXRlZ29yeSwgeWVhciwgdmFsdWUpICU+JQogICMgYWRkIHRoZSB3ZW8gdmludGFnZSBzbyBJIGNhbiBjb21wYXJlIGRhdGFzZXRzCiAgIyBUTyBETyAoc29tZWRheSkgdXNlIGZhY3RvcnMgdG8gbWFrZSB0aGlzIGVhc2lseSBzb3J0YWJsZQogIGFkZF9jb2x1bW4od2VvX3ZpbnRhZ2UgPSB3ZW9fdmludGFnZSkKfQpgYGAKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kd2VvX3Byb2Nlc3NlZCA8LSByYXdfd2VvX3RibCAlPiUKICBtYWtlX3RpZHlfd2VvX2J5X2NvdW50cnlfZnJvbV9yYXcod2VvX3ZpbnRhZ2UgPSAiMjAyMiBPY3QiKQoKd2VvX3Byb2Nlc3NlZApgYGAKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0Kd3JpdGVfY3N2KHdlb19wcm9jZXNzZWQsIGhlcmUoIjAyX2RhdGFfcHJvY2Vzc2VkIiwgImltZl93ZW9fMjAyMi1PY3QuY3N2IikpCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQpoZXJlKCIwMV9kYXRhX3JhdyIsICJpaWYiLCAiU3VzdGFpbmFibGVfZGVidF9tb25pdG9yLnhsc3giKSAlPiUgZXhjZWxfc2hlZXRzKCkKYGBgCgpgYGB7ciBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CmhlcmUoIjAxX2RhdGFfcmF3IiwgImlpZiIsICJTdXN0YWluYWJsZV9kZWJ0X21vbml0b3IueGxzeCIpICU+JSAKICAjc3BlY2lmeSB0aGUgc2hlZXQgKyB0aGUgcmFuZ2Ugb2YgY2VsbHMgaW4gZXhjZWwKICByZWFkX2V4Y2VsKHNoZWV0ID0gIjFhX2dsb2JhbCBtYXJrZXRzIC0gaXNzdWFuY2UiLAogICAgICAgICAgICAgcmFuZ2UgPSAiQjQ6RzQxIikgJT4lCiAgIyByZW5hbWUgdGhlIGZpcnN0IGNvbHVtbiB0byAiZGF0ZSIKICByZW5hbWUoZGF0ZSA9IGAkIGJpbGxpb25gKSAlPiUKICAjIFRpZHkgdGhlIGRhdGFzZXQgYnkgbWFraW5nIHRoZSBjb2x1bW4gbmFtZXMgaW50byBsb25nIGZvcm1hdAogIHBpdm90X2xvbmdlcihjb2xzID0gLWRhdGUsIG5hbWVzX3RvID0gImdlb2dyYXBoeSIsIHZhbHVlc190byA9ICJpc3N1YW5jZV9ibl91c2QiKSAlPiUKICAjIGNvZXJjZSB0aGUgZGF0ZSBjb2x1bW4gaW50byBhIGRhdGUgb2JqZWN0IHVzaW5nIGx1YnJpZGF0ZTo6eW1kKCkgKHllYXItbW9udGhfZGF0ZSkKICBtdXRhdGUoZGF0ZSA9IHltZChkYXRlKSkgJT4lCiAgIyBBZGQgYSBjb2x1bW4gdGhhdCBpbmNsdWRlcyB0aGUgbmFtZSBvZiB0aGlzIHNwZWNpZmljIGRhdGEKICBhZGRfY29sdW1uKGlzc3VhbmNlX3R5cGUgPSAiU3VzdGFpbmFibGUgZGVidCAoYm9uZHMgYW5kIGxvYW5zKSIpCmBgYAoKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KcHJvY2Vzc19paWZfZ2JfaXNzdWFuY2UgPC0gZnVuY3Rpb24ocmFuZ2UsIGlzc3VhbmNlX3R5cGUpIHsKICBoZXJlKCIwMV9kYXRhX3JhdyIsICJpaWYiLCAiU3VzdGFpbmFibGVfZGVidF9tb25pdG9yLnhsc3giKSAlPiUgCiAgICByZWFkX2V4Y2VsKHNoZWV0ID0gIjFhX2dsb2JhbCBtYXJrZXRzIC0gaXNzdWFuY2UiLCByYW5nZSA9IHJhbmdlKSAlPiUKICAgIHJlbmFtZShkYXRlID0gYCQgYmlsbGlvbmApICU+JQogICAgcGl2b3RfbG9uZ2VyKGNvbHMgPSAtZGF0ZSwgbmFtZXNfdG8gPSAiZ2VvZ3JhcGh5IiwgdmFsdWVzX3RvID0gImlzc3VhbmNlX2JuX3VzZCIpICU+JQogICAgbXV0YXRlKGRhdGUgPSB5bWQoZGF0ZSkpICU+JQogICAgYWRkX2NvbHVtbihpc3N1YW5jZV90eXBlID0gaXNzdWFuY2VfdHlwZSkKfQpgYGAKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KYm9uZHNfYW5kX2xvYW5zIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIkI0Okc0MSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWFuY2VfdHlwZSA9ICJTdXN0YWluYWJsZSBkZWJ0IChib25kcyBhbmQgbG9hbnMpIikKCmJvbmRzX2FuZF9sb2FucwpgYGAKCmBgYHtyIGVjaG8gPSBGQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KYm9uZHMgPC0gcHJvY2Vzc19paWZfZ2JfaXNzdWFuY2UocmFuZ2UgPSAiSTQ6TjQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1YW5jZV90eXBlID0gIlN1c3RhaW5hYmxlIGJvbmRzIikKCmJvbmRzCmBgYAoKYGBge3IgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQppaWZfaXNzdWFuY2VfZGF0YSA8LSBib25kc19hbmRfbG9hbnMgJT4lCiAgYmluZF9yb3dzKGJvbmRzKQojIyB1c2UgdGhpcyBpZiB5b3Ugd2FudCB0byBjb2xsYXBzZSBpbnRvIHJvd3MKaWlmX2lzc3VhbmNlX2RhdGEKYGBgCgojIyMgRmlyc3QsIGxldCdzIGNvbnRpbnVlIGFnZ3JlZ2F0aW5nIHRoZSBkYXRhIG1vcmUgY2xlYW5seQpgYGB7cn0KCnN1c3RhaW5hYmxlX2xvYW5zIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIlA0OlU0MSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWFuY2VfdHlwZSA9ICJTdXN0YWluYWJsZSBsb2FucyIpCmlpZl9pc3N1YW5jZV9kYXRhIDwtIGlpZl9pc3N1YW5jZV9kYXRhICU+JQogIGJpbmRfcm93cyhzdXN0YWluYWJsZV9sb2FucykKCmdyZWVuX2JvbmRzIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIlc0OkFCNDEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VhbmNlX3R5cGUgPSAiR3JlZW4gYm9uZHMiKQoKaWlmX2lzc3VhbmNlX2RhdGEgPC0gaWlmX2lzc3VhbmNlX2RhdGEgJT4lCiAgYmluZF9yb3dzKGdyZWVuX2JvbmRzKQoKZ3JlZW5fYWJzIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIkFENDpBSTQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1YW5jZV90eXBlID0gIkdyZWVuIEFCUyIpCgppaWZfaXNzdWFuY2VfZGF0YSA8LSBpaWZfaXNzdWFuY2VfZGF0YSAlPiUKICBiaW5kX3Jvd3MoZ3JlZW5fYWJzKQoKc3VzdGFpbmFiaWxpdHlfYm9uZHMgPC0gcHJvY2Vzc19paWZfZ2JfaXNzdWFuY2UocmFuZ2UgPSAiQUs0OkFQNDEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VhbmNlX3R5cGUgPSAiU3VzdGFpbmFiaWxpdHkgYm9uZHMiKQoKaWlmX2lzc3VhbmNlX2RhdGEgPC0gaWlmX2lzc3VhbmNlX2RhdGEgJT4lCiAgYmluZF9yb3dzKHN1c3RhaW5hYmlsaXR5X2JvbmRzKQoKc29jaWFsX2JvbmRzIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIkFSNDpBVzQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1YW5jZV90eXBlID0gIlNvY2lhbCBib25kcyIpCgppaWZfaXNzdWFuY2VfZGF0YSA8LSBpaWZfaXNzdWFuY2VfZGF0YSAlPiUKICBiaW5kX3Jvd3Moc29jaWFsX2JvbmRzKQoKZ3JlZW5fbXVuaWNpcGFsX2JvbmRzIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIkFZNDpCRDQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1YW5jZV90eXBlID0gIkdyZWVuIG11bmljaXBhbCBib25kcyIpCgppaWZfaXNzdWFuY2VfZGF0YSA8LSBpaWZfaXNzdWFuY2VfZGF0YSAlPiUKICBiaW5kX3Jvd3MoZ3JlZW5fbXVuaWNpcGFsX2JvbmRzKQoKc3VzdGFpbmFiaWxpdHlfbGlua2VkX2JvbmRzIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIkJGNDpCSzQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1YW5jZV90eXBlID0gIlN1c3RhaW5hYmlsaXR5LWxpbmtlZCBib25kcyIpCgppaWZfaXNzdWFuY2VfZGF0YSA8LSBpaWZfaXNzdWFuY2VfZGF0YSAlPiUKICBiaW5kX3Jvd3Moc3VzdGFpbmFiaWxpdHlfbGlua2VkX2JvbmRzKQoKZ3JlZW5fbG9hbnMgPC0gcHJvY2Vzc19paWZfZ2JfaXNzdWFuY2UocmFuZ2UgPSAiQk00OkJSNDEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VhbmNlX3R5cGUgPSAiR3JlZW4gbG9hbnMiKQoKaWlmX2lzc3VhbmNlX2RhdGEgPC0gaWlmX2lzc3VhbmNlX2RhdGEgJT4lCiAgYmluZF9yb3dzKGdyZWVuX2xvYW5zKQoKc3VzdGFpbmFiaWxpdHlfbGlua2VkX2xvYW5zIDwtIHByb2Nlc3NfaWlmX2diX2lzc3VhbmNlKHJhbmdlID0gIkJUNDpCWTQxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1YW5jZV90eXBlID0gIlN1c3RhaW5hYmlsaXR5LWxpbmtlZCBsb2FucyIpCgppaWZfaXNzdWFuY2VfZGF0YSA8LSBpaWZfaXNzdWFuY2VfZGF0YSAlPiUKICBiaW5kX3Jvd3Moc3VzdGFpbmFiaWxpdHlfbGlua2VkX2xvYW5zKQoKaWlmX2lzc3VhbmNlX2RhdGEgJT4lIGdsaW1wc2UoKQpgYGAKCkhlcmUsIEkgc2F2ZSB0aGUgZGF0YSBhcyBhIENTViBmaWxlLgpgYGB7cn0Kd3JpdGVfY3N2KGlpZl9pc3N1YW5jZV9kYXRhLCBoZXJlKCIwMl9kYXRhX3Byb2Nlc3NlZCIsICJpaWZfY29tYmluZWQuY3N2IikpCmBgYAoKTm93LCB0aGUgZnVuIHBhcnQuLi4KCiMjIFdlJ3ZlIGhlYXJkIGEgbG90IGFib3V0IGdyb3d0aCBpbiB0aGUgc3VzdGFpbmFibGUgZmluYW5jZSBzZWN0b3IsIGJ1dCB3aGVyZSBpcyB0aGlzIGdyb3d0aCBsb2NhdGVkPwoKIyMjIExldCdzIGxvb2sgYXQgc3VzdGFpbmFibGUgZGVidCBob2xkaW5ncyBieSB0eXBlIGFuZCBpbnN0cnVtZW50IChhbmQgYnkgZ2VvZ3JhcGh5KSB0byBnZXQgYSBzZW5zZSBvZiBob3cgdGhlc2UgdHJlbmRzIGRpZmZlciBhY3Jvc3MgZ2VvZ3JhcGh5L3R5cGUgb3ZlciB0aW1lLiAKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkgKHN0cmluZ3IpCgpnZ3Bsb3QoaWlmX2lzc3VhbmNlX2RhdGEpICsKIGFlcyh4ID0gZGF0ZSwgeSA9IGlzc3VhbmNlX2JuX3VzZCwgY29sb3IgPSBnZW9ncmFwaHkpICsKIGdlb21fbGluZShzaXplID0gMC41KSArCiBzY2FsZV9jb2xvcl9odWUoZGlyZWN0aW9uID0gMSkgKwogbGFicyh4ID0gIkRhdGUiLCB5ID0gIkJpbGxpb25zIG9mIFVTRCBJc3N1ZWQiLCB0aXRsZSA9ICJTdXN0YWluYWJsZSBEZWJ0IE92ZXIgVGltZSBieSBUeXBlIG9mIEhvbGRpbmciLCAKIGNhcHRpb24gPSAiU291cmNlOiBJSUYiLCBjb2xvciA9ICJHZW9ncmFwaHkiKSArCiB0aGVtZV9taW5pbWFsKCkgKwp0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpICsKIGZhY2V0X3dyYXAofmlzc3VhbmNlX3R5cGUsIGxhYmVsbGVyID0gbGFiZWxsZXIoaXNzdWFuY2VfdHlwZSA9IGxhYmVsX3dyYXBfZ2VuKDIwKSkpIApgYGAKCkl0IGFwcGVhcnMgZnJvbSB0aGUgYnVtcHMgaW4gb3VyIHRpbWUgc2VyaWVzIGRhdGEgdGhhdCB0aGVyZSBpcyBhIGJpdCBvZiBzZWFzb25hbGl0eSB0byBkZWJ0IGlzc3VhbmNlIGluIHRoaXMgc3BhY2UgKGJleW9uZCB0aGUgZmFjdCB0aGF0IHRoaXMgZGF0YSBpcyBxdWFydGxlcmx5KSwgc28gSSB3YW50IHRvIGxvb2sgYXQgdGhpcyB0aW1lIHNlcmllcyBkYXRhIHdpdGggYSBsaXR0bGUgYml0IG1vcmUgZ3JhbnVsYXJpdHkuIExvb2tpbmcgYXQgYSBtb250aGx5IGhlYXQgbWFwIHdpbGwgYWxsb3cgdXMgdG8gbG9vayBhdCBjb25jZW50cmF0aW9ucyBvZiBkZWJ0IGlzc3VhbmNlIG92ZXIgdGltZSwgd2l0aCBzb21lIGlkZWEgb2YgYW1vdW50IGlzc3VlZCBwZXIgbW9udGguCgpMZXQncyBsb29rIGF0IG91ciBkYXRhIGZyb20gMjAxNyBhbmQgb24gYnkgbW9udGggdG8gbG9vayBhdCB0aGVzZSB0cmVuZHM6CgpgYGB7ciBlY2hvID0gRkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9CmxpYnJhcnkoZ2dwbG90MikKbGlicmFyeShkcGx5cikgIyBlYXNpZXIgZGF0YSB3cmFuZ2xpbmcgCmxpYnJhcnkodmlyaWRpcykgIyBjb2xvdXIgYmxpbmQgZnJpZW5kbHkgcGFsZXR0ZSwgd29ya3MgaW4gQiZXIGFsc28KbGlicmFyeShsdWJyaWRhdGUpICMgZm9yIGVhc3kgZGF0ZSBtYW5pcHVsYXRpb24KbGlicmFyeShnZ0V4dHJhKSAjIGJlY2F1c2UgcmVtZW1iZXJpbmcgZ2dwbG90IHRoZW1lIG9wdGlvbnMgaXMgYmV5b25kIG1lCmxpYnJhcnkodGlkeXIpIAogCmBgYAoKYGBge3J9CmlpZl9pc3N1YW5jZV9kYXRhIDwtIGlpZl9pc3N1YW5jZV9kYXRhICU+JQogICAgICAgICAgICAgICAgICBtdXRhdGUoeWVhciA9IHllYXIoZGF0ZSksCiAgICAgICAgICAgICAgICAgIG1vbnRoID0gbW9udGgoZGF0ZSwgbGFiZWw9VFJVRSksCiAgICAgICAgICAgICAgICAgIGRheSA9IGRheShkYXRlKSkKCmlzc3VhbmNlX2RhdGFfMTdfMjIgPC0gaWlmX2lzc3VhbmNlX2RhdGEgJT4lCmZpbHRlcihkYXRlID49ICIyMDE3LTAxLTAxIikKCmhlYXRtYXAgPC0gZ2dwbG90KGRhdGE9aXNzdWFuY2VfZGF0YV8xN18yMikgKwogIGdlb21fdGlsZShhZXMoeCA9IHllYXIsIHkgPSBtb250aCwgZmlsbCA9IGlzc3VhbmNlX2JuX3VzZCkpICsKIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDIwMTcsMjAxOCwyMDE5LDIwMjAsMjAyMSwyMDIyKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKSArCiAgZmFjZXRfd3JhcCh+aXNzdWFuY2VfdHlwZSwgbGFiZWxsZXIgPSBsYWJlbGxlcihpc3N1YW5jZV90eXBlID0gbGFiZWxfd3JhcF9nZW4oMjApKSkgKwogIGxhYnMoeD1OVUxMLCB5PU5VTEwsIHRpdGxlPSJEZWJ0IGlzc3VhbmNlIGJ5IHR5cGVcbiIpICsKICBzY2FsZV9maWxsX3ZpcmlkaXMobmFtZT0iQmlsbGlvbnMgb2YgVVNEIElzc3VlZCIpCgpoZWF0bWFwCmBgYApOb3csIGxldCdzIGNoYW5uZWwgaW4gb24gc3VzdGFpbmFibGUgZGVidCBiZWNhdXNlIHRoYXQgc2VlbXMgdG8gYmUgd2hlcmUgd2Ugc2VlIHRoZSBtb3N0IGFjdGlvbi4gCiMjIyBIb3cgZG9lcyB0aGlzIGRpZmZlciBieSBnZW9ncmFwaHk/CgpgYGB7cn0KaXNzdWFuY2VfZGF0YV8xN18yMl9zZCA8LSBpaWZfaXNzdWFuY2VfZGF0YSAlPiUKZmlsdGVyKGRhdGUgPj0gIjIwMTctMDEtMDEiLCBpc3N1YW5jZV90eXBlID09ICJTdXN0YWluYWJsZSBkZWJ0IChib25kcyBhbmQgbG9hbnMpIikKCmdlb2hlYXQgPC0gZ2dwbG90KGRhdGE9aXNzdWFuY2VfZGF0YV8xN18yMl9zZCkgKwogIGdlb21fdGlsZShhZXMoeCA9IHllYXIsIHkgPSBtb250aCwgZmlsbCA9IGlzc3VhbmNlX2JuX3VzZCkpICsKIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBjKDIwMTcsMjAxOCwyMDE5LDIwMjAsMjAyMSwyMDIyKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKSArCiAgZmFjZXRfd3JhcCh+Z2VvZ3JhcGh5LCBsYWJlbGxlciA9IGxhYmVsbGVyKGdlb2dyYXBoeSA9IGxhYmVsX3dyYXBfZ2VuKDIwKSkpICsKICBsYWJzKHg9TlVMTCwgeT1OVUxMLCB0aXRsZT0iU3VzdGFpbmFibGUgRGVidCBJc3N1YW5jZSBBcm91bmQgdGhlIEdsb2JlXG4iKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzKG5hbWU9IkJpbGxpb25zIG9mIFVTRCBJc3N1ZWQiKQoKZ2VvaGVhdApgYGAKCgoKCgoKCgoK