/********************************************************* {COPYRIGHT-TOP} ***
* Licensed Materials - Property of IBM
* 5725-Z22, 5725-Z63, 5725-U33, 5725-Z63
*
* (C) Copyright IBM Corporation 2017
*
* All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or disclosure
* restricted by GSA ADP Schedule Contract with IBM Corp.
********************************************************** {COPYRIGHT-END} **/
.apim table.scrollableTable {
  border: solid 1px #e0e0e0;
}
.apim table.scrollableTable thead,
.apim table.scrollableTable .thead {
  display: table;
  table-layout: fixed;
  width: 100%;
}
.apim table.scrollableTable tbody {
  display: block;
  max-height: 120px;
  overflow-x: hidden;
  overflow-y: scroll;
  position: relative;
  table-layout: fixed;
  width: 100%;
}
.apim table.scrollableTable tbody tr.selected,
.apim table.scrollableTable tbody tr:hover {
  background-color: #ecefff;
}
.apim table.scrollableTable tr,
.apim table.scrollableTable tr:hover {
  border-color: #e0e0e0;
  border-left: 0;
  border-right: 0;
  -webkit-box-shadow: 0 0 rgba(0,0,0,0);
  box-shadow: 0 0 rgba(0,0,0,0);
  display: table;
  table-layout: fixed;
  width: 100%;
}
.apim table.scrollableTable tr td,
.apim table.scrollableTable tr:hover td {
  background-color: inherit;
}
.apim table.scrollableTable tr td,
.apim table.scrollableTable tr td:hover {
  background-color: inherit;
  border-color: #e0e0e0;
  -webkit-box-shadow: 0 0 rgba(0,0,0,0);
  box-shadow: 0 0 rgba(0,0,0,0);
  overflow: hidden;
}
.apim table.scrollableTable tr th {
  padding: 5px 10px;
}
.tooltipContainer .tooltip {
  display: inline-block;
  font-size: 14px;
  width: 300px;
}
.tooltipContainer .tooltip .tooltip-arrow::after {
  content: ' ';
  display: block;
  font-size: xx-large;
  position: relative;
  width: 75px;
  height: 75px;
}
.tooltipContainer .tooltip .tooltip-inner {
  max-width: none;
  text-align: inherit;
}
.tooltipContainer .tooltip.left .tooltip-arrow::after {
  left: -30px;
  top: -37px;
}
.tooltipContainer .tooltip.right {
  margin-left: 20px;
}
.tooltipContainer .tooltip.right .tooltip-arrow::after {
  left: -45px;
  top: -38px;
}
.tooltipContainer .tooltip.bottom {
  margin-top: 40px;
}
.tooltipContainer .tooltip.bottom .tooltip-arrow {
  left: 42%;
}
.tooltipContainer .tooltip.bottom .tooltip-arrow::after {
  left: -40px;
  top: -59px;
}
.tooltipContainer .tooltip.bottom .tooltip-inner {
  margin-left: 36px;
  width: 200px;
}
.tooltipContainer .tooltip.bottomGentooltip {
  margin-left: 36px;
  margin-top: -31px !important;
}
.exploreMenu .exploreMenuItem {
  cursor: pointer;
  padding-bottom: 10px;
  padding-left: 20px;
  padding-top: 10px;
  width: 400px;
}
.exploreMenu .exploreMenuItem li {
  color: #000;
  cursor: pointer;
}
.exploreMenu .exploreMenuItem .dropdown-header {
  padding-left: 20px;
}
.exploreMenu .exploreMenuItem :hover {
  background-color: #f2f2f2;
}
.exploreMenu hr {
  margin-bottom: 7px;
  margin-top: 0;
}
.gettingStarted {
  position: absolute;
  right: 15px;
  bottom: 130px;
  -webkit-transition: all 1s ease;
  -moz-transition: all 1s ease;
  -o-transition: all 1s ease;
  -ms-transition: all 1s ease;
  transition: all 1s ease;
  width: calc(100% - 80%);
}
.gettingStarted.ng-hide {
  width: 0;
  height: 0;
}
.gettingStarted a:hover,
.gettingStarted a:focus {
  text-decoration: underline;
}
.gettingStarted .wraplist {
  width: 100%;
}
.gettingStarted md-bottom-sheet.md-list {
  border: 1px solid #d8d8d8;
  padding: 0;
  -webkit-transition: all 1s linear;
  -moz-transition: all 1s linear;
  -o-transition: all 1s linear;
  -ms-transition: all 1s linear;
  transition: all 1s linear;
}
.gettingStarted md-bottom-sheet.md-list .md-subheader {
  border-bottom: 1px solid #d8d8d8;
  line-height: 20px;
}
.gettingStarted md-bottom-sheet.md-list .md-subheader .md-subheader-inner {
  padding: 16px 15px;
}
.gettingStarted md-bottom-sheet.md-list .md-subheader .md-subheader-inner .md-subheader-content {
  -webkit-box-align: center;
  -moz-box-align: center;
  -o-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-orient: horizontal;
  -moz-box-orient: horizontal;
  -o-box-orient: horizontal;
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  flex-direction: row;
}
.gettingStarted md-bottom-sheet.md-list md-list-item {
  padding-left: 15px;
  padding-right: 15px;
}
.gettingStarted md-bottom-sheet.md-list md-list-item .material-icons {
  font-size: 14px;
  margin-right: 4px;
  margin-top: 0;
  vertical-align: middle;
}
.gettingStarted md-bottom-sheet.md-list md-list-item .md-list-item-content:hover,
.gettingStarted md-bottom-sheet.md-list md-list-item .material-icons:hover {
  text-decoration: underline;
}
.gettingStarted md-bottom-sheet.md-list md-list-item.disabled {
  cursor: not-allowed;
  pointer-events: none;
}
.gettingStarted md-bottom-sheet.md-list md-list-item.disabled .md-list-item-content,
.gettingStarted md-bottom-sheet.md-list md-list-item.disabled .material-icons {
  color: #888 !important;
  cursor: not-allowed;
}
.gettingStarted md-bottom-sheet.md-list md-list-item.disabled > div {
  cursor: not-allowed;
  pointer-events: none;
}
.gettingStarted md-bottom-sheet.md-list md-list-item.completed .md-list-item-content {
  color: #444 !important;
}
.gettingStarted md-bottom-sheet.md-list md-list-item.completed .material-icons {
  color: #008000 !important;
}
.gettingStarted md-bottom-sheet.md-list md-list-item:last-child {
  border-bottom: none;
}
.gettingStarted md-icon {
  min-height: 0;
  min-width: 0;
  width: 14px;
  height: 14px;
}
.gettingStartedMinimized {
  position: absolute;
  right: 50px;
  bottom: 75px;
  opacity: 1;
  -ms-filter: none;
  filter: none;
  width: 25px;
  height: 25px;
  -webkit-transition: all 1s linear;
  -moz-transition: all 1s linear;
  -o-transition: all 1s linear;
  -ms-transition: all 1s linear;
  transition: all 1s linear;
}
.gettingStartedMinimized.ng-hide {
  opacity: 0;
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  filter: alpha(opacity=0);
}
.noOverflow {
  overflow: hidden;
}
#sgTechPreviewTT {
  vertical-align: baseline;
}
.sg-copy-icon {
  margin-top: 18px;
}
.sg-gateways-column {
  position: absolute;
  top: 100px;
  bottom: 0;
  right: 0;
  left: 0;
  background-color: #fff;
  border-color: #e5e5e5;
  border-style: solid;
  border-width: 0 1px 0 0;
  display: inline-block;
  margin-left: 60px;
  margin-top: -25px;
  min-height: calc(100vh - 170px);
  overflow: auto;
  vertical-align: top;
  width: 280px;
}
.sg-details-page {
  background-color: #fff;
  display: inline-block;
  margin-left: 280px;
  min-height: calc(100vh - 170px);
  vertical-align: top;
  width: calc(100% - 280px);
}
.sg-hint {
  cursor: pointer;
  position: relative;
  z-index: 2;
}
.sg-hint .sg-hint-text {
  position: absolute;
  top: 20px;
  right: 20px;
  background-color: #f2f2f2;
  border-radius: 3px;
  -webkit-box-shadow: 5px 5px 10px 0 #d8d8d8;
  box-shadow: 5px 5px 10px 0 #d8d8d8;
  color: #000;
  font-size: 15px;
  line-height: 1.2;
  min-height: 100px;
  padding: 25px;
  width: calc(100% - 500px);
}
.sg-hint .sg-hint-text:after {
  position: absolute;
  right: 90px;
  bottom: 100px;
  border-bottom: 15px solid #f2f2f2;
  border-left: 15px solid transparent;
  border-right: 15px solid transparent;
  content: ' ';
  width: 0;
  height: 0;
}
.sg-hint p {
  margin-top: 6px;
}
.sg-hint .sg-hint-subtext {
  font-size: 14px;
}
.sg-step-section {
  overflow: auto;
  padding: 20px 40px;
}
ol.sg-steps {
  list-style-type: decimal;
  width: 100%;
}
ol.sg-steps li {
  color: #4b68fa;
  float: left;
  font-size: x-large;
  padding: 2px 0;
  width: 33.33%;
}
ol.sg-steps li span {
  color: #000;
  display: block;
  font-size: medium;
  width: 90%;
  word-wrap: break-word;
}
.sg-docker-command-layout {
  display: block;
  padding-bottom: 20px;
}
.sg-docker-install-command {
  width: 90%;
}
.sg-docker-update-command {
  width: 40%;
}
.sg-installer-table {
  width: 80%;
}
.sg-installer-platform-column {
  width: 30%;
}
.sg-installer-download-column {
  width: 30%;
}
.sg-installer-md5-column {
  width: 20%;
}
.sg-installer-size-column {
  width: 10%;
}
.sg-publish-api-column {
  width: 30%;
}
.sg-publish-url-column {
  width: 40%;
}
.sg-publish-securegateway-column {
  width: 30%;
}
.sg-publish-securegateway-column select {
  width: 80%;
}
.gettingStarted.secureGatewayTour {
  width: calc(100% - 78%);
}
.gettingStarted.secureGatewayTour md-list-item {
  min-height: 0;
}
.gettingStarted.secureGatewayTour md-list-item:before {
  min-height: 0;
}
.gettingStarted.secureGatewayTour .helpLink {
  margin: 0;
  padding: 0;
}
.gettingStarted.secureGatewayTour .helpLink .material-icons {
  font-size: 18px;
  margin: 0;
  text-align: right;
}
.gettingStarted.secureGatewayTour .wraplist {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
}
.gettingStarted.secureGatewayTour .wraplist .number {
  text-align: center;
  width: 5%;
}
.gettingStarted.secureGatewayTour .wraplist .number.currentStep {
  border-bottom: #000 solid 2px;
}
.gettingStarted.secureGatewayTour .wraplist .step {
  width: 90%;
}
.gettingStarted.secureGatewayTour .wraplist .md-list-item-content {
  color: inherit !important;
  width: 90%;
}
.gettingStarted.secureGatewayTour .wraplist .md-list-item-content div {
  float: left;
}
.gettingStarted.secureGatewayTour .wraplist .helpLink {
  width: 10%;
}
.gettingStarted.secureGatewayTour md-bottom-sheet.md-list md-list-item {
  height: auto;
  padding: 10px;
}
.gettingStarted.secureGatewayTour .sgTourDiagram img {
  display: block;
  margin-left: auto;
  margin-right: auto;
  width: 95%;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFwaW0vY3NzL2N1c3RvbS1zdHlsZXMuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9ib3JkZXIuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9mbGV4LnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvdmVuZG9yLnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvb3ZlcmZsb3cuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9zaXplLnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvcG9zaXRpb25zLnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvc3R5bHVzL2xpYi9mdW5jdGlvbnMvaW5kZXguc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9ib3JkZXItcmFkaXVzLnN0eWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFVQTtFQ0RJLFFBQVEsa0JBQVI7O0FESUY7QUFDQTtFRVFFLFNBQVMsTUFBVDtFRk5BLGNBQWMsTUFBZDtFQUNBLE9BQU8sS0FBUDs7QUFFRjtFRUdFLFNBQVMsTUFBVDtFRkRBLFlBQVksTUFBWjtFQUNBLFlBQVksT0FBWjtFQUNBLFlBQVksT0FBWjtFQUNBLFVBQVUsU0FBVjtFQUNBLGNBQWMsTUFBZDtFQUNBLE9BQU8sS0FBUDs7QUFHRTtBQUNBO0VBQ0Usa0JBQWtCLFFBQWxCOztBQUdKO0FBQ0E7RUFDRSxjQUFjLFFBQWQ7RUFDQSxhQUFhLEVBQWI7RUFDQSxjQUFjLEVBQWQ7RUdLWSxvQkFBRyxrQkFBSDtFQVJILFlBQUcsa0JBQUg7RURiWCxTQUFTLE1BQVQ7RUZtQkUsY0FBYyxNQUFkO0VBQ0EsT0FBTyxLQUFQOztBQUVBOztFQUNFLGtCQUFrQixRQUFsQjs7QUFHRjtBQUNBO0VBQ0Usa0JBQWtCLFFBQWxCO0VBQ0EsY0FBYyxRQUFkO0VHUlUsb0JBQUcsa0JBQUg7RUFSSCxZQUFHLGtCQUFIO0VD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LFdBQVcsS0FBWDtFQUNBLFFBQVEsRUFBUjtFQUNBLFlBQVksTUFBWjs7QUFFSjtFSytCWSxTRXZIa0IsWUZ1SGxCO0VBQUEsU0V2SGtCLFNGdUhsQjtFQUFBLFNFdkhrQixhRnVIbEI7RUhsWE4sU0FBUyxZQUFUO0VBQ0EsU0FBUyxJQUFUO0VBS0YsU0FBUyxLQUFUOztBRmdWRjtFQUNFLFlBQVksT0FBWjtFQUNBLE9BQU8sR0FBUDs7QUFFRjtFQUNFLGVBQWUsZUFBZjs7QUFFRjtFQUNFLE9BQU8sSUFBUDs7QUFFRjtFQUNFLE9BQU8sbUJBQVA7RUFDQSxPQUFPLElBQVA7O0FBRUE7RUFDRSxPQUFPLEtBQVA7O0FBRUo7RUFDRSxPQUFPLElBQVA7O0FBRUo7RUFDRSxRQUFRLEtBQVI7RUFDQSxTQUFTLEtBQVQ7O0FBRUY7RUV0V0UsU0FBUyxNQUFUO0VGd1dBLGFBQWEsS0FBYjtFQUNBLGNBQWMsS0FBZDtFQUNBLE9BQU8sSUFBUCIsImZpbGUiOiJhcGltL2Nzcy9jdXN0b20tc3R5bGVzLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioge0NPUFlSSUdIVC1UT1B9ICoqKlxuKiBMaWNlbnNlZCBNYXRlcmlhbHMgLSBQcm9wZXJ0eSBvZiBJQk1cbiogNTcyNS1aMjIsIDU3MjUtWjYzLCA1NzI1LVUzMywgNTcyNS1aNjNcbipcbiogKEMpIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24gMjAxN1xuKlxuKiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuKiBVUyBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlXG4qIHJlc3RyaWN0ZWQgYnkgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIElCTSBDb3JwLlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB7Q09QWVJJR0hULUVORH0gKiovXG4uYXBpbSB0YWJsZS5zY3JvbGxhYmxlVGFibGVcbiAgYm9yZGVyOiBzb2xpZCAxcHggI2UwZTBlMFxuXG4gIHRoZWFkXG4gIC50aGVhZFxuICAgIGRpc3BsYXk6IHRhYmxlXG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZFxuICAgIHdpZHRoOiAxMDAlXG5cbiAgdGJvZHlcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIG1heC1oZWlnaHQ6IDEyMHB4XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgdGFibGUtbGF5b3V0OiBmaXhlZFxuICAgIHdpZHRoOiAxMDAlXG5cbiAgICB0clxuICAgICAgJi5zZWxlY3RlZFxuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUNFRkZGXG5cbiAgdHJcbiAgICAmXG4gICAgJjpob3ZlclxuICAgICAgYm9yZGVyLWNvbG9yOiAjZTBlMGUwXG4gICAgICBib3JkZXItbGVmdDogMFxuICAgICAgYm9yZGVyLXJpZ2h0OiAwXG4gICAgICBib3gtc2hhZG93OiAuMCAuMCByZ2JhKDAsIDAsIDAsIDApXG4gICAgICBkaXNwbGF5OiB0YWJsZVxuICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZFxuICAgICAgd2lkdGg6IDEwMCVcblxuICAgICAgdGRcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdFxuXG4gICAgdGRcbiAgICAgICZcbiAgICAgICY6aG92ZXJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdFxuICAgICAgICBib3JkZXItY29sb3I6ICNlMGUwZTBcbiAgICAgICAgYm94LXNoYWRvdzogLjAgLjAgcmdiYSgwLCAwLCAwLCAwKVxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuXG5cbiAgICB0aFxuICAgICAgcGFkZGluZzogNXB4IDEwcHhcblxuLnRvb2x0aXBDb250YWluZXIgLnRvb2x0aXBcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gIGZvbnQtc2l6ZTogMTRweFxuICB3aWR0aDogMzAwcHhcblxuICAvLyBjb21tb24gYnVsbHNleWUgc3R5bGVzXG4gIC50b29sdGlwLWFycm93OjphZnRlclxuICAgIGNvbnRlbnQ6ICcgJ1xuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgZm9udC1zaXplOiB4eC1sYXJnZVxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIHNpemU6IDc1cHhcblxuICAudG9vbHRpcC1pbm5lclxuICAgIG1heC13aWR0aDogbm9uZVxuICAgIHRleHQtYWxpZ246IGluaGVyaXRcblxuICAvLyBsZWZ0LXJpZ2h0IHNwZWNpZmljIHN0eWxlcyBmb3IgYnVsbHNleWVcbiAgJi5sZWZ0IC50b29sdGlwLWFycm93OjphZnRlclxuICAgIGxlZnQ6IC0zMHB4XG4gICAgdG9wOiAtMzdweFxuXG4gICYucmlnaHRcbiAgICBtYXJnaW4tbGVmdDogMjBweFxuXG4gICAgLnRvb2x0aXAtYXJyb3c6OmFmdGVyXG4gICAgICBsZWZ0OiAtNDVweFxuICAgICAgdG9wOiAtMzhweFxuXG4gICYuYm90dG9tXG4gICAgbWFyZ2luLXRvcDogNDBweFxuXG4gICAgLnRvb2x0aXAtYXJyb3dcbiAgICAgIGxlZnQ6IDQyJVxuXG4gICAgICAmOjphZnRlclxuICAgICAgICBsZWZ0OiAtNDBweFxuICAgICAgICB0b3A6IC01OXB4XG5cbiAgICAudG9vbHRpcC1pbm5lclxuICAgICAgbWFyZ2luLWxlZnQ6IDM2cHhcbiAgICAgIHdpZHRoOiAyMDBweFxuXG4gICYuYm90dG9tR2VudG9vbHRpcFxuICAgIG1hcmdpbi1sZWZ0OiAzNnB4XG4gICAgbWFyZ2luLXRvcDogLTMxcHggIWltcG9ydGFudCAvLyBAc3R5bGludCBpZ25vcmUgaW1wb3J0YW50XG5cbi5leHBsb3JlTWVudVxuICAuZXhwbG9yZU1lbnVJdGVtXG4gICAgY3Vyc29yOiBwb2ludGVyXG4gICAgcGFkZGluZy1ib3R0b206IDEwcHhcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHhcbiAgICBwYWRkaW5nLXRvcDogMTBweFxuICAgIHdpZHRoOiA0MDBweFxuXG4gICAgbGlcbiAgICAgIGNvbG9yOiBibGFja1xuICAgICAgY3Vyc29yOiBwb2ludGVyXG5cbiAgICAuZHJvcGRvd24taGVhZGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDIwcHhcblxuICAgIDpob3ZlclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMlxuICBoclxuICAgIG1hcmdpbi1ib3R0b206IDdweFxuICAgIG1hcmdpbi10b3A6IDBcblxuLy8gR2V0dGluZyBzdGFydGVkIHBhbmVsXG4uZ2V0dGluZ1N0YXJ0ZWRcbiAgYWJzb2x1dGU6IHJpZ2h0IDE1cHggYm90dG9tIDEzMHB4XG4gIHRyYW5zaXRpb246IGFsbCAxcyBlYXNlXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA4MCUpXG5cbiAgJi5uZy1oaWRlXG4gICAgc2l6ZTogMFxuXG4gIGFcbiAgICAmOmhvdmVyXG4gICAgJjpmb2N1c1xuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcblxuICAud3JhcGxpc3RcbiAgICB3aWR0aDogMTAwJVxuXG4gIG1kLWJvdHRvbS1zaGVldC5tZC1saXN0XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2Q4ZDhkOFxuICAgIHBhZGRpbmc6IDBcbiAgICB0cmFuc2l0aW9uOiBhbGwgMXMgbGluZWFyXG5cbiAgICAubWQtc3ViaGVhZGVyXG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2Q4ZDhkOFxuICAgICAgbGluZS1oZWlnaHQ6IDIwcHhcblxuICAgICAgLm1kLXN1YmhlYWRlci1pbm5lclxuICAgICAgICBwYWRkaW5nOiAxNnB4IDE1cHhcblxuICAgICAgICAubWQtc3ViaGVhZGVyLWNvbnRlbnRcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3dcblxuICAgIG1kLWxpc3QtaXRlbVxuICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4XG5cbiAgICAgIC5tYXRlcmlhbC1pY29uc1xuICAgICAgICBmb250LXNpemU6IDE0cHhcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA0cHhcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG5cbiAgICAgIC5tZC1saXN0LWl0ZW0tY29udGVudFxuICAgICAgLm1hdGVyaWFsLWljb25zXG4gICAgICAgICY6aG92ZXJcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVxuXG4gICAgICAmLmRpc2FibGVkXG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWRcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcblxuICAgICAgICAubWQtbGlzdC1pdGVtLWNvbnRlbnRcbiAgICAgICAgLm1hdGVyaWFsLWljb25zXG4gICAgICAgICAgY29sb3I6ICM4ODggIWltcG9ydGFudCAvLyBAc3R5bGludCBpZ25vcmUgaW1wb3J0YW50XG4gICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZFxuXG4gICAgICAgID4gZGl2XG4gICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZFxuICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG5cbiAgICAgICYuY29tcGxldGVkXG4gICAgICAgIC8vIGJhY2tncm91bmQtY29sb3I6ICNFQ0VGRkZcblxuICAgICAgICAubWQtbGlzdC1pdGVtLWNvbnRlbnRcbiAgICAgICAgICBjb2xvcjogIzQ0NCAhaW1wb3J0YW50IC8vIEBzdHlsaW50IGlnbm9yZSBpbXBvcnRhbnRcblxuICAgICAgICAubWF0ZXJpYWwtaWNvbnNcbiAgICAgICAgICBjb2xvcjogZ3JlZW4gIWltcG9ydGFudCAvLyBAc3R5bGludCBpZ25vcmUgaW1wb3J0YW50XG5cbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBib3JkZXItYm90dG9tOiBub25lXG5cbiAgbWQtaWNvblxuICAgIG1pbi1oZWlnaHQ6IDBcbiAgICBtaW4td2lkdGg6IDBcbiAgICBzaXplOiAxNHB4XG5cbi5nZXR0aW5nU3RhcnRlZE1pbmltaXplZFxuICBhYnNvbHV0ZTogcmlnaHQgNTBweCBib3R0b20gNzVweFxuICBvcGFjaXR5OiAxXG4gIHNpemU6IDI1cHhcbiAgdHJhbnNpdGlvbjogYWxsIDFzIGxpbmVhclxuXG4uZ2V0dGluZ1N0YXJ0ZWRNaW5pbWl6ZWQubmctaGlkZVxuICBvcGFjaXR5OiAwXG5cbi5ub092ZXJmbG93XG4gIG92ZXJmbG93OiBoaWRkZW5cblxuI3NnVGVjaFByZXZpZXdUVFxuICB2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZVxuXG4uc2ctY29weS1pY29uXG4gIG1hcmdpbi10b3A6IDE4cHhcblxuLnNnLWdhdGV3YXlzLWNvbHVtblxuICBhYnNvbHV0ZTogdG9wIDEwMHB4IGJvdHRvbSAwIHJpZ2h0IDAgbGVmdCAwXG4gIGJhY2tncm91bmQtY29sb3I6IHdoaXRlXG4gIGJvcmRlci1jb2xvcjogI2U1ZTVlNVxuICBib3JkZXItc3R5bGU6IHNvbGlkXG4gIGJvcmRlci13aWR0aDogMCAxcHggMCAwXG4gIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICBtYXJnaW4tbGVmdDogNjBweFxuICBtYXJnaW4tdG9wOiAtMjVweFxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTcwcHgpXG4gIG92ZXJmbG93OiBhdXRvXG4gIHZlcnRpY2FsLWFsaWduOiB0b3BcbiAgd2lkdGg6IDI4MHB4XG5cbi5zZy1kZXRhaWxzLXBhZ2VcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGVcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gIG1hcmdpbi1sZWZ0OiAyODBweFxuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTcwcHgpXG4gIHZlcnRpY2FsLWFsaWduOiB0b3BcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDI4MHB4KVxuXG4uc2ctaGludFxuICBjdXJzb3I6IHBvaW50ZXJcbiAgcG9zaXRpb246IHJlbGF0aXZlXG4gIHotaW5kZXg6IDJcblxuICAuc2ctaGludC10ZXh0XG4gICAgYWJzb2x1dGU6IHRvcCAyMHB4IHJpZ2h0IDIwcHhcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyXG4gICAgYm9yZGVyLXJhZGl1czogM3B4XG4gICAgYm94LXNoYWRvdzogNXB4IDVweCAxMHB4IDAgI2Q4ZDhkOFxuICAgIGNvbG9yOiAjMDAwXG4gICAgZm9udC1zaXplOiAxNXB4XG4gICAgbGluZS1oZWlnaHQ6IDEuMlxuICAgIG1pbi1oZWlnaHQ6IDEwMHB4XG4gICAgcGFkZGluZzogMjVweFxuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1MDBweClcblxuICAuc2ctaGludC10ZXh0OmFmdGVyXG4gICAgYWJzb2x1dGU6IHJpZ2h0IDkwcHggYm90dG9tIDEwMHB4XG4gICAgYm9yZGVyLWJvdHRvbTogMTVweCBzb2xpZCAjZjJmMmYyXG4gICAgYm9yZGVyLWxlZnQ6IDE1cHggc29saWQgdHJhbnNwYXJlbnRcbiAgICBib3JkZXItcmlnaHQ6IDE1cHggc29saWQgdHJhbnNwYXJlbnRcbiAgICBjb250ZW50OiAnICdcbiAgICBzaXplOiAwXG5cbiAgcFxuICAgIG1hcmdpbi10b3A6IDZweFxuXG4gIC5zZy1oaW50LXN1YnRleHRcbiAgICBmb250LXNpemU6IDE0cHhcblxuLnNnLXN0ZXAtc2VjdGlvblxuICBvdmVyZmxvdzogYXV0b1xuICBwYWRkaW5nOiAyMHB4IDQwcHhcblxub2wuc2ctc3RlcHNcbiAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsXG4gIHdpZHRoOiAxMDAlXG5cbiAgbGlcbiAgICBjb2xvcjogIzRiNjhmYVxuICAgIGZsb2F0OiBsZWZ0XG4gICAgZm9udC1zaXplOiB4LWxhcmdlXG4gICAgcGFkZGluZzogMnB4IDBcbiAgICB3aWR0aDogMzMuMzMlXG5cbiAgICBzcGFuXG4gICAgICBjb2xvcjogYmxhY2tcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBmb250LXNpemU6IG1lZGl1bVxuICAgICAgd2lkdGg6IDkwJVxuICAgICAgd29yZC13cmFwOiBicmVhay13b3JkXG5cbi5zZy1kb2NrZXItY29tbWFuZC1sYXlvdXRcbiAgZGlzcGxheTogYmxvY2tcbiAgcGFkZGluZy1ib3R0b206IDIwcHhcblxuLnNnLWRvY2tlci1pbnN0YWxsLWNvbW1hbmRcbiAgd2lkdGg6IDkwJVxuXG4uc2ctZG9ja2VyLXVwZGF0ZS1jb21tYW5kXG4gIHdpZHRoOiA0MCVcblxuLnNnLWluc3RhbGxlci10YWJsZVxuICB3aWR0aDogODAlXG5cbi5zZy1pbnN0YWxsZXItcGxhdGZvcm0tY29sdW1uXG4gIHdpZHRoOiAzMCVcblxuLnNnLWluc3RhbGxlci1kb3dubG9hZC1jb2x1bW5cbiAgd2lkdGg6IDMwJVxuXG4uc2ctaW5zdGFsbGVyLW1kNS1jb2x1bW5cbiAgd2lkdGg6IDIwJVxuXG4uc2ctaW5zdGFsbGVyLXNpemUtY29sdW1uXG4gIHdpZHRoOiAxMCVcblxuLnNnLXB1Ymxpc2gtYXBpLWNvbHVtblxuICB3aWR0aDogMzAlXG5cbi5zZy1wdWJsaXNoLXVybC1jb2x1bW5cbiAgd2lkdGg6IDQwJVxuXG4uc2ctcHVibGlzaC1zZWN1cmVnYXRld2F5LWNvbHVtblxuICB3aWR0aDogMzAlXG5cbiAgc2VsZWN0XG4gICAgd2lkdGg6IDgwJVxuXG4uZ2V0dGluZ1N0YXJ0ZWQuc2VjdXJlR2F0ZXdheVRvdXJcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDc4JSlcblxuICBtZC1saXN0LWl0ZW1cbiAgICBtaW4taGVpZ2h0OiAwXG5cbiAgICAmOmJlZm9yZVxuICAgICAgbWluLWhlaWdodDogMFxuXG4gIC5oZWxwTGlua1xuICAgIG1hcmdpbjogMFxuICAgIHBhZGRpbmc6IDBcblxuICAgIC5tYXRlcmlhbC1pY29uc1xuICAgICAgZm9udC1zaXplOiAxOHB4XG4gICAgICBtYXJnaW46IDBcbiAgICAgIHRleHQtYWxpZ246IHJpZ2h0XG5cbiAgLndyYXBsaXN0XG4gICAgZGlzcGxheTogZmxleFxuXG4gICAgLm51bWJlclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyXG4gICAgICB3aWR0aDogNSVcblxuICAgIC5udW1iZXIuY3VycmVudFN0ZXBcbiAgICAgIGJvcmRlci1ib3R0b206IGJsYWNrIHNvbGlkIDJweFxuXG4gICAgLnN0ZXBcbiAgICAgIHdpZHRoOiA5MCVcblxuICAgIC5tZC1saXN0LWl0ZW0tY29udGVudFxuICAgICAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudCAvLyBAc3R5bGludCBpZ25vcmUgaW1wb3J0YW50XG4gICAgICB3aWR0aDogOTAlXG5cbiAgICAgIGRpdlxuICAgICAgICBmbG9hdDogbGVmdFxuXG4gICAgLmhlbHBMaW5rXG4gICAgICB3aWR0aDogMTAlXG5cbiAgbWQtYm90dG9tLXNoZWV0Lm1kLWxpc3QgbWQtbGlzdC1pdGVtXG4gICAgaGVpZ2h0OiBhdXRvXG4gICAgcGFkZGluZzogMTBweFxuXG4gIC5zZ1RvdXJEaWFncmFtIGltZ1xuICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG9cbiAgICB3aWR0aDogOTUlXG4iLCIvKlxuICogYm9yZGVyOiA8Y29sb3I+XG4gKiBib3JkZXI6IC4uLlxuICovXG5cbmJvcmRlcihjb2xvciwgYXJncy4uLilcbiAgaWYgY29sb3IgaXMgYSAnY29sb3InXG4gICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IgYXJnc1xuICBlbHNlXG4gICAgYm9yZGVyOiBhcmd1bWVudHNcbiIsIi8qXG4gKiBWZW5kb3IgXCJkaXNwbGF5OiBmbGV4XCIgc3VwcG9ydCB3aXRoIGZhbGxiYWNrIHRvIG9ic29sZXRlIHZlcnNpb25zLlxuICovXG5cbmZsZXgtdmVyc2lvbiA/PSBib3ggZmxleFxuXG4vL1xuLy8gMS4gRGlzcGxheSB2YWx1ZXNcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4LWNvbnRhaW5lcnNcbi8vXG5kaXNwbGF5KHR5cGUsIGFyZ3MuLi4pXG4gIGlmIGZsZXggPT0gdHlwZSB8fCBpbmxpbmUtZmxleCA9PSB0eXBlXG4gICAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgICAgaWYgZmxleCA9PSB0eXBlXG4gICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94IGFyZ3NcbiAgICAgICAgZGlzcGxheTogdmVuZG9yLXZhbHVlKGJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgICAgZWxzZVxuICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggYXJnc1xuICAgICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoaW5saW5lLWJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpIC8vIG92ZXJ3cml0ZXMgb2xkIHdlYmtpdFxuICBlbHNlXG4gICAgZGlzcGxheTogYXJndW1lbnRzXG5cbi8qXG4gKiBOZXcgc3ludGF4IGZvciBicm93c2VycyBsaWtlIEdvb2dsZSBDaHJvbWUuXG4gKiBQbHVzIGEgdHJhbnNsYXRpb24gdG8gdGhlIG9sZCBzeW50YXgsIGlmIHBvc3NpYmxlLlxuICovXG5cblxuLy9cbi8vIDUuIE9yZGVyaW5nIGFuZCBPcmllbnRhdGlvblxuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI29yZGVyaW5nLWFuZC1vcmllbnRhdGlvblxuLy9cbi1mbGV4LW9ic29sZXRlLWRpcmVjdGlvbihkaXJlY3Rpb24pXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICBpZiByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb24gfHwgY29sdW1uLXJldmVyc2UgPT0gZGlyZWN0aW9uXG4gICAgICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCByZXZlcnNlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gICAgaWYgcm93ID09IGRpcmVjdGlvbiB8fCByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb25cbiAgICAgIHZlbmRvcignYm94LW9yaWVudCcsIGhvcml6b250YWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG4gICAgZWxzZSBpZiBjb2x1bW4gPT0gZGlyZWN0aW9uIHx8IGNvbHVtbi1yZXZlcnNlID09IGRpcmVjdGlvblxuICAgICAgdmVuZG9yKCdib3gtb3JpZW50JywgdmVydGljYWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbi1mbGV4LW9ic29sZXRlLXdyYXAodmFsdWUpXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICAvLyBXQVJOOiB3cmFwLXJldmVyc2UgZG9lcyBub3QgaGF2ZSBhIGJveCBlcXVpdmFsZW50LiBUaGlzIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBtYW5uZXJzXG4gICAgLy8gICAgb24gYm94IHZzLiBmbGV4IHZhbHVlcy5cbiAgICBpZiAnd3JhcCcgPT0gdmFsdWUgfHwgd3JhcC1yZXZlcnNlID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIG11bHRpcGxlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuICAgIGVsc2UgaWYgbm93cmFwID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIHNpbmdsZSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuZmxleC1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC13cmFwKHZhbHVlKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS13cmFwKHZhbHVlKVxuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXdyYXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC1mbG93KClcbiAgLy8gb2Jzb2xldGVcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1swXSlcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1sxXSlcbiAgLWZsZXgtb2Jzb2xldGUtd3JhcChhcmd1bWVudHNbMF0pXG4gIC1mbGV4LW9ic29sZXRlLXdyYXAoYXJndW1lbnRzWzFdKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1mbG93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxub3JkZXIoKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtb3JkaW5hbC1ncm91cCcsIGFyZ3VtZW50cywgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IG1zKVxuICAgIHZlbmRvcignb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuXG4vL1xuLy8gNy4gRmxleGliaWxpdHlcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4aWJpbGl0eVxuLy9cbmZsZXgtZ3Jvdyhncm93dGgpXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1mbGV4JywgZ3Jvd3RoKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1ncm93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgtYmFzaXMoKVxuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1iYXNpcycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4LXNocmluaygpXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXNocmluaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4KGdyb3d0aClcblxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgc2hyaW5rID0gMVxuXG4gICAgaWYgbm9uZSA9PSBncm93dGggfHwgaW5pdGlhbCA9PSBncm93dGhcbiAgICAgIC8vIFdlbGwga25vd24gdmFsdWVzXG4gICAgICBzaHJpbmsgPSAwIGlmIG5vbmUgPT0gZ3Jvd3RoXG4gICAgICBncm93dGggPSAwXG4gICAgZWxzZSBpZiBpcy13aWR0aChncm93dGgpID09IHRydWVcbiAgICAgIC8vIEJhc2lzIGlzIGRlZmluZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlclxuICAgICAgZ3Jvd3RoID0gYXJndW1lbnRzWzFdIHx8IDBcbiAgICAgIHNocmluayA9IGFyZ3VtZW50c1syXSBpZiAzIDw9IGxlbmd0aChhcmd1bWVudHMpXG4gICAgZWxzZSBpZiBhcmd1bWVudHNbMV0gJiYgaXMtd2lkdGgoYXJndW1lbnRzWzFdKSA9PSBmYWxzZVxuICAgICAgLy8gR3Jvd3RoIGlzIGZpcnN0IGFuZCBzaHJpbmsgaXMgc2Vjb25kXG4gICAgICBzaHJpbmsgPSBhcmd1bWVudHNbMV1cblxuICAgIC8vIFNpbmNlIHdlIGNhbid0IG1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZ3Jvd2luZyBhbmQgc2hyaW5raW5nIGluIHRoZSBib3ggbW9kZWwsIHRha2VcbiAgICAvLyB0aGUgb25lIHRoYXQgcHJvdmlkZXMgdGhlIG1vc3QgZmxleGliaWxpdHkuXG4gICAgdmVuZG9yKCdib3gtZmxleCcsIG1heChncm93dGgsIHNocmluayksIGlnbm9yZTogbXMpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxuLy8gY29udmVydHMgdGhlIGp1c3RpZmljYXRpb24gYWxpZ25tZW50XG4tY29udmVydC1qdXN0aWZ5KGFsaWduKVxuICBpZiBmbGV4LXN0YXJ0ID09IGFsaWduXG4gICAgcmV0dXJuIHN0YXJ0XG4gIGVsc2UgaWYgZmxleC1lbmQgPT0gYWxpZ25cbiAgICByZXR1cm4gZW5kXG4gIGVsc2UgaWYgc3BhY2UtYXJvdW5kID09IGFsaWduXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGVcbiAgZWxzZSBpZiBzcGFjZS1iZXR3ZWVuID09IGFsaWduXG4gICAgcmV0dXJuIGp1c3RpZnlcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG4vL1xuLy8gOC4gQWxpZ25tZW50XG4vLyAgICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jYWxpZ25tZW50XG4vL1xuanVzdGlmeS1jb250ZW50KGFsaWduKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignanVzdGlmeS1jb250ZW50JywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuYWxpZ24tY29udGVudChhbGlnbilcbiAgLy8gV0FSTjogT2Jzb2xldGUgc3BlYyBkb2VzIG5vdCBhbGxvdyBmb3IgYWRqdXN0bWVudCBoZXJlXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWxpbmUtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWNvbnRlbnQnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vLyBjb252ZXJ0cyBhbGlnbm1lbnQgZnJvbSAnZmxleCcgdG8gbm9ybWFsIHZhbHVlXG4tY29udmVydC1hbGlnbm1lbnQoYWxpZ24pXG4gIGlmIGZsZXgtc3RhcnQgPT0gYWxpZ25cbiAgICByZXR1cm4gc3RhcnRcbiAgZWxzZSBpZiBmbGV4LWVuZCA9PSBhbGlnblxuICAgIHJldHVybiBlbmRcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG5hbGlnbi1pdGVtcyhhbGlnbilcbiAgLy8gb2Jzb2xldGVcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignYm94LWFsaWduJywgLWNvbnZlcnQtYWxpZ25tZW50KGFsaWduKSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtYWxpZ24nLCAtY29udmVydC1hbGlnbm1lbnQoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWl0ZW1zJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmFsaWduLXNlbGYoYWxpZ24pXG4gIC8vIFdBUk46IE9ic29sZXRlIHNwZWMgZG9lcyBub3QgYWxsb3cgZm9yIG92ZXJyaWRpbmcgYWxpZ25tZW50IG9uIGluZGl2aWR1YWwgaXRlbXMuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdhbGlnbi1zZWxmJywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB2ZW5kb3IoJ2ZsZXgtaXRlbS1hbGlnbicsIC1jb252ZXJ0LWFsaWdubWVudChhbGlnbiksIG9ubHk6IG1zKVxuIiwidXNlKCcuLi9ub2Rlcy92ZW5kb3ItaGVscGVycy5qcycpXG5AaW1wb3J0ICdjb25maWcnXG5cbi8qXG4gKiBBbGlhcyBcIm5vd3JhcFwiIGFzIFwibm8td3JhcFwiLlxuICovXG5cbm5vLXdyYXAgPSB1bnF1b3RlKCdub3dyYXAnKVxuXG4vKlxuICogSGVscGVyIHRvIGZpbmQgb3V0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB3aWR0aFxuICovXG5cbmlzLXdpZHRoKHZhbClcbiAgaWYgYXV0byA9PSB2YWxcbiAgICByZXR1cm4gdHJ1ZVxuICBlbHNlIGlmIHZhbCAmJiAndW5pdCcgPT0gdHlwZSh2YWwpXG4gICAgLy8gU3R5bHVzIGRvZXMgbm90IHNob3J0IGNpcmN1aXQgc28gd2UgbmVlZCB0byBwZXJmb3JtIHRoaXMgYXMgYSBkaXN0aW5jdFxuICAgIC8vIG9wZXJhdGlvbiB0byBwcmV2ZW50IGVycm9yc1xuICAgIHJldHVybiAnJyAhPSB1bml0KHZhbClcbiAgcmV0dXJuIGZhbHNlXG5cbi8qXG4gKiBWZW5kb3Igc3VwcG9ydCBmb3IgdGhlIGdpdmVuIHByb3AgLyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyB0aGVcbiAqIG9ubHkgcHJlZml4ZXMgdG8gdXRpbGl6ZSwgb3IgdGhvc2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblxudmVuZG9yKHByb3AsIGFyZ3MsIG9ubHkgPSBudWxsLCBpZ25vcmUgPSBudWxsLCB2ZW5kb3ItcHJvcGVydHkgPSB0cnVlKVxuICBuZWVkX25vcm1hbGl6ZSA9ICF2ZW5kb3ItcHJvcGVydHkgb3IgcHJvcCBpbiAoJ3RyYW5zaXRpb24nICd0cmFuc2l0aW9uLXByb3BlcnR5JyAnYm9yZGVyLWltYWdlJyAnYm9yZGVyLWltYWdlLXNsaWNlJylcbiAgZm9yIHByZWZpeCBpbiB2ZW5kb3ItcHJlZml4ZXNcbiAgICB1bmxlc3MgKG9ubHkgYW5kICEocHJlZml4IGluIG9ubHkpKSBvciAoaWdub3JlIGFuZCBwcmVmaXggaW4gaWdub3JlKVxuICAgICAgaWYgb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpKVxuICAgICAgICBlbHNlXG4gICAgICAgICAge3Byb3B9OiBhcmdzXG4gICAgICBlbHNlXG4gICAgICAgIG5ld3Byb3AgPSBwcm9wXG4gICAgICAgIG5ld3Byb3AgPSAnLScgKyBwcmVmaXggKyAnLScgKyBwcm9wIGlmIHZlbmRvci1wcm9wZXJ0eVxuXG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge25ld3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpLHByZWZpeClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHtuZXdwcm9wfTogYXJnc1xuLypcbiAqIFZlbmRvcml6ZSB0aGUgZ2l2ZW4gdmFsdWUuXG4gKi9cblxudmVuZG9yLXZhbHVlKGFyZywgb25seSA9IG51bGwsIGlnbm9yZSA9IG51bGwpXG4gIHByb3AgPSBjdXJyZW50LXByb3BlcnR5WzBdXG4gIGZvciBwcmVmaXggaW4gdmVuZG9yLXByZWZpeGVzXG4gICAgdW5sZXNzIChvbmx5IGFuZCAhKHByZWZpeCBpbiBvbmx5KSkgb3IgKGlnbm9yZSBhbmQgcHJlZml4IGluIGlnbm9yZSkgb3Igb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICBhZGQtcHJvcGVydHkocHJvcCwgJy0lcy0lcycgJSAocHJlZml4IGFyZykpXG4gIGFyZ1xuXG4vKlxuICogVmVuZG9yIFwiYm94LXNoYWRvd1wiIHN1cHBvcnQuXG4gKi9cblxuYm94LXNoYWRvdygpXG4gIHZlbmRvcignYm94LXNoYWRvdycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidXNlci1zZWxlY3RcIiBzdXBwb3J0LlxuICovXG5cbnVzZXItc2VsZWN0KClcbiAgdmVuZG9yKCd1c2VyLXNlbGVjdCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWNvdW50KClcbiAgdmVuZG9yKCdjb2x1bW4tY291bnQnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZ2FwXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tZ2FwKClcbiAgdmVuZG9yKCdjb2x1bW4tZ2FwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLWNvbG9yXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS1jb2xvcigpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtY29sb3InLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtd2lkdGgoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLXdpZHRoJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLXN0eWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS1zdHlsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXdpZHRoKClcbiAgdmVuZG9yKCdjb2x1bW4td2lkdGgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tc3BhblwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXNwYW4oKVxuICB2ZW5kb3IoJ2NvbHVtbi1zcGFuJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZmlsbFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWZpbGwoKVxuICB2ZW5kb3IoJ2NvbHVtbi1maWxsJywgYXJndW1lbnRzLCBvbmx5OiBtb3opXG5cbi8qXG4gKiBMZWdhY3kgc3ludGF4IHN1cHBvcnQgZm9yIGJhY2tncm91bmQtY2xpcCBhbmQgYmFja2dyb3VuZC1vcmlnaW5cbiAqL1xuXG5sZWdhY3ktYmctdmFsdWVzKHByb3BlcnR5LCBhcmdzKVxuICBsZWdhY3lfYXJncyA9ICgpXG4gIGltcG9ydGFuY2UgPSB1bnF1b3RlKCcnKVxuICBmb3Igc3ViYXJncyBpbiBhcmdzXG4gICAgZm9yIGFyZyBpbiBzdWJhcmdzXG4gICAgICBpZiBhcmcgaW4gKGJvcmRlci1ib3ggcGFkZGluZy1ib3ggY29udGVudC1ib3gpXG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2JvcmRlcicpICBpZiBhcmcgPT0gYm9yZGVyLWJveFxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdwYWRkaW5nJykgaWYgYXJnID09IHBhZGRpbmctYm94XG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2NvbnRlbnQnKSBpZiBhcmcgPT0gY29udGVudC1ib3hcbiAgICAgIGlmIGFyZyAhPSAnIWltcG9ydGFudCdcbiAgICAgICAgcHVzaChsZWdhY3lfYXJncyxhcmcpXG4gICAgICBlbHNlXG4gICAgICAgIGltcG9ydGFuY2UgPSAhaW1wb3J0YW50XG4gIHZlbmRvcihwcm9wZXJ0eSwgdW5xdW90ZShqb2luKCcsICcsbGVnYWN5X2FyZ3MpKSBpbXBvcnRhbmNlLCBvbmx5OiBtb3ogd2Via2l0KVxuXG4vKlxuICogVmVuZG9yIFwiYmFja2dyb3VuZC1jbGlwXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLWNsaXAoKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gdGV4dFxuICAgIHZlbmRvcignYmFja2dyb3VuZC1jbGlwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQpXG4gIGVsc2VcbiAgICBsZWdhY3ktYmctdmFsdWVzKCdiYWNrZ3JvdW5kLWNsaXAnLCBhcmd1bWVudHMpXG4gICAgYmFja2dyb3VuZC1jbGlwOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtb3JpZ2luXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLW9yaWdpbigpXG4gIGxlZ2FjeS1iZy12YWx1ZXMoJ2JhY2tncm91bmQtb3JpZ2luJywgYXJndW1lbnRzKVxuICBiYWNrZ3JvdW5kLW9yaWdpbjogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtc2l6ZSgpXG4gIHZlbmRvcignYmFja2dyb3VuZC1zaXplJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2Zvcm0oKVxuICB2ZW5kb3IoJ3RyYW5zZm9ybScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG50cmFuc2Zvcm0tb3JpZ2luKClcbiAgICB2ZW5kb3IoJ3RyYW5zZm9ybS1vcmlnaW4nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm0tc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybS1zdHlsZSgpXG4gIHZlbmRvcigndHJhbnNmb3JtLXN0eWxlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYm9yZGVyLWltYWdlXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3JkZXItaW1hZ2UoKVxuICB2ZW5kb3IoJ2JvcmRlci1pbWFnZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbigpXG4gIHZlbmRvcigndHJhbnNpdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tcHJvcGVydHlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tcHJvcGVydHkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tcHJvcGVydHknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZGVsYXlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgdmVuZG9yKCdiYWNrZmFjZS12aXNpYmlsaXR5JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmVcIiBzdXBwb3J0LlxuICovXG5cbnBlcnNwZWN0aXZlKClcbiAgaWYgbWl4aW5cbiAgICB2ZW5kb3IoJ3BlcnNwZWN0aXZlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuICBlbHNlXG4gICAgJ3BlcnNwZWN0aXZlKCVzKScgJSBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcInBlcnNwZWN0aXZlLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUtb3JpZ2luKClcbiAgdmVuZG9yKCdwZXJzcGVjdGl2ZS1vcmlnaW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBPcGFjaXR5IHdpdGggY29uZGl0aW9uYWwgSUUgc3VwcG9ydC5cbiAqL1xuXG5vcGFjaXR5KG4sIGFyZ3MuLi4pXG4gIG9wYWNpdHk6IG4gYXJnc1xuICBpZiBzdXBwb3J0LWZvci1pZVxuICAgIGlmIG4gPT0gaW5oZXJpdCBvciBuID09IGluaXRpYWxcbiAgICAgIC1tcy1maWx0ZXI6IG4gYXJnc1xuICAgICAgZmlsdGVyOiBuIGFyZ3NcbiAgICBlbHNlXG4gICAgICB2YWwgPSByb3VuZChuICogMTAwKVxuICAgICAgaWYgdmFsID09IDEwMFxuICAgICAgICAtbXMtZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgICAgZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsIGFyZ3NcbiAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsIGFyZ3NcblxuLypcbiAqIFZlbmRvciBcInRleHQtc2l6ZS1hZGp1c3RcIlxuICovXG5cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBBbGlhcyB0aGUgXCJ3aGl0ZS1zcGFjZVwiIHByb3BlcnR5LlxuICovXG5cbndoaXRlc3BhY2UoKVxuICB3aGl0ZS1zcGFjZTogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2l6aW5nXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2l6aW5nKClcbiAgdmVuZG9yKCdib3gtc2l6aW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LW9yaWVudFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yaWVudCgpXG4gIHZlbmRvcignYm94LW9yaWVudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1mbGV4LWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtZmxleC1ncm91cCgpXG4gIHZlbmRvcignYm94LWZsZXgtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JkaW5hbC1ncm91cFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yZGluYWwtZ3JvdXAoKVxuICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtYWxpZ25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1hbGlnbigpXG4gIHZlbmRvcignYm94LWFsaWduJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LXBhY2tcIiBzdXBwb3J0LlxuICovXG5cbmJveC1wYWNrKClcbiAgdmVuZG9yKCdib3gtcGFjaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uJywgYXJndW1lbnRzKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tbmFtZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLW5hbWUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1uYW1lJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kdXJhdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWRlbGF5KClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGlyZWN0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGlyZWN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXBsYXktc3RhdGUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWZpbGwtbW9kZScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImh5cGhlbnNcIiBzdXBwb3J0LlxuICovXG5cbmh5cGhlbnMoKVxuICB2ZW5kb3IoJ2h5cGhlbnMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhcHBlYXJhbmNlXCIgc3VwcG9ydC5cbiAqL1xuXG5hcHBlYXJhbmNlKClcbiAgdmVuZG9yKCdhcHBlYXJhbmNlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidGFiLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbnRhYi1zaXplKClcbiAgdmVuZG9yKCd0YWItc2l6ZScsIGFyZ3VtZW50cywgb25seTogbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJvdmVyZmxvdy1zY3JvbGxpbmdcIiBzdXBwb3J0LlxuICovXG5cbm92ZXJmbG93LXNjcm9sbGluZygpXG4gIHZlbmRvcignb3ZlcmZsb3ctc2Nyb2xsaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LW92ZXJmbG93XCIgc3VwcG9ydCwgLCAtby0gZm9yIG9wZXJhIDkuKiAtIDEwLipcbiAqL1xuXG50ZXh0LW92ZXJmbG93KClcbiAgdmVuZG9yKCd0ZXh0LW92ZXJmbG93JywgYXJndW1lbnRzLCBvbmx5OiBvZmZpY2lhbCBvKVxuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiIHN1cHBvcnQuXG4gKi9cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIHdlYmtpdCBtcylcblxuLypcbiAqIFZlbmRvciBcImZvbnQtc21vb3RoaW5nXCIgc3VwcG9ydCwgd2Via2l0IG9ubHkuXG4gKi9cbmZvbnQtc21vb3RoaW5nKClcbiAgdmVuZG9yKCdmb250LXNtb290aGluZycsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuXG5cbi8qKlxuICogVmVuZG9yIGlucHV0LXBsYWNlaG9sZGVyL3BsYWNlaG9sZGVyIHN1cHBvcnQuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICAvLyBEZWZhdWx0IHN5bnRheFxuICogICAgYm9keVxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciAjMzMzLCBmb250LXdlaWdodCBub3JtYWwpXG4gKlxuICogICAgLy8gVGhlIGNvbW1hIGlzIGltcG9ydGFudFxuICogICAgLnBsYWNlaG9sZGVyLXJlZFxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciByZWQsKVxuICpcbiAqICAgIC8vIFdlIGNhbiBwYXNzIGEgZnVuY3Rpb25cbiAqICAgIGdyZWVuLXBsYWNlaG9sZGVyKClcbiAqICAgICAgY29sb3IgZ3JlZW5cbiAqICAgIC5wbGFjZWhvbGRlci1ncmVlblxuICogICAgICBwbGFjZWhvbGRlcihncmVlbi1wbGFjZWhvbGRlcilcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGhhc2hcbiAqICAgIHRleHRhcmVhXG4gKiAgICAgIHBsYWNlaG9sZGVyKChmb250LXN0eWxlIGl0YWxpYykgKGZvbnQtd2VpZ2h0IGJvbGQpIChwYWRkaW5nICc0cHggMTBweCcpKVxuICovXG5wbGFjZWhvbGRlcigpXG4gIGZvciB2IGluICc6LXdlYmtpdC1pbnB1dCcgJy1tb3onICc6LW1veicgJy1tcy1pbnB1dCdcbiAgICAmOnt2fS1wbGFjZWhvbGRlclxuICAgICAgZm9yIHBhaXIgaW4gYXJndW1lbnRzXG4gICAgICAgIGlmIHR5cGVvZihwYWlyKSA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgcGFpcigpXG4gICAgICAgIGVsc2UgaWYgcGFpciBpcyBub3QgbnVsbCAmJiBwYWlyWzBdIGlzIG5vdCBudWxsXG4gICAgICAgICAge3BhaXJbMF19OiB0eXBlKHBhaXJbMV0pID09ICdzdHJpbmcnID8gcyhwYWlyWzFdKSA6IHBhaXJbMV1cbmlucHV0LXBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJcblxuLypcbiAqIFZlbmRvciBiYWNrZ3JvdW5kIHN1cHBvcnQgKGdyYWRpZW50cykuXG4gKi9cblxuYmFja2dyb3VuZCgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZCBhcmd1bWVudHNcblxuYmFja2dyb3VuZC1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZC1pbWFnZSBhcmd1bWVudHNcblxuY3Vyc29yKClcbiAgaWYgbWF0Y2goJy1ncmFkaWVudFxcKCcsICcnK2FyZ3VtZW50cylcbiAgICB2ZW5kb3IoJ2N1cnNvcicsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGN1cnNvciBhcmd1bWVudHNcblxubGlzdC1zdHlsZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZSBhcmd1bWVudHNcblxubGlzdC1zdHlsZS1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZS1pbWFnZSBhcmd1bWVudHNcbiIsIi8qXG4gKiBPdmVyZmxvdyB1dGlsaXR5LiBNYXBzIHRvIHJlZ3VsYXIgb3ZlcmZsb3csIGFuZCBhZGRzIGFuIGVsbGlwc2lzIHZhbHVlLlxuICpcbiAqIFN5bm9wc2lzOlxuICpcbiAqICAgb3ZlcmZsb3c6IDx0eXBlPlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICBvdmVyZmxvdzogYXV0b1xuICogICAgIG92ZXJmbG93OiBoaWRkZW5cbiAqICAgICBvdmVyZmxvdzogZWxsaXBzaXNcbiAqXG4gKi9cblxub3ZlcmZsb3coKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gZWxsaXBzaXNcbiAgICBlbGxpcHNpcygpXG4gIGVsc2VcbiAgICBvdmVyZmxvdzogYXJndW1lbnRzXG4iLCIvKlxuICogU2l6ZSB1dGlsaXR5LlxuICpcbiAqIFN5bm9wc2lzOlxuICpcbiAqICAgc2l6ZTogPHdpZHRoPiA8aGVpZ2h0PiB8IDx3aWR0aCAmIGhlaWdodD5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgc2l6ZTogMTAwJSAzMHB4XG4gKiAgICAgICB5aWVsZHM6XG4gKiAgICAgICAgIHdpZHRoOiAxMDAlXG4gKiAgICAgICAgIGhlaWdodDogMzBweFxuICpcbiAqICAgICBzaXplOiA1cHhcbiAqICAgICAgIHlpZWxkczpcbiAqICAgICAgICAgd2lkdGg6IDVweFxuICogICAgICAgICBoZWlnaHQ6IDVweFxuICpcbiAqL1xuXG5zaXplKClcbiAgaWYgbGVuZ3RoKGFyZ3VtZW50cykgPT0gMVxuICAgIHdpZHRoOiBhcmd1bWVudHNbMF1cbiAgICBoZWlnaHQ6IGFyZ3VtZW50c1swXVxuICBlbHNlXG4gICAgd2lkdGg6IGFyZ3VtZW50c1swXVxuICAgIGhlaWdodDogYXJndW1lbnRzWzFdXG4iLCIvLyBoZWxwZXJcblxuLXBvcyh0eXBlLCBhcmdzKVxuICBpID0gMFxuICBwb3NpdGlvbjogdW5xdW90ZSh0eXBlKVxuICBmb3IgaiBpbiAoMS4uNClcbiAgICBpZiBsZW5ndGgoYXJncykgPiBpXG4gICAgICB7YXJnc1tpXX06IGFyZ3NbaSArIDFdIGlzIGEgJ3VuaXQnID8gYXJnc1tpICs9IDFdIDogMFxuICAgIGkgKz0gMVxuXG4vKlxuICogUG9zaXRpb24gdXRpbGl0eS5cbiAqXG4gKiBTeW5vcHNpczpcbiAqXG4gKiAgIGZpeGVkOiA8cG9zPiBbbl0gPHBvcz4gW25dXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIGZpeGVkOiB0b3AgbGVmdFxuICogICAgIGZpeGVkOiB0b3AgNXB4IGxlZnRcbiAqICAgICBmaXhlZDogdG9wIGxlZnQgNXB4XG4gKiAgICAgZml4ZWQ6IHRvcCA1cHggbGVmdCA1cHhcbiAqXG4gKi9cblxuZml4ZWQoKVxuICAtcG9zKCdmaXhlZCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFBvc2l0aW9uIHV0aWxpdHkuXG4gKlxuICogU3lub3BzaXM6XG4gKlxuICogICBhYnNvbHV0ZTogPHBvcz4gW25dIDxwb3M+IFtuXVxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICBhYnNvbHV0ZTogdG9wIGxlZnRcbiAqICAgICBhYnNvbHV0ZTogdG9wIDVweCBsZWZ0XG4gKiAgICAgYWJzb2x1dGU6IHRvcCBsZWZ0IDVweFxuICogICAgIGFic29sdXRlOiB0b3AgNXB4IGxlZnQgNXB4XG4gKlxuICovXG5cbmFic29sdXRlKClcbiAgLXBvcygnYWJzb2x1dGUnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBQb3NpdGlvbiB1dGlsaXR5LlxuICpcbiAqIFN5bm9wc2lzOlxuICpcbiAqICAgcmVsYXRpdmU6IDxwb3M+IFtuXSA8cG9zPiBbbl1cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgcmVsYXRpdmU6IHRvcCBsZWZ0XG4gKiAgICAgcmVsYXRpdmU6IHRvcCA1cHggbGVmdFxuICogICAgIHJlbGF0aXZlOiB0b3AgbGVmdCA1cHhcbiAqICAgICByZWxhdGl2ZTogdG9wIDVweCBsZWZ0IDVweFxuICpcbiAqL1xuXG5yZWxhdGl2ZSgpXG4gIC1wb3MoJ3JlbGF0aXZlJywgYXJndW1lbnRzKVxuIiwiY2FsbGVkLWZyb20gPSAoKVxuXG52ZW5kb3JzID0gbW96IHdlYmtpdCBvIG1zIG9mZmljaWFsXG5cbi8vIHN0cmluZ2lmeSB0aGUgZ2l2ZW4gYXJnXG5cbi1zdHJpbmcoYXJnKVxuICB0eXBlKGFyZykgKyAnICcgKyBhcmdcblxuLy8gcmVxdWlyZSBhIGNvbG9yXG5cbnJlcXVpcmUtY29sb3IoY29sb3IpXG4gIHVubGVzcyBjb2xvciBpcyBhICdjb2xvcidcbiAgICBlcnJvcignUkdCIG9yIEhTTCB2YWx1ZSBleHBlY3RlZCwgZ290IGEgJyArIC1zdHJpbmcoY29sb3IpKVxuXG4vLyByZXF1aXJlIGEgdW5pdFxuXG5yZXF1aXJlLXVuaXQobilcbiAgdW5sZXNzIG4gaXMgYSAndW5pdCdcbiAgICBlcnJvcigndW5pdCBleHBlY3RlZCwgZ290IGEgJyArIC1zdHJpbmcobikpXG5cbi8vIHJlcXVpcmUgYSBzdHJpbmdcblxucmVxdWlyZS1zdHJpbmcoc3RyKVxuICB1bmxlc3Mgc3RyIGlzIGEgJ3N0cmluZycgb3Igc3RyIGlzIGEgJ2lkZW50J1xuICAgIGVycm9yKCdzdHJpbmcgZXhwZWN0ZWQsIGdvdCBhICcgKyAtc3RyaW5nKHN0cikpXG5cbi8vIE1hdGggZnVuY3Rpb25zXG5cbmFicyhuKSB7IG1hdGgobiwgJ2FicycpIH1cbm1pbihhLCBiKSB7IGEgPCBiID8gYSA6IGIgfVxubWF4KGEsIGIpIHsgYSA+IGIgPyBhIDogYiB9XG5cbi8vIFRyaWdvbm9tZXRyaWNzXG5QSSA9IC1tYXRoLXByb3AoJ1BJJylcblxucmFkaWFucy10by1kZWdyZWVzKGFuZ2xlKVxuICBhbmdsZSAqICgxODAgLyBQSSlcblxuZGVncmVlcy10by1yYWRpYW5zKGFuZ2xlKVxuICBhbmdsZSAqIChQSSAvIDE4MClcblxuc2luKG4pXG4gIG4gPSB1bml0KG4pID09ICdkZWcnID8gZGVncmVlcy10by1yYWRpYW5zKHVuaXQobiwgJycpKSA6IHVuaXQobiwgJycpXG4gIHJvdW5kKG1hdGgobiwgJ3NpbicpLCA5KVxuXG5jb3MobilcbiAgbiA9IHVuaXQobikgPT0gJ2RlZycgPyBkZWdyZWVzLXRvLXJhZGlhbnModW5pdChuLCAnJykpIDogdW5pdChuLCAnJylcbiAgcm91bmQobWF0aChuLCAnY29zJyksIDkpXG5cbi8vIFJvdW5kaW5nIE1hdGggZnVuY3Rpb25zXG5cbmNlaWwobiwgcHJlY2lzaW9uID0gMClcbiAgbXVsdGlwbGllciA9IDEwICoqIHByZWNpc2lvblxuICBtYXRoKG4gKiBtdWx0aXBsaWVyLCAnY2VpbCcpIC8gbXVsdGlwbGllclxuXG5mbG9vcihuLCBwcmVjaXNpb24gPSAwKVxuICBtdWx0aXBsaWVyID0gMTAgKiogcHJlY2lzaW9uXG4gIG1hdGgobiAqIG11bHRpcGxpZXIsICdmbG9vcicpIC8gbXVsdGlwbGllclxuXG5yb3VuZChuLCBwcmVjaXNpb24gPSAwKVxuICBtdWx0aXBsaWVyID0gMTAgKiogcHJlY2lzaW9uXG4gIG1hdGgobiAqIG11bHRpcGxpZXIsICdyb3VuZCcpIC8gbXVsdGlwbGllclxuXG4vLyByZXR1cm4gdGhlIHN1bSBvZiB0aGUgZ2l2ZW4gbnVtYmVyc1xuXG5zdW0obnVtcylcbiAgc3VtID0gMFxuICBzdW0gKz0gbiBmb3IgbiBpbiBudW1zXG5cbi8vIHJldHVybiB0aGUgYXZlcmFnZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyc1xuXG5hdmcobnVtcylcbiAgc3VtKG51bXMpIC8gbGVuZ3RoKG51bXMpXG5cbi8vIHJldHVybiBhIHVuaXRsZXNzIG51bWJlciwgb3IgcGFzcyB0aHJvdWdoXG5cbnJlbW92ZS11bml0KG4pXG4gIGlmIHR5cGVvZihuKSBpcyBcInVuaXRcIlxuICAgIHVuaXQobiwgXCJcIilcbiAgZWxzZVxuICAgIG5cblxuLy8gY29udmVydCBhIHBlcmNlbnQgdG8gYSBkZWNpbWFsLCBvciBwYXNzIHRocm91Z2hcblxucGVyY2VudC10by1kZWNpbWFsKG4pXG4gIGlmIHVuaXQobikgaXMgXCIlXCJcbiAgICByZW1vdmUtdW5pdChuKSAvIDEwMFxuICBlbHNlXG4gICAgblxuXG4vLyBjaGVjayBpZiBuIGlzIGFuIG9kZCBudW1iZXJcblxub2RkKG4pXG4gIDEgPT0gbiAlIDJcblxuLy8gY2hlY2sgaWYgbiBpcyBhbiBldmVuIG51bWJlclxuXG5ldmVuKG4pXG4gIDAgPT0gbiAlIDJcblxuLy8gY2hlY2sgaWYgY29sb3IgaXMgbGlnaHRcblxubGlnaHQoY29sb3IpXG4gIGxpZ2h0bmVzcyhjb2xvcikgPj0gNTAlXG5cbi8vIGNoZWNrIGlmIGNvbG9yIGlzIGRhcmtcblxuZGFyayhjb2xvcilcbiAgbGlnaHRuZXNzKGNvbG9yKSA8IDUwJVxuXG4vLyBkZXNhdHVyYXRlIGNvbG9yIGJ5IGFtb3VudFxuXG5kZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpXG4gIGFkanVzdChjb2xvciwgJ3NhdHVyYXRpb24nLCAtIGFtb3VudClcblxuLy8gc2F0dXJhdGUgY29sb3IgYnkgYW1vdW50XG5cbnNhdHVyYXRlKGNvbG9yID0gJycsIGFtb3VudCA9IDEwMCUpXG4gIGlmIGNvbG9yIGlzIGEgJ2NvbG9yJ1xuICAgIGFkanVzdChjb2xvciwgJ3NhdHVyYXRpb24nLCBhbW91bnQpXG4gIGVsc2VcbiAgICB1bnF1b3RlKCBcInNhdHVyYXRlKFwiICsgY29sb3IgKyBcIilcIiApXG5cbi8vIGRhcmtlbiBieSB0aGUgZ2l2ZW4gYW1vdW50XG5cbmRhcmtlbihjb2xvciwgYW1vdW50KVxuICBhZGp1c3QoY29sb3IsICdsaWdodG5lc3MnLCAtIGFtb3VudClcblxuLy8gbGlnaHRlbiBieSB0aGUgZ2l2ZW4gYW1vdW50XG5cbmxpZ2h0ZW4oY29sb3IsIGFtb3VudClcbiAgYWRqdXN0KGNvbG9yLCAnbGlnaHRuZXNzJywgYW1vdW50KVxuXG4vLyBkZWNyZWFzZSBvcGFjaXR5IGJ5IGFtb3VudFxuXG5mYWRlLW91dChjb2xvciwgYW1vdW50KVxuICBjb2xvciAtIHJnYmEoYmxhY2ssIHBlcmNlbnQtdG8tZGVjaW1hbChhbW91bnQpKVxuXG4vLyBpbmNyZWFzZSBvcGFjaXR5IGJ5IGFtb3VudFxuXG5mYWRlLWluKGNvbG9yLCBhbW91bnQpXG4gIGNvbG9yICsgcmdiYShibGFjaywgcGVyY2VudC10by1kZWNpbWFsKGFtb3VudCkpXG5cbi8vIHNwaW4gaHVlIGJ5IGEgZ2l2ZW4gYW1vdW50XG5cbnNwaW4oY29sb3IsIGFtb3VudClcbiAgY29sb3IgKyB1bml0KGFtb3VudCwgZGVnKVxuXG4vLyBtaXggdHdvIGNvbG9ycyBieSBhIGdpdmVuIGFtb3VudFxuXG5taXgoY29sb3IxLCBjb2xvcjIsIHdlaWdodCA9IDUwJSlcbiAgdW5sZXNzIHdlaWdodCBpbiAwLi4xMDBcbiAgICBlcnJvcihcIldlaWdodCBtdXN0IGJlIGJldHdlZW4gMCUgYW5kIDEwMCVcIilcblxuICBpZiBsZW5ndGgoY29sb3IxKSA9PSAyXG4gICAgd2VpZ2h0ID0gY29sb3IxWzBdXG4gICAgY29sb3IxID0gY29sb3IxWzFdXG5cbiAgZWxzZSBpZiBsZW5ndGgoY29sb3IyKSA9PSAyXG4gICAgd2VpZ2h0ID0gMTAwIC0gY29sb3IyWzBdXG4gICAgY29sb3IyID0gY29sb3IyWzFdXG5cbiAgcmVxdWlyZS1jb2xvcihjb2xvcjEpXG4gIHJlcXVpcmUtY29sb3IoY29sb3IyKVxuXG4gIHAgPSB1bml0KHdlaWdodCAvIDEwMCwgJycpXG4gIHcgPSBwICogMiAtIDFcblxuICBhID0gYWxwaGEoY29sb3IxKSAtIGFscGhhKGNvbG9yMilcblxuICB3MSA9ICgoKHcgKiBhID09IC0xKSA/IHcgOiAodyArIGEpIC8gKDEgKyB3ICogYSkpICsgMSkgLyAyXG4gIHcyID0gMSAtIHcxXG5cbiAgY2hhbm5lbHMgPSAocmVkKGNvbG9yMSkgcmVkKGNvbG9yMikpIChncmVlbihjb2xvcjEpIGdyZWVuKGNvbG9yMikpIChibHVlKGNvbG9yMSkgYmx1ZShjb2xvcjIpKVxuICByZ2IgPSAoKVxuXG4gIGZvciBwYWlyIGluIGNoYW5uZWxzXG4gICAgcHVzaChyZ2IsIGZsb29yKHBhaXJbMF0gKiB3MSArIHBhaXJbMV0gKiB3MikpXG5cbiAgYTEgPSBhbHBoYShjb2xvcjEpICogcFxuICBhMiA9IGFscGhhKGNvbG9yMikgKiAoMSAtIHApXG4gIGFscGhhID0gYTEgKyBhMlxuXG4gIHJnYmEocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSwgYWxwaGEpXG5cbi8vIGludmVydCBjb2xvcnMsIGxlYXZlIGFscGhhIGludGFjdFxuXG5pbnZlcnQoY29sb3IgPSAnJylcbiAgaWYgY29sb3IgaXMgYSAnY29sb3InXG4gICAgcmdiYSgjZmZmIC0gY29sb3IsIGFscGhhKGNvbG9yKSlcbiAgZWxzZVxuICAgIHVucXVvdGUoIFwiaW52ZXJ0KFwiICsgY29sb3IgKyBcIilcIiApXG5cbi8vIGdpdmUgY29tcGxlbWVudCBvZiB0aGUgZ2l2ZW4gY29sb3JcblxuY29tcGxlbWVudCggY29sb3IgKVxuICBzcGluKCBjb2xvciwgMTgwIClcblxuLy8gZ2l2ZSBncmF5c2NhbGUgb2YgdGhlIGdpdmVuIGNvbG9yXG5cbmdyYXlzY2FsZSggY29sb3IgPSAnJyApXG4gIGlmIGNvbG9yIGlzIGEgJ2NvbG9yJ1xuICAgIGRlc2F0dXJhdGUoIGNvbG9yLCAxMDAlIClcbiAgZWxzZVxuICAgIHVucXVvdGUoIFwiZ3JheXNjYWxlKFwiICsgY29sb3IgKyBcIilcIiApXG5cbi8vIG1peCB0aGUgZ2l2ZW4gY29sb3Igd2l0aCB3aGl0ZVxuXG50aW50KCBjb2xvciwgcGVyY2VudCApXG4gIG1peCggd2hpdGUsIGNvbG9yLCBwZXJjZW50IClcblxuLy8gbWl4IHRoZSBnaXZlbiBjb2xvciB3aXRoIGJsYWNrXG5cbnNoYWRlKCBjb2xvciwgcGVyY2VudCApXG4gIG1peCggYmxhY2ssIGNvbG9yLCBwZXJjZW50IClcblxuLy8gcmV0dXJuIHRoZSBsYXN0IHZhbHVlIGluIHRoZSBnaXZlbiBleHByXG5cbmxhc3QoZXhwcilcbiAgZXhwcltsZW5ndGgoZXhwcikgLSAxXVxuXG4vLyByZXR1cm4ga2V5cyBpbiB0aGUgZ2l2ZW4gcGFpcnMgb3Igb2JqZWN0XG5cbmtleXMocGFpcnMpXG4gIHJldCA9ICgpXG4gIGlmIHR5cGUocGFpcnMpID09ICdvYmplY3QnXG4gICAgZm9yIGtleSBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIGtleSlcbiAgZWxzZVxuICAgIGZvciBwYWlyIGluIHBhaXJzXG4gICAgICBwdXNoKHJldCwgcGFpclswXSk7XG4gIHJldFxuXG4vLyByZXR1cm4gdmFsdWVzIGluIHRoZSBnaXZlbiBwYWlycyBvciBvYmplY3RcblxudmFsdWVzKHBhaXJzKVxuICByZXQgPSAoKVxuICBpZiB0eXBlKHBhaXJzKSA9PSAnb2JqZWN0J1xuICAgIGZvciBrZXksIHZhbCBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIHZhbClcbiAgZWxzZVxuICAgIGZvciBwYWlyIGluIHBhaXJzXG4gICAgICBwdXNoKHJldCwgcGFpclsxXSk7XG4gIHJldFxuXG4vLyBqb2luIHZhbHVlcyB3aXRoIHRoZSBnaXZlbiBkZWxpbWl0ZXJcblxuam9pbihkZWxpbSwgdmFscy4uLilcbiAgYnVmID0gJydcbiAgdmFscyA9IHZhbHNbMF0gaWYgbGVuZ3RoKHZhbHMpID09IDFcbiAgZm9yIHZhbCwgaSBpbiB2YWxzXG4gICAgYnVmICs9IGkgPyBkZWxpbSArIHZhbCA6IHZhbFxuXG4vLyBhZGQgYSBDU1MgcnVsZSB0byB0aGUgY29udGFpbmluZyBibG9ja1xuXG4vLyAtIFRoaXMgZGVmaW5pdGlvbiBhbGxvd3MgYWRkLXByb3BlcnR5IHRvIGJlIHVzZWQgYXMgYSBtaXhpblxuLy8gLSBJdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGludGVycG9sYXRpb24gYnV0IGFsbG93cyB1c2Vyc1xuLy8gICB0byBvcHQgZm9yIGEgZnVuY3Rpb25hbCBzdHlsZVxuXG5hZGQtcHJvcGVydHktZnVuY3Rpb24gPSBhZGQtcHJvcGVydHlcbmFkZC1wcm9wZXJ0eShuYW1lLCBleHByKVxuICBpZiBtaXhpblxuICAgIHtuYW1lfSBleHByXG4gIGVsc2VcbiAgICBhZGQtcHJvcGVydHktZnVuY3Rpb24obmFtZSwgZXhwcilcblxucHJlZml4LWNsYXNzZXMocHJlZml4KVxuICAtcHJlZml4LWNsYXNzZXMocHJlZml4LCBibG9jaylcblxuLy8gQ2FjaGluZyBtaXhpbiwgdXNlIGluc2lkZSB5b3VyIGZ1bmN0aW9ucyB0byBlbmFibGUgY2FjaGluZyBieSBleHRlbmRpbmcuXG5cbiRzdHlsdXNfbWl4aW5fY2FjaGUgPSB7fVxuY2FjaGUoKVxuICAka2V5ID0gKGN1cnJlbnQtbWVkaWEoKSBvciAnbm8tbWVkaWEnKSArICdfXycgKyBjYWxsZWQtZnJvbVswXSArICdfXycgKyBhcmd1bWVudHNcbiAgaWYgJGtleSBpbiAkc3R5bHVzX21peGluX2NhY2hlXG4gICAgQGV4dGVuZCB7XCIkY2FjaGVfcGxhY2Vob2xkZXJfZm9yX1wiICsgJHN0eWx1c19taXhpbl9jYWNoZVska2V5XX1cbiAgZWxzZSBpZiAnY2FjaGUnIGluIGNhbGxlZC1mcm9tXG4gICAge2Jsb2NrfVxuICBlbHNlXG4gICAgJGlkID0gbGVuZ3RoKCRzdHlsdXNfbWl4aW5fY2FjaGUpXG5cbiAgICAmLFxuICAgIC8kY2FjaGVfcGxhY2Vob2xkZXJfZm9yX3skaWR9XG4gICAgICAkc3R5bHVzX21peGluX2NhY2hlWyRrZXldID0gJGlkXG4gICAgICB7YmxvY2t9XG5cbi8vIFBlcmNlbnRhZ2UgZnVuY3Rpb24gdG8gY29udmVydCBhIG51bWJlciwgZS5nLiBcIi40NVwiLCBpbnRvIGEgcGVyY2VudGFnZSwgZS5nLiBcIjQ1JVwiXG5cbnBlcmNlbnRhZ2UobnVtKVxuICByZXR1cm4gdW5pdChudW0gKiAxMDAsICclJylcblxuLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgYSBgdmFsdWVgIHdpdGhpbiBhIGBsaXN0YFxuXG5pbmRleChsaXN0LCB2YWx1ZSlcbiAgZm9yIHZhbCwgaSBpbiBsaXN0XG4gICAgcmV0dXJuIGkgaWYgdmFsID09IHZhbHVlXG4iLCIvKlxuICogSGVscGVyIGZvciBib3JkZXItcmFkaXVzKCkuXG4gKi9cblxuLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICBpZiBsZW5ndGgocG9zKSA9PSAzXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPHRvcCB8IGJvdHRvbT4gPGxlZnQgfCByaWdodD4gPG4+XG4gICAgeSA9IHBvc1swXVxuICAgIHggPSBwb3NbMV1cbiAgICAvLyBXZSBkb24ndCB1c2UgdmVuZG9yIGZvciBib2Rlci1yYWRpdXMgYW55bW9yZVxuICAgIC8vIHZlbmRvcignYm9yZGVyLXJhZGl1cy0lcyVzJyAlIHBvcywgcG9zWzJdLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG4gICAgeydib3JkZXItJXMtJXMtcmFkaXVzJyAlIHBvc306IHBvc1syXSBpbXBvcnRhbmNlXG4gIGVsc2UgaWYgcG9zWzBdIGluICh0b3AgYm90dG9tKVxuICAgIC8vIGJvcmRlci1yYWRpdXM6IDx0b3AgfCBib3R0b20+IDxuPlxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvc1swXSBsZWZ0IHBvc1sxXSwgaW1wb3J0YW5jZSlcbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3NbMF0gcmlnaHQgcG9zWzFdLCBpbXBvcnRhbmNlKVxuICBlbHNlIGlmIHBvc1swXSBpbiAobGVmdCByaWdodClcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8bGVmdCB8IHJpZ2h0PiA8bj5cbiAgICB1bnNoaWZ0KHBvcywgdG9wKTtcbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gICAgcG9zWzBdID0gYm90dG9tXG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuXG4vKlxuICogYm9yZGVyLXJhZGl1cyBzdXBwb3J0aW5nIGF1Z21lbnRlZCBiZWhhdmlvci5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICBib3JkZXItcmFkaXVzOiAycHggNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgNXB4IGJvdHRvbSAxMHB4XG4gKiAgICBib3JkZXItcmFkaXVzOiBsZWZ0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCAxMHB4IGJvdHRvbSByaWdodCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDEwcHgsIGJvdHRvbSByaWdodCA1cHhcbiAqXG4gKi9cblxuYm9yZGVyLXJhZGl1cygpXG4gIHBvcyA9ICgpXG4gIGF1Z21lbnRlZCA9IGZhbHNlXG4gIGltcG9ydGFuY2UgPSBhcmd1bWVudHNbbGVuZ3RoKGFyZ3VtZW50cykgLSAxXSA9PSAhaW1wb3J0YW50ID8gIWltcG9ydGFudCA6IHVucXVvdGUoJycpXG5cbiAgZm9yIGFyZ3MgaW4gYXJndW1lbnRzXG4gICAgZm9yIGFyZyBpbiBhcmdzXG4gICAgICBpZiBhcmcgaXMgYSAnaWRlbnQnXG4gICAgICAgIGFwcGVuZChwb3MsIGFyZylcbiAgICAgICAgYXVnbWVudGVkID0gdHJ1ZVxuICAgICAgZWxzZVxuICAgICAgICBhcHBlbmQocG9zLCBhcmcpXG4gICAgICAgIGlmIGF1Z21lbnRlZFxuICAgICAgICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgICAgICAgICBwb3MgPSAoKVxuICBib3JkZXItcmFkaXVzIHBvcyB1bmxlc3MgYXVnbWVudGVkXG4iXX0= */
