Synthesis and potential recommentations

Results

Perceptions of, and trust in, various organizations

Take-aways regarding general use and trust:

  • Respondents generally trust most resources
  • County Extension resources are the most used
  • BLM resources are the least used, consistent with BLM footprint in ND

Take-aways regarding fire, specifically:

  • Overall trust is considerably lower with fire
  • USFS is most associated with Rx fire, but trusted least
  • Pheasants Forever is associated with Rx fire and most trusted with it
  • Extension has a high degree of trust but low association
# Prepare agency response 
  agency_responses <- 
    responses %>%
      filter(QuestionKey != 'Agency_Resources', 
             str_starts(QuestionKey, "Agency") ) %>%
      mutate(QuestionKey = str_remove(QuestionKey, "Agency_"), 
             QuestionKey = str_replace_all(QuestionKey,  "([[:upper:]])"," \\1"), 
             QuestionKey = str_trim(QuestionKey)) %>% 
      separate(QuestionKey, into = c('category', 'topic'), sep = ' ') %>%
      mutate(agency = case_when(
                        OptionKey == 'NDGF' ~      'ND Game & Fish', 
                        OptionKey == 'PF' ~        'Pheasants Forever', 
                        OptionKey == 'USFWS' ~     'US Fish & Wildlife', 
                        OptionKey == 'audubon' ~   'Audubon Society', 
                        OptionKey == 'extension' ~ 'County Extension', 
                        OptionKey == 'USFS' ~      'US Forest Service', 
                        TRUE ~ str_to_upper(OptionKey) ))
# Resources in general 
  agency_general <- 
    agency_responses %>%
      filter(category != "Fire") %>%
      mutate(Response = recode(topic, 
                               "Trust" = "Trust", 
                               "Use" = "Use"), 
             Response = fct_rev(Response)) %>%
      ggplot() + theme_bw(16) + 
      geom_vline(xintercept = 0, lty = 2) + 
      geom_errorbarh(aes(xmin = min, 
                         xmax = max, 
                         y = agency, 
                         color = Response), 
                     lwd = 0.9,
                     position = position_dodge(width = 0.6)) +
      geom_point(aes(x = mid, y = agency, 
                     fill = Response, 
                     shape = Response), 
                 size = 4, 
                 stroke = 1,
                 position = position_dodge(width = 0.6)) + 
     coord_cartesian(xlim = c(-1.15, 1.9)) + 
      labs(title = 'A. "In general, I personally use/trust resources from this organization"', 
           x = 'Agreement Index') + 
      scale_shape_manual(values = c(21, 24)) + 
      scale_color_manual(values = wes_palette("FantasticFox1")[c(3,5)]) + 
      scale_fill_manual(values = wes_palette("FantasticFox1")[c(3,5)]) + 
      theme(axis.title.y = element_blank(), 
            axis.text.y = element_text(color = 'black', size = 14), 
            plot.title.position = "plot", 
            legend.position = 'top', 
            legend.title=element_blank() )
# WRT fire, specifically
  agency_fire <- 
    agency_responses %>%
      filter(category == "Fire") %>%
      mutate(Response = recode(topic, 
                            "Trust" = "Trust regarding Rx fire", 
                            "Use" = "Associate with Rx fire")) %>%
      ggplot() + theme_bw(16) + 
      geom_vline(xintercept = 0, lty = 2) + 
        geom_errorbarh(aes(xmin = min, 
                           xmax = max, 
                           y = agency, 
                           color = Response), 
                       lwd = 0.9,
                       height = 0.5,
                       position = position_dodge(width = 0.6)) +
        geom_point(aes(x = mid, y = agency, 
                       fill = Response, 
                       shape = Response), 
                   size = 4, 
                   stroke = 1,
                   position = position_dodge(width = 0.6)) + 
       coord_cartesian(xlim = c(-1.15, 1.9)) + 
      labs(title = 'B. "I associate/trust this organization with Rx fire activity or information"', 
           x = 'Agreement Index') + 
       scale_shape_manual(values = c(21, 24)) + 
      scale_color_manual(values = wes_palette("FantasticFox1")[c(3,5)]) + 
      scale_fill_manual(values = wes_palette("FantasticFox1")[c(3,5)]) + 
        theme(axis.title.y = element_blank(), 
              axis.text.y = element_text(color = 'black', size = 14), 
              plot.title.position = "plot", 
              legend.position = 'top', 
              legend.title=element_blank() )
plot_grid(agency_general, 
          agency_fire, 
           # labels = c('A', 'B'),
          ncol = 1)
Perceptions of various federal (US) and state (ND) agencies and non-governmental organizations regarding (A) use and trust in provided resources, in general; and (B) association and trust with respect to prescribed fire, specifically. TNC = The Nature Conservancy, NRCS = USDA Natural Resource Conservation Service; BLM = US Dept. of Interior Bureau of Land Management; ARS = USDA Agricultural Research Service.

Perceptions of various federal (US) and state (ND) agencies and non-governmental organizations regarding (A) use and trust in provided resources, in general; and (B) association and trust with respect to prescribed fire, specifically. TNC = The Nature Conservancy, NRCS = USDA Natural Resource Conservation Service; BLM = US Dept. of Interior Bureau of Land Management; ARS = USDA Agricultural Research Service.

Contributions to management decisionmaking

Take-aways:

  • Respondents mostly value open rangeland
  • Respondents have little concern for managing wildfire risk or invasive species
  • Respondents are mostly influenced by a sense of stewardship and passed-down knowledge
  • Little direct impact of neighbors and science on decisionmaking
importance <-
    responses %>%
      filter(str_starts(QuestionKey, "Importance") ) %>%
      mutate(response = case_when(
              OptionKey == 'restore_prairie' ~      'Restore prairie/grassland', 
              OptionKey == 'reduce_wildfire' ~        'Reduce wildfire risk', 
              OptionKey == 'protect_wildlife' ~     'Protect wildlife habitat', 
              OptionKey == 'heterogeneity' ~   'Increase plant diversity', 
              OptionKey == 'control_woody' ~ 'Woody plant control', 
              OptionKey == 'control_invasives' ~      'Invasive species control' )) %>%
  ggplot() + theme_bw(16) + 
  geom_vline(xintercept = 0, lty = 2) + 
  geom_errorbarh(aes(xmin = min, 
                     xmax = max, 
                     y = fct_reorder(response, mid)), 
                 color = wes_palette("FantasticFox1")[3],
                  height = 0.5,
                 lwd = 0.9 ) +
  geom_point(aes(x = mid, y = response ),
             fill = wes_palette("FantasticFox1")[3], 
             pch = 21,
             size = 5, 
             stroke = 1 ) + 
  # coord_cartesian(xlim = c(-1.15, 1.9)) + 
  labs(title = 'A. "This environmental concern is important to me"', 
       x = 'Agreement Index') + 
  theme(axis.title.y = element_blank(), 
        axis.text.y = element_text(color = 'black', size = 14), 
        plot.title.position = "plot" )
influence <- 
    responses %>%
    filter(str_starts(QuestionKey, "Influence") ) %>%
    mutate(response = case_when(
              OptionKey == 'research' ~      'Scientific research/\nUniversity publications', 
              OptionKey == 'neighbors' ~     'How my neighbors\nmanage their land', 
              OptionKey == 'good' ~          'Being a good steward', 
              OptionKey == 'gen' ~   'What previous generations\ntaught me', 
              OptionKey == 'advice' ~ 'Professional advice' )) %>%
    ggplot() + theme_bw(16) + 
    geom_vline(xintercept = 0, lty = 2) + 
    geom_errorbarh(aes(xmin = min, 
                       xmax = max, 
                       y = fct_reorder(response, mid)), 
                   color = wes_palette("FantasticFox1")[5],
                   height = 0.5,
                   lwd = 0.9 ) +
    geom_point(aes(x = mid, y = response ),
               fill = wes_palette("FantasticFox1")[5], 
               pch = 21,
               size = 5, 
               stroke = 1 ) + 
    # coord_cartesian(xlim = c(-1.15, 1.9)) + 
    labs(title = 'B. "This consideration affects my management decisionmaking"', 
         x = 'Agreement Index') + 
    theme(axis.title.y = element_blank(), 
          axis.text.y = element_text(color = 'black', size = 14), 
          plot.title.position = "plot" )
plot_grid(importance, 
          influence, 
           # labels = c('A', 'B'),
          ncol = 1)
Degree to which respondents agreed that various management considerations (A) were important in their decisions, and (B) influenced their decisionmaking.

Degree to which respondents agreed that various management considerations (A) were important in their decisions, and (B) influenced their decisionmaking.

Attitudes about fire

Take-aways

  • Respondents generally believe their community has negative perceptions of Rx fire, except for wildlife
  • Respondents have a conservative attitude towards Rx fire use and show a disinclination to use it themselves
# Attitudes and beliefs about Rx fire
beliefs <-
  responses %>%
    filter(QuestionKey == "CommunityFireBeliefs")  %>%
    mutate(OptionKey = str_remove(OptionKey, 'burn_'), 
           response = case_when(
              OptionKey == 'wildlife' ~ 'Negative impacts to wildlife', 
              OptionKey == 'soil_erosion' ~   'Results in soil erosion', 
              OptionKey == 'smoke' ~    'Produces harmful smoke', 
              OptionKey == 'safety' ~   'Poses risk to human safety', 
              OptionKey == 'property_risk' ~   "Poses risk to nearby property", 
              OptionKey == 'forage' ~      'Results in loss of forage' )) %>%
    ggplot() + theme_bw(16) + 
    geom_vline(xintercept = 0, lty = 2) + 
    geom_errorbarh(aes(xmin = min, 
                       xmax = max, 
                       y = fct_reorder(response, desc(SurveyOrder))) , 
                   color = wes_palette("FantasticFox1")[3], 
                   lwd = 0.9 ) +
    geom_point(aes(x = mid, y = response ),
               fill = wes_palette("FantasticFox1")[3], 
               pch = 21,
               size = 4, 
               stroke = 1 ) + 
    # coord_cartesian(xlim = c(-1.15, 1.9)) + 
    labs(title = 'A. "Members of my community generally believe the following about Rx fire"', 
         x = 'Agreement Index') + 
    theme(axis.title.y = element_blank(), 
          axis.text.y = element_text(color = 'black', size = 14), 
          plot.title.position = "plot" )
attitudes <-
  responses %>%
    filter(str_starts(QuestionKey, "Attitudes") ) %>%
    mutate(OptionKey = str_remove(OptionKey, 'burn_'), 
           response = case_when(
             OptionKey == 'beneficial' ~ 'Rx fire is a beneficial\ntool for managing rangelands', 
             OptionKey == 'frequent' ~   'People should be able to\nburn as frequently as they\n want for management', 
             OptionKey == 'limited' ~    'Burning can be used in a\nlimited set of instances', 
             OptionKey == 'man_plan' ~   'My management plan includes\nusing prescribed fire', 
             OptionKey == 'prepared' ~   "I'm prepared to use Rx fire\nif I choose to", 
             OptionKey == 'pros' ~      'Fire should only be used\nby professionals', 
             OptionKey == 'shouldnt' ~   'Burning is a poor management\noption that shouldn’t be used', 
             OptionKey == 'training' ~ 'Burning is a good option\nfor anyone with training')) %>%
    ggplot() + theme_bw(16) + 
    geom_vline(xintercept = 0, lty = 2) + 
    geom_errorbarh(aes(xmin = min, 
                       xmax = max, 
                       y = fct_reorder(response, desc(SurveyOrder))) ,
                   height = 0.5,
                   color = wes_palette("FantasticFox1")[5], 
                   lwd = 0.9 ) +
    geom_point(aes(x = mid, y = response ),
               fill = wes_palette("FantasticFox1")[5], 
               pch = 21,
               size = 4, 
               stroke = 1 ) + 
    # coord_cartesian(xlim = c(-1.15, 1.9)) + 
    labs(title = 'B. "I personally believe the following"', 
         x = 'Agreement Index') + 
    theme(axis.title.y = element_blank(), 
          axis.text.y = element_text(color = 'black', size = 14), 
          plot.title.position = "plot" )
plot_grid(beliefs, 
          attitudes, 
          rel_heights = c(0.75, 1.5), 
          ncol = 1)
Degree to which respondents agreed with statements about (A) community perceptions of prescribed fire effects, and (B) personal attitudes about prescribed fire use.

Degree to which respondents agreed with statements about (A) community perceptions of prescribed fire effects, and (B) personal attitudes about prescribed fire use.

Public grazing land management and personal recreation

Take-aways

  • Respondents expect administrators to use good science
  • Respondents do not want to see Rx fire expanded on public grazingland
  • Respondents really don’t use public grazlinglands for recreation
responses %>%
  filter(QuestionKey == "PublicGrazingBeliefs", 
         OptionKey != 'public_fire')  %>%
  mutate(response = case_when(
           OptionKey == 'increase_public_fire' ~ 'There should be more Rx fire\non public grazingland',            OptionKey == 'amount_public_fire' ~'There is an appropriate amount of\nRx fire on public grazingland', 
           OptionKey == 'admin_users' ~ 'Administrators should manage to meet\nuser needs or preferences', 
           OptionKey == 'admin_science' ~ "Administrators should manage land\naccording to the best available science", 
           OptionKey == 'admin_good' ~ 'Public grazingland administrators\n do a good job managing the land' )) %>%
  ggplot() + theme_bw(16) + 
  geom_vline(xintercept = 0, lty = 2) + 
  geom_errorbarh(aes(xmin = min, 
                     xmax = max, 
                     y = fct_reorder(response, desc(SurveyOrder))) , 
                 color = wes_palette("FantasticFox1")[3], 
                 height = 0.5,
                 lwd = 0.9 ) +
  geom_point(aes(x = mid, y = response ),
             fill = wes_palette("FantasticFox1")[3], 
             pch = 21,
             size = 4, 
             stroke = 1 ) + 
  # coord_cartesian(xlim = c(-1.15, 1.9)) + 
  labs(title = '"I personally believe the following about public grazingland management"', 
       x = 'Agreement Index') + 
  theme(axis.title.y = element_blank(), 
        axis.text.y = element_text(color = 'black', size = 14), 
        plot.title.position = "plot" )
Respondent attitudes towards public grazingland administration and prescribed fire use.

Respondent attitudes towards public grazingland administration and prescribed fire use.

responses %>%
  filter(QuestionKey == 'Recreation' ) %>%
  ggplot() + theme_bw(16) + 
  geom_vline(xintercept = 0, lty = 2) + 
  geom_errorbarh(aes(xmin = min, 
                     xmax = max, 
                     y = fct_reorder(SurveyText, mid) ) , 
                 color = wes_palette("FantasticFox1")[3], 
                 height = 0.5,
                 lwd = 0.9 ) +
  geom_point(aes(x = mid, y = SurveyText ),
             fill = wes_palette("FantasticFox1")[3], 
             pch = 21,
             size = 4, 
             stroke = 1 ) + 
  # coord_cartesian(xlim = c(-1.15, 1.9)) + 
  labs(title = '"Myself and/or my family use public grazingland for these recreation activities"', 
       x = 'Agreement Index') + 
  theme(axis.title.y = element_blank(), 
        axis.text.y = element_text(color = 'black', size = 14), 
        plot.title.position = "plot" )
Respondents' use of public grazingland for various recreation activies.

Respondents’ use of public grazingland for various recreation activies.

LS0tDQp0aXRsZTogIlJhbmNoZXIgcGVyY2VwdGlvbnMgb2YgUnggZmlyZSBpbiBOb3J0aCBEYWtvdGEiDQpzdWJ0aXRsZTogIlN1cnZleSByZXNwb25zZXMiDQpkYXRlOiAiVmVyc2lvbiBkYXRlOiBgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCICVZJylgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogRkFMU0UNCiAgICB0aGVtZTogam91cm5hbA0KICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQogICAgc2VsZl9jb250YWluZWQ6IFRSVUUNCi0tLQ0KICANCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgZXZhbCA9IFRSVUUsIGZpZy5wYXRoPScuLi9Xcml0aW5nL2ZpZ3VyZXMvJywgZGV2PWMoJ3BuZycpKQ0KIyBsb2FkIHBhY2thZ2VzDQogIHBhY21hbjo6cF9sb2FkKHRpZHl2ZXJzZSwgbWFncml0dHIsIHNmLCBncmlkLCBncmlkRXh0cmEsIGNvd3Bsb3QpDQogIHBhY21hbjo6cF9sb2FkX2doKCdkZXZhbm1jZy93ZXNhbmRlcnNvbicpDQogIEVSX3BhbCA9IHdlc19wYWxldHRlKCJaaXNzb3UxIilbYygxLCA0LCA1LCAyKV0NCiMgbG9hZCBwcmUtd3JhbmdsZWQgZGF0YQ0KICBsb2FkKCcuL0RhdGEvcmVzcG9uc2VzLlJkYXRhJykNCmBgYA0KDQojIFN5bnRoZXNpcyBhbmQgcG90ZW50aWFsIHJlY29tbWVudGF0aW9ucw0KDQoqIERlc3BpdGUgbm90IHJlbHlpbmcgb24gc2NpZW50aWZpYyBwcm9kdWN0cyB0aGVtc2VsdmVzLCByZXNwb25kZW50cyBkbyBleHBlY3QgYWRtaW5pc3RyYXRvcnMgb2YgZ3JhemluZ2xhbmRzIHRvIHVzZSB0aGUgYmVzdCBhdmFpbGFibGUgc2NpZW5jZQ0KKiBSZXNwb25kZW50cyBnZW5lcmFsbHkgdHJ1c3QgYWdlbmNpZXMgYW5kIE5HT3MsIGJ1dCBub3QgbmVjZXNzYXJpbHkgd2l0aCBmaXJlDQoqIFJlc3BvbmRlbnRzIGJlbGlldmUgdGhlaXIgY29tbXVuaXR5IHNlZXMgbGl0dGxlIHZhbHVlIGluIFJ4IGZpcmUgYW5kIGRvIG5vdCB3YW50IGl0cyB1c2UgZXhwYW5kZWQNCiogSW5pdGlhdGl2ZXMgcmVsYXRlZCB0byBSeCBmaXJlIGFyZSBsaWtlbHkgdG8gYmUgYmVzdCByZWNpZXZlZCB3aGVuIHRoZXkgY29tZSBmcm9tIFBoZWFzYW50cyBGb3JldmVyIGFuZCBFeHRlbnNpb24NCiogVG8gaW5jcmVhc2UgcGFsYXRhYmlsaXR5IG9mIFJ4IGZpcmUgb24gcHVibGljIGdyYXppbmdsYW5kcywgcmFuY2hlcnMgd2lsbCBsaWtlbHkgbmVlZCB0byBjb21lIHRvIGFwcHJlY2lhdGUgYnVybmluZyBhcyBhIGNvbXBvbmVudCBvZiBnb29kIHN0ZXdhcmRzaGlwLCBub3QganVzdCBhIHRvb2wgZm9yIHNwZWNpZmljIG1hbmFnZW1lbnQgb2JqZWN0aXZlcw0KDQojIFJlc3VsdHMgDQoNCiMjIFBlcmNlcHRpb25zIG9mLCBhbmQgdHJ1c3QgaW4sIHZhcmlvdXMgb3JnYW5pemF0aW9ucyANCg0KVGFrZS1hd2F5cyByZWdhcmRpbmcgZ2VuZXJhbCB1c2UgYW5kIHRydXN0OiANCg0KKiBSZXNwb25kZW50cyBnZW5lcmFsbHkgdHJ1c3QgbW9zdCByZXNvdXJjZXMNCiogQ291bnR5IEV4dGVuc2lvbiByZXNvdXJjZXMgYXJlIHRoZSBtb3N0IHVzZWQNCiogQkxNIHJlc291cmNlcyBhcmUgdGhlIGxlYXN0IHVzZWQsIGNvbnNpc3RlbnQgd2l0aCBCTE0gZm9vdHByaW50IGluIE5EDQoNClRha2UtYXdheXMgcmVnYXJkaW5nIGZpcmUsIHNwZWNpZmljYWxseTogDQoNCiogT3ZlcmFsbCB0cnVzdCBpcyBjb25zaWRlcmFibHkgbG93ZXIgd2l0aCBmaXJlDQoqIFVTRlMgaXMgbW9zdCBhc3NvY2lhdGVkIHdpdGggUnggZmlyZSwgYnV0IHRydXN0ZWQgbGVhc3QNCiogUGhlYXNhbnRzIEZvcmV2ZXIgaXMgYXNzb2NpYXRlZCB3aXRoIFJ4IGZpcmUgYW5kIG1vc3QgdHJ1c3RlZCB3aXRoIGl0DQoqIEV4dGVuc2lvbiBoYXMgYSBoaWdoIGRlZ3JlZSBvZiB0cnVzdCBidXQgbG93IGFzc29jaWF0aW9uDQoNCmBgYHtyIGFnZW5jeV9yZXNwb25zZXMsIGZpZy5oZWlnaHQ9MTIsIGZpZy53aWR0aD0xMCwgZmlnLmNhcD0nUGVyY2VwdGlvbnMgb2YgdmFyaW91cyBmZWRlcmFsIChVUykgYW5kIHN0YXRlIChORCkgYWdlbmNpZXMgYW5kIG5vbi1nb3Zlcm5tZW50YWwgb3JnYW5pemF0aW9ucyByZWdhcmRpbmcgKEEpIHVzZSBhbmQgdHJ1c3QgaW4gcHJvdmlkZWQgcmVzb3VyY2VzLCBpbiBnZW5lcmFsOyBhbmQgKEIpIGFzc29jaWF0aW9uIGFuZCB0cnVzdCB3aXRoIHJlc3BlY3QgdG8gcHJlc2NyaWJlZCBmaXJlLCBzcGVjaWZpY2FsbHkuIFROQyA9IFRoZSBOYXR1cmUgQ29uc2VydmFuY3ksIE5SQ1MgPSBVU0RBIE5hdHVyYWwgUmVzb3VyY2UgQ29uc2VydmF0aW9uIFNlcnZpY2U7IEJMTSA9IFVTIERlcHQuIG9mIEludGVyaW9yIEJ1cmVhdSBvZiBMYW5kIE1hbmFnZW1lbnQ7IEFSUyA9IFVTREEgQWdyaWN1bHR1cmFsIFJlc2VhcmNoIFNlcnZpY2UuJ30NCiMgUHJlcGFyZSBhZ2VuY3kgcmVzcG9uc2UgDQogIGFnZW5jeV9yZXNwb25zZXMgPC0gDQogICAgcmVzcG9uc2VzICU+JQ0KICAgICAgZmlsdGVyKFF1ZXN0aW9uS2V5ICE9ICdBZ2VuY3lfUmVzb3VyY2VzJywgDQogICAgICAgICAgICAgc3RyX3N0YXJ0cyhRdWVzdGlvbktleSwgIkFnZW5jeSIpICkgJT4lDQogICAgICBtdXRhdGUoUXVlc3Rpb25LZXkgPSBzdHJfcmVtb3ZlKFF1ZXN0aW9uS2V5LCAiQWdlbmN5XyIpLCANCiAgICAgICAgICAgICBRdWVzdGlvbktleSA9IHN0cl9yZXBsYWNlX2FsbChRdWVzdGlvbktleSwgICIoW1s6dXBwZXI6XV0pIiwiIFxcMSIpLCANCiAgICAgICAgICAgICBRdWVzdGlvbktleSA9IHN0cl90cmltKFF1ZXN0aW9uS2V5KSkgJT4lIA0KICAgICAgc2VwYXJhdGUoUXVlc3Rpb25LZXksIGludG8gPSBjKCdjYXRlZ29yeScsICd0b3BpYycpLCBzZXAgPSAnICcpICU+JQ0KICAgICAgbXV0YXRlKGFnZW5jeSA9IGNhc2Vfd2hlbigNCiAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbktleSA9PSAnTkRHRicgfiAgICAgICdORCBHYW1lICYgRmlzaCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdQRicgfiAgICAgICAgJ1BoZWFzYW50cyBGb3JldmVyJywgDQogICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ1VTRldTJyB+ICAgICAnVVMgRmlzaCAmIFdpbGRsaWZlJywgDQogICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ2F1ZHVib24nIH4gICAnQXVkdWJvbiBTb2NpZXR5JywgDQogICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ2V4dGVuc2lvbicgfiAnQ291bnR5IEV4dGVuc2lvbicsIA0KICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdVU0ZTJyB+ICAgICAgJ1VTIEZvcmVzdCBTZXJ2aWNlJywgDQogICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gc3RyX3RvX3VwcGVyKE9wdGlvbktleSkgKSkNCiMgUmVzb3VyY2VzIGluIGdlbmVyYWwgDQogIGFnZW5jeV9nZW5lcmFsIDwtIA0KICAgIGFnZW5jeV9yZXNwb25zZXMgJT4lDQogICAgICBmaWx0ZXIoY2F0ZWdvcnkgIT0gIkZpcmUiKSAlPiUNCiAgICAgIG11dGF0ZShSZXNwb25zZSA9IHJlY29kZSh0b3BpYywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRydXN0IiA9ICJUcnVzdCIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UiID0gIlVzZSIpLCANCiAgICAgICAgICAgICBSZXNwb25zZSA9IGZjdF9yZXYoUmVzcG9uc2UpKSAlPiUNCiAgICAgIGdncGxvdCgpICsgdGhlbWVfYncoMTYpICsgDQogICAgICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArIA0KICAgICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBtaW4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHhtYXggPSBtYXgsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhZ2VuY3ksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gUmVzcG9uc2UpLCANCiAgICAgICAgICAgICAgICAgICAgIGx3ZCA9IDAuOSwNCiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpKSArDQogICAgICBnZW9tX3BvaW50KGFlcyh4ID0gbWlkLCB5ID0gYWdlbmN5LCANCiAgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBSZXNwb25zZSwgDQogICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IFJlc3BvbnNlKSwgDQogICAgICAgICAgICAgICAgIHNpemUgPSA0LCANCiAgICAgICAgICAgICAgICAgc3Ryb2tlID0gMSwNCiAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNikpICsgDQogICAgIGNvb3JkX2NhcnRlc2lhbih4bGltID0gYygtMS4xNSwgMS45KSkgKyANCiAgICAgIGxhYnModGl0bGUgPSAnQS4gIkluIGdlbmVyYWwsIEkgcGVyc29uYWxseSB1c2UvdHJ1c3QgcmVzb3VyY2VzIGZyb20gdGhpcyBvcmdhbml6YXRpb24iJywgDQogICAgICAgICAgIHggPSAnQWdyZWVtZW50IEluZGV4JykgKyANCiAgICAgIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDIxLCAyNCkpICsgDQogICAgICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gd2VzX3BhbGV0dGUoIkZhbnRhc3RpY0ZveDEiKVtjKDMsNSldKSArIA0KICAgICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gd2VzX3BhbGV0dGUoIkZhbnRhc3RpY0ZveDEiKVtjKDMsNSldKSArIA0KICAgICAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gJ2JsYWNrJywgc2l6ZSA9IDE0KSwgDQogICAgICAgICAgICBwbG90LnRpdGxlLnBvc2l0aW9uID0gInBsb3QiLCANCiAgICAgICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICd0b3AnLCANCiAgICAgICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkgKQ0KIyBXUlQgZmlyZSwgc3BlY2lmaWNhbGx5DQogIGFnZW5jeV9maXJlIDwtIA0KICAgIGFnZW5jeV9yZXNwb25zZXMgJT4lDQogICAgICBmaWx0ZXIoY2F0ZWdvcnkgPT0gIkZpcmUiKSAlPiUNCiAgICAgIG11dGF0ZShSZXNwb25zZSA9IHJlY29kZSh0b3BpYywgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRydXN0IiA9ICJUcnVzdCByZWdhcmRpbmcgUnggZmlyZSIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UiID0gIkFzc29jaWF0ZSB3aXRoIFJ4IGZpcmUiKSkgJT4lDQogICAgICBnZ3Bsb3QoKSArIHRoZW1lX2J3KDE2KSArIA0KICAgICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKyANCiAgICAgICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBtaW4sIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heCA9IG1heCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYWdlbmN5LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gUmVzcG9uc2UpLCANCiAgICAgICAgICAgICAgICAgICAgICAgbHdkID0gMC45LA0KICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSAwLjUsDQogICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjYpKSArDQogICAgICAgIGdlb21fcG9pbnQoYWVzKHggPSBtaWQsIHkgPSBhZ2VuY3ksIA0KICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gUmVzcG9uc2UsIA0KICAgICAgICAgICAgICAgICAgICAgICBzaGFwZSA9IFJlc3BvbnNlKSwgDQogICAgICAgICAgICAgICAgICAgc2l6ZSA9IDQsIA0KICAgICAgICAgICAgICAgICAgIHN0cm9rZSA9IDEsDQogICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNikpICsgDQogICAgICAgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKC0xLjE1LCAxLjkpKSArIA0KICAgICAgbGFicyh0aXRsZSA9ICdCLiAiSSBhc3NvY2lhdGUvdHJ1c3QgdGhpcyBvcmdhbml6YXRpb24gd2l0aCBSeCBmaXJlIGFjdGl2aXR5IG9yIGluZm9ybWF0aW9uIicsIA0KICAgICAgICAgICB4ID0gJ0FncmVlbWVudCBJbmRleCcpICsgDQogICAgICAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMjEsIDI0KSkgKyANCiAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpW2MoMyw1KV0pICsgDQogICAgICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpW2MoMyw1KV0pICsgDQogICAgICAgIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gJ2JsYWNrJywgc2l6ZSA9IDE0KSwgDQogICAgICAgICAgICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIsIA0KICAgICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAndG9wJywgDQogICAgICAgICAgICAgIGxlZ2VuZC50aXRsZT1lbGVtZW50X2JsYW5rKCkgKQ0KcGxvdF9ncmlkKGFnZW5jeV9nZW5lcmFsLCANCiAgICAgICAgICBhZ2VuY3lfZmlyZSwgDQogICAgICAgICAgICMgbGFiZWxzID0gYygnQScsICdCJyksDQogICAgICAgICAgbmNvbCA9IDEpDQpgYGANCg0KIyMgQ29udHJpYnV0aW9ucyB0byBtYW5hZ2VtZW50IGRlY2lzaW9ubWFraW5nDQoNClRha2UtYXdheXM6DQoNCiogUmVzcG9uZGVudHMgbW9zdGx5IHZhbHVlIG9wZW4gcmFuZ2VsYW5kIA0KKiBSZXNwb25kZW50cyBoYXZlIGxpdHRsZSBjb25jZXJuIGZvciBtYW5hZ2luZyB3aWxkZmlyZSByaXNrIG9yIGludmFzaXZlIHNwZWNpZXMNCiogUmVzcG9uZGVudHMgYXJlIG1vc3RseSBpbmZsdWVuY2VkIGJ5IGEgc2Vuc2Ugb2Ygc3Rld2FyZHNoaXAgYW5kIHBhc3NlZC1kb3duIGtub3dsZWRnZQ0KKiBMaXR0bGUgZGlyZWN0IGltcGFjdCBvZiBuZWlnaGJvcnMgYW5kIHNjaWVuY2Ugb24gZGVjaXNpb25tYWtpbmcNCg0KYGBge3IgZGVjaXNpb25tYWtpbmcsIGZpZy5oZWlnaHQ9OCwgZmlnLndpZHRoPTEwLCBmaWcuY2FwPSdEZWdyZWUgdG8gd2hpY2ggcmVzcG9uZGVudHMgYWdyZWVkIHRoYXQgdmFyaW91cyBtYW5hZ2VtZW50IGNvbnNpZGVyYXRpb25zIChBKSB3ZXJlIGltcG9ydGFudCBpbiB0aGVpciBkZWNpc2lvbnMsIGFuZCAoQikgaW5mbHVlbmNlZCB0aGVpciBkZWNpc2lvbm1ha2luZy4nfQ0KaW1wb3J0YW5jZSA8LQ0KICAgIHJlc3BvbnNlcyAlPiUNCiAgICAgIGZpbHRlcihzdHJfc3RhcnRzKFF1ZXN0aW9uS2V5LCAiSW1wb3J0YW5jZSIpICkgJT4lDQogICAgICBtdXRhdGUocmVzcG9uc2UgPSBjYXNlX3doZW4oDQogICAgICAgICAgICAgIE9wdGlvbktleSA9PSAncmVzdG9yZV9wcmFpcmllJyB+ICAgICAgJ1Jlc3RvcmUgcHJhaXJpZS9ncmFzc2xhbmQnLCANCiAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdyZWR1Y2Vfd2lsZGZpcmUnIH4gICAgICAgICdSZWR1Y2Ugd2lsZGZpcmUgcmlzaycsIA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ3Byb3RlY3Rfd2lsZGxpZmUnIH4gICAgICdQcm90ZWN0IHdpbGRsaWZlIGhhYml0YXQnLCANCiAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdoZXRlcm9nZW5laXR5JyB+ICAgJ0luY3JlYXNlIHBsYW50IGRpdmVyc2l0eScsIA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ2NvbnRyb2xfd29vZHknIH4gJ1dvb2R5IHBsYW50IGNvbnRyb2wnLCANCiAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdjb250cm9sX2ludmFzaXZlcycgfiAgICAgICdJbnZhc2l2ZSBzcGVjaWVzIGNvbnRyb2wnICkpICU+JQ0KICBnZ3Bsb3QoKSArIHRoZW1lX2J3KDE2KSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IG1pbiwgDQogICAgICAgICAgICAgICAgICAgICB4bWF4ID0gbWF4LCANCiAgICAgICAgICAgICAgICAgICAgIHkgPSBmY3RfcmVvcmRlcihyZXNwb25zZSwgbWlkKSksIA0KICAgICAgICAgICAgICAgICBjb2xvciA9IHdlc19wYWxldHRlKCJGYW50YXN0aWNGb3gxIilbM10sDQogICAgICAgICAgICAgICAgICBoZWlnaHQgPSAwLjUsDQogICAgICAgICAgICAgICAgIGx3ZCA9IDAuOSApICsNCiAgZ2VvbV9wb2ludChhZXMoeCA9IG1pZCwgeSA9IHJlc3BvbnNlICksDQogICAgICAgICAgICAgZmlsbCA9IHdlc19wYWxldHRlKCJGYW50YXN0aWNGb3gxIilbM10sIA0KICAgICAgICAgICAgIHBjaCA9IDIxLA0KICAgICAgICAgICAgIHNpemUgPSA1LCANCiAgICAgICAgICAgICBzdHJva2UgPSAxICkgKyANCiAgIyBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoLTEuMTUsIDEuOSkpICsgDQogIGxhYnModGl0bGUgPSAnQS4gIlRoaXMgZW52aXJvbm1lbnRhbCBjb25jZXJuIGlzIGltcG9ydGFudCB0byBtZSInLCANCiAgICAgICB4ID0gJ0FncmVlbWVudCBJbmRleCcpICsgDQogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gJ2JsYWNrJywgc2l6ZSA9IDE0KSwgDQogICAgICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIgKQ0KaW5mbHVlbmNlIDwtIA0KICAgIHJlc3BvbnNlcyAlPiUNCiAgICBmaWx0ZXIoc3RyX3N0YXJ0cyhRdWVzdGlvbktleSwgIkluZmx1ZW5jZSIpICkgJT4lDQogICAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ3Jlc2VhcmNoJyB+ICAgICAgJ1NjaWVudGlmaWMgcmVzZWFyY2gvXG5Vbml2ZXJzaXR5IHB1YmxpY2F0aW9ucycsIA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ25laWdoYm9ycycgfiAgICAgJ0hvdyBteSBuZWlnaGJvcnNcbm1hbmFnZSB0aGVpciBsYW5kJywgDQogICAgICAgICAgICAgIE9wdGlvbktleSA9PSAnZ29vZCcgfiAgICAgICAgICAnQmVpbmcgYSBnb29kIHN0ZXdhcmQnLCANCiAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdnZW4nIH4gICAnV2hhdCBwcmV2aW91cyBnZW5lcmF0aW9uc1xudGF1Z2h0IG1lJywgDQogICAgICAgICAgICAgIE9wdGlvbktleSA9PSAnYWR2aWNlJyB+ICdQcm9mZXNzaW9uYWwgYWR2aWNlJyApKSAlPiUNCiAgICBnZ3Bsb3QoKSArIHRoZW1lX2J3KDE2KSArIA0KICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsgDQogICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBtaW4sIA0KICAgICAgICAgICAgICAgICAgICAgICB4bWF4ID0gbWF4LCANCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IGZjdF9yZW9yZGVyKHJlc3BvbnNlLCBtaWQpKSwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpWzVdLA0KICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IDAuNSwNCiAgICAgICAgICAgICAgICAgICBsd2QgPSAwLjkgKSArDQogICAgZ2VvbV9wb2ludChhZXMoeCA9IG1pZCwgeSA9IHJlc3BvbnNlICksDQogICAgICAgICAgICAgICBmaWxsID0gd2VzX3BhbGV0dGUoIkZhbnRhc3RpY0ZveDEiKVs1XSwgDQogICAgICAgICAgICAgICBwY2ggPSAyMSwNCiAgICAgICAgICAgICAgIHNpemUgPSA1LCANCiAgICAgICAgICAgICAgIHN0cm9rZSA9IDEgKSArIA0KICAgICMgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKC0xLjE1LCAxLjkpKSArIA0KICAgIGxhYnModGl0bGUgPSAnQi4gIlRoaXMgY29uc2lkZXJhdGlvbiBhZmZlY3RzIG15IG1hbmFnZW1lbnQgZGVjaXNpb25tYWtpbmciJywgDQogICAgICAgICB4ID0gJ0FncmVlbWVudCBJbmRleCcpICsgDQogICAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICdibGFjaycsIHNpemUgPSAxNCksIA0KICAgICAgICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIgKQ0KcGxvdF9ncmlkKGltcG9ydGFuY2UsIA0KICAgICAgICAgIGluZmx1ZW5jZSwgDQogICAgICAgICAgICMgbGFiZWxzID0gYygnQScsICdCJyksDQogICAgICAgICAgbmNvbCA9IDEpDQpgYGANCg0KIyMgQXR0aXR1ZGVzIGFib3V0IGZpcmUgDQoNClRha2UtYXdheXMgDQoNCiogUmVzcG9uZGVudHMgZ2VuZXJhbGx5IGJlbGlldmUgdGhlaXIgY29tbXVuaXR5IGhhcyBuZWdhdGl2ZSBwZXJjZXB0aW9ucyBvZiBSeCBmaXJlLCBleGNlcHQgZm9yIHdpbGRsaWZlDQoqIFJlc3BvbmRlbnRzIGhhdmUgYSBjb25zZXJ2YXRpdmUgYXR0aXR1ZGUgdG93YXJkcyBSeCBmaXJlIHVzZSBhbmQgc2hvdyBhIGRpc2luY2xpbmF0aW9uIHRvIHVzZSBpdCB0aGVtc2VsdmVzDQoNCmBgYHtyIGF0dGl0dWRlcywgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEwLCBmaWcuY2FwPSdEZWdyZWUgdG8gd2hpY2ggcmVzcG9uZGVudHMgYWdyZWVkIHdpdGggc3RhdGVtZW50cyBhYm91dCAoQSkgY29tbXVuaXR5IHBlcmNlcHRpb25zIG9mIHByZXNjcmliZWQgZmlyZSBlZmZlY3RzLCBhbmQgKEIpIHBlcnNvbmFsIGF0dGl0dWRlcyBhYm91dCBwcmVzY3JpYmVkIGZpcmUgdXNlLid9DQojIEF0dGl0dWRlcyBhbmQgYmVsaWVmcyBhYm91dCBSeCBmaXJlDQpiZWxpZWZzIDwtDQogIHJlc3BvbnNlcyAlPiUNCiAgICBmaWx0ZXIoUXVlc3Rpb25LZXkgPT0gIkNvbW11bml0eUZpcmVCZWxpZWZzIikgICU+JQ0KICAgIG11dGF0ZShPcHRpb25LZXkgPSBzdHJfcmVtb3ZlKE9wdGlvbktleSwgJ2J1cm5fJyksIA0KICAgICAgICAgICByZXNwb25zZSA9IGNhc2Vfd2hlbigNCiAgICAgICAgICAgICAgT3B0aW9uS2V5ID09ICd3aWxkbGlmZScgfiAnTmVnYXRpdmUgaW1wYWN0cyB0byB3aWxkbGlmZScsIA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ3NvaWxfZXJvc2lvbicgfiAgICdSZXN1bHRzIGluIHNvaWwgZXJvc2lvbicsIA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ3Ntb2tlJyB+ICAgICdQcm9kdWNlcyBoYXJtZnVsIHNtb2tlJywgDQogICAgICAgICAgICAgIE9wdGlvbktleSA9PSAnc2FmZXR5JyB+ICAgJ1Bvc2VzIHJpc2sgdG8gaHVtYW4gc2FmZXR5JywgDQogICAgICAgICAgICAgIE9wdGlvbktleSA9PSAncHJvcGVydHlfcmlzaycgfiAgICJQb3NlcyByaXNrIHRvIG5lYXJieSBwcm9wZXJ0eSIsIA0KICAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ2ZvcmFnZScgfiAgICAgICdSZXN1bHRzIGluIGxvc3Mgb2YgZm9yYWdlJyApKSAlPiUNCiAgICBnZ3Bsb3QoKSArIHRoZW1lX2J3KDE2KSArIA0KICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsgDQogICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBtaW4sIA0KICAgICAgICAgICAgICAgICAgICAgICB4bWF4ID0gbWF4LCANCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IGZjdF9yZW9yZGVyKHJlc3BvbnNlLCBkZXNjKFN1cnZleU9yZGVyKSkpICwgDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpWzNdLCANCiAgICAgICAgICAgICAgICAgICBsd2QgPSAwLjkgKSArDQogICAgZ2VvbV9wb2ludChhZXMoeCA9IG1pZCwgeSA9IHJlc3BvbnNlICksDQogICAgICAgICAgICAgICBmaWxsID0gd2VzX3BhbGV0dGUoIkZhbnRhc3RpY0ZveDEiKVszXSwgDQogICAgICAgICAgICAgICBwY2ggPSAyMSwNCiAgICAgICAgICAgICAgIHNpemUgPSA0LCANCiAgICAgICAgICAgICAgIHN0cm9rZSA9IDEgKSArIA0KICAgICMgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKC0xLjE1LCAxLjkpKSArIA0KICAgIGxhYnModGl0bGUgPSAnQS4gIk1lbWJlcnMgb2YgbXkgY29tbXVuaXR5IGdlbmVyYWxseSBiZWxpZXZlIHRoZSBmb2xsb3dpbmcgYWJvdXQgUnggZmlyZSInLCANCiAgICAgICAgIHggPSAnQWdyZWVtZW50IEluZGV4JykgKyANCiAgICB0aGVtZShheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksIA0KICAgICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gJ2JsYWNrJywgc2l6ZSA9IDE0KSwgDQogICAgICAgICAgcGxvdC50aXRsZS5wb3NpdGlvbiA9ICJwbG90IiApDQphdHRpdHVkZXMgPC0NCiAgcmVzcG9uc2VzICU+JQ0KICAgIGZpbHRlcihzdHJfc3RhcnRzKFF1ZXN0aW9uS2V5LCAiQXR0aXR1ZGVzIikgKSAlPiUNCiAgICBtdXRhdGUoT3B0aW9uS2V5ID0gc3RyX3JlbW92ZShPcHRpb25LZXksICdidXJuXycpLCANCiAgICAgICAgICAgcmVzcG9uc2UgPSBjYXNlX3doZW4oDQogICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdiZW5lZmljaWFsJyB+ICdSeCBmaXJlIGlzIGEgYmVuZWZpY2lhbFxudG9vbCBmb3IgbWFuYWdpbmcgcmFuZ2VsYW5kcycsIA0KICAgICAgICAgICAgIE9wdGlvbktleSA9PSAnZnJlcXVlbnQnIH4gICAnUGVvcGxlIHNob3VsZCBiZSBhYmxlIHRvXG5idXJuIGFzIGZyZXF1ZW50bHkgYXMgdGhleVxuIHdhbnQgZm9yIG1hbmFnZW1lbnQnLCANCiAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ2xpbWl0ZWQnIH4gICAgJ0J1cm5pbmcgY2FuIGJlIHVzZWQgaW4gYVxubGltaXRlZCBzZXQgb2YgaW5zdGFuY2VzJywgDQogICAgICAgICAgICAgT3B0aW9uS2V5ID09ICdtYW5fcGxhbicgfiAgICdNeSBtYW5hZ2VtZW50IHBsYW4gaW5jbHVkZXNcbnVzaW5nIHByZXNjcmliZWQgZmlyZScsIA0KICAgICAgICAgICAgIE9wdGlvbktleSA9PSAncHJlcGFyZWQnIH4gICAiSSdtIHByZXBhcmVkIHRvIHVzZSBSeCBmaXJlXG5pZiBJIGNob29zZSB0byIsIA0KICAgICAgICAgICAgIE9wdGlvbktleSA9PSAncHJvcycgfiAgICAgICdGaXJlIHNob3VsZCBvbmx5IGJlIHVzZWRcbmJ5IHByb2Zlc3Npb25hbHMnLCANCiAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ3Nob3VsZG50JyB+ICAgJ0J1cm5pbmcgaXMgYSBwb29yIG1hbmFnZW1lbnRcbm9wdGlvbiB0aGF0IHNob3VsZG7igJl0IGJlIHVzZWQnLCANCiAgICAgICAgICAgICBPcHRpb25LZXkgPT0gJ3RyYWluaW5nJyB+ICdCdXJuaW5nIGlzIGEgZ29vZCBvcHRpb25cbmZvciBhbnlvbmUgd2l0aCB0cmFpbmluZycpKSAlPiUNCiAgICBnZ3Bsb3QoKSArIHRoZW1lX2J3KDE2KSArIA0KICAgIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsgDQogICAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBtaW4sIA0KICAgICAgICAgICAgICAgICAgICAgICB4bWF4ID0gbWF4LCANCiAgICAgICAgICAgICAgICAgICAgICAgeSA9IGZjdF9yZW9yZGVyKHJlc3BvbnNlLCBkZXNjKFN1cnZleU9yZGVyKSkpICwNCiAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSAwLjUsDQogICAgICAgICAgICAgICAgICAgY29sb3IgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpWzVdLCANCiAgICAgICAgICAgICAgICAgICBsd2QgPSAwLjkgKSArDQogICAgZ2VvbV9wb2ludChhZXMoeCA9IG1pZCwgeSA9IHJlc3BvbnNlICksDQogICAgICAgICAgICAgICBmaWxsID0gd2VzX3BhbGV0dGUoIkZhbnRhc3RpY0ZveDEiKVs1XSwgDQogICAgICAgICAgICAgICBwY2ggPSAyMSwNCiAgICAgICAgICAgICAgIHNpemUgPSA0LCANCiAgICAgICAgICAgICAgIHN0cm9rZSA9IDEgKSArIA0KICAgICMgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKC0xLjE1LCAxLjkpKSArIA0KICAgIGxhYnModGl0bGUgPSAnQi4gIkkgcGVyc29uYWxseSBiZWxpZXZlIHRoZSBmb2xsb3dpbmciJywgDQogICAgICAgICB4ID0gJ0FncmVlbWVudCBJbmRleCcpICsgDQogICAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChjb2xvciA9ICdibGFjaycsIHNpemUgPSAxNCksIA0KICAgICAgICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIgKQ0KcGxvdF9ncmlkKGJlbGllZnMsIA0KICAgICAgICAgIGF0dGl0dWRlcywgDQogICAgICAgICAgcmVsX2hlaWdodHMgPSBjKDAuNzUsIDEuNSksIA0KICAgICAgICAgIG5jb2wgPSAxKQ0KYGBgDQoNCiMjIFB1YmxpYyBncmF6aW5nIGxhbmQgbWFuYWdlbWVudCBhbmQgcGVyc29uYWwgcmVjcmVhdGlvbg0KDQpUYWtlLWF3YXlzIA0KDQoqIFJlc3BvbmRlbnRzIGV4cGVjdCBhZG1pbmlzdHJhdG9ycyB0byB1c2UgZ29vZCBzY2llbmNlDQoqIFJlc3BvbmRlbnRzIGRvIG5vdCB3YW50IHRvIHNlZSBSeCBmaXJlIGV4cGFuZGVkIG9uIHB1YmxpYyBncmF6aW5nbGFuZA0KKiBSZXNwb25kZW50cyByZWFsbHkgZG9uJ3QgdXNlIHB1YmxpYyBncmF6bGluZ2xhbmRzIGZvciByZWNyZWF0aW9uDQoNCg0KYGBge3IgcHVibGljX2xhbmRzLCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0xMCwgZmlnLmNhcD0nUmVzcG9uZGVudCBhdHRpdHVkZXMgdG93YXJkcyBwdWJsaWMgZ3JhemluZ2xhbmQgYWRtaW5pc3RyYXRpb24gYW5kIHByZXNjcmliZWQgZmlyZSB1c2UuJ30NCnJlc3BvbnNlcyAlPiUNCiAgZmlsdGVyKFF1ZXN0aW9uS2V5ID09ICJQdWJsaWNHcmF6aW5nQmVsaWVmcyIsIA0KICAgICAgICAgT3B0aW9uS2V5ICE9ICdwdWJsaWNfZmlyZScpICAlPiUNCiAgbXV0YXRlKHJlc3BvbnNlID0gY2FzZV93aGVuKA0KICAgICAgICAgICBPcHRpb25LZXkgPT0gJ2luY3JlYXNlX3B1YmxpY19maXJlJyB+ICdUaGVyZSBzaG91bGQgYmUgbW9yZSBSeCBmaXJlXG5vbiBwdWJsaWMgZ3JhemluZ2xhbmQnLCAgICAgICAgICAgIE9wdGlvbktleSA9PSAnYW1vdW50X3B1YmxpY19maXJlJyB+J1RoZXJlIGlzIGFuIGFwcHJvcHJpYXRlIGFtb3VudCBvZlxuUnggZmlyZSBvbiBwdWJsaWMgZ3JhemluZ2xhbmQnLCANCiAgICAgICAgICAgT3B0aW9uS2V5ID09ICdhZG1pbl91c2VycycgfiAnQWRtaW5pc3RyYXRvcnMgc2hvdWxkIG1hbmFnZSB0byBtZWV0XG51c2VyIG5lZWRzIG9yIHByZWZlcmVuY2VzJywgDQogICAgICAgICAgIE9wdGlvbktleSA9PSAnYWRtaW5fc2NpZW5jZScgfiAiQWRtaW5pc3RyYXRvcnMgc2hvdWxkIG1hbmFnZSBsYW5kXG5hY2NvcmRpbmcgdG8gdGhlIGJlc3QgYXZhaWxhYmxlIHNjaWVuY2UiLCANCiAgICAgICAgICAgT3B0aW9uS2V5ID09ICdhZG1pbl9nb29kJyB+ICdQdWJsaWMgZ3JhemluZ2xhbmQgYWRtaW5pc3RyYXRvcnNcbiBkbyBhIGdvb2Qgam9iIG1hbmFnaW5nIHRoZSBsYW5kJyApKSAlPiUNCiAgZ2dwbG90KCkgKyB0aGVtZV9idygxNikgKyANCiAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gMCwgbHR5ID0gMikgKyANCiAgZ2VvbV9lcnJvcmJhcmgoYWVzKHhtaW4gPSBtaW4sIA0KICAgICAgICAgICAgICAgICAgICAgeG1heCA9IG1heCwgDQogICAgICAgICAgICAgICAgICAgICB5ID0gZmN0X3Jlb3JkZXIocmVzcG9uc2UsIGRlc2MoU3VydmV5T3JkZXIpKSkgLCANCiAgICAgICAgICAgICAgICAgY29sb3IgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpWzNdLCANCiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMC41LA0KICAgICAgICAgICAgICAgICBsd2QgPSAwLjkgKSArDQogIGdlb21fcG9pbnQoYWVzKHggPSBtaWQsIHkgPSByZXNwb25zZSApLA0KICAgICAgICAgICAgIGZpbGwgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpWzNdLCANCiAgICAgICAgICAgICBwY2ggPSAyMSwNCiAgICAgICAgICAgICBzaXplID0gNCwgDQogICAgICAgICAgICAgc3Ryb2tlID0gMSApICsgDQogICMgY29vcmRfY2FydGVzaWFuKHhsaW0gPSBjKC0xLjE1LCAxLjkpKSArIA0KICBsYWJzKHRpdGxlID0gJyJJIHBlcnNvbmFsbHkgYmVsaWV2ZSB0aGUgZm9sbG93aW5nIGFib3V0IHB1YmxpYyBncmF6aW5nbGFuZCBtYW5hZ2VtZW50IicsIA0KICAgICAgIHggPSAnQWdyZWVtZW50IEluZGV4JykgKyANCiAgdGhlbWUoYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLCANCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoY29sb3IgPSAnYmxhY2snLCBzaXplID0gMTQpLCANCiAgICAgICAgcGxvdC50aXRsZS5wb3NpdGlvbiA9ICJwbG90IiApDQpgYGANCg0KYGBge3IgcmVjcmVhdGlvbiwgZmlnLmhlaWdodD01LCBmaWcud2lkdGg9MTAsIGZpZy5jYXA9IlJlc3BvbmRlbnRzJyB1c2Ugb2YgcHVibGljIGdyYXppbmdsYW5kIGZvciB2YXJpb3VzIHJlY3JlYXRpb24gYWN0aXZpZXMuIn0NCnJlc3BvbnNlcyAlPiUNCiAgZmlsdGVyKFF1ZXN0aW9uS2V5ID09ICdSZWNyZWF0aW9uJyApICU+JQ0KICBnZ3Bsb3QoKSArIHRoZW1lX2J3KDE2KSArIA0KICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBsdHkgPSAyKSArIA0KICBnZW9tX2Vycm9yYmFyaChhZXMoeG1pbiA9IG1pbiwgDQogICAgICAgICAgICAgICAgICAgICB4bWF4ID0gbWF4LCANCiAgICAgICAgICAgICAgICAgICAgIHkgPSBmY3RfcmVvcmRlcihTdXJ2ZXlUZXh0LCBtaWQpICkgLCANCiAgICAgICAgICAgICAgICAgY29sb3IgPSB3ZXNfcGFsZXR0ZSgiRmFudGFzdGljRm94MSIpWzNdLCANCiAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gMC41LA0KICAgICAgICAgICAgICAgICBsd2QgPSAwLjkgKSArDQogIGdlb21fcG9pbnQoYWVzKHggPSBtaWQsIHkgPSBTdXJ2ZXlUZXh0ICksDQogICAgICAgICAgICAgZmlsbCA9IHdlc19wYWxldHRlKCJGYW50YXN0aWNGb3gxIilbM10sIA0KICAgICAgICAgICAgIHBjaCA9IDIxLA0KICAgICAgICAgICAgIHNpemUgPSA0LCANCiAgICAgICAgICAgICBzdHJva2UgPSAxICkgKyANCiAgIyBjb29yZF9jYXJ0ZXNpYW4oeGxpbSA9IGMoLTEuMTUsIDEuOSkpICsgDQogIGxhYnModGl0bGUgPSAnIk15c2VsZiBhbmQvb3IgbXkgZmFtaWx5IHVzZSBwdWJsaWMgZ3JhemluZ2xhbmQgZm9yIHRoZXNlIHJlY3JlYXRpb24gYWN0aXZpdGllcyInLCANCiAgICAgICB4ID0gJ0FncmVlbWVudCBJbmRleCcpICsgDQogIHRoZW1lKGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwgDQogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGNvbG9yID0gJ2JsYWNrJywgc2l6ZSA9IDE0KSwgDQogICAgICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIgKQ0KYGBg