/* Tints could be set with:
  color: mix($color--navy, #FFF, 10%);
  But the mix function seems slightly off
  */
/* LINKS */
/* breakpoints */
body.sidebar #main .sidebar {
  border-color: #716FB2; }
  body.sidebar #main .sidebar .field-name-field-paragraph-sidebar > .field-items > .field-item:after,
  body.sidebar #main .sidebar .field-name-field-blockref-sidebar > .field-items > .field-item:after,
  body.sidebar #main .sidebar .field-name-field-pg-blockref-blockref > .field-items > .field-item:after,
  body.sidebar #main .sidebar .region-sidebar > .block:after {
    background-color: #716FB2; }

#main #content div[id*=block-views-news-news-block] > h3,
#main #content div[id*=block-views-events-events-block] > h3,
#main #content div[id*=block-views-blog-blog-block] > h3,
#main #content div[id*=block-ucsf-b1gfoot-xmlnews-startingpoint-xmlnews] > h3,
#main #content div[id*=block-ucsf-b1gfoot-xmlevents-startingpoint-xmlevents] > h3 {
  border-bottom: 2px solid #716FB2; }

#main #content .field-name-field-pg-ref-pubs .field-label,
#main #content .field-name-field-pg-ref-profiles .field-label,
#main #content .field-name-field-person-publications-list .field-label,
#main #content .field-name-field-person-pub-override-list .field-label,
#main #content .block-ucsf-b1gfoot-publication > h3,
#main #content .block-ucsf-b1gfoot-profile > h3,
#main #content .block-ucsf-b1gfoot-profile > h3,
#block-views-blog-related-author-block > h3,
#block-views-blog-by-author-block > h3 {
  border-bottom: 2px solid #716FB2; }

.slider-no-image .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders:after {
  background-color: #716FB2; }

.slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .paragraphs-items > .field > .field-items > .slick-list >
.slick-track > .field-item:after {
  background-color: #716FB2; }

@media (max-width: 959px) {
  .slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .paragraphs-items > .field > .field-items > .slick-list >
.slick-track > .field-item:before {
    background-color: #716FB2; } }

.slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .group-slider-content:after {
  background-color: #716FB2; }

.slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .field-name-field-pg-slider-image:after {
  background-color: #716FB2; }

.slider-image-left .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders:after {
  background-color: #716FB2; }

.slider-image-right .region-content-top .group-slider-content {
  background-color: #716FB2; }

.slider-image-right .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders:after {
  background-color: #716FB2; }

#main #content #block-views-events-events-block h2 {
  border-bottom: 2px solid #716FB2; }

#main #content #block-views-publications-block h2 {
  border-bottom: 2px solid #716FB2; }

.view-display-id-blog_page .blog-author-name a,
.node-blog .byline-author a {
  color: #716FB2; }

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5LXB1cnBsZS5jc3MiLCJzb3VyY2VzIjpbInNlY29uZGFyeS1wdXJwbGUuc2NzcyIsIi4uLy4uL3V0aWxpdGllcy9fMF92YXJpYWJsZXMuc2NzcyIsIl9zZWNvbmRhcnktY29sb3JzLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L2JyZWFrcG9pbnQuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX3NldHRpbmdzLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L19jb250ZXh0LnNjc3MiLCIuLi8uLi9icmVha3BvaW50L19oZWxwZXJzLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L19wYXJzZXJzLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvX3F1ZXJ5LnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvX3NpbmdsZS5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL3NpbmdsZS9fZGVmYXVsdC5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL19kb3VibGUuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvcGFyc2Vycy9kb3VibGUvX2RlZmF1bHQtcGFpci5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZG91YmxlLXN0cmluZy5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZGVmYXVsdC5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL190cmlwbGUuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvcGFyc2Vycy90cmlwbGUvX2RlZmF1bHQuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvcGFyc2Vycy9fcmVzb2x1dGlvbi5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL3Jlc29sdXRpb24vX3Jlc29sdXRpb24uc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX25vLXF1ZXJ5LnNjc3MiLCIuLi8uLi9icmVha3BvaW50L19yZXNwb25kLXRvLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L19sZWdhY3ktc2V0dGluZ3Muc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyJAaW1wb3J0IFwiLi4vLi4vdXRpbGl0aWVzL18wX3ZhcmlhYmxlcy5zY3NzXCI7XHJcblxyXG4kc2Vjb25kYXJ5LWNvbG9yOiAkY29sb3ItLXB1cnBsZTtcclxuXHJcbkBpbXBvcnQgXCJzZWNvbmRhcnktY29sb3JzXCI7XHJcblxyXG5cclxuXHJcbi8vIGJvZHkuc2lkZWJhciB7XHJcbi8vICAgI21haW4ge1xyXG4vLyAgICAgLnNpZGViYXIge1xyXG4vLyAgICAgICBib3JkZXItY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4vLyB9XHJcblxyXG4vLyAjYmxvY2stdmlld3MtbmV3cy1uZXdzLWJsb2NrIHtcclxuLy8gICBtYXJnaW4tYm90dG9tOiA0MHB4O1xyXG4vLyAgIGgyIHtcclxuLy8gICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4vLyAgIH1cclxuLy8gfVxyXG4iLCIkbWFpbi1mb250OiBcIkhlbHZldGljYU5ldWVMVFcwNC01NVJvbWFuXCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuJG1haW4tZm9udC0tbGlnaHQ6IFwiSGVsdmV0aWNhTmV1ZUxUVzA0LTQ1TGlnaHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZSBMaWdodFwiLCBcIkhlbHZldGljYU5ldWUtbGlnaHRcIiwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xyXG4kbWFpbi1mb250LS1oZWFkZXI6IFwiSGVsdmV0aWNhTmV1ZUxUVzA0LTU1Um9tYW5cIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuJHByaW1hcnktZm9udDogJG1haW4tZm9udDtcclxuJHNlY29uZGFyeS1mb250OiBcIkdyYW5qb25MVFcwMS1Sb21hblwiLCBcIkdyYW5qb25cIiwgR2FyYW1vbmQsIHNlcmlmO1xyXG4kZm9udC1hd2Vzb21lOiBcIkZvbnRBd2Vzb21lXCI7XHJcblxyXG4kZGVmYXVsdC0tZm9udC1zaXplOiAxNnB4O1xyXG4kZm9udC1zaXplLXNtYWxsOiAuOWVtO1xyXG4kZGVmYXVsdC0tbGluZS1oZWlnaHQ6IDEuNDtcclxuXHJcbiRmb250LS1leHRyYS0tbGlnaHQ6IDIwMDtcclxuJGZvbnQtLWxpZ2h0OiAzMDA7XHJcbiRmb250LS1ub3JtYWw6IDQwMDtcclxuJGZvbnQtLWJvbGQ6IDUwMDtcclxuXHJcbiRmb250LWdyZXk6ICM1MjU4NjA7XHJcblxyXG4kY29sb3ItLXdoaXRlOiAjRkZGO1xyXG4kY29sb3ItLWJsYWNrOiAjMDAwO1xyXG4kY29sb3ItLWdyZXkxOiAjRDFEM0QzO1xyXG4kY29sb3ItLWdyZXkyOiAjQjRCOUJGO1xyXG4kY29sb3ItLWdyZXkzOiAjRUZFRkVGO1xyXG4kY29sb3ItLWdyZXk0OiAjRURFREVEO1xyXG4kY29sb3ItLWdyZXktcGFsZTogI2YyZjRmNjtcclxuJGNvbG9yLWdyZXktYmx1ZTogIzUwNjM4MDtcclxuXHJcbi8vIFByaW1hcnkgUGFsZXR0ZVxyXG4kY29sb3ItLW5hdnk6ICMwNTIwNDk7XHJcbiRjb2xvci0tdGVhbDogIzA1ODQ4ODtcclxuJGNvbG9yLS1ncmVlbjogIzZFQTQwMDtcclxuJGNvbG9yLS1ibHVlOiAjMDA3MWFkO1xyXG4kY29sb3ItLW9yYW5nZTogI0YyNkQwNDtcclxuJGNvbG9yLS1ncmV5OiAkY29sb3ItLWdyZXkyO1xyXG5cclxuLy8gU2Vjb25kYXJ5IFBhbGV0dGVcclxuJGNvbG9yLS1wdXJwbGU6ICM3MTZGQjI7XHJcbiRjb2xvci0tcGluazogI0VCMDkzQztcclxuJGNvbG9yLS15ZWxsb3c6ICNGRkREMDA7XHJcbiRjb2xvci0tZ3JleTogJGNvbG9yLS1ncmV5MjtcclxuXHJcbi8vIEJvbnVzIGNvbG9yXHJcbiRjb2xvci0tZGFyay1ncmV5OiAjNzM3MzczO1xyXG4kY29sb3ItLWxpZ2h0LWdyZXk6ICNFQkVGRjM7XHJcbi8vIFRpbnRzXHJcbi8qIFRpbnRzIGNvdWxkIGJlIHNldCB3aXRoOlxyXG4gIGNvbG9yOiBtaXgoJGNvbG9yLS1uYXZ5LCAjRkZGLCAxMCUpO1xyXG4gIEJ1dCB0aGUgbWl4IGZ1bmN0aW9uIHNlZW1zIHNsaWdodGx5IG9mZlxyXG4gICovXHJcbiRjb2xvci0tYmxhY2stLXRpbnQwNTogIzNCM0IzQjtcclxuJGNvbG9yLS1ibGFjay0tdGludDE6ICM0RDRENEQ7XHJcbiRjb2xvci0tYmxhY2stLXRpbnQyOiAjOTk5OTk5O1xyXG4kY29sb3ItLWJsYWNrLS10aW50MzogI0U1RTVFNTtcclxuXHJcbiRjb2xvci0tZ3JleTEtLXRpbnQxOiAjREZFMEUwO1xyXG4kY29sb3ItLWdyZXkxLS10aW50MjogI0VERURFRTtcclxuJGNvbG9yLS1ncmV5MS0tdGludDM6ICNGQUZCRkI7XHJcblxyXG4kY29sb3ItLWdyZXkyLS10aW50MTogI0NCQ0VEMjtcclxuJGNvbG9yLS1ncmV5Mi0tdGludDI6ICNFMUUzRTY7XHJcbiRjb2xvci0tZ3JleTItLXRpbnQzOiAjRjhGOEY5O1xyXG5cclxuJGNvbG9yLS1ncmV5LS10aW50MTogJGNvbG9yLS1ncmV5Mi0tdGludDE7XHJcblxyXG4kY29sb3ItLW5hdnktLXRpbnQxOiAjNTA2MzgwO1xyXG4kY29sb3ItLW5hdnktLXRpbnQyOiAjOUJBNkI2O1xyXG4kY29sb3ItLW5hdnktLXRpbnQzOiAjRTZFOUVEO1xyXG5cclxuJGNvbG9yLS1ibHVlLS10aW50MTogIzVEQUZEQjtcclxuJGNvbG9yLS1ibHVlLS10aW50MjogI0EyRDFFQTtcclxuJGNvbG9yLS1ibHVlLS10aW50MzogI0U4RjRGQTtcclxuXHJcbiRjb2xvci0tb3JhbmdlLS10aW50MTogI0Y3QTY2NTtcclxuJGNvbG9yLS1vcmFuZ2UtLXRpbnQyOiAjRkJDQ0E3O1xyXG4kY29sb3ItLW9yYW5nZS0tdGludDM6ICNGRUYyRTk7XHJcblxyXG4kY29sb3ItLXRlYWwtLXRpbnQxOiAjNURCRkM1O1xyXG4kY29sb3ItLXRlYWwtLXRpbnQyOiAjQTNEQURFO1xyXG4kY29sb3ItLXRlYWwtLXRpbnQzOiAjRThGNkY3O1xyXG5cclxuJGNvbG9yLS1ncmVlbi0tdGludDE6ICNCMUQxNkY7XHJcbiRjb2xvci0tZ3JlZW4tLXRpbnQyOiAjRDNFNEFEO1xyXG4kY29sb3ItLWdyZWVuLS10aW50MzogI0Y0RjhFQTtcclxuXHJcbiRjb2xvci0tcHVycGxlLS10aW50MTogIzlDOUFDOTtcclxuJGNvbG9yLS1wdXJwbGUtLXRpbnQyOiAjQzZDNUUwO1xyXG4kY29sb3ItLXB1cnBsZS0tdGludDM6ICNGMUYxRjc7XHJcblxyXG4kY29sb3ItLXBpbmstLXRpbnQxOiAjRjI1RDdGO1xyXG4kY29sb3ItLXBpbmstLXRpbnQyOiAjRjdBM0I2O1xyXG4kY29sb3ItLXBpbmstLXRpbnQzOiAjRkRFOEVEO1xyXG5cclxuJGNvbG9yLS15ZWxsb3ctLXRpbnQxOiAjRkZFNzREO1xyXG4kY29sb3ItLXllbGxvdy0tdGludDI6ICNGRkYxOTk7XHJcbiRjb2xvci0teWVsbG93LS10aW50MzogI0ZGRkNFNjtcclxuXHJcblxyXG4kY29sb3ItLWJvcmRlcjogJGNvbG9yLS1ncmV5MjtcclxuJGNvbG9yLS1ib3JkZXItLWhvdmVyOiAkY29sb3ItLWJsYWNrLS10aW50MjtcclxuJGNvbG9yLS1ib3JkZXItLWFjdGl2ZTogJGNvbG9yLS1ibGFjay0tdGludDE7XHJcblxyXG4kY29sb3ItLXRleHQ6ICRjb2xvci0tYmxhY2s7XHJcblxyXG4vKiBMSU5LUyAqL1xyXG4vLyBMaW5rIGRlZmF1bHQgY29sb3IgYW5kIGhvdmVyIGNvbG9yXHJcbiRjb2xvci0tbGluazogJGNvbG9yLS1ibHVlO1xyXG4kY29sb3ItLWxpbmstLWhvdmVyOiAjMDUyMDQ5O1xyXG5cclxuLy8gTGluayByZXZlcnNlIGNvbG9yIGFuZCBob3ZlciBjb2xvclxyXG4kY29sb3ItLWxpbmstZGFyazogJGNvbG9yLS1uYXZ5O1xyXG4kY29sb3ItLWxpbmstZGFyay0taG92ZXI6ICRjb2xvci0tYmx1ZTtcclxuXHJcbiRjb2xvci0tZW1wdHk6ICNBQkFCQUI7XHJcblxyXG4vKiBicmVha3BvaW50cyAqL1xyXG4kd2lkdGgtLXhzbWFsbCAgOiAzMjBweDtcclxuJHdpZHRoLS1zbWFsbCAgIDogNDgwcHg7XHJcbiR3aWR0aC0tbWVkaXVtICA6IDc2OXB4O1xyXG4kd2lkdGgtLW1lZGl1bS0tbWFpbi0tY29udGVudCAgOiA3NjhweDtcclxuJHdpZHRoLS05NjAgIFx0OiA5NjBweDtcclxuJHdpZHRoLS1sYXJnZSAgIDogMTMyMHB4O1xyXG4kd2lkdGgtLXhsYXJnZSAgOiAxMTcwcHg7XHJcblxyXG4kbWF4LXdpZHRoOiAkd2lkdGgtLWxhcmdlO1xyXG4kd2lkdGgtLXRhYmxldDogJHdpZHRoLS1tZWRpdW07XHJcbiR3aWR0aC0tZGVza3RvcDogJHdpZHRoLS1sYXJnZTtcclxuXHJcbi8vIEJyZWFrcG9pbnQgdmFyaWFibGVzIGFyZSBwcmVmaXhlZCB3aXRoIFwiJGJwLS1cIlxyXG4vLyBNb2JpbGUtZmlyc3QgcXVlcmllc1xyXG4kYnAtLXhzbWFsbC11cCAgOiAkd2lkdGgtLXhzbWFsbDtcclxuJGJwLS1zbWFsbC11cCAgIDogJHdpZHRoLS1zbWFsbDtcclxuJGJwLS1tZWRpdW0tdXAgIDogJHdpZHRoLS1tZWRpdW07XHJcbiRicC0tbWVkaXVtLXVwLS1tYWluLS1jb250ZW50ICA6ICR3aWR0aC0tbWVkaXVtLS1tYWluLS1jb250ZW50O1xyXG4kYnAtLXRhYmxldC11cFx0OiAkYnAtLW1lZGl1bS11cC0tbWFpbi0tY29udGVudDtcclxuJGJwLS05NjAtdXAgIFx0OiAkd2lkdGgtLTk2MDtcclxuJGJwLS1sYXJnZS11cCAgIDogJHdpZHRoLS1sYXJnZTtcclxuJGJwLS14bGFyZ2UtdXAgIDogJHdpZHRoLS14bGFyZ2U7XHJcblxyXG4vLyBNb2JpbGUtbGFzdCBxdWVyaWVzIChVU0UgU1BBUklOR0xZKVxyXG4kYnAtLXRhYmxldC1kb3duOiAkYnAtLXRhYmxldC11cCAtIDE7XHJcbiRicC0tc21hbGwtZG93bjogbWF4LXdpZHRoICR3aWR0aC0tbWVkaXVtIC0gMTtcclxuJGJwLS1tZWRpdW0tZG93bjogbWF4LXdpZHRoICR3aWR0aC0tbGFyZ2UgLSAxO1xyXG4kYnAtLTk2MC1kb3duOiBtYXgtd2lkdGggJHdpZHRoLS05NjAgLSAxO1xyXG4iLCIvLyAucGFyYWdyYXBocy1pdGVtLXNsaWRlciB7XHJcbi8vICAgJi5zbGlkZXItdHlwZS0xLFxyXG4vLyAgICYuc2xpZGVyLXR5cGUtMiB7XHJcbi8vICAgICAucGFyYWdyYXBocy1pdGVtLXNsaWRlci1pbWFnZSAuZmllbGQtbmFtZS1maWVsZC10ZXh0YXJlYS1ib2R5IHtcclxuLy8gICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuLy8gICAgIH1cclxuLy8gICB9XHJcbi8vIH1cclxuQGltcG9ydCBcIi4uLy4uL2JyZWFrcG9pbnQvYnJlYWtwb2ludFwiO1xyXG5cclxuYm9keS5zaWRlYmFyIHtcclxuICAjbWFpbiB7XHJcbiAgICAuc2lkZWJhciB7XHJcbiAgICAgIGJvcmRlci1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICAgICAgaDIge1xyXG4gICAgICAgIC8vYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgLmZpZWxkLW5hbWUtZmllbGQtcGFyYWdyYXBoLXNpZGViYXIgPiAuZmllbGQtaXRlbXMgPiAuZmllbGQtaXRlbTphZnRlcixcclxuICAgICAgLmZpZWxkLW5hbWUtZmllbGQtYmxvY2tyZWYtc2lkZWJhciA+IC5maWVsZC1pdGVtcyA+IC5maWVsZC1pdGVtOmFmdGVyLFxyXG4gICAgICAuZmllbGQtbmFtZS1maWVsZC1wZy1ibG9ja3JlZi1ibG9ja3JlZiA+IC5maWVsZC1pdGVtcyA+IC5maWVsZC1pdGVtOmFmdGVyLFxyXG4gICAgICAucmVnaW9uLXNpZGViYXIgPiAuYmxvY2s6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgLy8gLmZpZWxkLWl0ZW0ge1xyXG4gICAgICAvLyAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgICAvLyAgICY6bGFzdC1jaGlsZCB7XHJcbiAgICAgIC8vICAgICBib3JkZXItYm90dG9tOiBub25lO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuI21haW4gI2NvbnRlbnQge1xyXG4gIGRpdltpZCo9YmxvY2stdmlld3MtbmV3cy1uZXdzLWJsb2NrXSxcclxuICBkaXZbaWQqPWJsb2NrLXZpZXdzLWV2ZW50cy1ldmVudHMtYmxvY2tdLFxyXG4gIGRpdltpZCo9YmxvY2stdmlld3MtYmxvZy1ibG9nLWJsb2NrXSxcclxuICBkaXZbaWQqPWJsb2NrLXVjc2YtYjFnZm9vdC14bWxuZXdzLXN0YXJ0aW5ncG9pbnQteG1sbmV3c10sXHJcbiAgZGl2W2lkKj1ibG9jay11Y3NmLWIxZ2Zvb3QteG1sZXZlbnRzLXN0YXJ0aW5ncG9pbnQteG1sZXZlbnRzXSB7XHJcbiAgICAmID4gaDMge1xyXG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiNtYWluICNjb250ZW50IC5maWVsZC1uYW1lLWZpZWxkLXBnLXJlZi1wdWJzIC5maWVsZC1sYWJlbCxcclxuI21haW4gI2NvbnRlbnQgLmZpZWxkLW5hbWUtZmllbGQtcGctcmVmLXByb2ZpbGVzIC5maWVsZC1sYWJlbCxcclxuI21haW4gI2NvbnRlbnQgLmZpZWxkLW5hbWUtZmllbGQtcGVyc29uLXB1YmxpY2F0aW9ucy1saXN0IC5maWVsZC1sYWJlbCxcclxuI21haW4gI2NvbnRlbnQgLmZpZWxkLW5hbWUtZmllbGQtcGVyc29uLXB1Yi1vdmVycmlkZS1saXN0IC5maWVsZC1sYWJlbCxcclxuI21haW4gI2NvbnRlbnQgLmJsb2NrLXVjc2YtYjFnZm9vdC1wdWJsaWNhdGlvbiA+IGgzLFxyXG4jbWFpbiAjY29udGVudCAuYmxvY2stdWNzZi1iMWdmb290LXByb2ZpbGUgPiBoMyxcclxuI21haW4gI2NvbnRlbnQgLmJsb2NrLXVjc2YtYjFnZm9vdC1wcm9maWxlID4gaDMsXHJcbiNibG9jay12aWV3cy1ibG9nLXJlbGF0ZWQtYXV0aG9yLWJsb2NrID4gaDMsXHJcbiNibG9jay12aWV3cy1ibG9nLWJ5LWF1dGhvci1ibG9jayA+IGgzLFxyXG4ge1xyXG4gIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xyXG59XHJcblxyXG5cclxuLnNsaWRlci1uby1pbWFnZSAucmVnaW9uLWNvbnRlbnQtdG9we1xyXG4gICNibG9jay1maWVsZGJsb2NrLW5vZGUtcGFnZS1kZWZhdWx0LWZpZWxkLXBhcmFncmFwaC1zbGlkZXJzIHtcclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnNsaWRlci1pbWFnZS1iZWhpbmQgLnJlZ2lvbi1jb250ZW50LXRvcHtcclxuICAjYmxvY2stZmllbGRibG9jay1ub2RlLXBhZ2UtZGVmYXVsdC1maWVsZC1wYXJhZ3JhcGgtc2xpZGVycyB7XHJcbiAgICAucGFyYWdyYXBocy1pdGVtcyA+IC5maWVsZCA+IC5maWVsZC1pdGVtcyA+IC5zbGljay1saXN0ID5cclxuICAgIC5zbGljay10cmFjayA+IC5maWVsZC1pdGVtIHtcclxuICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICAgICAgfVxyXG4gICAgICBAaW5jbHVkZSBicmVha3BvaW50KCRicC0tOTYwLWRvd24pIHtcclxuICAgICAgICAmOmJlZm9yZSB7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLmdyb3VwLXNsaWRlci1jb250ZW50IHtcclxuICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLmZpZWxkLW5hbWUtZmllbGQtcGctc2xpZGVyLWltYWdlIHtcclxuICAgICAgJjphZnRlciB7XHJcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnNsaWRlci1pbWFnZS1sZWZ0IC5yZWdpb24tY29udGVudC10b3B7XHJcbiAgI2Jsb2NrLWZpZWxkYmxvY2stbm9kZS1wYWdlLWRlZmF1bHQtZmllbGQtcGFyYWdyYXBoLXNsaWRlcnMge1xyXG4gICAgJjphZnRlciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4uc2xpZGVyLWltYWdlLXJpZ2h0IC5yZWdpb24tY29udGVudC10b3B7XHJcbiAgLmdyb3VwLXNsaWRlci1jb250ZW50IHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICB9XHJcbn1cclxuXHJcblxyXG4uc2xpZGVyLWltYWdlLXJpZ2h0IC5yZWdpb24tY29udGVudC10b3B7XHJcbiAgI2Jsb2NrLWZpZWxkYmxvY2stbm9kZS1wYWdlLWRlZmF1bHQtZmllbGQtcGFyYWdyYXBoLXNsaWRlcnMge1xyXG4gICAgJjphZnRlciB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLy8gLnd5c2l3eWdfcXVvdGUge1xyXG4vLyAgICY6YmVmb3JlIHtcclxuLy8gICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuI21haW4gI2NvbnRlbnQgI2Jsb2NrLXZpZXdzLWV2ZW50cy1ldmVudHMtYmxvY2sge1xyXG4gIGgyIHtcclxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gIH1cclxufVxyXG5cclxuI21haW4gI2NvbnRlbnQgI2Jsb2NrLXZpZXdzLXB1YmxpY2F0aW9ucy1ibG9jayB7XHJcbiAgaDIge1xyXG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICRzZWNvbmRhcnktY29sb3I7XHJcbiAgfVxyXG59XHJcblxyXG4vLyAud3lzaXd5Z19xdW90ZTpiZWZvcmUge1xyXG4vLyAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbi8vIH1cclxuXHJcbi52aWV3LWRpc3BsYXktaWQtYmxvZ19wYWdlIC5ibG9nLWF1dGhvci1uYW1lIGEsXHJcbi5ub2RlLWJsb2cgLmJ5bGluZS1hdXRob3IgYSB7XHJcbiAgY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbn1cclxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIERlZmF1bHQgVmFyaWFibGVzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4kQnJlYWtwb2ludC1TZXR0aW5nczogKFxyXG4gICdkZWZhdWx0IG1lZGlhJzogYWxsLFxyXG4gICdkZWZhdWx0IGZlYXR1cmUnOiBtaW4td2lkdGgsXHJcbiAgJ2RlZmF1bHQgcGFpcic6IHdpZHRoLFxyXG4gICdmb3JjZSBhbGwgbWVkaWEgdHlwZSc6IGZhbHNlLFxyXG4gICd0byBlbXMnOiBmYWxzZSxcclxuICAndHJhbnNmb3JtIHJlc29sdXRpb25zJzogdHJ1ZSxcclxuICAnbm8gcXVlcmllcyc6IGZhbHNlLFxyXG4gICdubyBxdWVyeSBmYWxsYmFja3MnOiBmYWxzZSxcclxuICAnYmFzZSBmb250IHNpemUnOiAxNnB4LFxyXG4gICdsZWdhY3kgc3ludGF4JzogZmFsc2VcclxuKTtcclxuXHJcbiRicmVha3BvaW50OiAoKSAhZGVmYXVsdDtcclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBJbXBvcnRzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AaW1wb3J0IFwic2V0dGluZ3NcIjtcclxuQGltcG9ydCAnY29udGV4dCc7XHJcbkBpbXBvcnQgJ2hlbHBlcnMnO1xyXG5AaW1wb3J0ICdwYXJzZXJzJztcclxuQGltcG9ydCAnbm8tcXVlcnknO1xyXG5cclxuQGltcG9ydCAncmVzcG9uZC10byc7XHJcblxyXG5AaW1wb3J0IFwibGVnYWN5LXNldHRpbmdzXCI7XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gQnJlYWtwb2ludCBNaXhpblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcbkBtaXhpbiBicmVha3BvaW50KCRxdWVyeSwgJG5vLXF1ZXJ5OiBmYWxzZSkge1xyXG4gIEBpbmNsdWRlIGxlZ2FjeS1zZXR0aW5ncy13YXJuaW5nO1xyXG5cclxuICAvLyBSZXNldCBjb250ZXh0c1xyXG4gIEBpbmNsdWRlIHByaXZhdGUtYnJlYWtwb2ludC1yZXNldC1jb250ZXh0cygpO1xyXG5cclxuICAkYnJlYWtwb2ludDogYnJlYWtwb2ludCgkcXVlcnksIGZhbHNlKTtcclxuXHJcbiAgJHF1ZXJ5LXN0cmluZzogbWFwLWdldCgkYnJlYWtwb2ludCwgJ3F1ZXJ5Jyk7XHJcbiAgJHF1ZXJ5LWZhbGxiYWNrOiBtYXAtZ2V0KCRicmVha3BvaW50LCAnZmFsbGJhY2snKTtcclxuXHJcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLWdldCgkYnJlYWtwb2ludCwgJ2NvbnRleHQgaG9sZGVyJykgIWdsb2JhbDtcclxuICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiBtYXAtZ2V0KCRicmVha3BvaW50LCAncXVlcnkgY291bnQnKSAhZ2xvYmFsO1xyXG5cclxuICAvLyBBbGxvdyBmb3IgYW4gYXMtbmVlZGVkIG92ZXJyaWRlIG9yIHVzYWdlIG9mIG5vIHF1ZXJ5IGZhbGxiYWNrLlxyXG4gIEBpZiAkbm8tcXVlcnkgIT0gZmFsc2Uge1xyXG4gICAgJHF1ZXJ5LWZhbGxiYWNrOiAkbm8tcXVlcnk7XHJcbiAgfVxyXG5cclxuICBAaWYgJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlIHtcclxuICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCduby1xdWVyeScsICRxdWVyeS1mYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICAvLyBQcmludCBPdXQgUXVlcnkgU3RyaW5nXHJcbiAgQGlmIG5vdCBicmVha3BvaW50LWdldCgnbm8gcXVlcmllcycpIHtcclxuICAgIEBtZWRpYSAjeyRxdWVyeS1zdHJpbmd9IHtcclxuICAgICAgQGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAaWYgYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpICE9IGZhbHNlIG9yIGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyaWVzJykgPT0gdHJ1ZSB7XHJcblxyXG4gICAgJHR5cGU6IHR5cGUtb2YoYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpKTtcclxuICAgICRwcmludDogZmFsc2U7XHJcblxyXG4gICAgQGlmICgkdHlwZSA9PSAnYm9vbCcpIHtcclxuICAgICAgJHByaW50OiB0cnVlO1xyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgKCR0eXBlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIEBpZiAkcXVlcnktZmFsbGJhY2sgPT0gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpIHtcclxuICAgICAgICAkcHJpbnQ6IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEBlbHNlIGlmICgkdHlwZSA9PSAnbGlzdCcpIHtcclxuICAgICAgQGVhY2ggJHdyYXBwZXIgaW4gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpIHtcclxuICAgICAgICBAaWYgJHF1ZXJ5LWZhbGxiYWNrID09ICR3cmFwcGVyIHtcclxuICAgICAgICAgICRwcmludDogdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBXcml0ZSBGYWxsYmFja1xyXG4gICAgQGlmICgkcXVlcnktZmFsbGJhY2sgIT0gZmFsc2UpIGFuZCAoJHByaW50ID09IHRydWUpIHtcclxuICAgICAgJHR5cGUtZmFsbGJhY2s6IHR5cGUtb2YoJHF1ZXJ5LWZhbGxiYWNrKTtcclxuXHJcbiAgICAgIEBpZiAoJHR5cGUtZmFsbGJhY2sgIT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgI3skcXVlcnktZmFsbGJhY2t9ICYge1xyXG4gICAgICAgICAgQGNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICBAY29udGVudDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGluY2x1ZGUgcHJpdmF0ZS1icmVha3BvaW50LXJlc2V0LWNvbnRleHRzKCk7XHJcbn1cclxuXHJcblxyXG5AbWl4aW4gbXEoJHF1ZXJ5LCAkbm8tcXVlcnk6IGZhbHNlKSB7XHJcbiAgQGluY2x1ZGUgYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeSkge1xyXG4gICAgQGNvbnRlbnQ7XHJcbiAgfVxyXG59XHJcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBIYXMgU2V0dGluZ1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaGFzKCRzZXR0aW5nKSB7XHJcbiAgQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50LCAkc2V0dGluZykge1xyXG4gICAgQHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEdldCBTZXR0aW5nc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtZ2V0KCRzZXR0aW5nKSB7XHJcbiAgQGlmIGJyZWFrcG9pbnQtaGFzKCRzZXR0aW5nKSB7XHJcbiAgICBAcmV0dXJuIG1hcC1nZXQoJGJyZWFrcG9pbnQsICRzZXR0aW5nKTtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQHJldHVybiBtYXAtZ2V0KCRCcmVha3BvaW50LVNldHRpbmdzLCAkc2V0dGluZyk7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gU2V0IFNldHRpbmdzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1zZXQoJHNldHRpbmcsICR2YWx1ZSkge1xyXG4gIEBpZiAoc3RyLWluZGV4KCRzZXR0aW5nLCAnLScpIG9yIHN0ci1pbmRleCgkc2V0dGluZywgJ18nKSkgYW5kIHN0ci1pbmRleCgkc2V0dGluZywgJyAnKSA9PSBudWxsIHtcclxuICAgIEB3YXJuIFwiV29yZHMgaW4gQnJlYWtwb2ludCBzZXR0aW5ncyBzaG91bGQgYmUgc2VwYXJhdGVkIGJ5IHNwYWNlcywgbm90IGRhc2hlcyBvciB1bmRlcnNjb3Jlcy4gUGxlYXNlIHJlcGxhY2UgZGFzaGVzIGFuZCB1bmRlcnNjb3JlcyBiZXR3ZWVuIHdvcmRzIHdpdGggc3BhY2VzLiBTZXR0aW5ncyB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIHVudGlsIGNoYW5nZWQuXCI7XHJcbiAgfVxyXG4gICRicmVha3BvaW50OiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnQsICgkc2V0dGluZzogJHZhbHVlKSkgIWdsb2JhbDtcclxuICBAcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbkBtaXhpbiBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKSB7XHJcbiAgJGJyZWFrcG9pbnQtY2hhbmdlOiBicmVha3BvaW50LXNldCgkc2V0dGluZywgJHZhbHVlKTtcclxufVxyXG5cclxuQG1peGluIGJyZWFrcG9pbnQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpIHtcclxuICBAaW5jbHVkZSBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKTtcclxufVxyXG5cclxuQG1peGluIGJrcHQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpIHtcclxuICBAaW5jbHVkZSBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKTtcclxufVxyXG5AbWl4aW4gYmtwdC1zZXQoJHNldHRpbmcsICR2YWx1ZSkge1xyXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQtY2hhbmdlKCRzZXR0aW5nLCAkdmFsdWUpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmVtb3ZlIFNldHRpbmdcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncy4uLikge1xyXG4gIEBpZiBsZW5ndGgoJHNldHRpbmdzKSA9PSAxIHtcclxuICAgICRzZXR0aW5nczogbnRoKCRzZXR0aW5ncywgMSk7XHJcbiAgfVxyXG5cclxuICBAZWFjaCAkc2V0dGluZyBpbiAkc2V0dGluZ3Mge1xyXG4gICAgJGJyZWFrcG9pbnQ6IG1hcC1yZW1vdmUoJGJyZWFrcG9pbnQsICRzZXR0aW5nKSAhZ2xvYmFsO1xyXG4gIH1cclxuICBAcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbkBtaXhpbiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncy4uLikge1xyXG4gICRicmVha3BvaW50LXJlc2V0OiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncyk7XHJcbn1cclxuXHJcbkBtaXhpbiBia3B0LXJlc2V0KCRzZXR0aW5ncy4uLikge1xyXG4gICRicmVha3BvaW50LXJlc2V0OiBicmVha3BvaW50LXJlc2V0KCRzZXR0aW5ncyk7XHJcbn0iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUHJpdmF0ZSBCcmVha3BvaW50IFZhcmlhYmxlc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogKCk7XHJcbiRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IDAgIWRlZmF1bHQ7XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gQnJlYWtwb2ludCBIYXMgQ29udGV4dFxyXG4vLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHlvdSBhcmUgaW5zaWRlIGEgQnJlYWtwb2ludCBxdWVyeVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtaGFzLWNvbnRleHQoKSB7XHJcbiAgQGlmIGxlbmd0aCgkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50KSB7XHJcbiAgICBAcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gQnJlYWtwb2ludCBHZXQgQ29udGV4dFxyXG4vLyAkZmVhdHVyZTogSW5wdXQgZmVhdHVyZSB0byBnZXQgaXQncyBjdXJyZW50IE1RIGNvbnRleHQuIFJldHVybnMgZmFsc2UgaWYgbm8gY29udGV4dFxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtZ2V0LWNvbnRleHQoJGZlYXR1cmUpIHtcclxuICBAaWYgbWFwLWhhcy1rZXkoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpIHtcclxuICAgICRnZXQ6IG1hcC1nZXQoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpO1xyXG4gICAgLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBuby1xdWVyeSBmcm9tIGdldCBzaWRlIHNvIC9mYWxzZS8gcHJlcGVuZHMgYXJlbid0IHJldHVybmVkXHJcbiAgICBAaWYgJGZlYXR1cmUgPT0gJ25vLXF1ZXJ5JyB7XHJcbiAgICAgIEBpZiB0eXBlLW9mKCRnZXQpID09ICdsaXN0JyBhbmQgbGVuZ3RoKCRnZXQpID4gMSBhbmQgbnRoKCRnZXQsIDEpID09IGZhbHNlIHtcclxuICAgICAgICAkZ2V0OiBudGgoJGdldCwgbGVuZ3RoKCRnZXQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgQHJldHVybiAkZ2V0O1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAaWYgYnJlYWtwb2ludC1oYXMtY29udGV4dCgpIGFuZCAkZmVhdHVyZSA9PSAnbWVkaWEnIHtcclxuICAgICAgQHJldHVybiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpO1xyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICBAcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFByaXZhdGUgZnVuY3Rpb24gdG8gc2V0IGNvbnRleHRcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICR2YWx1ZSkge1xyXG4gIEBpZiAkdmFsdWUgPT0gJ21vbm9jaHJvbWUnIHtcclxuICAgICRmZWF0dXJlOiAnbW9ub2Nocm9tZSc7XHJcbiAgfVxyXG5cclxuICAkY3VycmVudDogbWFwLWdldCgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSk7XHJcbiAgQGlmICRjdXJyZW50IGFuZCBsZW5ndGgoJGN1cnJlbnQpID09ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xyXG4gICAgQHdhcm4gXCJZb3UgaGF2ZSBhbHJlYWR5IHF1ZXJpZWQgYWdhaW5zdCBgI3skZmVhdHVyZX1gLiBVbmV4cGVjdGVkIHRoaW5ncyBtYXkgaGFwcGVuIGlmIHlvdSBxdWVyeSBhZ2FpbnN0IHRoZSBzYW1lIGZlYXR1cmUgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgYGFuZGAgcXVlcnkuIEJyZWFrcG9pbnQgaXMgb3ZlcndyaXRpbmcgdGhlIGN1cnJlbnQgY29udGV4dCB3aXRoIGAjeyR2YWx1ZX1gXCI7XHJcbiAgfVxyXG5cclxuICBAaWYgbm90IG1hcC1oYXMta2V5KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKSB7XHJcbiAgICAkdi1ob2xkZXI6ICgpO1xyXG4gICAgQGZvciAkaSBmcm9tIDEgdG8gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XHJcbiAgICAgIEBpZiAkZmVhdHVyZSA9PSAnbWVkaWEnIHtcclxuICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykpO1xyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsIGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCAkdmFsdWUpO1xyXG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLW1lcmdlKCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICgkZmVhdHVyZTogJHYtaG9sZGVyKSkgIWdsb2JhbDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgJHYtaG9sZGVyOiBtYXAtZ2V0KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKTtcclxuICAgICRsZW5ndGg6IGxlbmd0aCgkdi1ob2xkZXIpO1xyXG4gICAgQGZvciAkaSBmcm9tICRsZW5ndGggdG8gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCAtIDEge1xyXG4gICAgICBAaWYgJGZlYXR1cmUgPT0gJ21lZGlhJyB7XHJcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpKTtcclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgJHZhbHVlKTtcclxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1tZXJnZSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAoJGZlYXR1cmU6ICR2LWhvbGRlcikpICFnbG9iYWw7XHJcbiAgfVxyXG5cclxuICBAcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBQcml2YXRlIGZ1bmN0aW9uIHRvIHJlc2V0IGNvbnRleHRcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBtaXhpbiBwcml2YXRlLWJyZWFrcG9pbnQtcmVzZXQtY29udGV4dHMge1xyXG4gICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpICFnbG9iYWw7XHJcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZ2xvYmFsO1xyXG59IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIENvbnZlcnRzIHRoZSBpbnB1dCB2YWx1ZSB0byBCYXNlIEVNc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkdmFsdWUpIHtcclxuICAkdmFsdWUtdW5pdDogdW5pdCgkdmFsdWUpO1xyXG5cclxuICAvLyBXaWxsIGNvbnZlcnQgcmVsYXRpdmUgRU1zIGludG8gcm9vdCBFTXMuXHJcbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpIGFuZCB0eXBlLW9mKGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpKSA9PSAnbnVtYmVyJyBhbmQgJHZhbHVlLXVuaXQgPT0gJ2VtJyB7XHJcbiAgICAkYmFzZS11bml0OiB1bml0KGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpKTtcclxuXHJcbiAgICBAaWYgJGJhc2UtdW5pdCA9PSAncHgnIG9yICRiYXNlLXVuaXQgPT0gJyUnIG9yICRiYXNlLXVuaXQgPT0gJ2VtJyBvciAkYmFzZS11bml0ID09ICdwdCcge1xyXG4gICAgICBAcmV0dXJuIGJhc2UtY29udmVyc2lvbigkdmFsdWUpIC8gYmFzZS1jb252ZXJzaW9uKGJyZWFrcG9pbnQtZ2V0KCdiYXNlIGZvbnQgc2l6ZScpKSAqIDFlbTtcclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgQHdhcm4gJyN7YnJlYWtwb2ludC1nZXQoXFwnYmFzZSBmb250IHNpemVcXCcpfSBpcyBub3Qgc2V0IGluIHZhbGlkIHVuaXRzIGZvciBmb250IHNpemUhJztcclxuICAgICAgQHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQHJldHVybiBiYXNlLWNvbnZlcnNpb24oJHZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbkBmdW5jdGlvbiBiYXNlLWNvbnZlcnNpb24oJHZhbHVlKSB7XHJcbiAgJHVuaXQ6IHVuaXQoJHZhbHVlKTtcclxuXHJcbiAgQGlmICR1bml0ID09ICdweCcge1xyXG4gICAgQHJldHVybiAkdmFsdWUgLyAxNnB4ICogMWVtO1xyXG4gIH1cclxuICBAZWxzZSBpZiAkdW5pdCA9PSAnJScge1xyXG4gICAgQHJldHVybiAkdmFsdWUgLyAxMDAlICogMWVtO1xyXG4gIH1cclxuICBAZWxzZSBpZiAkdW5pdCA9PSAnZW0nIHtcclxuICAgIEByZXR1cm4gJHZhbHVlO1xyXG4gIH1cclxuICBAZWxzZSBpZiAkdW5pdCA9PSAncHQnIHtcclxuICAgIEByZXR1cm4gJHZhbHVlIC8gMTJwdCAqIDFlbTtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQHJldHVybiAkdmFsdWU7XHJcbi8vICAgIEB3YXJuICdFdmVyeXRoaW5nIGlzIHRlcnJpYmxlISBXaGF0IGhhdmUgeW91IGRvbmU/ISc7XHJcbiAgfVxyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiBoYXZlIGEgbWluL21heCBwYWlyXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4kYnJlYWtwb2ludC1taW4tbWF4LWZlYXR1cmVzOiAnY29sb3InLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sb3ItaW5kZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNwZWN0LXJhdGlvJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RldmljZS1hc3BlY3QtcmF0aW8nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLWhlaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2Utd2lkdGgnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vbm9jaHJvbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzb2x1dGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc7XHJcblxyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1taW4tbWF4KCRmZWF0dXJlKSB7XHJcbiAgQGVhY2ggJGl0ZW0gaW4gJGJyZWFrcG9pbnQtbWluLW1heC1mZWF0dXJlcyB7XHJcbiAgICBAaWYgJGZlYXR1cmUgPT0gJGl0ZW0ge1xyXG4gICAgICBAcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmUgY2FuIGhhdmUgYSBzdHJpbmcgdmFsdWVcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiRicmVha3BvaW50LXN0cmluZy1mZWF0dXJlczogICdvcmllbnRhdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY2FuJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzcGVjdC1yYXRpbycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvaW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHVtaW5vc2l0eSc7XHJcblxyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1zdHJpbmctdmFsdWUoJGZlYXR1cmUpIHtcclxuICBAZWFjaCAkaXRlbSBpbiAkYnJlYWtwb2ludC1zdHJpbmctZmVhdHVyZXMge1xyXG4gICAgQGlmIGJyZWFrcG9pbnQtbWluLW1heCgkaXRlbSkge1xyXG4gICAgICBAaWYgJGZlYXR1cmUgPT0gJ21pbi0jeyRpdGVtfScgb3IgJGZlYXR1cmUgPT0gJ21heC0jeyRpdGVtfScge1xyXG4gICAgICAgIEByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgJGZlYXR1cmUgPT0gJGl0ZW0ge1xyXG4gICAgICBAcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmUgaXMgYSBtZWRpYSB0eXBlXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4kYnJlYWtwb2ludC1tZWRpYS10eXBlczogICdhbGwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdicmFpbGxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1ib3NzZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdoYW5kaGVsZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvamVjdGlvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmVlbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwZWVjaCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R2JztcclxuXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWlzLW1lZGlhKCRmZWF0dXJlKSB7XHJcbiAgQGVhY2ggJG1lZGlhIGluICRicmVha3BvaW50LW1lZGlhLXR5cGVzIHtcclxuICAgIEBpZiAoJGZlYXR1cmUgPT0gJG1lZGlhKSBvciAoJGZlYXR1cmUgPT0gJ25vdCAjeyRtZWRpYX0nKSBvciAoJGZlYXR1cmUgPT0gJ29ubHkgI3skbWVkaWF9Jykge1xyXG4gICAgICBAcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiBzdGFuZCBhbG9uZVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuJGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZy1mZWF0dXJlczogJ2NvbG9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yLWluZGV4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyaWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9ub2Nocm9tZSc7XHJcblxyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRmZWF0dXJlKSB7XHJcbiAgQGVhY2ggJGl0ZW0gaW4gJGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZy1mZWF0dXJlcyB7XHJcbiAgICBAaWYgJGZlYXR1cmUgPT0gJGl0ZW0ge1xyXG4gICAgICBAcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGZlYXR1cmVcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWlzLXJlc29sdXRpb24oJGZlYXR1cmUpIHtcclxuICAkcmVzb2x1dGlvbnM6ICdkZXZpY2UtcGl4ZWwtcmF0aW8nLCAnZHByJztcclxuXHJcbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnKSB7XHJcbiAgICAkcmVzb2x1dGlvbnM6IGFwcGVuZCgkcmVzb2x1dGlvbnMsICdyZXNvbHV0aW9uJyk7XHJcbiAgfVxyXG5cclxuICBAZWFjaCAkcmVzbyBpbiAkcmVzb2x1dGlvbnMge1xyXG4gICAgQGlmIGluZGV4KCRmZWF0dXJlLCAkcmVzbykgb3IgaW5kZXgoJGZlYXR1cmUsICdtaW4tI3skcmVzb30nKSBvciBpbmRleCgkZmVhdHVyZSwgJ21heC0jeyRyZXNvfScpIHtcclxuICAgICAgQHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQHJldHVybiBmYWxzZTtcclxufVxyXG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gSW1wb3J0IFBhcnNlciBQaWVjZXNcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBpbXBvcnQgXCJwYXJzZXJzL3F1ZXJ5XCI7XHJcbkBpbXBvcnQgXCJwYXJzZXJzL3NpbmdsZVwiO1xyXG5AaW1wb3J0IFwicGFyc2Vycy9kb3VibGVcIjtcclxuQGltcG9ydCBcInBhcnNlcnMvdHJpcGxlXCI7XHJcbkBpbXBvcnQgXCJwYXJzZXJzL3Jlc29sdXRpb25cIjtcclxuXHJcbiRNZW1vLUV4aXN0czogZnVuY3Rpb24tZXhpc3RzKG1lbW8tZ2V0KSBhbmQgZnVuY3Rpb24tZXhpc3RzKG1lbW8tc2V0KTtcclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBCcmVha3BvaW50IEZ1bmN0aW9uXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gYnJlYWtwb2ludCgkcXVlcnksICRjb250ZXh0cy4uLikge1xyXG4gICRydW46IHRydWU7XHJcbiAgJHJldHVybjogKCk7XHJcblxyXG4gIC8vIEdyYWIgdGhlIE1lbW8gT3V0cHV0IGlmIE1lbW9pemF0aW9uIGNhbiBiZSBhIHRoaW5nXHJcbiAgQGlmICRNZW1vLUV4aXN0cyB7XHJcbiAgICAkcmV0dXJuOiBtZW1vLWdldChicmVha3BvaW50LCBicmVha3BvaW50ICRxdWVyeSAkY29udGV4dHMpO1xyXG5cclxuICAgIEBpZiAkcmV0dXJuICE9IG51bGwge1xyXG4gICAgICAkcnVuOiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBpZiBub3QgJE1lbW8tRXhpc3RzIG9yICRydW4ge1xyXG4gICAgLy8gSW50ZXJuYWwgVmFyaWFibGVzXHJcbiAgICAkcXVlcnktc3RyaW5nOiAnJztcclxuICAgICRxdWVyeS1mYWxsYmFjazogZmFsc2U7XHJcbiAgICAkcmV0dXJuOiAoKTtcclxuXHJcbiAgICAvLyBSZXNlcnZlIEdsb2JhbCBQcml2YXRlIEJyZWFrcG9pbnQgQ29udGV4dFxyXG4gICAgJGhvbGRlci1jb250ZXh0OiAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyO1xyXG4gICAgJGhvbGRlci1xdWVyeS1jb3VudDogJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDtcclxuXHJcbiAgICAvLyBSZXNldCBHbG9iYWwgUHJpdmF0ZSBCcmVha3BvaW50IENvbnRleHRcclxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpICFnbG9iYWw7XHJcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFnbG9iYWw7XHJcblxyXG5cclxuICAgIC8vIFRlc3QgdG8gc2VlIGlmIGl0J3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdFxyXG4gICAgJG9yLWxpc3Q6IGlmKGxpc3Qtc2VwYXJhdG9yKCRxdWVyeSkgPT0gJ2NvbW1hJywgdHJ1ZSwgZmFsc2UpO1xyXG5cclxuXHJcbiAgICBAaWYgKCRvci1saXN0ID09IGZhbHNlIGFuZCBicmVha3BvaW50LWdldCgnbGVnYWN5IHN5bnRheCcpID09IGZhbHNlKSB7XHJcbiAgICAgICRxdWVyeS1zdHJpbmc6IGJyZWFrcG9pbnQtcGFyc2UoJHF1ZXJ5KTtcclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgJGxlbmd0aDogbGVuZ3RoKCRxdWVyeSk7XHJcblxyXG4gICAgICAkbGFzdDogbnRoKCRxdWVyeSwgJGxlbmd0aCk7XHJcbiAgICAgICRxdWVyeS1mYWxsYmFjazogYnJlYWtwb2ludC1uby1xdWVyeSgkbGFzdCk7XHJcblxyXG4gICAgICBAaWYgKCRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSkge1xyXG4gICAgICAgICRsZW5ndGg6ICRsZW5ndGggLSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCdsZWdhY3kgc3ludGF4JykgPT0gdHJ1ZSkge1xyXG4gICAgICAgICRtcTogKCk7XHJcblxyXG4gICAgICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGxlbmd0aCB7XHJcbiAgICAgICAgICAkbXE6IGFwcGVuZCgkbXEsIG50aCgkcXVlcnksICRpKSwgY29tbWEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJHF1ZXJ5LXN0cmluZzogYnJlYWtwb2ludC1wYXJzZSgkbXEpO1xyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICAkcXVlcnktc3RyaW5nOiAnJztcclxuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGgge1xyXG4gICAgICAgICAgJHF1ZXJ5LXN0cmluZzogJHF1ZXJ5LXN0cmluZyArIGlmKCRpID09IDEsICcnLCAnLCAnKSArIGJyZWFrcG9pbnQtcGFyc2UobnRoKCRxdWVyeSwgJGkpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkcmV0dXJuOiAoJ3F1ZXJ5JzogJHF1ZXJ5LXN0cmluZyxcclxuICAgICAgICAnZmFsbGJhY2snOiAkcXVlcnktZmFsbGJhY2ssXHJcbiAgICAgICAgJ2NvbnRleHQgaG9sZGVyJzogJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcixcclxuICAgICAgICAncXVlcnkgY291bnQnOiAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50XHJcbiAgICApO1xyXG4gICAgQGlmIGxlbmd0aCgkY29udGV4dHMpID4gMCBhbmQgbnRoKCRjb250ZXh0cywgMSkgIT0gZmFsc2Uge1xyXG4gICAgICBAaWYgJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlIHtcclxuICAgICAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgnbm8tcXVlcnknLCAkcXVlcnktZmFsbGJhY2spO1xyXG4gICAgICB9XHJcbiAgICAgICRjb250ZXh0LW1hcDogKCk7XHJcbiAgICAgIEBlYWNoICRjb250ZXh0IGluICRjb250ZXh0cyB7XHJcbiAgICAgICAgJGNvbnRleHQtbWFwOiBtYXAtbWVyZ2UoJGNvbnRleHQtbWFwLCAoJGNvbnRleHQ6IGJyZWFrcG9pbnQtZ2V0LWNvbnRleHQoJGNvbnRleHQpKSk7XHJcbiAgICAgIH1cclxuICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sIChjb250ZXh0OiAkY29udGV4dC1tYXApKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNldCBHbG9iYWwgUHJpdmF0ZSBCcmVha3BvaW50IENvbnRleHRcclxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpICFnbG9iYWw7XHJcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFnbG9iYWw7XHJcblxyXG4gICAgQGlmICRNZW1vLUV4aXN0cyB7XHJcbiAgICAgICRob2xkZXI6IG1lbW8tc2V0KGJyZWFrcG9pbnQsIGJyZWFrcG9pbnQgJHF1ZXJ5ICRjb250ZXh0cywgJHJldHVybik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAcmV0dXJuICRyZXR1cm47XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBHZW5lcmFsIEJyZWFrcG9pbnQgUGFyc2VyXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZSgkcXVlcnkpIHtcclxuICAvLyBJbmNyZWFzZSBudW1iZXIgb2YgJ2FuZCcgcXVlcmllc1xyXG4gICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQgKyAxICFnbG9iYWw7XHJcblxyXG4gIC8vIFNldCB1cCBNZWRpYSBUeXBlXHJcbiAgJHF1ZXJ5LXByaW50OiAnJztcclxuXHJcbiAgJGZvcmNlLWFsbDogKChicmVha3BvaW50LWdldCgnZm9yY2UgYWxsIG1lZGlhIHR5cGUnKSA9PSB0cnVlKSBhbmQgKGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykgPT0gJ2FsbCcpKTtcclxuICAkZW1wdHktbWVkaWE6IHRydWU7XHJcbiAgQGlmICgkZm9yY2UtYWxsID09IHRydWUpIG9yIChicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpICE9ICdhbGwnKSB7XHJcbiAgICAvLyBGb3JjZSB0aGUgcHJpbnQgb2YgdGhlIGRlZmF1bHQgbWVkaWEgdHlwZSBpZiAoZm9yY2UgYWxsIGlzIHRydWUgYW5kIGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBhbGwpIG9yIChkZWZhdWx0IG1lZGlhIHR5cGUgaXMgbm90IGFsbClcclxuICAgICRxdWVyeS1wcmludDogYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKTtcclxuICAgICRlbXB0eS1tZWRpYTogZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgJHF1ZXJ5LXJlc29sdXRpb246IGZhbHNlO1xyXG5cclxuICAkcXVlcnktaG9sZGVyOiBicmVha3BvaW50LXBhcnNlLXF1ZXJ5KCRxdWVyeSk7XHJcblxyXG5cclxuXHJcbiAgLy8gTG9vcCBvdmVyIGVhY2ggcGFyc2VkIG91dCBxdWVyeSBhbmQgd3JpdGUgaXQgdG8gJHF1ZXJ5LXByaW50XHJcbiAgJGZpcnN0OiB0cnVlO1xyXG5cclxuICBAZWFjaCAkZmVhdHVyZSBpbiAkcXVlcnktaG9sZGVyIHtcclxuICAgICRsZW5ndGg6IGxlbmd0aCgkZmVhdHVyZSk7XHJcblxyXG4gICAgLy8gUGFyc2UgYSBzaW5nbGUgZmVhdHVyZVxyXG4gICAgQGlmICgkbGVuZ3RoID09IDEpIHtcclxuICAgICAgLy8gRmVhdHVyZSBpcyBjdXJyZW50bHkgYSBsaXN0LCBncmFiIHRoZSBhY3R1YWwgdmFsdWVcclxuICAgICAgJGZlYXR1cmU6IG50aCgkZmVhdHVyZSwgMSk7XHJcblxyXG4gICAgICAvLyBNZWRpYSBUeXBlIG11c3QgYnkgY29udmVudGlvbiBiZSB0aGUgZmlyc3QgaXRlbSwgc28gaXQncyBzYWZlIHRvIGZsYXQgb3ZlcnJpZGUgJHF1ZXJ5LXByaW50LCB3aGljaCByaWdodCBub3cgc2hvdWxkIG9ubHkgYmUgdGhlIGRlZmF1bHQgbWVkaWEgdHlwZVxyXG4gICAgICBAaWYgKGJyZWFrcG9pbnQtaXMtbWVkaWEoJGZlYXR1cmUpKSB7XHJcbiAgICAgICAgQGlmICgkZm9yY2UtYWxsID09IHRydWUpIG9yICgkZmVhdHVyZSAhPSAnYWxsJykge1xyXG4gICAgICAgICAgLy8gRm9yY2UgdGhlIHByaW50IG9mIHRoZSBkZWZhdWx0IG1lZGlhIHR5cGUgaWYgKGZvcmNlIGFsbCBpcyB0cnVlIGFuZCBkZWZhdWx0IG1lZGlhIHR5cGUgaXMgYWxsKSBvciAoZGVmYXVsdCBtZWRpYSB0eXBlIGlzIG5vdCBhbGwpXHJcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICRmZWF0dXJlO1xyXG4gICAgICAgICAgJGVtcHR5LW1lZGlhOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAvLyBTZXQgQ29udGV4dFxyXG4gICAgICAgICAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWVkaWEsICRxdWVyeS1wcmludCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xyXG4gICAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcclxuICAgICAgICAkZmlyc3Q6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBQYXJzZSBhIGRvdWJsZSBmZWF0dXJlXHJcbiAgICBAZWxzZSBpZiAoJGxlbmd0aCA9PSAyKSB7XHJcbiAgICAgIEBpZiAoYnJlYWtwb2ludC1pcy1yZXNvbHV0aW9uKCRmZWF0dXJlKSAhPSBmYWxzZSkge1xyXG4gICAgICAgICRxdWVyeS1yZXNvbHV0aW9uOiAkZmVhdHVyZTtcclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJHBhcnNlZDogbnVsbDtcclxuICAgICAgICAvLyBJZiBpdCdzIGEgc3RyaW5nL251bWJlciBwYWlyLFxyXG4gICAgICAgIC8vIHdlIGNoZWNrIHRvIHNlZSBpZiBvbmUgaXMgYSBzaW5nbGUtc3RyaW5nIHZhbHVlLFxyXG4gICAgICAgIC8vIHRoZW4gd2UgcGFyc2UgaXQgYXMgYSBub3JtYWwgZG91YmxlXHJcbiAgICAgICAgJGFscGhhOiBudGgoJGZlYXR1cmUsIDEpO1xyXG4gICAgICAgICRiZXRhOiBudGgoJGZlYXR1cmUsIDIpO1xyXG4gICAgICAgIEBpZiBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGFscGhhKSBvciBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGJldGEpIHtcclxuICAgICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2Utc2luZ2xlKCRhbHBoYSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xyXG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xyXG4gICAgICAgICAgJGZpcnN0OiBmYWxzZTtcclxuICAgICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2Utc2luZ2xlKCRiZXRhLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XHJcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCk7XHJcbiAgICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XHJcbiAgICAgICAgICAkZmlyc3Q6IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gUGFyc2UgYSB0cmlwbGUgZmVhdHVyZVxyXG4gICAgQGVsc2UgaWYgKCRsZW5ndGggPT0gMykge1xyXG4gICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXRyaXBsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xyXG4gICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XHJcbiAgICAgICRmaXJzdDogZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgQGlmICgkcXVlcnktcmVzb2x1dGlvbiAhPSBmYWxzZSkge1xyXG4gICAgJHF1ZXJ5LXByaW50OiBicmVha3BvaW50LWJ1aWxkLXJlc29sdXRpb24oJHF1ZXJ5LXByaW50LCAkcXVlcnktcmVzb2x1dGlvbiwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xyXG4gIH1cclxuXHJcbiAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZmVhdHVyZSB0aGF0J3MgYmVlbiBkZXRlY3RlZCBzbyBmYXIgYW5kIGFwcGVuZCAnZmFsc2UnIHRvIHRoZSB0aGUgdmFsdWUgbGlzdCB0byBpbmNyZW1lbnQgdGhlaXIgY291bnRlcnNcclxuICBAZWFjaCAkZiwgJHYgaW4gJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciB7XHJcbiAgICAkdi1ob2xkZXI6ICR2O1xyXG4gICAgJGxlbmd0aDogbGVuZ3RoKCR2LWhvbGRlcik7XHJcbiAgICBAaWYgbGVuZ3RoKCR2LWhvbGRlcikgPCAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IHtcclxuICAgICAgQGZvciAkaSBmcm9tICRsZW5ndGggdG8gJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XHJcbiAgICAgICAgQGlmICRmID09ICdtZWRpYScge1xyXG4gICAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgQGVsc2Uge1xyXG4gICAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiBtYXAtbWVyZ2UoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgKCRmOiAkdi1ob2xkZXIpKSAhZ2xvYmFsO1xyXG4gIH1cclxuXHJcbiAgQHJldHVybiAkcXVlcnktcHJpbnQ7XHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtcXVlcnkoJHF1ZXJ5KSB7XHJcbiAgLy8gUGFyc2UgZmVhdHVyZXMgb3V0IG9mIGFuIGluZGl2aWR1YWwgcXVlcnlcclxuICAkZmVhdHVyZS1ob2xkZXI6ICgpO1xyXG4gICRxdWVyeS1ob2xkZXI6ICgpO1xyXG4gICRsZW5ndGg6IGxlbmd0aCgkcXVlcnkpO1xyXG5cclxuICBAaWYgJGxlbmd0aCA9PSAyIHtcclxuICAgIC8vIElmIHdlJ3ZlIGdvdCBhIHN0cmluZy9udW1iZXIsIG51bWJlci9zdHJpbmcsIGNoZWNrIHRvIHNlZSBpZiBpdCdzIGEgdmFsaWQgc3RyaW5nL251bWJlciBwYWlyIG9yIHR3byBzaW5nbGVzXHJcbiAgICBAaWYgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdzdHJpbmcnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnbnVtYmVyJykgb3IgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdudW1iZXInIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnc3RyaW5nJykge1xyXG5cclxuICAgICAgJG51bWJlcjogJyc7XHJcbiAgICAgICR2YWx1ZTogJyc7XHJcblxyXG4gICAgICBAaWYgdHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ3N0cmluZycge1xyXG4gICAgICAgICRudW1iZXI6IG50aCgkcXVlcnksIDIpO1xyXG4gICAgICAgICR2YWx1ZTogbnRoKCRxdWVyeSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgICRudW1iZXI6IG50aCgkcXVlcnksIDEpO1xyXG4gICAgICAgICR2YWx1ZTogbnRoKCRxdWVyeSwgMik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIElmIHRoZSBzdHJpbmcgdmFsdWUgY2FuIGJlIGEgc2luZ2xlIHZhbHVlLCBjaGVjayB0byBzZWUgaWYgdGhlIG51bWJlciBwYXNzZWQgaW4gaXMgYSB2YWxpZCBpbnB1dCBmb3Igc2FpZCBzaW5nbGUgdmFsdWUuIEZvcnR1bmF0ZWx5LCBhbGwgY3VycmVudCBzaW5nbGUtdmFsdWUgb3B0aW9ucyBvbmx5IGFjY2VwdCB1bml0bGVzcyBudW1iZXJzLCBzbyB0aGlzIGNoZWNrIGlzIGVhc3kuXHJcbiAgICAgIEBpZiBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJHZhbHVlKSB7XHJcbiAgICAgICAgQGlmIHVuaXRsZXNzKCRudW1iZXIpIHtcclxuICAgICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKCR2YWx1ZSwgJG51bWJlciwgc3BhY2UpO1xyXG4gICAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xyXG4gICAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgbWVkaWEgdHlwZSwgc3BsaXQgdGhlIHF1ZXJ5XHJcbiAgICAgIEBpZiBicmVha3BvaW50LWlzLW1lZGlhKCR2YWx1ZSkge1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCBudGgoJHF1ZXJ5LCAxKSk7XHJcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsIG50aCgkcXVlcnksIDIpKTtcclxuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgaXQncyBub3QgYSBzaW5nbGUgZmVhdHVyZSwgd2UncmUganVzdCBnb2luZyB0byBhc3N1bWUgaXQncyBhIHByb3BlciBzdHJpbmcvdmFsdWUgcGFpciwgYW5kIHJvbGwgd2l0aCBpdC5cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKCR2YWx1ZSwgJG51bWJlciwgc3BhY2UpO1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcclxuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvLyBJZiB0aGV5J3JlIGJvdGggbnVtYmVycywgd2UgYXNzdW1lIGl0J3MgYSBkb3VibGUgYW5kIHJvbGwgd2l0aCB0aGF0XHJcbiAgICBAZWxzZSBpZiAodHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ251bWJlcicgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpID09ICdudW1iZXInKSB7XHJcbiAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDEpLCBudGgoJHF1ZXJ5LCAyKSwgc3BhY2UpO1xyXG4gICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XHJcbiAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcclxuICAgIH1cclxuICAgIC8vIElmIHRoZXkncmUgYm90aCBzdHJpbmdzIGFuZCBuZWl0aGVyIGFyZSBzaW5nbGVzLCB3ZSByb2xsIHdpdGggdGhhdC5cclxuICAgIEBlbHNlIGlmICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnc3RyaW5nJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ3N0cmluZycpIHtcclxuICAgICAgQGlmIG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMSkpIGFuZCBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDIpKSB7XHJcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMSksIG50aCgkcXVlcnksIDIpLCBzcGFjZSk7XHJcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xyXG4gICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBAZWxzZSBpZiAkbGVuZ3RoID09IDMge1xyXG4gICAgLy8gSWYgd2UndmUgZ290IHRocmVlIGl0ZW1zIGFuZCBub25lIGlzIGEgbGlzdCwgd2UgY2hlY2sgdG8gc2VlXHJcbiAgICBAaWYgdHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgIT0gJ2xpc3QnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSAhPSAnbGlzdCcgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMykpICE9ICdsaXN0JyB7XHJcbiAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGl0ZW1zIGFyZSBzaW5nbGUgc3RyaW5nIHZhbHVlcyBhbmQgbm9uZSBvZiB0aGUgdmFsdWVzIGFyZSBtZWRpYSB2YWx1ZXMsIHdlJ3JlIGdvb2QuXHJcbiAgICAgIEBpZiAobm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAxKSkgYW5kIG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMikpIGFuZCBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDMpKSkgYW5kICAoKG5vdCBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDEpKSBhbmQgbm90IGJyZWFrcG9pbnQtaXMtbWVkaWEobnRoKCRxdWVyeSwgMikpIGFuZCBub3QgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAzKSkpKSB7XHJcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMSksIG50aCgkcXVlcnksIDIpLCBzcGFjZSk7XHJcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQoJGZlYXR1cmUtaG9sZGVyLCBudGgoJHF1ZXJ5LCAzKSwgc3BhY2UpO1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcclxuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgICAgIH1cclxuICAgICAgLy8gbGV0J3MgY2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCBpdGVtIGlzIGEgbWVkaWEgdHlwZVxyXG4gICAgICBAZWxzZSBpZiBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDEpKSB7XHJcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsIG50aCgkcXVlcnksIDEpKTtcclxuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZChudGgoJHF1ZXJ5LCAyKSwgbnRoKCRxdWVyeSwgMyksIHNwYWNlKTtcclxuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyKTtcclxuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIElmIGl0J3MgYSBzaW5nbGUgaXRlbSwgb3IgaWYgaXQncyBub3QgYSBzcGVjaWFsIGNhc2UgZG91YmxlIG9yIHRyaXBsZSwgd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHF1ZXJ5LlxyXG4gIEByZXR1cm4gJHF1ZXJ5O1xyXG59XHJcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBJbXBvcnQgUGllY2VzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AaW1wb3J0IFwic2luZ2xlL2RlZmF1bHRcIjtcclxuXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcclxuICAkcGFyc2VkOiAnJztcclxuICAkbGVhZGVyOiAnJztcclxuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXHJcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xyXG4gICAgJGxlYWRlcjogJ2FuZCAnO1xyXG4gIH1cclxuXHJcbiAgLy8gSWYgaXQncyBhIHNpbmdsZSBmZWF0dXJlIHRoYXQgY2FuIHN0YW5kIGFsb25lLCB3ZSBsZXQgaXRcclxuICBAaWYgKGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkZmVhdHVyZSkpIHtcclxuICAgICRwYXJzZWQ6ICRmZWF0dXJlO1xyXG4gICAgLy8gU2V0IENvbnRleHRcclxuICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkZmVhdHVyZSk7XHJcbiAgfVxyXG4gIC8vIElmIGl0J3Mgbm90IGEgc3RhbmQgYWxvbmUgZmVhdHVyZSwgd2UgcGFzcyBpdCBvZmYgdG8gdGhlIGRlZmF1bHQgaGFuZGxlci5cclxuICBAZWxzZSB7XHJcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRlZmF1bHQoJGZlYXR1cmUpO1xyXG4gIH1cclxuXHJcbiAgQHJldHVybiAkbGVhZGVyICsgJygnICsgJHBhcnNlZCArICcpJztcclxufVxyXG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0KCRmZWF0dXJlKSB7XHJcbiAgJGRlZmF1bHQ6IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IGZlYXR1cmUnKTtcclxuXHJcbiAgLy8gU2V0IENvbnRleHRcclxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZGVmYXVsdCwgJGZlYXR1cmUpO1xyXG5cclxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSBhbmQgKHR5cGUtb2YoJGZlYXR1cmUpID09ICdudW1iZXInKSB7XHJcbiAgICBAcmV0dXJuICcjeyRkZWZhdWx0fTogI3ticmVha3BvaW50LXRvLWJhc2UtZW0oJGZlYXR1cmUpfSc7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEByZXR1cm4gJyN7JGRlZmF1bHR9OiAjeyRmZWF0dXJlfSc7XHJcbiAgfVxyXG59XHJcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBJbXBvcnQgUGllY2VzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AaW1wb3J0IFwiZG91YmxlL2RlZmF1bHQtcGFpclwiO1xyXG5AaW1wb3J0IFwiZG91YmxlL2RvdWJsZS1zdHJpbmdcIjtcclxuQGltcG9ydCBcImRvdWJsZS9kZWZhdWx0XCI7XHJcblxyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kb3VibGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KSB7XHJcbiAgJHBhcnNlZDogJyc7XHJcbiAgJGxlYWRlcjogJyc7XHJcbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xyXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcclxuICAgICRsZWFkZXI6ICdhbmQgJztcclxuICB9XHJcblxyXG4gICRmaXJzdDogbnRoKCRmZWF0dXJlLCAxKTtcclxuICAkc2Vjb25kOiBudGgoJGZlYXR1cmUsIDIpO1xyXG5cclxuICAvLyBJZiB3ZSd2ZSBnb3QgdHdvIG51bWJlcnMsIHdlIGtub3cgd2UgbmVlZCB0byB1c2UgdGhlIGRlZmF1bHQgcGFpciBiZWNhdXNlIHRoZXJlIGFyZSBubyBtZWRpYSBxdWVyaWVzIHRoYXQgaGFzIGEgbWVkaWEgZmVhdHVyZSB0aGF0IGlzIGEgbnVtYmVyXHJcbiAgQGlmIHR5cGUtb2YoJGZpcnN0KSA9PSAnbnVtYmVyJyBhbmQgdHlwZS1vZigkc2Vjb25kKSA9PSAnbnVtYmVyJyB7XHJcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRlZmF1bHQtcGFpcigkZmlyc3QsICRzZWNvbmQpO1xyXG4gIH1cclxuICAvLyBJZiB0aGV5IGFyZSBib3RoIHN0cmluZ3MsIHdlIHNlbmQgaXQgdGhyb3VnaCB0aGUgc3RyaW5nIHBhcnNlclxyXG4gIEBlbHNlIGlmIHR5cGUtb2YoJGZpcnN0KSA9PSAnc3RyaW5nJyBhbmQgdHlwZS1vZigkc2Vjb25kKSA9PSAnc3RyaW5nJyB7XHJcbiAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1zdHJpbmcoJGZpcnN0LCAkc2Vjb25kKTtcclxuICB9XHJcbiAgLy8gSWYgaXQncyBhIHN0cmluZy9udW1iZXIgcGFpciwgd2UgcGFyc2UgaXQgYXMgYSBub3JtYWwgZG91YmxlXHJcbiAgQGVsc2Uge1xyXG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtZGVmYXVsdCgkZmlyc3QsICRzZWNvbmQpO1xyXG4gIH1cclxuXHJcbiAgQHJldHVybiAkbGVhZGVyICsgJHBhcnNlZDtcclxufVxyXG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0LXBhaXIoJGZpcnN0LCAkc2Vjb25kKSB7XHJcbiAgJGRlZmF1bHQ6IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IHBhaXInKTtcclxuICAkbWluOiAnJztcclxuICAkbWF4OiAnJztcclxuXHJcbiAgLy8gU29ydCBpbnRvIG1pbiBhbmQgbWF4XHJcbiAgJG1pbjogbWluKCRmaXJzdCwgJHNlY29uZCk7XHJcbiAgJG1heDogbWF4KCRmaXJzdCwgJHNlY29uZCk7XHJcblxyXG4gIC8vIFNldCBDb250ZXh0XHJcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWluLSN7JGRlZmF1bHR9LCAkbWluKTtcclxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtYXgtI3skZGVmYXVsdH0sICRtYXgpO1xyXG5cclxuICAvLyBNYWtlIHRoZW0gRU1zIGlmIG5lZWQgYmVcclxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSB7XHJcbiAgICAkbWluOiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1pbik7XHJcbiAgICAkbWF4OiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1heCk7XHJcbiAgfVxyXG5cclxuICBAcmV0dXJuICcobWluLSN7JGRlZmF1bHR9OiAjeyRtaW59KSBhbmQgKG1heC0jeyRkZWZhdWx0fTogI3skbWF4fSknO1xyXG59XHJcbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1zdHJpbmcoJGZpcnN0LCAkc2Vjb25kKSB7XHJcbiAgJGZlYXR1cmU6ICcnO1xyXG4gICR2YWx1ZTogJyc7XHJcblxyXG4gIC8vIFRlc3QgdG8gc2VlIHdoaWNoIGlzIHRoZSBmZWF0dXJlIGFuZCB3aGljaCBpcyB0aGUgdmFsdWVcclxuICBAaWYgKGJyZWFrcG9pbnQtc3RyaW5nLXZhbHVlKCRmaXJzdCkgPT0gdHJ1ZSkge1xyXG4gICAgJGZlYXR1cmU6ICRmaXJzdDtcclxuICAgICR2YWx1ZTogJHNlY29uZDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgJGZlYXR1cmU6ICRzZWNvbmQ7XHJcbiAgICAkdmFsdWU6ICRmaXJzdDtcclxuICB9XHJcblxyXG4gIC8vIFNldCBDb250ZXh0XHJcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICR2YWx1ZSk7XHJcblxyXG4gIEByZXR1cm4gJygjeyRmZWF0dXJlfTogI3skdmFsdWV9KSc7XHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlLWRlZmF1bHQoJGZpcnN0LCAkc2Vjb25kKSB7XHJcbiAgJGZlYXR1cmU6ICcnO1xyXG4gICR2YWx1ZTogJyc7XHJcblxyXG4gIEBpZiB0eXBlLW9mKCRmaXJzdCkgPT0gJ3N0cmluZycge1xyXG4gICAgJGZlYXR1cmU6ICRmaXJzdDtcclxuICAgICR2YWx1ZTogJHNlY29uZDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgJGZlYXR1cmU6ICRzZWNvbmQ7XHJcbiAgICAkdmFsdWU6ICRmaXJzdDtcclxuICB9XHJcblxyXG4gIC8vIFNldCBDb250ZXh0XHJcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGZlYXR1cmUsICR2YWx1ZSk7XHJcblxyXG4gIEBpZiAoYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpID09IHRydWUpIHtcclxuICAgICR2YWx1ZTogYnJlYWtwb2ludC10by1iYXNlLWVtKCR2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBAcmV0dXJuICcoI3skZmVhdHVyZX06ICN7JHZhbHVlfSknXHJcbn1cclxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEltcG9ydCBQaWVjZXNcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBpbXBvcnQgXCJ0cmlwbGUvZGVmYXVsdFwiO1xyXG5cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xyXG4gICRwYXJzZWQ6ICcnO1xyXG4gICRsZWFkZXI6ICcnO1xyXG5cclxuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXHJcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xyXG4gICAgJGxlYWRlcjogJ2FuZCAnO1xyXG4gIH1cclxuXHJcbiAgLy8gc2VwYXJhdGUgdGhlIHN0cmluZyBmZWF0dXJlcyBmcm9tIHRoZSB2YWx1ZSBudW1iZXJzXHJcbiAgJHN0cmluZzogbnVsbDtcclxuICAkbnVtYmVyczogbnVsbDtcclxuICBAZWFjaCAkdmFsIGluICRmZWF0dXJlIHtcclxuICAgIEBpZiB0eXBlLW9mKCR2YWwpID09IHN0cmluZyB7XHJcbiAgICAgICRzdHJpbmc6ICR2YWw7XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIEBpZiB0eXBlLW9mKCRudW1iZXJzKSA9PSAnbnVsbCcge1xyXG4gICAgICAgICRudW1iZXJzOiAkdmFsO1xyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICAkbnVtYmVyczogYXBwZW5kKCRudW1iZXJzLCAkdmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS10cmlwbGUtZGVmYXVsdCgkc3RyaW5nLCBudGgoJG51bWJlcnMsIDEpLCBudGgoJG51bWJlcnMsIDIpKTtcclxuXHJcbiAgQHJldHVybiAkbGVhZGVyICsgJHBhcnNlZDtcclxuXHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlLWRlZmF1bHQoJGZlYXR1cmUsICRmaXJzdCwgJHNlY29uZCkge1xyXG5cclxuICAvLyBTb3J0IGludG8gbWluIGFuZCBtYXhcclxuICAkbWluOiBtaW4oJGZpcnN0LCAkc2Vjb25kKTtcclxuICAkbWF4OiBtYXgoJGZpcnN0LCAkc2Vjb25kKTtcclxuXHJcbiAgLy8gU2V0IENvbnRleHRcclxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtaW4tI3skZmVhdHVyZX0sICRtaW4pO1xyXG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1heC0jeyRmZWF0dXJlfSwgJG1heCk7XHJcblxyXG4gIC8vIE1ha2UgdGhlbSBFTXMgaWYgbmVlZCBiZVxyXG4gIEBpZiAoYnJlYWtwb2ludC1nZXQoJ3RvIGVtcycpID09IHRydWUpIHtcclxuICAgICRtaW46IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkbWluKTtcclxuICAgICRtYXg6IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkbWF4KTtcclxuICB9XHJcblxyXG4gIEByZXR1cm4gJyhtaW4tI3skZmVhdHVyZX06ICN7JG1pbn0pIGFuZCAobWF4LSN7JGZlYXR1cmV9OiAjeyRtYXh9KSc7XHJcbn1cclxuIiwiQGltcG9ydCBcInJlc29sdXRpb24vcmVzb2x1dGlvblwiO1xyXG5cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtYnVpbGQtcmVzb2x1dGlvbigkcXVlcnktcHJpbnQsICRxdWVyeS1yZXNvbHV0aW9uLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xyXG4gICRsZWFkZXI6ICcnO1xyXG4gIC8vIElmIHdlJ3JlIGZvcmNpbmdcclxuICBAaWYgbm90ICgkZW1wdHktbWVkaWEpIG9yIG5vdCAoJGZpcnN0KSB7XHJcbiAgICAkbGVhZGVyOiAnYW5kICc7XHJcbiAgfVxyXG5cclxuICBAaWYgYnJlYWtwb2ludC1nZXQoJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycpIGFuZCAkcXVlcnktcmVzb2x1dGlvbiB7XHJcbiAgICAkcmVzb2x1dGlvbnM6IGJyZWFrcG9pbnQtbWFrZS1yZXNvbHV0aW9ucygkcXVlcnktcmVzb2x1dGlvbik7XHJcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJHJlc29sdXRpb25zKTtcclxuICAgICRxdWVyeS1ob2xkZXI6ICcnO1xyXG5cclxuICAgIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggJGxlbmd0aCB7XHJcbiAgICAgICRxdWVyeTogJyN7JHF1ZXJ5LXByaW50fSAjeyRsZWFkZXJ9I3tudGgoJHJlc29sdXRpb25zLCAkaSl9JztcclxuICAgICAgQGlmICRpID09IDEge1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6ICRxdWVyeTtcclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogJyN7JHF1ZXJ5LWhvbGRlcn0sICN7JHF1ZXJ5fSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIC8vIFJldHVybiB3aXRoIGF0dGFjaGVkIHJlc29sdXRpb25cclxuICAgIEByZXR1cm4gJHF1ZXJ5LXByaW50O1xyXG4gIH1cclxufVxyXG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1tYWtlLXJlc29sdXRpb25zKCRyZXNvbHV0aW9uKSB7XHJcbiAgJGxlbmd0aDogbGVuZ3RoKCRyZXNvbHV0aW9uKTtcclxuXHJcbiAgJG91dHB1dDogKCk7XHJcblxyXG4gIEBpZiAkbGVuZ3RoID09IDIge1xyXG4gICAgJGZlYXR1cmU6ICcnO1xyXG4gICAgJHZhbHVlOiAnJztcclxuXHJcbiAgICAvLyBGaW5kIHdoaWNoIGlzIG51bWJlclxyXG4gICAgQGlmIHR5cGUtb2YobnRoKCRyZXNvbHV0aW9uLCAxKSkgPT0gJ251bWJlcicge1xyXG4gICAgICAkdmFsdWU6IG50aCgkcmVzb2x1dGlvbiwgMSk7XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgICR2YWx1ZTogbnRoKCRyZXNvbHV0aW9uLCAyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgbWluL21heC9zdGFuZGFyZFxyXG4gICAgQGlmIGluZGV4KCRyZXNvbHV0aW9uLCAnbWluLXJlc29sdXRpb24nKSB7XHJcbiAgICAgICRmZWF0dXJlOiAnbWluLSc7XHJcbiAgICB9XHJcbiAgICBAZWxzZSBpZiBpbmRleCgkcmVzb2x1dGlvbiwgJ21heC1yZXNvbHV0aW9uJykge1xyXG4gICAgICAkZmVhdHVyZTogJ21heC0nO1xyXG4gICAgfVxyXG5cclxuICAgICRzdGFuZGFyZDogJygjeyRmZWF0dXJlfXJlc29sdXRpb246ICN7JHZhbHVlfSknO1xyXG5cclxuICAgIC8vIElmIHdlJ3JlIG5vdCBkZWFsaW5nIHdpdGggZHBweCxcclxuICAgIEBpZiB1bml0KCR2YWx1ZSkgIT0gJ2RwcHgnIHtcclxuICAgICAgJGJhc2U6IDk2ZHBpO1xyXG4gICAgICBAaWYgdW5pdCgkdmFsdWUpID09ICdkcGNtJyB7XHJcbiAgICAgICAgJGJhc2U6IDI0My44NGRwY207XHJcbiAgICAgIH1cclxuICAgICAgLy8gV3JpdGUgb3V0IGZlYXR1cmUgdGVzdHNcclxuICAgICAgJHdlYmtpdDogJyc7XHJcbiAgICAgICRtb3o6ICcnO1xyXG4gICAgICAkd2Via2l0OiAnKC13ZWJraXQtI3skZmVhdHVyZX1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gJGJhc2V9KSc7XHJcbiAgICAgICRtb3o6ICcoI3skZmVhdHVyZX0tbW96LWRldmljZS1waXhlbC1yYXRpbzogI3skdmFsdWUgLyAkYmFzZX0pJztcclxuICAgICAgLy8gQXBwZW5kIHRvIG91dHB1dFxyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHN0YW5kYXJkLCBzcGFjZSk7XHJcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkd2Via2l0LCBzcGFjZSk7XHJcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkbW96LCBzcGFjZSk7XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgICR3ZWJraXQ6ICcnO1xyXG4gICAgICAkbW96OiAnJztcclxuICAgICAgJHdlYmtpdDogJygtd2Via2l0LSN7JGZlYXR1cmV9ZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvIDFkcHB4fSknO1xyXG4gICAgICAkbW96OiAnKCN7JGZlYXR1cmV9LW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gMWRwcHh9KSc7XHJcbiAgICAgICRmYWxsYmFjazogJygjeyRmZWF0dXJlfXJlc29sdXRpb246ICN7JHZhbHVlIC8gMWRwcHggKiA5NmRwaX0pJztcclxuICAgICAgLy8gQXBwZW5kIHRvIG91dHB1dFxyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHN0YW5kYXJkLCBzcGFjZSk7XHJcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkd2Via2l0LCBzcGFjZSk7XHJcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkbW96LCBzcGFjZSk7XHJcbiAgICAgICRvdXRwdXQ6IGFwcGVuZCgkb3V0cHV0LCAkZmFsbGJhY2ssIHNwYWNlKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBAcmV0dXJuICRvdXRwdXQ7XHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbm8tcXVlcnkoJHF1ZXJ5KSB7XHJcbiAgQGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSAnbGlzdCcge1xyXG4gICAgJGtleXdvcmQ6IG50aCgkcXVlcnksIDEpO1xyXG5cclxuICAgIEBpZiB0eXBlLW9mKCRrZXl3b3JkKSA9PSAnc3RyaW5nJyBhbmQgKCRrZXl3b3JkID09ICduby1xdWVyeScgb3IgJGtleXdvcmQgPT0gJ25vIHF1ZXJ5JyBvciAka2V5d29yZCA9PSAnZmFsbGJhY2snKSB7XHJcbiAgICAgIEByZXR1cm4gbnRoKCRxdWVyeSwgMik7XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIEByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBEZWZhdWx0IHRoZSBCcmVha3BvaW50cyB2YXJpYWJsZVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuJGJyZWFrcG9pbnRzOiAoKSAhZGVmYXVsdDtcclxuJEJSRUFLUE9JTlRTOiAoKSAhZGVmYXVsdDtcclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBSZXNwb25kLXRvIEFQSSBNaXhpblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQG1peGluIHJlc3BvbmQtdG8oJGNvbnRleHQsICRuby1xdWVyeTogZmFsc2UpIHtcclxuICBAaWYgbGVuZ3RoKCRicmVha3BvaW50cykgPiAwIGFuZCBsZW5ndGgoJEJSRUFLUE9JTlRTKSA9PSAwIHtcclxuICAgIEB3YXJuIFwiSW4gb3JkZXIgdG8gYXZvaWQgdmFyaWFibGUgbmFtZXNwYWNlIGNvbGxpc2lvbnMsIHdlIGhhdmUgdXBkYXRlZCB0aGUgd2F5IHRvIGFkZCBicmVha3BvaW50cyBmb3IgcmVzcG9uZC10by4gUGxlYXNlIGNoYW5nZSBhbGwgaW5zdGFuY2VzIG9mIGAkYnJlYWtwb2ludHM6IGFkZC1icmVha3BvaW50KClgIHRvIGBAaW5jbHVkZSBhZGQtYnJlYWtwb2ludCgpYC4gVGhlIGBhZGQtYnJlYWtwb2ludCgpYCBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIjtcclxuICAgICRCUkVBS1BPSU5UUzogJGJyZWFrcG9pbnRzICFnbG9iYWw7XHJcbiAgICAkYnJlYWtwb2ludHM6ICgpICFnbG9iYWw7XHJcbiAgfVxyXG5cclxuICBAaWYgdHlwZS1vZigkQlJFQUtQT0lOVFMpICE9ICdtYXAnIHtcclxuICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lb25lIHdyaXRlcyBnaWJiZXJpc2ggdG8gdGhlICRicmVha3BvaW50cyB2YXJpYWJsZS5cclxuICAgIEB3YXJuIFwiWW91ciBicmVha3BvaW50cyBhcmVuJ3QgYSBtYXAhIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc251Z3VnL3Jlc3BvbmQtdG8jYXBpIGlmIHlvdSdkIGxpa2UgYSByZW1pbmRlciBvbiBob3cgdG8gdXNlIFJlc3BvbmQtdG9cIjtcclxuICAgIEBjb250ZW50O1xyXG4gIH1cclxuICBAZWxzZSBpZiBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRjb250ZXh0KSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50KG1hcC1nZXQoJEJSRUFLUE9JTlRTLCAkY29udGV4dCksICRuby1xdWVyeSkge1xyXG4gICAgICBAY29udGVudDtcclxuICAgIH1cclxuICB9XHJcbiAgQGVsc2UgaWYgbm90IG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJGNvbnRleHQpIHtcclxuICAgIEB3YXJuIFwiYCN7JGNvbnRleHR9YCBpc24ndCBhIGRlZmluZWQgYnJlYWtwb2ludCEgUGxlYXNlIGFkZCBpdCB1c2luZyBgJGJyZWFrcG9pbnRzOiBhZGQtYnJlYWtwb2ludChgI3skY29udGV4dH1gLCAkdmFsdWUpO2BcIjtcclxuICAgIEBjb250ZW50O1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAd2FybiBcIllvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGJyZWFrcG9pbnRzIHlldCEgTWFrZSBzb21lIGFscmVhZHkhIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc251Z3VnL3Jlc3BvbmQtdG8jYXBpIGlmIHlvdSdkIGxpa2UgYSByZW1pbmRlciBvbiBob3cgdG8gdXNlIFJlc3BvbmQtdG9cIjtcclxuICAgIEBjb250ZW50O1xyXG4gIH1cclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEFkZCBCcmVha3BvaW50IHRvIEJyZWFrcG9pbnRzXHJcbi8vIFRPRE86IFJlbW92ZSBmdW5jdGlvbiBpbiBuZXh0IHJlbGVhc2VcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBhZGQtYnJlYWtwb2ludCgkbmFtZSwgJGJrcHQsICRvdmVyd3JpdGU6IGZhbHNlKSB7XHJcbiAgJG91dHB1dDogKCRuYW1lOiAkYmtwdCk7XHJcblxyXG4gIEBpZiBsZW5ndGgoJGJyZWFrcG9pbnRzKSA9PSAwIHtcclxuICAgIEByZXR1cm4gJG91dHB1dDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQGlmIG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJG5hbWUpIGFuZCAkb3ZlcndyaXRlICE9IHRydWUge1xyXG4gICAgICBAd2FybiBcIllvdSBhbHJlYWR5IGhhdmUgYSBicmVha3BvaW50IG5hbWVkIGAjeyRuYW1lfWAsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBicmVha3BvaW50IG5hbWUsIG9yIHBhc3MgaW4gYCRvdmVyd3JpdGU6IHRydWVgIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgYnJlYWtwb2ludC5cIjtcclxuICAgICAgQHJldHVybiAkYnJlYWtwb2ludHM7XHJcbiAgICB9XHJcbiAgICBAZWxzZSBpZiBub3QgbWFwLWhhcy1rZXkoJGJyZWFrcG9pbnRzLCAkbmFtZSkgb3IgJG92ZXJ3cml0ZSA9PSB0cnVlIHtcclxuICAgICAgQHJldHVybiBtYXAtbWVyZ2UoJGJyZWFrcG9pbnRzLCAkb3V0cHV0KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBtaXhpbiBhZGQtYnJlYWtwb2ludCgkbmFtZSwgJGJrcHQsICRvdmVyd3JpdGU6IGZhbHNlKSB7XHJcbiAgJG91dHB1dDogKCRuYW1lOiAkYmtwdCk7XHJcblxyXG4gIEBpZiBsZW5ndGgoJEJSRUFLUE9JTlRTKSA9PSAwIHtcclxuICAgICRCUkVBS1BPSU5UUzogJG91dHB1dCAhZ2xvYmFsO1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAaWYgbWFwLWhhcy1rZXkoJEJSRUFLUE9JTlRTLCAkbmFtZSkgYW5kICRvdmVyd3JpdGUgIT0gdHJ1ZSB7XHJcbiAgICAgIEB3YXJuIFwiWW91IGFscmVhZHkgaGF2ZSBhIGJyZWFrcG9pbnQgbmFtZWQgYCN7JG5hbWV9YCwgcGxlYXNlIGNob29zZSBhbm90aGVyIGJyZWFrcG9pbnQgbmFtZSwgb3IgcGFzcyBpbiBgJG92ZXJ3cml0ZTogdHJ1ZWAgdG8gb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBicmVha3BvaW50LlwiO1xyXG4gICAgICAkQlJFQUtQT0lOVFM6ICRCUkVBS1BPSU5UUyAhZ2xvYmFsO1xyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgbm90IG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJG5hbWUpIG9yICRvdmVyd3JpdGUgPT0gdHJ1ZSB7XHJcbiAgICAgICRCUkVBS1BPSU5UUzogbWFwLW1lcmdlKCRCUkVBS1BPSU5UUywgJG91dHB1dCkgIWdsb2JhbDtcclxuICAgIH1cclxuICB9XHJcbn0iLCJAbWl4aW4gbGVnYWN5LXNldHRpbmdzLXdhcm5pbmcge1xyXG4gICRsZWdhY3lWYXJzOiAoXHJcbiAgICAnZGVmYXVsdC1tZWRpYSc6ICdkZWZhdWx0IG1lZGlhJyxcclxuICAgICdkZWZhdWx0LWZlYXR1cmUnOiAnZGVmYXVsdCBmZWF0dXJlJyxcclxuICAgICdmb3JjZS1tZWRpYS1hbGwnOiAnZm9yY2UgYWxsIG1lZGlhIHR5cGUnLFxyXG4gICAgJ3RvLWVtcyc6ICd0byBlbXMnLFxyXG4gICAgJ3Jlc29sdXRpb25zJzogJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycsXHJcbiAgICAnbm8tcXVlcmllcyc6ICdubyBxdWVyaWVzJyxcclxuICAgICduby1xdWVyeS1mYWxsYmFja3MnOiAnbm8gcXVlcnkgZmFsbGJhY2tzJyxcclxuICAgICdiYXNlLWZvbnQtc2l6ZSc6ICdiYXNlIGZvbnQgc2l6ZScsXHJcbiAgICAnbGVnYWN5LXN5bnRheCc6ICdsZWdhY3kgc3ludGF4J1xyXG4gICk7XHJcblxyXG4gIEBlYWNoICRsZWdhY3ksICRuZXcgaW4gJGxlZ2FjeVZhcnMge1xyXG4gICAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtJyArICRsZWdhY3kpIHtcclxuICAgICAgQHdhcm4gXCJJbiBvcmRlciB0byBhdm9pZCB2YXJpYWJsZSBuYW1zcGFjZSBjb2xsaXNpb25zLCB3ZSBoYXZlIHVwZGF0ZWQgdGhlIHdheSB0byBjaGFuZ2Ugc2V0dGluZ3MgZm9yIEJyZWFrcG9pbnQuIFBsZWFzZSBjaGFuZ2UgYWxsIGluc3RhbmNlcyBvZiBgJGJyZWFrcG9pbnQtI3skbGVnYWN5fToge3tzZXR0aW5nfX1gIHRvIGBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnI3skbmV3fScsIHt7c2V0dGluZ319KWAuIFZhcmlhYmxlIHNldHRpbmdzLCBhcyB3ZWxsIGFzIHRoaXMgd2FybmluZyB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gYSBmdXR1cmUgcmVsZWFzZS5cIlxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vIEhhbmQgY29ycmVjdCBlYWNoIHNldHRpbmdcclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1kZWZhdWx0LW1lZGlhJykgYW5kICRicmVha3BvaW50LWRlZmF1bHQtbWVkaWEgIT0gYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnZGVmYXVsdCBtZWRpYScsICRicmVha3BvaW50LWRlZmF1bHQtbWVkaWEpO1xyXG4gIH1cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1kZWZhdWx0LWZlYXR1cmUnKSBhbmQgJGJyZWFrcG9pbnQtZGVmYXVsdC1mZWF0dXJlICE9IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IGZlYXR1cmUnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnZGVmYXVsdCBmZWF0dXJlJywgJGJyZWFrcG9pbnQtZGVmYXVsdC1mZWF0dXJlKTtcclxuICB9XHJcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtZm9yY2UtbWVkaWEtYWxsJykgYW5kICRicmVha3BvaW50LWZvcmNlLW1lZGlhLWFsbCAhPSBicmVha3BvaW50LWdldCgnZm9yY2UgYWxsIG1lZGlhIHR5cGUnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnZm9yY2UgYWxsIG1lZGlhIHR5cGUnLCAkYnJlYWtwb2ludC1mb3JjZS1tZWRpYS1hbGwpO1xyXG4gIH1cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC10by1lbXMnKSBhbmQgJGJyZWFrcG9pbnQtdG8tZW1zICE9IGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgndG8gZW1zJywgJGJyZWFrcG9pbnQtdG8tZW1zKTtcclxuICB9XHJcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtcmVzb2x1dGlvbnMnKSBhbmQgJGJyZWFrcG9pbnQtcmVzb2x1dGlvbnMgIT0gYnJlYWtwb2ludC1nZXQoJ3RyYW5zZm9ybSByZXNvbHV0aW9ucycpIHtcclxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnLCAkYnJlYWtwb2ludC1yZXNvbHV0aW9ucyk7XHJcbiAgfVxyXG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LW5vLXF1ZXJpZXMnKSBhbmQgJGJyZWFrcG9pbnQtbm8tcXVlcmllcyAhPSBicmVha3BvaW50LWdldCgnbm8gcXVlcmllcycpIHtcclxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdubyBxdWVyaWVzJywgJGJyZWFrcG9pbnQtbm8tcXVlcmllcyk7XHJcbiAgfVxyXG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LW5vLXF1ZXJ5LWZhbGxiYWNrcycpIGFuZCAkYnJlYWtwb2ludC1uby1xdWVyeS1mYWxsYmFja3MgIT0gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJ5IGZhbGxiYWNrcycpIHtcclxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdubyBxdWVyeSBmYWxsYmFja3MnLCAkYnJlYWtwb2ludC1uby1xdWVyeS1mYWxsYmFja3MpO1xyXG4gIH1cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1iYXNlLWZvbnQtc2l6ZScpIGFuZCAkYnJlYWtwb2ludC1iYXNlLWZvbnQtc2l6ZSAhPSBicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnYmFzZSBmb250IHNpemUnLCAkYnJlYWtwb2ludC1iYXNlLWZvbnQtc2l6ZSk7XHJcbiAgfVxyXG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWxlZ2FjeS1zeW50YXgnKSBhbmQgJGJyZWFrcG9pbnQtbGVnYWN5LXN5bnRheCAhPSBicmVha3BvaW50LWdldCgnbGVnYWN5IHN5bnRheCcpIHtcclxuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQtc2V0KCdsZWdhY3kgc3ludGF4JywgJGJyZWFrcG9pbnQtbGVnYWN5LXN5bnRheCk7XHJcbiAgfVxyXG59Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQzZDQTs7O0lBR0k7QUF1REosV0FBVztBQVdYLGlCQUFpQjtBQ3hHakIsQUFFSSxJQUZBLEFBQUEsUUFBUSxDQUNWLEtBQUssQ0FDSCxRQUFRLENBQUM7RUFDUCxZQUFZLEVEdUJGLE9BQU8sR0NQbEI7RUFuQkwsQUFPTSxJQVBGLEFBQUEsUUFBUSxDQUNWLEtBQUssQ0FDSCxRQUFRLENBS04sbUNBQW1DLEdBQUcsWUFBWSxHQUFHLFdBQVcsQUFBQSxNQUFNO0VBUDVFLElBQUksQUFBQSxRQUFRLENBQ1YsS0FBSyxDQUNILFFBQVEsQ0FNTixrQ0FBa0MsR0FBRyxZQUFZLEdBQUcsV0FBVyxBQUFBLE1BQU07RUFSM0UsSUFBSSxBQUFBLFFBQVEsQ0FDVixLQUFLLENBQ0gsUUFBUSxDQU9OLHNDQUFzQyxHQUFHLFlBQVksR0FBRyxXQUFXLEFBQUEsTUFBTTtFQVQvRSxJQUFJLEFBQUEsUUFBUSxDQUNWLEtBQUssQ0FDSCxRQUFRLENBUU4sZUFBZSxHQUFHLE1BQU0sQUFBQSxNQUFNLENBQUM7SUFDN0IsZ0JBQWdCLEVEZVIsT0FBTyxHQ2RoQjs7QUFXUCxBQU1JLEtBTkMsQ0FBQyxRQUFRLENBQ1osR0FBRyxDQUFBLEFBQUEsRUFBQyxFQUFELDJCQUFDLEFBQUEsSUFLRSxFQUFFO0FBTlYsS0FBSyxDQUFDLFFBQVEsQ0FFWixHQUFHLENBQUEsQUFBQSxFQUFDLEVBQUQsK0JBQUMsQUFBQSxJQUlFLEVBQUU7QUFOVixLQUFLLENBQUMsUUFBUSxDQUdaLEdBQUcsQ0FBQSxBQUFBLEVBQUMsRUFBRCwyQkFBQyxBQUFBLElBR0UsRUFBRTtBQU5WLEtBQUssQ0FBQyxRQUFRLENBSVosR0FBRyxDQUFBLEFBQUEsRUFBQyxFQUFELGdEQUFDLEFBQUEsSUFFRSxFQUFFO0FBTlYsS0FBSyxDQUFDLFFBQVEsQ0FLWixHQUFHLENBQUEsQUFBQSxFQUFDLEVBQUQsb0RBQUMsQUFBQSxJQUNFLEVBQUUsQ0FBQztFQUNMLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDREpkLE9BQU8sR0NLbEI7O0FBSUwsQUFBQSxLQUFLLENBQUMsUUFBUSxDQUFDLDZCQUE2QixDQUFDLFlBQVk7QUFDekQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxZQUFZO0FBQzdELEtBQUssQ0FBQyxRQUFRLENBQUMsMENBQTBDLENBQUMsWUFBWTtBQUN0RSxLQUFLLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxDQUFDLFlBQVk7QUFDdEUsS0FBSyxDQUFDLFFBQVEsQ0FBQywrQkFBK0IsR0FBRyxFQUFFO0FBQ25ELEtBQUssQ0FBQyxRQUFRLENBQUMsMkJBQTJCLEdBQUcsRUFBRTtBQUMvQyxLQUFLLENBQUMsUUFBUSxDQUFDLDJCQUEyQixHQUFHLEVBQUU7QUFDL0Msc0NBQXNDLEdBQUcsRUFBRTtBQUMzQyxpQ0FBaUMsR0FBRyxFQUFFLENBQ3JDO0VBQ0MsYUFBYSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENEbkJWLE9BQU8sR0NvQnRCOztBQUdELEFBRUksZ0JBRlksQ0FBQyxtQkFBbUIsQ0FDbEMsMkRBQTJELEFBQ3hELE1BQU0sQ0FBQztFQUNOLGdCQUFnQixFRDFCTixPQUFPLEdDMkJsQjs7QUFJTCxBQUlNLG9CQUpjLENBQUMsbUJBQW1CLENBQ3RDLDJEQUEyRCxDQUN6RCxpQkFBaUIsR0FBRyxNQUFNLEdBQUcsWUFBWSxHQUFHLFdBQVc7QUFDdkQsWUFBWSxHQUFHLFdBQVcsQUFDdkIsTUFBTSxDQUFDO0VBQ04sZ0JBQWdCLEVEcENSLE9BQU8sR0NxQ2hCOztBQ2JILE1BQU0sRUFBRyxTQUFTLEVBQUUsS0FBSztFRE83QixBQVFRLG9CQVJZLENBQUMsbUJBQW1CLENBQ3RDLDJEQUEyRCxDQUN6RCxpQkFBaUIsR0FBRyxNQUFNLEdBQUcsWUFBWSxHQUFHLFdBQVc7QUFDdkQsWUFBWSxHQUFHLFdBQVcsQUFLckIsT0FBTyxDQUFDO0lBQ1AsZ0JBQWdCLEVEeENWLE9BQU8sR0N5Q2Q7O0FBVlQsQUFjTSxvQkFkYyxDQUFDLG1CQUFtQixDQUN0QywyREFBMkQsQ0FZekQscUJBQXFCLEFBQ2xCLE1BQU0sQ0FBQztFQUNOLGdCQUFnQixFRDlDUixPQUFPLEdDK0NoQjs7QUFoQlAsQUFtQk0sb0JBbkJjLENBQUMsbUJBQW1CLENBQ3RDLDJEQUEyRCxDQWlCekQsaUNBQWlDLEFBQzlCLE1BQU0sQ0FBQztFQUNOLGdCQUFnQixFRG5EUixPQUFPLEdDb0RoQjs7QUFLUCxBQUVJLGtCQUZjLENBQUMsbUJBQW1CLENBQ3BDLDJEQUEyRCxBQUN4RCxNQUFNLENBQUM7RUFDTixnQkFBZ0IsRUQ1RE4sT0FBTyxHQzZEbEI7O0FBSUwsQUFDRSxtQkFEaUIsQ0FBQyxtQkFBbUIsQ0FDckMscUJBQXFCLENBQUM7RUFDbEIsZ0JBQWdCLEVEbkVOLE9BQU8sR0NvRXBCOztBQUlILEFBRUksbUJBRmUsQ0FBQyxtQkFBbUIsQ0FDckMsMkRBQTJELEFBQ3hELE1BQU0sQ0FBQztFQUNOLGdCQUFnQixFRDNFTixPQUFPLEdDNEVsQjs7QUFXTCxBQUNFLEtBREcsQ0FBQyxRQUFRLENBQUMsZ0NBQWdDLENBQzdDLEVBQUUsQ0FBQztFQUNELGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDRHpGWixPQUFPLEdDMEZwQjs7QUFHSCxBQUNFLEtBREcsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQzVDLEVBQUUsQ0FBQztFQUNELGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDRC9GWixPQUFPLEdDZ0dwQjs7QUFPSCxBQUFBLDBCQUEwQixDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDOUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7RUFDMUIsS0FBSyxFRHpHUyxPQUFPLEdDMEd0QiJ9 */
