library(tidyverse)
library(arrow)
library(gt)
library(ggrepel)
library(scales)
source("../R/04_storyline_engine.R")
source("../R/05_viz_style.R")

TEAM   <- "Syracuse"
OPP    <- "California"
SEASON <- params$season
WEEK   <- params$week

FIG_DIR <- sprintf("figures/%d_wk%02d_story", SEASON, WEEK)
SCOPE   <- sprintf("%d Week %d | %s vs %s", SEASON, WEEK, TEAM, OPP)
hist <- read_parquet("~/cfb-data/processed/team_game_metrics.parquet")
cur  <- read_parquet("~/cfb-data/processed/team_game_metrics_2026.parquet")
raw  <- read_parquet(sprintf("~/cfb-data/raw/pbp_inseason/pbp_%d_wk%02d.parquet",
                             SEASON, WEEK))

fbs_teams <- unique(hist$team[hist$is_fbs_matchup])

# The peer group: every FBS-vs-FBS team-game this week. Cal is FBS, so unlike
# Week 1 there is no FCS discount to apply -- these are true peers.
peers <- cur |>
  filter(team %in% fbs_teams, !low_volume, is_fbs_matchup, week == WEEK)

su  <- peers |> filter(team == TEAM)
su1 <- cur   |> filter(team == TEAM, week == 1)

peer_rank <- function(col, higher_better = TRUE) {
  v <- peers[[col]]
  r <- rank(if (higher_better) -v else v, na.last = "keep")
  as.integer(round(r[peers$team == TEAM]))
}
n_peers <- nrow(peers)

Exhibit 1 — The defense showed up

def_rank <- peer_rank("def_epa_play", higher_better = FALSE)

d1 <- peers |>
  mutate(is_su = team == TEAM) |>
  arrange(desc(def_epa_play)) |>
  mutate(team = factor(team, levels = team))

p_def <- ggplot(d1, aes(x = def_epa_play, y = team, color = is_su)) +
  geom_vline(xintercept = median(d1$def_epa_play), linetype = "dashed",
             color = SU$muted, linewidth = 0.4) +
  geom_point(aes(size = is_su)) +
  ggrepel::geom_text_repel(
    data = filter(d1, is_su),
    aes(label = sprintf("%s — %+.3f EPA allowed\n%s of %d",
                        team, def_epa_play, scales::ordinal(def_rank), n_peers)),
    nudge_x = 0.22, size = 3.4, fontface = "bold", segment.color = NA,
    lineheight = 0.95, force = 0
  ) +
  scale_color_manual(values = c(`FALSE` = SU$muted, `TRUE` = SU$orange), guide = "none") +
  scale_size_manual(values = c(`FALSE` = 1.6, `TRUE` = 3.6), guide = "none") +
  labs(
    title = sprintf("Syracuse's defense ranked %s of %d against FBS opposition in Week 2",
                    scales::ordinal(def_rank), n_peers),
    subtitle = "EPA allowed per play — further left is better | Dashed line = group median",
    x = "Defensive EPA allowed per play", y = NULL,
    caption = su_caption(SCOPE)
  ) +
  theme_su(legend_pos = "none") +
  theme(axis.text.y = element_text(size = 5.5))

save_fig(p_def, "01_defense_vs_peers", height = 8)

The defense was also the week’s biggest improvement: EPA allowed moved from +0.098 in Week 1 to -0.165 against a Power Four opponent.

tibble::tibble(
  Metric = c("EPA allowed per play", "Success rate allowed",
             "Havoc rate", "Sack rate"),
  `Week 1` = c(su1$def_epa_play, su1$def_success_rate,
               su1$def_havoc_core, su1$def_sack_rate),
  `Week 2` = c(su$def_epa_play, su$def_success_rate,
               su$def_havoc_core, su$def_sack_rate),
  `Rank of 96` = c(peer_rank("def_epa_play", FALSE), peer_rank("def_success_rate", FALSE),
                   peer_rank("def_havoc_core"), peer_rank("def_sack_rate"))
) |>
  gt() |>
  tab_header(
    title = md("**Efficient without being disruptive**"),
    subtitle = md("Syracuse held California down while generating almost no negative plays — an unusual profile worth watching")
  ) |>
  fmt_number(columns = c(`Week 1`, `Week 2`), decimals = 3) |>
  cols_align("center", columns = -Metric) |>
  tab_style(style = cell_text(weight = "bold"),
            locations = cells_body(columns = Metric)) |>
  tab_source_note(md(paste0("**", su_caption(SCOPE),
    "** — ranks are among the ", n_peers,
    " FBS teams that played FBS opponents in Week 2."))) |>
  gt_theme_su()
Efficient without being disruptive
Syracuse held California down while generating almost no negative plays — an unusual profile worth watching
Metric Week 1 Week 2 Rank of 96
EPA allowed per play 0.098 −0.165 16
Success rate allowed 0.276 0.350 25
Havoc rate 0.103 0.017 72
Sack rate 0.161 0.029 73
Data: CollegeFootballData via cfbfastR | 2026 Week 2 | Syracuse vs California — ranks are among the 96 FBS teams that played FBS opponents in Week 2.

Exhibit 2 — But Syracuse could not stay on schedule

sd_rank <- peer_rank("off_sr_standard", higher_better = TRUE)

d2 <- peers |>
  filter(!is.na(off_sr_standard)) |>
  mutate(is_su = team == TEAM) |>
  arrange(off_sr_standard) |>
  mutate(team = factor(team, levels = team))

p_std <- ggplot(d2, aes(x = off_sr_standard, y = team, color = is_su)) +
  geom_vline(xintercept = median(d2$off_sr_standard), linetype = "dashed",
             color = SU$muted, linewidth = 0.4) +
  geom_point(aes(size = is_su)) +
  ggrepel::geom_text_repel(
    data = filter(d2, is_su),
    aes(label = sprintf("%s — %.1f%% on standard downs\n%s of %d",
                        team, 100 * off_sr_standard,
                        scales::ordinal(sd_rank), nrow(d2))),
    nudge_x = 0.1, size = 3.4, fontface = "bold", segment.color = NA,
    lineheight = 0.95, force = 0
  ) +
  scale_color_manual(values = c(`FALSE` = SU$muted, `TRUE` = SU$orange), guide = "none") +
  scale_size_manual(values = c(`FALSE` = 1.6, `TRUE` = 3.6), guide = "none") +
  scale_x_continuous(labels = scales::percent) +
  labs(
    title = sprintf("On first and second down, Syracuse ranked %s of %d",
                    scales::ordinal(sd_rank), nrow(d2)),
    subtitle = sprintf(
      "Standard-downs success rate — further right is better | Syracuse fell from %.1f%% in Week 1 to %.1f%% | Dashed line = group median",
      100 * su1$off_sr_standard, 100 * su$off_sr_standard),
    x = "Standard-downs success rate", y = NULL,
    caption = su_caption(SCOPE)
  ) +
  theme_su(legend_pos = "none") +
  theme(axis.text.y = element_text(size = 5.5))

save_fig(p_std, "02_standard_downs_vs_peers", height = 8)

Failing on early downs is the mechanism behind everything in Exhibit 3. An offense that does not win first and second down arrives at third-and-long, stalls short of the end zone, and settles for field goals.

Exhibit 3 — Nine trips inside the 40, eighteen points

drives <- raw |>
  filter(pos_team == TEAM) |>
  group_by(drive_id) |>
  summarise(
    start_ytg = first(drive_start_yards_to_goal),
    closest   = min(yards_to_goal, na.rm = TRUE),
    pts       = first(drive_pts),
    result    = first(drive_result),
    plays     = n(),
    .groups = "drop"
  ) |>
  filter(!is.na(start_ytg), is.finite(closest))

opps <- drives |> filter(closest <= 40) |> arrange(closest)

opps |>
  transmute(
    `Drive started` = sprintf("own %.0f", 100 - start_ytg),
    `Got as close as` = ifelse(closest == 0, "the goal line",
                               sprintf("the %s %.0f", OPP, closest)),
    Plays = plays,
    Result = result,
    Points = pts
  ) |>
  gt() |>
  tab_header(
    title = md("**Syracuse reached California's 40-yard line nine times and scored 18 points**"),
    subtitle = md("Two missed field goals and an interception at the goal line, in a three-point loss")
  ) |>
  cols_align("center", columns = c(Plays, Points)) |>
  cols_align("left", columns = c(`Drive started`, `Got as close as`, Result)) |>
  data_color(columns = Points, method = "numeric", palette = SU_SEQ) |>
  tab_style(
    style = list(cell_fill(color = "#FFF3E6"), cell_text(weight = "bold")),
    locations = cells_body(rows = Points == 0)
  ) |>
  tab_source_note(md(paste0(
    "**", su_caption(SCOPE), "** — a scoring opportunity is any drive reaching the opponent's 40. ",
    sprintf("Syracuse averaged %.2f points per trip, %s of %d nationally.",
            su$off_pts_per_opp, scales::ordinal(peer_rank("off_pts_per_opp")), n_peers)))) |>
  gt_theme_su()
Syracuse reached California’s 40-yard line nine times and scored 18 points
Two missed field goals and an interception at the goal line, in a three-point loss
Drive started Got as close as Plays Result Points
own 28 the goal line 6 TD 6
own 52 the goal line 8 INT 0
own 100 the goal line 22 MISSED FG 0
own 25 the California 2 15 TD 6
own 36 the California 7 7 FG 3
own 40 the California 15 15 FG 3
own 25 the California 22 14 MISSED FG 0
own 28 the California 28 2 PUNT 0
own 20 the California 40 7 PUNT 0
Data: CollegeFootballData via cfbfastR | 2026 Week 2 | Syracuse vs California — a scoring opportunity is any drive reaching the opponent’s 40. Syracuse averaged 2.25 points per trip, 83rd of 96 nationally.

Exhibit 4 — Outplayed California, and lost anyway

# Final scores reconstructed from the play-by-play, so this never depends on a
# live API call. A handful of games carry corrupted score fields, so margins
# are filtered to a plausible range before use.
scores <- bind_rows(
  raw |> transmute(game_id, team = pos_team,     pts = pos_team_score),
  raw |> transmute(game_id, team = def_pos_team, pts = def_pos_team_score)
) |>
  filter(!is.na(team), !is.na(pts), pts >= 0, pts <= 100) |>
  group_by(game_id, team) |>
  summarise(final = max(pts, na.rm = TRUE), .groups = "drop")

margins <- scores |>
  group_by(game_id) |>
  filter(n() == 2) |>
  mutate(margin = final - rev(final)) |>
  ungroup() |>
  filter(abs(margin) <= 80)

j <- peers |>
  inner_join(margins, by = c("game_id", "team")) |>
  mutate(is_su = team == TEAM,
         won_epa = net_epa_play > 0,
         won_game = margin > 0)

share_won <- mean(j$won_game[j$won_epa])
n_epa_win <- sum(j$won_epa)

p_scatter <- ggplot(j, aes(x = net_epa_play, y = margin)) +
  annotate("rect", xmin = 0, xmax = Inf, ymin = -Inf, ymax = 0,
           fill = SU$orange, alpha = 0.06) +
  geom_hline(yintercept = 0, color = SU$muted, linewidth = 0.4) +
  geom_vline(xintercept = 0, color = SU$muted, linewidth = 0.4) +
  geom_point(data = filter(j, !is_su), color = SU$muted, alpha = 0.5, size = 2.2) +
  geom_point(data = filter(j, is_su), color = SU$orange, size = 4.2) +
  ggrepel::geom_text_repel(
    data = filter(j, is_su),
    aes(label = sprintf("%s\n%+.3f EPA margin, lost by %d", team, net_epa_play, abs(margin))),
    nudge_y = -14, nudge_x = 0.05, size = 3.4, fontface = "bold",
    segment.color = SU$orange, lineheight = 0.95
  ) +
  annotate("text", x = Inf, y = -Inf, hjust = 1.05, vjust = -1.2,
           label = "Won the efficiency battle, lost the game",
           size = 3.2, fontface = "italic", color = SU$ink2) +
  labs(
    title = sprintf("%d of %d teams that won the efficiency battle in Week 2 won the game. Syracuse did not.",
                    sum(j$won_epa & j$won_game), n_epa_win),
    subtitle = sprintf(
      "Net EPA per play against final margin | %d FBS-vs-FBS team-games | Shaded quadrant: outplayed the opponent and still lost",
      nrow(j)),
    x = "Net EPA per play (offense minus defense allowed)",
    y = "Final point margin",
    caption = su_caption(SCOPE)
  ) +
  theme_su(legend_pos = "none")

save_fig(p_scatter, "04_outplayed_and_lost", height = 6)

Among the 16 teams that won the efficiency battle and lost, Syracuse’s 2.25 points per scoring opportunity was among the lowest. The pattern is not bad luck — it is what happens to a team that reaches scoring range and cannot convert.

Figures written to disk

figs <- list.files(FIG_DIR, pattern = "\\.png$", full.names = TRUE)
if (length(figs) == 0) {
  cat("No figures written.\n")
} else {
  cat("300-dpi PNGs ready for the piece:\n\n")
  for (f in figs) cat("  ", f, "  (", round(file.info(f)$size / 1024), " KB)\n", sep = "")
  cat("\nThe gt tables render above — copy them from the browser into Google Docs,\n")
  cat("where they paste as native editable tables.\n")
}
## 300-dpi PNGs ready for the piece:
## 
##   figures/2026_wk02_story/01_defense_vs_peers.png  (350 KB)
##   figures/2026_wk02_story/02_standard_downs_vs_peers.png  (359 KB)
##   figures/2026_wk02_story/04_outplayed_and_lost.png  (227 KB)
## 
## The gt tables render above — copy them from the browser into Google Docs,
## where they paste as native editable tables.
LS0tCnRpdGxlOiAiVGhlIERlZmVuc2UgU2hvd2VkIFVwLiBUaGUgT2ZmZW5zZSBOZXZlciBGaW5pc2hlZC4iCnN1YnRpdGxlOiAiV2VlayAyIDIwMjYg4oCUIFN5cmFjdXNlIDE4LCBDYWxpZm9ybmlhIDIxIOKAlCBleGhpYml0cyBmb3IgcHVibGljYXRpb24iCmF1dGhvcjogIkNocmlzIEppbWVuZXoiCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCIKcGFyYW1zOgogIHNlYXNvbjogMjAyNgogIHdlZWs6IDIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0aGVtZTogZmxhdGx5CiAgICBoaWdobGlnaHQ6IHplbmJ1cm4KICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICBkZl9wcmludDogcGFnZWQKICAgIGNvZGVfZG93bmxvYWQ6IHllcwotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIEVOQ09ESU5HOiBhIHNoZWxsIHdpdGggbm8gTEFORyBzZXQgc3RhcnRzIFIgaW4gdGhlIEMgLyBVUy1BU0NJSSBsb2NhbGUsIGFuZAojIGd0IGFuZCBnZ3Bsb3QgdGhlbiBFU0NBUEUgZXZlcnkgbm9uLUFTQ0lJIGNoYXJhY3RlciAtLSBlbSBkYXNoZXMgY29tZSBvdXQgYXMKIyBhIGxpdGVyYWwgIjxVKzIwMTQ+IiBpbiB0aGUgcmVuZGVyZWQgb3V0cHV0LiBGb3JjaW5nIFVURi04IGtlZXBzIHR5cG9ncmFwaGljCiMgY2hhcmFjdGVycyBpbnRhY3QsIHdoaWNoIG1hdHRlcnMgZm9yIHB1YmxpY2F0aW9uLXJlYWR5IGV4aGliaXRzLgpmb3IgKGxvYyBpbiBjKCJlbl9VUy5VVEYtOCIsICJDLlVURi04IiwgIlVURi04IikpIHsKICBpZiAobnpjaGFyKHN1cHByZXNzV2FybmluZ3MoU3lzLnNldGxvY2FsZSgiTENfQUxMIiwgbG9jKSkpKSBicmVhawp9Cgprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoID0gMTAsIGZpZy5oZWlnaHQgPSA2LCBkcGkgPSAxNTApCmBgYAoKYGBge3IgbGlicmFyaWVzfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShhcnJvdykKbGlicmFyeShndCkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHNjYWxlcykKYGBgCgpgYGB7ciBzdHlsZX0Kc291cmNlKCIuLi9SLzA0X3N0b3J5bGluZV9lbmdpbmUuUiIpCnNvdXJjZSgiLi4vUi8wNV92aXpfc3R5bGUuUiIpCgpURUFNICAgPC0gIlN5cmFjdXNlIgpPUFAgICAgPC0gIkNhbGlmb3JuaWEiClNFQVNPTiA8LSBwYXJhbXMkc2Vhc29uCldFRUsgICA8LSBwYXJhbXMkd2VlawoKRklHX0RJUiA8LSBzcHJpbnRmKCJmaWd1cmVzLyVkX3drJTAyZF9zdG9yeSIsIFNFQVNPTiwgV0VFSykKU0NPUEUgICA8LSBzcHJpbnRmKCIlZCBXZWVrICVkIHwgJXMgdnMgJXMiLCBTRUFTT04sIFdFRUssIFRFQU0sIE9QUCkKYGBgCgpgYGB7ciBkYXRhfQpoaXN0IDwtIHJlYWRfcGFycXVldCgifi9jZmItZGF0YS9wcm9jZXNzZWQvdGVhbV9nYW1lX21ldHJpY3MucGFycXVldCIpCmN1ciAgPC0gcmVhZF9wYXJxdWV0KCJ+L2NmYi1kYXRhL3Byb2Nlc3NlZC90ZWFtX2dhbWVfbWV0cmljc18yMDI2LnBhcnF1ZXQiKQpyYXcgIDwtIHJlYWRfcGFycXVldChzcHJpbnRmKCJ+L2NmYi1kYXRhL3Jhdy9wYnBfaW5zZWFzb24vcGJwXyVkX3drJTAyZC5wYXJxdWV0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUFTT04sIFdFRUspKQoKZmJzX3RlYW1zIDwtIHVuaXF1ZShoaXN0JHRlYW1baGlzdCRpc19mYnNfbWF0Y2h1cF0pCgojIFRoZSBwZWVyIGdyb3VwOiBldmVyeSBGQlMtdnMtRkJTIHRlYW0tZ2FtZSB0aGlzIHdlZWsuIENhbCBpcyBGQlMsIHNvIHVubGlrZQojIFdlZWsgMSB0aGVyZSBpcyBubyBGQ1MgZGlzY291bnQgdG8gYXBwbHkgLS0gdGhlc2UgYXJlIHRydWUgcGVlcnMuCnBlZXJzIDwtIGN1ciB8PgogIGZpbHRlcih0ZWFtICVpbiUgZmJzX3RlYW1zLCAhbG93X3ZvbHVtZSwgaXNfZmJzX21hdGNodXAsIHdlZWsgPT0gV0VFSykKCnN1ICA8LSBwZWVycyB8PiBmaWx0ZXIodGVhbSA9PSBURUFNKQpzdTEgPC0gY3VyICAgfD4gZmlsdGVyKHRlYW0gPT0gVEVBTSwgd2VlayA9PSAxKQoKcGVlcl9yYW5rIDwtIGZ1bmN0aW9uKGNvbCwgaGlnaGVyX2JldHRlciA9IFRSVUUpIHsKICB2IDwtIHBlZXJzW1tjb2xdXQogIHIgPC0gcmFuayhpZiAoaGlnaGVyX2JldHRlcikgLXYgZWxzZSB2LCBuYS5sYXN0ID0gImtlZXAiKQogIGFzLmludGVnZXIocm91bmQocltwZWVycyR0ZWFtID09IFRFQU1dKSkKfQpuX3BlZXJzIDwtIG5yb3cocGVlcnMpCmBgYAoKIyMgRXhoaWJpdCAxIOKAlCBUaGUgZGVmZW5zZSBzaG93ZWQgdXAKCmBgYHtyIGV4aGliaXQtMSwgZmlnLmFzcCA9IDAuODV9CmRlZl9yYW5rIDwtIHBlZXJfcmFuaygiZGVmX2VwYV9wbGF5IiwgaGlnaGVyX2JldHRlciA9IEZBTFNFKQoKZDEgPC0gcGVlcnMgfD4KICBtdXRhdGUoaXNfc3UgPSB0ZWFtID09IFRFQU0pIHw+CiAgYXJyYW5nZShkZXNjKGRlZl9lcGFfcGxheSkpIHw+CiAgbXV0YXRlKHRlYW0gPSBmYWN0b3IodGVhbSwgbGV2ZWxzID0gdGVhbSkpCgpwX2RlZiA8LSBnZ3Bsb3QoZDEsIGFlcyh4ID0gZGVmX2VwYV9wbGF5LCB5ID0gdGVhbSwgY29sb3IgPSBpc19zdSkpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSBtZWRpYW4oZDEkZGVmX2VwYV9wbGF5KSwgbGluZXR5cGUgPSAiZGFzaGVkIiwKICAgICAgICAgICAgIGNvbG9yID0gU1UkbXV0ZWQsIGxpbmV3aWR0aCA9IDAuNCkgKwogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBpc19zdSkpICsKICBnZ3JlcGVsOjpnZW9tX3RleHRfcmVwZWwoCiAgICBkYXRhID0gZmlsdGVyKGQxLCBpc19zdSksCiAgICBhZXMobGFiZWwgPSBzcHJpbnRmKCIlcyDigJQgJSsuM2YgRVBBIGFsbG93ZWRcbiVzIG9mICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGVhbSwgZGVmX2VwYV9wbGF5LCBzY2FsZXM6Om9yZGluYWwoZGVmX3JhbmspLCBuX3BlZXJzKSksCiAgICBudWRnZV94ID0gMC4yMiwgc2l6ZSA9IDMuNCwgZm9udGZhY2UgPSAiYm9sZCIsIHNlZ21lbnQuY29sb3IgPSBOQSwKICAgIGxpbmVoZWlnaHQgPSAwLjk1LCBmb3JjZSA9IDAKICApICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYyhgRkFMU0VgID0gU1UkbXV0ZWQsIGBUUlVFYCA9IFNVJG9yYW5nZSksIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYyhgRkFMU0VgID0gMS42LCBgVFJVRWAgPSAzLjYpLCBndWlkZSA9ICJub25lIikgKwogIGxhYnMoCiAgICB0aXRsZSA9IHNwcmludGYoIlN5cmFjdXNlJ3MgZGVmZW5zZSByYW5rZWQgJXMgb2YgJWQgYWdhaW5zdCBGQlMgb3Bwb3NpdGlvbiBpbiBXZWVrIDIiLAogICAgICAgICAgICAgICAgICAgIHNjYWxlczo6b3JkaW5hbChkZWZfcmFuayksIG5fcGVlcnMpLAogICAgc3VidGl0bGUgPSAiRVBBIGFsbG93ZWQgcGVyIHBsYXkg4oCUIGZ1cnRoZXIgbGVmdCBpcyBiZXR0ZXIgfCBEYXNoZWQgbGluZSA9IGdyb3VwIG1lZGlhbiIsCiAgICB4ID0gIkRlZmVuc2l2ZSBFUEEgYWxsb3dlZCBwZXIgcGxheSIsIHkgPSBOVUxMLAogICAgY2FwdGlvbiA9IHN1X2NhcHRpb24oU0NPUEUpCiAgKSArCiAgdGhlbWVfc3UobGVnZW5kX3BvcyA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1LjUpKQoKc2F2ZV9maWcocF9kZWYsICIwMV9kZWZlbnNlX3ZzX3BlZXJzIiwgaGVpZ2h0ID0gOCkKYGBgCgpUaGUgZGVmZW5zZSB3YXMgYWxzbyB0aGUgd2VlaydzIGJpZ2dlc3QgaW1wcm92ZW1lbnQ6IEVQQSBhbGxvd2VkIG1vdmVkIGZyb20KYHIgc3ByaW50ZigiJSsuM2YiLCBzdTEkZGVmX2VwYV9wbGF5KWAgaW4gV2VlayAxIHRvCmByIHNwcmludGYoIiUrLjNmIiwgc3UkZGVmX2VwYV9wbGF5KWAgYWdhaW5zdCBhIFBvd2VyIEZvdXIgb3Bwb25lbnQuCgpgYGB7ciBleGhpYml0LTFifQp0aWJibGU6OnRpYmJsZSgKICBNZXRyaWMgPSBjKCJFUEEgYWxsb3dlZCBwZXIgcGxheSIsICJTdWNjZXNzIHJhdGUgYWxsb3dlZCIsCiAgICAgICAgICAgICAiSGF2b2MgcmF0ZSIsICJTYWNrIHJhdGUiKSwKICBgV2VlayAxYCA9IGMoc3UxJGRlZl9lcGFfcGxheSwgc3UxJGRlZl9zdWNjZXNzX3JhdGUsCiAgICAgICAgICAgICAgIHN1MSRkZWZfaGF2b2NfY29yZSwgc3UxJGRlZl9zYWNrX3JhdGUpLAogIGBXZWVrIDJgID0gYyhzdSRkZWZfZXBhX3BsYXksIHN1JGRlZl9zdWNjZXNzX3JhdGUsCiAgICAgICAgICAgICAgIHN1JGRlZl9oYXZvY19jb3JlLCBzdSRkZWZfc2Fja19yYXRlKSwKICBgUmFuayBvZiA5NmAgPSBjKHBlZXJfcmFuaygiZGVmX2VwYV9wbGF5IiwgRkFMU0UpLCBwZWVyX3JhbmsoImRlZl9zdWNjZXNzX3JhdGUiLCBGQUxTRSksCiAgICAgICAgICAgICAgICAgICBwZWVyX3JhbmsoImRlZl9oYXZvY19jb3JlIiksIHBlZXJfcmFuaygiZGVmX3NhY2tfcmF0ZSIpKQopIHw+CiAgZ3QoKSB8PgogIHRhYl9oZWFkZXIoCiAgICB0aXRsZSA9IG1kKCIqKkVmZmljaWVudCB3aXRob3V0IGJlaW5nIGRpc3J1cHRpdmUqKiIpLAogICAgc3VidGl0bGUgPSBtZCgiU3lyYWN1c2UgaGVsZCBDYWxpZm9ybmlhIGRvd24gd2hpbGUgZ2VuZXJhdGluZyBhbG1vc3Qgbm8gbmVnYXRpdmUgcGxheXMg4oCUIGFuIHVudXN1YWwgcHJvZmlsZSB3b3J0aCB3YXRjaGluZyIpCiAgKSB8PgogIGZtdF9udW1iZXIoY29sdW1ucyA9IGMoYFdlZWsgMWAsIGBXZWVrIDJgKSwgZGVjaW1hbHMgPSAzKSB8PgogIGNvbHNfYWxpZ24oImNlbnRlciIsIGNvbHVtbnMgPSAtTWV0cmljKSB8PgogIHRhYl9zdHlsZShzdHlsZSA9IGNlbGxfdGV4dCh3ZWlnaHQgPSAiYm9sZCIpLAogICAgICAgICAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KGNvbHVtbnMgPSBNZXRyaWMpKSB8PgogIHRhYl9zb3VyY2Vfbm90ZShtZChwYXN0ZTAoIioqIiwgc3VfY2FwdGlvbihTQ09QRSksCiAgICAiKiog4oCUIHJhbmtzIGFyZSBhbW9uZyB0aGUgIiwgbl9wZWVycywKICAgICIgRkJTIHRlYW1zIHRoYXQgcGxheWVkIEZCUyBvcHBvbmVudHMgaW4gV2VlayAyLiIpKSkgfD4KICBndF90aGVtZV9zdSgpCmBgYAoKIyMgRXhoaWJpdCAyIOKAlCBCdXQgU3lyYWN1c2UgY291bGQgbm90IHN0YXkgb24gc2NoZWR1bGUKCmBgYHtyIGV4aGliaXQtMiwgZmlnLmFzcCA9IDAuODV9CnNkX3JhbmsgPC0gcGVlcl9yYW5rKCJvZmZfc3Jfc3RhbmRhcmQiLCBoaWdoZXJfYmV0dGVyID0gVFJVRSkKCmQyIDwtIHBlZXJzIHw+CiAgZmlsdGVyKCFpcy5uYShvZmZfc3Jfc3RhbmRhcmQpKSB8PgogIG11dGF0ZShpc19zdSA9IHRlYW0gPT0gVEVBTSkgfD4KICBhcnJhbmdlKG9mZl9zcl9zdGFuZGFyZCkgfD4KICBtdXRhdGUodGVhbSA9IGZhY3Rvcih0ZWFtLCBsZXZlbHMgPSB0ZWFtKSkKCnBfc3RkIDwtIGdncGxvdChkMiwgYWVzKHggPSBvZmZfc3Jfc3RhbmRhcmQsIHkgPSB0ZWFtLCBjb2xvciA9IGlzX3N1KSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IG1lZGlhbihkMiRvZmZfc3Jfc3RhbmRhcmQpLCBsaW5ldHlwZSA9ICJkYXNoZWQiLAogICAgICAgICAgICAgY29sb3IgPSBTVSRtdXRlZCwgbGluZXdpZHRoID0gMC40KSArCiAgZ2VvbV9wb2ludChhZXMoc2l6ZSA9IGlzX3N1KSkgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbCgKICAgIGRhdGEgPSBmaWx0ZXIoZDIsIGlzX3N1KSwKICAgIGFlcyhsYWJlbCA9IHNwcmludGYoIiVzIOKAlCAlLjFmJSUgb24gc3RhbmRhcmQgZG93bnNcbiVzIG9mICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGVhbSwgMTAwICogb2ZmX3NyX3N0YW5kYXJkLAogICAgICAgICAgICAgICAgICAgICAgICBzY2FsZXM6Om9yZGluYWwoc2RfcmFuayksIG5yb3coZDIpKSksCiAgICBudWRnZV94ID0gMC4xLCBzaXplID0gMy40LCBmb250ZmFjZSA9ICJib2xkIiwgc2VnbWVudC5jb2xvciA9IE5BLAogICAgbGluZWhlaWdodCA9IDAuOTUsIGZvcmNlID0gMAogICkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKGBGQUxTRWAgPSBTVSRtdXRlZCwgYFRSVUVgID0gU1Ukb3JhbmdlKSwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV9zaXplX21hbnVhbCh2YWx1ZXMgPSBjKGBGQUxTRWAgPSAxLjYsIGBUUlVFYCA9IDMuNiksIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKwogIGxhYnMoCiAgICB0aXRsZSA9IHNwcmludGYoIk9uIGZpcnN0IGFuZCBzZWNvbmQgZG93biwgU3lyYWN1c2UgcmFua2VkICVzIG9mICVkIiwKICAgICAgICAgICAgICAgICAgICBzY2FsZXM6Om9yZGluYWwoc2RfcmFuayksIG5yb3coZDIpKSwKICAgIHN1YnRpdGxlID0gc3ByaW50ZigKICAgICAgIlN0YW5kYXJkLWRvd25zIHN1Y2Nlc3MgcmF0ZSDigJQgZnVydGhlciByaWdodCBpcyBiZXR0ZXIgfCBTeXJhY3VzZSBmZWxsIGZyb20gJS4xZiUlIGluIFdlZWsgMSB0byAlLjFmJSUgfCBEYXNoZWQgbGluZSA9IGdyb3VwIG1lZGlhbiIsCiAgICAgIDEwMCAqIHN1MSRvZmZfc3Jfc3RhbmRhcmQsIDEwMCAqIHN1JG9mZl9zcl9zdGFuZGFyZCksCiAgICB4ID0gIlN0YW5kYXJkLWRvd25zIHN1Y2Nlc3MgcmF0ZSIsIHkgPSBOVUxMLAogICAgY2FwdGlvbiA9IHN1X2NhcHRpb24oU0NPUEUpCiAgKSArCiAgdGhlbWVfc3UobGVnZW5kX3BvcyA9ICJub25lIikgKwogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1LjUpKQoKc2F2ZV9maWcocF9zdGQsICIwMl9zdGFuZGFyZF9kb3duc192c19wZWVycyIsIGhlaWdodCA9IDgpCmBgYAoKRmFpbGluZyBvbiBlYXJseSBkb3ducyBpcyB0aGUgbWVjaGFuaXNtIGJlaGluZCBldmVyeXRoaW5nIGluIEV4aGliaXQgMy4gQW4Kb2ZmZW5zZSB0aGF0IGRvZXMgbm90IHdpbiBmaXJzdCBhbmQgc2Vjb25kIGRvd24gYXJyaXZlcyBhdCB0aGlyZC1hbmQtbG9uZywKc3RhbGxzIHNob3J0IG9mIHRoZSBlbmQgem9uZSwgYW5kIHNldHRsZXMgZm9yIGZpZWxkIGdvYWxzLgoKIyMgRXhoaWJpdCAzIOKAlCBOaW5lIHRyaXBzIGluc2lkZSB0aGUgNDAsIGVpZ2h0ZWVuIHBvaW50cwoKYGBge3IgZXhoaWJpdC0zfQpkcml2ZXMgPC0gcmF3IHw+CiAgZmlsdGVyKHBvc190ZWFtID09IFRFQU0pIHw+CiAgZ3JvdXBfYnkoZHJpdmVfaWQpIHw+CiAgc3VtbWFyaXNlKAogICAgc3RhcnRfeXRnID0gZmlyc3QoZHJpdmVfc3RhcnRfeWFyZHNfdG9fZ29hbCksCiAgICBjbG9zZXN0ICAgPSBtaW4oeWFyZHNfdG9fZ29hbCwgbmEucm0gPSBUUlVFKSwKICAgIHB0cyAgICAgICA9IGZpcnN0KGRyaXZlX3B0cyksCiAgICByZXN1bHQgICAgPSBmaXJzdChkcml2ZV9yZXN1bHQpLAogICAgcGxheXMgICAgID0gbigpLAogICAgLmdyb3VwcyA9ICJkcm9wIgogICkgfD4KICBmaWx0ZXIoIWlzLm5hKHN0YXJ0X3l0ZyksIGlzLmZpbml0ZShjbG9zZXN0KSkKCm9wcHMgPC0gZHJpdmVzIHw+IGZpbHRlcihjbG9zZXN0IDw9IDQwKSB8PiBhcnJhbmdlKGNsb3Nlc3QpCgpvcHBzIHw+CiAgdHJhbnNtdXRlKAogICAgYERyaXZlIHN0YXJ0ZWRgID0gc3ByaW50Zigib3duICUuMGYiLCAxMDAgLSBzdGFydF95dGcpLAogICAgYEdvdCBhcyBjbG9zZSBhc2AgPSBpZmVsc2UoY2xvc2VzdCA9PSAwLCAidGhlIGdvYWwgbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKCJ0aGUgJXMgJS4wZiIsIE9QUCwgY2xvc2VzdCkpLAogICAgUGxheXMgPSBwbGF5cywKICAgIFJlc3VsdCA9IHJlc3VsdCwKICAgIFBvaW50cyA9IHB0cwogICkgfD4KICBndCgpIHw+CiAgdGFiX2hlYWRlcigKICAgIHRpdGxlID0gbWQoIioqU3lyYWN1c2UgcmVhY2hlZCBDYWxpZm9ybmlhJ3MgNDAteWFyZCBsaW5lIG5pbmUgdGltZXMgYW5kIHNjb3JlZCAxOCBwb2ludHMqKiIpLAogICAgc3VidGl0bGUgPSBtZCgiVHdvIG1pc3NlZCBmaWVsZCBnb2FscyBhbmQgYW4gaW50ZXJjZXB0aW9uIGF0IHRoZSBnb2FsIGxpbmUsIGluIGEgdGhyZWUtcG9pbnQgbG9zcyIpCiAgKSB8PgogIGNvbHNfYWxpZ24oImNlbnRlciIsIGNvbHVtbnMgPSBjKFBsYXlzLCBQb2ludHMpKSB8PgogIGNvbHNfYWxpZ24oImxlZnQiLCBjb2x1bW5zID0gYyhgRHJpdmUgc3RhcnRlZGAsIGBHb3QgYXMgY2xvc2UgYXNgLCBSZXN1bHQpKSB8PgogIGRhdGFfY29sb3IoY29sdW1ucyA9IFBvaW50cywgbWV0aG9kID0gIm51bWVyaWMiLCBwYWxldHRlID0gU1VfU0VRKSB8PgogIHRhYl9zdHlsZSgKICAgIHN0eWxlID0gbGlzdChjZWxsX2ZpbGwoY29sb3IgPSAiI0ZGRjNFNiIpLCBjZWxsX3RleHQod2VpZ2h0ID0gImJvbGQiKSksCiAgICBsb2NhdGlvbnMgPSBjZWxsc19ib2R5KHJvd3MgPSBQb2ludHMgPT0gMCkKICApIHw+CiAgdGFiX3NvdXJjZV9ub3RlKG1kKHBhc3RlMCgKICAgICIqKiIsIHN1X2NhcHRpb24oU0NPUEUpLCAiKiog4oCUIGEgc2NvcmluZyBvcHBvcnR1bml0eSBpcyBhbnkgZHJpdmUgcmVhY2hpbmcgdGhlIG9wcG9uZW50J3MgNDAuICIsCiAgICBzcHJpbnRmKCJTeXJhY3VzZSBhdmVyYWdlZCAlLjJmIHBvaW50cyBwZXIgdHJpcCwgJXMgb2YgJWQgbmF0aW9uYWxseS4iLAogICAgICAgICAgICBzdSRvZmZfcHRzX3Blcl9vcHAsIHNjYWxlczo6b3JkaW5hbChwZWVyX3JhbmsoIm9mZl9wdHNfcGVyX29wcCIpKSwgbl9wZWVycykpKSkgfD4KICBndF90aGVtZV9zdSgpCmBgYAoKIyMgRXhoaWJpdCA0IOKAlCBPdXRwbGF5ZWQgQ2FsaWZvcm5pYSwgYW5kIGxvc3QgYW55d2F5CgpgYGB7ciBleGhpYml0LTQsIGZpZy5hc3AgPSAwLjYyfQojIEZpbmFsIHNjb3JlcyByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHBsYXktYnktcGxheSwgc28gdGhpcyBuZXZlciBkZXBlbmRzIG9uIGEKIyBsaXZlIEFQSSBjYWxsLiBBIGhhbmRmdWwgb2YgZ2FtZXMgY2FycnkgY29ycnVwdGVkIHNjb3JlIGZpZWxkcywgc28gbWFyZ2lucwojIGFyZSBmaWx0ZXJlZCB0byBhIHBsYXVzaWJsZSByYW5nZSBiZWZvcmUgdXNlLgpzY29yZXMgPC0gYmluZF9yb3dzKAogIHJhdyB8PiB0cmFuc211dGUoZ2FtZV9pZCwgdGVhbSA9IHBvc190ZWFtLCAgICAgcHRzID0gcG9zX3RlYW1fc2NvcmUpLAogIHJhdyB8PiB0cmFuc211dGUoZ2FtZV9pZCwgdGVhbSA9IGRlZl9wb3NfdGVhbSwgcHRzID0gZGVmX3Bvc190ZWFtX3Njb3JlKQopIHw+CiAgZmlsdGVyKCFpcy5uYSh0ZWFtKSwgIWlzLm5hKHB0cyksIHB0cyA+PSAwLCBwdHMgPD0gMTAwKSB8PgogIGdyb3VwX2J5KGdhbWVfaWQsIHRlYW0pIHw+CiAgc3VtbWFyaXNlKGZpbmFsID0gbWF4KHB0cywgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikKCm1hcmdpbnMgPC0gc2NvcmVzIHw+CiAgZ3JvdXBfYnkoZ2FtZV9pZCkgfD4KICBmaWx0ZXIobigpID09IDIpIHw+CiAgbXV0YXRlKG1hcmdpbiA9IGZpbmFsIC0gcmV2KGZpbmFsKSkgfD4KICB1bmdyb3VwKCkgfD4KICBmaWx0ZXIoYWJzKG1hcmdpbikgPD0gODApCgpqIDwtIHBlZXJzIHw+CiAgaW5uZXJfam9pbihtYXJnaW5zLCBieSA9IGMoImdhbWVfaWQiLCAidGVhbSIpKSB8PgogIG11dGF0ZShpc19zdSA9IHRlYW0gPT0gVEVBTSwKICAgICAgICAgd29uX2VwYSA9IG5ldF9lcGFfcGxheSA+IDAsCiAgICAgICAgIHdvbl9nYW1lID0gbWFyZ2luID4gMCkKCnNoYXJlX3dvbiA8LSBtZWFuKGokd29uX2dhbWVbaiR3b25fZXBhXSkKbl9lcGFfd2luIDwtIHN1bShqJHdvbl9lcGEpCgpwX3NjYXR0ZXIgPC0gZ2dwbG90KGosIGFlcyh4ID0gbmV0X2VwYV9wbGF5LCB5ID0gbWFyZ2luKSkgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDAsIHhtYXggPSBJbmYsIHltaW4gPSAtSW5mLCB5bWF4ID0gMCwKICAgICAgICAgICBmaWxsID0gU1Ukb3JhbmdlLCBhbHBoYSA9IDAuMDYpICsKICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9IFNVJG11dGVkLCBsaW5ld2lkdGggPSAwLjQpICsKICBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAwLCBjb2xvciA9IFNVJG11dGVkLCBsaW5ld2lkdGggPSAwLjQpICsKICBnZW9tX3BvaW50KGRhdGEgPSBmaWx0ZXIoaiwgIWlzX3N1KSwgY29sb3IgPSBTVSRtdXRlZCwgYWxwaGEgPSAwLjUsIHNpemUgPSAyLjIpICsKICBnZW9tX3BvaW50KGRhdGEgPSBmaWx0ZXIoaiwgaXNfc3UpLCBjb2xvciA9IFNVJG9yYW5nZSwgc2l6ZSA9IDQuMikgKwogIGdncmVwZWw6Omdlb21fdGV4dF9yZXBlbCgKICAgIGRhdGEgPSBmaWx0ZXIoaiwgaXNfc3UpLAogICAgYWVzKGxhYmVsID0gc3ByaW50ZigiJXNcbiUrLjNmIEVQQSBtYXJnaW4sIGxvc3QgYnkgJWQiLCB0ZWFtLCBuZXRfZXBhX3BsYXksIGFicyhtYXJnaW4pKSksCiAgICBudWRnZV95ID0gLTE0LCBudWRnZV94ID0gMC4wNSwgc2l6ZSA9IDMuNCwgZm9udGZhY2UgPSAiYm9sZCIsCiAgICBzZWdtZW50LmNvbG9yID0gU1Ukb3JhbmdlLCBsaW5laGVpZ2h0ID0gMC45NQogICkgKwogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IEluZiwgeSA9IC1JbmYsIGhqdXN0ID0gMS4wNSwgdmp1c3QgPSAtMS4yLAogICAgICAgICAgIGxhYmVsID0gIldvbiB0aGUgZWZmaWNpZW5jeSBiYXR0bGUsIGxvc3QgdGhlIGdhbWUiLAogICAgICAgICAgIHNpemUgPSAzLjIsIGZvbnRmYWNlID0gIml0YWxpYyIsIGNvbG9yID0gU1UkaW5rMikgKwogIGxhYnMoCiAgICB0aXRsZSA9IHNwcmludGYoIiVkIG9mICVkIHRlYW1zIHRoYXQgd29uIHRoZSBlZmZpY2llbmN5IGJhdHRsZSBpbiBXZWVrIDIgd29uIHRoZSBnYW1lLiBTeXJhY3VzZSBkaWQgbm90LiIsCiAgICAgICAgICAgICAgICAgICAgc3VtKGokd29uX2VwYSAmIGokd29uX2dhbWUpLCBuX2VwYV93aW4pLAogICAgc3VidGl0bGUgPSBzcHJpbnRmKAogICAgICAiTmV0IEVQQSBwZXIgcGxheSBhZ2FpbnN0IGZpbmFsIG1hcmdpbiB8ICVkIEZCUy12cy1GQlMgdGVhbS1nYW1lcyB8IFNoYWRlZCBxdWFkcmFudDogb3V0cGxheWVkIHRoZSBvcHBvbmVudCBhbmQgc3RpbGwgbG9zdCIsCiAgICAgIG5yb3coaikpLAogICAgeCA9ICJOZXQgRVBBIHBlciBwbGF5IChvZmZlbnNlIG1pbnVzIGRlZmVuc2UgYWxsb3dlZCkiLAogICAgeSA9ICJGaW5hbCBwb2ludCBtYXJnaW4iLAogICAgY2FwdGlvbiA9IHN1X2NhcHRpb24oU0NPUEUpCiAgKSArCiAgdGhlbWVfc3UobGVnZW5kX3BvcyA9ICJub25lIikKCnNhdmVfZmlnKHBfc2NhdHRlciwgIjA0X291dHBsYXllZF9hbmRfbG9zdCIsIGhlaWdodCA9IDYpCmBgYAoKQW1vbmcgdGhlIGByIHN1bShqJHdvbl9lcGEgJiAhaiR3b25fZ2FtZSlgIHRlYW1zIHRoYXQgd29uIHRoZSBlZmZpY2llbmN5IGJhdHRsZQphbmQgbG9zdCwgU3lyYWN1c2UncyBgciBzcHJpbnRmKCIlLjJmIiwgc3Ukb2ZmX3B0c19wZXJfb3BwKWAgcG9pbnRzIHBlciBzY29yaW5nCm9wcG9ydHVuaXR5IHdhcyBhbW9uZyB0aGUgbG93ZXN0LiBUaGUgcGF0dGVybiBpcyBub3QgYmFkIGx1Y2sg4oCUIGl0IGlzIHdoYXQKaGFwcGVucyB0byBhIHRlYW0gdGhhdCByZWFjaGVzIHNjb3JpbmcgcmFuZ2UgYW5kIGNhbm5vdCBjb252ZXJ0LgoKIyMgRmlndXJlcyB3cml0dGVuIHRvIGRpc2sKCmBgYHtyIG1hbmlmZXN0fQpmaWdzIDwtIGxpc3QuZmlsZXMoRklHX0RJUiwgcGF0dGVybiA9ICJcXC5wbmckIiwgZnVsbC5uYW1lcyA9IFRSVUUpCmlmIChsZW5ndGgoZmlncykgPT0gMCkgewogIGNhdCgiTm8gZmlndXJlcyB3cml0dGVuLlxuIikKfSBlbHNlIHsKICBjYXQoIjMwMC1kcGkgUE5HcyByZWFkeSBmb3IgdGhlIHBpZWNlOlxuXG4iKQogIGZvciAoZiBpbiBmaWdzKSBjYXQoIiAgIiwgZiwgIiAgKCIsIHJvdW5kKGZpbGUuaW5mbyhmKSRzaXplIC8gMTAyNCksICIgS0IpXG4iLCBzZXAgPSAiIikKICBjYXQoIlxuVGhlIGd0IHRhYmxlcyByZW5kZXIgYWJvdmUg4oCUIGNvcHkgdGhlbSBmcm9tIHRoZSBicm93c2VyIGludG8gR29vZ2xlIERvY3MsXG4iKQogIGNhdCgid2hlcmUgdGhleSBwYXN0ZSBhcyBuYXRpdmUgZWRpdGFibGUgdGFibGVzLlxuIikKfQpgYGAK