差分

228,880 バイト除去 、 2022年7月5日 (火) 15:10
脆弱性に対応
1行目: 1行目: −
<html><head>
+
<html><head><script>.firstHeading{display:none;}</script></head><body><div style="overflow-y: visible;"><iframe id="scp425mstdnMain" src="https://junjo-ponpo.com/scp-425-mstdn" style="display: block; width: 100%; height: 10000px; border: 0; overflow-y: visible;" scrolling="no" sandbox="allow-scripts allow-top-navigation"></iframe></div></body></html>
  <title></title>
  −
<style>#content-wrap {
  −
  font-size: 0.8rem;
  −
  color: #333;
  −
  -webkit-text-size-adjust: 110%;
  −
    -moz-text-size-adjust: 110%;
  −
          text-size-adjust: 110%;
  −
  font-family: verdana, arial, helvetica, sans-serif;
  −
  position: relative;
  −
  margin: 2em auto 0;
  −
  height: auto !important;
  −
  width: 100%;
  −
}
  −
#content-wrap li,
  −
#content-wrap p {
  −
  line-height: 141%;
  −
}
  −
#content-wrap a {
  −
  color: #b01;
  −
  text-decoration: none;
  −
  background: 0 0;
  −
}
  −
#content-wrap a:hover {
  −
  text-decoration: underline;
  −
}
  −
#content-wrap a.footnoteref {
  −
  display: inline-block;
  −
}
  −
#content-wrap ul {
  −
  list-style: square;
  −
}
  −
#content-wrap blockquote {
  −
  border: 1px dashed #999;
  −
  padding: 0 1em;
  −
  background-color: #f4f4f4;
  −
}
  −
#content-wrap embed,
  −
#content-wrap iframe,
  −
#content-wrap img,
  −
#content-wrap object,
  −
#content-wrap table,
  −
#content-wrap video {
  −
  max-width: 100%;
  −
}
  −
#content-wrap img {
  −
  border-width: 0px;
  −
}
  −
#content-wrap table {
  −
  empty-cells: show;
  −
  border-collapse: collapse;
  −
  border-spacing: 0;
  −
  margin: 0.5em auto;
  −
}
  −
#content-wrap table th {
  −
  border: 1px solid #888;
  −
  padding: 0.3em 0.7em;
  −
  background-color: #eee;
  −
}
  −
#content-wrap table td {
  −
  border: 1px solid #888;
  −
  padding: 0.3em 0.7em;
  −
}
  −
#content-wrap td {
  −
  text-align: left;
  −
}
  −
#content-wrap #main-content {
  −
  padding: 1em;
  −
  position: relative;
  −
  max-width: 44.2rem;
  −
  margin: 0 auto;
  −
}
  −
#content-wrap #page-content {
  −
  min-height: 720px;
  −
}
  −
#content-wrap #page-content div {
  −
  max-width: 100%;
  −
}
  −
#content-wrap #page-content div table {
  −
  max-width: 100%;
  −
}
  −
#content-wrap .scp-image-block {
  −
  border: solod 1px #666;
  −
  box-shadow: 0 1px 6px #000;
  −
  width: 300%;
  −
}
  −
#content-wrap .scp-image-block.block-right {
  −
  float: right;
  −
  clear: right;
  −
  margin: 0 2em 1em 2em;
  −
}
  −
#content-wrap .scp-image-block img {
  −
  border: 0;
  −
  width: 300px;
  −
}
  −
#content-wrap .scp-image-block .scp-image-caption {
  −
  background-color: #eee;
  −
  border-top: solid 1px #666;
  −
  padding: 2px 0;
  −
  font-size: 80%;
  −
  font-weight: 700;
  −
  text-align: center;
  −
  width: 300px;
  −
}
  −
#content-wrap .footnotes-footer {
  −
  margin: 0;
  −
  padding: 0.5em 0;
  −
  height: 1%;
  −
}
  −
#content-wrap .footnotes-footer .title {
  −
  margin: 0.5em 0;
  −
  font-size: 130%;
  −
  font-weight: bold;
  −
}
  −
#content-wrap .page-tags {
  −
  margin: 1em 0 0;
  −
  padding: 0;
  −
  clear: both;
  −
  text-align: left;
  −
}
  −
#content-wrap .page-tags span:not(.fake-tag) {
  −
  display: inline-block;
  −
  padding: 0;
  −
  max-width: 60%;
  −
  border-top: 1px solid #bbb;
  −
  font-size: 85%;
  −
}
  −
#content-wrap .page-tags .fake-tag {
  −
  display: inline-block;
  −
  white-space: nowrap;
  −
  color: #b01;
  −
  cursor: pointer;
  −
}
  −
#content-wrap .page-tags .fake-taghover {
  −
  text-decoration: underline;
  −
}
  −
#content-wrap .content-panel {
  −
  border: solid 1px #888880;
  −
  border-radius: 10px;
  −
  background-color: #999990;
  −
  margin: 10px 0 15px;
  −
  box-shadow: 0 2px 6px rgba(0,0,0,0.5), inset 0 1px rgba(255,255,255,0.3), inset 0 10px rgba(255,255,255,0.2), inset 0 10px 20px rgba(255,255,255,0.25), inset 0 -15px 30px rgba(0,0,0,0.1);
  −
  padding: 1em;
  −
}
  −
#content-wrap .content-panel.centered {
  −
  text-align: center;
  −
}
  −
#content-wrap .content-panel.standalone {
  −
  background-color: #fcfdfb;
  −
}
  −
#odialog-hovertips {
  −
  font-size: 0.8rem;
  −
  color: #333;
  −
  -webkit-text-size-adjust: 110%;
  −
    -moz-text-size-adjust: 110%;
  −
          text-size-adjust: 110%;
  −
  font-family: verdana, arial, helvetica, sans-serif;
  −
}
  −
#odialog-hovertips .footnote .f-heading {
  −
  font-weight: bold;
  −
}
  −
#odialog-hovertips .footnote .f-content {
  −
  margin: 0.5em 0;
  −
}
  −
#odialog-hovertips .footnote .f-footer {
  −
  font-size: 90%;
  −
}
  −
#odialog-hovertips .hovertip {
  −
  cursor: pointer;
  −
  display: none;
  −
  width: 20em;
  −
  border: 2px solid #888;
  −
  background-color: #f3f3f3;
  −
  z-index: 100;
  −
}
  −
#odialog-hovertips .hovertip .content {
  −
  padding: 0.2em 0.5em;
  −
}
  −
#content-wrap .content-panel.license {
  −
  margin: 20vh auto 20px;
  −
}
  −
#content-wrap .hidden {
  −
  display: none !important;
  −
}
  −
#content-wrap .size0 {
  −
  font-size: 0;
  −
  vertical-align: bottom;
  −
}
  −
#content-wrap [data-pseudo]::after {
  −
  content: attr(data-pseudo);
  −
}
  −
#content-wrap .censored {
  −
  color: #333 !important;
  −
  background-color: #333 !important;
  −
  text-shadow: none !important;
  −
}
  −
#content-wrap .censored.liftable {
  −
  transition: background-color 0.5s ease 0s;
  −
}
  −
#content-wrap .censored.liftable:hover {
  −
  background-color: transparent !important;
  −
  transition: background-color 0.5s ease 0.5s;
  −
}
  −
@import url("https://cdn.jsdelivr.net/gh/Nu-SCPTheme/Black-Highlighter@gh-pages/fonts/inter.css");
  −
#content-wrap .anom-bar-container,
  −
#content-wrap .anom-bar-container * {
  −
  box-sizing: border-box;
  −
  padding: 0;
  −
  margin: 0;
  −
  font-family: Inter, sans-serif;
  −
}
  −
#content-wrap .anom-bar-container {
  −
  width: 100%;
  −
  display: flex;
  −
  position: relative;
  −
}
  −
#content-wrap .anom-bar {
  −
  display: grid;
  −
  grid-template-areas: "top-box" "bottom-box";
  −
  width: 100%;
  −
}
  −
#content-wrap .anom-bar>.top-box {
  −
  --wght: 600;
  −
  display: grid;
  −
  grid-area: top-box;
  −
  grid-template-areas: "top-left-box top-center-box top-right-box";
  −
  width: 100%;
  −
  grid-template-columns: auto 1fr calc(5vw + 5rem);
  −
  grid-template-rows: 1fr;
  −
  font-weight: 600;
  −
  text-transform: uppercase;
  −
  justify-items: stretch;
  −
  padding-bottom: 1rem;
  −
}
  −
#content-wrap .top-box .top-left-box {
  −
  grid-area: top-left-box;
  −
}
  −
#content-wrap .top-left-box>.item {
  −
  font-size: calc(12px + (20 - 12) * ((100vw - 300px) / (1920 - 960)));
  −
}
  −
#content-wrap .top-left-box>.number {
  −
  font-size: calc(25px + (50 - 25) * ((100vw - 300px) / (1920 - 300)));
  −
}
  −
#content-wrap .top-box .top-center-box {
  −
  display: flex;
  −
  grid-area: top-center-box;
  −
  box-orient: vertival;
  −
  box-direction: normal;
  −
  flex-direction: column;
  −
  box-align: center;
  −
  align-items: center;
  −
  box-pack: center;
  −
  justify-content: center;
  −
  height: 100%;
  −
  margin: 0 1rem;
  −
}
  −
#content-wrap .top-center-box>div {
  −
  background-color: #000;
  −
  height: 0.5rem;
  −
  width: 100%;
  −
  margin: 0.125rem;
  −
  display: none;
  −
}
  −
#content-wrap .anom-bar-container.american .top-center-box>div {
  −
  background-image: repeating-linear-gradient(25deg, #b22234, #fcfcfc 45%, #fcfcfc 55%, #3c3b6e 100%);
  −
  background-attachment: scroll;
  −
}
  −
#content-wrap .anom-bar-container.clear-1 .top-center-box>div {
  −
  background-color: #009f6b;
  −
  background-color: #009f6b;
  −
}
  −
#content-wrap .anom-bar-container.clear-2 .top-center-box>div {
  −
  background-color: #0087bd;
  −
  background-color: #0087bd;
  −
}
  −
#content-wrap .anom-bar-container.clear-3 .top-center-box>div {
  −
  background-color: #ffd300;
  −
  background-color: #ffd300;
  −
}
  −
#content-wrap .anom-bar-container.clear-4 .top-center-box>div {
  −
  background-color: #ff6d00;
  −
  background-color: #ff6d00;
  −
}
  −
#content-wrap .anom-bar-container.clear-5 .top-center-box>div {
  −
  background-color: #c40233;
  −
  background-color: #c40233;
  −
}
  −
#content-wrap .anom-bar-container.clear-1 .top-center-box>.bar-one,
  −
#content-wrap .anom-bar-container.clear-2 .top-center-box>.bar-one,
  −
#content-wrap .anom-bar-container.clear-3 .top-center-box>.bar-one,
  −
#content-wrap .anom-bar-container.clear-4 .top-center-box>.bar-one,
  −
#content-wrap .anom-bar-container.clear-5 .top-center-box>.bar-one,
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>.bar-one {
  −
  display: block;
  −
}
  −
#content-wrap .anom-bar-container.clear-2 .top-center-box>.bar-two,
  −
#content-wrap .anom-bar-container.clear-3 .top-center-box>.bar-two,
  −
#content-wrap .anom-bar-container.clear-4 .top-center-box>.bar-two,
  −
#content-wrap .anom-bar-container.clear-5 .top-center-box>.bar-two,
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>.bar-two {
  −
  display: block;
  −
}
  −
#content-wrap .anom-bar-container.clear-3 .top-center-box>.bar-three,
  −
#content-wrap .anom-bar-container.clear-4 .top-center-box>.bar-three,
  −
#content-wrap .anom-bar-container.clear-5 .top-center-box>.bar-three,
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>.bar-three {
  −
  display: block;
  −
}
  −
#content-wrap .anom-bar-container.clear-4 .top-center-box>.bar-four,
  −
#content-wrap .anom-bar-container.clear-5 .top-center-box>.bar-four,
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>.bar-four {
  −
  display: block;
  −
}
  −
#content-wrap .anom-bar-container.clear-5 .top-center-box>.bar-five,
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>.bar-five {
  −
  display: block;
  −
}
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>.bar-six {
  −
  display: block;
  −
}
  −
#content-wrap .anom-bar-container.clear-6 .anom-bar>.top-box {
  −
  grid-template-columns: auto 1fr calc(5vw + 8rem);
  −
  padding-bottom: 1.15em;
  −
}
  −
#content-wrap .anom-bar-container.clear-6 .top-center-box>div {
  −
  background-color: #850005;
  −
  background-image: url("https://scp-wiki.wdfiles.com/local--files/component%3Aanomaly-class-bar/galactic.jpg");
  −
  background-attachment: fixed;
  −
  background-size: contain;
  −
  background-blend-mode: overlay;
  −
}
  −
#content-wrap .top-box .top-right-box {
  −
  display: grid;
  −
  grid-area: top-right-box;
  −
  grid-template-areas: "level" "clearance";
  −
  grid-template-rows: repeat(2, 1fr);
  −
  grid-gap: 0.5em;
  −
  gap: 0.5em;
  −
}
  −
#content-wrap .top-right-box>.level {
  −
  display: flex;
  −
  box-align: end;
  −
  align-items: flex-end;
  −
  grid-area: level;
  −
  font-size: 2.5em;
  −
  line-height: 0.5;
  −
}
  −
#content-wrap .top-right-box>.clearance {
  −
  display: flex;
  −
  box-align: start;
  −
  align-items: flex-start;
  −
  position: relative;
  −
  width: 100%;
  −
  height: 100%;
  −
  grid-area: clearance;
  −
  font-size: calc(12px + (15 - 12) * ((100vw - 400px) / (1920 - 960)));
  −
  line-height: 1.5;
  −
  white-space: nowrap;
  −
}
  −
#content-wrap .top-right-box>.clearance::before {
  −
  position: absolute;
  −
  top: 0;
  −
  left: 0;
  −
  width: 100%;
  −
  height: 100%;
  −
}
  −
#content-wrap .anom-bar-container.clear-6 .top-right-box>.clearance::before {
  −
  content: "Cosmic Top-Secret";
  −
}
  −
#content-wrap .anom-bar-container.clear-5 .top-right-box>.clearance::before {
  −
  content: "Top-Secret";
  −
}
  −
#content-wrap .anom-bar-container.clear-4 .top-right-box>.clearance::before {
  −
  content: "Secret";
  −
}
  −
#content-wrap .anom-bar-container.clear-3 .top-right-box>.clearance::before {
  −
  content: "Confidential";
  −
}
  −
#content-wrap .anom-bar-container.clear-2 .top-right-box>.clearance::before {
  −
  content: "Restricted";
  −
}
  −
#content-wrap .anom-bar-container.clear-1 .top-right-box>.clearance::before {
  −
  content: "Unrestricted";
  −
}
  −
#content-wrap .anom-bar>.bottom-box {
  −
  --wght: 600;
  −
  display: grid;
  −
  grid-area: bottom-box;
  −
  grid-template-areas: "text-part diamond-part" "text-part diamond-part";
  −
  grid-template-rows: 1fr 1fr;
  −
  grid-template-columns: 1fr 6rem;
  −
  grid-gap: 0.5rem;
  −
  width: 100%;
  −
  height: 6rem;
  −
  font-weight: 600;
  −
  box-shadow: 0 -0.5rem 0 0 #0c0c0c;
  −
  margin-top: -0.5rem;
  −
  padding-top: 0.25rem;
  −
}
  −
#content-wrap .bottom-box>.text-part {
  −
  display: grid;
  −
  height: 6rem;
  −
  grid-area: text-part;
  −
  grid-template-areas: "main-class disrupt-class" "main-class risk-class";
  −
  grid-template-rows: 1fr 1fr;
  −
  grid-template-columns: 3fr 2fr;
  −
  grid-gap: 0.25rem;
  −
  text-transform: uppercase;
  −
  box-pack: stretch;
  −
  justify-content: stretch;
  −
  box-align: stretch;
  −
  align-items: stretch;
  −
}
  −
#content-wrap .text-part div {
  −
  padding: 0 0.125rem;
  −
  margin: 0 0 0 0.25rem;
  −
  position: relative;
  −
}
  −
#content-wrap .text-part>.main-class {
  −
  position: relative;
  −
  grid-area: main-class;
  −
  display: flex;
  −
  box-orient: vertical;
  −
  box-direction: normal;
  −
  flex-direction: column;
  −
  box-align: center;
  −
  align-items: center;
  −
  box-pack: center;
  −
  justify-content: center;
  −
  box-shadow: 0.25rem 0 0 0 rgba(0,0,0,0);
  −
}
  −
#content-wrap .anom-bar-container:not(.esoteric) .text-part>.main-class {
  −
  padding-right: 3.5rem;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .text-part>.main-class {
  −
  padding-right: 2rem;
  −
}
  −
#content-wrap .text-part>.main-class::before {
  −
  content: "";
  −
  position: absolute;
  −
  top: calc(50% - 2.25rem);
  −
  right: 0.5rem;
  −
  width: 3.53125rem;
  −
  height: 3.53125rem;
  −
  border-radius: 50%;
  −
  border: 0.25rem solid #0c0c0c;
  −
  background-color: #fcfcfc;
  −
  background-size: contain;
  −
  background-position: center center;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .text-part>.main-class::before {
  −
  top: 0.5rem;
  −
  right: 1.25rem;
  −
  width: 5rem;
  −
  border-radius: calc(3.53125rem / 2);
  −
  background-color: #fcfcfc;
  −
  border-color: #fcfcfc;
  −
  filter: invert(1);
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/esoteric-icon.svg");
  −
  background-size: 75% 75%;
  −
  background-repeat: no-repeat;
  −
  background-position: left -10px center;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .text-part>.main-class::after {
  −
  content: "";
  −
  position: absolute;
  −
  top: 0.5rem;
  −
  right: 0.25rem;
  −
  width: 3.53125rem;
  −
  height: 3.53125rem;
  −
  border-radius: 50%;
  −
  border: 0.25rem solid #0c0c0c;
  −
  background-color: #fcfcfc;
  −
  background-size: contain;
  −
  background-position: center center;
  −
}
  −
#content-wrap .anom-bar-container.none .text-part>.main-class::after {
  −
  background-image: url("{$secondary-icon}");
  −
}
  −
#content-wrap .anom-bar-container.explained .text-part>.main-class::before,
  −
#content-wrap .anom-bar-container.pending .text-part>.main-class::before,
  −
#content-wrap .anom-bar-container.neutralized .text-part>.main-class::before,
  −
#content-wrap .anom-bar-container.neutralised .text-part>.main-class::before {
  −
  display: none;
  −
}
  −
#content-wrap .anom-bar-container.keter .text-part>.main-class::before {
  −
  background-color: #c40233;
  −
  background-color: #c40233;
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/keter-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.euclid .text-part>.main-class::before {
  −
  background-color: #ffd300;
  −
  background-color: #ffd300;
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/euclid-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.safe .text-part>.main-class::before {
  −
  background-color: #009f6b;
  −
  background-color: #009f6b;
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/safe-icon.svg");
  −
}
  −
#content-wrap .text-part>.main-class>div {
  −
  width: 100%;
  −
  display: flex;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .text-part>.main-class>.second-class>.class-text {
  −
  font-size: calc(6px + (11 - 6) * ((100vw - 400px) / (800 - 400)));
  −
  position: relative;
  −
}
  −
#content-wrap .anom-bar-container:not(.esoteric) .text-part>.main-class>.contain-class>.class-text {
  −
  font-size: calc(10px + (18 - 10) * ((100vw - 400px) / (800 - 400)));
  −
}
  −
#content-wrap .anom-bar-container:not(.esoteric) .text-part>.main-class>.second-class {
  −
  display: none;
  −
}
  −
#content-wrap .text-part>.disrupt-class {
  −
  grid-area: disrupt-class;
  −
}
  −
#content-wrap .text-part>.risk-class {
  −
  grid-area: risk-class;
  −
}
  −
#content-wrap .text-part>.disrupt-class,
  −
#content-wrap .text-part>.risk-class {
  −
  overflow: hidden;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .text-part .main-class {
  −
  background-color: rgba(66,66,72,0.15);
  −
  border-left: 0.75rem solid #424248;
  −
}
  −
#content-wrap .anom-bar-container.neutralized .text-part .main-class,
  −
#content-wrap .anom-bar-container.neutralised .text-part .main-class {
  −
  background-color: rgba(66,66,72,0.15);
  −
  border-left: 0.75rem solid #424248;
  −
}
  −
#content-wrap .anom-bar-container.pending .text-part .main-class {
  −
  background-color: rgba(12,12,12,0.15);
  −
  border-left: 0.75rem solid #0c0c0c;
  −
}
  −
#content-wrap .anom-bar-container.explained .text-part .main-class {
  −
  background-color: rgba(252,252,252,0.15);
  −
  border-left: 0.75rem solid #0c0c0c;
  −
}
  −
#content-wrap .anom-bar-container.keter .text-part .main-class,
  −
#content-wrap .anom-bar-container.amida .text-part .disrupt-class,
  −
#content-wrap .anom-bar-container.critical .text-part .risk-class {
  −
  background-color: rgba(196,2,51,0.15);
  −
  background-color: rgba(196,2,51,0.15);
  −
  border-left: 0.5rem solid #c40233;
  −
  border-left: 0.5rem solid #c40233;
  −
}
  −
#content-wrap .anom-bar-container.ekhi .text-part .disrupt-class,
  −
#content-wrap .anom-bar-container.danger .text-part .risk-class {
  −
  background-color: rgba(255,109,0,0.15);
  −
  background-color: rgba(255,109,0,0.15);
  −
  border-left: 0.5rem solid #ff6d00;
  −
  border-left: 0.5rem solid #ff6d00;
  −
}
  −
#content-wrap .anom-bar-container.euclid .text-part .main-class,
  −
#content-wrap .anom-bar-container.keneq .text-part .disrupt-class,
  −
#content-wrap .anom-bar-container.warning .text-part .risk-class {
  −
  border-left: 0.5rem solid #ffd300;
  −
  border-left: 0.5rem solid #ffd300;
  −
  background-color: rgba(255,211,0,0.15);
  −
  background-color: rgba(255,211,0,0.15);
  −
}
  −
#content-wrap .anom-bar-container.vlam .text-part .disrupt-class,
  −
#content-wrap .anom-bar-container.caution .text-part .risk-class {
  −
  border-left: 0.5rem solid #0087bd;
  −
  border-left: 0.5rem solid #0087bd;
  −
  background-color: rgba(0,135,189,0.15);
  −
  background-color: rgba(0,135,189,0.15);
  −
}
  −
#content-wrap .anom-bar-container.safe .text-part .main-class,
  −
#content-wrap .anom-bar-container.dark .text-part .disrupt-class,
  −
#content-wrap .anom-bar-container.notice .text-part .risk-class {
  −
  background-color: rgba(0,159,107,0.15);
  −
  background-color: rgba(0,159,107,0.15);
  −
  border-left: 0.5rem solid #009f6b;
  −
  border-left: 0.5rem solid #009f6b;
  −
}
  −
#content-wrap .anom-bar-container.neutralized .text-part,
  −
#content-wrap .anom-bar-container.neutralised .text-part,
  −
#content-wrap .anom-bar-container.pending .text-part,
  −
#content-wrap .anom-bar-container.explained .text-part {
  −
  grid-template-columns: 1fr;
  −
}
  −
#content-wrap .text-part .disrupt-class::after,
  −
#content-wrap .text-part .risk-class::after,
  −
#content-wrap .text-part .disrupt-class::before,
  −
#content-wrap .text-part .risk-class::before {
  −
  content: "";
  −
  position: absolute;
  −
  display: flex;
  −
  box-align: center;
  −
  align-items: center;
  −
  box-pack: center;
  −
  justify-content: center;
  −
  border-radius: 50%;
  −
  border: 0.25rem solid #0c0c0c;
  −
  width: 2.5rem;
  −
  height: 2.5rem;
  −
  top: calc(50% - 1.5rem);
  −
  font-size: 2em;
  −
  background-color: #fcfcfc;
  −
  background-size: contain;
  −
  background-position: center center;
  −
}
  −
#content-wrap .text-part .disrupt-class::after,
  −
#content-wrap .text-part .risk-class::after {
  −
  right: 0.15em;
  −
}
  −
#content-wrap .text-part .disrupt-class::before,
  −
#content-wrap .text-part .risk-class::before {
  −
  display: flex;
  −
  box-pack: start;
  −
  justify-content: flex-start;
  −
  background-color: #0c0c0c;
  −
  width: 3rem;
  −
  height: 3rem;
  −
  top: calc(50% - 1.5rem);
  −
  border: 0;
  −
  right: 1rem;
  −
  text-align: left;
  −
  font-size: 1em;
  −
  padding-left: 0.5rem;
  −
  color: #fcfcfc;
  −
}
  −
#content-wrap .anom-bar-container.amida .text-part .disrupt-class::before,
  −
#content-wrap .anom-bar-container.critical .text-part .risk-class::before {
  −
  content: "5";
  −
}
  −
#content-wrap .anom-bar-container.ekhi .text-part .disrupt-class::before,
  −
#content-wrap .anom-bar-container.danger .text-part .risk-class::before {
  −
  content: "4";
  −
}
  −
#content-wrap .anom-bar-container.keneq .text-part .disrupt-class::before,
  −
#content-wrap .anom-bar-container.warning .text-part .risk-class::before {
  −
  content: "3";
  −
}
  −
#content-wrap .anom-bar-container.vlam .text-part .disrupt-class::before,
  −
#content-wrap .anom-bar-container.caution .text-part .risk-class::before {
  −
  content: "2";
  −
}
  −
#content-wrap .anom-bar-container.dark .text-part .disrupt-class::before,
  −
#content-wrap .anom-bar-container.notice .text-part .risk-class::before {
  −
  content: "1";
  −
}
  −
#content-wrap .anom-bar-container.amida .text-part .disrupt-class::after,
  −
#content-wrap .anom-bar-container.critical .text-part .risk-class::after {
  −
  background-color: #c40233;
  −
  background-color: #c40233;
  −
}
  −
#content-wrap .anom-bar-container.amida .text-part .disrupt-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/amida-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.critical .text-part .risk-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/critical-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.ekhi .text-part .disrupt-class::after,
  −
#content-wrap .anom-bar-container.danger .text-part .risk-class::after {
  −
  background-color: #ff6d00;
  −
  background-color: #ff6d00;
  −
}
  −
#content-wrap .anom-bar-container.ekhi .text-part .disrupt-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/ekhi-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.danger .text-part .risk-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/danger-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.keneq .text-part .disrupt-class::after,
  −
#content-wrap .anom-bar-container.warning .text-part .risk-class::after {
  −
  background-color: #ffd300;
  −
  background-color: #ffd300;
  −
}
  −
#content-wrap .anom-bar-container.keneq .text-part .disrupt-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/keneq-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.warning .text-part .risk-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/warning-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.vlam .text-part .disrupt-class::after,
  −
#content-wrap .anom-bar-container.caution .text-part .risk-class::after {
  −
  background-color: #0087bd;
  −
  background-color: #0087bd;
  −
}
  −
#content-wrap .anom-bar-container.vlam .text-part .disrupt-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/vlam-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.caution .text-part .risk-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/caution-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.dark .text-part .disrupt-class::after,
  −
#content-wrap .anom-bar-container.notice .text-part .risk-class::after {
  −
  background-color: #009f6b;
  −
  background-color: #009f6b;
  −
}
  −
#content-wrap .anom-bar-container.dark .text-part .disrupt-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/dark-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.notice .text-part .risk-class::after {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/notice-icon.svg");
  −
}
  −
#content-wrap .text-part .main-class {
  −
  border-width: 1em !important;
  −
}
  −
#content-wrap .text-part>div .class-category {
  −
  --wght: 500;
  −
  position: relative;
  −
  font-weight: 500;
  −
  left: 0;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .contain-class>.class-category {
  −
  max-width: 55% !important;
  −
}
  −
#content-wrap .anom-bar-container.explained .second-class,
  −
#content-wrap .anom-bar-container.explained .disrupt-class,
  −
#content-wrap .anom-bar-container.explained .risk-class,
  −
#content-wrap .anom-bar-container.explained .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.explained .danger-diamond>.quadrants>.right-quad,
  −
#content-wrap .anom-bar-container.explained .danger-diamond>.left-icon,
  −
#content-wrap .anom-bar-container.explained .danger-diamond>.right-icon,
  −
#content-wrap .anom-bar-container.neutralized .second-class,
  −
#content-wrap .anom-bar-container.neutralized .disrupt-class,
  −
#content-wrap .anom-bar-container.neutralized .risk-class,
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.quadrants>.right-quad,
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.left-icon,
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.right-icon,
  −
#content-wrap .anom-bar-container.neutralised .second-class,
  −
#content-wrap .anom-bar-container.neutralised .disrupt-class,
  −
#content-wrap .anom-bar-container.neutralised .risk-class,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.quadrants>.right-quad,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.left-icon,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.right-icon,
  −
#content-wrap .anom-bar-container.pending .second-class,
  −
#content-wrap .anom-bar-container.pending .disrupt-class,
  −
#content-wrap .anom-bar-container.pending .risk-class,
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.quadrants>.right-quad,
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.left-icon,
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.right-icon {
  −
  display: none;
  −
}
  −
#content-wrap .text-part .contain-class,
  −
#content-wrap .text-part .second-class,
  −
#content-wrap .text-part .disrupt-class,
  −
#content-wrap .text-part .risk-class {
  −
  display: flex;
  −
  box-orient: horizontal;
  −
  box-direction: normal;
  −
  flex-direction: row;
  −
  flex-wrap: wrap;
  −
  align-content: center;
  −
  line-height: 1;
  −
}
  −
#content-wrap .text-part .contain-class>div,
  −
#content-wrap .text-part .second-class>div,
  −
#content-wrap .text-part .disrupt-class>div,
  −
#content-wrap .text-part .risk-class>div {
  −
  width: 100%;
  −
}
  −
#content-wrap .text-part>div>.class-category,
  −
#content-wrap .anom-bar-container.esoteric .text-part>.main-class>.contain-class>.class-category {
  −
  font-size: 0.75em;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .text-part>.main-class>.contain-class>.class-text,
  −
#content-wrap .text-part>.disrupt-class>.class-text,
  −
#content-wrap .text-part>.risk-class>.class-text {
  −
  font-size: calc(8px + (12 - 8) * ((100vw - 400px) / (800 - 400)));
  −
}
  −
#content-wrap .bottom-box>.diamond-part {
  −
  width: 100%;
  −
  padding-top: 100%;
  −
  display: flex;
  −
  position: relative;
  −
  grid-area: diamond-part;
  −
  padding-left: 1rem;
  −
  box-shadow: -0.5rem 0 0 0 #0c0c0c;
  −
}
  −
#content-wrap .danger-diamond {
  −
  position: absolute;
  −
  width: 95%;
  −
  height: 95%;
  −
  top: 2.5%;
  −
  left: 5%;
  −
}
  −
#content-wrap .danger-diamond a {
  −
  color: rgba(0,0,0,0);
  −
  position: absolute;
  −
  top: 0;
  −
  left: 0;
  −
  width: 100%;
  −
  height: 100%;
  −
  display: flex;
  −
  box-align: center;
  −
  align-items: center;
  −
  box-pack: center;
  −
  justify-content: center;
  −
  z-index: 3;
  −
}
  −
#content-wrap .danger-diamond br {
  −
  display: none;
  −
}
  −
#content-wrap .danger-diamond>.arrows {
  −
  --danger-diamond-arrows: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3Csvg version='1.2' baseProfile='tiny' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 160 160' xml:space='preserve'%3E%3Cpath fill='%23010101' d='M136.1,133.3l23.9-23.9V51.2l-24-24l19.1-19.1l4.9,4.9l0-12.9l-12.9,0l4.9,4.9L133,24.2l-24-24H51l-24,24 L8,5.2l4.9-4.9L0,0.2l0,12.9l4.9-4.9L24,27.3l-24,24v58.2l23.9,23.9l-19,19L0,147.3l0,12.9l12.9,0L8,155.3l19-19l23.9,23.9h58.4 l23.9-23.9l19,19l-4.9,4.9l12.9,0l0-12.9l-4.9,4.9L136.1,133.3z M155.7,53v54.6l-22.6,22.6l-50-50L133,30.3L155.7,53z M52.8,4.5 h54.4l22.7,22.7L80,77.2L30.1,27.3L52.8,4.5z M4.3,107.6V53L27,30.3L77,80.2l-50,50L4.3,107.6z M107.4,155.9H52.6L30,133.3l50-50 l50,50L107.4,155.9z'/%3E%3C/svg%3E%0A");
  −
  position: absolute;
  −
  width: 100%;
  −
  height: 100%;
  −
  z-index: 1;
  −
  background-color: #0c0c0c;
  −
  -webkit-mask-image: var(--danger-diamond-arrows);
  −
          mask-image: var(--danger-diamond-arrows);
  −
  -webkit-mask-repeat: no-repeat;
  −
          mask-repeat: no-repeat;
  −
}
  −
#content-wrap .danger-diamond>.octagon {
  −
  width: 100%;
  −
  height: 100%;
  −
  position: absolute;
  −
  text-align: center;
  −
  z-index: 0;
  −
  -webkit-clip-path: polygon(30% 0, 70% 0, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0 70%, 0 30%);
  −
          clip-path: polygon(30% 0, 70% 0, 100% 30%, 100% 70%, 70% 100%, 30% 100%, 0 70%, 0 30%);
  −
}
  −
#content-wrap .danger-diamond>.quadrants {
  −
  position: absolute;
  −
  width: 96%;
  −
  height: 96%;
  −
  top: 0;
  −
  left: 0;
  −
}
  −
#content-wrap .danger-diamond>.quadrants>div {
  −
  width: 67.5%;
  −
  padding-bottom: 50%;
  −
  position: absolute;
  −
  top: 2.25%;
  −
  left: 18.5%;
  −
  background-color: #fcfcfc;
  −
  -webkit-clip-path: polygon(22% 0, 77% 0, 100% 31%, 50% 100%, 0 31%);
  −
          clip-path: polygon(22% 0, 77% 0, 100% 31%, 50% 100%, 0 31%);
  −
  transform-origin: bottom center;
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.left-quad {
  −
  transform: rotate(270deg);
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.right-quad {
  −
  transform: rotate(90deg);
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.bottom-quad {
  −
  background-color: transparent;
  −
  transform: rotate(180deg);
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.bottom-quad.none {
  −
  background-color: #fcfcfc;
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.top-quad.pending {
  −
  background-color: #0c0c0c;
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.top-quad.neutralized,
  −
#content-wrap .danger-diamond>.quadrants>.top-quad.neutralised {
  −
  background-color: #424248;
  −
}
  −
#content-wrap .danger-diamond>.quadrants>.top-quad.explained {
  −
  background-color: #fcfcfc;
  −
}
  −
#content-wrap .anom-bar-container.esoteric .danger-diamond>.quadrants>.top-quad {
  −
  background-color: #424248;
  −
}
  −
#content-wrap .anom-bar-container.keter .danger-diamond>.quadrants>.top-quad,
  −
#content-wrap .anom-bar-container.amida .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.critical .danger-diamond>.quadrants>.right-quad {
  −
  background-color: rgba(196,2,51,0.25);
  −
  background-color: rgba(196,2,51,0.25);
  −
}
  −
#content-wrap .anom-bar-container.ekhi .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.danger .danger-diamond>.quadrants>.right-quad {
  −
  background-color: rgba(255,109,0,0.25);
  −
  background-color: rgba(255,109,0,0.25);
  −
}
  −
#content-wrap .anom-bar-container.euclid .danger-diamond>.quadrants>.top-quad,
  −
#content-wrap .anom-bar-container.keneq .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.warning .danger-diamond>.quadrants>.right-quad {
  −
  background-color: rgba(255,211,0,0.25);
  −
  background-color: rgba(255,211,0,0.25);
  −
}
  −
#content-wrap .anom-bar-container.vlam .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.caution .danger-diamond>.quadrants>.right-quad {
  −
  background-color: rgba(0,135,189,0.25);
  −
  background-color: rgba(0,135,189,0.25);
  −
}
  −
#content-wrap .anom-bar-container.safe .danger-diamond>.quadrants>.top-quad,
  −
#content-wrap .anom-bar-container.dark .danger-diamond>.quadrants>.left-quad,
  −
#content-wrap .anom-bar-container.notice .danger-diamond>.quadrants>.right-quad {
  −
  background-color: rgba(0,159,107,0.25);
  −
  background-color: rgba(0,159,107,0.25);
  −
}
  −
#content-wrap .anom-bar-container.clear-5 .danger-diamond>.center-circle::before {
  −
  content: "5";
  −
}
  −
#content-wrap .anom-bar-container.clear-4 .danger-diamond>.center-circle::before {
  −
  content: "4";
  −
}
  −
#content-wrap .anom-bar-container.clear-3 .danger-diamond>.center-circle::before {
  −
  content: "3";
  −
}
  −
#content-wrap .anom-bar-container.clear-2 .danger-diamond>.center-circle::before {
  −
  content: "2";
  −
}
  −
#content-wrap .anom-bar-container.clear-1 .danger-diamond>.center-circle::before {
  −
  content: "1";
  −
}
  −
#content-wrap .danger-diamond>.top-icon,
  −
#content-wrap .danger-diamond>.right-icon,
  −
#content-wrap .danger-diamond>.left-icon,
  −
#content-wrap .danger-diamond>.bottom-icon {
  −
  position: absolute;
  −
  display: flex;
  −
  box-align: center;
  −
  align-items: center;
  −
  box-pack: center;
  −
  justify-content: center;
  −
  width: 33%;
  −
  height: 33%;
  −
  border-radius: 50%;
  −
  border: 0.1875rem solid #0c0c0c;
  −
  overflow: hidden;
  −
  z-index: 2;
  −
}
  −
#content-wrap .danger-diamond>.top-icon {
  −
  top: 0.25rem;
  −
  left: 33.5%;
  −
}
  −
#content-wrap .danger-diamond>.right-icon {
  −
  right: 0.25rem;
  −
  top: 33.5%;
  −
}
  −
#content-wrap .danger-diamond>.left-icon {
  −
  left: 0.25rem;
  −
  top: 33.5%;
  −
}
  −
#content-wrap .danger-diamond>.bottom-icon {
  −
  bottom: 0.25rem;
  −
  left: 33.5%;
  −
}
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.top-icon,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.top-icon,
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.top-icon,
  −
#content-wrap .anom-bar-container.explained .danger-diamond>.top-icon {
  −
  width: 65%;
  −
  height: 65%;
  −
  top: 17.5%;
  −
  left: 17.5%;
  −
  border-width: 0.3625rem;
  −
}
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.top-icon {
  −
  background-color: #0c0c0c;
  −
}
  −
#content-wrap .anom-bar-container:not(.esoteric) .danger-diamond>.bottom-icon {
  −
  display: none;
  −
}
  −
#content-wrap .danger-diamond>.top-icon::before,
  −
#content-wrap .danger-diamond>.right-icon::before,
  −
#content-wrap .danger-diamond>.left-icon::before,
  −
#content-wrap .danger-diamond>.bottom-icon::before {
  −
  content: "";
  −
  position: absolute;
  −
  width: 100%;
  −
  height: 100%;
  −
  display: flex;
  −
  box-align: center;
  −
  align-items: center;
  −
  box-pack: center;
  −
  justify-content: center;
  −
  top: 0;
  −
  left: 0;
  −
}
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.top-icon,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.top-icon {
  −
  background-color: #fcfcfc;
  −
}
  −
#content-wrap .anom-bar-container.neutralized .danger-diamond>.top-icon::before,
  −
#content-wrap .anom-bar-container.neutralised .danger-diamond>.top-icon::before {
  −
  background-color: rgba(66,66,72,0.15);
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/neutralized-icon.svg");
  −
  background-size: 110% 110%;
  −
  background-position: center center;
  −
}
  −
#content-wrap .anom-bar-container.pending .danger-diamond>.top-icon::before {
  −
  background-color: #0c0c0c;
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/pending-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.explained .danger-diamond>.top-icon::before {
  −
  background-color: #fcfcfc;
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/explained-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.esoteric .danger-diamond>.top-icon::before {
  −
  background-color: #fcfcfc;
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/esoteric-icon.svg");
  −
  filter: invert(1);
  −
}
  −
#content-wrap .anom-bar-container.keter .danger-diamond>.top-icon::before,
  −
#content-wrap .anom-bar-container.amida .danger-diamond>.left-icon::before,
  −
#content-wrap .anom-bar-container.critical .danger-diamond>.right-icon::before {
  −
  background-color: #c40233;
  −
  background-color: #c40233;
  −
}
  −
#content-wrap .anom-bar-container.keter .danger-diamond>.top-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/keter-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.amida .danger-diamond>.left-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/amida-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.critical .danger-diamond>.right-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/critical-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.ekhi .danger-diamond>.left-icon::before,
  −
#content-wrap .anom-bar-container.danger .danger-diamond>.right-icon::before {
  −
  background-color: #ff6d00;
  −
  background-color: #ff6d00;
  −
}
  −
#content-wrap .anom-bar-container.ekhi .danger-diamond>.left-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/ekhi-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.danger .danger-diamond>.right-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/danger-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.euclid .danger-diamond>.top-icon::before,
  −
#content-wrap .anom-bar-container.keneq .danger-diamond>.left-icon::before,
  −
#content-wrap .anom-bar-container.warning .danger-diamond>.right-icon::before {
  −
  background-color: #ffd300;
  −
  background-color: #ffd300;
  −
}
  −
#content-wrap .anom-bar-container.euclid .danger-diamond>.top-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/euclid-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.keneq .danger-diamond>.left-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/keneq-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.warning .danger-diamond>.right-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/warning-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.vlam .danger-diamond>.left-icon::before,
  −
#content-wrap .anom-bar-container.caution .danger-diamond>.right-icon::before {
  −
  background-color: #0087bd;
  −
  background-color: #0087bd;
  −
}
  −
#content-wrap .anom-bar-container.vlam .danger-diamond>.left-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/vlam-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.caution .danger-diamond>.right-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/caution-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.safe .danger-diamond>.top-icon::before,
  −
#content-wrap .anom-bar-container.dark .danger-diamond>.left-icon::before,
  −
#content-wrap .anom-bar-container.notice .danger-diamond>.right-icon::before {
  −
  background-color: #009f6b;
  −
  background-color: #009f6b;
  −
}
  −
#content-wrap .anom-bar-container.safe .danger-diamond>.top-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/safe-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.dark .danger-diamond>.left-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/dark-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.notice .danger-diamond>.right-icon::before {
  −
  background-image: url("https://scp-wiki.wikidot.com/local--files/component:anomaly-class-bar/notice-icon.svg");
  −
}
  −
#content-wrap .anom-bar-container.none .danger-diamond>.bottom-icon::before {
  −
  background-image: url("{$secondary-icon}");
  −
  background-size: contain;
  −
}
  −
@media (max-width: 960px) {
  −
  #content-wrap .anom-bar>.top-box {
  −
    padding-bottom: 1.5em;
  −
  }
  −
  #content-wrap .anom-bar>.bottom-box {
  −
    grid-template-columns: 1fr 6rem;
  −
    height: 6rem;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class>.contain-class>.class-text,
  −
  #content-wrap .text-part>.disrupt-class>.class-text,
  −
  #content-wrap .text-part>.risk-class>.class-text {
  −
    font-size: calc(18px + (24 - 18) * ((100vw - 400px) / (960 - 300)));
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class>.contain-class>.class-text {
  −
    font-size: calc(12px + (18 - 12) * ((100vw - 400px) / (960 - 300)));
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class>.second-class>.class-text {
  −
    font-size: calc(18px + (24 - 18) * ((100vw - 400px) / (960 - 300)));
  −
  }
  −
  #content-wrap .anom-bar-container:not(.esoteric) .text-part>.main-class>.contain-class>.class-text {
  −
    font-size: calc(20px + (40 - 20) * ((100vw - 400px) / (960 - 300)));
  −
  }
  −
}
  −
@media (max-width: 875px) {
  −
  #content-wrap .text-part>div {
  −
    padding: 0.25rem 0;
  −
  }
  −
  #content-wrap .anom-bar-container.pending .bottom-box>.text-part,
  −
  #content-wrap .anom-bar-container.neutralized .bottom-box>.text-part,
  −
  #content-wrap .anom-bar-container.neutralised .bottom-box>.text-part,
  −
  #content-wrap .anom-bar-container.explained .bottom-box>.text-part {
  −
    height: 6rem;
  −
  }
  −
  #content-wrap .bottom-box>.text-part {
  −
    grid-template-areas: "main-class" "disrupt-class" "risk-class";
  −
    grid-template-rows: 3fr 2fr 2fr;
  −
    grid-template-columns: 1fr;
  −
    height: 8rem;
  −
  }
  −
  #content-wrap .anom-bar>.bottom-box {
  −
    grid-template-columns: 1fr 8rem;
  −
    height: 8rem;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class::after,
  −
  #content-wrap .text-part>.main-class::after {
  −
    height: 3rem;
  −
    width: 3rem;
  −
  }
  −
  #content-wrap .text-part .disrupt-class::after,
  −
  #content-wrap .text-part .risk-class::after {
  −
    height: 1.75rem;
  −
    width: 1.75rem;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class::after,
  −
  #content-wrap .text-part>.main-class::after,
  −
  #content-wrap .text-part .disrupt-class::after,
  −
  #content-wrap .text-part .risk-class::after {
  −
    top: calc(50% - 1.125rem);
  −
    border-width: 0.25rem;
  −
  }
  −
  #content-wrap .text-part>.main-class::before {
  −
    height: 2.5rem;
  −
    width: 2.5rem;
  −
    border-width: 0.25rem;
  −
    top: calc(50% - 1.45rem);
  −
  }
  −
  #content-wrap .text-part .disrupt-class::before,
  −
  #content-wrap .text-part .risk-class::before {
  −
    height: 2.25rem;
  −
    width: 2.25rem;
  −
    top: calc(50% - 1.125rem);
  −
    right: 0.75rem;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class::after {
  −
    top: 0.15rem;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class::before {
  −
    top: 0.15rem;
  −
    width: 5.75rem;
  −
    height: 3rem;
  −
    right: 1.25rem;
  −
    background-size: 100% 100%;
  −
    background-position: left -20px center;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .contain-class>.class-category {
  −
    max-width: 100% !important;
  −
  }
  −
  #content-wrap .anom-bar-container.pending .bottom-box>.text-part,
  −
  #content-wrap .anom-bar-container.neutralized .bottom-box>.text-part,
  −
  #content-wrap .anom-bar-container.neutralised .bottom-box>.text-part,
  −
  #content-wrap .anom-bar-container.explained .bottom-box>.text-part {
  −
    grid-template-rows: 1fr;
  −
    grid-template-areas: "main-class";
  −
  }
  −
  #content-wrap .text-part .disrupt-class,
  −
  #content-wrap .text-part .risk-class {
  −
    padding-left: 0.25rem;
  −
    display: grid;
  −
    grid-template-columns: auto 1fr;
  −
  }
  −
  #content-wrap .text-part .disrupt-class *,
  −
  #content-wrap .text-part .risk-class * {
  −
    display: flex;
  −
    box-align: center;
  −
    align-items: center;
  −
  }
  −
}
  −
@media (max-width: 875px) and (min-width: 480px) {
  −
  #content-wrap .anom-bar-container.pending .anom-bar>.bottom-box,
  −
  #content-wrap .anom-bar-container.neutralized .anom-bar>.bottom-box,
  −
  #content-wrap .anom-bar-container.neutralised .anom-bar>.bottom-box,
  −
  #content-wrap .anom-bar-container.explained .anom-bar>.bottom-box {
  −
    grid-template-columns: 1fr 6rem;
  −
    height: 6rem;
  −
  }
  −
}
  −
@media (max-width: 480px) {
  −
  #content-wrap .anom-bar {
  −
    position: relative;
  −
  }
  −
  #content-wrap .anom-bar>.top-box {
  −
    height: 40vw;
  −
    max-height: 40vw;
  −
    grid-template-areas: "." "top-left-box" "top-center-box" "top-right-box" ".";
  −
    grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
  −
    font-size: calc(5px + (10 - 5) * ((100vw - 300px) / (480 - 300)));
  −
    margin: 0 0 1rem 0;
  −
    padding-left: 1em;
  −
  }
  −
  #content-wrap .top-box .top-left-box {
  −
    display: flex;
  −
    box-orient: vertical;
  −
    box-direction: normal;
  −
    flex-direction: column;
  −
    box-align: center;
  −
    align-items: center;
  −
    box-pack: center;
  −
    justify-content: center;
  −
    flex-wrap: wrap;
  −
    line-height: 1;
  −
  }
  −
  #content-wrap .top-left-box>.item {
  −
    font-size: 3em;
  −
  }
  −
  #content-wrap .top-box .top-left-box>span {
  −
    width: 100%;
  −
  }
  −
  #content-wrap .top-box .top-center-box {
  −
    box-orient: horizontal;
  −
    box-direction: normal;
  −
    flex-direction: row;
  −
    width: 100%;
  −
    max-width: 48vw;
  −
    margin: 0 0 0 -0.15rem;
  −
    height: 2rem;
  −
  }
  −
  #content-wrap .top-center-box>div {
  −
    height: 25%;
  −
    margin: 0.15rem 0.15rem 0 0.15rem;
  −
  }
  −
  #content-wrap .top-box .top-right-box {
  −
    display: flex;
  −
    box-orient: vertical;
  −
    box-direction: normal;
  −
    flex-direction: column;
  −
    width: 100%;
  −
    max-width: 48vw;
  −
    margin: 0 0 0 -0.15rem;
  −
    height: 3rem;
  −
  }
  −
  #content-wrap .top-right-box>div {
  −
    line-height: 1;
  −
  }
  −
  #content-wrap .top-right-box>.level {
  −
    font-size: 4em;
  −
  }
  −
  #content-wrap .top-right-box>.clearance {
  −
    line-height: 1.5;
  −
    box-align: center;
  −
    align-items: center;
  −
    font-size: calc(14px + (14 - 10) * ((100vw - 400px) / (480 - 300)));
  −
    width: initial;
  −
    height: 1.5rem;
  −
  }
  −
  #content-wrap .top-right-box>.clearance::before {
  −
    line-height: 0.5;
  −
    box-align: center;
  −
    align-items: center;
  −
    width: initial;
  −
    height: initial;
  −
    position: initial;
  −
  }
  −
  #content-wrap .anom-bar>.bottom-box {
  −
    position: initial;
  −
    grid-template-columns: 1fr;
  −
    height: 8rem;
  −
  }
  −
  #content-wrap .anom-bar-container:not(.esoteric) .text-part>.main-class::before {
  −
    width: 2.5rem;
  −
    height: 2.5rem;
  −
    top: calc(50% - 1.475rem);
  −
    right: 0.5rem;
  −
  }
  −
  #content-wrap .text-part>div>.class-category,
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class>.contain-class>.class-category {
  −
    font-size: 1em;
  −
  }
  −
  #content-wrap .text-part .disrupt-class,
  −
  #content-wrap .text-part .risk-class {
  −
    font-size: 0.9em;
  −
  }
  −
  #content-wrap .text-part>.main-class::after,
  −
  #content-wrap .text-part .disrupt-class::after,
  −
  #content-wrap .text-part .risk-class::after {
  −
    height: 2rem;
  −
    width: 2rem;
  −
    top: calc(50% - 1.25rem);
  −
  }
  −
  #content-wrap .text-part>.main-class::before,
  −
  #content-wrap .text-part .disrupt-class::before,
  −
  #content-wrap .text-part .risk-class::before {
  −
    height: 2.5rem;
  −
    width: 2.5rem;
  −
    font-size: 1rem;
  −
    top: calc(50% - 1.25rem);
  −
    right: 1.5rem;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class::before {
  −
    top: 0.15rem;
  −
    width: 4.5rem;
  −
    height: 2.5rem;
  −
    right: 1rem;
  −
    background-size: 100% 100%;
  −
    background-position: left -10px center;
  −
  }
  −
  #content-wrap .anom-bar-container.esoteric .text-part>.main-class::after {
  −
    height: 2.5rem;
  −
    width: 2.5rem;
  −
  }
  −
  #content-wrap .bottom-box>.diamond-part {
  −
    position: absolute;
  −
    top: 0;
  −
    right: 0;
  −
    width: 40vw;
  −
    height: 40vw;
  −
    padding: 0;
  −
  }
  −
  #content-wrap .diamond-part * {
  −
    background-repeat: no-repeat;
  −
  }
  −
  #content-wrap .anom-bar-container.pending .anom-bar>.bottom-box,
  −
  #content-wrap .anom-bar-container.neutralized .anom-bar>.bottom-box,
  −
  #content-wrap .anom-bar-container.neutralised .anom-bar>.bottom-box,
  −
  #content-wrap .anom-bar-container.explained .anom-bar>.bottom-box {
  −
    height: 6rem;
  −
  }
  −
  #content-wrap .danger-diamond>.top-icon {
  −
    top: 0.375rem;
  −
  }
  −
  #content-wrap .danger-diamond>.right-icon {
  −
    right: 0.375rem;
  −
  }
  −
  #content-wrap .danger-diamond>.left-icon {
  −
    left: 0.375rem;
  −
  }
  −
  #content-wrap .danger-diamond>.bottom-icon {
  −
    bottom: 0.375rem;
  −
  }
  −
}
  −
@supports not (--css: variables) {
  −
  #content-wrap .anom-bar {
  −
    display: flex;
  −
    box-orient: vertical;
  −
    box-direction: normal;
  −
    flex-flow: column nowrap;
  −
  }
  −
  #content-wrap .anom-bar>.top-box {
  −
    display: flex;
  −
    box-orient: horizontal;
  −
    box-direction: normal;
  −
    flex-direction: row;
  −
    flex-wrap: nowrap;
  −
  }
  −
  #content-wrap .top-box .top-center-box {
  −
    box-flex: 2;
  −
    flex-grow: 2;
  −
  }
  −
  #content-wrap .anom-bar>.bottom-box {
  −
    display: flex;
  −
  }
  −
  #content-wrap .bottom-box>.text-part {
  −
    box-flex: 1;
  −
    flex-grow: 1;
  −
    width: 100%;
  −
  }
  −
  #content-wrap .anom-bar-container .text-part .main-class {
  −
    overflow: hidden;
  −
  }
  −
  #content-wrap .anom-bar-container .text-part .disrupt-class,
  −
  #content-wrap .anom-bar-container .text-part .risk-class {
  −
    display: flex;
  −
    box-orient: horizontal;
  −
    box-direction: normal;
  −
    flex-direction: row;
  −
    flex-wrap: nowrap;
  −
    box-align: center;
  −
    align-items: center;
  −
    box-pack: start;
  −
    justify-content: flex-start;
  −
  }
  −
  #content-wrap .anom-bar-container .text-part .disrupt-class .class-category,
  −
  #content-wrap .anom-bar-container .text-part .risk-class .class-category {
  −
    flex-shrink: 4;
  −
  }
  −
  #content-wrap .bottom-box>.diamond-part {
  −
    width: 6rem;
  −
    height: 6rem;
  −
    box-flex: 0;
  −
    flex-grow: 0;
  −
    flex-shrink: 0;
  −
    display: flex;
  −
  }
  −
@media (max-width: 480px) {
  −
    #content-wrap .anom-bar>.top-box {
  −
      height: 6rem;
  −
      display: flex;
  −
      box-orient: vertical;
  −
      box-direction: normal;
  −
      flex-direction: column;
  −
      flex-wrap: nowrap;
  −
      width: calc(100% - 40vw);
  −
    }
  −
    #content-wrap .top-box .top-left-box {
  −
      display: initial;
  −
    }
  −
    #content-wrap .top-box>* {
  −
      width: 100%;
  −
      height: auto;
  −
    }
  −
    #content-wrap .top-box .top-center-box {
  −
      box-flex: 0;
  −
      flex-grow: 0;
  −
    }
  −
}
  −
}
  −
#content-wrap .anom-bar-container {
  −
  color: #202122;
  −
}
  −
#content-wrap .anom-bar-container * {
  −
  color: #202122;
  −
}
  −
#content-wrap .anom-bar-container .item::before {
  −
  content: "Item#: ";
  −
}
  −
#content-wrap .anom-bar-container .number::before {
  −
  content: attr(data-number);
  −
}
  −
#content-wrap .anom-bar-container .contain-class .class-category::before {
  −
  content: 'Containment Class:';
  −
}
  −
#content-wrap .anom-bar-container .second-class .class-category::before {
  −
  content: 'Secondary Class:';
  −
}
  −
#content-wrap .anom-bar-container .disrupt-class .class-category::before {
  −
  content: 'Disruption Class:';
  −
}
  −
#content-wrap .anom-bar-container .risk-class .class-category::before {
  −
  content: 'Risk Class:';
  −
}
  −
#content-wrap .anom-bar-container.mstdn .number::after {
  −
  content: "-MSTDN";
  −
  font-size: calc((25px + (50 - 25) * ((100vw - 300px) / (1920 - 300))) / 1.5);
  −
}
  −
#content-wrap .anom-bar-container.clear-1 .level::before {
  −
  content: 'Level1';
  −
}
  −
#content-wrap .anom-bar-container.clear-2 .level::before {
  −
  content: 'Level2';
  −
}
  −
#content-wrap .anom-bar-container.clear-3 .level::before {
  −
  content: 'Level3';
  −
}
  −
#content-wrap .anom-bar-container.clear-4 .level::before {
  −
  content: 'Level4';
  −
}
  −
#content-wrap .anom-bar-container.clear-5 .level::before {
  −
  content: 'Level5';
  −
}
  −
#content-wrap .anom-bar-container.clear-6 .level::before {
  −
  content: 'Level6';
  −
}
  −
#content-wrap .anom-bar-container.safe .contain-class .class-text::before {
  −
  content: 'safe';
  −
}
  −
#content-wrap .anom-bar-container.euclid .contain-class .class-text::before {
  −
  content: 'euclid';
  −
}
  −
#content-wrap .anom-bar-container.keter .contain-class .class-text::before {
  −
  content: 'keter';
  −
}
  −
#content-wrap .anom-bar-container.neutralized .contain-class .class-text::before {
  −
  content: 'neutralized';
  −
}
  −
#content-wrap .anom-bar-container.pending .contain-class .class-text::before {
  −
  content: 'pending';
  −
}
  −
#content-wrap .anom-bar-container.explained .contain-class .class-text::before {
  −
  content: 'explained';
  −
}
  −
#content-wrap .anom-bar-container.esoteric .contain-class .class-text::before {
  −
  content: 'esoteric';
  −
}
  −
#content-wrap .anom-bar-container.dark .disrupt-class .class-text::before {
  −
  content: 'dark';
  −
}
  −
#content-wrap .anom-bar-container.vlam .disrupt-class .class-text::before {
  −
  content: 'vlam';
  −
}
  −
#content-wrap .anom-bar-container.keneq .disrupt-class .class-text::before {
  −
  content: 'keneq';
  −
}
  −
#content-wrap .anom-bar-container.ekhi .disrupt-class .class-text::before {
  −
  content: 'ekhi';
  −
}
  −
#content-wrap .anom-bar-container.amida .disrupt-class .class-text::before {
  −
  content: 'amida';
  −
}
  −
#content-wrap .anom-bar-container.notice .risk-class .class-text::before {
  −
  content: 'notice';
  −
}
  −
#content-wrap .anom-bar-container.caution .risk-class .class-text::before {
  −
  content: 'caution';
  −
}
  −
#content-wrap .anom-bar-container.warning .risk-class .class-text::before {
  −
  content: 'warning';
  −
}
  −
#content-wrap .anom-bar-container.danger .risk-class .class-text::before {
  −
  content: 'danger';
  −
}
  −
#content-wrap .anom-bar-container.critical .risk-class .class-text::before {
  −
  content: 'critical';
  −
}
  −
#firstHeading {
  −
  display: none;
  −
}
  −
#content-wrap .anom-bar > .bottom-box {
  −
  box-shadow: none !important;
  −
}
  −
#content-wrap .anom-bar > .bottom-box::before {
  −
  position: absolute;
  −
  content: " ";
  −
  width: 100%;
  −
  height: 0.5rem;
  −
  background-color: #0c0c0c;
  −
  transform: translateY(-0.74rem);
  −
}
  −
#content-wrap .anom-bar > .bottom-box::before {
  −
  -webkit-animation-name: divider;
  −
          animation-name: divider;
  −
  -webkit-animation-duration: 0.74s;
  −
          animation-duration: 0.74s;
  −
  -webkit-animation-delay: 0.1s;
  −
          animation-delay: 0.1s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.32, 0.38, 0.39, 0.94);
  −
          animation-timing-function: cubic-bezier(0.32, 0.38, 0.39, 0.94);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.top-center-box > * {
  −
  -webkit-animation-name: bar;
  −
          animation-name: bar;
  −
  -webkit-animation-duration: 0.45s;
  −
          animation-duration: 0.45s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: ease-out;
  −
          animation-timing-function: ease-out;
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.top-center-box > :nth-child(1) {
  −
  -webkit-animation-delay: 0.2s;
  −
          animation-delay: 0.2s;
  −
}
  −
#content-wrap div.top-center-box > :nth-child(2) {
  −
  -webkit-animation-delay: 0.32s;
  −
          animation-delay: 0.32s;
  −
}
  −
#content-wrap div.top-center-box > :nth-child(3) {
  −
  -webkit-animation-delay: 0.45s;
  −
          animation-delay: 0.45s;
  −
}
  −
#content-wrap div.top-center-box > :nth-child(4) {
  −
  -webkit-animation-delay: 0.61s;
  −
          animation-delay: 0.61s;
  −
}
  −
#content-wrap div.top-center-box > :nth-child(5) {
  −
  -webkit-animation-delay: 0.75s;
  −
          animation-delay: 0.75s;
  −
}
  −
#content-wrap div.top-center-box > :nth-child(6) {
  −
  -webkit-animation-delay: 0.95s;
  −
          animation-delay: 0.95s;
  −
}
  −
#content-wrap div.top-left-box,
  −
#content-wrap div.top-right-box {
  −
  -webkit-clip-path: polygon(0% -50%, 150% -50%, 150% 100%, 0% 100%);
  −
          clip-path: polygon(0% -50%, 150% -50%, 150% 100%, 0% 100%);
  −
}
  −
#content-wrap div.top-left-box > *,
  −
#content-wrap div.top-right-box > * {
  −
  position: relative;
  −
  -webkit-animation-name: bottomup;
  −
          animation-name: bottomup;
  −
  -webkit-animation-duration: 0.65s;
  −
          animation-duration: 0.65s;
  −
  -webkit-animation-delay: 0.5s;
  −
          animation-delay: 0.5s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: ease-out;
  −
          animation-timing-function: ease-out;
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.text-part > * {
  −
  -webkit-clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
  −
          clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
  −
  -webkit-animation-name: expand2;
  −
          animation-name: expand2;
  −
  -webkit-animation-duration: 0.5s;
  −
          animation-duration: 0.5s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
          animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.text-part > :nth-child(1) {
  −
  -webkit-animation-name: expand1;
  −
          animation-name: expand1;
  −
}
  −
#content-wrap div.text-part > :nth-child(1) {
  −
  -webkit-animation-delay: 0.6s;
  −
          animation-delay: 0.6s;
  −
}
  −
#content-wrap div.text-part > :nth-child(2) {
  −
  -webkit-animation-delay: 0.75s;
  −
          animation-delay: 0.75s;
  −
}
  −
#content-wrap div.text-part > :nth-child(3) {
  −
  -webkit-animation-delay: 0.86s;
  −
          animation-delay: 0.86s;
  −
}
  −
#content-wrap div.main-class::before,
  −
#content-wrap div.main-class::after {
  −
  -webkit-animation-name: iconslide;
  −
          animation-name: iconslide;
  −
  -webkit-animation-duration: 0.45s;
  −
          animation-duration: 0.45s;
  −
  -webkit-animation-delay: 0.8s;
  −
          animation-delay: 0.8s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
          animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.main-class > *,
  −
#content-wrap div.disrupt-class > *,
  −
#content-wrap div.risk-class > * {
  −
  white-space: nowrap;
  −
  -webkit-animation-name: flowIn;
  −
          animation-name: flowIn;
  −
  -webkit-animation-duration: 0.42s;
  −
          animation-duration: 0.42s;
  −
  -webkit-animation-delay: 0.75s;
  −
          animation-delay: 0.75s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: ease-out;
  −
          animation-timing-function: ease-out;
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.arrows {
  −
  -webkit-animation-name: arrowspin;
  −
          animation-name: arrowspin;
  −
  -webkit-animation-duration: 0.7s;
  −
          animation-duration: 0.7s;
  −
  -webkit-animation-delay: 0.6s;
  −
          animation-delay: 0.6s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
          animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.quadrants > * {
  −
  -webkit-animation-name: fade;
  −
          animation-name: fade;
  −
  -webkit-animation-duration: 0.3s;
  −
          animation-duration: 0.3s;
  −
  -webkit-animation-delay: 1.4s;
  −
          animation-delay: 1.4s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
          animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.top-icon,
  −
#content-wrap div.right-icon,
  −
#content-wrap div.left-icon,
  −
#content-wrap div.bottom-icon {
  −
  -webkit-animation-name: nodegrow;
  −
          animation-name: nodegrow;
  −
  -webkit-animation-duration: 0.4s;
  −
          animation-duration: 0.4s;
  −
  -webkit-animation-delay: 1.4s;
  −
          animation-delay: 1.4s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
          animation-timing-function: cubic-bezier(0.12, 0.41, 0.27, 0.99);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
}
  −
#content-wrap div.diamond-part {
  −
  -webkit-clip-path: polygon(-10% 0.37%, 120% 0.37%, 120% 100%, -10% 100%);
  −
          clip-path: polygon(-10% 0.37%, 120% 0.37%, 120% 100%, -10% 100%);
  −
  -webkit-animation-name: diamondBorder;
  −
          animation-name: diamondBorder;
  −
  -webkit-animation-duration: 0.8s;
  −
          animation-duration: 0.8s;
  −
  -webkit-animation-delay: 0.5s;
  −
          animation-delay: 0.5s;
  −
  -webkit-animation-iteration-count: 1;
  −
          animation-iteration-count: 1;
  −
  -webkit-animation-timing-function: cubic-bezier(0.32, 0.38, 0.39, 0.94);
  −
          animation-timing-function: cubic-bezier(0.32, 0.38, 0.39, 0.94);
  −
  -webkit-animation-fill-mode: backwards;
  −
          animation-fill-mode: backwards;
  −
  will-change: box-shadow;
  −
}
  −
@media (max-width: 480px) {
  −
  #content-wrap .anom-bar > .bottom-box::before {
  −
    display: none;
  −
  }
  −
  #content-wrap .anom-bar > .bottom-box {
  −
    box-shadow: 0 -0.5rem 0 0 #0c0c0c !important;
  −
  }
  −
  #content-wrap div.top-center-box > * {
  −
    -webkit-animation-name: bar-mobile;
  −
            animation-name: bar-mobile;
  −
    -webkit-animation-duration: 0.9s;
  −
            animation-duration: 0.9s;
  −
  }
  −
  #content-wrap div.top-center-box > :nth-child(1) {
  −
    -webkit-animation-delay: 0.1s;
  −
            animation-delay: 0.1s;
  −
  }
  −
  #content-wrap div.top-center-box > :nth-child(2) {
  −
    -webkit-animation-delay: 0.2s;
  −
            animation-delay: 0.2s;
  −
  }
  −
  #content-wrap div.top-center-box > :nth-child(3) {
  −
    -webkit-animation-delay: 0.3s;
  −
            animation-delay: 0.3s;
  −
  }
  −
  #content-wrap div.top-center-box > :nth-child(4) {
  −
    -webkit-animation-delay: 0.4s;
  −
            animation-delay: 0.4s;
  −
  }
  −
  #content-wrap div.top-center-box > :nth-child(5) {
  −
    -webkit-animation-delay: 0.5s;
  −
            animation-delay: 0.5s;
  −
  }
  −
  #content-wrap div.top-center-box > :nth-child(6) {
  −
    -webkit-animation-delay: 0.6s;
  −
            animation-delay: 0.6s;
  −
  }
  −
}
  −
@media screen and (prefers-reduced-motion: reduce) {
  −
  #content-wrap div.anom-bar-container {
  −
    --timeScale: 0 !important;
  −
  }
  −
}
  −
@-webkit-keyframes divider {
  −
  from {
  −
    max-width: 0%;
  −
  }
  −
  to {
  −
    max-width: 100%;
  −
  }
  −
}
  −
@keyframes divider {
  −
  from {
  −
    max-width: 0%;
  −
  }
  −
  to {
  −
    max-width: 100%;
  −
  }
  −
}
  −
@-webkit-keyframes bar {
  −
  from {
  −
    max-width: 0%;
  −
  }
  −
  to {
  −
    max-width: 100%;
  −
  }
  −
}
  −
@keyframes bar {
  −
  from {
  −
    max-width: 0%;
  −
  }
  −
  to {
  −
    max-width: 100%;
  −
  }
  −
}
  −
@-webkit-keyframes bar-mobile {
  −
  from {
  −
    max-height: 0%;
  −
  }
  −
  to {
  −
    max-height: 100%;
  −
  }
  −
}
  −
@keyframes bar-mobile {
  −
  from {
  −
    max-height: 0%;
  −
  }
  −
  to {
  −
    max-height: 100%;
  −
  }
  −
}
  −
@-webkit-keyframes bottomup {
  −
  from {
  −
    top: 100px;
  −
  }
  −
  to {
  −
    top: 0;
  −
  }
  −
}
  −
@keyframes bottomup {
  −
  from {
  −
    top: 100px;
  −
  }
  −
  to {
  −
    top: 0;
  −
  }
  −
}
  −
@-webkit-keyframes expand1 {
  −
  from {
  −
    opacity: 0;
  −
    -webkit-clip-path: inset(0 calc(100% - 0.75rem) 0 0);
  −
            clip-path: inset(0 calc(100% - 0.75rem) 0 0);
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    -webkit-clip-path: inset(0);
  −
            clip-path: inset(0);
  −
  }
  −
}
  −
@keyframes expand1 {
  −
  from {
  −
    opacity: 0;
  −
    -webkit-clip-path: inset(0 calc(100% - 0.75rem) 0 0);
  −
            clip-path: inset(0 calc(100% - 0.75rem) 0 0);
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    -webkit-clip-path: inset(0);
  −
            clip-path: inset(0);
  −
  }
  −
}
  −
@-webkit-keyframes iconslide {
  −
  from {
  −
    opacity: 0;
  −
    transform: translateX(-5rem);
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    transform: translateX(0);
  −
  }
  −
}
  −
@keyframes iconslide {
  −
  from {
  −
    opacity: 0;
  −
    transform: translateX(-5rem);
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    transform: translateX(0);
  −
  }
  −
}
  −
@-webkit-keyframes expand2 {
  −
  from {
  −
    opacity: 0;
  −
    width: 1%;
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    width: calc(100% - 0.25rem);
  −
  }
  −
}
  −
@keyframes expand2 {
  −
  from {
  −
    opacity: 0;
  −
    width: 1%;
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    width: calc(100% - 0.25rem);
  −
  }
  −
}
  −
@-webkit-keyframes fade {
  −
  from {
  −
    opacity: 0;
  −
  }
  −
  to {
  −
    opacity: 1;
  −
  }
  −
}
  −
@keyframes fade {
  −
  from {
  −
    opacity: 0;
  −
  }
  −
  to {
  −
    opacity: 1;
  −
  }
  −
}
  −
@-webkit-keyframes flowIn {
  −
  from {
  −
    opacity: 0;
  −
    transform: translateY(20px);
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    transform: translateY(0);
  −
  }
  −
}
  −
@keyframes flowIn {
  −
  from {
  −
    opacity: 0;
  −
    transform: translateY(20px);
  −
  }
  −
  to {
  −
    opacity: 1;
  −
    transform: translateY(0);
  −
  }
  −
}
  −
@-webkit-keyframes arrowspin {
  −
  from {
  −
    -webkit-clip-path: circle(0%);
  −
            clip-path: circle(0%);
  −
    transform: rotate(135deg);
  −
  }
  −
  to {
  −
    -webkit-clip-path: circle(75%);
  −
            clip-path: circle(75%);
  −
    transform: rotate(0deg);
  −
  }
  −
}
  −
@keyframes arrowspin {
  −
  from {
  −
    -webkit-clip-path: circle(0%);
  −
            clip-path: circle(0%);
  −
    transform: rotate(135deg);
  −
  }
  −
  to {
  −
    -webkit-clip-path: circle(75%);
  −
            clip-path: circle(75%);
  −
    transform: rotate(0deg);
  −
  }
  −
}
  −
@-webkit-keyframes nodegrow {
  −
  from {
  −
    transform: scale(0);
  −
  }
  −
  to {
  −
    transform: scale(1);
  −
  }
  −
}
  −
@keyframes nodegrow {
  −
  from {
  −
    transform: scale(0);
  −
  }
  −
  to {
  −
    transform: scale(1);
  −
  }
  −
}
  −
@-webkit-keyframes diamondBorder {
  −
  from {
  −
    box-shadow: -0.5rem -20rem 0 0 #0c0c0c;
  −
  }
  −
  to {
  −
    box-shadow: -0.5rem 0 0 0 #0c0c0c;
  −
  }
  −
}
  −
@keyframes diamondBorder {
  −
  from {
  −
    box-shadow: -0.5rem -20rem 0 0 #0c0c0c;
  −
  }
  −
  to {
  −
    box-shadow: -0.5rem 0 0 0 #0c0c0c;
  −
  }
  −
}
  −
#content-wrap .stained {
  −
  color: #00f;
  −
}
  −
#content-wrap .stained .unstainable {
  −
  color: #333 !important;
  −
}
  −
#content-wrap .unstainable {
  −
  color: #333 !important;
  −
}
  −
#content-wrap .scp-message-box {
  −
  background: url("http://scp-wiki.wdfiles.com/local--files/the-great-hippo/scp_trans.png") center no-repeat #f2f2c2;
  −
  float: center;
  −
  border: solid 2px #000;
  −
  padding: 1px 15px;
  −
  box-shadow: 0 1px 3px rgba(0,0,0,0.2);
  −
  text-align: center;
  −
  min-height: 10em;
  −
  position: relative;
  −
}
  −
#content-wrap .scp-message-box .inner {
  −
  position: absolute;
  −
  top: 50%;
  −
  left: 50%;
  −
  transform: translateY(-50%) translateX(-50%);
  −
}
  −
</style><script src="data:text/javascript;base64,KGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCl7ZnVuY3Rpb24gY29weVByb3BlcnRpZXMoYSxiKXt2YXIgdD1PYmplY3Qua2V5cyhhKQpmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIHI9dFtzXQpiW3JdPWFbcl19fWZ1bmN0aW9uIG1peGluUHJvcGVydGllc0hhcmQoYSxiKXt2YXIgdD1PYmplY3Qua2V5cyhhKQpmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIHI9dFtzXQppZighYi5oYXNPd25Qcm9wZXJ0eShyKSliW3JdPWFbcl19fWZ1bmN0aW9uIG1peGluUHJvcGVydGllc0Vhc3koYSxiKXtPYmplY3QuYXNzaWduKGIsYSl9dmFyIHo9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30KdC5wcm90b3R5cGU9e3A6e319CnZhciBzPW5ldyB0KCkKaWYoIShzLl9fcHJvdG9fXyYmcy5fX3Byb3RvX18ucD09PXQucHJvdG90eXBlLnApKXJldHVybiBmYWxzZQp0cnl7aWYodHlwZW9mIG5hdmlnYXRvciE9InVuZGVmaW5lZCImJnR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50PT0ic3RyaW5nIiYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUvIik+PTApcmV0dXJuIHRydWUKaWYodHlwZW9mIHZlcnNpb249PSJmdW5jdGlvbiImJnZlcnNpb24ubGVuZ3RoPT0wKXt2YXIgcj12ZXJzaW9uKCkKaWYoL15cZCtcLlxkK1wuXGQrXC5cZCskLy50ZXN0KHIpKXJldHVybiB0cnVlfX1jYXRjaChxKXt9cmV0dXJuIGZhbHNlfSgpCmZ1bmN0aW9uIGluaGVyaXQoYSxiKXthLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hCmEucHJvdG90eXBlWyIkaSIrYS5uYW1lXT1hCmlmKGIhPW51bGwpe2lmKHope2EucHJvdG90eXBlLl9fcHJvdG9fXz1iLnByb3RvdHlwZQpyZXR1cm59dmFyIHQ9T2JqZWN0LmNyZWF0ZShiLnByb3RvdHlwZSkKY29weVByb3BlcnRpZXMoYS5wcm90b3R5cGUsdCkKYS5wcm90b3R5cGU9dH19ZnVuY3Rpb24gaW5oZXJpdE1hbnkoYSxiKXtmb3IodmFyIHQ9MDt0PGIubGVuZ3RoO3QrKylpbmhlcml0KGJbdF0sYSl9ZnVuY3Rpb24gbWl4aW5FYXN5KGEsYil7bWl4aW5Qcm9wZXJ0aWVzRWFzeShiLnByb3RvdHlwZSxhLnByb3RvdHlwZSkKYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YX1mdW5jdGlvbiBtaXhpbkhhcmQoYSxiKXttaXhpblByb3BlcnRpZXNIYXJkKGIucHJvdG90eXBlLGEucHJvdG90eXBlKQphLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hfWZ1bmN0aW9uIGxhenlPbGQoYSxiLGMsZCl7dmFyIHQ9YQphW2JdPXQKYVtjXT1mdW5jdGlvbigpe2FbY109ZnVuY3Rpb24oKXtBLmhLKGIpfQp2YXIgcwp2YXIgcj1kCnRyeXtpZihhW2JdPT09dCl7cz1hW2JdPXIKcz1hW2JdPWQoKX1lbHNlIHM9YVtiXX1maW5hbGx5e2lmKHM9PT1yKWFbYl09bnVsbAphW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYl19fXJldHVybiBzfX1mdW5jdGlvbiBsYXp5KGEsYixjLGQpe3ZhciB0PWEKYVtiXT10CmFbY109ZnVuY3Rpb24oKXtpZihhW2JdPT09dClhW2JdPWQoKQphW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbYl19CnJldHVybiBhW2JdfX1mdW5jdGlvbiBsYXp5RmluYWwoYSxiLGMsZCl7dmFyIHQ9YQphW2JdPXQKYVtjXT1mdW5jdGlvbigpe2lmKGFbYl09PT10KXt2YXIgcz1kKCkKaWYoYVtiXSE9PXQpQS5oTChiKQphW2JdPXN9dmFyIHI9YVtiXQphW2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9CnJldHVybiByfX1mdW5jdGlvbiBtYWtlQ29uc3RMaXN0KGEpe2EuaW1tdXRhYmxlJGxpc3Q9QXJyYXkKYS5maXhlZCRsZW5ndGg9QXJyYXkKcmV0dXJuIGF9ZnVuY3Rpb24gY29udmVydFRvRmFzdE9iamVjdChhKXtmdW5jdGlvbiB0KCl7fXQucHJvdG90eXBlPWEKbmV3IHQoKQpyZXR1cm4gYX1mdW5jdGlvbiBjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGEpe2Zvcih2YXIgdD0wO3Q8YS5sZW5ndGg7Kyt0KWNvbnZlcnRUb0Zhc3RPYmplY3QoYVt0XSl9dmFyIHk9MApmdW5jdGlvbiBpbnN0YW5jZVRlYXJPZmZHZXR0ZXIoYSxiKXt2YXIgdD1udWxsCnJldHVybiBhP2Z1bmN0aW9uKGMpe2lmKHQ9PT1udWxsKXQ9QS5kdyhiKQpyZXR1cm4gbmV3IHQoYyx0aGlzKX06ZnVuY3Rpb24oKXtpZih0PT09bnVsbCl0PUEuZHcoYikKcmV0dXJuIG5ldyB0KHRoaXMsbnVsbCl9fWZ1bmN0aW9uIHN0YXRpY1RlYXJPZmZHZXR0ZXIoYSl7dmFyIHQ9bnVsbApyZXR1cm4gZnVuY3Rpb24oKXtpZih0PT09bnVsbCl0PUEuZHcoYSkucHJvdG90eXBlCnJldHVybiB0fX12YXIgeD0wCmZ1bmN0aW9uIHRlYXJPZmZQYXJhbWV0ZXJzKGEsYixjLGQsZSxmLGcsaCxpLGope2lmKHR5cGVvZiBoPT0ibnVtYmVyIiloKz14CnJldHVybntjbzphLGlTOmIsaUk6YyxyQzpkLGRWOmUsY3M6ZixmczpnLGZUOmgsYUk6aXx8MCxuREE6an19ZnVuY3Rpb24gaW5zdGFsbFN0YXRpY1RlYXJPZmYoYSxiLGMsZCxlLGYsZyxoKXt2YXIgdD10ZWFyT2ZmUGFyYW1ldGVycyhhLHRydWUsZmFsc2UsYyxkLGUsZixnLGgsZmFsc2UpCnZhciBzPXN0YXRpY1RlYXJPZmZHZXR0ZXIodCkKYVtiXT1zfWZ1bmN0aW9uIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoYSxiLGMsZCxlLGYsZyxoLGksail7Yz0hIWMKdmFyIHQ9dGVhck9mZlBhcmFtZXRlcnMoYSxmYWxzZSxjLGQsZSxmLGcsaCxpLCEhaikKdmFyIHM9aW5zdGFuY2VUZWFyT2ZmR2V0dGVyKGMsdCkKYVtiXT1zfWZ1bmN0aW9uIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcoYSl7dmFyIHQ9di5pbnRlcmNlcHRvcnNCeVRhZwppZighdCl7di5pbnRlcmNlcHRvcnNCeVRhZz1hCnJldHVybn1jb3B5UHJvcGVydGllcyhhLHQpfWZ1bmN0aW9uIHNldE9yVXBkYXRlTGVhZlRhZ3MoYSl7dmFyIHQ9di5sZWFmVGFncwppZighdCl7di5sZWFmVGFncz1hCnJldHVybn1jb3B5UHJvcGVydGllcyhhLHQpfWZ1bmN0aW9uIHVwZGF0ZVR5cGVzKGEpe3ZhciB0PXYudHlwZXMKdmFyIHM9dC5sZW5ndGgKdC5wdXNoLmFwcGx5KHQsYSkKcmV0dXJuIHN9ZnVuY3Rpb24gdXBkYXRlSG9sZGVyKGEsYil7Y29weVByb3BlcnRpZXMoYixhKQpyZXR1cm4gYX12YXIgaHVua0hlbHBlcnM9ZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBmdW5jdGlvbihmLGcsaCxpKXtyZXR1cm4gaW5zdGFsbEluc3RhbmNlVGVhck9mZihmLGcsYSxiLGMsZCxbaF0saSxlLGZhbHNlKX19LHM9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKGUsZixnLGgpe3JldHVybiBpbnN0YWxsU3RhdGljVGVhck9mZihlLGYsYSxiLGMsW2ddLGgsZCl9fQpyZXR1cm57aW5oZXJpdDppbmhlcml0LGluaGVyaXRNYW55OmluaGVyaXRNYW55LG1peGluOm1peGluRWFzeSxtaXhpbkhhcmQ6bWl4aW5IYXJkLGluc3RhbGxTdGF0aWNUZWFyT2ZmOmluc3RhbGxTdGF0aWNUZWFyT2ZmLGluc3RhbGxJbnN0YW5jZVRlYXJPZmY6aW5zdGFsbEluc3RhbmNlVGVhck9mZixfaW5zdGFuY2VfMHU6dCgwLDAsbnVsbCxbIiQwIl0sMCksX2luc3RhbmNlXzF1OnQoMCwxLG51bGwsWyIkMSJdLDApLF9pbnN0YW5jZV8ydTp0KDAsMixudWxsLFsiJDIiXSwwKSxfaW5zdGFuY2VfMGk6dCgxLDAsbnVsbCxbIiQwIl0sMCksX2luc3RhbmNlXzFpOnQoMSwxLG51bGwsWyIkMSJdLDApLF9pbnN0YW5jZV8yaTp0KDEsMixudWxsLFsiJDIiXSwwKSxfc3RhdGljXzA6cygwLG51bGwsWyIkMCJdLDApLF9zdGF0aWNfMTpzKDEsbnVsbCxbIiQxIl0sMCksX3N0YXRpY18yOnMoMixudWxsLFsiJDIiXSwwKSxtYWtlQ29uc3RMaXN0Om1ha2VDb25zdExpc3QsbGF6eTpsYXp5LGxhenlGaW5hbDpsYXp5RmluYWwsbGF6eU9sZDpsYXp5T2xkLHVwZGF0ZUhvbGRlcjp1cGRhdGVIb2xkZXIsY29udmVydFRvRmFzdE9iamVjdDpjb252ZXJ0VG9GYXN0T2JqZWN0LHVwZGF0ZVR5cGVzOnVwZGF0ZVR5cGVzLHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWc6c2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyxzZXRPclVwZGF0ZUxlYWZUYWdzOnNldE9yVXBkYXRlTGVhZlRhZ3N9fSgpCmZ1bmN0aW9uIGluaXRpYWxpemVEZWZlcnJlZEh1bmsoYSl7eD12LnR5cGVzLmxlbmd0aAphKGh1bmtIZWxwZXJzLHYsdywkKX12YXIgQT17ZGQ6ZnVuY3Rpb24gZGQoKXt9LApkdihhLGIsYyl7cmV0dXJuIGF9LApmOCgpe3JldHVybiBuZXcgQS5hYigiTm8gZWxlbWVudCIpfSwKZjkoKXtyZXR1cm4gbmV3IEEuYWIoIlRvbyBtYW55IGVsZW1lbnRzIil9LApicjpmdW5jdGlvbiBicihhKXt0aGlzLmE9YX0sCmJoOmZ1bmN0aW9uIGJoKCl7fSwKYnU6ZnVuY3Rpb24gYnUoKXt9LAp6OmZ1bmN0aW9uIHooYSxiKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0wCl8uZD1udWxsfSwKYnY6ZnVuY3Rpb24gYnYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmJ3OmZ1bmN0aW9uIGJ3KGEsYil7dGhpcy5hPW51bGwKdGhpcy5iPWEKdGhpcy5jPWJ9LApieDpmdW5jdGlvbiBieChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKYWY6ZnVuY3Rpb24gYWYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmJNOmZ1bmN0aW9uIGJNKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApmNShhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIEIuay5nbihhKQppZih1Lm4uYihhKSlyZXR1cm4gQS5hSChhKQpyZXR1cm4gQS5ldShhKX0sCmY2KGEpe3JldHVybiBuZXcgQS5jbShhKX0sCmV4KGEpe3ZhciB0PXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHQhPW51bGwpcmV0dXJuIHQKcmV0dXJuIm1pbmlmaWVkOiIrYX0sCmhCKGEsYil7dmFyIHQKaWYoYiE9bnVsbCl7dD1iLngKaWYodCE9bnVsbClyZXR1cm4gdH1yZXR1cm4gdS5wLmIoYSl9LApmKGEpe3ZhciB0CmlmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQppZih0eXBlb2YgYT09Im51bWJlciIpe2lmKGEhPT0wKXJldHVybiIiK2F9ZWxzZSBpZighMD09PWEpcmV0dXJuInRydWUiCmVsc2UgaWYoITE9PT1hKXJldHVybiJmYWxzZSIKZWxzZSBpZihhPT1udWxsKXJldHVybiJudWxsIgp0PUouYjcoYSkKcmV0dXJuIHR9LAphSChhKXt2YXIgdCxzPSQuZFcKaWYocz09bnVsbClzPSQuZFc9U3ltYm9sKCJpZGVudGl0eUhhc2hDb2RlIikKdD1hW3NdCmlmKHQ9PW51bGwpe3Q9TWF0aC5yYW5kb20oKSoweDNmZmZmZmZmfDAKYVtzXT10fXJldHVybiB0fSwKZmkoYSxiKXt2YXIgdCxzPS9eXHMqWystXT8oKDB4W2EtZjAtOV0rKXwoXGQrKXwoW2EtejAtOV0rKSlccyokL2kuZXhlYyhhKQppZihzPT1udWxsKXJldHVybiBudWxsCnQ9c1szXQppZih0IT1udWxsKXJldHVybiBwYXJzZUludChhLDEwKQppZihzWzJdIT1udWxsKXJldHVybiBwYXJzZUludChhLDE2KQpyZXR1cm4gbnVsbH0sCmN3KGEpe3JldHVybiBBLmZoKGEpfSwKZmgoYSl7dmFyIHQscyxyLHEscAppZihhIGluc3RhbmNlb2YgQS5qKXJldHVybiBBLnkoQS5jYihhKSxudWxsKQp0PUouYW0oYSkKaWYodD09PUIueHx8dD09PUIuenx8dS5CLmIoYSkpe3M9Qi5pKGEpCnI9cyE9PSJPYmplY3QiJiZzIT09IiIKaWYocilyZXR1cm4gcwpxPWEuY29uc3RydWN0b3IKaWYodHlwZW9mIHE9PSJmdW5jdGlvbiIpe3A9cS5uYW1lCmlmKHR5cGVvZiBwPT0ic3RyaW5nIilyPXAhPT0iT2JqZWN0IiYmcCE9PSIiCmVsc2Ugcj0hMQppZihyKXJldHVybiBwfX1yZXR1cm4gQS55KEEuY2IoYSksbnVsbCl9LApkeChhLGIpe3ZhciB0LHM9ImluZGV4IgppZighQS5layhiKSlyZXR1cm4gbmV3IEEuRighMCxiLHMsbnVsbCkKdD1KLmFwKGEpCmlmKGI8MHx8Yj49dClyZXR1cm4gQS5heChiLGEscyxudWxsLHQpCnJldHVybiBBLmZqKGIscyl9LApkKGEpe3ZhciB0LHMKaWYoYT09bnVsbClhPW5ldyBBLmJ5KCkKdD1uZXcgRXJyb3IoKQp0LmRhcnRFeGNlcHRpb249YQpzPUEuaE0KaWYoImRlZmluZVByb3BlcnR5IiBpbiBPYmplY3Qpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJtZXNzYWdlIix7Z2V0OnN9KQp0Lm5hbWU9IiJ9ZWxzZSB0LnRvU3RyaW5nPXMKcmV0dXJuIHR9LApoTSgpe3JldHVybiBKLmI3KHRoaXMuZGFydEV4Y2VwdGlvbil9LApkRChhKXt0aHJvdyBBLmQoYSl9LApkQyhhKXt0aHJvdyBBLmQoQS5XKGEpKX0sCkwoYSl7dmFyIHQscyxyLHEscCxvCmE9QS5oSShhLnJlcGxhY2UoU3RyaW5nKHt9KSwiJHJlY2VpdmVyJCIpKQp0PWEubWF0Y2goL1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHQ9PW51bGwpdD1bXQpzPXQuaW5kZXhPZigiXFwkYXJndW1lbnRzXFwkIikKcj10LmluZGV4T2YoIlxcJGFyZ3VtZW50c0V4cHJcXCQiKQpxPXQuaW5kZXhPZigiXFwkZXhwclxcJCIpCnA9dC5pbmRleE9mKCJcXCRtZXRob2RcXCQiKQpvPXQuaW5kZXhPZigiXFwkcmVjZWl2ZXJcXCQiKQpyZXR1cm4gbmV3IEEuY3koYS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRhcmd1bWVudHNcXFxcXFwkIiwiZyIpLCIoKD86eHxbXnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkYXJndW1lbnRzRXhwclxcXFxcXCQiLCJnIiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRleHByXFxcXFxcJCIsImciKSwiKCg/Onh8W154XSkqKSIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJG1ldGhvZFxcXFxcXCQiLCJnIiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRyZWNlaXZlclxcXFxcXCQiLCJnIiksIigoPzp4fFteeF0pKikiKSxzLHIscSxwLG8pfSwKY3ooYSl7cmV0dXJuIGZ1bmN0aW9uKCRleHByJCl7dmFyICRhcmd1bWVudHNFeHByJD0iJGFyZ3VtZW50cyQiCnRyeXskZXhwciQuJG1ldGhvZCQoJGFyZ3VtZW50c0V4cHIkKX1jYXRjaCh0KXtyZXR1cm4gdC5tZXNzYWdlfX0oYSl9LAplMShhKXtyZXR1cm4gZnVuY3Rpb24oJGV4cHIkKXt0cnl7JGV4cHIkLiRtZXRob2QkfWNhdGNoKHQpe3JldHVybiB0Lm1lc3NhZ2V9fShhKX0sCmRlKGEsYil7dmFyIHQ9Yj09bnVsbCxzPXQ/bnVsbDpiLm1ldGhvZApyZXR1cm4gbmV3IEEuYnEoYSxzLHQ/bnVsbDpiLnJlY2VpdmVyKX0sCmV5KGEpe2lmKGE9PW51bGwpcmV0dXJuIG5ldyBBLmN2KGEpCmlmKHR5cGVvZiBhIT09Im9iamVjdCIpcmV0dXJuIGEKaWYoImRhcnRFeGNlcHRpb24iIGluIGEpcmV0dXJuIEEuYTIoYSxhLmRhcnRFeGNlcHRpb24pCnJldHVybiBBLmhpKGEpfSwKYTIoYSxiKXtpZih1LlEuYihiKSlpZihiLiR0aHJvd25Kc0Vycm9yPT1udWxsKWIuJHRocm93bkpzRXJyb3I9YQpyZXR1cm4gYn0sCmhpKGEpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZj1udWxsCmlmKCEoIm1lc3NhZ2UiIGluIGEpKXJldHVybiBhCnQ9YS5tZXNzYWdlCmlmKCJudW1iZXIiIGluIGEmJnR5cGVvZiBhLm51bWJlcj09Im51bWJlciIpe3M9YS5udW1iZXIKcj1zJjY1NTM1CmlmKChCLmMuYVEocywxNikmODE5MSk9PT0xMClzd2l0Y2gocil7Y2FzZSA0Mzg6cmV0dXJuIEEuYTIoYSxBLmRlKEEuZih0KSsiIChFcnJvciAiK3IrIikiLGYpKQpjYXNlIDQ0NTpjYXNlIDUwMDc6cT1BLmYodCkKcmV0dXJuIEEuYTIoYSxuZXcgQS5hRyhxKyIgKEVycm9yICIrcisiKSIsZikpfX1pZihhIGluc3RhbmNlb2YgVHlwZUVycm9yKXtwPSQuZUMoKQpvPSQuZUQoKQpuPSQuZUUoKQptPSQuZUYoKQpsPSQuZUkoKQprPSQuZUooKQpqPSQuZUgoKQokLmVHKCkKaT0kLmVMKCkKaD0kLmVLKCkKZz1wLkIodCkKaWYoZyE9bnVsbClyZXR1cm4gQS5hMihhLEEuZGUodCxnKSkKZWxzZXtnPW8uQih0KQppZihnIT1udWxsKXtnLm1ldGhvZD0iY2FsbCIKcmV0dXJuIEEuYTIoYSxBLmRlKHQsZykpfWVsc2V7Zz1uLkIodCkKaWYoZz09bnVsbCl7Zz1tLkIodCkKaWYoZz09bnVsbCl7Zz1sLkIodCkKaWYoZz09bnVsbCl7Zz1rLkIodCkKaWYoZz09bnVsbCl7Zz1qLkIodCkKaWYoZz09bnVsbCl7Zz1tLkIodCkKaWYoZz09bnVsbCl7Zz1pLkIodCkKaWYoZz09bnVsbCl7Zz1oLkIodCkKcT1nIT1udWxsfWVsc2UgcT0hMH1lbHNlIHE9ITB9ZWxzZSBxPSEwfWVsc2UgcT0hMH1lbHNlIHE9ITB9ZWxzZSBxPSEwfWVsc2UgcT0hMAppZihxKXJldHVybiBBLmEyKGEsbmV3IEEuYUcodCxnPT1udWxsP2Y6Zy5tZXRob2QpKX19cmV0dXJuIEEuYTIoYSxuZXcgQS5iSyh0eXBlb2YgdD09InN0cmluZyI/dDoiIikpfWlmKGEgaW5zdGFuY2VvZiBSYW5nZUVycm9yKXtpZih0eXBlb2YgdD09InN0cmluZyImJnQuaW5kZXhPZigiY2FsbCBzdGFjayIpIT09LTEpcmV0dXJuIG5ldyBBLmFMKCkKdD1mdW5jdGlvbihiKXt0cnl7cmV0dXJuIFN0cmluZyhiKX1jYXRjaChlKXt9cmV0dXJuIG51bGx9KGEpCnJldHVybiBBLmEyKGEsbmV3IEEuRighMSxmLGYsdHlwZW9mIHQ9PSJzdHJpbmciP3QucmVwbGFjZSgvXlJhbmdlRXJyb3I6XHMqLywiIik6dCkpfWlmKHR5cGVvZiBJbnRlcm5hbEVycm9yPT0iZnVuY3Rpb24iJiZhIGluc3RhbmNlb2YgSW50ZXJuYWxFcnJvcilpZih0eXBlb2YgdD09InN0cmluZyImJnQ9PT0idG9vIG11Y2ggcmVjdXJzaW9uIilyZXR1cm4gbmV3IEEuYUwoKQpyZXR1cm4gYX0sCmh0KGEpe3ZhciB0CmlmKGE9PW51bGwpcmV0dXJuIG5ldyBBLmMyKGEpCnQ9YS4kY2FjaGVkVHJhY2UKaWYodCE9bnVsbClyZXR1cm4gdApyZXR1cm4gYS4kY2FjaGVkVHJhY2U9bmV3IEEuYzIoYSl9LApldShhKXtpZihhPT1udWxsfHx0eXBlb2YgYSE9Im9iamVjdCIpcmV0dXJuIEouYW8oYSkKZWxzZSByZXR1cm4gQS5hSChhKX0sCmVvKGEsYil7dmFyIHQscyxyLHE9YS5sZW5ndGgKZm9yKHQ9MDt0PHE7dD1yKXtzPXQrMQpyPXMrMQpiLkwoMCxhW3RdLGFbc10pfXJldHVybiBifSwKaEEoYSxiLGMsZCxlLGYpe3N3aXRjaChiKXtjYXNlIDA6cmV0dXJuIGEuJDAoKQpjYXNlIDE6cmV0dXJuIGEuJDEoYykKY2FzZSAyOnJldHVybiBhLiQyKGMsZCkKY2FzZSAzOnJldHVybiBhLiQzKGMsZCxlKQpjYXNlIDQ6cmV0dXJuIGEuJDQoYyxkLGUsZil9dGhyb3cgQS5kKG5ldyBBLmNGKCJVbnN1cHBvcnRlZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB3cmFwcGVkIGNsb3N1cmUiKSl9LApjYShhLGIpe3ZhciB0CmlmKGE9PW51bGwpcmV0dXJuIG51bGwKdD1hLiRpZGVudGl0eQppZighIXQpcmV0dXJuIHQKdD1mdW5jdGlvbihjLGQsZSl7cmV0dXJuIGZ1bmN0aW9uKGYsZyxoLGkpe3JldHVybiBlKGMsZCxmLGcsaCxpKX19KGEsYixBLmhBKQphLiRpZGVudGl0eT10CnJldHVybiB0fSwKZjEoYTEpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGo9YTEuY28saT1hMS5pUyxoPWExLmlJLGc9YTEubkRBLGY9YTEuYUksZT1hMS5mcyxkPWExLmNzLGM9ZVswXSxiPWRbMF0sYT1qW2NdLGEwPWExLmZUCmEwLnRvU3RyaW5nCnQ9aT9PYmplY3QuY3JlYXRlKG5ldyBBLmJDKCkuY29uc3RydWN0b3IucHJvdG90eXBlKTpPYmplY3QuY3JlYXRlKG5ldyBBLmE2KG51bGwsbnVsbCkuY29uc3RydWN0b3IucHJvdG90eXBlKQp0LiRpbml0aWFsaXplPXQuY29uc3RydWN0b3IKaWYoaSlzPWZ1bmN0aW9uIHN0YXRpY190ZWFyX29mZigpe3RoaXMuJGluaXRpYWxpemUoKX0KZWxzZSBzPWZ1bmN0aW9uIHRlYXJfb2ZmKGEyLGEzKXt0aGlzLiRpbml0aWFsaXplKGEyLGEzKX0KdC5jb25zdHJ1Y3Rvcj1zCnMucHJvdG90eXBlPXQKdC4kX25hbWU9Ywp0LiRfdGFyZ2V0PWEKcj0haQppZihyKXE9QS5kTShjLGEsaCxnKQplbHNle3QuJHN0YXRpY19uYW1lPWMKcT1hfXQuJFM9QS5lWShhMCxpLGgpCnRbYl09cQpmb3IocD1xLG89MTtvPGUubGVuZ3RoOysrbyl7bj1lW29dCmlmKHR5cGVvZiBuPT0ic3RyaW5nIil7bT1qW25dCmw9bgpuPW19ZWxzZSBsPSIiCms9ZFtvXQppZihrIT1udWxsKXtpZihyKW49QS5kTShsLG4saCxnKQp0W2tdPW59aWYobz09PWYpcD1ufXQuJEM9cAp0LiRSPWExLnJDCnQuJEQ9YTEuZFYKcmV0dXJuIHN9LAplWShhLGIsYyl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKHR5cGVvZiBhPT0ic3RyaW5nIil7aWYoYil0aHJvdyBBLmQoIkNhbm5vdCBjb21wdXRlIHNpZ25hdHVyZSBmb3Igc3RhdGljIHRlYXJvZmYuIikKcmV0dXJuIGZ1bmN0aW9uKGQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxkKX19KGEsQS5lVyl9dGhyb3cgQS5kKCJFcnJvciBpbiBmdW5jdGlvblR5cGUgb2YgdGVhcm9mZiIpfSwKZVooYSxiLGMsZCl7dmFyIHQ9QS5kTApzd2l0Y2goYj8tMTphKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcylbZV0oKX19KGMsdCkKY2FzZSAxOnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnKXtyZXR1cm4gZih0aGlzKVtlXShnKX19KGMsdCkKY2FzZSAyOnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgpe3JldHVybiBmKHRoaXMpW2VdKGcsaCl9fShjLHQpCmNhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoLGkpe3JldHVybiBmKHRoaXMpW2VdKGcsaCxpKX19KGMsdCkKY2FzZSA0OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSxqKXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSxqKX19KGMsdCkKY2FzZSA1OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSxqLGspe3JldHVybiBmKHRoaXMpW2VdKGcsaCxpLGosayl9fShjLHQpCmRlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoZih0aGlzKSxhcmd1bWVudHMpfX0oZCx0KX19LApkTShhLGIsYyxkKXt2YXIgdCxzCmlmKGMpcmV0dXJuIEEuZjAoYSxiLGQpCnQ9Yi5sZW5ndGgKcz1BLmVaKHQsZCxhLGIpCnJldHVybiBzfSwKZl8oYSxiLGMsZCl7dmFyIHQ9QS5kTCxzPUEuZVgKc3dpdGNoKGI/LTE6YSl7Y2FzZSAwOnRocm93IEEuZChuZXcgQS5iQSgiSW50ZXJjZXB0ZWQgZnVuY3Rpb24gd2l0aCBubyBhcmd1bWVudHMuIikpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcykpfX0oYyxzLHQpCmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgpfX0oYyxzLHQpCmNhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGkpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCxpKX19KGMscyx0KQpjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGope3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCxpLGopfX0oYyxzLHQpCmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGksaixrKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSxqLGspfX0oYyxzLHQpCmNhc2UgNjpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGksaixrLGwpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCxpLGosayxsKX19KGMscyx0KQpkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9W2codGhpcyldCkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHIsYXJndW1lbnRzKQpyZXR1cm4gZS5hcHBseShmKHRoaXMpLHIpfX0oZCxzLHQpfX0sCmYwKGEsYixjKXt2YXIgdCxzCmlmKCQuZEo9PW51bGwpJC5kSj1BLmRJKCJpbnRlcmNlcHRvciIpCmlmKCQuZEs9PW51bGwpJC5kSz1BLmRJKCJyZWNlaXZlciIpCnQ9Yi5sZW5ndGgKcz1BLmZfKHQsYyxhLGIpCnJldHVybiBzfSwKZHcoYSl7cmV0dXJuIEEuZjEoYSl9LAplVyhhLGIpe3JldHVybiBBLmNSKHYudHlwZVVuaXZlcnNlLEEuY2IoYS5hKSxiKX0sCmRMKGEpe3JldHVybiBhLmF9LAplWChhKXtyZXR1cm4gYS5ifSwKZEkoYSl7dmFyIHQscyxyLHE9bmV3IEEuYTYoInJlY2VpdmVyIiwiaW50ZXJjZXB0b3IiKSxwPUouZFMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocSkpCmZvcih0PXAubGVuZ3RoLHM9MDtzPHQ7KytzKXtyPXBbc10KaWYocVtyXT09PWEpcmV0dXJuIHJ9dGhyb3cgQS5kKEEuZEgoIkZpZWxkIG5hbWUgIithKyIgbm90IGZvdW5kLiIsbnVsbCkpfSwKaEsoYSl7dGhyb3cgQS5kKG5ldyBBLmJnKGEpKX0sCmhzKGEpe3JldHVybiB2LmdldElzb2xhdGVUYWcoYSl9LAppeihhLGIsYyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7dmFsdWU6YyxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KX0sCmhEKGEpe3ZhciB0LHMscixxLHAsbz0kLmVyLiQxKGEpLG49JC5kMVtvXQppZihuIT1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpuLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBuLml9dD0kLmQ2W29dCmlmKHQhPW51bGwpcmV0dXJuIHQKcz12LmludGVyY2VwdG9yc0J5VGFnW29dCmlmKHM9PW51bGwpe3I9JC5lbC4kMihhLG8pCmlmKHIhPW51bGwpe249JC5kMVtyXQppZihuIT1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpuLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBuLml9dD0kLmQ2W3JdCmlmKHQhPW51bGwpcmV0dXJuIHQKcz12LmludGVyY2VwdG9yc0J5VGFnW3JdCm89cn19aWYocz09bnVsbClyZXR1cm4gbnVsbAp0PXMucHJvdG90eXBlCnE9b1swXQppZihxPT09IiEiKXtuPUEuZDgodCkKJC5kMVtvXT1uCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm4sZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG4uaX1pZihxPT09In4iKXskLmQ2W29dPXQKcmV0dXJuIHR9aWYocT09PSItIil7cD1BLmQ4KHQpCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSksdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6cCxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gcC5pfWlmKHE9PT0iKyIpcmV0dXJuIEEuZXYoYSx0KQppZihxPT09IioiKXRocm93IEEuZChBLmUyKG8pKQppZih2LmxlYWZUYWdzW29dPT09dHJ1ZSl7cD1BLmQ4KHQpCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSksdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6cCxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gcC5pfWVsc2UgcmV0dXJuIEEuZXYoYSx0KX0sCmV2KGEsYil7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpCk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOkouZEIoYix0LG51bGwsbnVsbCksZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIGJ9LApkOChhKXtyZXR1cm4gSi5kQihhLCExLG51bGwsISFhLiRpYTkpfSwKaEYoYSxiLGMpe3ZhciB0PWIucHJvdG90eXBlCmlmKHYubGVhZlRhZ3NbYV09PT10cnVlKXJldHVybiBBLmQ4KHQpCmVsc2UgcmV0dXJuIEouZEIodCxjLG51bGwsbnVsbCl9LApoeSgpe2lmKCEwPT09JC5kQSlyZXR1cm4KJC5kQT0hMApBLmh6KCl9LApoeigpe3ZhciB0LHMscixxLHAsbyxuLG0KJC5kMT1PYmplY3QuY3JlYXRlKG51bGwpCiQuZDY9T2JqZWN0LmNyZWF0ZShudWxsKQpBLmh4KCkKdD12LmludGVyY2VwdG9yc0J5VGFnCnM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkKaWYodHlwZW9mIHdpbmRvdyE9InVuZGVmaW5lZCIpe3dpbmRvdwpyPWZ1bmN0aW9uKCl7fQpmb3IocT0wO3E8cy5sZW5ndGg7KytxKXtwPXNbcV0Kbz0kLmV3LiQxKHApCmlmKG8hPW51bGwpe249QS5oRihwLHRbcF0sbykKaWYobiE9bnVsbCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6bixlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyLnByb3RvdHlwZT1vfX19fWZvcihxPTA7cTxzLmxlbmd0aDsrK3Epe3A9c1txXQppZigvXltBLVphLXpfXS8udGVzdChwKSl7bT10W3BdCnRbIiEiK3BdPW0KdFsifiIrcF09bQp0WyItIitwXT1tCnRbIisiK3BdPW0KdFsiKiIrcF09bX19fSwKaHgoKXt2YXIgdCxzLHIscSxwLG8sbj1CLnAoKQpuPUEuYWwoQi5xLEEuYWwoQi5yLEEuYWwoQi5qLEEuYWwoQi5qLEEuYWwoQi50LEEuYWwoQi51LEEuYWwoQi52KEIuaSksbikpKSkpKSkKaWYodHlwZW9mIGRhcnROYXRpdmVEaXNwYXRjaEhvb2tzVHJhbnNmb3JtZXIhPSJ1bmRlZmluZWQiKXt0PWRhcnROYXRpdmVEaXNwYXRjaEhvb2tzVHJhbnNmb3JtZXIKaWYodHlwZW9mIHQ9PSJmdW5jdGlvbiIpdD1bdF0KaWYodC5jb25zdHJ1Y3Rvcj09QXJyYXkpZm9yKHM9MDtzPHQubGVuZ3RoOysrcyl7cj10W3NdCmlmKHR5cGVvZiByPT0iZnVuY3Rpb24iKW49cihuKXx8bn19cT1uLmdldFRhZwpwPW4uZ2V0VW5rbm93blRhZwpvPW4ucHJvdG90eXBlRm9yVGFnCiQuZXI9bmV3IEEuZDMocSkKJC5lbD1uZXcgQS5kNChwKQokLmV3PW5ldyBBLmQ1KG8pfSwKYWwoYSxiKXtyZXR1cm4gYShiKXx8Yn0sCmZjKGEsYixjLGQsZSxmKXt2YXIgdD1iPyJtIjoiIixzPWM/IiI6ImkiLHI9ZD8idSI6IiIscT1lPyJzIjoiIixwPWY/ImciOiIiLG89ZnVuY3Rpb24oZyxoKXt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZyxoKX1jYXRjaChuKXtyZXR1cm4gbn19KGEsdCtzK3IrcStwKQppZihvIGluc3RhbmNlb2YgUmVnRXhwKXJldHVybiBvCnRocm93IEEuZChBLmRQKCJJbGxlZ2FsIFJlZ0V4cCBwYXR0ZXJuICgiK1N0cmluZyhvKSsiKSIsYSkpfSwKaEkoYSl7aWYoL1tbXF17fSgpKis/LlxcXiR8XS8udGVzdChhKSlyZXR1cm4gYS5yZXBsYWNlKC9bW1xde30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKYXE6ZnVuY3Rpb24gYXEoKXt9LAphdzpmdW5jdGlvbiBhdyhhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApjbTpmdW5jdGlvbiBjbShhKXt0aGlzLmE9YX0sCmN5OmZ1bmN0aW9uIGN5KGEsYixjLGQsZSxmKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKYUc6ZnVuY3Rpb24gYUcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmJxOmZ1bmN0aW9uIGJxKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmJLOmZ1bmN0aW9uIGJLKGEpe3RoaXMuYT1hfSwKY3Y6ZnVuY3Rpb24gY3YoYSl7dGhpcy5hPWF9LApjMjpmdW5jdGlvbiBjMihhKXt0aGlzLmE9YQp0aGlzLmI9bnVsbH0sClY6ZnVuY3Rpb24gVigpe30sCmJjOmZ1bmN0aW9uIGJjKCl7fSwKYmQ6ZnVuY3Rpb24gYmQoKXt9LApiSDpmdW5jdGlvbiBiSCgpe30sCmJDOmZ1bmN0aW9uIGJDKCl7fSwKYTY6ZnVuY3Rpb24gYTYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmJBOmZ1bmN0aW9uIGJBKGEpe3RoaXMuYT1hfSwKRTpmdW5jdGlvbiBFKGEpe3ZhciBfPXRoaXMKXy5hPTAKXy5mPV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LApjcTpmdW5jdGlvbiBjcShhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKYnM6ZnVuY3Rpb24gYnMoYSl7dGhpcy5hPWF9LApidDpmdW5jdGlvbiBidChhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKZDM6ZnVuY3Rpb24gZDMoYSl7dGhpcy5hPWF9LApkNDpmdW5jdGlvbiBkNChhKXt0aGlzLmE9YX0sCmQ1OmZ1bmN0aW9uIGQ1KGEpe3RoaXMuYT1hfSwKY3A6ZnVuY3Rpb24gY3AoYSxiKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbH0sCmRaKGEsYil7dmFyIHQ9Yi5jCnJldHVybiB0PT1udWxsP2IuYz1BLmRuKGEsYi55LCEwKTp0fSwKZFkoYSxiKXt2YXIgdD1iLmMKcmV0dXJuIHQ9PW51bGw/Yi5jPUEuYjAoYSwiZFEiLFtiLnldKTp0fSwKZV8oYSl7dmFyIHQ9YS54CmlmKHQ9PT02fHx0PT09N3x8dD09PTgpcmV0dXJuIEEuZV8oYS55KQpyZXR1cm4gdD09PTExfHx0PT09MTJ9LApmbShhKXtyZXR1cm4gYS5hdH0sCmVwKGEpe3JldHVybiBBLmRwKHYudHlwZVVuaXZlcnNlLGEsITEpfSwKUihhLGIsYyxhMCl7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD1iLngKc3dpdGNoKGQpe2Nhc2UgNTpjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6cmV0dXJuIGIKY2FzZSA2OnQ9Yi55CnM9QS5SKGEsdCxjLGEwKQppZihzPT09dClyZXR1cm4gYgpyZXR1cm4gQS5lYyhhLHMsITApCmNhc2UgNzp0PWIueQpzPUEuUihhLHQsYyxhMCkKaWYocz09PXQpcmV0dXJuIGIKcmV0dXJuIEEuZG4oYSxzLCEwKQpjYXNlIDg6dD1iLnkKcz1BLlIoYSx0LGMsYTApCmlmKHM9PT10KXJldHVybiBiCnJldHVybiBBLmViKGEscywhMCkKY2FzZSA5OnI9Yi56CnE9QS5iNShhLHIsYyxhMCkKaWYocT09PXIpcmV0dXJuIGIKcmV0dXJuIEEuYjAoYSxiLnkscSkKY2FzZSAxMDpwPWIueQpvPUEuUihhLHAsYyxhMCkKbj1iLnoKbT1BLmI1KGEsbixjLGEwKQppZihvPT09cCYmbT09PW4pcmV0dXJuIGIKcmV0dXJuIEEuZGwoYSxvLG0pCmNhc2UgMTE6bD1iLnkKaz1BLlIoYSxsLGMsYTApCmo9Yi56Cmk9QS5oZihhLGosYyxhMCkKaWYoaz09PWwmJmk9PT1qKXJldHVybiBiCnJldHVybiBBLmVhKGEsayxpKQpjYXNlIDEyOmg9Yi56CmEwKz1oLmxlbmd0aApnPUEuYjUoYSxoLGMsYTApCnA9Yi55Cm89QS5SKGEscCxjLGEwKQppZihnPT09aCYmbz09PXApcmV0dXJuIGIKcmV0dXJuIEEuZG0oYSxvLGcsITApCmNhc2UgMTM6Zj1iLnkKaWYoZjxhMClyZXR1cm4gYgplPWNbZi1hMF0KaWYoZT09bnVsbClyZXR1cm4gYgpyZXR1cm4gZQpkZWZhdWx0OnRocm93IEEuZChBLmNjKCJBdHRlbXB0ZWQgdG8gc3Vic3RpdHV0ZSB1bmV4cGVjdGVkIFJUSSBraW5kICIrZCkpfX0sCmI1KGEsYixjLGQpe3ZhciB0LHMscixxLHA9Yi5sZW5ndGgsbz1BLmNTKHApCmZvcih0PSExLHM9MDtzPHA7KytzKXtyPWJbc10KcT1BLlIoYSxyLGMsZCkKaWYocSE9PXIpdD0hMApvW3NdPXF9cmV0dXJuIHQ/bzpifSwKaGcoYSxiLGMsZCl7dmFyIHQscyxyLHEscCxvLG49Yi5sZW5ndGgsbT1BLmNTKG4pCmZvcih0PSExLHM9MDtzPG47cys9Myl7cj1iW3NdCnE9YltzKzFdCnA9YltzKzJdCm89QS5SKGEscCxjLGQpCmlmKG8hPT1wKXQ9ITAKbS5zcGxpY2UocywzLHIscSxvKX1yZXR1cm4gdD9tOmJ9LApoZihhLGIsYyxkKXt2YXIgdCxzPWIuYSxyPUEuYjUoYSxzLGMsZCkscT1iLmIscD1BLmI1KGEscSxjLGQpLG89Yi5jLG49QS5oZyhhLG8sYyxkKQppZihyPT09cyYmcD09PXEmJm49PT1vKXJldHVybiBiCnQ9bmV3IEEuYlcoKQp0LmE9cgp0LmI9cAp0LmM9bgpyZXR1cm4gdH0sCml5KGEsYil7YVt2LmFycmF5UnRpXT1iCnJldHVybiBhfSwKaG8oYSl7dmFyIHQ9YS4kUwppZih0IT1udWxsKXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIEEuaHUodCkKcmV0dXJuIGEuJFMoKX1yZXR1cm4gbnVsbH0sCmVzKGEsYil7dmFyIHQKaWYoQS5lXyhiKSlpZihhIGluc3RhbmNlb2YgQS5WKXt0PUEuaG8oYSkKaWYodCE9bnVsbClyZXR1cm4gdH1yZXR1cm4gQS5jYihhKX0sCmNiKGEpe3ZhciB0CmlmKGEgaW5zdGFuY2VvZiBBLmope3Q9YS4kdGkKcmV0dXJuIHQhPW51bGw/dDpBLmRyKGEpfWlmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIEEuZk8oYSkKcmV0dXJuIEEuZHIoSi5hbShhKSl9LApmTyhhKXt2YXIgdD1hW3YuYXJyYXlSdGldLHM9dS5iCmlmKHQ9PW51bGwpcmV0dXJuIHMKaWYodC5jb25zdHJ1Y3RvciE9PXMuY29uc3RydWN0b3IpcmV0dXJuIHMKcmV0dXJuIHR9LAptKGEpe3ZhciB0PWEuJHRpCnJldHVybiB0IT1udWxsP3Q6QS5kcihhKX0sCmRyKGEpe3ZhciB0PWEuY29uc3RydWN0b3Iscz10LiRjY2FjaGUKaWYocyE9bnVsbClyZXR1cm4gcwpyZXR1cm4gQS5mWShhLHQpfSwKZlkoYSxiKXt2YXIgdD1hIGluc3RhbmNlb2YgQS5WP2EuX19wcm90b19fLl9fcHJvdG9fXy5jb25zdHJ1Y3RvcjpiLHM9QS5mTSh2LnR5cGVVbml2ZXJzZSx0Lm5hbWUpCmIuJGNjYWNoZT1zCnJldHVybiBzfSwKaHUoYSl7dmFyIHQscz12LnR5cGVzLHI9c1thXQppZih0eXBlb2Ygcj09InN0cmluZyIpe3Q9QS5kcCh2LnR5cGVVbml2ZXJzZSxyLCExKQpzW2FdPXQKcmV0dXJuIHR9cmV0dXJuIHJ9LApmWChhKXt2YXIgdCxzLHIscSxwPXRoaXMKaWYocD09PXUuSylyZXR1cm4gQS5haihwLGEsQS5oMSkKaWYoIUEuTShwKSlpZighKHA9PT11Ll8pKXQ9ITEKZWxzZSB0PSEwCmVsc2UgdD0hMAppZih0KXJldHVybiBBLmFqKHAsYSxBLmg0KQp0PXAueApzPXQ9PT02P3AueTpwCmlmKHM9PT11LlMpcj1BLmVrCmVsc2UgaWYocz09PXUuaXx8cz09PXUuSClyPUEuaDAKZWxzZSBpZihzPT09dS5OKXI9QS5oMgplbHNlIHI9cz09PXUudj9BLmRzOm51bGwKaWYociE9bnVsbClyZXR1cm4gQS5haihwLGEscikKaWYocy54PT09OSl7cT1zLnkKaWYocy56LmV2ZXJ5KEEuaEMpKXtwLnI9IiRpIitxCmlmKHE9PT0ibiIpcmV0dXJuIEEuYWoocCxhLEEuaF8pCnJldHVybiBBLmFqKHAsYSxBLmgzKX19ZWxzZSBpZih0PT09NylyZXR1cm4gQS5haihwLGEsQS5mVikKcmV0dXJuIEEuYWoocCxhLEEuZlQpfSwKYWooYSxiLGMpe2EuYj1jCnJldHVybiBhLmIoYil9LApmVyhhKXt2YXIgdCxzPXRoaXMscj1BLmZTCmlmKCFBLk0ocykpaWYoIShzPT09dS5fKSl0PSExCmVsc2UgdD0hMAplbHNlIHQ9ITAKaWYodClyPUEuZlEKZWxzZSBpZihzPT09dS5LKXI9QS5mUAplbHNle3Q9QS5iNihzKQppZih0KXI9QS5mVX1zLmE9cgpyZXR1cm4gcy5hKGEpfSwKY1coYSl7dmFyIHQscz1hLngKaWYoIUEuTShhKSlpZighKGE9PT11Ll8pKWlmKCEoYT09PXUuQSkpaWYocyE9PTcpdD1zPT09OCYmQS5jVyhhLnkpfHxhPT09dS5QfHxhPT09dS5UCmVsc2UgdD0hMAplbHNlIHQ9ITAKZWxzZSB0PSEwCmVsc2UgdD0hMApyZXR1cm4gdH0sCmZUKGEpe3ZhciB0PXRoaXMKaWYoYT09bnVsbClyZXR1cm4gQS5jVyh0KQpyZXR1cm4gQS5sKHYudHlwZVVuaXZlcnNlLEEuZXMoYSx0KSxudWxsLHQsbnVsbCl9LApmVihhKXtpZihhPT1udWxsKXJldHVybiEwCnJldHVybiB0aGlzLnkuYihhKX0sCmgzKGEpe3ZhciB0LHM9dGhpcwppZihhPT1udWxsKXJldHVybiBBLmNXKHMpCnQ9cy5yCmlmKGEgaW5zdGFuY2VvZiBBLmopcmV0dXJuISFhW3RdCnJldHVybiEhSi5hbShhKVt0XX0sCmhfKGEpe3ZhciB0LHM9dGhpcwppZihhPT1udWxsKXJldHVybiBBLmNXKHMpCmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4hMQppZihBcnJheS5pc0FycmF5KGEpKXJldHVybiEwCnQ9cy5yCmlmKGEgaW5zdGFuY2VvZiBBLmopcmV0dXJuISFhW3RdCnJldHVybiEhSi5hbShhKVt0XX0sCmZTKGEpe3ZhciB0LHM9dGhpcwppZihhPT1udWxsKXt0PUEuYjYocykKaWYodClyZXR1cm4gYX1lbHNlIGlmKHMuYihhKSlyZXR1cm4gYQpBLmVoKGEscyl9LApmVShhKXt2YXIgdD10aGlzCmlmKGE9PW51bGwpcmV0dXJuIGEKZWxzZSBpZih0LmIoYSkpcmV0dXJuIGEKQS5laChhLHQpfSwKZWgoYSxiKXt0aHJvdyBBLmQoQS5mQyhBLmU0KGEsQS5lcyhhLGIpLEEueShiLG51bGwpKSkpfSwKZTQoYSxiLGMpe3ZhciB0PUEuY2koYSkKcmV0dXJuIHQrIjogdHlwZSAnIitBLnkoYj09bnVsbD9BLmNiKGEpOmIsbnVsbCkrIicgaXMgbm90IGEgc3VidHlwZSBvZiB0eXBlICciK2MrIicifSwKZkMoYSl7cmV0dXJuIG5ldyBBLmJfKCJUeXBlRXJyb3I6ICIrYSl9LApxKGEsYil7cmV0dXJuIG5ldyBBLmJfKCJUeXBlRXJyb3I6ICIrQS5lNChhLG51bGwsYikpfSwKaDEoYSl7cmV0dXJuIGEhPW51bGx9LApmUChhKXtpZihhIT1udWxsKXJldHVybiBhCnRocm93IEEuZChBLnEoYSwiT2JqZWN0IikpfSwKaDQoYSl7cmV0dXJuITB9LApmUShhKXtyZXR1cm4gYX0sCmRzKGEpe3JldHVybiEwPT09YXx8ITE9PT1hfSwKaWooYSl7aWYoITA9PT1hKXJldHVybiEwCmlmKCExPT09YSlyZXR1cm4hMQp0aHJvdyBBLmQoQS5xKGEsImJvb2wiKSl9LAppbChhKXtpZighMD09PWEpcmV0dXJuITAKaWYoITE9PT1hKXJldHVybiExCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5kKEEucShhLCJib29sIikpfSwKaWsoYSl7aWYoITA9PT1hKXJldHVybiEwCmlmKCExPT09YSlyZXR1cm4hMQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEEuZChBLnEoYSwiYm9vbD8iKSl9LAppbShhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKdGhyb3cgQS5kKEEucShhLCJkb3VibGUiKSl9LAppcChhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmQoQS5xKGEsImRvdWJsZSIpKX0sCmlvKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEEuZChBLnEoYSwiZG91YmxlPyIpKX0sCmVrKGEpe3JldHVybiB0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1hfSwKaXEoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEpPT09YSlyZXR1cm4gYQp0aHJvdyBBLmQoQS5xKGEsImludCIpKX0sCmlzKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmQoQS5xKGEsImludCIpKX0sCmlyKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmQoQS5xKGEsImludD8iKSl9LApoMChhKXtyZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIifSwKaXQoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCnRocm93IEEuZChBLnEoYSwibnVtIikpfSwKaXYoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5kKEEucShhLCJudW0iKSl9LAppdShhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmQoQS5xKGEsIm51bT8iKSl9LApoMihhKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmcifSwKZHEoYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCnRocm93IEEuZChBLnEoYSwiU3RyaW5nIikpfSwKaXgoYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5kKEEucShhLCJTdHJpbmciKSl9LAppdyhhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmQoQS5xKGEsIlN0cmluZz8iKSl9LApoYihhLGIpe3ZhciB0LHMscgpmb3IodD0iIixzPSIiLHI9MDtyPGEubGVuZ3RoOysrcixzPSIsICIpdCs9cytBLnkoYVtyXSxiKQpyZXR1cm4gdH0sCmVpKGEyLGEzLGE0KXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExPSIsICIKaWYoYTQhPW51bGwpe3Q9YTQubGVuZ3RoCmlmKGEzPT1udWxsKXthMz1bXQpzPW51bGx9ZWxzZSBzPWEzLmxlbmd0aApyPWEzLmxlbmd0aApmb3IocT10O3E+MDstLXEpYTMucHVzaCgiVCIrKHIrcSkpCmZvcihwPXUuWCxvPXUuXyxuPSI8IixtPSIiLHE9MDtxPHQ7KytxLG09YTEpe249Qi5hLmFwKG4rbSxhM1thMy5sZW5ndGgtMS1xXSkKbD1hNFtxXQprPWwueAppZighKGs9PT0yfHxrPT09M3x8az09PTR8fGs9PT01fHxsPT09cCkpaWYoIShsPT09bykpaj0hMQplbHNlIGo9ITAKZWxzZSBqPSEwCmlmKCFqKW4rPSIgZXh0ZW5kcyAiK0EueShsLGEzKX1uKz0iPiJ9ZWxzZXtuPSIiCnM9bnVsbH1wPWEyLnkKaT1hMi56Cmg9aS5hCmc9aC5sZW5ndGgKZj1pLmIKZT1mLmxlbmd0aApkPWkuYwpjPWQubGVuZ3RoCmI9QS55KHAsYTMpCmZvcihhPSIiLGEwPSIiLHE9MDtxPGc7KytxLGEwPWExKWErPWEwK0EueShoW3FdLGEzKQppZihlPjApe2ErPWEwKyJbIgpmb3IoYTA9IiIscT0wO3E8ZTsrK3EsYTA9YTEpYSs9YTArQS55KGZbcV0sYTMpCmErPSJdIn1pZihjPjApe2ErPWEwKyJ7Igpmb3IoYTA9IiIscT0wO3E8YztxKz0zLGEwPWExKXthKz1hMAppZihkW3ErMV0pYSs9InJlcXVpcmVkICIKYSs9QS55KGRbcSsyXSxhMykrIiAiK2RbcV19YSs9In0ifWlmKHMhPW51bGwpe2EzLnRvU3RyaW5nCmEzLmxlbmd0aD1zfXJldHVybiBuKyIoIithKyIpID0+ICIrYn0sCnkoYSxiKXt2YXIgdCxzLHIscSxwLG8sbj1hLngKaWYobj09PTUpcmV0dXJuImVyYXNlZCIKaWYobj09PTIpcmV0dXJuImR5bmFtaWMiCmlmKG49PT0zKXJldHVybiJ2b2lkIgppZihuPT09MSlyZXR1cm4iTmV2ZXIiCmlmKG49PT00KXJldHVybiJhbnkiCmlmKG49PT02KXt0PUEueShhLnksYikKcmV0dXJuIHR9aWYobj09PTcpe3M9YS55CnQ9QS55KHMsYikKcj1zLngKcmV0dXJuKHI9PT0xMXx8cj09PTEyPyIoIit0KyIpIjp0KSsiPyJ9aWYobj09PTgpcmV0dXJuIkZ1dHVyZU9yPCIrQS55KGEueSxiKSsiPiIKaWYobj09PTkpe3E9QS5oaChhLnkpCnA9YS56CnJldHVybiBwLmxlbmd0aD4wP3ErKCI8IitBLmhiKHAsYikrIj4iKTpxfWlmKG49PT0xMSlyZXR1cm4gQS5laShhLGIsbnVsbCkKaWYobj09PTEyKXJldHVybiBBLmVpKGEueSxiLGEueikKaWYobj09PTEzKXtvPWEueQpyZXR1cm4gYltiLmxlbmd0aC0xLW9dfXJldHVybiI/In0sCmhoKGEpe3ZhciB0PXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHQhPW51bGwpcmV0dXJuIHQKcmV0dXJuIm1pbmlmaWVkOiIrYX0sCmZOKGEsYil7dmFyIHQ9YS50UltiXQpmb3IoO3R5cGVvZiB0PT0ic3RyaW5nIjspdD1hLnRSW3RdCnJldHVybiB0fSwKZk0oYSxiKXt2YXIgdCxzLHIscSxwLG89YS5lVCxuPW9bYl0KaWYobj09bnVsbClyZXR1cm4gQS5kcChhLGIsITEpCmVsc2UgaWYodHlwZW9mIG49PSJudW1iZXIiKXt0PW4Kcz1BLmIxKGEsNSwiIyIpCnI9QS5jUyh0KQpmb3IocT0wO3E8dDsrK3EpcltxXT1zCnA9QS5iMChhLGIscikKb1tiXT1wCnJldHVybiBwfWVsc2UgcmV0dXJuIG59LApmSyhhLGIpe3JldHVybiBBLmVkKGEudFIsYil9LApmSihhLGIpe3JldHVybiBBLmVkKGEuZVQsYil9LApkcChhLGIsYyl7dmFyIHQscz1hLmVDLHI9cy5nZXQoYikKaWYociE9bnVsbClyZXR1cm4gcgp0PUEuZTgoQS5lNihhLG51bGwsYixjKSkKcy5zZXQoYix0KQpyZXR1cm4gdH0sCmNSKGEsYixjKXt2YXIgdCxzLHI9Yi5RCmlmKHI9PW51bGwpcj1iLlE9bmV3IE1hcCgpCnQ9ci5nZXQoYykKaWYodCE9bnVsbClyZXR1cm4gdApzPUEuZTgoQS5lNihhLGIsYywhMCkpCnIuc2V0KGMscykKcmV0dXJuIHN9LApmTChhLGIsYyl7dmFyIHQscyxyLHE9Yi5hcwppZihxPT1udWxsKXE9Yi5hcz1uZXcgTWFwKCkKdD1jLmF0CnM9cS5nZXQodCkKaWYocyE9bnVsbClyZXR1cm4gcwpyPUEuZGwoYSxiLGMueD09PTEwP2MuejpbY10pCnEuc2V0KHQscikKcmV0dXJuIHJ9LApRKGEsYil7Yi5hPUEuZlcKYi5iPUEuZlgKcmV0dXJuIGJ9LApiMShhLGIsYyl7dmFyIHQscyxyPWEuZUMuZ2V0KGMpCmlmKHIhPW51bGwpcmV0dXJuIHIKdD1uZXcgQS5BKG51bGwsbnVsbCkKdC54PWIKdC5hdD1jCnM9QS5RKGEsdCkKYS5lQy5zZXQoYyxzKQpyZXR1cm4gc30sCmVjKGEsYixjKXt2YXIgdCxzPWIuYXQrIioiLHI9YS5lQy5nZXQocykKaWYociE9bnVsbClyZXR1cm4gcgp0PUEuZkgoYSxiLHMsYykKYS5lQy5zZXQocyx0KQpyZXR1cm4gdH0sCmZIKGEsYixjLGQpe3ZhciB0LHMscgppZihkKXt0PWIueAppZighQS5NKGIpKXM9Yj09PXUuUHx8Yj09PXUuVHx8dD09PTd8fHQ9PT02CmVsc2Ugcz0hMAppZihzKXJldHVybiBifXI9bmV3IEEuQShudWxsLG51bGwpCnIueD02CnIueT1iCnIuYXQ9YwpyZXR1cm4gQS5RKGEscil9LApkbihhLGIsYyl7dmFyIHQscz1iLmF0KyI/IixyPWEuZUMuZ2V0KHMpCmlmKHIhPW51bGwpcmV0dXJuIHIKdD1BLmZHKGEsYixzLGMpCmEuZUMuc2V0KHMsdCkKcmV0dXJuIHR9LApmRyhhLGIsYyxkKXt2YXIgdCxzLHIscQppZihkKXt0PWIueAppZighQS5NKGIpKWlmKCEoYj09PXUuUHx8Yj09PXUuVCkpaWYodCE9PTcpcz10PT09OCYmQS5iNihiLnkpCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCmlmKHMpcmV0dXJuIGIKZWxzZSBpZih0PT09MXx8Yj09PXUuQSlyZXR1cm4gdS5QCmVsc2UgaWYodD09PTYpe3I9Yi55CmlmKHIueD09PTgmJkEuYjYoci55KSlyZXR1cm4gcgplbHNlIHJldHVybiBBLmRaKGEsYil9fXE9bmV3IEEuQShudWxsLG51bGwpCnEueD03CnEueT1iCnEuYXQ9YwpyZXR1cm4gQS5RKGEscSl9LAplYihhLGIsYyl7dmFyIHQscz1iLmF0KyIvIixyPWEuZUMuZ2V0KHMpCmlmKHIhPW51bGwpcmV0dXJuIHIKdD1BLmZFKGEsYixzLGMpCmEuZUMuc2V0KHMsdCkKcmV0dXJuIHR9LApmRShhLGIsYyxkKXt2YXIgdCxzLHIKaWYoZCl7dD1iLngKaWYoIUEuTShiKSlpZighKGI9PT11Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMAppZihzfHxiPT09dS5LKXJldHVybiBiCmVsc2UgaWYodD09PTEpcmV0dXJuIEEuYjAoYSwiZFEiLFtiXSkKZWxzZSBpZihiPT09dS5QfHxiPT09dS5UKXJldHVybiB1Lk99cj1uZXcgQS5BKG51bGwsbnVsbCkKci54PTgKci55PWIKci5hdD1jCnJldHVybiBBLlEoYSxyKX0sCmZJKGEsYil7dmFyIHQscyxyPSIiK2IrIl4iLHE9YS5lQy5nZXQocikKaWYocSE9bnVsbClyZXR1cm4gcQp0PW5ldyBBLkEobnVsbCxudWxsKQp0Lng9MTMKdC55PWIKdC5hdD1yCnM9QS5RKGEsdCkKYS5lQy5zZXQocixzKQpyZXR1cm4gc30sCmM2KGEpe3ZhciB0LHMscixxPWEubGVuZ3RoCmZvcih0PSIiLHM9IiIscj0wO3I8cTsrK3Iscz0iLCIpdCs9cythW3JdLmF0CnJldHVybiB0fSwKZkQoYSl7dmFyIHQscyxyLHEscCxvPWEubGVuZ3RoCmZvcih0PSIiLHM9IiIscj0wO3I8bztyKz0zLHM9IiwiKXtxPWFbcl0KcD1hW3IrMV0/IiEiOiI6Igp0Kz1zK3ErcCthW3IrMl0uYXR9cmV0dXJuIHR9LApiMChhLGIsYyl7dmFyIHQscyxyLHE9YgppZihjLmxlbmd0aD4wKXErPSI8IitBLmM2KGMpKyI+Igp0PWEuZUMuZ2V0KHEpCmlmKHQhPW51bGwpcmV0dXJuIHQKcz1uZXcgQS5BKG51bGwsbnVsbCkKcy54PTkKcy55PWIKcy56PWMKaWYoYy5sZW5ndGg+MClzLmM9Y1swXQpzLmF0PXEKcj1BLlEoYSxzKQphLmVDLnNldChxLHIpCnJldHVybiByfSwKZGwoYSxiLGMpe3ZhciB0LHMscixxLHAsbwppZihiLng9PT0xMCl7dD1iLnkKcz1iLnouY29uY2F0KGMpfWVsc2V7cz1jCnQ9Yn1yPXQuYXQrKCI7PCIrQS5jNihzKSsiPiIpCnE9YS5lQy5nZXQocikKaWYocSE9bnVsbClyZXR1cm4gcQpwPW5ldyBBLkEobnVsbCxudWxsKQpwLng9MTAKcC55PXQKcC56PXMKcC5hdD1yCm89QS5RKGEscCkKYS5lQy5zZXQocixvKQpyZXR1cm4gb30sCmVhKGEsYixjKXt2YXIgdCxzLHIscSxwLG89Yi5hdCxuPWMuYSxtPW4ubGVuZ3RoLGw9Yy5iLGs9bC5sZW5ndGgsaj1jLmMsaT1qLmxlbmd0aCxoPSIoIitBLmM2KG4pCmlmKGs+MCl7dD1tPjA/IiwiOiIiCmgrPXQrIlsiK0EuYzYobCkrIl0ifWlmKGk+MCl7dD1tPjA/IiwiOiIiCmgrPXQrInsiK0EuZkQoaikrIn0ifXM9bysoaCsiKSIpCnI9YS5lQy5nZXQocykKaWYociE9bnVsbClyZXR1cm4gcgpxPW5ldyBBLkEobnVsbCxudWxsKQpxLng9MTEKcS55PWIKcS56PWMKcS5hdD1zCnA9QS5RKGEscSkKYS5lQy5zZXQocyxwKQpyZXR1cm4gcH0sCmRtKGEsYixjLGQpe3ZhciB0LHM9Yi5hdCsoIjwiK0EuYzYoYykrIj4iKSxyPWEuZUMuZ2V0KHMpCmlmKHIhPW51bGwpcmV0dXJuIHIKdD1BLmZGKGEsYixjLHMsZCkKYS5lQy5zZXQocyx0KQpyZXR1cm4gdH0sCmZGKGEsYixjLGQsZSl7dmFyIHQscyxyLHEscCxvLG4sbQppZihlKXt0PWMubGVuZ3RoCnM9QS5jUyh0KQpmb3Iocj0wLHE9MDtxPHQ7KytxKXtwPWNbcV0KaWYocC54PT09MSl7c1txXT1wOysrcn19aWYocj4wKXtvPUEuUihhLGIscywwKQpuPUEuYjUoYSxjLHMsMCkKcmV0dXJuIEEuZG0oYSxvLG4sYyE9PW4pfX1tPW5ldyBBLkEobnVsbCxudWxsKQptLng9MTIKbS55PWIKbS56PWMKbS5hdD1kCnJldHVybiBBLlEoYSxtKX0sCmU2KGEsYixjLGQpe3JldHVybnt1OmEsZTpiLHI6YyxzOltdLHA6MCxuOmR9fSwKZTgoYSl7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpPWEucixoPWEucwpmb3IodD1pLmxlbmd0aCxzPTA7czx0Oyl7cj1pLmNoYXJDb2RlQXQocykKaWYocj49NDgmJnI8PTU3KXM9QS5meChzKzEscixpLGgpCmVsc2UgaWYoKCgocnwzMik+Pj4wKS05NyY2NTUzNSk8MjZ8fHI9PT05NXx8cj09PTM2KXM9QS5lNyhhLHMsaSxoLCExKQplbHNlIGlmKHI9PT00NilzPUEuZTcoYSxzLGksaCwhMCkKZWxzZXsrK3MKc3dpdGNoKHIpe2Nhc2UgNDQ6YnJlYWsKY2FzZSA1ODpoLnB1c2goITEpCmJyZWFrCmNhc2UgMzM6aC5wdXNoKCEwKQpicmVhawpjYXNlIDU5OmgucHVzaChBLlAoYS51LGEuZSxoLnBvcCgpKSkKYnJlYWsKY2FzZSA5NDpoLnB1c2goQS5mSShhLnUsaC5wb3AoKSkpCmJyZWFrCmNhc2UgMzU6aC5wdXNoKEEuYjEoYS51LDUsIiMiKSkKYnJlYWsKY2FzZSA2NDpoLnB1c2goQS5iMShhLnUsMiwiQCIpKQpicmVhawpjYXNlIDEyNjpoLnB1c2goQS5iMShhLnUsMywifiIpKQpicmVhawpjYXNlIDYwOmgucHVzaChhLnApCmEucD1oLmxlbmd0aApicmVhawpjYXNlIDYyOnE9YS51CnA9aC5zcGxpY2UoYS5wKQpBLmRrKGEudSxhLmUscCkKYS5wPWgucG9wKCkKbz1oLnBvcCgpCmlmKHR5cGVvZiBvPT0ic3RyaW5nIiloLnB1c2goQS5iMChxLG8scCkpCmVsc2V7bj1BLlAocSxhLmUsbykKc3dpdGNoKG4ueCl7Y2FzZSAxMTpoLnB1c2goQS5kbShxLG4scCxhLm4pKQpicmVhawpkZWZhdWx0OmgucHVzaChBLmRsKHEsbixwKSkKYnJlYWt9fWJyZWFrCmNhc2UgMzg6QS5meShhLGgpCmJyZWFrCmNhc2UgNDI6cT1hLnUKaC5wdXNoKEEuZWMocSxBLlAocSxhLmUsaC5wb3AoKSksYS5uKSkKYnJlYWsKY2FzZSA2MzpxPWEudQpoLnB1c2goQS5kbihxLEEuUChxLGEuZSxoLnBvcCgpKSxhLm4pKQpicmVhawpjYXNlIDQ3OnE9YS51CmgucHVzaChBLmViKHEsQS5QKHEsYS5lLGgucG9wKCkpLGEubikpCmJyZWFrCmNhc2UgNDA6aC5wdXNoKGEucCkKYS5wPWgubGVuZ3RoCmJyZWFrCmNhc2UgNDE6cT1hLnUKbT1uZXcgQS5iVygpCmw9cS5zRUEKaz1xLnNFQQpvPWgucG9wKCkKaWYodHlwZW9mIG89PSJudW1iZXIiKXN3aXRjaChvKXtjYXNlLTE6bD1oLnBvcCgpCmJyZWFrCmNhc2UtMjprPWgucG9wKCkKYnJlYWsKZGVmYXVsdDpoLnB1c2gobykKYnJlYWt9ZWxzZSBoLnB1c2gobykKcD1oLnNwbGljZShhLnApCkEuZGsoYS51LGEuZSxwKQphLnA9aC5wb3AoKQptLmE9cAptLmI9bAptLmM9awpoLnB1c2goQS5lYShxLEEuUChxLGEuZSxoLnBvcCgpKSxtKSkKYnJlYWsKY2FzZSA5MTpoLnB1c2goYS5wKQphLnA9aC5sZW5ndGgKYnJlYWsKY2FzZSA5MzpwPWguc3BsaWNlKGEucCkKQS5kayhhLnUsYS5lLHApCmEucD1oLnBvcCgpCmgucHVzaChwKQpoLnB1c2goLTEpCmJyZWFrCmNhc2UgMTIzOmgucHVzaChhLnApCmEucD1oLmxlbmd0aApicmVhawpjYXNlIDEyNTpwPWguc3BsaWNlKGEucCkKQS5mQShhLnUsYS5lLHApCmEucD1oLnBvcCgpCmgucHVzaChwKQpoLnB1c2goLTIpCmJyZWFrCmRlZmF1bHQ6dGhyb3ciQmFkIGNoYXJhY3RlciAiK3J9fX1qPWgucG9wKCkKcmV0dXJuIEEuUChhLnUsYS5lLGopfSwKZngoYSxiLGMsZCl7dmFyIHQscyxyPWItNDgKZm9yKHQ9Yy5sZW5ndGg7YTx0OysrYSl7cz1jLmNoYXJDb2RlQXQoYSkKaWYoIShzPj00OCYmczw9NTcpKWJyZWFrCnI9cioxMCsocy00OCl9ZC5wdXNoKHIpCnJldHVybiBhfSwKZTcoYSxiLGMsZCxlKXt2YXIgdCxzLHIscSxwLG8sbj1iKzEKZm9yKHQ9Yy5sZW5ndGg7bjx0Oysrbil7cz1jLmNoYXJDb2RlQXQobikKaWYocz09PTQ2KXtpZihlKWJyZWFrCmU9ITB9ZWxzZXtpZighKCgoKHN8MzIpPj4+MCktOTcmNjU1MzUpPDI2fHxzPT09OTV8fHM9PT0zNikpcj1zPj00OCYmczw9NTcKZWxzZSByPSEwCmlmKCFyKWJyZWFrfX1xPWMuc3Vic3RyaW5nKGIsbikKaWYoZSl7dD1hLnUKcD1hLmUKaWYocC54PT09MTApcD1wLnkKbz1BLmZOKHQscC55KVtxXQppZihvPT1udWxsKUEuZEQoJ05vICInK3ErJyIgaW4gIicrQS5mbShwKSsnIicpCmQucHVzaChBLmNSKHQscCxvKSl9ZWxzZSBkLnB1c2gocSkKcmV0dXJuIG59LApmeShhLGIpe3ZhciB0PWIucG9wKCkKaWYoMD09PXQpe2IucHVzaChBLmIxKGEudSwxLCIwJiIpKQpyZXR1cm59aWYoMT09PXQpe2IucHVzaChBLmIxKGEudSw0LCIxJiIpKQpyZXR1cm59dGhyb3cgQS5kKEEuY2MoIlVuZXhwZWN0ZWQgZXh0ZW5kZWQgb3BlcmF0aW9uICIrQS5mKHQpKSl9LApQKGEsYixjKXtpZih0eXBlb2YgYz09InN0cmluZyIpcmV0dXJuIEEuYjAoYSxjLGEuc0VBKQplbHNlIGlmKHR5cGVvZiBjPT0ibnVtYmVyIilyZXR1cm4gQS5meihhLGIsYykKZWxzZSByZXR1cm4gY30sCmRrKGEsYixjKXt2YXIgdCxzPWMubGVuZ3RoCmZvcih0PTA7dDxzOysrdCljW3RdPUEuUChhLGIsY1t0XSl9LApmQShhLGIsYyl7dmFyIHQscz1jLmxlbmd0aApmb3IodD0yO3Q8czt0Kz0zKWNbdF09QS5QKGEsYixjW3RdKX0sCmZ6KGEsYixjKXt2YXIgdCxzLHI9Yi54CmlmKHI9PT0xMCl7aWYoYz09PTApcmV0dXJuIGIueQp0PWIuegpzPXQubGVuZ3RoCmlmKGM8PXMpcmV0dXJuIHRbYy0xXQpjLT1zCmI9Yi55CnI9Yi54fWVsc2UgaWYoYz09PTApcmV0dXJuIGIKaWYociE9PTkpdGhyb3cgQS5kKEEuY2MoIkluZGV4ZWQgYmFzZSBtdXN0IGJlIGFuIGludGVyZmFjZSB0eXBlIikpCnQ9Yi56CmlmKGM8PXQubGVuZ3RoKXJldHVybiB0W2MtMV0KdGhyb3cgQS5kKEEuY2MoIkJhZCBpbmRleCAiK2MrIiBmb3IgIitiLmgoMCkpKX0sCmwoYSxiLGMsZCxlKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsawppZihiPT09ZClyZXR1cm4hMAppZighQS5NKGQpKWlmKCEoZD09PXUuXykpdD0hMQplbHNlIHQ9ITAKZWxzZSB0PSEwCmlmKHQpcmV0dXJuITAKcz1iLngKaWYocz09PTQpcmV0dXJuITAKaWYoQS5NKGIpKXJldHVybiExCmlmKGIueCE9PTEpdD0hMQplbHNlIHQ9ITAKaWYodClyZXR1cm4hMApyPXM9PT0xMwppZihyKWlmKEEubChhLGNbYi55XSxjLGQsZSkpcmV0dXJuITAKcT1kLngKdD1iPT09dS5QfHxiPT09dS5UCmlmKHQpe2lmKHE9PT04KXJldHVybiBBLmwoYSxiLGMsZC55LGUpCnJldHVybiBkPT09dS5QfHxkPT09dS5UfHxxPT09N3x8cT09PTZ9aWYoZD09PXUuSyl7aWYocz09PTgpcmV0dXJuIEEubChhLGIueSxjLGQsZSkKaWYocz09PTYpcmV0dXJuIEEubChhLGIueSxjLGQsZSkKcmV0dXJuIHMhPT03fWlmKHM9PT02KXJldHVybiBBLmwoYSxiLnksYyxkLGUpCmlmKHE9PT02KXt0PUEuZFooYSxkKQpyZXR1cm4gQS5sKGEsYixjLHQsZSl9aWYocz09PTgpe2lmKCFBLmwoYSxiLnksYyxkLGUpKXJldHVybiExCnJldHVybiBBLmwoYSxBLmRZKGEsYiksYyxkLGUpfWlmKHM9PT03KXt0PUEubChhLHUuUCxjLGQsZSkKcmV0dXJuIHQmJkEubChhLGIueSxjLGQsZSl9aWYocT09PTgpe2lmKEEubChhLGIsYyxkLnksZSkpcmV0dXJuITAKcmV0dXJuIEEubChhLGIsYyxBLmRZKGEsZCksZSl9aWYocT09PTcpe3Q9QS5sKGEsYixjLHUuUCxlKQpyZXR1cm4gdHx8QS5sKGEsYixjLGQueSxlKX1pZihyKXJldHVybiExCnQ9cyE9PTExCmlmKCghdHx8cz09PTEyKSYmZD09PXUuWilyZXR1cm4hMAppZihxPT09MTIpe2lmKGI9PT11LmcpcmV0dXJuITAKaWYocyE9PTEyKXJldHVybiExCnA9Yi56Cm89ZC56Cm49cC5sZW5ndGgKaWYobiE9PW8ubGVuZ3RoKXJldHVybiExCmM9Yz09bnVsbD9wOnAuY29uY2F0KGMpCmU9ZT09bnVsbD9vOm8uY29uY2F0KGUpCmZvcihtPTA7bTxuOysrbSl7bD1wW21dCms9b1ttXQppZighQS5sKGEsbCxjLGssZSl8fCFBLmwoYSxrLGUsbCxjKSlyZXR1cm4hMX1yZXR1cm4gQS5laihhLGIueSxjLGQueSxlKX1pZihxPT09MTEpe2lmKGI9PT11LmcpcmV0dXJuITAKaWYodClyZXR1cm4hMQpyZXR1cm4gQS5laihhLGIsYyxkLGUpfWlmKHM9PT05KXtpZihxIT09OSlyZXR1cm4hMQpyZXR1cm4gQS5mWihhLGIsYyxkLGUpfXJldHVybiExfSwKZWooYTIsYTMsYTQsYTUsYTYpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEsYTAsYTEKaWYoIUEubChhMixhMy55LGE0LGE1LnksYTYpKXJldHVybiExCnQ9YTMuegpzPWE1LnoKcj10LmEKcT1zLmEKcD1yLmxlbmd0aApvPXEubGVuZ3RoCmlmKHA+bylyZXR1cm4hMQpuPW8tcAptPXQuYgpsPXMuYgprPW0ubGVuZ3RoCmo9bC5sZW5ndGgKaWYocCtrPG8railyZXR1cm4hMQpmb3IoaT0wO2k8cDsrK2kpe2g9cltpXQppZighQS5sKGEyLHFbaV0sYTYsaCxhNCkpcmV0dXJuITF9Zm9yKGk9MDtpPG47KytpKXtoPW1baV0KaWYoIUEubChhMixxW3AraV0sYTYsaCxhNCkpcmV0dXJuITF9Zm9yKGk9MDtpPGo7KytpKXtoPW1bbitpXQppZighQS5sKGEyLGxbaV0sYTYsaCxhNCkpcmV0dXJuITF9Zz10LmMKZj1zLmMKZT1nLmxlbmd0aApkPWYubGVuZ3RoCmZvcihjPTAsYj0wO2I8ZDtiKz0zKXthPWZbYl0KZm9yKDshMDspe2lmKGM+PWUpcmV0dXJuITEKYTA9Z1tjXQpjKz0zCmlmKGE8YTApcmV0dXJuITEKYTE9Z1tjLTJdCmlmKGEwPGEpe2lmKGExKXJldHVybiExCmNvbnRpbnVlfWg9ZltiKzFdCmlmKGExJiYhaClyZXR1cm4hMQpoPWdbYy0xXQppZighQS5sKGEyLGZbYisyXSxhNixoLGE0KSlyZXR1cm4hMQpicmVha319Zm9yKDtjPGU7KXtpZihnW2MrMV0pcmV0dXJuITEKYys9M31yZXR1cm4hMH0sCmZaKGEsYixjLGQsZSl7dmFyIHQscyxyLHEscCxvLG4sbT1iLnksbD1kLnkKZm9yKDttIT09bDspe3Q9YS50UlttXQppZih0PT1udWxsKXJldHVybiExCmlmKHR5cGVvZiB0PT0ic3RyaW5nIil7bT10CmNvbnRpbnVlfXM9dFtsXQppZihzPT1udWxsKXJldHVybiExCnI9cy5sZW5ndGgKcT1yPjA/bmV3IEFycmF5KHIpOnYudHlwZVVuaXZlcnNlLnNFQQpmb3IocD0wO3A8cjsrK3ApcVtwXT1BLmNSKGEsYixzW3BdKQpyZXR1cm4gQS5lZShhLHEsbnVsbCxjLGQueixlKX1vPWIuegpuPWQuegpyZXR1cm4gQS5lZShhLG8sbnVsbCxjLG4sZSl9LAplZShhLGIsYyxkLGUsZil7dmFyIHQscyxyLHE9Yi5sZW5ndGgKZm9yKHQ9MDt0PHE7Kyt0KXtzPWJbdF0Kcj1lW3RdCmlmKCFBLmwoYSxzLGQscixmKSlyZXR1cm4hMX1yZXR1cm4hMH0sCmI2KGEpe3ZhciB0LHM9YS54CmlmKCEoYT09PXUuUHx8YT09PXUuVCkpaWYoIUEuTShhKSlpZihzIT09NylpZighKHM9PT02JiZBLmI2KGEueSkpKXQ9cz09PTgmJkEuYjYoYS55KQplbHNlIHQ9ITAKZWxzZSB0PSEwCmVsc2UgdD0hMAplbHNlIHQ9ITAKcmV0dXJuIHR9LApoQyhhKXt2YXIgdAppZighQS5NKGEpKWlmKCEoYT09PXUuXykpdD0hMQplbHNlIHQ9ITAKZWxzZSB0PSEwCnJldHVybiB0fSwKTShhKXt2YXIgdD1hLngKcmV0dXJuIHQ9PT0yfHx0PT09M3x8dD09PTR8fHQ9PT01fHxhPT09dS5YfSwKZWQoYSxiKXt2YXIgdCxzLHI9T2JqZWN0LmtleXMoYikscT1yLmxlbmd0aApmb3IodD0wO3Q8cTsrK3Qpe3M9clt0XQphW3NdPWJbc119fSwKY1MoYSl7cmV0dXJuIGE+MD9uZXcgQXJyYXkoYSk6di50eXBlVW5pdmVyc2Uuc0VBfSwKQTpmdW5jdGlvbiBBKGEsYil7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLnc9Xy5yPV8uYz1udWxsCl8ueD0wCl8uYXQ9Xy5hcz1fLlE9Xy56PV8ueT1udWxsfSwKYlc6ZnVuY3Rpb24gYlcoKXt0aGlzLmM9dGhpcy5iPXRoaXMuYT1udWxsfSwKYlQ6ZnVuY3Rpb24gYlQoKXt9LApiXzpmdW5jdGlvbiBiXyhhKXt0aGlzLmE9YX0sCmZuKCl7dmFyIHQscyxyPXt9CmlmKHNlbGYuc2NoZWR1bGVJbW1lZGlhdGUhPW51bGwpcmV0dXJuIEEuaGwoKQppZihzZWxmLk11dGF0aW9uT2JzZXJ2ZXIhPW51bGwmJnNlbGYuZG9jdW1lbnQhPW51bGwpe3Q9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKQpzPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpCnIuYT1udWxsCm5ldyBzZWxmLk11dGF0aW9uT2JzZXJ2ZXIoQS5jYShuZXcgQS5jQihyKSwxKSkub2JzZXJ2ZSh0LHtjaGlsZExpc3Q6dHJ1ZX0pCnJldHVybiBuZXcgQS5jQShyLHQscyl9ZWxzZSBpZihzZWxmLnNldEltbWVkaWF0ZSE9bnVsbClyZXR1cm4gQS5obSgpCnJldHVybiBBLmhuKCl9LApmbyhhKXtzZWxmLnNjaGVkdWxlSW1tZWRpYXRlKEEuY2EobmV3IEEuY0MoYSksMCkpfSwKZnAoYSl7c2VsZi5zZXRJbW1lZGlhdGUoQS5jYShuZXcgQS5jRChhKSwwKSl9LApmcShhKXtBLmZCKDAsYSl9LApmQihhLGIpe3ZhciB0PW5ldyBBLmNQKCkKdC5hRyhhLGIpCnJldHVybiB0fSwKaWkoYSl7cmV0dXJuIG5ldyBBLmFpKGEsMSl9LApmdCgpe3JldHVybiBCLkV9LApmdShhKXtyZXR1cm4gbmV3IEEuYWkoYSwzKX0sCmg3KGEpe3JldHVybiBuZXcgQS5jNChhKX0sCmg4KCl7dmFyIHQscwpmb3IodD0kLmFrO3QhPW51bGw7dD0kLmFrKXskLmI0PW51bGwKcz10LmIKJC5haz1zCmlmKHM9PW51bGwpJC5iMz1udWxsCnQuYS4kMCgpfX0sCmhlKCl7JC5kdD0hMAp0cnl7QS5oOCgpfWZpbmFsbHl7JC5iND1udWxsCiQuZHQ9ITEKaWYoJC5hayE9bnVsbCkkLmRFKCkuJDEoQS5lbSgpKX19LApoYyhhKXt2YXIgdD1uZXcgQS5iTihhKSxzPSQuYjMKaWYocz09bnVsbCl7JC5haz0kLmIzPXQKaWYoISQuZHQpJC5kRSgpLiQxKEEuZW0oKSl9ZWxzZSAkLmIzPXMuYj10fSwKaGQoYSl7dmFyIHQscyxyLHE9JC5hawppZihxPT1udWxsKXtBLmhjKGEpCiQuYjQ9JC5iMwpyZXR1cm59dD1uZXcgQS5iTihhKQpzPSQuYjQKaWYocz09bnVsbCl7dC5iPXEKJC5haz0kLmI0PXR9ZWxzZXtyPXMuYgp0LmI9cgokLmI0PXMuYj10CmlmKHI9PW51bGwpJC5iMz10fX0sCmg5KGEsYil7QS5oZChuZXcgQS5jWChhLGIpKX0sCmhhKGEsYixjLGQsZSl7dmFyIHQscz0kLmFQCmlmKHM9PT1jKXJldHVybiBkLiQxKGUpCiQuYVA9Ywp0PXMKdHJ5e3M9ZC4kMShlKQpyZXR1cm4gc31maW5hbGx5eyQuYVA9dH19LApjQjpmdW5jdGlvbiBjQihhKXt0aGlzLmE9YX0sCmNBOmZ1bmN0aW9uIGNBKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmNDOmZ1bmN0aW9uIGNDKGEpe3RoaXMuYT1hfSwKY0Q6ZnVuY3Rpb24gY0QoYSl7dGhpcy5hPWF9LApjUDpmdW5jdGlvbiBjUCgpe30sCmNROmZ1bmN0aW9uIGNRKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAphaTpmdW5jdGlvbiBhaShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKYVo6ZnVuY3Rpb24gYVooYSl7dmFyIF89dGhpcwpfLmE9YQpfLmQ9Xy5jPV8uYj1udWxsfSwKYzQ6ZnVuY3Rpb24gYzQoYSl7dGhpcy5hPWF9LApiWDpmdW5jdGlvbiBiWChhLGIpe3ZhciBfPXRoaXMKXy5hPTAKXy5iPWEKXy5jPW51bGwKXy4kdGk9Yn0sCmJOOmZ1bmN0aW9uIGJOKGEpe3RoaXMuYT1hCnRoaXMuYj1udWxsfSwKYU06ZnVuY3Rpb24gYU0oKXt9LApjeDpmdW5jdGlvbiBjeChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKYkQ6ZnVuY3Rpb24gYkQoKXt9LApjVTpmdW5jdGlvbiBjVSgpe30sCmNYOmZ1bmN0aW9uIGNYKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApjSjpmdW5jdGlvbiBjSigpe30sCmNLOmZ1bmN0aW9uIGNLKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmZkKGEsYixjLGQpe3JldHVybiBBLmZ2KEEuaHAoKSxhLGIsYyxkKX0sCmZmKGEsYixjKXtyZXR1cm4gQS5lbyhhLG5ldyBBLkUoYi5wKCJAPDA+IikuUChjKS5wKCJFPDEsMj4iKSkpfSwKZmUoYSxiKXtyZXR1cm4gbmV3IEEuRShhLnAoIkA8MD4iKS5QKGIpLnAoIkU8MSwyPiIpKX0sCmZ2KGEsYixjLGQsZSl7dmFyIHQ9YyE9bnVsbD9jOm5ldyBBLmNIKGQpCnJldHVybiBuZXcgQS5hUihhLGIsdCxkLnAoIkA8MD4iKS5QKGUpLnAoImFSPDEsMj4iKSl9LAphQihhKXtyZXR1cm4gbmV3IEEuYVMoYS5wKCJhUzwwPiIpKX0sCmRqKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKQp0WyI8bm9uLWlkZW50aWZpZXIta2V5PiJdPXQKZGVsZXRlIHRbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHR9LApmdyhhLGIpe3ZhciB0PW5ldyBBLmFUKGEsYikKdC5jPWEuZQpyZXR1cm4gdH0sCmZSKGEsYil7cmV0dXJuIEouYTMoYSxiKX0sCmY3KGEsYixjKXt2YXIgdCxzCmlmKEEuZHUoYSkpe2lmKGI9PT0iKCImJmM9PT0iKSIpcmV0dXJuIiguLi4pIgpyZXR1cm4gYisiLi4uIitjfXQ9W10KJC5hMS5wdXNoKGEpCnRyeXtBLmg1KGEsdCl9ZmluYWxseXskLmExLnBvcCgpfXM9QS5lMChiLHQsIiwgIikrYwpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmRjKGEsYixjKXt2YXIgdCxzCmlmKEEuZHUoYSkpcmV0dXJuIGIrIi4uLiIrYwp0PW5ldyBBLmJFKGIpCiQuYTEucHVzaChhKQp0cnl7cz10CnMuYT1BLmUwKHMuYSxhLCIsICIpfWZpbmFsbHl7JC5hMS5wb3AoKX10LmErPWMKcz10LmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LApkdShhKXt2YXIgdCxzCmZvcih0PSQuYTEubGVuZ3RoLHM9MDtzPHQ7KytzKWlmKGE9PT0kLmExW3NdKXJldHVybiEwCnJldHVybiExfSwKaDUoYSxiKXt2YXIgdCxzLHIscSxwLG8sbixtPWEuZ2woYSksbD0wLGs9MAp3aGlsZSghMCl7aWYoIShsPDgwfHxrPDMpKWJyZWFrCmlmKCFtLmooKSlyZXR1cm4KdD1BLmYobS5naygpKQpiLnB1c2godCkKbCs9dC5sZW5ndGgrMjsrK2t9aWYoIW0uaigpKXtpZihrPD01KXJldHVybgpzPWIucG9wKCkKcj1iLnBvcCgpfWVsc2V7cT1tLmdrKCk7KytrCmlmKCFtLmooKSl7aWYoazw9NCl7Yi5wdXNoKEEuZihxKSkKcmV0dXJufXM9QS5mKHEpCnI9Yi5wb3AoKQpsKz1zLmxlbmd0aCsyfWVsc2V7cD1tLmdrKCk7KytrCmZvcig7bS5qKCk7cT1wLHA9byl7bz1tLmdrKCk7KytrCmlmKGs+MTAwKXt3aGlsZSghMCl7aWYoIShsPjc1JiZrPjMpKWJyZWFrCmwtPWIucG9wKCkubGVuZ3RoKzI7LS1rfWIucHVzaCgiLi4uIikKcmV0dXJufX1yPUEuZihxKQpzPUEuZihwKQpsKz1zLmxlbmd0aCtyLmxlbmd0aCs0fX1pZihrPmIubGVuZ3RoKzIpe2wrPTUKbj0iLi4uIn1lbHNlIG49bnVsbAp3aGlsZSghMCl7aWYoIShsPjgwJiZiLmxlbmd0aD4zKSlicmVhawpsLT1iLnBvcCgpLmxlbmd0aCsyCmlmKG49PW51bGwpe2wrPTUKbj0iLi4uIn19aWYobiE9bnVsbCliLnB1c2gobikKYi5wdXNoKHIpCmIucHVzaChzKX0sCmRVKGEsYil7dmFyIHQscyxyPUEuYUIoYikKZm9yKHQ9YS5sZW5ndGgscz0wO3M8YS5sZW5ndGg7YS5sZW5ndGg9PT10fHwoMCxBLmRDKShhKSwrK3Mpci5xKDAsYi5hKGFbc10pKQpyZXR1cm4gcn0sCmRmKGEpe3ZhciB0LHM9e30KaWYoQS5kdShhKSlyZXR1cm4iey4uLn0iCnQ9bmV3IEEuYkUoIiIpCnRyeXskLmExLnB1c2goYSkKdC5hKz0ieyIKcy5hPSEwCmEudigwLG5ldyBBLmNzKHMsdCkpCnQuYSs9In0ifWZpbmFsbHl7JC5hMS5wb3AoKX1zPXQuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmFSOmZ1bmN0aW9uIGFSKGEsYixjLGQpe3ZhciBfPXRoaXMKXy53PWEKXy54PWIKXy55PWMKXy5hPTAKXy5mPV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWR9LApjSDpmdW5jdGlvbiBjSChhKXt0aGlzLmE9YX0sCmFTOmZ1bmN0aW9uIGFTKGEpe3ZhciBfPXRoaXMKXy5hPTAKXy5mPV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LApjSTpmdW5jdGlvbiBjSShhKXt0aGlzLmE9YQp0aGlzLmM9dGhpcy5iPW51bGx9LAphVDpmdW5jdGlvbiBhVChhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKYmw6ZnVuY3Rpb24gYmwoKXt9LAphQzpmdW5jdGlvbiBhQygpe30sCmEwOmZ1bmN0aW9uIGEwKCl7fSwKYUQ6ZnVuY3Rpb24gYUQoKXt9LApjczpmdW5jdGlvbiBjcyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSjpmdW5jdGlvbiBKKCl7fSwKYUs6ZnVuY3Rpb24gYUsoKXt9LAphSjpmdW5jdGlvbiBhSigpe30sCmFXOmZ1bmN0aW9uIGFXKCl7fSwKYVU6ZnVuY3Rpb24gYVUoKXt9LAphWDpmdW5jdGlvbiBhWCgpe30sCmIyOmZ1bmN0aW9uIGIyKCl7fSwKZXQoYSxiLGMpe3ZhciB0PUEuZmkoYSxjKQppZih0IT1udWxsKXJldHVybiB0CnRocm93IEEuZChBLmRQKGEsbnVsbCkpfSwKZjMoYSl7aWYoYSBpbnN0YW5jZW9mIEEuVilyZXR1cm4gYS5oKDApCnJldHVybiJJbnN0YW5jZSBvZiAnIitBLmN3KGEpKyInIn0sCmY0KGEsYil7YT1BLmQoYSkKYS5zdGFjaz1iLmgoMCkKdGhyb3cgYQp0aHJvdyBBLmQoInVucmVhY2hhYmxlIil9LApmZyhhLGIsYyl7dmFyIHQscz1KLmRSKGEpCmlmKGEhPT0wJiZiIT1udWxsKWZvcih0PTA7dDxzLmxlbmd0aDsrK3Qpc1t0XT1iCnJldHVybiBzfSwKZFYoYSxiKXt2YXIgdCxzPVtdCmZvcih0PWEuZ2woYSk7dC5qKCk7KXMucHVzaCh0LmdrKCkpCmlmKGIpcmV0dXJuIHMKcmV0dXJuIEouZFMocyl9LApmbChhKXtyZXR1cm4gbmV3IEEuY3AoYSxBLmZjKGEsITEsITAsITEsITEsITEpKX0sCmUwKGEsYixjKXt2YXIgdD1KLmE0KGIpCmlmKCF0LmooKSlyZXR1cm4gYQppZihjLmxlbmd0aD09PTApe2RvIGErPUEuZih0LmdrKCkpCndoaWxlKHQuaigpKX1lbHNle2ErPUEuZih0LmdrKCkpCmZvcig7dC5qKCk7KWE9YStjK0EuZih0LmdrKCkpfXJldHVybiBhfSwKY2koYSl7aWYodHlwZW9mIGE9PSJudW1iZXIifHxBLmRzKGEpfHxhPT1udWxsKXJldHVybiBKLmI3KGEpCmlmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkKcmV0dXJuIEEuZjMoYSl9LApjYyhhKXtyZXR1cm4gbmV3IEEuYmEoYSl9LApkSChhLGIpe3JldHVybiBuZXcgQS5GKCExLG51bGwsYixhKX0sCmVWKGEsYixjKXtyZXR1cm4gbmV3IEEuRighMCxhLGIsYyl9LApmaihhLGIpe3JldHVybiBuZXcgQS5hSShudWxsLG51bGwsITAsYSxiLCJWYWx1ZSBub3QgaW4gcmFuZ2UiKX0sCmRnKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBBLmFJKGIsYywhMCxhLGQsIkludmFsaWQgdmFsdWUiKX0sCmZrKGEsYixjKXtpZigwPmF8fGE+Yyl0aHJvdyBBLmQoQS5kZyhhLDAsYywic3RhcnQiLG51bGwpKQppZihiIT1udWxsKXtpZihhPmJ8fGI+Yyl0aHJvdyBBLmQoQS5kZyhiLGEsYywiZW5kIixudWxsKSkKcmV0dXJuIGJ9cmV0dXJuIGN9LApkWChhLGIpe2lmKGE8MCl0aHJvdyBBLmQoQS5kZyhhLDAsbnVsbCxiLG51bGwpKQpyZXR1cm4gYX0sCmF4KGEsYixjLGQsZSl7dmFyIHQ9ZT09bnVsbD9KLmFwKGIpOmUKcmV0dXJuIG5ldyBBLmJrKHQsITAsYSxjLCJJbmRleCBvdXQgb2YgcmFuZ2UiKX0sCmUzKGEpe3JldHVybiBuZXcgQS5iTChhKX0sCmUyKGEpe3JldHVybiBuZXcgQS5iSihhKX0sCmRoKGEpe3JldHVybiBuZXcgQS5hYihhKX0sClcoYSl7cmV0dXJuIG5ldyBBLmJlKGEpfSwKZFAoYSxiKXtyZXR1cm4gbmV3IEEuY2woYSxiKX0sCms6ZnVuY3Rpb24gaygpe30sCmJhOmZ1bmN0aW9uIGJhKGEpe3RoaXMuYT1hfSwKYkk6ZnVuY3Rpb24gYkkoKXt9LApieTpmdW5jdGlvbiBieSgpe30sCkY6ZnVuY3Rpb24gRihhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKYUk6ZnVuY3Rpb24gYUkoYSxiLGMsZCxlLGYpe3ZhciBfPXRoaXMKXy5lPWEKXy5mPWIKXy5hPWMKXy5iPWQKXy5jPWUKXy5kPWZ9LApiazpmdW5jdGlvbiBiayhhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5mPWEKXy5hPWIKXy5iPWMKXy5jPWQKXy5kPWV9LApiTDpmdW5jdGlvbiBiTChhKXt0aGlzLmE9YX0sCmJKOmZ1bmN0aW9uIGJKKGEpe3RoaXMuYT1hfSwKYWI6ZnVuY3Rpb24gYWIoYSl7dGhpcy5hPWF9LApiZTpmdW5jdGlvbiBiZShhKXt0aGlzLmE9YX0sCmFMOmZ1bmN0aW9uIGFMKCl7fSwKYmc6ZnVuY3Rpb24gYmcoYSl7dGhpcy5hPWF9LApjRjpmdW5jdGlvbiBjRihhKXt0aGlzLmE9YX0sCmNsOmZ1bmN0aW9uIGNsKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAphejpmdW5jdGlvbiBheigpe30sCmJtOmZ1bmN0aW9uIGJtKCl7fSwKdDpmdW5jdGlvbiB0KCl7fSwKajpmdW5jdGlvbiBqKCl7fSwKYkU6ZnVuY3Rpb24gYkUoYSl7dGhpcy5hPWF9LApkaShhLGIpe3ZhciB0LHMscgpmb3IodD1KLmE0KGIpLHM9QS5tKHQpLmM7dC5qKCk7KXtyPXQuZAphLmFwcGVuZENoaWxkKHI9PW51bGw/cy5hKHIpOnIpfX0sCmYyKGEsYixjKXt2YXIgdD1kb2N1bWVudC5ib2R5CnQudG9TdHJpbmcKdD1uZXcgQS5hZihuZXcgQS5vKEIuaC5BKHQsYSxiLGMpKSxuZXcgQS5jaCgpKQpyZXR1cm4gdS5oLmEodC5nSCh0KSl9LAphdChhKXt2YXIgdCxzLHI9ImVsZW1lbnQgdGFnIHVuYXZhaWxhYmxlIgp0cnl7dD1KLlMoYSkKdC5nYW4oYSkKcj10LmdhbihhKX1jYXRjaChzKXt9cmV0dXJuIHJ9LApiVihhLGIsYyxkKXt2YXIgdD1BLmhqKG5ldyBBLmNFKGMpLHUueikKaWYodCE9bnVsbCYmITApSi5lTyhhLGIsdCwhMSkKcmV0dXJuIG5ldyBBLmJVKGEsYix0LCExKX0sCmU1KGEpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxzPW5ldyBBLmNMKHQsd2luZG93LmxvY2F0aW9uKQpzPW5ldyBBLmFoKHMpCnMuYUUoYSkKcmV0dXJuIHN9LApmcihhLGIsYyxkKXtyZXR1cm4hMH0sCmZzKGEsYixjLGQpe3ZhciB0LHM9ZC5hLHI9cy5hCnIuaHJlZj1jCnQ9ci5ob3N0bmFtZQpzPXMuYgppZighKHQ9PXMuaG9zdG5hbWUmJnIucG9ydD09PXMucG9ydCYmci5wcm90b2NvbD09PXMucHJvdG9jb2wpKWlmKHQ9PT0iIilpZihyLnBvcnQ9PT0iIil7cz1yLnByb3RvY29sCnM9cz09PSI6Inx8cz09PSIifWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSEwCnJldHVybiBzfSwKZTkoKXt2YXIgdD11Lk4KdD1uZXcgQS5jNShBLmRVKEIubCx0KSxBLmFCKHQpLEEuYUIodCksQS5hQih0KSxudWxsKQp0LmFGKG51bGwsbmV3IEEuYngoQi5sLG5ldyBBLmNPKCkpLFsiVEVNUExBVEUiXSxudWxsKQpyZXR1cm4gdH0sCmhqKGEsYil7dmFyIHQ9JC5hUAppZih0PT09Qi5kKXJldHVybiBhCnJldHVybiB0LmFVKGEsYil9LApjOmZ1bmN0aW9uIGMoKXt9LApiODpmdW5jdGlvbiBiOCgpe30sCmI5OmZ1bmN0aW9uIGI5KCl7fSwKYTU6ZnVuY3Rpb24gYTUoKXt9LApVOmZ1bmN0aW9uIFUoKXt9LApDOmZ1bmN0aW9uIEMoKXt9LAphcjpmdW5jdGlvbiBhcigpe30sCmNlOmZ1bmN0aW9uIGNlKCl7fSwKYXM6ZnVuY3Rpb24gYXMoKXt9LApjZjpmdW5jdGlvbiBjZigpe30sCmNnOmZ1bmN0aW9uIGNnKCl7fSwKYlA6ZnVuY3Rpb24gYlAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCng6ZnVuY3Rpb24geChhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LAppOmZ1bmN0aW9uIGkoKXt9LApjaDpmdW5jdGlvbiBjaCgpe30sCmE6ZnVuY3Rpb24gYSgpe30sCmJpOmZ1bmN0aW9uIGJpKCl7fSwKYmo6ZnVuY3Rpb24gYmooKXt9LApZOmZ1bmN0aW9uIFkoKXt9LApjcjpmdW5jdGlvbiBjcigpe30sCnY6ZnVuY3Rpb24gdigpe30sCm86ZnVuY3Rpb24gbyhhKXt0aGlzLmE9YX0sCmU6ZnVuY3Rpb24gZSgpe30sCmFFOmZ1bmN0aW9uIGFFKCl7fSwKYkI6ZnVuY3Rpb24gYkIoKXt9LAphTjpmdW5jdGlvbiBhTigpe30sCmJGOmZ1bmN0aW9uIGJGKCl7fSwKYkc6ZnVuY3Rpb24gYkcoKXt9LAphYzpmdW5jdGlvbiBhYygpe30sCkI6ZnVuY3Rpb24gQigpe30sCmFPOmZ1bmN0aW9uIGFPKCl7fSwKYWc6ZnVuY3Rpb24gYWcoKXt9LAphVjpmdW5jdGlvbiBhVigpe30sCmJPOmZ1bmN0aW9uIGJPKCl7fSwKYlI6ZnVuY3Rpb24gYlIoYSl7dGhpcy5hPWF9LApiUzpmdW5jdGlvbiBiUyhhKXt0aGlzLmE9YX0sCmRiOmZ1bmN0aW9uIGRiKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCmFROmZ1bmN0aW9uIGFRKCl7fSwKdzpmdW5jdGlvbiB3KGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sCmJVOmZ1bmN0aW9uIGJVKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5iPWEKXy5jPWIKXy5kPWMKXy5lPWR9LApjRTpmdW5jdGlvbiBjRShhKXt0aGlzLmE9YX0sCmFoOmZ1bmN0aW9uIGFoKGEpe3RoaXMuYT1hfSwKYTg6ZnVuY3Rpb24gYTgoKXt9LAphRjpmdW5jdGlvbiBhRihhKXt0aGlzLmE9YX0sCmN1OmZ1bmN0aW9uIGN1KGEpe3RoaXMuYT1hfSwKY3Q6ZnVuY3Rpb24gY3QoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKYVk6ZnVuY3Rpb24gYVkoKXt9LApjTTpmdW5jdGlvbiBjTSgpe30sCmNOOmZ1bmN0aW9uIGNOKCl7fSwKYzU6ZnVuY3Rpb24gYzUoYSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZT1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwKY086ZnVuY3Rpb24gY08oKXt9LApjMzpmdW5jdGlvbiBjMygpe30sCmF2OmZ1bmN0aW9uIGF2KGEsYil7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9LTEKXy5kPW51bGx9LApjTDpmdW5jdGlvbiBjTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKYzc6ZnVuY3Rpb24gYzcoYSl7dGhpcy5hPWEKdGhpcy5iPTB9LApjVDpmdW5jdGlvbiBjVChhKXt0aGlzLmE9YX0sCmJROmZ1bmN0aW9uIGJRKCl7fSwKYlo6ZnVuY3Rpb24gYlooKXt9LApjXzpmdW5jdGlvbiBjXygpe30sCmMwOmZ1bmN0aW9uIGMwKCl7fSwKYzE6ZnVuY3Rpb24gYzEoKXt9LApjODpmdW5jdGlvbiBjOCgpe30sCmM5OmZ1bmN0aW9uIGM5KCl7fSwKZWcoYSl7dmFyIHQKaWYoYT09bnVsbClyZXR1cm4gYQppZih0eXBlb2YgYT09InN0cmluZyJ8fHR5cGVvZiBhPT0ibnVtYmVyInx8QS5kcyhhKSlyZXR1cm4gYQppZih1LmYuYihhKSlyZXR1cm4gQS5lbihhKQppZih1LmouYihhKSl7dD1bXQpKLmVQKGEsbmV3IEEuY1YodCkpCmE9dH1yZXR1cm4gYX0sCmVuKGEpe3ZhciB0PXt9CmEudigwLG5ldyBBLmQwKHQpKQpyZXR1cm4gdH0sCmNWOmZ1bmN0aW9uIGNWKGEpe3RoaXMuYT1hfSwKZDA6ZnVuY3Rpb24gZDAoYSl7dGhpcy5hPWF9LApiZjpmdW5jdGlvbiBiZigpe30sCmNkOmZ1bmN0aW9uIGNkKGEpe3RoaXMuYT1hfSwKYXU6ZnVuY3Rpb24gYXUoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmNqOmZ1bmN0aW9uIGNqKCl7fSwKY2s6ZnVuY3Rpb24gY2soKXt9LAphYTpmdW5jdGlvbiBhYSgpe30sCmJiOmZ1bmN0aW9uIGJiKGEpe3RoaXMuYT1hfSwKYjpmdW5jdGlvbiBiKCl7fSwKaGsoKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGM9ImFic29sdXRlIixiPVtdLGE9dS5SLGEwPW5ldyBBLngod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNjb250ZW50LXdyYXAgLmZvb3Rub3RlLWZvb3RlciIpLGEpCmZvcih0PW5ldyBBLnooYTAsYTAuZ2koYTApKSxzPXUuaCxyPUEubSh0KS5jO3QuaigpOyl7cT10LmQKcD1zLmEoKHE9PW51bGw/ci5hKHEpOnEpLmNsb25lTm9kZSghMCkpCnE9cC5xdWVyeVNlbGVjdG9yKCJhIikKaWYocSE9bnVsbCl7bz1xLnBhcmVudE5vZGUKaWYobyE9bnVsbClvLnJlbW92ZUNoaWxkKHEpfXE9Si5lUyhwKQpxPXE9PW51bGw/bnVsbDpCLmEuYXYoQi5hLmFvKHEpLDIpCmIucHVzaChxPT1udWxsPyIiOnEpfW49W10KZm9yKGE9QS5leihuZXcgQS54KHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjY29udGVudC13cmFwIGEuZm9vdG5vdGVyZWYiKSxhKSxiKSxhPW5ldyBBLmE3KGEuZ2woYSkpLHQ9QS5tKGEpLnAoIkc8MT4iKTthLmooKTspe209YS5jCmlmKG09PW51bGwpbT10LmEobSkKcz1tLmIKbD1zLmEKaz1zLmIKcz1kb2N1bWVudApqPXMuY3JlYXRlRWxlbWVudCgiZGl2IikKai5jbGFzc0xpc3QuYWRkKCJmLWhlYWRpbmciKQpqLmlubmVyVGV4dD0iRm9vdG5vdGUgIisobS5hKzEpKyIuIgppPXMuY3JlYXRlRWxlbWVudCgiZGl2IikKaS5jbGFzc0xpc3QuYWRkKCJmLWNvbnRlbnQiKQpCLncuYXIoaSxrKQpoPXMuY3JlYXRlRWxlbWVudCgiZGl2IikKaC5jbGFzc0xpc3QuYWRkKCJmLWZvb3RlciIpCmguaW5uZXJUZXh0PSIoY2xpY2sgdG8gc2Nyb2xsIHRvIGZvb3Rub3RlcykiCmc9cy5jcmVhdGVFbGVtZW50KCJkaXYiKQpnLmNsYXNzTGlzdC5hZGQoImZvb3Rub3RlIikKQS5kaShnLFtqLGksaF0pCmY9cy5jcmVhdGVFbGVtZW50KCJkaXYiKQpmLmNsYXNzTGlzdC5hZGQoImNvbnRlbnQiKQpmLmFwcGVuZENoaWxkKGcpCmU9cy5jcmVhdGVFbGVtZW50KCJkaXYiKQplLmNsYXNzTGlzdC5hZGQoImhvdmVydGlwIikKZS5hcHBlbmRDaGlsZChmKQpzPWUuc3R5bGUKcy53aWR0aD0iYXV0byIKcy5iYWNrZ3JvdW5kQ29sb3I9IndoaXRlIgpzLnBvc2l0aW9uPWMKcy5kaXNwbGF5PSJub25lIgpzLmJvcmRlcj0iMXB4IHNvbGlkIGJsYWNrIgpuLnB1c2goZSkKcz1KLlMobCkKcj1zLmdhbChsKQpBLmJWKHIuYSxyLmIsbmV3IEEuY1koZSksITEpCnI9cy5nYW0obCkKQS5iVihyLmEsci5iLG5ldyBBLmNaKGUpLCExKQpzPXMuZ2FrKGwpCkEuYlYocy5hLHMuYixuZXcgQS5kXyhlKSwhMSl9ZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKQpkLmlkPSJvZGlhbG9nLWhvdmVydGlwcyIKQS5kaShkLG4pCmE9ZC5zdHlsZQphLnBvc2l0aW9uPWMKYS56SW5kZXg9IjEwMCIKYS50b3A9IjBweCIKYS53aWR0aD0iMTAwJSIKYT13aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpCmEudG9TdHJpbmcKSi5lUihhKS5xKDAsZCl9LApjWTpmdW5jdGlvbiBjWShhKXt0aGlzLmE9YX0sCmNaOmZ1bmN0aW9uIGNaKGEpe3RoaXMuYT1hfSwKZF86ZnVuY3Rpb24gZF8oYSl7dGhpcy5hPWF9LApHOmZ1bmN0aW9uIEcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmE3OmZ1bmN0aW9uIGE3KGEpe3RoaXMuYT1hCnRoaXMuYj0wCnRoaXMuYz1udWxsfSwKYWQ6ZnVuY3Rpb24gYWQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmhFKCl7Qi5vLmFSKHdpbmRvdywiRE9NQ29udGVudExvYWRlZCIsbmV3IEEuZDcoKSl9LApoTihhKXt2YXIgdCxzLHIscSxwLG89ImhpZGRlbiIsbj13aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI25vdy1yZXYiKSxtPUEuaHEoKS4kMShuLmlubmVyVGV4dCksbD1tKzEsaz0iIitsLGo9Ii5yZXYiK2sKZm9yKHQ9dS5SLHM9bmV3IEEueCh3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChqKSx0KSxzPW5ldyBBLnoocyxzLmdpKHMpKSxyPUEubShzKS5jO3MuaigpOyl7cT1zLmQKSi5hbihxPT1udWxsP3IuYShxKTpxKS5KKDAsbyl9Zm9yKHM9bmV3IEEueCh3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnJlcG9ydC1ib2R5ICIraiksdCkscz1uZXcgQS56KHMscy5naShzKSkscj1BLm0ocykuYztzLmooKTspe3E9cy5kCkouYW4ocT09bnVsbD9yLmEocSk6cSkucSgwLCJzdGFpbmVkIil9Zm9yKGs9bmV3IEEueCh3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLm91dCIrayksdCksaz1uZXcgQS56KGssay5naShrKSkscz1BLm0oaykuYztrLmooKTspe3I9ay5kCkouYW4ocj09bnVsbD9zLmEocik6cikucSgwLG8pfWZvcihrPW5ldyBBLngod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZXBvcnQtYm9keSAucmV2IitBLmYobSkpLHQpLGs9bmV3IEEueihrLGsuZ2koaykpLHM9QS5tKGspLmM7ay5qKCk7KXtyPWsuZApKLmFuKHI9PW51bGw/cy5hKHIpOnIpLkooMCwic3RhaW5lZCIpfWZvcihrPW5ldyBBLngod2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5mb290bm90ZS1mb290ZXIiKSx0KSxrPW5ldyBBLmE3KGsuZ2woaykpLHQ9QS5tKGspLnAoIkc8MT4iKTtrLmooKTspe3A9ay5jCmlmKHA9PW51bGwpcD10LmEocCkKcz1CLkQubSgwLGwpCnMudG9TdHJpbmcKaWYocC5hKzE8PXMpSi5hbihwLmIpLkooMCxvKX1uLmlubmVyVGV4dD1CLmMuaChsKQpCLm8uYXEod2luZG93LEEuZmYoWyJ0b3AiLDAsImJlaGF2aW9yIiwic21vb3RoIl0sdS5OLHUuSykpfSwKZDc6ZnVuY3Rpb24gZDcoKXt9LApoSChhKXtpZih0eXBlb2YgZGFydFByaW50PT0iZnVuY3Rpb24iKXtkYXJ0UHJpbnQoYSkKcmV0dXJufWlmKHR5cGVvZiBjb25zb2xlPT0ib2JqZWN0IiYmdHlwZW9mIGNvbnNvbGUubG9nIT0idW5kZWZpbmVkIil7Y29uc29sZS5sb2coYSkKcmV0dXJufWlmKHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiKXJldHVybgppZih0eXBlb2YgcHJpbnQ9PSJmdW5jdGlvbiIpe3ByaW50KGEpCnJldHVybn10aHJvdyJVbmFibGUgdG8gcHJpbnQgbWVzc2FnZTogIitTdHJpbmcoYSl9LApoTChhKXtyZXR1cm4gQS5kRChuZXcgQS5icigiRmllbGQgJyIrYSsiJyBoYXMgYmVlbiBhc3NpZ25lZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIikpfSwKZXooYSxiKXtyZXR1cm4gQS5oTyhhLGIsdS5vKX0sCmhPKGEsYixjKXtyZXR1cm4gQS5oNyhmdW5jdGlvbigpe3ZhciB0PWEscz1iCnZhciByPTAscT0xLHAsbyxuLG0sbCxrLGoKcmV0dXJuIGZ1bmN0aW9uICRhc3luYyRleihkLGUpe2lmKGQ9PT0xKXtwPWUKcj1xfXdoaWxlKHRydWUpc3dpdGNoKHIpe2Nhc2UgMDptPW5ldyBBLnoodCx0LmdpKHQpKQpsPW5ldyBKLlQocyxzLmxlbmd0aCkKaz1BLm0obSkuYwpqPUEubShsKS5jCmNhc2UgMjppZighITApe3I9MwpicmVha31pZighKG0uaigpJiZsLmooKSkpe3I9MwpicmVha31vPW0uZAppZihvPT1udWxsKW89ay5hKG8pCm49bC5kCnI9NApyZXR1cm4gbmV3IEEuYWQobyxuPT1udWxsP2ouYShuKTpuKQpjYXNlIDQ6cj0yCmJyZWFrCmNhc2UgMzpyZXR1cm4gQS5mdCgpCmNhc2UgMTpyZXR1cm4gQS5mdShwKX19fSxjKX0sCmVmKGEsYil7YT1hK2ImNTM2ODcwOTExCmE9YSsoKGEmNTI0Mjg3KTw8MTApJjUzNjg3MDkxMQpyZXR1cm4gYV5hPj4+Nn19LEo9ewpkQihhLGIsYyxkKXtyZXR1cm57aTphLHA6YixlOmMseDpkfX0sCmQyKGEpe3ZhciB0LHMscixxLHAsbz1hW3YuZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdCmlmKG89PW51bGwpaWYoJC5kQT09bnVsbCl7QS5oeSgpCm89YVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXX1pZihvIT1udWxsKXt0PW8ucAppZighMT09PXQpcmV0dXJuIG8uaQppZighMD09PXQpcmV0dXJuIGEKcz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkKaWYodD09PXMpcmV0dXJuIG8uaQppZihvLmU9PT1zKXRocm93IEEuZChBLmUyKCJSZXR1cm4gaW50ZXJjZXB0b3IgZm9yICIrQS5mKHQoYSxvKSkpKX1yPWEuY29uc3RydWN0b3IKaWYocj09bnVsbClxPW51bGwKZWxzZXtwPSQuY0cKaWYocD09bnVsbClwPSQuY0c9di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpxPXJbcF19aWYocSE9bnVsbClyZXR1cm4gcQpxPUEuaEQoYSkKaWYocSE9bnVsbClyZXR1cm4gcQppZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gQi55CnQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpCmlmKHQ9PW51bGwpcmV0dXJuIEIubQppZih0PT09T2JqZWN0LnByb3RvdHlwZSlyZXR1cm4gQi5tCmlmKHR5cGVvZiByPT0iZnVuY3Rpb24iKXtwPSQuY0cKaWYocD09bnVsbClwPSQuY0c9di5nZXRJc29sYXRlVGFnKCJfJGRhcnRfanMiKQpPYmplY3QuZGVmaW5lUHJvcGVydHkocixwLHt2YWx1ZTpCLmYsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIEIuZn1yZXR1cm4gQi5mfSwKZFIoYSl7aWYoYTwwKXRocm93IEEuZChBLmRIKCJMZW5ndGggbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAiK2EsbnVsbCkpCnJldHVybiBuZXcgQXJyYXkoYSl9LApkUyhhKXthLmZpeGVkJGxlbmd0aD1BcnJheQpyZXR1cm4gYX0sCmRUKGEpe2lmKGE8MjU2KXN3aXRjaChhKXtjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTI6Y2FzZSAxMzpjYXNlIDMyOmNhc2UgMTMzOmNhc2UgMTYwOnJldHVybiEwCmRlZmF1bHQ6cmV0dXJuITF9c3dpdGNoKGEpe2Nhc2UgNTc2MDpjYXNlIDgxOTI6Y2FzZSA4MTkzOmNhc2UgODE5NDpjYXNlIDgxOTU6Y2FzZSA4MTk2OmNhc2UgODE5NzpjYXNlIDgxOTg6Y2FzZSA4MTk5OmNhc2UgODIwMDpjYXNlIDgyMDE6Y2FzZSA4MjAyOmNhc2UgODIzMjpjYXNlIDgyMzM6Y2FzZSA4MjM5OmNhc2UgODI4NzpjYXNlIDEyMjg4OmNhc2UgNjUyNzk6cmV0dXJuITAKZGVmYXVsdDpyZXR1cm4hMX19LApmYShhLGIpe3ZhciB0LHMKZm9yKHQ9YS5sZW5ndGg7Yjx0Oyl7cz1CLmEuYTUoYSxiKQppZihzIT09MzImJnMhPT0xMyYmIUouZFQocykpYnJlYWs7KytifXJldHVybiBifSwKZmIoYSxiKXt2YXIgdCxzCmZvcig7Yj4wO2I9dCl7dD1iLTEKcz1CLmEuYWUoYSx0KQppZihzIT09MzImJnMhPT0xMyYmIUouZFQocykpYnJlYWt9cmV0dXJuIGJ9LAphbShhKXtpZih0eXBlb2YgYT09Im51bWJlciIpe2lmKE1hdGguZmxvb3IoYSk9PWEpcmV0dXJuIEouYUEucHJvdG90eXBlCnJldHVybiBKLmNvLnByb3RvdHlwZX1pZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIEouWi5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gSi5ibi5wcm90b3R5cGUKaWYodHlwZW9mIGE9PSJib29sZWFuIilyZXR1cm4gSi5jbi5wcm90b3R5cGUKaWYoYS5jb25zdHJ1Y3Rvcj09QXJyYXkpcmV0dXJuIEouRC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5ILnByb3RvdHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNlb2YgQS5qKXJldHVybiBhCnJldHVybiBKLmQyKGEpfSwKZHkoYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLloucHJvdG90eXBlCmlmKGE9PW51bGwpcmV0dXJuIGEKaWYoYS5jb25zdHJ1Y3Rvcj09QXJyYXkpcmV0dXJuIEouRC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5ILnByb3RvdHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNlb2YgQS5qKXJldHVybiBhCnJldHVybiBKLmQyKGEpfSwKZHooYSl7aWYoYT09bnVsbClyZXR1cm4gYQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5ELnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLkgucHJvdG90eXBlCnJldHVybiBhfWlmKGEgaW5zdGFuY2VvZiBBLmopcmV0dXJuIGEKcmV0dXJuIEouZDIoYSl9LAplcShhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIEouWi5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZighKGEgaW5zdGFuY2VvZiBBLmopKXJldHVybiBKLmFlLnByb3RvdHlwZQpyZXR1cm4gYX0sClMoYSl7aWYoYT09bnVsbClyZXR1cm4gYQppZih0eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLkgucHJvdG90eXBlCnJldHVybiBhfWlmKGEgaW5zdGFuY2VvZiBBLmopcmV0dXJuIGEKcmV0dXJuIEouZDIoYSl9LAphMyhhLGIpe2lmKGE9PW51bGwpcmV0dXJuIGI9PW51bGwKaWYodHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBiIT1udWxsJiZhPT09YgpyZXR1cm4gSi5hbShhKS5HKGEsYil9LAplTihhLGIpe2lmKHR5cGVvZiBiPT09Im51bWJlciIpaWYoYS5jb25zdHJ1Y3Rvcj09QXJyYXl8fHR5cGVvZiBhPT0ic3RyaW5nInx8QS5oQihhLGFbdi5kaXNwYXRjaFByb3BlcnR5TmFtZV0pKWlmKGI+Pj4wPT09YiYmYjxhLmxlbmd0aClyZXR1cm4gYVtiXQpyZXR1cm4gSi5keShhKS5tKGEsYil9LAplTyhhLGIsYyxkKXtyZXR1cm4gSi5TKGEpLmFhKGEsYixjLGQpfSwKZDkoYSxiKXtyZXR1cm4gSi5keihhKS51KGEsYil9LAplUChhLGIpe3JldHVybiBKLmR6KGEpLnYoYSxiKX0sCmVRKGEpe3JldHVybiBKLlMoYSkuZ2FUKGEpfSwKZVIoYSl7cmV0dXJuIEouUyhhKS5nYWMoYSl9LAphbihhKXtyZXR1cm4gSi5TKGEpLmdhZChhKX0sCmFvKGEpe3JldHVybiBKLmFtKGEpLmduKGEpfSwKZVMoYSl7cmV0dXJuIEouUyhhKS5nYWYoYSl9LAphNChhKXtyZXR1cm4gSi5keihhKS5nbChhKX0sCmFwKGEpe3JldHVybiBKLmR5KGEpLmdpKGEpfSwKZVQoYSl7cmV0dXJuIEouUyhhKS5nYWooYSl9LApkRihhKXtyZXR1cm4gSi5TKGEpLmFYKGEpfSwKZVUoYSl7cmV0dXJuIEouZXEoYSkuYjEoYSl9LApiNyhhKXtyZXR1cm4gSi5hbShhKS5oKGEpfSwKZEcoYSl7cmV0dXJuIEouZXEoYSkuYW8oYSl9LApheTpmdW5jdGlvbiBheSgpe30sCmNuOmZ1bmN0aW9uIGNuKCl7fSwKYm46ZnVuY3Rpb24gYm4oKXt9LApyOmZ1bmN0aW9uIHIoKXt9LAphXzpmdW5jdGlvbiBhXygpe30sCmJ6OmZ1bmN0aW9uIGJ6KCl7fSwKYWU6ZnVuY3Rpb24gYWUoKXt9LApIOmZ1bmN0aW9uIEgoKXt9LApEOmZ1bmN0aW9uIEQoKXt9LApicDpmdW5jdGlvbiBicCgpe30sClQ6ZnVuY3Rpb24gVChhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPTAKXy5kPW51bGx9LApibzpmdW5jdGlvbiBibygpe30sCmFBOmZ1bmN0aW9uIGFBKCl7fSwKY286ZnVuY3Rpb24gY28oKXt9LApaOmZ1bmN0aW9uIFooKXt9fSxCPXt9CnZhciB3PVtBLEosQl0KdmFyICQ9e30KQS5kZC5wcm90b3R5cGU9e30KSi5heS5wcm90b3R5cGU9ewpHKGEsYil7cmV0dXJuIGE9PT1ifSwKZ24oYSl7cmV0dXJuIEEuYUgoYSl9LApoKGEpe3JldHVybiJJbnN0YW5jZSBvZiAnIitBLmN3KGEpKyInIn19CkouY24ucHJvdG90eXBlPXsKaChhKXtyZXR1cm4gU3RyaW5nKGEpfSwKZ24oYSl7cmV0dXJuIGE/NTE5MDE4OjIxODE1OX19CkouYm4ucHJvdG90eXBlPXsKRyhhLGIpe3JldHVybiBudWxsPT1ifSwKaChhKXtyZXR1cm4ibnVsbCJ9LApnbihhKXtyZXR1cm4gMH19Ckouci5wcm90b3R5cGU9e30KSi5hXy5wcm90b3R5cGU9ewpnbihhKXtyZXR1cm4gMH0sCmgoYSl7cmV0dXJuIFN0cmluZyhhKX19CkouYnoucHJvdG90eXBlPXt9CkouYWUucHJvdG90eXBlPXt9CkouSC5wcm90b3R5cGU9ewpoKGEpe3ZhciB0PWFbJC5lQigpXQppZih0PT1udWxsKXJldHVybiB0aGlzLmFDKGEpCnJldHVybiJKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciAiK0ouYjcodCl9LAokaVg6MX0KSi5ELnByb3RvdHlwZT17CnYoYSxiKXt2YXIgdCxzPWEubGVuZ3RoCmZvcih0PTA7dDxzOysrdCl7Yi4kMShhW3RdKQppZihhLmxlbmd0aCE9PXMpdGhyb3cgQS5kKEEuVyhhKSl9fSwKdShhLGIpe3JldHVybiBhW2JdfSwKYWIoYSxiKXt2YXIgdCxzPWEubGVuZ3RoCmZvcih0PTA7dDxzOysrdCl7aWYoYi4kMShhW3RdKSlyZXR1cm4hMAppZihhLmxlbmd0aCE9PXMpdGhyb3cgQS5kKEEuVyhhKSl9cmV0dXJuITF9LAp0KGEsYil7dmFyIHQKZm9yKHQ9MDt0PGEubGVuZ3RoOysrdClpZihKLmEzKGFbdF0sYikpcmV0dXJuITAKcmV0dXJuITF9LApoKGEpe3JldHVybiBBLmRjKGEsIlsiLCJdIil9LApnbChhKXtyZXR1cm4gbmV3IEouVChhLGEubGVuZ3RoKX0sCmduKGEpe3JldHVybiBBLmFIKGEpfSwKZ2koYSl7cmV0dXJuIGEubGVuZ3RofSwKJGluOjF9CkouYnAucHJvdG90eXBlPXt9CkouVC5wcm90b3R5cGU9ewpnaygpe3ZhciB0PXRoaXMuZApyZXR1cm4gdD09bnVsbD9BLm0odGhpcykuYy5hKHQpOnR9LApqKCl7dmFyIHQscz10aGlzLHI9cy5hLHE9ci5sZW5ndGgKaWYocy5iIT09cSl0aHJvdyBBLmQoQS5kQyhyKSkKdD1zLmMKaWYodD49cSl7cy5kPW51bGwKcmV0dXJuITF9cy5kPXJbdF0Kcy5jPXQrMQpyZXR1cm4hMH19CkouYm8ucHJvdG90eXBlPXsKYVkoYSl7aWYoYT4wKXtpZihhIT09MS8wKXJldHVybiBNYXRoLnJvdW5kKGEpfWVsc2UgaWYoYT4tMS8wKXJldHVybiAwLU1hdGgucm91bmQoMC1hKQp0aHJvdyBBLmQoQS5lMygiIithKyIucm91bmQoKSIpKX0sCmgoYSl7aWYoYT09PTAmJjEvYTwwKXJldHVybiItMC4wIgplbHNlIHJldHVybiIiK2F9LApnbihhKXt2YXIgdCxzLHIscSxwPWF8MAppZihhPT09cClyZXR1cm4gcCY1MzY4NzA5MTEKdD1NYXRoLmFicyhhKQpzPU1hdGgubG9nKHQpLzAuNjkzMTQ3MTgwNTU5OTQ1M3wwCnI9TWF0aC5wb3coMixzKQpxPXQ8MT90L3I6ci90CnJldHVybigocSo5MDA3MTk5MjU0NzQwOTkyfDApKyhxKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytzKjEyNTkmNTM2ODcwOTExfSwKYVEoYSxiKXt2YXIgdAppZihhPjApdD10aGlzLmFQKGEsYikKZWxzZXt0PWI+MzE/MzE6Ygp0PWE+PnQ+Pj4wfXJldHVybiB0fSwKYVAoYSxiKXtyZXR1cm4gYj4zMT8wOmE+Pj5ifX0KSi5hQS5wcm90b3R5cGU9eyRpdToxfQpKLmNvLnByb3RvdHlwZT17fQpKLloucHJvdG90eXBlPXsKYWUoYSxiKXtpZihiPDApdGhyb3cgQS5kKEEuZHgoYSxiKSkKaWYoYj49YS5sZW5ndGgpQS5kRChBLmR4KGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9LAphNShhLGIpe2lmKGI+PWEubGVuZ3RoKXRocm93IEEuZChBLmR4KGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9LAphcChhLGIpe3JldHVybiBhK2J9LAphdShhLGIpe3ZhciB0PWIubGVuZ3RoCmlmKHQ+YS5sZW5ndGgpcmV0dXJuITEKcmV0dXJuIGI9PT1hLnN1YnN0cmluZygwLHQpfSwKYTMoYSxiLGMpe3JldHVybiBhLnN1YnN0cmluZyhiLEEuZmsoYixjLGEubGVuZ3RoKSl9LAphdihhLGIpe3JldHVybiB0aGlzLmEzKGEsYixudWxsKX0sCmIxKGEpe3JldHVybiBhLnRvTG93ZXJDYXNlKCl9LAphbyhhKXt2YXIgdCxzLHIscT1hLnRyaW0oKSxwPXEubGVuZ3RoCmlmKHA9PT0wKXJldHVybiBxCmlmKHRoaXMuYTUocSwwKT09PTEzMyl7dD1KLmZhKHEsMSkKaWYodD09PXApcmV0dXJuIiJ9ZWxzZSB0PTAKcz1wLTEKcj10aGlzLmFlKHEscyk9PT0xMzM/Si5mYihxLHMpOnAKaWYodD09PTAmJnI9PT1wKXJldHVybiBxCnJldHVybiBxLnN1YnN0cmluZyh0LHIpfSwKaChhKXtyZXR1cm4gYX0sCmduKGEpe3ZhciB0LHMscgpmb3IodD1hLmxlbmd0aCxzPTAscj0wO3I8dDsrK3Ipe3M9cythLmNoYXJDb2RlQXQocikmNTM2ODcwOTExCnM9cysoKHMmNTI0Mjg3KTw8MTApJjUzNjg3MDkxMQpzXj1zPj42fXM9cysoKHMmNjcxMDg4NjMpPDwzKSY1MzY4NzA5MTEKc149cz4+MTEKcmV0dXJuIHMrKChzJjE2MzgzKTw8MTUpJjUzNjg3MDkxMX0sCmdpKGEpe3JldHVybiBhLmxlbmd0aH0sCiRpaDoxfQpBLmJyLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIkxhdGVJbml0aWFsaXphdGlvbkVycm9yOiAiK3RoaXMuYX19CkEuYmgucHJvdG90eXBlPXt9CkEuYnUucHJvdG90eXBlPXsKZ2woYSl7cmV0dXJuIG5ldyBBLnoodGhpcyx0aGlzLmdpKHRoaXMpKX0sCk4oYSxiKXtyZXR1cm4gdGhpcy5heigwLGIpfX0KQS56LnByb3RvdHlwZT17CmdrKCl7dmFyIHQ9dGhpcy5kCnJldHVybiB0PT1udWxsP0EubSh0aGlzKS5jLmEodCk6dH0sCmooKXt2YXIgdCxzPXRoaXMscj1zLmEscT1KLmR5KHIpLHA9cS5naShyKQppZihzLmIhPT1wKXRocm93IEEuZChBLlcocikpCnQ9cy5jCmlmKHQ+PXApe3MuZD1udWxsCnJldHVybiExfXMuZD1xLnUocix0KTsrK3MuYwpyZXR1cm4hMH19CkEuYnYucHJvdG90eXBlPXsKZ2woYSl7cmV0dXJuIG5ldyBBLmJ3KEouYTQodGhpcy5hKSx0aGlzLmIpfSwKZ2koYSl7cmV0dXJuIEouYXAodGhpcy5hKX0sCnUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouZDkodGhpcy5hLGIpKX19CkEuYncucHJvdG90eXBlPXsKaigpe3ZhciB0PXRoaXMscz10LmIKaWYocy5qKCkpe3QuYT10LmMuJDEocy5naygpKQpyZXR1cm4hMH10LmE9bnVsbApyZXR1cm4hMX0sCmdrKCl7dmFyIHQ9dGhpcy5hCnJldHVybiB0PT1udWxsP0EubSh0aGlzKS56WzFdLmEodCk6dH19CkEuYngucHJvdG90eXBlPXsKZ2koYSl7cmV0dXJuIEouYXAodGhpcy5hKX0sCnUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouZDkodGhpcy5hLGIpKX19CkEuYWYucHJvdG90eXBlPXsKZ2woYSl7cmV0dXJuIG5ldyBBLmJNKEouYTQodGhpcy5hKSx0aGlzLmIpfX0KQS5iTS5wcm90b3R5cGU9ewpqKCl7dmFyIHQscwpmb3IodD10aGlzLmEscz10aGlzLmI7dC5qKCk7KWlmKHMuJDEodC5naygpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdrKCl7cmV0dXJuIHRoaXMuYS5naygpfX0KQS5hcS5wcm90b3R5cGU9ewpoKGEpe3JldHVybiBBLmRmKHRoaXMpfSwKJGlJOjF9CkEuYXcucHJvdG90eXBlPXsKVygpe3ZhciB0LHMscixxPXRoaXMscD1xLiRtYXAKaWYocD09bnVsbCl7dD1xLiR0aQpzPXQuYwpyPUEuZjYocykKcD1BLmZkKEEuaDYoKSxyLHMsdC56WzFdKQpBLmVvKHEuYSxwKQpxLiRtYXA9cH1yZXR1cm4gcH0sCm0oYSxiKXtyZXR1cm4gdGhpcy5XKCkubSgwLGIpfSwKdihhLGIpe3RoaXMuVygpLnYoMCxiKX0sCmdpKGEpe3JldHVybiB0aGlzLlcoKS5hfX0KQS5jbS5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hLmIoYSl9LAokUzo4fQpBLmN5LnByb3RvdHlwZT17CkIoYSl7dmFyIHQscyxyPXRoaXMscT1uZXcgUmVnRXhwKHIuYSkuZXhlYyhhKQppZihxPT1udWxsKXJldHVybiBudWxsCnQ9T2JqZWN0LmNyZWF0ZShudWxsKQpzPXIuYgppZihzIT09LTEpdC5hcmd1bWVudHM9cVtzKzFdCnM9ci5jCmlmKHMhPT0tMSl0LmFyZ3VtZW50c0V4cHI9cVtzKzFdCnM9ci5kCmlmKHMhPT0tMSl0LmV4cHI9cVtzKzFdCnM9ci5lCmlmKHMhPT0tMSl0Lm1ldGhvZD1xW3MrMV0Kcz1yLmYKaWYocyE9PS0xKXQucmVjZWl2ZXI9cVtzKzFdCnJldHVybiB0fX0KQS5hRy5wcm90b3R5cGU9ewpoKGEpe3ZhciB0PXRoaXMuYgppZih0PT1udWxsKXJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjogIit0aGlzLmEKcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIit0KyInIG9uIG51bGwifX0KQS5icS5wcm90b3R5cGU9ewpoKGEpe3ZhciB0LHM9dGhpcyxyPSJOb1N1Y2hNZXRob2RFcnJvcjogbWV0aG9kIG5vdCBmb3VuZDogJyIscT1zLmIKaWYocT09bnVsbClyZXR1cm4iTm9TdWNoTWV0aG9kRXJyb3I6ICIrcy5hCnQ9cy5jCmlmKHQ9PW51bGwpcmV0dXJuIHIrcSsiJyAoIitzLmErIikiCnJldHVybiByK3ErIicgb24gJyIrdCsiJyAoIitzLmErIikifX0KQS5iSy5wcm90b3R5cGU9ewpoKGEpe3ZhciB0PXRoaXMuYQpyZXR1cm4gdC5sZW5ndGg9PT0wPyJFcnJvciI6IkVycm9yOiAiK3R9fQpBLmN2LnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIlRocm93IG9mIG51bGwgKCciKyh0aGlzLmE9PT1udWxsPyJudWxsIjoidW5kZWZpbmVkIikrIicgZnJvbSBKYXZhU2NyaXB0KSJ9fQpBLmMyLnByb3RvdHlwZT17CmgoYSl7dmFyIHQscz10aGlzLmIKaWYocyE9bnVsbClyZXR1cm4gcwpzPXRoaXMuYQp0PXMhPT1udWxsJiZ0eXBlb2Ygcz09PSJvYmplY3QiP3Muc3RhY2s6bnVsbApyZXR1cm4gdGhpcy5iPXQ9PW51bGw/IiI6dH19CkEuVi5wcm90b3R5cGU9ewpoKGEpe3ZhciB0PXRoaXMuY29uc3RydWN0b3Iscz10PT1udWxsP251bGw6dC5uYW1lCnJldHVybiJDbG9zdXJlICciK0EuZXgocz09bnVsbD8idW5rbm93biI6cykrIicifSwKJGlYOjEsCmdiMigpe3JldHVybiB0aGlzfSwKJEM6IiQxIiwKJFI6MSwKJEQ6bnVsbH0KQS5iYy5wcm90b3R5cGU9eyRDOiIkMCIsJFI6MH0KQS5iZC5wcm90b3R5cGU9eyRDOiIkMiIsJFI6Mn0KQS5iSC5wcm90b3R5cGU9e30KQS5iQy5wcm90b3R5cGU9ewpoKGEpe3ZhciB0PXRoaXMuJHN0YXRpY19uYW1lCmlmKHQ9PW51bGwpcmV0dXJuIkNsb3N1cmUgb2YgdW5rbm93biBzdGF0aWMgbWV0aG9kIgpyZXR1cm4iQ2xvc3VyZSAnIitBLmV4KHQpKyInIn19CkEuYTYucHJvdG90eXBlPXsKRyhhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIpcmV0dXJuITAKaWYoIShiIGluc3RhbmNlb2YgQS5hNikpcmV0dXJuITEKcmV0dXJuIHRoaXMuJF90YXJnZXQ9PT1iLiRfdGFyZ2V0JiZ0aGlzLmE9PT1iLmF9LApnbihhKXtyZXR1cm4oQS5ldSh0aGlzLmEpXkEuYUgodGhpcy4kX3RhcmdldCkpPj4+MH0sCmgoYSl7cmV0dXJuIkNsb3N1cmUgJyIrdGhpcy4kX25hbWUrIicgb2YgIisoIkluc3RhbmNlIG9mICciK0EuY3codGhpcy5hKSsiJyIpfX0KQS5iQS5wcm90b3R5cGU9ewpoKGEpe3JldHVybiJSdW50aW1lRXJyb3I6ICIrdGhpcy5hfX0KQS5FLnByb3RvdHlwZT17CmdpKGEpe3JldHVybiB0aGlzLmF9LApnRSgpe3JldHVybiBuZXcgQS5icyh0aGlzKX0sCm0oYSxiKXt2YXIgdCxzLHIscSxwPW51bGwKaWYodHlwZW9mIGI9PSJzdHJpbmciKXt0PXRoaXMuYgppZih0PT1udWxsKXJldHVybiBwCnM9dFtiXQpyPXM9PW51bGw/cDpzLmIKcmV0dXJuIHJ9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjB4M2ZmZmZmZmYpPT09Yil7cT10aGlzLmMKaWYocT09bnVsbClyZXR1cm4gcApzPXFbYl0Kcj1zPT1udWxsP3A6cy5iCnJldHVybiByfWVsc2UgcmV0dXJuIHRoaXMuYWcoYil9LAphZyhhKXt2YXIgdCxzLHI9dGhpcy5kCmlmKHI9PW51bGwpcmV0dXJuIG51bGwKdD1yW3RoaXMuWihhKV0Kcz10aGlzLmFfKHQsYSkKaWYoczwwKXJldHVybiBudWxsCnJldHVybiB0W3NdLmJ9LApMKGEsYixjKXt2YXIgdCxzLHI9dGhpcwppZih0eXBlb2YgYj09InN0cmluZyIpe3Q9ci5iCnIuYTQodD09bnVsbD9yLmI9ci5YKCk6dCxiLGMpfWVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYoYiYweDNmZmZmZmZmKT09PWIpe3M9ci5jCnIuYTQocz09bnVsbD9yLmM9ci5YKCk6cyxiLGMpfWVsc2Ugci5haChiLGMpfSwKYWgoYSxiKXt2YXIgdCxzLHIscT10aGlzLHA9cS5kCmlmKHA9PW51bGwpcD1xLmQ9cS5YKCkKdD1xLlooYSkKcz1wW3RdCmlmKHM9PW51bGwpcFt0XT1bcS5ZKGEsYildCmVsc2V7cj1xLmFfKHMsYSkKaWYocj49MClzW3JdLmI9YgplbHNlIHMucHVzaChxLlkoYSxiKSl9fSwKdihhLGIpe3ZhciB0PXRoaXMscz10LmUscj10LnIKZm9yKDtzIT1udWxsOyl7Yi4kMihzLmEscy5iKQppZihyIT09dC5yKXRocm93IEEuZChBLlcodCkpCnM9cy5jfX0sCmE0KGEsYixjKXt2YXIgdD1hW2JdCmlmKHQ9PW51bGwpYVtiXT10aGlzLlkoYixjKQplbHNlIHQuYj1jfSwKYUsoKXt0aGlzLnI9dGhpcy5yKzEmMTA3Mzc0MTgyM30sClkoYSxiKXt2YXIgdCxzPXRoaXMscj1uZXcgQS5jcShhLGIpCmlmKHMuZT09bnVsbClzLmU9cy5mPXIKZWxzZXt0PXMuZgp0LnRvU3RyaW5nCnIuZD10CnMuZj10LmM9cn0rK3MuYQpzLmFLKCkKcmV0dXJuIHJ9LApaKGEpe3JldHVybiBKLmFvKGEpJjB4M2ZmZmZmZmZ9LAphXyhhLGIpe3ZhciB0LHMKaWYoYT09bnVsbClyZXR1cm4tMQp0PWEubGVuZ3RoCmZvcihzPTA7czx0OysrcylpZihKLmEzKGFbc10uYSxiKSlyZXR1cm4gcwpyZXR1cm4tMX0sCmgoYSl7cmV0dXJuIEEuZGYodGhpcyl9LApYKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKQp0WyI8bm9uLWlkZW50aWZpZXIta2V5PiJdPXQKZGVsZXRlIHRbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHR9fQpBLmNxLnByb3RvdHlwZT17fQpBLmJzLnByb3RvdHlwZT17CmdpKGEpe3JldHVybiB0aGlzLmEuYX0sCmdsKGEpe3ZhciB0PXRoaXMuYSxzPW5ldyBBLmJ0KHQsdC5yKQpzLmM9dC5lCnJldHVybiBzfX0KQS5idC5wcm90b3R5cGU9ewpnaygpe3JldHVybiB0aGlzLmR9LApqKCl7dmFyIHQscz10aGlzLHI9cy5hCmlmKHMuYiE9PXIucil0aHJvdyBBLmQoQS5XKHIpKQp0PXMuYwppZih0PT1udWxsKXtzLmQ9bnVsbApyZXR1cm4hMX1lbHNle3MuZD10LmEKcy5jPXQuYwpyZXR1cm4hMH19fQpBLmQzLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLmEoYSl9LAokUzo5fQpBLmQ0LnByb3RvdHlwZT17CiQyKGEsYil7cmV0dXJuIHRoaXMuYShhLGIpfSwKJFM6MTB9CkEuZDUucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYShhKX0sCiRTOjExfQpBLmNwLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIlJlZ0V4cC8iK3RoaXMuYSsiLyIrdGhpcy5iLmZsYWdzfX0KQS5BLnByb3RvdHlwZT17CnAoYSl7cmV0dXJuIEEuY1Iodi50eXBlVW5pdmVyc2UsdGhpcyxhKX0sClAoYSl7cmV0dXJuIEEuZkwodi50eXBlVW5pdmVyc2UsdGhpcyxhKX19CkEuYlcucHJvdG90eXBlPXt9CkEuYlQucHJvdG90eXBlPXsKaChhKXtyZXR1cm4gdGhpcy5hfX0KQS5iXy5wcm90b3R5cGU9e30KQS5jQi5wcm90b3R5cGU9ewokMShhKXt2YXIgdD10aGlzLmEscz10LmEKdC5hPW51bGwKcy4kMCgpfSwKJFM6MTJ9CkEuY0EucHJvdG90eXBlPXsKJDEoYSl7dmFyIHQscwp0aGlzLmEuYT1hCnQ9dGhpcy5iCnM9dGhpcy5jCnQuZmlyc3RDaGlsZD90LnJlbW92ZUNoaWxkKHMpOnQuYXBwZW5kQ2hpbGQocyl9LAokUzoxM30KQS5jQy5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS4kMCgpfSwKJFM6M30KQS5jRC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS4kMCgpfSwKJFM6M30KQS5jUC5wcm90b3R5cGU9ewphRyhhLGIpe2lmKHNlbGYuc2V0VGltZW91dCE9bnVsbClzZWxmLnNldFRpbWVvdXQoQS5jYShuZXcgQS5jUSh0aGlzLGIpLDApLGEpCmVsc2UgdGhyb3cgQS5kKEEuZTMoImBzZXRUaW1lb3V0KClgIG5vdCBmb3VuZC4iKSl9fQpBLmNRLnByb3RvdHlwZT17CiQwKCl7dGhpcy5iLiQwKCl9LAokUzoxfQpBLmFpLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIkl0ZXJhdGlvbk1hcmtlcigiK3RoaXMuYisiLCAiK0EuZih0aGlzLmEpKyIpIn19CkEuYVoucHJvdG90eXBlPXsKZ2soKXt2YXIgdD10aGlzLmMKaWYodD09bnVsbClyZXR1cm4gdGhpcy5iCnJldHVybiB0LmdrKCl9LApqKCl7dmFyIHQscyxyLHEscCxvPXRoaXMKZm9yKDshMDspe3Q9by5jCmlmKHQhPW51bGwpaWYodC5qKCkpcmV0dXJuITAKZWxzZSBvLmM9bnVsbApzPWZ1bmN0aW9uKGEsYixjKXt2YXIgbixtPWIKd2hpbGUodHJ1ZSl0cnl7cmV0dXJuIGEobSxuKX1jYXRjaChsKXtuPWwKbT1jfX0oby5hLDAsMSkKaWYocyBpbnN0YW5jZW9mIEEuYWkpe3I9cy5iCmlmKHI9PT0yKXtxPW8uZAppZihxPT1udWxsfHxxLmxlbmd0aD09PTApe28uYj1udWxsCnJldHVybiExfW8uYT1xLnBvcCgpCmNvbnRpbnVlfWVsc2V7dD1zLmEKaWYocj09PTMpdGhyb3cgdAplbHNle3A9Si5hNCh0KQppZihwIGluc3RhbmNlb2YgQS5hWil7dD1vLmQKaWYodD09bnVsbCl0PW8uZD1bXQp0LnB1c2goby5hKQpvLmE9cC5hCmNvbnRpbnVlfWVsc2V7by5jPXAKY29udGludWV9fX19ZWxzZXtvLmI9cwpyZXR1cm4hMH19cmV0dXJuITF9fQpBLmM0LnByb3RvdHlwZT17CmdsKGEpe3JldHVybiBuZXcgQS5hWih0aGlzLmEoKSl9fQpBLmJYLnByb3RvdHlwZT17fQpBLmJOLnByb3RvdHlwZT17fQpBLmFNLnByb3RvdHlwZT17CmdpKGEpe3ZhciB0PXt9LHM9JC5hUAp0LmE9MApBLmJWKHRoaXMuYSx0aGlzLmIsbmV3IEEuY3godCx0aGlzKSwhMSkKcmV0dXJuIG5ldyBBLmJYKHMsdS5hKX19CkEuY3gucHJvdG90eXBlPXsKJDEoYSl7Kyt0aGlzLmEuYX0sCiRTKCl7cmV0dXJuIHRoaXMuYi4kdGkucCgifigxKSIpfX0KQS5iRC5wcm90b3R5cGU9e30KQS5jVS5wcm90b3R5cGU9e30KQS5jWC5wcm90b3R5cGU9ewokMCgpe3ZhciB0PXRoaXMuYSxzPXRoaXMuYgpBLmR2KHQsImVycm9yIix1LkspCkEuZHYocywic3RhY2tUcmFjZSIsdS5sKQpBLmY0KHQscyl9LAokUzoxfQpBLmNKLnByb3RvdHlwZT17CmFaKGEsYil7dmFyIHQscyxyCnRyeXtpZihCLmQ9PT0kLmFQKXthLiQxKGIpCnJldHVybn1BLmhhKG51bGwsbnVsbCx0aGlzLGEsYil9Y2F0Y2gocil7dD1BLmV5KHIpCnM9QS5odChyKQpBLmg5KHQscyl9fSwKYl8oYSxiKXtyZXR1cm4gdGhpcy5hWihhLGIsdS5EKX0sCmFVKGEsYil7cmV0dXJuIG5ldyBBLmNLKHRoaXMsYSxiKX19CkEuY0sucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYS5iXyh0aGlzLmIsYSl9LAokUygpe3JldHVybiB0aGlzLmMucCgifigwKSIpfX0KQS5hUi5wcm90b3R5cGU9ewptKGEsYil7aWYoIXRoaXMueS4kMShiKSlyZXR1cm4gbnVsbApyZXR1cm4gdGhpcy5hQShiKX0sCkwoYSxiLGMpe3RoaXMuYUIoYixjKX0sClooYSl7cmV0dXJuIHRoaXMueC4kMShhKSYxMDczNzQxODIzfSwKYV8oYSxiKXt2YXIgdCxzLHIKaWYoYT09bnVsbClyZXR1cm4tMQp0PWEubGVuZ3RoCmZvcihzPXRoaXMudyxyPTA7cjx0OysrcilpZihzLiQyKGFbcl0uYSxiKSlyZXR1cm4gcgpyZXR1cm4tMX19CkEuY0gucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYS5iKGEpfSwKJFM6MTR9CkEuYVMucHJvdG90eXBlPXsKZ2woYSl7dmFyIHQ9bmV3IEEuYVQodGhpcyx0aGlzLnIpCnQuYz10aGlzLmUKcmV0dXJuIHR9LApnaShhKXtyZXR1cm4gdGhpcy5hfSwKdChhLGIpe3ZhciB0LHMKaWYoYiE9PSJfX3Byb3RvX18iKXt0PXRoaXMuYgppZih0PT1udWxsKXJldHVybiExCnJldHVybiB0W2JdIT1udWxsfWVsc2V7cz10aGlzLmFKKGIpCnJldHVybiBzfX0sCmFKKGEpe3ZhciB0PXRoaXMuZAppZih0PT1udWxsKXJldHVybiExCnJldHVybiB0aGlzLlYodFt0aGlzLlMoYSldLGEpPj0wfSwKcShhLGIpe3ZhciB0LHMscj10aGlzCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18iKXt0PXIuYgpyZXR1cm4gci5hNih0PT1udWxsP3IuYj1BLmRqKCk6dCxiKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMTA3Mzc0MTgyMyk9PT1iKXtzPXIuYwpyZXR1cm4gci5hNihzPT1udWxsP3IuYz1BLmRqKCk6cyxiKX1lbHNlIHJldHVybiByLmFIKGIpfSwKYUgoYSl7dmFyIHQscyxyPXRoaXMscT1yLmQKaWYocT09bnVsbClxPXIuZD1BLmRqKCkKdD1yLlMoYSkKcz1xW3RdCmlmKHM9PW51bGwpcVt0XT1bci5SKGEpXQplbHNle2lmKHIuVihzLGEpPj0wKXJldHVybiExCnMucHVzaChyLlIoYSkpfXJldHVybiEwfSwKSihhLGIpe3ZhciB0CmlmKGIhPT0iX19wcm90b19fIilyZXR1cm4gdGhpcy5hTSh0aGlzLmIsYikKZWxzZXt0PXRoaXMuYUwoYikKcmV0dXJuIHR9fSwKYUwoYSl7dmFyIHQscyxyLHEscD10aGlzLG89cC5kCmlmKG89PW51bGwpcmV0dXJuITEKdD1wLlMoYSkKcz1vW3RdCnI9cC5WKHMsYSkKaWYocjwwKXJldHVybiExCnE9cy5zcGxpY2UociwxKVswXQppZigwPT09cy5sZW5ndGgpZGVsZXRlIG9bdF0KcC5hOChxKQpyZXR1cm4hMH0sCmE2KGEsYil7aWYoYVtiXSE9bnVsbClyZXR1cm4hMQphW2JdPXRoaXMuUihiKQpyZXR1cm4hMH0sCmFNKGEsYil7dmFyIHQKaWYoYT09bnVsbClyZXR1cm4hMQp0PWFbYl0KaWYodD09bnVsbClyZXR1cm4hMQp0aGlzLmE4KHQpCmRlbGV0ZSBhW2JdCnJldHVybiEwfSwKYTcoKXt0aGlzLnI9dGhpcy5yKzEmMTA3Mzc0MTgyM30sClIoYSl7dmFyIHQscz10aGlzLHI9bmV3IEEuY0koYSkKaWYocy5lPT1udWxsKXMuZT1zLmY9cgplbHNle3Q9cy5mCnQudG9TdHJpbmcKci5jPXQKcy5mPXQuYj1yfSsrcy5hCnMuYTcoKQpyZXR1cm4gcn0sCmE4KGEpe3ZhciB0PXRoaXMscz1hLmMscj1hLmIKaWYocz09bnVsbCl0LmU9cgplbHNlIHMuYj1yCmlmKHI9PW51bGwpdC5mPXMKZWxzZSByLmM9czstLXQuYQp0LmE3KCl9LApTKGEpe3JldHVybiBKLmFvKGEpJjEwNzM3NDE4MjN9LApWKGEsYil7dmFyIHQscwppZihhPT1udWxsKXJldHVybi0xCnQ9YS5sZW5ndGgKZm9yKHM9MDtzPHQ7KytzKWlmKEouYTMoYVtzXS5hLGIpKXJldHVybiBzCnJldHVybi0xfX0KQS5jSS5wcm90b3R5cGU9e30KQS5hVC5wcm90b3R5cGU9ewpnaygpe3ZhciB0PXRoaXMuZApyZXR1cm4gdD09bnVsbD9BLm0odGhpcykuYy5hKHQpOnR9LApqKCl7dmFyIHQ9dGhpcyxzPXQuYyxyPXQuYQppZih0LmIhPT1yLnIpdGhyb3cgQS5kKEEuVyhyKSkKZWxzZSBpZihzPT1udWxsKXt0LmQ9bnVsbApyZXR1cm4hMX1lbHNle3QuZD1zLmEKdC5jPXMuYgpyZXR1cm4hMH19fQpBLmJsLnByb3RvdHlwZT17fQpBLmFDLnByb3RvdHlwZT17JGluOjF9CkEuYTAucHJvdG90eXBlPXsKZ2woYSl7cmV0dXJuIG5ldyBBLnooYSx0aGlzLmdpKGEpKX0sCnUoYSxiKXtyZXR1cm4gdGhpcy5tKGEsYil9LAp2KGEsYil7dmFyIHQscz10aGlzLmdpKGEpCmZvcih0PTA7dDxzOysrdCl7Yi4kMSh0aGlzLm0oYSx0KSkKaWYocyE9PXRoaXMuZ2koYSkpdGhyb3cgQS5kKEEuVyhhKSl9fSwKZ2FpKGEpe3JldHVybiB0aGlzLmdpKGEpPT09MH0sCmIwKGEpe3ZhciB0LHMscixxLHA9dGhpcwppZihwLmdhaShhKSl7dD1KLmRSKDApCnJldHVybiB0fXM9cC5tKGEsMCkKcj1BLmZnKHAuZ2koYSkscywhMCkKZm9yKHE9MTtxPHAuZ2koYSk7KytxKXJbcV09cC5tKGEscSkKcmV0dXJuIHJ9LApoKGEpe3JldHVybiBBLmRjKGEsIlsiLCJdIil9fQpBLmFELnByb3RvdHlwZT17fQpBLmNzLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHQscz10aGlzLmEKaWYoIXMuYSl0aGlzLmIuYSs9IiwgIgpzLmE9ITEKcz10aGlzLmIKdD1zLmErPUEuZihhKQpzLmE9dCsiOiAiCnMuYSs9QS5mKGIpfSwKJFM6MTV9CkEuSi5wcm90b3R5cGU9ewp2KGEsYil7dmFyIHQscyxyLHEKZm9yKHQ9Si5hNCh0aGlzLmdFKCkpLHM9QS5tKHRoaXMpLnAoIkouViIpO3QuaigpOyl7cj10LmdrKCkKcT10aGlzLm0oMCxyKQpiLiQyKHIscT09bnVsbD9zLmEocSk6cSl9fSwKZ2koYSl7cmV0dXJuIEouYXAodGhpcy5nRSgpKX0sCmgoYSl7cmV0dXJuIEEuZGYodGhpcyl9LAokaUk6MX0KQS5hSy5wcm90b3R5cGU9ewpDKGEsYil7dmFyIHQKZm9yKHQ9Si5hNChiKTt0LmooKTspdGhpcy5xKDAsdC5naygpKX0sCmgoYSl7cmV0dXJuIEEuZGModGhpcywieyIsIn0iKX0sCmEwKGEsYil7dmFyIHQscyxyLHE9dGhpcy5nbCh0aGlzKQppZighcS5qKCkpcmV0dXJuIiIKaWYoYj09PSIiKXt0PUEubShxKS5jCnM9IiIKZG97cj1xLmQKcys9QS5mKHI9PW51bGw/dC5hKHIpOnIpfXdoaWxlKHEuaigpKQp0PXN9ZWxzZXt0PXEuZAp0PSIiK0EuZih0PT1udWxsP0EubShxKS5jLmEodCk6dCkKZm9yKHM9QS5tKHEpLmM7cS5qKCk7KXtyPXEuZAp0PXQrYitBLmYocj09bnVsbD9zLmEocik6cil9fXJldHVybiB0LmNoYXJDb2RlQXQoMCk9PTA/dDp0fSwKdShhLGIpe3ZhciB0LHMscixxLHA9ImluZGV4IgpBLmR2KGIscCx1LlMpCkEuZFgoYixwKQpmb3IodD10aGlzLmdsKHRoaXMpLHM9QS5tKHQpLmMscj0wO3QuaigpOyl7cT10LmQKaWYocT09bnVsbClxPXMuYShxKQppZihiPT09cilyZXR1cm4gcTsrK3J9dGhyb3cgQS5kKEEuYXgoYix0aGlzLHAsbnVsbCxyKSl9fQpBLmFKLnByb3RvdHlwZT17JGlPOjF9CkEuYVcucHJvdG90eXBlPXskaU86MX0KQS5hVS5wcm90b3R5cGU9e30KQS5hWC5wcm90b3R5cGU9e30KQS5iMi5wcm90b3R5cGU9e30KQS5rLnByb3RvdHlwZT17fQpBLmJhLnByb3RvdHlwZT17CmgoYSl7dmFyIHQ9dGhpcy5hCmlmKHQhPW51bGwpcmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6ICIrQS5jaSh0KQpyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZCJ9fQpBLmJJLnByb3RvdHlwZT17fQpBLmJ5LnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIlRocm93IG9mIG51bGwuIn19CkEuRi5wcm90b3R5cGU9ewpnVSgpe3JldHVybiJJbnZhbGlkIGFyZ3VtZW50IisoIXRoaXMuYT8iKHMpIjoiIil9LApnVCgpe3JldHVybiIifSwKaChhKXt2YXIgdD10aGlzLHM9dC5jLHI9cz09bnVsbD8iIjoiICgiK3MrIikiLHE9dC5kLHA9cT09bnVsbD8iIjoiOiAiK3Esbz10LmdVKCkrcitwCmlmKCF0LmEpcmV0dXJuIG8KcmV0dXJuIG8rdC5nVCgpKyI6ICIrQS5jaSh0LmIpfX0KQS5hSS5wcm90b3R5cGU9ewpnVSgpe3JldHVybiJSYW5nZUVycm9yIn0sCmdUKCl7dmFyIHQscz10aGlzLmUscj10aGlzLmYKaWYocz09bnVsbCl0PXIhPW51bGw/IjogTm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAiK0EuZihyKToiIgplbHNlIGlmKHI9PW51bGwpdD0iOiBOb3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICIrQS5mKHMpCmVsc2UgaWYocj5zKXQ9IjogTm90IGluIGluY2x1c2l2ZSByYW5nZSAiK0EuZihzKSsiLi4iK0EuZihyKQplbHNlIHQ9cjxzPyI6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5IjoiOiBPbmx5IHZhbGlkIHZhbHVlIGlzICIrQS5mKHMpCnJldHVybiB0fX0KQS5iay5wcm90b3R5cGU9ewpnVSgpe3JldHVybiJSYW5nZUVycm9yIn0sCmdUKCl7aWYodGhpcy5iPDApcmV0dXJuIjogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmUiCnZhciB0PXRoaXMuZgppZih0PT09MClyZXR1cm4iOiBubyBpbmRpY2VzIGFyZSB2YWxpZCIKcmV0dXJuIjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiAiK3R9LApnaShhKXtyZXR1cm4gdGhpcy5mfX0KQS5iTC5wcm90b3R5cGU9ewpoKGEpe3JldHVybiJVbnN1cHBvcnRlZCBvcGVyYXRpb246ICIrdGhpcy5hfX0KQS5iSi5wcm90b3R5cGU9ewpoKGEpe3JldHVybiJVbmltcGxlbWVudGVkRXJyb3I6ICIrdGhpcy5hfX0KQS5hYi5wcm90b3R5cGU9ewpoKGEpe3JldHVybiJCYWQgc3RhdGU6ICIrdGhpcy5hfX0KQS5iZS5wcm90b3R5cGU9ewpoKGEpe3ZhciB0PXRoaXMuYQppZih0PT1udWxsKXJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLiIKcmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246ICIrQS5jaSh0KSsiLiJ9fQpBLmFMLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIlN0YWNrIE92ZXJmbG93In0sCiRpazoxfQpBLmJnLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlICciK3RoaXMuYSsiJyBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uIn19CkEuY0YucHJvdG90eXBlPXsKaChhKXtyZXR1cm4iRXhjZXB0aW9uOiAiK3RoaXMuYX19CkEuY2wucHJvdG90eXBlPXsKaChhKXt2YXIgdD10aGlzLmEscz0iIiE9PXQ/IkZvcm1hdEV4Y2VwdGlvbjogIit0OiJGb3JtYXRFeGNlcHRpb24iLHI9dGhpcy5iCmlmKHR5cGVvZiByPT0ic3RyaW5nIil7aWYoci5sZW5ndGg+Nzgpcj1CLmEuYTMociwwLDc1KSsiLi4uIgpyZXR1cm4gcysiXG4iK3J9ZWxzZSByZXR1cm4gc319CkEuYXoucHJvdG90eXBlPXsKTihhLGIpe3JldHVybiBuZXcgQS5hZih0aGlzLGIpfSwKZ2koYSl7dmFyIHQscz10aGlzLmdsKHRoaXMpCmZvcih0PTA7cy5qKCk7KSsrdApyZXR1cm4gdH0sCmdIKGEpe3ZhciB0LHM9dGhpcy5nbCh0aGlzKQppZighcy5qKCkpdGhyb3cgQS5kKEEuZjgoKSkKdD1zLmdrKCkKaWYocy5qKCkpdGhyb3cgQS5kKEEuZjkoKSkKcmV0dXJuIHR9LAp1KGEsYil7dmFyIHQscyxyCkEuZFgoYiwiaW5kZXgiKQpmb3IodD10aGlzLmdsKHRoaXMpLHM9MDt0LmooKTspe3I9dC5naygpCmlmKGI9PT1zKXJldHVybiByOysrc310aHJvdyBBLmQoQS5heChiLHRoaXMsImluZGV4IixudWxsLHMpKX0sCmgoYSl7cmV0dXJuIEEuZjcodGhpcywiKCIsIikiKX19CkEuYm0ucHJvdG90eXBlPXt9CkEudC5wcm90b3R5cGU9ewpnbihhKXtyZXR1cm4gQS5qLnByb3RvdHlwZS5nbi5jYWxsKHRoaXMsdGhpcyl9LApoKGEpe3JldHVybiJudWxsIn19CkEuai5wcm90b3R5cGU9eyRpajoxLApHKGEsYil7cmV0dXJuIHRoaXM9PT1ifSwKZ24oYSl7cmV0dXJuIEEuYUgodGhpcyl9LApoKGEpe3JldHVybiJJbnN0YW5jZSBvZiAnIitBLmN3KHRoaXMpKyInIn0sCnRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuaCh0aGlzKX19CkEuYkUucHJvdG90eXBlPXsKZ2koYSl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9LApoKGEpe3ZhciB0PXRoaXMuYQpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPT0wP3Q6dH19CkEuYy5wcm90b3R5cGU9e30KQS5iOC5wcm90b3R5cGU9ewpoKGEpe3JldHVybiBTdHJpbmcoYSl9fQpBLmI5LnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIFN0cmluZyhhKX19CkEuYTUucHJvdG90eXBlPXskaWE1OjF9CkEuVS5wcm90b3R5cGU9eyRpVToxfQpBLkMucHJvdG90eXBlPXsKZ2koYSl7cmV0dXJuIGEubGVuZ3RofX0KQS5hci5wcm90b3R5cGU9ewpnaShhKXtyZXR1cm4gYS5sZW5ndGh9fQpBLmNlLnByb3RvdHlwZT17fQpBLmFzLnByb3RvdHlwZT17fQpBLmNmLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIFN0cmluZyhhKX19CkEuY2cucHJvdG90eXBlPXsKZ2koYSl7cmV0dXJuIGEubGVuZ3RofX0KQS5iUC5wcm90b3R5cGU9ewpnYWkoYSl7cmV0dXJuIHRoaXMuYS5maXJzdEVsZW1lbnRDaGlsZD09bnVsbH0sCmdpKGEpe3JldHVybiB0aGlzLmIubGVuZ3RofSwKbShhLGIpe3JldHVybiB1LmguYSh0aGlzLmJbYl0pfSwKcShhLGIpe3RoaXMuYS5hcHBlbmRDaGlsZChiKQpyZXR1cm4gYn0sCmdsKGEpe3ZhciB0PXRoaXMuYjAodGhpcykKcmV0dXJuIG5ldyBKLlQodCx0Lmxlbmd0aCl9fQpBLngucHJvdG90eXBlPXsKZ2koYSl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9LAptKGEsYil7cmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmFbYl0pfX0KQS5pLnByb3RvdHlwZT17CmdhVChhKXtyZXR1cm4gbmV3IEEuYlIoYSl9LApnYWMoYSl7cmV0dXJuIG5ldyBBLmJQKGEsYS5jaGlsZHJlbil9LApnYWQoYSl7cmV0dXJuIG5ldyBBLmJTKGEpfSwKaChhKXtyZXR1cm4gYS5sb2NhbE5hbWV9LApBKGEsYixjLGQpe3ZhciB0LHMscixxCmlmKGM9PW51bGwpe3Q9JC5kTwppZih0PT1udWxsKXt0PVtdCnM9bmV3IEEuYUYodCkKdC5wdXNoKEEuZTUobnVsbCkpCnQucHVzaChBLmU5KCkpCiQuZE89cwpkPXN9ZWxzZSBkPXQKdD0kLmROCmlmKHQ9PW51bGwpe3Q9bmV3IEEuYzcoZCkKJC5kTj10CmM9dH1lbHNle3QuYT1kCmM9dH19aWYoJC5OPT1udWxsKXt0PWRvY3VtZW50CnM9dC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpCiQuTj1zCiQuZGE9cy5jcmVhdGVSYW5nZSgpCnM9JC5OLmNyZWF0ZUVsZW1lbnQoImJhc2UiKQp1LnkuYShzKQp0PXQuYmFzZVVSSQp0LnRvU3RyaW5nCnMuaHJlZj10CiQuTi5oZWFkLmFwcGVuZENoaWxkKHMpfXQ9JC5OCmlmKHQuYm9keT09bnVsbCl7cz10LmNyZWF0ZUVsZW1lbnQoImJvZHkiKQp0LmJvZHk9dS50LmEocyl9dD0kLk4KaWYodS50LmIoYSkpe3Q9dC5ib2R5CnQudG9TdHJpbmcKcj10fWVsc2V7dC50b1N0cmluZwpyPXQuY3JlYXRlRWxlbWVudChhLnRhZ05hbWUpCiQuTi5ib2R5LmFwcGVuZENoaWxkKHIpfWlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUmJiFCLmIudChCLkIsYS50YWdOYW1lKSl7JC5kYS5zZWxlY3ROb2RlQ29udGVudHMocikKdD0kLmRhCnE9dC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoYil9ZWxzZXtyLmlubmVySFRNTD1iCnE9JC5OLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpmb3IoO3Q9ci5maXJzdENoaWxkLHQhPW51bGw7KXEuYXBwZW5kQ2hpbGQodCl9aWYociE9PSQuTi5ib2R5KUouZEYocikKYy5hMihxKQpkb2N1bWVudC5hZG9wdE5vZGUocSkKcmV0dXJuIHF9LAphVihhLGIsYyl7cmV0dXJuIHRoaXMuQShhLGIsYyxudWxsKX0sCmFyKGEsYil7YS50ZXh0Q29udGVudD1udWxsCmEuYXBwZW5kQ2hpbGQodGhpcy5BKGEsYixudWxsLG51bGwpKX0sCmdhZihhKXtyZXR1cm4gYS5pbm5lckhUTUx9LApnYW4oYSl7cmV0dXJuIGEudGFnTmFtZX0sCmdhaihhKXtyZXR1cm4gbmV3IEEudyhhLCJjbGljayIsITEsdS5DKX0sCmdhayhhKXtyZXR1cm4gbmV3IEEudyhhLCJtb3VzZWxlYXZlIiwhMSx1LkMpfSwKZ2FsKGEpe3JldHVybiBuZXcgQS53KGEsIm1vdXNlbW92ZSIsITEsdS5DKX0sCmdhbShhKXtyZXR1cm4gbmV3IEEudyhhLCJtb3VzZW92ZXIiLCExLHUuQyl9LAokaWk6MX0KQS5jaC5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdS5oLmIoYSl9LAokUzo0fQpBLmEucHJvdG90eXBlPXskaWE6MX0KQS5iaS5wcm90b3R5cGU9ewphYShhLGIsYyxkKXtpZihjIT1udWxsKXRoaXMuYUkoYSxiLGMsZCl9LAphUihhLGIsYyl7cmV0dXJuIHRoaXMuYWEoYSxiLGMsbnVsbCl9LAphSShhLGIsYyxkKXtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKGIsQS5jYShjLDEpLGQpfX0KQS5iai5wcm90b3R5cGU9ewpnaShhKXtyZXR1cm4gYS5sZW5ndGh9fQpBLlkucHJvdG90eXBlPXsKZ2koYSl7cmV0dXJuIGEubGVuZ3RofSwKbShhLGIpe2lmKGI+Pj4wIT09Ynx8Yj49YS5sZW5ndGgpdGhyb3cgQS5kKEEuYXgoYixhLG51bGwsbnVsbCxudWxsKSkKcmV0dXJuIGFbYl19LAp1KGEsYil7cmV0dXJuIGFbYl19LAokaWE5OjEsCiRpbjoxfQpBLmNyLnByb3RvdHlwZT17CmgoYSl7cmV0dXJuIFN0cmluZyhhKX19CkEudi5wcm90b3R5cGU9eyRpdjoxfQpBLm8ucHJvdG90eXBlPXsKZ0goYSl7dmFyIHQ9dGhpcy5hLHM9dC5jaGlsZE5vZGVzLmxlbmd0aAppZihzPT09MCl0aHJvdyBBLmQoQS5kaCgiTm8gZWxlbWVudHMiKSkKaWYocz4xKXRocm93IEEuZChBLmRoKCJNb3JlIHRoYW4gb25lIGVsZW1lbnQiKSkKdD10LmZpcnN0Q2hpbGQKdC50b1N0cmluZwpyZXR1cm4gdH0sCkMoYSxiKXt2YXIgdCxzLHIscT1iLmEscD10aGlzLmEKaWYocSE9PXApZm9yKHQ9cS5jaGlsZE5vZGVzLmxlbmd0aCxzPTA7czx0Oysrcyl7cj1xLmZpcnN0Q2hpbGQKci50b1N0cmluZwpwLmFwcGVuZENoaWxkKHIpfXJldHVybn0sCmdsKGEpe3ZhciB0PXRoaXMuYS5jaGlsZE5vZGVzCnJldHVybiBuZXcgQS5hdih0LHQubGVuZ3RoKX0sCmdpKGEpe3JldHVybiB0aGlzLmEuY2hpbGROb2Rlcy5sZW5ndGh9LAptKGEsYil7cmV0dXJuIHRoaXMuYS5jaGlsZE5vZGVzW2JdfX0KQS5lLnByb3RvdHlwZT17CmFYKGEpe3ZhciB0PWEucGFyZW50Tm9kZQppZih0IT1udWxsKXQucmVtb3ZlQ2hpbGQoYSl9LApoKGEpe3ZhciB0PWEubm9kZVZhbHVlCnJldHVybiB0PT1udWxsP3RoaXMuYXcoYSk6dH0sCiRpZToxfQpBLmFFLnByb3RvdHlwZT17CmdpKGEpe3JldHVybiBhLmxlbmd0aH0sCm0oYSxiKXtpZihiPj4+MCE9PWJ8fGI+PWEubGVuZ3RoKXRocm93IEEuZChBLmF4KGIsYSxudWxsLG51bGwsbnVsbCkpCnJldHVybiBhW2JdfSwKdShhLGIpe3JldHVybiBhW2JdfSwKJGlhOToxLAokaW46MX0KQS5iQi5wcm90b3R5cGU9ewpnaShhKXtyZXR1cm4gYS5sZW5ndGh9fQpBLmFOLnByb3RvdHlwZT17CkEoYSxiLGMsZCl7dmFyIHQscwppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLk8oYSxiLGMsZCkKdD1BLmYyKCI8dGFibGU+IitiKyI8L3RhYmxlPiIsYyxkKQpzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpuZXcgQS5vKHMpLkMoMCxuZXcgQS5vKHQpKQpyZXR1cm4gc319CkEuYkYucHJvdG90eXBlPXsKQShhLGIsYyxkKXt2YXIgdCxzCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuTyhhLGIsYyxkKQp0PWRvY3VtZW50CnM9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKdD1uZXcgQS5vKEIubi5BKHQuY3JlYXRlRWxlbWVudCgidGFibGUiKSxiLGMsZCkpCnQ9bmV3IEEubyh0LmdIKHQpKQpuZXcgQS5vKHMpLkMoMCxuZXcgQS5vKHQuZ0godCkpKQpyZXR1cm4gc319CkEuYkcucHJvdG90eXBlPXsKQShhLGIsYyxkKXt2YXIgdCxzCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuTyhhLGIsYyxkKQp0PWRvY3VtZW50CnM9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKdD1uZXcgQS5vKEIubi5BKHQuY3JlYXRlRWxlbWVudCgidGFibGUiKSxiLGMsZCkpCm5ldyBBLm8ocykuQygwLG5ldyBBLm8odC5nSCh0KSkpCnJldHVybiBzfX0KQS5hYy5wcm90b3R5cGU9eyRpYWM6MX0KQS5CLnByb3RvdHlwZT17fQpBLmFPLnByb3RvdHlwZT17CmFxKGEsYil7YS5zY3JvbGwoQS5lbihiKSkKcmV0dXJufX0KQS5hZy5wcm90b3R5cGU9eyRpYWc6MX0KQS5hVi5wcm90b3R5cGU9ewpnaShhKXtyZXR1cm4gYS5sZW5ndGh9LAptKGEsYil7aWYoYj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBBLmQoQS5heChiLGEsbnVsbCxudWxsLG51bGwpKQpyZXR1cm4gYVtiXX0sCnUoYSxiKXtyZXR1cm4gYVtiXX0sCiRpYTk6MSwKJGluOjF9CkEuYk8ucHJvdG90eXBlPXsKdihhLGIpe3ZhciB0LHMscixxLHAsbwpmb3IodD10aGlzLmdFKCkscz10Lmxlbmd0aCxyPXRoaXMuYSxxPTA7cTx0Lmxlbmd0aDt0Lmxlbmd0aD09PXN8fCgwLEEuZEMpKHQpLCsrcSl7cD10W3FdCm89ci5nZXRBdHRyaWJ1dGUocCkKYi4kMihwLG89PW51bGw/QS5kcShvKTpvKX19LApnRSgpe3ZhciB0LHMscixxLHAsbz10aGlzLmEuYXR0cmlidXRlcyxuPVtdCmZvcih0PW8ubGVuZ3RoLHM9dS54LHI9MDtyPHQ7KytyKXtxPXMuYShvW3JdKQppZihxLm5hbWVzcGFjZVVSST09bnVsbCl7cD1xLm5hbWUKcC50b1N0cmluZwpuLnB1c2gocCl9fXJldHVybiBufX0KQS5iUi5wcm90b3R5cGU9ewptKGEsYil7cmV0dXJuIHRoaXMuYS5nZXRBdHRyaWJ1dGUoQS5kcShiKSl9LApnaShhKXtyZXR1cm4gdGhpcy5nRSgpLmxlbmd0aH19CkEuYlMucHJvdG90eXBlPXsKRigpe3ZhciB0LHMscixxLHA9QS5hQih1Lk4pCmZvcih0PXRoaXMuYS5jbGFzc05hbWUuc3BsaXQoIiAiKSxzPXQubGVuZ3RoLHI9MDtyPHM7KytyKXtxPUouZEcodFtyXSkKaWYocS5sZW5ndGghPT0wKXAucSgwLHEpfXJldHVybiBwfSwKYTEoYSl7dGhpcy5hLmNsYXNzTmFtZT1hLmEwKDAsIiAiKX0sCmdpKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aH0sCnEoYSxiKXt2YXIgdD10aGlzLmEuY2xhc3NMaXN0LHM9dC5jb250YWlucyhiKQp0LmFkZChiKQpyZXR1cm4hc30sCkooYSxiKXt2YXIgdD10aGlzLmEuY2xhc3NMaXN0LHM9dC5jb250YWlucyhiKQp0LnJlbW92ZShiKQpyZXR1cm4gc319CkEuZGIucHJvdG90eXBlPXt9CkEuYVEucHJvdG90eXBlPXt9CkEudy5wcm90b3R5cGU9e30KQS5iVS5wcm90b3R5cGU9e30KQS5jRS5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hLiQxKGEpfSwKJFM6MTZ9CkEuYWgucHJvdG90eXBlPXsKYUUoYSl7dmFyIHQKaWYoJC5iWS5hPT09MCl7Zm9yKHQ9MDt0PDI2MjsrK3QpJC5iWS5MKDAsQi5BW3RdLEEuaHYoKSkKZm9yKHQ9MDt0PDEyOysrdCkkLmJZLkwoMCxCLmVbdF0sQS5odygpKX19LApJKGEpe3JldHVybiAkLmVNKCkudCgwLEEuYXQoYSkpfSwKRChhLGIsYyl7dmFyIHQ9JC5iWS5tKDAsQS5hdChhKSsiOjoiK2IpCmlmKHQ9PW51bGwpdD0kLmJZLm0oMCwiKjo6IitiKQppZih0PT1udWxsKXJldHVybiExCnJldHVybiB0LiQ0KGEsYixjLHRoaXMpfSwKJGlLOjF9CkEuYTgucHJvdG90eXBlPXsKZ2woYSl7cmV0dXJuIG5ldyBBLmF2KGEsdGhpcy5naShhKSl9fQpBLmFGLnByb3RvdHlwZT17CkkoYSl7cmV0dXJuIEIuYi5hYih0aGlzLmEsbmV3IEEuY3UoYSkpfSwKRChhLGIsYyl7cmV0dXJuIEIuYi5hYih0aGlzLmEsbmV3IEEuY3QoYSxiLGMpKX0sCiRpSzoxfQpBLmN1LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBhLkkodGhpcy5hKX0sCiRTOjV9CkEuY3QucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIGEuRCh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzo1fQpBLmFZLnByb3RvdHlwZT17CmFGKGEsYixjLGQpe3ZhciB0LHMscgp0aGlzLmEuQygwLGMpCnQ9Yi5OKDAsbmV3IEEuY00oKSkKcz1iLk4oMCxuZXcgQS5jTigpKQp0aGlzLmIuQygwLHQpCnI9dGhpcy5jCnIuQygwLEIuQykKci5DKDAscyl9LApJKGEpe3JldHVybiB0aGlzLmEudCgwLEEuYXQoYSkpfSwKRChhLGIsYyl7dmFyIHQscz10aGlzLHI9QS5hdChhKSxxPXMuYyxwPXIrIjo6IitiCmlmKHEudCgwLHApKXJldHVybiBzLmQuYVMoYykKZWxzZXt0PSIqOjoiK2IKaWYocS50KDAsdCkpcmV0dXJuIHMuZC5hUyhjKQplbHNle3E9cy5iCmlmKHEudCgwLHApKXJldHVybiEwCmVsc2UgaWYocS50KDAsdCkpcmV0dXJuITAKZWxzZSBpZihxLnQoMCxyKyI6OioiKSlyZXR1cm4hMAplbHNlIGlmKHEudCgwLCIqOjoqIikpcmV0dXJuITB9fXJldHVybiExfSwKJGlLOjF9CkEuY00ucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIUIuYi50KEIuZSxhKX0sCiRTOjZ9CkEuY04ucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEIuYi50KEIuZSxhKX0sCiRTOjZ9CkEuYzUucHJvdG90eXBlPXsKRChhLGIsYyl7aWYodGhpcy5hRChhLGIsYykpcmV0dXJuITAKaWYoYj09PSJ0ZW1wbGF0ZSImJmM9PT0iIilyZXR1cm4hMAppZihhLmdldEF0dHJpYnV0ZSgidGVtcGxhdGUiKT09PSIiKXJldHVybiB0aGlzLmUudCgwLGIpCnJldHVybiExfX0KQS5jTy5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4iVEVNUExBVEU6OiIrYX0sCiRTOjE3fQpBLmMzLnByb3RvdHlwZT17CkkoYSl7dmFyIHQKaWYodS5ZLmIoYSkpcmV0dXJuITEKdD11LnUuYihhKQppZih0JiZBLmF0KGEpPT09ImZvcmVpZ25PYmplY3QiKXJldHVybiExCmlmKHQpcmV0dXJuITAKcmV0dXJuITF9LApEKGEsYixjKXtpZihiPT09ImlzInx8Qi5hLmF1KGIsIm9uIikpcmV0dXJuITEKcmV0dXJuIHRoaXMuSShhKX0sCiRpSzoxfQpBLmF2LnByb3RvdHlwZT17CmooKXt2YXIgdD10aGlzLHM9dC5jKzEscj10LmIKaWYoczxyKXt0LmQ9Si5lTih0LmEscykKdC5jPXMKcmV0dXJuITB9dC5kPW51bGwKdC5jPXIKcmV0dXJuITF9LApnaygpe3ZhciB0PXRoaXMuZApyZXR1cm4gdD09bnVsbD9BLm0odGhpcykuYy5hKHQpOnR9fQpBLmNMLnByb3RvdHlwZT17fQpBLmM3LnByb3RvdHlwZT17CmEyKGEpe3ZhciB0LHM9bmV3IEEuY1QodGhpcykKZG97dD10aGlzLmIKcy4kMihhLG51bGwpfXdoaWxlKHQhPT10aGlzLmIpfSwKSyhhLGIpeysrdGhpcy5iCmlmKGI9PW51bGx8fGIhPT1hLnBhcmVudE5vZGUpSi5kRihhKQplbHNlIGIucmVtb3ZlQ2hpbGQoYSl9LAphTyhhLGIpe3ZhciB0LHMscixxLHAsbz0hMCxuPW51bGwsbT1udWxsCnRyeXtuPUouZVEoYSkKbT1uLmEuZ2V0QXR0cmlidXRlKCJpcyIpCnQ9ZnVuY3Rpb24oYyl7aWYoIShjLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApKXJldHVybiB0cnVlCmlmKGMuaWQ9PSJsYXN0Q2hpbGQifHxjLm5hbWU9PSJsYXN0Q2hpbGQifHxjLmlkPT0icHJldmlvdXNTaWJsaW5nInx8Yy5uYW1lPT0icHJldmlvdXNTaWJsaW5nInx8Yy5pZD09ImNoaWxkcmVuInx8Yy5uYW1lPT0iY2hpbGRyZW4iKXJldHVybiB0cnVlCnZhciBsPWMuY2hpbGROb2RlcwppZihjLmxhc3RDaGlsZCYmYy5sYXN0Q2hpbGQhPT1sW2wubGVuZ3RoLTFdKXJldHVybiB0cnVlCmlmKGMuY2hpbGRyZW4paWYoIShjLmNoaWxkcmVuIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb258fGMuY2hpbGRyZW4gaW5zdGFuY2VvZiBOb2RlTGlzdCkpcmV0dXJuIHRydWUKdmFyIGs9MAppZihjLmNoaWxkcmVuKWs9Yy5jaGlsZHJlbi5sZW5ndGgKZm9yKHZhciBqPTA7ajxrO2orKyl7dmFyIGk9Yy5jaGlsZHJlbltqXQppZihpLmlkPT0iYXR0cmlidXRlcyJ8fGkubmFtZT09ImF0dHJpYnV0ZXMifHxpLmlkPT0ibGFzdENoaWxkInx8aS5uYW1lPT0ibGFzdENoaWxkInx8aS5pZD09InByZXZpb3VzU2libGluZyJ8fGkubmFtZT09InByZXZpb3VzU2libGluZyJ8fGkuaWQ9PSJjaGlsZHJlbiJ8fGkubmFtZT09ImNoaWxkcmVuIilyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9KGEpCm89dD8hMDohKGEuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCl9Y2F0Y2gocSl7fXM9ImVsZW1lbnQgdW5wcmludGFibGUiCnRyeXtzPUouYjcoYSl9Y2F0Y2gocSl7fXRyeXtyPUEuYXQoYSkKdGhpcy5hTihhLGIsbyxzLHIsbixtKX1jYXRjaChxKXtpZihBLmV5KHEpIGluc3RhbmNlb2YgQS5GKXRocm93IHEKZWxzZXt0aGlzLksoYSxiKQp3aW5kb3cKcD1BLmYocykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4oIlJlbW92aW5nIGNvcnJ1cHRlZCBlbGVtZW50ICIrcCl9fX0sCmFOKGEsYixjLGQsZSxmLGcpe3ZhciB0LHMscixxLHAsbyxuLG09dGhpcwppZihjKXttLksoYSxiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4oIlJlbW92aW5nIGVsZW1lbnQgZHVlIHRvIGNvcnJ1cHRlZCBhdHRyaWJ1dGVzIG9uIDwiK2QrIj4iKQpyZXR1cm59aWYoIW0uYS5JKGEpKXttLksoYSxiKQp3aW5kb3cKdD1BLmYoYikKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4oIlJlbW92aW5nIGRpc2FsbG93ZWQgZWxlbWVudCA8IitlKyI+IGZyb20gIit0KQpyZXR1cm59aWYoZyE9bnVsbClpZighbS5hLkQoYSwiaXMiLGcpKXttLksoYSxiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4oIlJlbW92aW5nIGRpc2FsbG93ZWQgdHlwZSBleHRlbnNpb24gPCIrZSsnIGlzPSInK2crJyI+JykKcmV0dXJufXM9Zi5nRSgpLnNsaWNlKDApCmZvcihyPWYuZ0UoKS5sZW5ndGgtMSx0PWYuYSxxPSJSZW1vdmluZyBkaXNhbGxvd2VkIGF0dHJpYnV0ZSA8IitlKyIgIjtyPj0wOy0tcil7cD1zW3JdCm89bS5hCm49Si5lVShwKQpBLmRxKHApCmlmKCFvLkQoYSxuLHQuZ2V0QXR0cmlidXRlKHApKSl7d2luZG93Cm89dC5nZXRBdHRyaWJ1dGUocCkKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4ocStwKyc9IicrQS5mKG8pKyciPicpCnQucmVtb3ZlQXR0cmlidXRlKHApfX1pZih1LkcuYihhKSl7dD1hLmNvbnRlbnQKdC50b1N0cmluZwptLmEyKHQpfX19CkEuY1QucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgdCxzLHIscSxwLG89dGhpcy5hCnN3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6by5hTyhhLGIpCmJyZWFrCmNhc2UgODpjYXNlIDExOmNhc2UgMzpjYXNlIDQ6YnJlYWsKZGVmYXVsdDpvLksoYSxiKX10PWEubGFzdENoaWxkCmZvcig7dCE9bnVsbDspe3M9bnVsbAp0cnl7cz10LnByZXZpb3VzU2libGluZwppZihzIT1udWxsKXtyPXMubmV4dFNpYmxpbmcKcT10CnE9cj09bnVsbD9xIT1udWxsOnIhPT1xCnI9cX1lbHNlIHI9ITEKaWYocil7cj1BLmRoKCJDb3JydXB0IEhUTUwiKQp0aHJvdyBBLmQocil9fWNhdGNoKHApe3I9dDsrK28uYgpxPXIucGFyZW50Tm9kZQppZihhIT09cSl7aWYocSE9bnVsbClxLnJlbW92ZUNoaWxkKHIpfWVsc2UgYS5yZW1vdmVDaGlsZChyKQp0PW51bGwKcz1hLmxhc3RDaGlsZH1pZih0IT1udWxsKXRoaXMuJDIodCxhKQp0PXN9fSwKJFM6MTh9CkEuYlEucHJvdG90eXBlPXt9CkEuYloucHJvdG90eXBlPXt9CkEuY18ucHJvdG90eXBlPXt9CkEuYzAucHJvdG90eXBlPXt9CkEuYzEucHJvdG90eXBlPXt9CkEuYzgucHJvdG90eXBlPXt9CkEuYzkucHJvdG90eXBlPXt9CkEuY1YucHJvdG90eXBlPXsKJDEoYSl7dGhpcy5hLnB1c2goQS5lZyhhKSl9LAokUzoxOX0KQS5kMC5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYVthXT1BLmVnKGIpfSwKJFM6MjB9CkEuYmYucHJvdG90eXBlPXsKYTkoYSl7dmFyIHQ9JC5lQSgpLmIKaWYodC50ZXN0KGEpKXJldHVybiBhCnRocm93IEEuZChBLmVWKGEsInZhbHVlIiwiTm90IGEgdmFsaWQgY2xhc3MgdG9rZW4iKSl9LApoKGEpe3JldHVybiB0aGlzLkYoKS5hMCgwLCIgIil9LApnbChhKXt2YXIgdD10aGlzLkYoKQpyZXR1cm4gQS5mdyh0LHQucil9LApnaShhKXtyZXR1cm4gdGhpcy5GKCkuYX0sCnEoYSxiKXt2YXIgdAp0aGlzLmE5KGIpCnQ9dGhpcy5hVyhuZXcgQS5jZChiKSkKcmV0dXJuIHQ9PW51bGw/ITE6dH0sCkooYSxiKXt2YXIgdCxzCnRoaXMuYTkoYikKdD10aGlzLkYoKQpzPXQuSigwLGIpCnRoaXMuYTEodCkKcmV0dXJuIHN9LAp1KGEsYil7cmV0dXJuIHRoaXMuRigpLnUoMCxiKX0sCmFXKGEpe3ZhciB0PXRoaXMuRigpLHM9YS4kMSh0KQp0aGlzLmExKHQpCnJldHVybiBzfX0KQS5jZC5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gYS5xKDAsdGhpcy5hKX0sCiRTOjIxfQpBLmF1LnByb3RvdHlwZT17CmdNKCl7cmV0dXJuIG5ldyBBLmJ2KG5ldyBBLmFmKHRoaXMuYixuZXcgQS5jaigpKSxuZXcgQS5jaygpKX0sCnYoYSxiKXtCLmIudihBLmRWKHRoaXMuZ00oKSwhMSksYil9LApxKGEsYil7dGhpcy5iLmEuYXBwZW5kQ2hpbGQoYil9LApnaShhKXtyZXR1cm4gSi5hcCh0aGlzLmdNKCkuYSl9LAptKGEsYil7dmFyIHQ9dGhpcy5nTSgpCnJldHVybiB0LmIuJDEoSi5kOSh0LmEsYikpfSwKZ2woYSl7dmFyIHQ9QS5kVih0aGlzLmdNKCksITEpCnJldHVybiBuZXcgSi5UKHQsdC5sZW5ndGgpfX0KQS5jai5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdS5oLmIoYSl9LAokUzo0fQpBLmNrLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB1LmguYShhKX0sCiRTOjIyfQpBLmFhLnByb3RvdHlwZT17JGlhYToxfQpBLmJiLnByb3RvdHlwZT17CkYoKXt2YXIgdCxzLHIscSxwPXRoaXMuYS5nZXRBdHRyaWJ1dGUoImNsYXNzIiksbz1BLmFCKHUuTikKaWYocD09bnVsbClyZXR1cm4gbwpmb3IodD1wLnNwbGl0KCIgIikscz10Lmxlbmd0aCxyPTA7cjxzOysrcil7cT1KLmRHKHRbcl0pCmlmKHEubGVuZ3RoIT09MClvLnEoMCxxKX1yZXR1cm4gb30sCmExKGEpe3RoaXMuYS5zZXRBdHRyaWJ1dGUoImNsYXNzIixhLmEwKDAsIiAiKSl9fQpBLmIucHJvdG90eXBlPXsKZ2FkKGEpe3JldHVybiBuZXcgQS5iYihhKX0sCmdhYyhhKXtyZXR1cm4gbmV3IEEuYXUoYSxuZXcgQS5vKGEpKX0sCmdhZihhKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxzPXUudS5hKGEuY2xvbmVOb2RlKCEwKSkKQS5kaSh0LG5ldyBBLmF1KHMsbmV3IEEubyhzKSkpCnJldHVybiB0LmlubmVySFRNTH0sCkEoYSxiLGMsZCl7dmFyIHQscyxyLHEscD1bXQpwLnB1c2goQS5lNShudWxsKSkKcC5wdXNoKEEuZTkoKSkKcC5wdXNoKG5ldyBBLmMzKCkpCmM9bmV3IEEuYzcobmV3IEEuYUYocCkpCnA9ZG9jdW1lbnQKdD1wLmJvZHkKdC50b1N0cmluZwpzPUIuaC5hVih0LCc8c3ZnIHZlcnNpb249IjEuMSI+JytiKyI8L3N2Zz4iLGMpCnI9cC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKcD1uZXcgQS5vKHMpCnE9cC5nSChwKQpmb3IoO3A9cS5maXJzdENoaWxkLHAhPW51bGw7KXIuYXBwZW5kQ2hpbGQocCkKcmV0dXJuIHJ9LApnYWooYSl7cmV0dXJuIG5ldyBBLncoYSwiY2xpY2siLCExLHUuQyl9LApnYWsoYSl7cmV0dXJuIG5ldyBBLncoYSwibW91c2VsZWF2ZSIsITEsdS5DKX0sCmdhbChhKXtyZXR1cm4gbmV3IEEudyhhLCJtb3VzZW1vdmUiLCExLHUuQyl9LApnYW0oYSl7cmV0dXJuIG5ldyBBLncoYSwibW91c2VvdmVyIiwhMSx1LkMpfSwKJGliOjF9CkEuY1kucHJvdG90eXBlPXsKJDEoYSl7dmFyIHQscz10aGlzLmEscj1zLnN0eWxlCmEucGFnZVgudG9TdHJpbmcKdD1hLnBhZ2VZCnQudG9TdHJpbmcKci50b3A9QS5mKHQrMjApKyJweCIKdD1hLnBhZ2VYCnQudG9TdHJpbmcKYS5wYWdlWS50b1N0cmluZwpzPUIuay5hWShzLm9mZnNldFdpZHRoKQpyLmxlZnQ9QS5mKHQtcy8yKSsicHgifSwKJFM6MH0KQS5jWi5wcm90b3R5cGU9ewokMShhKXt2YXIgdD10aGlzLmEuc3R5bGUKdC5kaXNwbGF5PSJibG9jayJ9LAokUzowfQpBLmRfLnByb3RvdHlwZT17CiQxKGEpe3ZhciB0PXRoaXMuYS5zdHlsZQp0LmRpc3BsYXk9Im5vbmUifSwKJFM6MH0KQS5HLnByb3RvdHlwZT17CkcoYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNlb2YgQS5HJiZiLmE9PT10aGlzLmEmJkouYTMoYi5iLHRoaXMuYil9LApnbihhKXtyZXR1cm4gdGhpcy5hKjMxK0ouYW8odGhpcy5iKX0sCmgoYSl7cmV0dXJuIigiK3RoaXMuYSsiLCAiK0EuZih0aGlzLmIpKyIpIn19CkEuYTcucHJvdG90eXBlPXsKZ2soKXt2YXIgdD10aGlzLmMKcmV0dXJuIHQ9PW51bGw/QS5tKHRoaXMpLnAoIkc8MT4iKS5hKHQpOnR9LApqKCl7dmFyIHQ9dGhpcyxzPXQuYQppZihzLmooKSl7dC5jPW5ldyBBLkcodC5iKysscy5naygpKQpyZXR1cm4hMH10LmM9bnVsbApyZXR1cm4hMX19CkEuYWQucHJvdG90eXBlPXsKaChhKXtyZXR1cm4iWyIrQS5mKHRoaXMuYSkrIiwgIitBLmYodGhpcy5iKSsiXSJ9LApHKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9mIEEuYWQmJkouYTMoYi5hLHRoaXMuYSkmJkouYTMoYi5iLHRoaXMuYil9LApnbihhKXt2YXIgdCxzPUouYW8odGhpcy5hKSxyPUouYW8odGhpcy5iKQpyPUEuZWYoQS5lZigwLEIuYy5nbihzKSksQi5jLmduKHIpKQp0PXIrKChyJjY3MTA4ODYzKTw8MykmNTM2ODcwOTExCnRePXQ+Pj4xMQpyZXR1cm4gdCsoKHQmMTYzODMpPDwxNSkmNTM2ODcwOTExfX0KQS5kNy5wcm90b3R5cGU9ewokMShhKXt2YXIgdCxzLHIKZm9yKHQ9bmV3IEEueCh3aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLmZvb3Rub3RlLWZvb3RlciIpLHUuUiksdD1uZXcgQS5hNyh0LmdsKHQpKSxzPUEubSh0KS5wKCJHPDE+Iik7dC5qKCk7KXtyPXQuYwppZihyPT1udWxsKXI9cy5hKHIpCkEuaEgoIm9rIikKaWYoci5hKzE+MylKLmFuKHIuYikucSgwLCJoaWRkZW4iKX1BLmhrKCkKdD13aW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI25ldy1yZXZpc2lvbiIpCnQudG9TdHJpbmcKdD1KLmVUKHQpCkEuYlYodC5hLHQuYixBLmhKKCksITEpfSwKJFM6MjN9OyhmdW5jdGlvbiBhbGlhc2VzKCl7dmFyIHQ9Si5heS5wcm90b3R5cGUKdC5hdz10LmgKdD1KLmFfLnByb3RvdHlwZQp0LmFDPXQuaAp0PUEuRS5wcm90b3R5cGUKdC5hQT10LmFnCnQuYUI9dC5haAp0PUEuYXoucHJvdG90eXBlCnQuYXo9dC5OCnQ9QS5pLnByb3RvdHlwZQp0Lk89dC5BCnQ9QS5hWS5wcm90b3R5cGUKdC5hRD10LkR9KSgpOyhmdW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2YXIgdD1odW5rSGVscGVycy5fc3RhdGljXzEscz1odW5rSGVscGVycy5fc3RhdGljXzAscj1odW5rSGVscGVycy5fc3RhdGljXzIscT1odW5rSGVscGVycy5pbnN0YWxsU3RhdGljVGVhck9mZgp0KEEsImg2IiwiZjUiLDI0KQp0KEEsImhsIiwiZm8iLDIpCnQoQSwiaG0iLCJmcCIsMikKdChBLCJobiIsImZxIiwyKQpzKEEsImVtIiwiaGUiLDEpCnIoQSwiaHAiLCJmUiIsMjUpCnEoQSwiaHEiLDEsbnVsbCxbIiQzJG9uRXJyb3IkcmFkaXgiLCIkMSJdLFsiZXQiLGZ1bmN0aW9uKGEpe3JldHVybiBBLmV0KGEsbnVsbCxudWxsKX1dLDI2LDApCnEoQSwiaHYiLDQsbnVsbCxbIiQ0Il0sWyJmciJdLDcsMCkKcShBLCJodyIsNCxudWxsLFsiJDQiXSxbImZzIl0sNywwKQp0KEEsImhKIiwiaE4iLDApfSkoKTsoZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXt2YXIgdD1odW5rSGVscGVycy5taXhpbixzPWh1bmtIZWxwZXJzLmluaGVyaXQscj1odW5rSGVscGVycy5pbmhlcml0TWFueQpzKEEuaixudWxsKQpyKEEuaixbQS5kZCxKLmF5LEouVCxBLmssQS5heixBLnosQS5ibSxBLmFxLEEuVixBLmN5LEEuY3YsQS5jMixBLkosQS5jcSxBLmJ0LEEuY3AsQS5BLEEuYlcsQS5jUCxBLmFpLEEuYVosQS5iWCxBLmJOLEEuYU0sQS5iRCxBLmNVLEEuYjIsQS5jSSxBLmFULEEuYVUsQS5hMCxBLmFLLEEuYVgsQS5hTCxBLmNGLEEuY2wsQS50LEEuYkUsQS5jZSxBLmRiLEEuYWgsQS5hOCxBLmFGLEEuYVksQS5jMyxBLmF2LEEuY0wsQS5jNyxBLkcsQS5hZF0pCnIoSi5heSxbSi5jbixKLmJuLEoucixKLkQsSi5ibyxKLlpdKQpyKEoucixbSi5hXyxBLmJpLEEuYlEsQS5jZixBLmNnLEEuYSxBLmJaLEEuY3IsQS5jMCxBLmM4XSkKcihKLmFfLFtKLmJ6LEouYWUsSi5IXSkKcyhKLmJwLEouRCkKcihKLmJvLFtKLmFBLEouY29dKQpyKEEuayxbQS5icixBLmJJLEEuYnEsQS5iSyxBLmJBLEEuYlQsQS5iYSxBLmJ5LEEuRixBLmJMLEEuYkosQS5hYixBLmJlLEEuYmddKQpyKEEuYXosW0EuYmgsQS5idixBLmFmLEEuYmxdKQpyKEEuYmgsW0EuYnUsQS5ic10pCnIoQS5ibSxbQS5idyxBLmJNLEEuYTddKQpzKEEuYngsQS5idSkKcyhBLmF3LEEuYXEpCnIoQS5WLFtBLmNtLEEuYmMsQS5iZCxBLmJILEEuZDMsQS5kNSxBLmNCLEEuY0EsQS5jeCxBLmNLLEEuY0gsQS5jaCxBLmNFLEEuY3UsQS5jdCxBLmNNLEEuY04sQS5jTyxBLmNWLEEuY2QsQS5jaixBLmNrLEEuY1ksQS5jWixBLmRfLEEuZDddKQpzKEEuYUcsQS5iSSkKcihBLmJILFtBLmJDLEEuYTZdKQpzKEEuYUQsQS5KKQpyKEEuYUQsW0EuRSxBLmJPXSkKcihBLmJkLFtBLmQ0LEEuY3MsQS5jVCxBLmQwXSkKcyhBLmJfLEEuYlQpCnIoQS5iYyxbQS5jQyxBLmNELEEuY1EsQS5jWF0pCnMoQS5jNCxBLmJsKQpzKEEuY0osQS5jVSkKcyhBLmFSLEEuRSkKcyhBLmFXLEEuYjIpCnMoQS5hUyxBLmFXKQpzKEEuYUMsQS5hVSkKcyhBLmFKLEEuYVgpCnIoQS5GLFtBLmFJLEEuYmtdKQpyKEEuYmksW0EuZSxBLmFPXSkKcihBLmUsW0EuaSxBLkMsQS5hZ10pCnIoQS5pLFtBLmMsQS5iXSkKcihBLmMsW0EuYjgsQS5iOSxBLmE1LEEuVSxBLmFzLEEuYmosQS5iQixBLmFOLEEuYkYsQS5iRyxBLmFjXSkKcyhBLmFyLEEuYlEpCnIoQS5hQyxbQS5iUCxBLngsQS5vLEEuYXVdKQpzKEEuY18sQS5iWikKcyhBLlksQS5jXykKcyhBLkIsQS5hKQpzKEEudixBLkIpCnMoQS5jMSxBLmMwKQpzKEEuYUUsQS5jMSkKcyhBLmM5LEEuYzgpCnMoQS5hVixBLmM5KQpzKEEuYlIsQS5iTykKcyhBLmJmLEEuYUopCnIoQS5iZixbQS5iUyxBLmJiXSkKcyhBLmFRLEEuYU0pCnMoQS53LEEuYVEpCnMoQS5iVSxBLmJEKQpzKEEuYzUsQS5hWSkKcyhBLmFhLEEuYikKdChBLmFVLEEuYTApCnQoQS5hWCxBLmFLKQp0KEEuYjIsQS5hSykKdChBLmJRLEEuY2UpCnQoQS5iWixBLmEwKQp0KEEuY18sQS5hOCkKdChBLmMwLEEuYTApCnQoQS5jMSxBLmE4KQp0KEEuYzgsQS5hMCkKdChBLmM5LEEuYTgpfSkoKQp2YXIgdj17dHlwZVVuaXZlcnNlOntlQzpuZXcgTWFwKCksdFI6e30sZVQ6e30sdFBWOnt9LHNFQTpbXX0sbWFuZ2xlZEdsb2JhbE5hbWVzOnt1OiJpbnQiLGhyOiJkb3VibGUiLGhHOiJudW0iLGg6IlN0cmluZyIscDoiYm9vbCIsdDoiTnVsbCIsbjoiTGlzdCJ9LG1hbmdsZWROYW1lczp7fSx0eXBlczpbIn4odikiLCJ+KCkiLCJ+KH4oKSkiLCJ0KCkiLCJwKGUpIiwicChLKSIsInAoaCkiLCJwKGksaCxoLGFoKSIsInAoaj8pIiwiQChAKSIsIkAoQCxoKSIsIkAoaCkiLCJ0KEApIiwidCh+KCkpIiwicChAKSIsIn4oaj8saj8pIiwifihhKSIsImgoaCkiLCJ+KGUsZT8pIiwifihAKSIsIn4oQCxAKSIsInAoTzxoPikiLCJpKGUpIiwidChhKSIsInUoaj8pIiwicChqPyxqPykiLCJ1KGh7b25FcnJvcjp1KGgpPyxyYWRpeDp1P30pIl0saW50ZXJjZXB0b3JzQnlUYWc6bnVsbCxsZWFmVGFnczpudWxsLGFycmF5UnRpOlN5bWJvbCgiJHRpIil9CkEuZksodi50eXBlVW5pdmVyc2UsSlNPTi5wYXJzZSgneyJieiI6ImFfIiwiYWUiOiJhXyIsIkgiOiJhXyIsImhRIjoiYSIsImhYIjoiYSIsImhQIjoiYiIsImhZIjoiYiIsImhSIjoiYyIsImkwIjoiYyIsImhaIjoiZSIsImhXIjoiZSIsImkxIjoidiIsImhUIjoiQiIsImhTIjoiQyIsImkzIjoiQyIsImlfIjoiWSIsIkQiOnsibiI6WyIxIl19LCJicCI6eyJuIjpbIjEiXX0sImFBIjp7InUiOltdfSwiWiI6eyJoIjpbXX0sImJyIjp7ImsiOltdfSwiYXEiOnsiSSI6WyIxIiwiMiJdfSwiYXciOnsiSSI6WyIxIiwiMiJdfSwiYUciOnsiayI6W119LCJicSI6eyJrIjpbXX0sImJLIjp7ImsiOltdfSwiViI6eyJYIjpbXX0sImJjIjp7IlgiOltdfSwiYmQiOnsiWCI6W119LCJiSCI6eyJYIjpbXX0sImJDIjp7IlgiOltdfSwiYTYiOnsiWCI6W119LCJiQSI6eyJrIjpbXX0sIkUiOnsiSSI6WyIxIiwiMiJdLCJKLlYiOiIyIn0sImJUIjp7ImsiOltdfSwiYl8iOnsiayI6W119LCJhUiI6eyJFIjpbIjEiLCIyIl0sIkkiOlsiMSIsIjIiXSwiSi5WIjoiMiJ9LCJhUyI6eyJPIjpbIjEiXX0sImFDIjp7Im4iOlsiMSJdfSwiYUQiOnsiSSI6WyIxIiwiMiJdfSwiSiI6eyJJIjpbIjEiLCIyIl19LCJhSiI6eyJPIjpbIjEiXX0sImFXIjp7Ik8iOlsiMSJdfSwiYmEiOnsiayI6W119LCJiSSI6eyJrIjpbXX0sImJ5Ijp7ImsiOltdfSwiRiI6eyJrIjpbXX0sImFJIjp7ImsiOltdfSwiYmsiOnsiayI6W119LCJiTCI6eyJrIjpbXX0sImJKIjp7ImsiOltdfSwiYWIiOnsiayI6W119LCJiZSI6eyJrIjpbXX0sImFMIjp7ImsiOltdfSwiYmciOnsiayI6W119LCJpIjp7ImUiOltdfSwidiI6eyJhIjpbXX0sImFoIjp7IksiOltdfSwiYyI6eyJpIjpbXSwiZSI6W119LCJiOCI6eyJpIjpbXSwiZSI6W119LCJiOSI6eyJpIjpbXSwiZSI6W119LCJhNSI6eyJpIjpbXSwiZSI6W119LCJVIjp7ImkiOltdLCJlIjpbXX0sIkMiOnsiZSI6W119LCJhcyI6eyJpIjpbXSwiZSI6W119LCJiUCI6eyJuIjpbImkiXX0sIngiOnsibiI6WyIxIl19LCJiaiI6eyJpIjpbXSwiZSI6W119LCJZIjp7Im4iOlsiZSJdLCJhOSI6WyJlIl19LCJvIjp7Im4iOlsiZSJdfSwiYUUiOnsibiI6WyJlIl0sImE5IjpbImUiXX0sImJCIjp7ImkiOltdLCJlIjpbXX0sImFOIjp7ImkiOltdLCJlIjpbXX0sImJGIjp7ImkiOltdLCJlIjpbXX0sImJHIjp7ImkiOltdLCJlIjpbXX0sImFjIjp7ImkiOltdLCJlIjpbXX0sIkIiOnsiYSI6W119LCJhZyI6eyJlIjpbXX0sImFWIjp7Im4iOlsiZSJdLCJhOSI6WyJlIl19LCJiTyI6eyJJIjpbImgiLCJoIl19LCJiUiI6eyJJIjpbImgiLCJoIl0sIkouViI6ImgifSwiYlMiOnsiTyI6WyJoIl19LCJhUSI6eyJhTSI6WyIxIl19LCJ3Ijp7ImFNIjpbIjEiXX0sImFGIjp7IksiOltdfSwiYVkiOnsiSyI6W119LCJjNSI6eyJLIjpbXX0sImMzIjp7IksiOltdfSwiYmYiOnsiTyI6WyJoIl19LCJhdSI6eyJuIjpbImkiXX0sImFhIjp7ImIiOltdLCJpIjpbXSwiZSI6W119LCJiYiI6eyJPIjpbImgiXX0sImIiOnsiaSI6W10sImUiOltdfX0nKSkKQS5mSih2LnR5cGVVbml2ZXJzZSxKU09OLnBhcnNlKCd7IkQiOjEsImJwIjoxLCJUIjoxLCJiaCI6MSwiYnUiOjEsInoiOjEsImJ2IjoyLCJidyI6MiwiYngiOjIsImFmIjoxLCJiTSI6MSwiYXEiOjIsImJzIjoxLCJidCI6MSwiYVoiOjEsImM0IjoxLCJiRCI6MSwiYVQiOjEsImJsIjoxLCJhQyI6MSwiYTAiOjEsImFEIjoyLCJKIjoyLCJhSyI6MSwiYUoiOjEsImFXIjoxLCJhVSI6MSwiYVgiOjEsImIyIjoxLCJheiI6MSwiYm0iOjEsImFRIjoxLCJiVSI6MSwiYTgiOjEsImF2IjoxLCJHIjoxLCJhNyI6MSwiYWQiOjJ9JykpCnZhciB1PShmdW5jdGlvbiBydGlpKCl7dmFyIHQ9QS5lcApyZXR1cm57eTp0KCJhNSIpLHQ6dCgiVSIpLGg6dCgiaSIpLFE6dCgiayIpLHo6dCgiYSIpLFo6dCgiWCIpLGI6dCgiRDxAPiIpLFQ6dCgiYm4iKSxnOnQoIkgiKSxwOnQoImE5PEA+Iiksajp0KCJuPEA+IiksZjp0KCJJPEAsQD4iKSxQOnQoInQiKSxLOnQoImoiKSxZOnQoImFhIiksbDp0KCJpMiIpLE46dCgiaCIpLHU6dCgiYiIpLEc6dCgiYWMiKSxvOnQoImFkPEAsQD4iKSxuOnQoImk0IiksQjp0KCJhZSIpLHg6dCgiYWciKSxDOnQoInc8dj4iKSxSOnQoIng8aT4iKSxhOnQoImJYPHU+Iiksdjp0KCJwIiksaTp0KCJociIpLEQ6dCgiQCIpLFM6dCgidSIpLEE6dCgiMCYqIiksXzp0KCJqKiIpLE86dCgiZFE8dD4/IiksWDp0KCJqPyIpLEg6dCgiaEciKX19KSgpOyhmdW5jdGlvbiBjb25zdGFudHMoKXt2YXIgdD1odW5rSGVscGVycy5tYWtlQ29uc3RMaXN0CkIuaD1BLlUucHJvdG90eXBlCkIudz1BLmFzLnByb3RvdHlwZQpCLng9Si5heS5wcm90b3R5cGUKQi5iPUouRC5wcm90b3R5cGUKQi5jPUouYUEucHJvdG90eXBlCkIuaz1KLmJvLnByb3RvdHlwZQpCLmE9Si5aLnByb3RvdHlwZQpCLnk9Si5ILnByb3RvdHlwZQpCLno9Si5yLnByb3RvdHlwZQpCLm09Si5iei5wcm90b3R5cGUKQi5uPUEuYU4ucHJvdG90eXBlCkIuZj1KLmFlLnByb3RvdHlwZQpCLm89QS5hTy5wcm90b3R5cGUKQi5pPWZ1bmN0aW9uIGdldFRhZ0ZhbGxiYWNrKG8pIHsKICB2YXIgcyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTsKICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKfQpCLnA9ZnVuY3Rpb24oKSB7CiAgdmFyIHRvU3RyaW5nRnVuY3Rpb24gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogIGZ1bmN0aW9uIGdldFRhZyhvKSB7CiAgICB2YXIgcyA9IHRvU3RyaW5nRnVuY3Rpb24uY2FsbChvKTsKICAgIHJldHVybiBzLnN1YnN0cmluZyg4LCBzLmxlbmd0aCAtIDEpOwogIH0KICBmdW5jdGlvbiBnZXRVbmtub3duVGFnKG9iamVjdCwgdGFnKSB7CiAgICBpZiAoL15IVE1MW0EtWl0uKkVsZW1lbnQkLy50ZXN0KHRhZykpIHsKICAgICAgdmFyIG5hbWUgPSB0b1N0cmluZ0Z1bmN0aW9uLmNhbGwob2JqZWN0KTsKICAgICAgaWYgKG5hbWUgPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gIkhUTUxFbGVtZW50IjsKICAgIH0KICB9CiAgZnVuY3Rpb24gZ2V0VW5rbm93blRhZ0dlbmVyaWNCcm93c2VyKG9iamVjdCwgdGFnKSB7CiAgICBpZiAoc2VsZi5IVE1MRWxlbWVudCAmJiBvYmplY3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgcmV0dXJuICJIVE1MRWxlbWVudCI7CiAgICByZXR1cm4gZ2V0VW5rbm93blRhZyhvYmplY3QsIHRhZyk7CiAgfQogIGZ1bmN0aW9uIHByb3RvdHlwZUZvclRhZyh0YWcpIHsKICAgIGlmICh0eXBlb2Ygd2luZG93ID09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICAgIGlmICh0eXBlb2Ygd2luZG93W3RhZ10gPT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwogICAgdmFyIGNvbnN0cnVjdG9yID0gd2luZG93W3RhZ107CiAgICBpZiAodHlwZW9mIGNvbnN0cnVjdG9yICE9ICJmdW5jdGlvbiIpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgZnVuY3Rpb24gZGlzY3JpbWluYXRvcih0YWcpIHsgcmV0dXJuIG51bGw7IH0KICB2YXIgaXNCcm93c2VyID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IjsKICByZXR1cm4gewogICAgZ2V0VGFnOiBnZXRUYWcsCiAgICBnZXRVbmtub3duVGFnOiBpc0Jyb3dzZXIgPyBnZXRVbmtub3duVGFnR2VuZXJpY0Jyb3dzZXIgOiBnZXRVbmtub3duVGFnLAogICAgcHJvdG90eXBlRm9yVGFnOiBwcm90b3R5cGVGb3JUYWcsCiAgICBkaXNjcmltaW5hdG9yOiBkaXNjcmltaW5hdG9yIH07Cn0KQi52PWZ1bmN0aW9uKGdldFRhZ0ZhbGxiYWNrKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGhvb2tzKSB7CiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPSAib2JqZWN0IikgcmV0dXJuIGhvb2tzOwogICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgIGlmICh1YS5pbmRleE9mKCJEdW1wUmVuZGVyVHJlZSIpID49IDApIHJldHVybiBob29rczsKICAgIGlmICh1YS5pbmRleE9mKCJDaHJvbWUiKSA+PSAwKSB7CiAgICAgIGZ1bmN0aW9uIGNvbmZpcm0ocCkgewogICAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09ICJvYmplY3QiICYmIHdpbmRvd1twXSAmJiB3aW5kb3dbcF0ubmFtZSA9PSBwOwogICAgICB9CiAgICAgIGlmIChjb25maXJtKCJXaW5kb3ciKSAmJiBjb25maXJtKCJIVE1MRWxlbWVudCIpKSByZXR1cm4gaG9va3M7CiAgICB9CiAgICBob29rcy5nZXRUYWcgPSBnZXRUYWdGYWxsYmFjazsKICB9Owp9CkIucT1mdW5jdGlvbihob29rcykgewogIGlmICh0eXBlb2YgZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnICE9ICJmdW5jdGlvbiIpIHJldHVybiBob29rczsKICBob29rcy5nZXRUYWcgPSBkYXJ0RXhwZXJpbWVudGFsRml4dXBHZXRUYWcoaG9va3MuZ2V0VGFnKTsKfQpCLnI9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFnOwogIHZhciBwcm90b3R5cGVGb3JUYWcgPSBob29rcy5wcm90b3R5cGVGb3JUYWc7CiAgZnVuY3Rpb24gZ2V0VGFnRml4ZWQobykgewogICAgdmFyIHRhZyA9IGdldFRhZyhvKTsKICAgIGlmICh0YWcgPT0gIkRvY3VtZW50IikgewogICAgICBpZiAoISFvLnhtbFZlcnNpb24pIHJldHVybiAiIURvY3VtZW50IjsKICAgICAgcmV0dXJuICIhSFRNTERvY3VtZW50IjsKICAgIH0KICAgIHJldHVybiB0YWc7CiAgfQogIGZ1bmN0aW9uIHByb3RvdHlwZUZvclRhZ0ZpeGVkKHRhZykgewogICAgaWYgKHRhZyA9PSAiRG9jdW1lbnQiKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwcm90b3R5cGVGb3JUYWcodGFnKTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnRml4ZWQ7CiAgaG9va3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnRml4ZWQ7Cn0KQi51PWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCIgPyBuYXZpZ2F0b3IudXNlckFnZW50IDogIiI7CiAgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikgPT0gLTEpIHJldHVybiBob29rczsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFnOwogIHZhciBxdWlja01hcCA9IHsKICAgICJCZWZvcmVVbmxvYWRFdmVudCI6ICJFdmVudCIsCiAgICAiRGF0YVRyYW5zZmVyIjogIkNsaXBib2FyZCIsCiAgICAiR2VvR2VvbG9jYXRpb24iOiAiR2VvbG9jYXRpb24iLAogICAgIkxvY2F0aW9uIjogIiFMb2NhdGlvbiIsCiAgICAiV29ya2VyTWVzc2FnZUV2ZW50IjogIk1lc3NhZ2VFdmVudCIsCiAgICAiWE1MRG9jdW1lbnQiOiAiIURvY3VtZW50In07CiAgZnVuY3Rpb24gZ2V0VGFnRmlyZWZveChvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgcmV0dXJuIHF1aWNrTWFwW3RhZ10gfHwgdGFnOwogIH0KICBob29rcy5nZXRUYWcgPSBnZXRUYWdGaXJlZm94Owp9CkIudD1mdW5jdGlvbihob29rcykgewogIHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwogIGlmICh1c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudC8iKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwKICAgICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJIVE1MRERFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MRFRFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MUGhyYXNlRWxlbWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiUG9zaXRpb24iOiAiR2VvcG9zaXRpb24iCiAgfTsKICBmdW5jdGlvbiBnZXRUYWdJRShvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgdmFyIG5ld1RhZyA9IHF1aWNrTWFwW3RhZ107CiAgICBpZiAobmV3VGFnKSByZXR1cm4gbmV3VGFnOwogICAgaWYgKHRhZyA9PSAiT2JqZWN0IikgewogICAgICBpZiAod2luZG93LkRhdGFWaWV3ICYmIChvIGluc3RhbmNlb2Ygd2luZG93LkRhdGFWaWV3KSkgcmV0dXJuICJEYXRhVmlldyI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWdJRSh0YWcpIHsKICAgIHZhciBjb25zdHJ1Y3RvciA9IHdpbmRvd1t0YWddOwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnSUU7CiAgaG9va3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnSUU7Cn0KQi5qPWZ1bmN0aW9uKGhvb2tzKSB7IHJldHVybiBob29rczsgfQoKQi5kPW5ldyBBLmNKKCkKQi5BPXQoWyIqOjpjbGFzcyIsIio6OmRpciIsIio6OmRyYWdnYWJsZSIsIio6OmhpZGRlbiIsIio6OmlkIiwiKjo6aW5lcnQiLCIqOjppdGVtcHJvcCIsIio6Oml0ZW1yZWYiLCIqOjppdGVtc2NvcGUiLCIqOjpsYW5nIiwiKjo6c3BlbGxjaGVjayIsIio6OnRpdGxlIiwiKjo6dHJhbnNsYXRlIiwiQTo6YWNjZXNza2V5IiwiQTo6Y29vcmRzIiwiQTo6aHJlZmxhbmciLCJBOjpuYW1lIiwiQTo6c2hhcGUiLCJBOjp0YWJpbmRleCIsIkE6OnRhcmdldCIsIkE6OnR5cGUiLCJBUkVBOjphY2Nlc3NrZXkiLCJBUkVBOjphbHQiLCJBUkVBOjpjb29yZHMiLCJBUkVBOjpub2hyZWYiLCJBUkVBOjpzaGFwZSIsIkFSRUE6OnRhYmluZGV4IiwiQVJFQTo6dGFyZ2V0IiwiQVVESU86OmNvbnRyb2xzIiwiQVVESU86Omxvb3AiLCJBVURJTzo6bWVkaWFncm91cCIsIkFVRElPOjptdXRlZCIsIkFVRElPOjpwcmVsb2FkIiwiQkRPOjpkaXIiLCJCT0RZOjphbGluayIsIkJPRFk6OmJnY29sb3IiLCJCT0RZOjpsaW5rIiwiQk9EWTo6dGV4dCIsIkJPRFk6OnZsaW5rIiwiQlI6OmNsZWFyIiwiQlVUVE9OOjphY2Nlc3NrZXkiLCJCVVRUT046OmRpc2FibGVkIiwiQlVUVE9OOjpuYW1lIiwiQlVUVE9OOjp0YWJpbmRleCIsIkJVVFRPTjo6dHlwZSIsIkJVVFRPTjo6dmFsdWUiLCJDQU5WQVM6OmhlaWdodCIsIkNBTlZBUzo6d2lkdGgiLCJDQVBUSU9OOjphbGlnbiIsIkNPTDo6YWxpZ24iLCJDT0w6OmNoYXIiLCJDT0w6OmNoYXJvZmYiLCJDT0w6OnNwYW4iLCJDT0w6OnZhbGlnbiIsIkNPTDo6d2lkdGgiLCJDT0xHUk9VUDo6YWxpZ24iLCJDT0xHUk9VUDo6Y2hhciIsIkNPTEdST1VQOjpjaGFyb2ZmIiwiQ09MR1JPVVA6OnNwYW4iLCJDT0xHUk9VUDo6dmFsaWduIiwiQ09MR1JPVVA6OndpZHRoIiwiQ09NTUFORDo6Y2hlY2tlZCIsIkNPTU1BTkQ6OmNvbW1hbmQiLCJDT01NQU5EOjpkaXNhYmxlZCIsIkNPTU1BTkQ6OmxhYmVsIiwiQ09NTUFORDo6cmFkaW9ncm91cCIsIkNPTU1BTkQ6OnR5cGUiLCJEQVRBOjp2YWx1ZSIsIkRFTDo6ZGF0ZXRpbWUiLCJERVRBSUxTOjpvcGVuIiwiRElSOjpjb21wYWN0IiwiRElWOjphbGlnbiIsIkRMOjpjb21wYWN0IiwiRklFTERTRVQ6OmRpc2FibGVkIiwiRk9OVDo6Y29sb3IiLCJGT05UOjpmYWNlIiwiRk9OVDo6c2l6ZSIsIkZPUk06OmFjY2VwdCIsIkZPUk06OmF1dG9jb21wbGV0ZSIsIkZPUk06OmVuY3R5cGUiLCJGT1JNOjptZXRob2QiLCJGT1JNOjpuYW1lIiwiRk9STTo6bm92YWxpZGF0ZSIsIkZPUk06OnRhcmdldCIsIkZSQU1FOjpuYW1lIiwiSDE6OmFsaWduIiwiSDI6OmFsaWduIiwiSDM6OmFsaWduIiwiSDQ6OmFsaWduIiwiSDU6OmFsaWduIiwiSDY6OmFsaWduIiwiSFI6OmFsaWduIiwiSFI6Om5vc2hhZGUiLCJIUjo6c2l6ZSIsIkhSOjp3aWR0aCIsIkhUTUw6OnZlcnNpb24iLCJJRlJBTUU6OmFsaWduIiwiSUZSQU1FOjpmcmFtZWJvcmRlciIsIklGUkFNRTo6aGVpZ2h0IiwiSUZSQU1FOjptYXJnaW5oZWlnaHQiLCJJRlJBTUU6Om1hcmdpbndpZHRoIiwiSUZSQU1FOjp3aWR0aCIsIklNRzo6YWxpZ24iLCJJTUc6OmFsdCIsIklNRzo6Ym9yZGVyIiwiSU1HOjpoZWlnaHQiLCJJTUc6OmhzcGFjZSIsIklNRzo6aXNtYXAiLCJJTUc6Om5hbWUiLCJJTUc6OnVzZW1hcCIsIklNRzo6dnNwYWNlIiwiSU1HOjp3aWR0aCIsIklOUFVUOjphY2NlcHQiLCJJTlBVVDo6YWNjZXNza2V5IiwiSU5QVVQ6OmFsaWduIiwiSU5QVVQ6OmFsdCIsIklOUFVUOjphdXRvY29tcGxldGUiLCJJTlBVVDo6YXV0b2ZvY3VzIiwiSU5QVVQ6OmNoZWNrZWQiLCJJTlBVVDo6ZGlzYWJsZWQiLCJJTlBVVDo6aW5wdXRtb2RlIiwiSU5QVVQ6OmlzbWFwIiwiSU5QVVQ6Omxpc3QiLCJJTlBVVDo6bWF4IiwiSU5QVVQ6Om1heGxlbmd0aCIsIklOUFVUOjptaW4iLCJJTlBVVDo6bXVsdGlwbGUiLCJJTlBVVDo6bmFtZSIsIklOUFVUOjpwbGFjZWhvbGRlciIsIklOUFVUOjpyZWFkb25seSIsIklOUFVUOjpyZXF1aXJlZCIsIklOUFVUOjpzaXplIiwiSU5QVVQ6OnN0ZXAiLCJJTlBVVDo6dGFiaW5kZXgiLCJJTlBVVDo6dHlwZSIsIklOUFVUOjp1c2VtYXAiLCJJTlBVVDo6dmFsdWUiLCJJTlM6OmRhdGV0aW1lIiwiS0VZR0VOOjpkaXNhYmxlZCIsIktFWUdFTjo6a2V5dHlwZSIsIktFWUdFTjo6bmFtZSIsIkxBQkVMOjphY2Nlc3NrZXkiLCJMQUJFTDo6Zm9yIiwiTEVHRU5EOjphY2Nlc3NrZXkiLCJMRUdFTkQ6OmFsaWduIiwiTEk6OnR5cGUiLCJMSTo6dmFsdWUiLCJMSU5LOjpzaXplcyIsIk1BUDo6bmFtZSIsIk1FTlU6OmNvbXBhY3QiLCJNRU5VOjpsYWJlbCIsIk1FTlU6OnR5cGUiLCJNRVRFUjo6aGlnaCIsIk1FVEVSOjpsb3ciLCJNRVRFUjo6bWF4IiwiTUVURVI6Om1pbiIsIk1FVEVSOjp2YWx1ZSIsIk9CSkVDVDo6dHlwZW11c3RtYXRjaCIsIk9MOjpjb21wYWN0IiwiT0w6OnJldmVyc2VkIiwiT0w6OnN0YXJ0IiwiT0w6OnR5cGUiLCJPUFRHUk9VUDo6ZGlzYWJsZWQiLCJPUFRHUk9VUDo6bGFiZWwiLCJPUFRJT046OmRpc2FibGVkIiwiT1BUSU9OOjpsYWJlbCIsIk9QVElPTjo6c2VsZWN0ZWQiLCJPUFRJT046OnZhbHVlIiwiT1VUUFVUOjpmb3IiLCJPVVRQVVQ6Om5hbWUiLCJQOjphbGlnbiIsIlBSRTo6d2lkdGgiLCJQUk9HUkVTUzo6bWF4IiwiUFJPR1JFU1M6Om1pbiIsIlBST0dSRVNTOjp2YWx1ZSIsIlNFTEVDVDo6YXV0b2NvbXBsZXRlIiwiU0VMRUNUOjpkaXNhYmxlZCIsIlNFTEVDVDo6bXVsdGlwbGUiLCJTRUxFQ1Q6Om5hbWUiLCJTRUxFQ1Q6OnJlcXVpcmVkIiwiU0VMRUNUOjpzaXplIiwiU0VMRUNUOjp0YWJpbmRleCIsIlNPVVJDRTo6dHlwZSIsIlRBQkxFOjphbGlnbiIsIlRBQkxFOjpiZ2NvbG9yIiwiVEFCTEU6OmJvcmRlciIsIlRBQkxFOjpjZWxscGFkZGluZyIsIlRBQkxFOjpjZWxsc3BhY2luZyIsIlRBQkxFOjpmcmFtZSIsIlRBQkxFOjpydWxlcyIsIlRBQkxFOjpzdW1tYXJ5IiwiVEFCTEU6OndpZHRoIiwiVEJPRFk6OmFsaWduIiwiVEJPRFk6OmNoYXIiLCJUQk9EWTo6Y2hhcm9mZiIsIlRCT0RZOjp2YWxpZ24iLCJURDo6YWJiciIsIlREOjphbGlnbiIsIlREOjpheGlzIiwiVEQ6OmJnY29sb3IiLCJURDo6Y2hhciIsIlREOjpjaGFyb2ZmIiwiVEQ6OmNvbHNwYW4iLCJURDo6aGVhZGVycyIsIlREOjpoZWlnaHQiLCJURDo6bm93cmFwIiwiVEQ6OnJvd3NwYW4iLCJURDo6c2NvcGUiLCJURDo6dmFsaWduIiwiVEQ6OndpZHRoIiwiVEVYVEFSRUE6OmFjY2Vzc2tleSIsIlRFWFRBUkVBOjphdXRvY29tcGxldGUiLCJURVhUQVJFQTo6Y29scyIsIlRFWFRBUkVBOjpkaXNhYmxlZCIsIlRFWFRBUkVBOjppbnB1dG1vZGUiLCJURVhUQVJFQTo6bmFtZSIsIlRFWFRBUkVBOjpwbGFjZWhvbGRlciIsIlRFWFRBUkVBOjpyZWFkb25seSIsIlRFWFRBUkVBOjpyZXF1aXJlZCIsIlRFWFRBUkVBOjpyb3dzIiwiVEVYVEFSRUE6OnRhYmluZGV4IiwiVEVYVEFSRUE6OndyYXAiLCJURk9PVDo6YWxpZ24iLCJURk9PVDo6Y2hhciIsIlRGT09UOjpjaGFyb2ZmIiwiVEZPT1Q6OnZhbGlnbiIsIlRIOjphYmJyIiwiVEg6OmFsaWduIiwiVEg6OmF4aXMiLCJUSDo6Ymdjb2xvciIsIlRIOjpjaGFyIiwiVEg6OmNoYXJvZmYiLCJUSDo6Y29sc3BhbiIsIlRIOjpoZWFkZXJzIiwiVEg6OmhlaWdodCIsIlRIOjpub3dyYXAiLCJUSDo6cm93c3BhbiIsIlRIOjpzY29wZSIsIlRIOjp2YWxpZ24iLCJUSDo6d2lkdGgiLCJUSEVBRDo6YWxpZ24iLCJUSEVBRDo6Y2hhciIsIlRIRUFEOjpjaGFyb2ZmIiwiVEhFQUQ6OnZhbGlnbiIsIlRSOjphbGlnbiIsIlRSOjpiZ2NvbG9yIiwiVFI6OmNoYXIiLCJUUjo6Y2hhcm9mZiIsIlRSOjp2YWxpZ24iLCJUUkFDSzo6ZGVmYXVsdCIsIlRSQUNLOjpraW5kIiwiVFJBQ0s6OmxhYmVsIiwiVFJBQ0s6OnNyY2xhbmciLCJVTDo6Y29tcGFjdCIsIlVMOjp0eXBlIiwiVklERU86OmNvbnRyb2xzIiwiVklERU86OmhlaWdodCIsIlZJREVPOjpsb29wIiwiVklERU86Om1lZGlhZ3JvdXAiLCJWSURFTzo6bXV0ZWQiLCJWSURFTzo6cHJlbG9hZCIsIlZJREVPOjp3aWR0aCJdKQpCLkI9dChbIkhFQUQiLCJBUkVBIiwiQkFTRSIsIkJBU0VGT05UIiwiQlIiLCJDT0wiLCJDT0xHUk9VUCIsIkVNQkVEIiwiRlJBTUUiLCJGUkFNRVNFVCIsIkhSIiwiSU1BR0UiLCJJTUciLCJJTlBVVCIsIklTSU5ERVgiLCJMSU5LIiwiTUVUQSIsIlBBUkFNIiwiU09VUkNFIiwiU1RZTEUiLCJUSVRMRSIsIldCUiJdKQpCLkM9dChbXSkKQi5sPXQoWyJiaW5kIiwiaWYiLCJyZWYiLCJyZXBlYXQiLCJzeW50YXgiXSkKQi5lPXQoWyJBOjpocmVmIiwiQVJFQTo6aHJlZiIsIkJMT0NLUVVPVEU6OmNpdGUiLCJCT0RZOjpiYWNrZ3JvdW5kIiwiQ09NTUFORDo6aWNvbiIsIkRFTDo6Y2l0ZSIsIkZPUk06OmFjdGlvbiIsIklNRzo6c3JjIiwiSU5QVVQ6OnNyYyIsIklOUzo6Y2l0ZSIsIlE6OmNpdGUiLCJWSURFTzo6cG9zdGVyIl0pCkIuRD1uZXcgQS5hdyhbMSwzLDIsNCwzLDYsNCw2XSxBLmVwKCJhdzx1LHU+IikpCkIuRT1uZXcgQS5haShudWxsLDIpfSkoKTsoZnVuY3Rpb24gc3RhdGljRmllbGRzKCl7JC5jRz1udWxsCiQuZFc9bnVsbAokLmRLPW51bGwKJC5kSj1udWxsCiQuZXI9bnVsbAokLmVsPW51bGwKJC5ldz1udWxsCiQuZDE9bnVsbAokLmQ2PW51bGwKJC5kQT1udWxsCiQuYWs9bnVsbAokLmIzPW51bGwKJC5iND1udWxsCiQuZHQ9ITEKJC5hUD1CLmQKJC5hMT1bXQokLk49bnVsbAokLmRhPW51bGwKJC5kTz1udWxsCiQuZE49bnVsbAokLmJZPUEuZmUodS5OLHUuWil9KSgpOyhmdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXJzKCl7dmFyIHQ9aHVua0hlbHBlcnMubGF6eUZpbmFsCnQoJCwiaFYiLCJlQiIsKCk9PkEuaHMoIl8kZGFydF9kYXJ0Q2xvc3VyZSIpKQp0KCQsImk1IiwiZUMiLCgpPT5BLkwoQS5jeih7CnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKSkKdCgkLCJpNiIsImVEIiwoKT0+QS5MKEEuY3ooeyRtZXRob2QkOm51bGwsCnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKSkKdCgkLCJpNyIsImVFIiwoKT0+QS5MKEEuY3oobnVsbCkpKQp0KCQsImk4IiwiZUYiLCgpPT5BLkwoZnVuY3Rpb24oKXt2YXIgJGFyZ3VtZW50c0V4cHIkPSIkYXJndW1lbnRzJCIKdHJ5e251bGwuJG1ldGhvZCQoJGFyZ3VtZW50c0V4cHIkKX1jYXRjaChzKXtyZXR1cm4gcy5tZXNzYWdlfX0oKSkpCnQoJCwiaWIiLCJlSSIsKCk9PkEuTChBLmN6KHZvaWQgMCkpKQp0KCQsImljIiwiZUoiLCgpPT5BLkwoZnVuY3Rpb24oKXt2YXIgJGFyZ3VtZW50c0V4cHIkPSIkYXJndW1lbnRzJCIKdHJ5eyh2b2lkIDApLiRtZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KCkpKQp0KCQsImlhIiwiZUgiLCgpPT5BLkwoQS5lMShudWxsKSkpCnQoJCwiaTkiLCJlRyIsKCk9PkEuTChmdW5jdGlvbigpe3RyeXtudWxsLiRtZXRob2QkfWNhdGNoKHMpe3JldHVybiBzLm1lc3NhZ2V9fSgpKSkKdCgkLCJpZSIsImVMIiwoKT0+QS5MKEEuZTEodm9pZCAwKSkpCnQoJCwiaWQiLCJlSyIsKCk9PkEuTChmdW5jdGlvbigpe3RyeXsodm9pZCAwKS4kbWV0aG9kJH1jYXRjaChzKXtyZXR1cm4gcy5tZXNzYWdlfX0oKSkpCnQoJCwiaWciLCJkRSIsKCk9PkEuZm4oKSkKdCgkLCJpaCIsImVNIiwoKT0+QS5kVShbIkEiLCJBQkJSIiwiQUNST05ZTSIsIkFERFJFU1MiLCJBUkVBIiwiQVJUSUNMRSIsIkFTSURFIiwiQVVESU8iLCJCIiwiQkRJIiwiQkRPIiwiQklHIiwiQkxPQ0tRVU9URSIsIkJSIiwiQlVUVE9OIiwiQ0FOVkFTIiwiQ0FQVElPTiIsIkNFTlRFUiIsIkNJVEUiLCJDT0RFIiwiQ09MIiwiQ09MR1JPVVAiLCJDT01NQU5EIiwiREFUQSIsIkRBVEFMSVNUIiwiREQiLCJERUwiLCJERVRBSUxTIiwiREZOIiwiRElSIiwiRElWIiwiREwiLCJEVCIsIkVNIiwiRklFTERTRVQiLCJGSUdDQVBUSU9OIiwiRklHVVJFIiwiRk9OVCIsIkZPT1RFUiIsIkZPUk0iLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJIRUFERVIiLCJIR1JPVVAiLCJIUiIsIkkiLCJJRlJBTUUiLCJJTUciLCJJTlBVVCIsIklOUyIsIktCRCIsIkxBQkVMIiwiTEVHRU5EIiwiTEkiLCJNQVAiLCJNQVJLIiwiTUVOVSIsIk1FVEVSIiwiTkFWIiwiTk9CUiIsIk9MIiwiT1BUR1JPVVAiLCJPUFRJT04iLCJPVVRQVVQiLCJQIiwiUFJFIiwiUFJPR1JFU1MiLCJRIiwiUyIsIlNBTVAiLCJTRUNUSU9OIiwiU0VMRUNUIiwiU01BTEwiLCJTT1VSQ0UiLCJTUEFOIiwiU1RSSUtFIiwiU1RST05HIiwiU1VCIiwiU1VNTUFSWSIsIlNVUCIsIlRBQkxFIiwiVEJPRFkiLCJURCIsIlRFWFRBUkVBIiwiVEZPT1QiLCJUSCIsIlRIRUFEIiwiVElNRSIsIlRSIiwiVFJBQ0siLCJUVCIsIlUiLCJVTCIsIlZBUiIsIlZJREVPIiwiV0JSIl0sdS5OKSkKdCgkLCJoVSIsImVBIiwoKT0+QS5mbCgiXlxcUyskIikpfSkoKTsoZnVuY3Rpb24gbmF0aXZlU3VwcG9ydCgpeyFmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKGEpe3ZhciBuPXt9Cm5bYV09MQpyZXR1cm4gT2JqZWN0LmtleXMoaHVua0hlbHBlcnMuY29udmVydFRvRmFzdE9iamVjdChuKSlbMF19CnYuZ2V0SXNvbGF0ZVRhZz1mdW5jdGlvbihhKXtyZXR1cm4gdCgiX19fZGFydF8iK2Erdi5pc29sYXRlVGFnKX0KdmFyIHM9Il9fX2RhcnRfaXNvbGF0ZV90YWdzXyIKdmFyIHI9T2JqZWN0W3NdfHwoT2JqZWN0W3NdPU9iamVjdC5jcmVhdGUobnVsbCkpCnZhciBxPSJfWnhZeFgiCmZvcih2YXIgcD0wOztwKyspe3ZhciBvPXQocSsiXyIrcCsiXyIpCmlmKCEobyBpbiByKSl7cltvXT0xCnYuaXNvbGF0ZVRhZz1vCmJyZWFrfX12LmRpc3BhdGNoUHJvcGVydHlOYW1lPXYuZ2V0SXNvbGF0ZVRhZygiZGlzcGF0Y2hfcmVjb3JkIil9KCkKaHVua0hlbHBlcnMuc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyh7RE9NRXJyb3I6Si5yLERPTUltcGxlbWVudGF0aW9uOkoucixNZWRpYUVycm9yOkoucixOYXZpZ2F0b3I6Si5yLE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTpKLnIsTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6Si5yLE92ZXJjb25zdHJhaW5lZEVycm9yOkoucixQb3NpdGlvbkVycm9yOkoucixHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3I6Si5yLFJhbmdlOkoucixIVE1MQXVkaW9FbGVtZW50OkEuYyxIVE1MQlJFbGVtZW50OkEuYyxIVE1MQnV0dG9uRWxlbWVudDpBLmMsSFRNTENhbnZhc0VsZW1lbnQ6QS5jLEhUTUxDb250ZW50RWxlbWVudDpBLmMsSFRNTERMaXN0RWxlbWVudDpBLmMsSFRNTERhdGFFbGVtZW50OkEuYyxIVE1MRGF0YUxpc3RFbGVtZW50OkEuYyxIVE1MRGV0YWlsc0VsZW1lbnQ6QS5jLEhUTUxEaWFsb2dFbGVtZW50OkEuYyxIVE1MRW1iZWRFbGVtZW50OkEuYyxIVE1MRmllbGRTZXRFbGVtZW50OkEuYyxIVE1MSFJFbGVtZW50OkEuYyxIVE1MSGVhZEVsZW1lbnQ6QS5jLEhUTUxIZWFkaW5nRWxlbWVudDpBLmMsSFRNTEh0bWxFbGVtZW50OkEuYyxIVE1MSUZyYW1lRWxlbWVudDpBLmMsSFRNTEltYWdlRWxlbWVudDpBLmMsSFRNTElucHV0RWxlbWVudDpBLmMsSFRNTExJRWxlbWVudDpBLmMsSFRNTExhYmVsRWxlbWVudDpBLmMsSFRNTExlZ2VuZEVsZW1lbnQ6QS5jLEhUTUxMaW5rRWxlbWVudDpBLmMsSFRNTE1hcEVsZW1lbnQ6QS5jLEhUTUxNZWRpYUVsZW1lbnQ6QS5jLEhUTUxNZW51RWxlbWVudDpBLmMsSFRNTE1ldGFFbGVtZW50OkEuYyxIVE1MTWV0ZXJFbGVtZW50OkEuYyxIVE1MTW9kRWxlbWVudDpBLmMsSFRNTE9MaXN0RWxlbWVudDpBLmMsSFRNTE9iamVjdEVsZW1lbnQ6QS5jLEhUTUxPcHRHcm91cEVsZW1lbnQ6QS5jLEhUTUxPcHRpb25FbGVtZW50OkEuYyxIVE1MT3V0cHV0RWxlbWVudDpBLmMsSFRNTFBhcmFncmFwaEVsZW1lbnQ6QS5jLEhUTUxQYXJhbUVsZW1lbnQ6QS5jLEhUTUxQaWN0dXJlRWxlbWVudDpBLmMsSFRNTFByZUVsZW1lbnQ6QS5jLEhUTUxQcm9ncmVzc0VsZW1lbnQ6QS5jLEhUTUxRdW90ZUVsZW1lbnQ6QS5jLEhUTUxTY3JpcHRFbGVtZW50OkEuYyxIVE1MU2hhZG93RWxlbWVudDpBLmMsSFRNTFNsb3RFbGVtZW50OkEuYyxIVE1MU291cmNlRWxlbWVudDpBLmMsSFRNTFNwYW5FbGVtZW50OkEuYyxIVE1MU3R5bGVFbGVtZW50OkEuYyxIVE1MVGFibGVDYXB0aW9uRWxlbWVudDpBLmMsSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6QS5jLEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudDpBLmMsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6QS5jLEhUTUxUYWJsZUNvbEVsZW1lbnQ6QS5jLEhUTUxUZXh0QXJlYUVsZW1lbnQ6QS5jLEhUTUxUaW1lRWxlbWVudDpBLmMsSFRNTFRpdGxlRWxlbWVudDpBLmMsSFRNTFRyYWNrRWxlbWVudDpBLmMsSFRNTFVMaXN0RWxlbWVudDpBLmMsSFRNTFVua25vd25FbGVtZW50OkEuYyxIVE1MVmlkZW9FbGVtZW50OkEuYyxIVE1MRGlyZWN0b3J5RWxlbWVudDpBLmMsSFRNTEZvbnRFbGVtZW50OkEuYyxIVE1MRnJhbWVFbGVtZW50OkEuYyxIVE1MRnJhbWVTZXRFbGVtZW50OkEuYyxIVE1MTWFycXVlZUVsZW1lbnQ6QS5jLEhUTUxFbGVtZW50OkEuYyxIVE1MQW5jaG9yRWxlbWVudDpBLmI4LEhUTUxBcmVhRWxlbWVudDpBLmI5LEhUTUxCYXNlRWxlbWVudDpBLmE1LEhUTUxCb2R5RWxlbWVudDpBLlUsQ0RBVEFTZWN0aW9uOkEuQyxDaGFyYWN0ZXJEYXRhOkEuQyxDb21tZW50OkEuQyxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246QS5DLFRleHQ6QS5DLENTU1N0eWxlRGVjbGFyYXRpb246QS5hcixNU1N0eWxlQ1NTUHJvcGVydGllczpBLmFyLENTUzJQcm9wZXJ0aWVzOkEuYXIsSFRNTERpdkVsZW1lbnQ6QS5hcyxET01FeGNlcHRpb246QS5jZixET01Ub2tlbkxpc3Q6QS5jZyxFbGVtZW50OkEuaSxBYm9ydFBheW1lbnRFdmVudDpBLmEsQW5pbWF0aW9uRXZlbnQ6QS5hLEFuaW1hdGlvblBsYXliYWNrRXZlbnQ6QS5hLEFwcGxpY2F0aW9uQ2FjaGVFcnJvckV2ZW50OkEuYSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OkEuYSxCYWNrZ3JvdW5kRmV0Y2hFdmVudDpBLmEsQmFja2dyb3VuZEZldGNoRmFpbEV2ZW50OkEuYSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OkEuYSxCZWZvcmVJbnN0YWxsUHJvbXB0RXZlbnQ6QS5hLEJlZm9yZVVubG9hZEV2ZW50OkEuYSxCbG9iRXZlbnQ6QS5hLENhbk1ha2VQYXltZW50RXZlbnQ6QS5hLENsaXBib2FyZEV2ZW50OkEuYSxDbG9zZUV2ZW50OkEuYSxDdXN0b21FdmVudDpBLmEsRGV2aWNlTW90aW9uRXZlbnQ6QS5hLERldmljZU9yaWVudGF0aW9uRXZlbnQ6QS5hLEVycm9yRXZlbnQ6QS5hLEV4dGVuZGFibGVFdmVudDpBLmEsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDpBLmEsRmV0Y2hFdmVudDpBLmEsRm9udEZhY2VTZXRMb2FkRXZlbnQ6QS5hLEZvcmVpZ25GZXRjaEV2ZW50OkEuYSxHYW1lcGFkRXZlbnQ6QS5hLEhhc2hDaGFuZ2VFdmVudDpBLmEsSW5zdGFsbEV2ZW50OkEuYSxNZWRpYUVuY3J5cHRlZEV2ZW50OkEuYSxNZWRpYUtleU1lc3NhZ2VFdmVudDpBLmEsTWVkaWFRdWVyeUxpc3RFdmVudDpBLmEsTWVkaWFTdHJlYW1FdmVudDpBLmEsTWVkaWFTdHJlYW1UcmFja0V2ZW50OkEuYSxNZXNzYWdlRXZlbnQ6QS5hLE1JRElDb25uZWN0aW9uRXZlbnQ6QS5hLE1JRElNZXNzYWdlRXZlbnQ6QS5hLE11dGF0aW9uRXZlbnQ6QS5hLE5vdGlmaWNhdGlvbkV2ZW50OkEuYSxQYWdlVHJhbnNpdGlvbkV2ZW50OkEuYSxQYXltZW50UmVxdWVzdEV2ZW50OkEuYSxQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OkEuYSxQb3BTdGF0ZUV2ZW50OkEuYSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6QS5hLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25DbG9zZUV2ZW50OkEuYSxQcm9ncmVzc0V2ZW50OkEuYSxQcm9taXNlUmVqZWN0aW9uRXZlbnQ6QS5hLFB1c2hFdmVudDpBLmEsUlRDRGF0YUNoYW5uZWxFdmVudDpBLmEsUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDpBLmEsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDpBLmEsUlRDVHJhY2tFdmVudDpBLmEsU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudDpBLmEsU2Vuc29yRXJyb3JFdmVudDpBLmEsU3BlZWNoUmVjb2duaXRpb25FcnJvcjpBLmEsU3BlZWNoUmVjb2duaXRpb25FdmVudDpBLmEsU3BlZWNoU3ludGhlc2lzRXZlbnQ6QS5hLFN0b3JhZ2VFdmVudDpBLmEsU3luY0V2ZW50OkEuYSxUcmFja0V2ZW50OkEuYSxUcmFuc2l0aW9uRXZlbnQ6QS5hLFdlYktpdFRyYW5zaXRpb25FdmVudDpBLmEsVlJEZXZpY2VFdmVudDpBLmEsVlJEaXNwbGF5RXZlbnQ6QS5hLFZSU2Vzc2lvbkV2ZW50OkEuYSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50OkEuYSxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6QS5hLFVTQkNvbm5lY3Rpb25FdmVudDpBLmEsSURCVmVyc2lvbkNoYW5nZUV2ZW50OkEuYSxBdWRpb1Byb2Nlc3NpbmdFdmVudDpBLmEsT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OkEuYSxXZWJHTENvbnRleHRFdmVudDpBLmEsRXZlbnQ6QS5hLElucHV0RXZlbnQ6QS5hLFN1Ym1pdEV2ZW50OkEuYSxFdmVudFRhcmdldDpBLmJpLEhUTUxGb3JtRWxlbWVudDpBLmJqLEhUTUxDb2xsZWN0aW9uOkEuWSxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjpBLlksSFRNTE9wdGlvbnNDb2xsZWN0aW9uOkEuWSxMb2NhdGlvbjpBLmNyLE1vdXNlRXZlbnQ6QS52LERyYWdFdmVudDpBLnYsUG9pbnRlckV2ZW50OkEudixXaGVlbEV2ZW50OkEudixEb2N1bWVudDpBLmUsRG9jdW1lbnRGcmFnbWVudDpBLmUsSFRNTERvY3VtZW50OkEuZSxTaGFkb3dSb290OkEuZSxYTUxEb2N1bWVudDpBLmUsRG9jdW1lbnRUeXBlOkEuZSxOb2RlOkEuZSxOb2RlTGlzdDpBLmFFLFJhZGlvTm9kZUxpc3Q6QS5hRSxIVE1MU2VsZWN0RWxlbWVudDpBLmJCLEhUTUxUYWJsZUVsZW1lbnQ6QS5hTixIVE1MVGFibGVSb3dFbGVtZW50OkEuYkYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6QS5iRyxIVE1MVGVtcGxhdGVFbGVtZW50OkEuYWMsQ29tcG9zaXRpb25FdmVudDpBLkIsRm9jdXNFdmVudDpBLkIsS2V5Ym9hcmRFdmVudDpBLkIsVGV4dEV2ZW50OkEuQixUb3VjaEV2ZW50OkEuQixVSUV2ZW50OkEuQixXaW5kb3c6QS5hTyxET01XaW5kb3c6QS5hTyxBdHRyOkEuYWcsTmFtZWROb2RlTWFwOkEuYVYsTW96TmFtZWRBdHRyTWFwOkEuYVYsU1ZHU2NyaXB0RWxlbWVudDpBLmFhLFNWR0FFbGVtZW50OkEuYixTVkdBbmltYXRlRWxlbWVudDpBLmIsU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6QS5iLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OkEuYixTVkdBbmltYXRpb25FbGVtZW50OkEuYixTVkdDaXJjbGVFbGVtZW50OkEuYixTVkdDbGlwUGF0aEVsZW1lbnQ6QS5iLFNWR0RlZnNFbGVtZW50OkEuYixTVkdEZXNjRWxlbWVudDpBLmIsU1ZHRGlzY2FyZEVsZW1lbnQ6QS5iLFNWR0VsbGlwc2VFbGVtZW50OkEuYixTVkdGRUJsZW5kRWxlbWVudDpBLmIsU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6QS5iLFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OkEuYixTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6QS5iLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OkEuYixTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6QS5iLFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpBLmIsU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OkEuYixTVkdGRUZsb29kRWxlbWVudDpBLmIsU1ZHRkVGdW5jQUVsZW1lbnQ6QS5iLFNWR0ZFRnVuY0JFbGVtZW50OkEuYixTVkdGRUZ1bmNHRWxlbWVudDpBLmIsU1ZHRkVGdW5jUkVsZW1lbnQ6QS5iLFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDpBLmIsU1ZHRkVJbWFnZUVsZW1lbnQ6QS5iLFNWR0ZFTWVyZ2VFbGVtZW50OkEuYixTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6QS5iLFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6QS5iLFNWR0ZFT2Zmc2V0RWxlbWVudDpBLmIsU1ZHRkVQb2ludExpZ2h0RWxlbWVudDpBLmIsU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDpBLmIsU1ZHRkVTcG90TGlnaHRFbGVtZW50OkEuYixTVkdGRVRpbGVFbGVtZW50OkEuYixTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OkEuYixTVkdGaWx0ZXJFbGVtZW50OkEuYixTVkdGb3JlaWduT2JqZWN0RWxlbWVudDpBLmIsU1ZHR0VsZW1lbnQ6QS5iLFNWR0dlb21ldHJ5RWxlbWVudDpBLmIsU1ZHR3JhcGhpY3NFbGVtZW50OkEuYixTVkdJbWFnZUVsZW1lbnQ6QS5iLFNWR0xpbmVFbGVtZW50OkEuYixTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6QS5iLFNWR01hcmtlckVsZW1lbnQ6QS5iLFNWR01hc2tFbGVtZW50OkEuYixTVkdNZXRhZGF0YUVsZW1lbnQ6QS5iLFNWR1BhdGhFbGVtZW50OkEuYixTVkdQYXR0ZXJuRWxlbWVudDpBLmIsU1ZHUG9seWdvbkVsZW1lbnQ6QS5iLFNWR1BvbHlsaW5lRWxlbWVudDpBLmIsU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OkEuYixTVkdSZWN0RWxlbWVudDpBLmIsU1ZHU2V0RWxlbWVudDpBLmIsU1ZHU3RvcEVsZW1lbnQ6QS5iLFNWR1N0eWxlRWxlbWVudDpBLmIsU1ZHU1ZHRWxlbWVudDpBLmIsU1ZHU3dpdGNoRWxlbWVudDpBLmIsU1ZHU3ltYm9sRWxlbWVudDpBLmIsU1ZHVFNwYW5FbGVtZW50OkEuYixTVkdUZXh0Q29udGVudEVsZW1lbnQ6QS5iLFNWR1RleHRFbGVtZW50OkEuYixTVkdUZXh0UGF0aEVsZW1lbnQ6QS5iLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6QS5iLFNWR1RpdGxlRWxlbWVudDpBLmIsU1ZHVXNlRWxlbWVudDpBLmIsU1ZHVmlld0VsZW1lbnQ6QS5iLFNWR0dyYWRpZW50RWxlbWVudDpBLmIsU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6QS5iLFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6QS5iLFNWR01QYXRoRWxlbWVudDpBLmIsU1ZHRWxlbWVudDpBLmJ9KQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLERPTUltcGxlbWVudGF0aW9uOnRydWUsTWVkaWFFcnJvcjp0cnVlLE5hdmlnYXRvcjp0cnVlLE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTp0cnVlLE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOnRydWUsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6dHJ1ZSxQb3NpdGlvbkVycm9yOnRydWUsR2VvbG9jYXRpb25Qb3NpdGlvbkVycm9yOnRydWUsUmFuZ2U6dHJ1ZSxIVE1MQXVkaW9FbGVtZW50OnRydWUsSFRNTEJSRWxlbWVudDp0cnVlLEhUTUxCdXR0b25FbGVtZW50OnRydWUsSFRNTENhbnZhc0VsZW1lbnQ6dHJ1ZSxIVE1MQ29udGVudEVsZW1lbnQ6dHJ1ZSxIVE1MRExpc3RFbGVtZW50OnRydWUsSFRNTERhdGFFbGVtZW50OnRydWUsSFRNTERhdGFMaXN0RWxlbWVudDp0cnVlLEhUTUxEZXRhaWxzRWxlbWVudDp0cnVlLEhUTUxEaWFsb2dFbGVtZW50OnRydWUsSFRNTEVtYmVkRWxlbWVudDp0cnVlLEhUTUxGaWVsZFNldEVsZW1lbnQ6dHJ1ZSxIVE1MSFJFbGVtZW50OnRydWUsSFRNTEhlYWRFbGVtZW50OnRydWUsSFRNTEhlYWRpbmdFbGVtZW50OnRydWUsSFRNTEh0bWxFbGVtZW50OnRydWUsSFRNTElGcmFtZUVsZW1lbnQ6dHJ1ZSxIVE1MSW1hZ2VFbGVtZW50OnRydWUsSFRNTElucHV0RWxlbWVudDp0cnVlLEhUTUxMSUVsZW1lbnQ6dHJ1ZSxIVE1MTGFiZWxFbGVtZW50OnRydWUsSFRNTExlZ2VuZEVsZW1lbnQ6dHJ1ZSxIVE1MTGlua0VsZW1lbnQ6dHJ1ZSxIVE1MTWFwRWxlbWVudDp0cnVlLEhUTUxNZWRpYUVsZW1lbnQ6dHJ1ZSxIVE1MTWVudUVsZW1lbnQ6dHJ1ZSxIVE1MTWV0YUVsZW1lbnQ6dHJ1ZSxIVE1MTWV0ZXJFbGVtZW50OnRydWUsSFRNTE1vZEVsZW1lbnQ6dHJ1ZSxIVE1MT0xpc3RFbGVtZW50OnRydWUsSFRNTE9iamVjdEVsZW1lbnQ6dHJ1ZSxIVE1MT3B0R3JvdXBFbGVtZW50OnRydWUsSFRNTE9wdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MT3V0cHV0RWxlbWVudDp0cnVlLEhUTUxQYXJhZ3JhcGhFbGVtZW50OnRydWUsSFRNTFBhcmFtRWxlbWVudDp0cnVlLEhUTUxQaWN0dXJlRWxlbWVudDp0cnVlLEhUTUxQcmVFbGVtZW50OnRydWUsSFRNTFByb2dyZXNzRWxlbWVudDp0cnVlLEhUTUxRdW90ZUVsZW1lbnQ6dHJ1ZSxIVE1MU2NyaXB0RWxlbWVudDp0cnVlLEhUTUxTaGFkb3dFbGVtZW50OnRydWUsSFRNTFNsb3RFbGVtZW50OnRydWUsSFRNTFNvdXJjZUVsZW1lbnQ6dHJ1ZSxIVE1MU3BhbkVsZW1lbnQ6dHJ1ZSxIVE1MU3R5bGVFbGVtZW50OnRydWUsSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZUhlYWRlckNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxlQ29sRWxlbWVudDp0cnVlLEhUTUxUZXh0QXJlYUVsZW1lbnQ6dHJ1ZSxIVE1MVGltZUVsZW1lbnQ6dHJ1ZSxIVE1MVGl0bGVFbGVtZW50OnRydWUsSFRNTFRyYWNrRWxlbWVudDp0cnVlLEhUTUxVTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MVW5rbm93bkVsZW1lbnQ6dHJ1ZSxIVE1MVmlkZW9FbGVtZW50OnRydWUsSFRNTERpcmVjdG9yeUVsZW1lbnQ6dHJ1ZSxIVE1MRm9udEVsZW1lbnQ6dHJ1ZSxIVE1MRnJhbWVFbGVtZW50OnRydWUsSFRNTEZyYW1lU2V0RWxlbWVudDp0cnVlLEhUTUxNYXJxdWVlRWxlbWVudDp0cnVlLEhUTUxFbGVtZW50OmZhbHNlLEhUTUxBbmNob3JFbGVtZW50OnRydWUsSFRNTEFyZWFFbGVtZW50OnRydWUsSFRNTEJhc2VFbGVtZW50OnRydWUsSFRNTEJvZHlFbGVtZW50OnRydWUsQ0RBVEFTZWN0aW9uOnRydWUsQ2hhcmFjdGVyRGF0YTp0cnVlLENvbW1lbnQ6dHJ1ZSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246dHJ1ZSxUZXh0OnRydWUsQ1NTU3R5bGVEZWNsYXJhdGlvbjp0cnVlLE1TU3R5bGVDU1NQcm9wZXJ0aWVzOnRydWUsQ1NTMlByb3BlcnRpZXM6dHJ1ZSxIVE1MRGl2RWxlbWVudDp0cnVlLERPTUV4Y2VwdGlvbjp0cnVlLERPTVRva2VuTGlzdDp0cnVlLEVsZW1lbnQ6ZmFsc2UsQWJvcnRQYXltZW50RXZlbnQ6dHJ1ZSxBbmltYXRpb25FdmVudDp0cnVlLEFuaW1hdGlvblBsYXliYWNrRXZlbnQ6dHJ1ZSxBcHBsaWNhdGlvbkNhY2hlRXJyb3JFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaENsaWNrRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaEZhaWxFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaGVkRXZlbnQ6dHJ1ZSxCZWZvcmVJbnN0YWxsUHJvbXB0RXZlbnQ6dHJ1ZSxCZWZvcmVVbmxvYWRFdmVudDp0cnVlLEJsb2JFdmVudDp0cnVlLENhbk1ha2VQYXltZW50RXZlbnQ6dHJ1ZSxDbGlwYm9hcmRFdmVudDp0cnVlLENsb3NlRXZlbnQ6dHJ1ZSxDdXN0b21FdmVudDp0cnVlLERldmljZU1vdGlvbkV2ZW50OnRydWUsRGV2aWNlT3JpZW50YXRpb25FdmVudDp0cnVlLEVycm9yRXZlbnQ6dHJ1ZSxFeHRlbmRhYmxlRXZlbnQ6dHJ1ZSxFeHRlbmRhYmxlTWVzc2FnZUV2ZW50OnRydWUsRmV0Y2hFdmVudDp0cnVlLEZvbnRGYWNlU2V0TG9hZEV2ZW50OnRydWUsRm9yZWlnbkZldGNoRXZlbnQ6dHJ1ZSxHYW1lcGFkRXZlbnQ6dHJ1ZSxIYXNoQ2hhbmdlRXZlbnQ6dHJ1ZSxJbnN0YWxsRXZlbnQ6dHJ1ZSxNZWRpYUVuY3J5cHRlZEV2ZW50OnRydWUsTWVkaWFLZXlNZXNzYWdlRXZlbnQ6dHJ1ZSxNZWRpYVF1ZXJ5TGlzdEV2ZW50OnRydWUsTWVkaWFTdHJlYW1FdmVudDp0cnVlLE1lZGlhU3RyZWFtVHJhY2tFdmVudDp0cnVlLE1lc3NhZ2VFdmVudDp0cnVlLE1JRElDb25uZWN0aW9uRXZlbnQ6dHJ1ZSxNSURJTWVzc2FnZUV2ZW50OnRydWUsTXV0YXRpb25FdmVudDp0cnVlLE5vdGlmaWNhdGlvbkV2ZW50OnRydWUsUGFnZVRyYW5zaXRpb25FdmVudDp0cnVlLFBheW1lbnRSZXF1ZXN0RXZlbnQ6dHJ1ZSxQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OnRydWUsUG9wU3RhdGVFdmVudDp0cnVlLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25BdmFpbGFibGVFdmVudDp0cnVlLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25DbG9zZUV2ZW50OnRydWUsUHJvZ3Jlc3NFdmVudDp0cnVlLFByb21pc2VSZWplY3Rpb25FdmVudDp0cnVlLFB1c2hFdmVudDp0cnVlLFJUQ0RhdGFDaGFubmVsRXZlbnQ6dHJ1ZSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50OnRydWUsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDp0cnVlLFJUQ1RyYWNrRXZlbnQ6dHJ1ZSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OnRydWUsU2Vuc29yRXJyb3JFdmVudDp0cnVlLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OnRydWUsU3BlZWNoU3ludGhlc2lzRXZlbnQ6dHJ1ZSxTdG9yYWdlRXZlbnQ6dHJ1ZSxTeW5jRXZlbnQ6dHJ1ZSxUcmFja0V2ZW50OnRydWUsVHJhbnNpdGlvbkV2ZW50OnRydWUsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OnRydWUsVlJEZXZpY2VFdmVudDp0cnVlLFZSRGlzcGxheUV2ZW50OnRydWUsVlJTZXNzaW9uRXZlbnQ6dHJ1ZSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50OnRydWUsUmVzb3VyY2VQcm9ncmVzc0V2ZW50OnRydWUsVVNCQ29ubmVjdGlvbkV2ZW50OnRydWUsSURCVmVyc2lvbkNoYW5nZUV2ZW50OnRydWUsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6dHJ1ZSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6dHJ1ZSxXZWJHTENvbnRleHRFdmVudDp0cnVlLEV2ZW50OmZhbHNlLElucHV0RXZlbnQ6ZmFsc2UsU3VibWl0RXZlbnQ6ZmFsc2UsRXZlbnRUYXJnZXQ6ZmFsc2UsSFRNTEZvcm1FbGVtZW50OnRydWUsSFRNTENvbGxlY3Rpb246dHJ1ZSxIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbjp0cnVlLEhUTUxPcHRpb25zQ29sbGVjdGlvbjp0cnVlLExvY2F0aW9uOnRydWUsTW91c2VFdmVudDp0cnVlLERyYWdFdmVudDp0cnVlLFBvaW50ZXJFdmVudDp0cnVlLFdoZWVsRXZlbnQ6dHJ1ZSxEb2N1bWVudDp0cnVlLERvY3VtZW50RnJhZ21lbnQ6dHJ1ZSxIVE1MRG9jdW1lbnQ6dHJ1ZSxTaGFkb3dSb290OnRydWUsWE1MRG9jdW1lbnQ6dHJ1ZSxEb2N1bWVudFR5cGU6dHJ1ZSxOb2RlOmZhbHNlLE5vZGVMaXN0OnRydWUsUmFkaW9Ob2RlTGlzdDp0cnVlLEhUTUxTZWxlY3RFbGVtZW50OnRydWUsSFRNTFRhYmxlRWxlbWVudDp0cnVlLEhUTUxUYWJsZVJvd0VsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVTZWN0aW9uRWxlbWVudDp0cnVlLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6dHJ1ZSxDb21wb3NpdGlvbkV2ZW50OnRydWUsRm9jdXNFdmVudDp0cnVlLEtleWJvYXJkRXZlbnQ6dHJ1ZSxUZXh0RXZlbnQ6dHJ1ZSxUb3VjaEV2ZW50OnRydWUsVUlFdmVudDpmYWxzZSxXaW5kb3c6dHJ1ZSxET01XaW5kb3c6dHJ1ZSxBdHRyOnRydWUsTmFtZWROb2RlTWFwOnRydWUsTW96TmFtZWRBdHRyTWFwOnRydWUsU1ZHU2NyaXB0RWxlbWVudDp0cnVlLFNWR0FFbGVtZW50OnRydWUsU1ZHQW5pbWF0ZUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRlTW90aW9uRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OnRydWUsU1ZHQW5pbWF0aW9uRWxlbWVudDp0cnVlLFNWR0NpcmNsZUVsZW1lbnQ6dHJ1ZSxTVkdDbGlwUGF0aEVsZW1lbnQ6dHJ1ZSxTVkdEZWZzRWxlbWVudDp0cnVlLFNWR0Rlc2NFbGVtZW50OnRydWUsU1ZHRGlzY2FyZEVsZW1lbnQ6dHJ1ZSxTVkdFbGxpcHNlRWxlbWVudDp0cnVlLFNWR0ZFQmxlbmRFbGVtZW50OnRydWUsU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDp0cnVlLFNWR0ZFQ29tcG9zaXRlRWxlbWVudDp0cnVlLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OnRydWUsU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OnRydWUsU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OnRydWUsU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OnRydWUsU1ZHRkVGbG9vZEVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNBRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0JFbGVtZW50OnRydWUsU1ZHRkVGdW5jR0VsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNSRWxlbWVudDp0cnVlLFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDp0cnVlLFNWR0ZFSW1hZ2VFbGVtZW50OnRydWUsU1ZHRkVNZXJnZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1vcnBob2xvZ3lFbGVtZW50OnRydWUsU1ZHRkVPZmZzZXRFbGVtZW50OnRydWUsU1ZHRkVQb2ludExpZ2h0RWxlbWVudDp0cnVlLFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6dHJ1ZSxTVkdGRVNwb3RMaWdodEVsZW1lbnQ6dHJ1ZSxTVkdGRVRpbGVFbGVtZW50OnRydWUsU1ZHRkVUdXJidWxlbmNlRWxlbWVudDp0cnVlLFNWR0ZpbHRlckVsZW1lbnQ6dHJ1ZSxTVkdGb3JlaWduT2JqZWN0RWxlbWVudDp0cnVlLFNWR0dFbGVtZW50OnRydWUsU1ZHR2VvbWV0cnlFbGVtZW50OnRydWUsU1ZHR3JhcGhpY3NFbGVtZW50OnRydWUsU1ZHSW1hZ2VFbGVtZW50OnRydWUsU1ZHTGluZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdNYXJrZXJFbGVtZW50OnRydWUsU1ZHTWFza0VsZW1lbnQ6dHJ1ZSxTVkdNZXRhZGF0YUVsZW1lbnQ6dHJ1ZSxTVkdQYXRoRWxlbWVudDp0cnVlLFNWR1BhdHRlcm5FbGVtZW50OnRydWUsU1ZHUG9seWdvbkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5bGluZUVsZW1lbnQ6dHJ1ZSxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdSZWN0RWxlbWVudDp0cnVlLFNWR1NldEVsZW1lbnQ6dHJ1ZSxTVkdTdG9wRWxlbWVudDp0cnVlLFNWR1N0eWxlRWxlbWVudDp0cnVlLFNWR1NWR0VsZW1lbnQ6dHJ1ZSxTVkdTd2l0Y2hFbGVtZW50OnRydWUsU1ZHU3ltYm9sRWxlbWVudDp0cnVlLFNWR1RTcGFuRWxlbWVudDp0cnVlLFNWR1RleHRDb250ZW50RWxlbWVudDp0cnVlLFNWR1RleHRFbGVtZW50OnRydWUsU1ZHVGV4dFBhdGhFbGVtZW50OnRydWUsU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDp0cnVlLFNWR1RpdGxlRWxlbWVudDp0cnVlLFNWR1VzZUVsZW1lbnQ6dHJ1ZSxTVkdWaWV3RWxlbWVudDp0cnVlLFNWR0dyYWRpZW50RWxlbWVudDp0cnVlLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OnRydWUsU1ZHRkVEcm9wU2hhZG93RWxlbWVudDp0cnVlLFNWR01QYXRoRWxlbWVudDp0cnVlLFNWR0VsZW1lbnQ6ZmFsc2V9KX0pKCkKY29udmVydEFsbFRvRmFzdE9iamVjdCh3KQpjb252ZXJ0VG9GYXN0T2JqZWN0KCQpOyhmdW5jdGlvbihhKXtpZih0eXBlb2YgZG9jdW1lbnQ9PT0idW5kZWZpbmVkIil7YShudWxsKQpyZXR1cm59aWYodHlwZW9mIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQhPSJ1bmRlZmluZWQiKXthKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpCnJldHVybn12YXIgdD1kb2N1bWVudC5zY3JpcHRzCmZ1bmN0aW9uIG9uTG9hZChiKXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoOysrcil0W3JdLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLG9uTG9hZCxmYWxzZSkKYShiLnRhcmdldCl9Zm9yKHZhciBzPTA7czx0Lmxlbmd0aDsrK3MpdFtzXS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixvbkxvYWQsZmFsc2UpfSkoZnVuY3Rpb24oYSl7di5jdXJyZW50U2NyaXB0PWEKdmFyIHQ9QS5oRQppZih0eXBlb2YgZGFydE1haW5SdW5uZXI9PT0iZnVuY3Rpb24iKWRhcnRNYWluUnVubmVyKHQsW10pCmVsc2UgdChbXSl9KX0pKCk="></script></head>
  −
 
  −
<body>
  −
  <div id="content-wrap">
  −
    <div id="main-content">
  −
      <div id="page-content">
  −
        <div class="scp-message-box">
  −
        <div class="inner">
  −
        <div class="out2">
  −
        <p><strong>本報告書は2022年3月6日時点のものです。</strong></p>
  −
        </div>
  −
        <div class="rev2 out3 hidden">
  −
        <p><strong>本報告書は2022年5月21日時点のものです。</strong></p>
  −
        </div>
  −
        <div class="rev3 out4 hidden">
  −
        <p><strong>本報告書は2022年6月27日時点のものです。</strong></p>
  −
        </div>
  −
        <div class="rev4 hidden">
  −
        <p><strong>本報告書は2022年7月1日時点のものです。</strong></p>
  −
        </div>
  −
        <div class="rev2 hidden">
  −
        <p>更新点は<span class="stained">着色</span>されています。</p>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="report-body">
  −
        <div class="out2">
  −
        <div class="anom-bar-container mstdn clear-3 keter ekhi notice">
  −
        <div class="anom-bar">
  −
        <div class="top-box">
  −
        <div class="top-left-box">
  −
        <span class="item"></span><span class="number" data-number="425"></span>
  −
        </div>
  −
        <div class="top-center-box">
  −
        <div class="bar-one">
  −
 
  −
        </div>
  −
        <div class="bar-two">
  −
 
  −
        </div>
  −
        <div class="bar-three">
  −
 
  −
        </div>
  −
        <div class="bar-four">
  −
 
  −
        </div>
  −
        <div class="bar-five">
  −
 
  −
        </div>
  −
        <div class="bar-six">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="top-right-box">
  −
        <div class="level">
  −
 
  −
        </div>
  −
        <div class="clearance">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="bottom-box">
  −
        <div class="text-part">
  −
        <div class="main-class">
  −
        <div class="contain-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="second-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="disrupt-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="risk-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="diamond-part">
  −
        <div class="danger-diamond">
  −
        <a href="http://ja.scp-wiki.net/classification-committee-memo"></a><br>
  −
        <div class="arrows">
  −
 
  −
        </div>
  −
        <div class="octagon">
  −
 
  −
        </div>
  −
        <div class="quadrants">
  −
        <div class="top-quad">
  −
 
  −
        </div>
  −
        <div class="right-quad">
  −
 
  −
        </div>
  −
        <div class="left-quad">
  −
 
  −
        </div>
  −
        <div class="bottom-quad">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="top-icon">
  −
 
  −
        </div>
  −
        <div class="right-icon">
  −
 
  −
        </div>
  −
        <div class="left-icon">
  −
 
  −
        </div>
  −
        <div class="bottom-icon">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="rev2 out3 hidden">
  −
        <div class="anom-bar-container mstdn clear-3 euclid ekhi notice">
  −
        <div class="anom-bar">
  −
        <div class="top-box">
  −
        <div class="top-left-box">
  −
        <span class="item"></span><span class="number" data-number="425"></span>
  −
        </div>
  −
        <div class="top-center-box">
  −
        <div class="bar-one">
  −
 
  −
        </div>
  −
        <div class="bar-two">
  −
 
  −
        </div>
  −
        <div class="bar-three">
  −
 
  −
        </div>
  −
        <div class="bar-four">
  −
 
  −
        </div>
  −
        <div class="bar-five">
  −
 
  −
        </div>
  −
        <div class="bar-six">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="top-right-box">
  −
        <div class="level">
  −
 
  −
        </div>
  −
        <div class="clearance">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="bottom-box">
  −
        <div class="text-part">
  −
        <div class="main-class">
  −
        <div class="contain-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="second-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="disrupt-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="risk-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="diamond-part">
  −
        <div class="danger-diamond">
  −
        <a href="http://ja.scp-wiki.net/classification-committee-memo"></a><br>
  −
        <div class="arrows">
  −
 
  −
        </div>
  −
        <div class="octagon">
  −
 
  −
        </div>
  −
        <div class="quadrants">
  −
        <div class="top-quad">
  −
 
  −
        </div>
  −
        <div class="right-quad">
  −
 
  −
        </div>
  −
        <div class="left-quad">
  −
 
  −
        </div>
  −
        <div class="bottom-quad">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="top-icon">
  −
 
  −
        </div>
  −
        <div class="right-icon">
  −
 
  −
        </div>
  −
        <div class="left-icon">
  −
 
  −
        </div>
  −
        <div class="bottom-icon">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="rev3 hidden">
  −
        <div class="anom-bar-container mstdn clear-3 keter ekhi danger">
  −
        <div class="anom-bar">
  −
        <div class="top-box">
  −
        <div class="top-left-box">
  −
        <span class="item"></span><span class="number" data-number="425"></span>
  −
        </div>
  −
        <div class="top-center-box">
  −
        <div class="bar-one">
  −
 
  −
        </div>
  −
        <div class="bar-two">
  −
 
  −
        </div>
  −
        <div class="bar-three">
  −
 
  −
        </div>
  −
        <div class="bar-four">
  −
 
  −
        </div>
  −
        <div class="bar-five">
  −
 
  −
        </div>
  −
        <div class="bar-six">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="top-right-box">
  −
        <div class="level">
  −
 
  −
        </div>
  −
        <div class="clearance">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="bottom-box">
  −
        <div class="text-part">
  −
        <div class="main-class">
  −
        <div class="contain-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="second-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="disrupt-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="risk-class">
  −
        <div class="class-category">
  −
 
  −
        </div>
  −
        <div class="class-text">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <div class="diamond-part">
  −
        <div class="danger-diamond">
  −
        <a href="http://ja.scp-wiki.net/classification-committee-memo"></a><br>
  −
        <div class="arrows">
  −
 
  −
        </div>
  −
        <div class="octagon">
  −
 
  −
        </div>
  −
        <div class="quadrants">
  −
        <div class="top-quad">
  −
 
  −
        </div>
  −
        <div class="right-quad">
  −
 
  −
        </div>
  −
        <div class="left-quad">
  −
 
  −
        </div>
  −
        <div class="bottom-quad">
  −
 
  −
        </div>
  −
        </div>
  −
        <div class="top-icon">
  −
 
  −
        </div>
  −
        <div class="right-icon">
  −
 
  −
        </div>
  −
        <div class="left-icon">
  −
 
  −
        </div>
  −
        <div class="bottom-icon">
  −
 
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        </div>
  −
        <p><strong>特別収容プロトコル:</strong>
  −
        SCP-425-MSTDNのチャンネルは自動化されたシステムにより監視され、配信が開始次第担当<span class="out3">エージェント</span><span class="rev3 hidden"><span class="out4"><del>エージェント</del></span>Dクラス職員</span>が配信の内容をリアルタイムで調査します。配信の内容は3重以上の冗長性をもって財団内ネットワークにアーカイブされます。</p>
  −
        <div class="out2">
  −
        <p>現在SCP-425-MSTDNの配信を防ぐ方法は発見されていません。収容の試みは無期限に継続されます。</p>
  −
        </div>
  −
        <div class="rev2 hidden">
  −
        <div class="out3">
  −
        <p><del>現在SCP-425-MSTDNの配信を防ぐ方法は発見されていません。収容の試みは無期限に継続されます。</del></p>
  −
        </div>
  −
        <p>各SCP-425-MSTDNの著者は捜索・追跡されます。著者への干渉実験は担当管理官の許可を取得してから行ってください。</p>
  −
        </div>
  −
        <div class="rev3 hidden">
  −
        <p>Googleとの取り決めのもと、SCP-425-MSTDN-6の配信時、コメントサーバーは中間サーバーを経由します。中間サーバーは通常のコメントに対しては単なるプロキシサーバーとして作用します。スーパーチャットについては割り当てられたDクラス職員によって同様のコメントを人為的に再現して再投稿します。担当のDクラス職員は専用に設計されたシェルターで作業を行い、配信中の出入りは禁止されます。</p>
  −
        </div>
  −
        <p><strong>説明:</strong>
  −
        SCP-425-MSTDNは複数の下位物語実体の総称です。SCP-425-MSTDNは濫觴宇宙からの
  −
        𝐿<sup>2</sup>ノルムでおおよそ 𝑟<sub>𝐵</sub> + 0.89RD の座標<sup class="footnoteref"><a class="footnoteref" id="footnoteref-1" href="#footnote-1">1</a></sup>に存在すると推定されています。SCP-425-MSTDNは基底宇宙のことを「ヒトの国」と呼称しています。</p>
  −
        <p>SCP-425-MSTDNはVTuber<sup class="footnoteref"><a class="footnoteref" id="footnoteref-2" href="#footnote-2">2</a></sup>を自称しており、YouTubeへの不定期な配信によって基底宇宙とのコミュニケーションを行います。SCP-425-MSTDNはいずれも脊椎動物亜門の生物をイメージしたと思われる容姿の人型実体で、それら生物の日本語における一般名を自称しています。</p>
  −
        <p>SCP-425-MSTDNは配信を阻害するような状況を不明な手段で回復します。SCP-425-MSTDNの特異性はSCP-425-MSTDN-1およびSCP-425-MSTDN-2の収益化<sup class="footnoteref"><a class="footnoteref" id="footnoteref-3" href="#footnote-3">3</a></sup>達成時の申請データの異常な振る舞いによって明らかにされました。このため、YouTubeの運営企業であるGoogleによってチャンネル停止処分を含むいくつかのペナルティが発行されましたが、それにもかかわらず通常通り配信行為が行われていることから、同社に潜伏中の財団エージェントの興味を引きました。現在まで、財団によるSCP-425-MSTDNの配信を妨害しようとするあらゆる試みは成功していません。</p>
  −
        <p>WWW上に出現した公開情報においてはSCP-425-MSTDNは個人VTuberではないとされていますが、運営企業の情報は欠落しています。SCP-425-MSTDNの起源を特定する試みはすべて失敗しています。対外的に、SCP-425-MSTDNは財団フロント企業である<span class="censored" data-pseudo="検閲用ダミー"><span class="size0">██████</span></span>を主導とした<span class="censored liftable" data-pseudo="けものフレンズVぷろじぇくと"><span class="size0">██████████████</span></span>が運営していると情報操作を行っています。</p>
  −
        <div class="rev2 hidden">
  −
        <p>研究の結果、すべてのSCP-425-MSTDNはアバター<sup class="footnoteref"><a class="footnoteref" id="footnoteref-4" href="#footnote-4">4</a></sup>である可能性が指摘されています。SCP-425-MSTDN-1に対応する著者は「<span class="censored" data-pseudo="菅"><span class="size0">█</span></span> <span class="censored" data-pseudo="まどか"><span class="size0">███</span></span>」(以下SCP-425-1’と表記。その他の実体についても同様)、SCP-425-MSTDN-2に対応する著者は「<span class="censored" data-pseudo="築田"><span class="size0">██</span></span> <span class="censored" data-pseudo="行子"><span class="size0">██</span></span>」<span class="rev3 hidden">、SCP-425-MSTDN-6に対応する著者は「<span class="censored" data-pseudo="田崎"><span class="size0">██</span></span> <span class="censored" data-pseudo="礼奈"><span class="size0">██</span></span>」</span>であると推定されています。SCP-425-MSTDN-3からSCP-425-MSTDN-5までに対応する著者の特定は現在成功していません。</p>
  −
        </div>
  −
        <p>以下はこれまでに発見されたSCP-425-MSTDNの一覧です。</p>
  −
        <div class="out3">
  −
        <table>
  −
        <colgroup>
  −
        <col style="width: 23%">
  −
        <col style="width: 16%">
  −
        <col style="width: 27%">
  −
        <col style="width: 32%">
  −
        </colgroup>
  −
        <thead>
  −
        <tr class="header">
  −
        <th>識別番号</th>
  −
        <th>発見日</th>
  −
        <th>自称</th>
  −
        <th>モデルと思われる生物</th>
  −
        </tr>
  −
        </thead>
  −
        <tbody>
  −
        <tr class="odd">
  −
        <td>SCP-425-MSTDN-1</td>
  −
        <td>2021-04-25</td>
  −
        <td>ケープペンギン</td>
  −
        <td><em>Spheniscus demersus</em></td>
  −
        </tr>
  −
        <tr class="even">
  −
        <td>SCP-425-MSTDN-2</td>
  −
        <td>2021-04-25</td>
  −
        <td>フンボルトペンギン</td>
  −
        <td><em>Spheniscus humboldti</em></td>
  −
        </tr>
  −
        <tr class="odd">
  −
        <td>SCP-425-MSTDN-3</td>
  −
        <td>2021-06-07</td>
  −
        <td>シマハイイロギツネ</td>
  −
        <td><em>Urocyon littoralis</em></td>
  −
        </tr>
  −
        <tr class="even">
  −
        <td>SCP-425-MSTDN-4</td>
  −
        <td>2021-11-26</td>
  −
        <td>コヨーテ</td>
  −
        <td><em>Canis latrans</em></td>
  −
        </tr>
  −
        <tr class="odd">
  −
        <td>SCP-425-MSTDN-5</td>
  −
        <td>2022-03-06</td>
  −
        <td>ダイアウルフ</td>
  −
        <td><em>Aenocyon dirus</em></td>
  −
        </tr>
  −
        </tbody>
  −
        </table>
  −
        </div>
  −
        <div class="rev3 hidden">
  −
        <table>
  −
        <colgroup>
  −
        <col style="width: 24%">
  −
        <col style="width: 21%">
  −
        <col style="width: 25%">
  −
        <col style="width: 27%">
  −
        </colgroup>
  −
        <thead>
  −
        <tr class="header">
  −
        <th><span class="unstainable">識別番号</span></th>
  −
        <th><span class="unstainable">発見日</span></th>
  −
        <th><span class="unstainable">自称</span></th>
  −
        <th><span class="unstainable">モデルと思われる生物</span></th>
  −
        </tr>
  −
        </thead>
  −
        <tbody>
  −
        <tr class="odd">
  −
        <td><span class="unstainable">SCP-425-MSTDN-1</span></td>
  −
        <td><span class="unstainable">2021-04-25</span></td>
  −
        <td><span class="unstainable">ケープペンギン</span></td>
  −
        <td><span class="unstainable"><em>Spheniscus
  −
        demersus</em></span></td>
  −
        </tr>
  −
        <tr class="even">
  −
        <td><span class="unstainable">SCP-425-MSTDN-2</span></td>
  −
        <td><span class="unstainable">2021-04-25</span></td>
  −
        <td><span class="unstainable">フンボルトペンギン</span></td>
  −
        <td><span class="unstainable"><em>Spheniscus
  −
        humboldti</em></span></td>
  −
        </tr>
  −
        <tr class="odd">
  −
        <td><span class="unstainable">SCP-425-MSTDN-3</span></td>
  −
        <td><span class="unstainable">2021-06-07</span></td>
  −
        <td><span class="unstainable">シマハイイロギツネ</span></td>
  −
        <td><span class="unstainable"><em>Urocyon
  −
        littoralis</em></span></td>
  −
        </tr>
  −
        <tr class="even">
  −
        <td><span class="unstainable">SCP-425-MSTDN-4</span></td>
  −
        <td><span class="unstainable">2021-11-26</span></td>
  −
        <td><span class="unstainable">コヨーテ</span></td>
  −
        <td><span class="unstainable"><em>Canis latrans</em></span></td>
  −
        </tr>
  −
        <tr class="odd">
  −
        <td><span class="unstainable">SCP-425-MSTDN-5</span></td>
  −
        <td><span class="unstainable">2022-03-06</span></td>
  −
        <td><span class="unstainable">ダイアウルフ</span></td>
  −
        <td><span class="unstainable"><em>Aenocyon
  −
        dirus</em></span></td>
  −
        </tr>
  −
        <tr class="even">
  −
        <td>SCP-425-MSTDN-6</td>
  −
        <td>2022-05-21</td>
  −
        <td>カラカル</td>
  −
        <td><em>Caracal caracal</em></td>
  −
        </tr>
  −
        </tbody>
  −
        </table>
  −
        </div>
  −
        <div class="rev2 hidden">
  −
        <p><strong>インシデント記録 425-MSTDN-1 2022年5月21日:</strong>
  −
        財団によるSCP-425-MSTDN-1’への接触の結果、SCP-425-MSTDN-1は一時的な活動の停止を<a href="https://www.youtube.com/post/Ugkxe81xEaQQsT017zWlfin22Tn2SqE3Khs7">宣言</a>しました。以降、SCP-425-MSTDN-1による配信は行われていません。</p>
  −
        <p>これを受けて、財団は収容クラスをEuclidへ、SCP-425-MSTDN-1の部分的収容クラスをNagiへ再評価しました。接触の詳細は別紙資料を参照してください。</p>
  −
        <blockquote>
  −
        <p><em>一部の実体が活動を停止したのは異常実体の保護の観点からみれば好ましい結果ではないが、著者への干渉によってSCP-425-MSTDNが収容可能であることが示されたのは喜ばしい。実例が示すようにそれが非暴力的手段によって達成できるならばなおさらだ。急ぎSCP-425-MSTDN-3’からSCP-425-MSTDN-5’の特定を進める。</em>
  −
        – <span class="censored" data-pseudo="匿名"><span class="size0">██</span></span>博士</p>
  −
        </blockquote>
  −
        </div>
  −
        <div class="rev3 hidden">
  −
        <p><strong>インシデント記録 425-MSTDN-2 2022年6月12日:</strong>
  −
        SCP-425-MSTDN-1の活動停止と同日、新たなSCP-425-MSTDNが<a href="https://twitter.com/KEMOVP_staff/status/1527937240399216640">発見</a>され、当該個体はSCP-425-MSTDN-6とナンバリングされました。SCP-425-MSTDN-6はこれまでのSCP-425-MSTDNと異なり、明らかに正気を喪ったような言動をほぼ常時繰り返しています。</p>
  −
        <p>SCP-425-MSTDN-6はこれまでと比較しても異常な早さで収益化を<a href="https://twitter.com/caracal_kemov/status/1535907208118292481">達成</a>しましたが、下位物語実体であるにも関わらず不明な手段で基底宇宙に干渉可能であり、スーパーチャット<sup class="footnoteref"><a class="footnoteref" id="footnoteref-5" href="#footnote-5">5</a></sup>の投稿者に対して、その配信の最後に「ラッキーカラー占い」と称して擬現実改変的攻撃を行うなどの敵対的行為を行っています<sup class="footnoteref"><a class="footnoteref" id="footnoteref-6" href="#footnote-6">6</a></sup>。発見時期から、これはSCP-425-MSTDN-1の無力化に対する報復行為であると推測されています。</p>
  −
        <p>推定されたSCP-425-MSTDN-6’へのインタビューの結果、当該人物はSCP-425-MSTDN-6の攻撃行為とは無関係であるとみなされています。SCP-425-MSTDN-6’はインタビュー後Aクラス記憶処理を実施され解放されました。</p>
  −
        <p>これを受けて、財団は収容クラスをKeterへ、リスククラスをDangerへ再評価しました。</p>
  −
        <blockquote>
  −
        <p><strong>提案:</strong>
  −
        Googleに対し工作を行い、SCP-425-MSTDN-6に対する収益化の剥奪ないしスーパーチャット機能の凍結を行う。</p>
  −
        <p><strong>決定:</strong> 可決。</p>
  −
        <p><strong>結果:</strong>
  −
        SCP-425-MSTDN-6は不明な手段で収益化状態とスーパーチャット機能を回復した。</p>
  −
        <p><strong>コメント:</strong>
  −
        <em>SCP-425-MSTDNの性質から予想はしていたが。YouTubeに居座っているくせに完全に向こうのルールで動いているらしい。</em>
  −
        – <span class="censored" data-pseudo="匿名"><span class="size0">██</span></span>博士</p>
  −
        </blockquote>
  −
        <blockquote>
  −
        <p><strong>提案:</strong>
  −
        SCP-425-MSTDN-6’の終了を選択肢に含めた干渉行為によってSCP-425-MSTDN-6の無力化を図る。</p>
  −
        <p><strong>決定:</strong> 否決。</p>
  −
        <p><strong>結果:</strong> N/A</p>
  −
        <p><strong>コメント:</strong>
  −
        <em>対症療法的であり、同様のSCP-425-MSTDN実体の出現を誘発するにとどまる可能性が高い。また著者の特定に成功していない事例がすでに存在していることを考慮すると、状況が悪化しかねない。危険な実体の著者をひとまずは把握できている状態を維持すべきとの結論。当該提案は最終手段とする。</em>
  −
        – <span class="censored" data-pseudo="匿名"><span class="size0">██</span></span>博士</p>
  −
        </blockquote>
  −
        <blockquote>
  −
        <p><strong>提案:</strong>
  −
        SCP-425-MSTDN-6の配信に中継サーバを設け、スーパーチャットの投稿を自動システムのものに置き換える。</p>
  −
        <p><strong>決定:</strong> 可決。</p>
  −
        <p><strong>結果:</strong>
  −
        攻撃の回避に失敗。原投稿者に改変効果が発現した。</p>
  −
        <p><strong>コメント:</strong>
  −
        <em>自動システムは投稿者とみなさないのか?</em> – <span class="censored" data-pseudo="匿名"><span class="size0">██</span></span>博士</p>
  −
        </blockquote>
  −
        <blockquote>
  −
        <p><strong>提案:</strong>
  −
        SCP-425-MSTDN-6の配信に中継サーバを設け、スーパーチャットの投稿をDクラス職員に置き換えさせる。</p>
  −
        <p><strong>決定:</strong> 可決。</p>
  −
        <p><strong>結果:</strong>
  −
        代理投稿を行ったDクラス職員にすべての改変効果が発現した。当該提案を特別収容プロトコルに組み込む。</p>
  −
        <p><strong>コメント:</strong>
  −
        <em>どうあっても人的犠牲を強いるらしい。</em> – <span class="censored" data-pseudo="匿名"><span class="size0">██</span></span>博士</p>
  −
        </blockquote>
  −
        </div>
  −
        <div class="rev4 hidden">
  −
        <p><strong>インシデント記録 425-MSTDN-3 2022年7月1日:</strong>
  −
        この日のSCP-425-MSTDN-6’の配信終了間際に、「KEMO-V NEW
  −
        PROJECT」という文字列と5人と思われる人型のシルエットが<a href="https://youtu.be/SC-esKJNiBM?t=3675">表示</a>されました。新たなSCP-425-MSTDNの出現が予想されます。</p>
  −
        </div>
  −
        </div>
  −
        <div class="scp-message-box out4">
  −
        <div class="inner">
  −
        <p><strong>本報告書は古いリビジョンです。</strong><span id="now-rev" class="hidden">1</span></p>
  −
        <p><a href="javascript:;" id="new-revision">より新しいリビジョンを参照します。</a></p>
  −
        </div>
  −
        </div>
  −
       
  −
      <div class="footnotes-footer"><div class="title">Footnotes</div><div class="footnote-footer" id="footnote-1"><a href="#footnoteref-1">1</a>. ここで 𝑟<sub>𝐵</sub>
  −
        は基底宇宙の 𝐿<sup>2</sup>ノルムを示す物理定数。</div><div class="footnote-footer" id="footnote-2"><a href="#footnoteref-2">2</a>. 継続的にYouTubeに動画を投稿する人物またその集団であるYouTuberに対し、架空のキャラクターを用いて同様の活動を行うコンテンツのことで、Virtual-YouTuberを語源とする。</div><div class="footnote-footer" id="footnote-3"><a href="#footnoteref-3">3</a>. 特定の条件を達成した上で申請することで動画投稿および配信を通じてGoogleから金銭の受領を行えるシステム。</div><div class="footnote-footer" id="footnote-4"><a href="#footnoteref-4">4</a>. ある上位創作者(著者)が自身を物語領域に代入した結果生じる物語実体を指す空想科学用語。アバターは必ずしも著者の意思を反映するわけではなく、著者の存在を知らない場合も多い。</div><div class="footnote-footer" id="footnote-5"><a href="#footnoteref-5">5</a>. 金銭を上乗せして投稿することで配信者を応援できるYouTubeの機能。金銭はGoogleと配信者に分配される。</div><div class="footnote-footer" id="footnote-6"><a href="#footnoteref-6">6</a>. 当時の監視担当であったエージェント・青井は突如出現したロードローラーによって全身が激しい損壊を受け死亡した。</div></div></div>
  −
      <div class="page-tags">
  −
        <span><span class="fake-tag">keter</span>
  −
<span class="fake-tag">mstdn</span>
  −
<span class="fake-tag">scp</span>
  −
<span class="fake-tag">イヌ</span>
  −
<span class="fake-tag">オンライン</span>
  −
<span class="fake-tag">キツネ</span>
  −
<span class="fake-tag">ネコ</span>
  −
<span class="fake-tag">人間型</span>
  −
<span class="fake-tag">敵対的</span>
  −
<span class="fake-tag">現実改変</span>
  −
<span class="fake-tag">知性</span>
  −
<span class="fake-tag">自我</span>
  −
<span class="fake-tag">鳥類</span></span>
  −
      </div>
  −
      <div class="content-panel centered standalone license">
  −
        <p>
  −
          この記事の内容は、原作である <a href="https://scp-wiki.wikidot.com">SCP Foundation</a> © The Administrator のライセンスに基づき、<br>
  −
          例外的に<a href="https://creativecommons.org/licenses/by-sa/4.0/"><strong>クリエイティブ・コモンズ 表示-継承</strong></a>のライセンスで利用できます。
  −
        </p>
  −
        <p>
  −
          <a href="https://creativecommons.org/licenses/by-sa/4.0/"><img src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png"></a>
  −
        </p>
  −
      </div>
  −
    </div>
  −
  </div>
  −
 
  −
 
  −
</body></html>
 
編集者
88

回編集