/*!***************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/App.vue?vue&type=style&index=0&id=5bcdaf03&lang=css ***!
  \***************************************************************************************************************************************************************************************************************************************************/
@import url(https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap);
/*!**************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./assets/styles/main.css ***!
  \**************************************************************************************************/
html {
    font-size: 18px !important;
}

body {
    background-color: white;
    font-family: "Roboto", Arial, Helvetica, sans-serif;
    font-size: 0.9rem;
    overflow: hidden;
}

header {
    display: flex;
    justify-content: space-between;
    width: 100%;
    height: 2.4rem;
    align-items: center;
    background-color: white;
}

h1 {
    font-family: "Comfortaa";
    font-size: 2rem;
    color: #444;
    margin-bottom: 0.05rem;
    margin-left: 0.5rem;
    font-weight: bold;
}

.logo {
    color: #ccc;
    padding: 0 1.5rem 0 1.5rem;
}

.auth {
    position: relative;
    max-width: 50%;
    float: right;
    margin: 0.5rem 1rem;
    font-size: 0.8rem;
}

.flash div {
    margin: 0 1rem 0.5rem 1rem;
    border-radius: 7px;
}

.main {
    clear: both;
    margin: 0 1rem;
}

.page {
    margin: 0 auto;
    padding: 1rem;
    background-color: #f8f8f8;
    border-radius: 7px;
}

.card {
    max-width: 50%;
    min-height: 50%;
    margin: 1rem auto;
}

.card-header {
    background-color: #e8e8e8;
}

a:hover {
    text-decoration: none;
}

::-webkit-scrollbar {
    width: 13px;
    border: 1px solid #fff;
}

::-webkit-scrollbar-button {
    height: 3px;
    background-color: #fff;
}

::-webkit-scrollbar-thumb {
    background: #eee;
    border-radius: 35px;
    border: 3px solid #fff;
}

::-webkit-scrollbar-thumb:hover {
    background: silver;
}

::-webkit-scrollbar-corner {
    background: #fff;
}

::-webkit-scrollbar-resizer {
    background: #c8c8c8;
}

div.resizable-b {
    height: 12px !important;
    width: 20% !important;
    bottom: -1px !important;
    margin-left: 50% !important;
    left: -10% !important;
}

div.resizable-b:hover {
    opacity: 0.7;
    border-bottom: 4px double white;
}
/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/TaskCard.vue?vue&type=style&index=0&id=b0f520a0&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************/

textarea[data-v-b0f520a0] {
        font-size: 0.65rem;
        color: #444;
        border: 1px solid #eee;
        width: 100%;
        height: 2.2rem;
}
input[type=checkbox][data-v-b0f520a0] {
        margin: 2px 0 0;
        opacity: 0.5;
}
.task[data-v-b0f520a0] {
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        border-radius: 7px 35px;
        box-shadow: 0 2px 2px rgba(0, 0, 0, 0.26);
        box-sizing: content-box;
        font-size: 0.7rem;
        margin: 0;
        margin-bottom: 0.2rem;
        padding: 0.4rem;
        min-height: 2rem;
        color: white;
        text-align: left;
}
.task.disabled[data-v-b0f520a0] {
        background-color: #e0e0e0 !important;
        box-shadow: 0 1px 1px rgba(0, 0, 0, 0.26);
}
.task[data-v-b0f520a0]:hover {
        cursor: pointer;
}
.task.duplicable[data-v-b0f520a0]:hover {
        cursor: copy;
}
.task div.content[data-v-b0f520a0] {
        overflow: hidden;
        height: 100%;
        line-height: 0.8rem;
}
.task div.activity[data-v-b0f520a0] {
        opacity: 0.7;
        margin-bottom: 2px;
        font-size: 0.65rem;
}
.task.disabled div.activity[data-v-b0f520a0] {
        color: gray !important;
}
.task div.activity[data-v-b0f520a0]:hover {
        opacity: 1;
}
.task span.description[data-v-b0f520a0] {
        font-size: 0.65rem;
        line-height: 0.84rem;
        white-space: pre-wrap;
        word-break: break-word;
}
.task.disabled span.description[data-v-b0f520a0] {
        color: gray !important;
}
.task span.description[data-v-b0f520a0]:hover {
        opacity: 0.7;
}
.task div.footer[data-v-b0f520a0] {
        display: flex;
        justify-content: space-between;
        height: 0.6rem;
        margin: 0;
        padding: 0;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/TaskSearch.vue?vue&type=style&index=0&id=6c802770&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

p[data-v-6c802770] {
        margin: 0;
}
input#query[data-v-6c802770] {
        font-size: 0.8rem;
        width: 15rem;
}
select#activityFilter[data-v-6c802770] {
        /* font-size: 0.8rem; */
        width: 9rem;
        padding: 0.15rem;
}

/*!***********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/BaseDuration.vue?vue&type=style&index=0&id=aae34900&scoped=true&lang=css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************/

div[data-v-aae34900] {
        display: inline;
}
small[data-v-aae34900] {
        font-size: 0.8em;
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/TaskSearchResultCard.vue?vue&type=style&index=0&id=08c98eb5&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************/

div.search-result[data-v-08c98eb5] {
        background-color: #eee;
        margin-right: 0.5rem;
        padding: 0.1rem;
        height: 3rem;
        width: 6rem;
        font-size: 0.8rem;
        border-radius: 3px 7px;
        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.26);
}
div.search-result[data-v-08c98eb5]:hover {
        cursor: pointer;
        background-color: #270041;
        border-color: #270041;
}
div.search-result.selected[data-v-08c98eb5] {
        background-color: white;
        box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.26);
        opacity: 1;
        cursor: default;
}
table.days[data-v-08c98eb5] {
        padding: 0.1rem;
        width: 100%;
        height: 100%;
        border-collapse: collapse;
        table-layout: fixed;
}
td.day[data-v-08c98eb5] {
        padding: 0.01rem;
        vertical-align: top;
        width: 17%;
}
td.dimmed[data-v-08c98eb5] {
        width: 8%;
}
td.missing[data-v-08c98eb5] {
        height: 100%;
        background-color: white;
        opacity: 0.4;
        border-radius: 3px 7px;
}
div.task[data-v-08c98eb5] {
        display: flex;
        flex-direction: column;
        justify-content: space-between;
        border-radius: 0.4px 2px;
        box-sizing: content-box;
        margin: 0.1rem;
        padding: 0.1rem;
}

/*!****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/TaskSearchResults.vue?vue&type=style&index=0&id=ef37a884&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************/

div.search-results[data-v-ef37a884] {
        overflow-x: auto;
        overflow-y: hidden;
        background-color: #f8f8f8;
        border-left: 1px solid #eee;
        border-right: 1px solid #eee;
        padding: 0.5rem;
        margin: 0;
        white-space: nowrap;
        scroll-behavior: smooth;
}
div.search-results[data-v-ef37a884]::-webkit-scrollbar {
        height: 8px;
}
div.search-results[data-v-ef37a884]::-webkit-scrollbar-thumb {
        background-color: #e0e0e0;
        border-radius: 4px;
}
div.search-results[data-v-ef37a884]::-webkit-scrollbar-button {
        display: none;
}
div.month-summary[data-v-ef37a884] {
        padding: 0 0.25rem;
        margin-left: 0.5rem;
        text-align: right;
}
div.month-summary div[data-v-ef37a884] {
        font-size: 0.9rem;
        font-weight: normal;
        border-radius: 5px;
        padding: 0 0.2rem;
        margin: 0;
}
div.month-summary div.date[data-v-ef37a884] {
        font-weight: bold;
}
div.month-summary small[data-v-ef37a884] {
        font-size: 0.7em;
}
div.month-summary div.duration[data-v-ef37a884] {
        line-height: 1.2rem;
        font-size: 0.8rem;
        background-color: #ccc;
        color: white;
        padding: 0.05rem 0;
        margin-right: 0.2rem;
        display: inline-block;
        white-space: nowrap;
}
.fade-enter-active[data-v-ef37a884],
    .fade-leave-active[data-v-ef37a884] {
        transition: height 0.3s ease, opacity 0.3s ease;
}
.fade-enter-from[data-v-ef37a884],
    .fade-leave-to[data-v-ef37a884] {
        height: 0;
        opacity: 0;
}
.fade-enter-to[data-v-ef37a884],
    .fade-leave-from[data-v-ef37a884] {
        height: 4.5rem;
        opacity: 1;
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/TheTimeline.vue?vue&type=style&index=0&id=79744d27&scoped=true&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************/

.timeline-page[data-v-79744d27] {
        height: 100vh;
        display: flex;
        flex-direction: column;
}
header[data-v-79744d27] {
        height: 3rem;
        border-radius: 10px 10px 0 0;
        border: 1px solid #eee;
        display: flex;
        justify-content: space-between;
        text-align: baseline;
        align-items: center;
        padding: 0 0.25rem;
        margin: 0;
        background-color: #f8f8f8;
}
header div[data-v-79744d27] {
        display: flex;
        justify-content: space-evenly;
        font-size: 0.7rem;
        padding: 0 0.3rem;
        white-space: nowrap;
}
header p[data-v-79744d27] {
        margin: 0;
}
header div.filters[data-v-79744d27] {
        display: flex;
        justify-content: space-around;
        width: 100%;
        /* font-weight: bold; */
        font-size: 0.9rem;
}
div.timeline[data-v-79744d27] {
        width: 100%;
        flex: 1 1 auto; /* take remaining height automatically */
        min-height: 0;   /* allow inner scrolling in flex container */
        overflow-x: hidden;
        overflow-y: auto;
        white-space: nowrap;
        scroll-behavior: smooth;
        border-bottom: 1px solid #eee;
}
div.timeline[data-v-79744d27]::-webkit-scrollbar {
        width: 8px;
}
div.timeline[data-v-79744d27]::-webkit-scrollbar-thumb {
        background-color: #e0e0e0;
        border-radius: 4px;
}
div.timeline[data-v-79744d27]::-webkit-scrollbar-button {
        display: none;
}
table.days[data-v-79744d27] {
        padding: 1rem;
        width: 100%;
        min-height: 100%;
        border-collapse: collapse;
        border: 1px solid #eee;
        border-bottom: 0;
        table-layout: fixed;
}
table.days thead tr[data-v-79744d27] {
        height: 2.2rem;
}
th.day[data-v-79744d27],
    td.day[data-v-79744d27] {
        padding: 0.4rem;
        border: 1px solid #eee;
        vertical-align: top;
        width: 17%;
}
th.dimmed[data-v-79744d27],
    td.dimmed[data-v-79744d27] {
        width: 8%;
}
div.header[data-v-79744d27] {
        display: flex;
        border-radius: 7px;
        margin: 0;
        /* border-top: 4px solid #f8f8f8; */
        /* padding: 0.2rem 0; */
        /* background-color: #f8f8f8; */
        justify-content: space-between;
}
div.header div[data-v-79744d27] {
        font-size: 0.9rem;
        font-weight: normal;
        border-radius: 5px;
        padding: 0 0.2rem;
        margin: 0;
}
div.header div.focus[data-v-79744d27] {
        background-color: #444 !important;
}
div.header div.date[data-v-79744d27] {
        font-weight: bold;
}
div.header small[data-v-79744d27] {
        font-size: 0.7em;
}
div.header div.duration[data-v-79744d27] {
        line-height: 1.2rem;
        font-size: 0.8rem;
        background-color: #ccc;
        color: white;
        padding: 0.05rem 0;
        margin-right: 0.2rem;
}
div.tasks[data-v-79744d27] {
        border-radius: 7px;
        background-color: #f8f8f8;
        height: 100%;
        padding: 0 0;
        overflow: hidden;
        padding-top: 0.6rem;
        margin: 0;
        min-height: 1rem;
        font-size: 1rem;
        color: silver;
        text-align: center;
}
div.hover[data-v-79744d27] {
        background-color: lightyellow;
        /* background-color: #ebff00; */
}

/*!************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/TheActivities.vue?vue&type=style&index=0&id=47ca8353&scoped=true&lang=css ***!
  \************************************************************************************************************************************************************************************************************************************************************************************/

header[data-v-47ca8353] {
        height: 3rem;
        border-radius: 10px 10px 0 0;
        border: 1px solid #eee;
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 0 0.25rem;
        margin: 0;
}
input#search[data-v-47ca8353] {
        width: 7rem;
}
header div[data-v-47ca8353] {
        font-size: 0.7rem;
        padding: 0 0.2rem;
}
div.list[data-v-47ca8353] {
        border-radius: 7px;
        padding: 0;
        /* background-color: #f8f8f8; */
        vertical-align: top;
}
div.hover[data-v-47ca8353] {
        background-color: lightpink;
}
div.activity[data-v-47ca8353] {
        cursor: pointer;
        border-radius: 7px;
        box-shadow: 0 2px 2px rgba(0, 0, 0, 0.20);
        box-sizing: content-box;
        font-size: 0.75rem;
        margin-bottom: 0.6rem;
        padding: 0.4rem 0.5rem;
        min-height: 0.9rem;
        color: #444;
        border-style: solid;
        border-width: 0px 0px 0px 0.7rem;
        background-color: #f4f4f4;
}

/*!*******************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/App.vue?vue&type=style&index=0&id=5bcdaf03&lang=css (1) ***!
  \*******************************************************************************************************************************************************************************************************************************************************/

* {
        box-sizing: border-box;
        border-width: 1px;
        border-color: #eee;
}
html {
        font-family: 'Roboto', sans-serif;
        font-size: 18px;
}
body {
        margin: 0;
}
input,
    select,
    textarea {
        border-radius: 3px 7px;
        font-weight: normal;
}
input:focus,
    select:focus,
    textarea:focus {
        outline: 1px !important;
}
.timeline {
        padding: 0 0 0 0;
        height: 100%;
        float: left;
        width: 87%;
}
.activities {
        padding: 0 0 0 1rem;
        float: left;
        width: 13%;
}
.digital {
        font-family: monospace;
        font-size: 0.95em;
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/BaseCard.vue?vue&type=style&index=0&id=b9259608&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************/

div[data-v-b9259608] {
        border-radius: 12px;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
        padding: 1rem;
        margin: 2rem auto;
        max-width: 40rem;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/BaseButton.vue?vue&type=style&index=0&id=aaf909c4&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

button[data-v-aaf909c4] {
        display: inline;
        border: 0px;
        border-radius: 17px;

        border-bottom: 3px solid #ddd;
        border-top: 3px solid #eee;
        padding: 0.1rem 0.5rem 0rem 0.5rem;

        background-color: #fff;
        margin: 0;
        font-size: inherit;
        color: inherit;
        font-family: inherit;
        cursor: pointer;

        box-shadow: 0 2px 2px #eee;
}
.hover[data-v-aaf909c4],
    button[data-v-aaf909c4]:hover,
    button[data-v-aaf909c4]:active {
        background-color: #270041;
        border-color: #270041 !important;
        color: #fff;
}
button[data-v-aaf909c4]:focus {
        outline: none !important;
}
.flat[data-v-aaf909c4] {
        background-color: transparent;
        color: #3a0061;
        border: none;
}
.left[data-v-aaf909c4] {
        border-radius: 17px 0 0 17px;
        /* border-left: 0.2rem solid silver;
  border-right: 0.6rem solid #999; */
        border-left: 0.1rem solid #eee;
        border-right: 0.3rem solid #ddd;
}
.right[data-v-aaf909c4] {
        border-radius: 0 17px 17px 0;
        /* border-left: 0.6rem solid silver;
  border-right: 0.2rem solid #999; */
        border-left: 0.3rem solid #eee;
        border-right: 0.1rem solid #ddd;
}
.both[data-v-aaf909c4] {
        border-radius: 0;
        border-left: 0.3rem solid #eee;
        border-right: 0.3rem solid #ddd;
}
.flat[data-v-aaf909c4]:hover,
    .flat[data-v-aaf909c4]:active {
        background-color: #edd2ff;
}
.micro[data-v-aaf909c4] {
        border: 0;
        border-radius: 5px 5px 0 0;
        vertical-align: text-top;
        line-height: 0.5rem;
        padding: 0.04rem 0.25rem;
        font-size: 0.4rem;
        margin-left: 2px;
        margin-right: 2px;
        color: white;
        /* border: 0.5px solid white; */
        border: 0px;
        background-color: transparent;
        margin-top: 0.6rem;
        width: 40%;
        height: 0.4rem;
        box-shadow: 0 2px 2px #f8f8f8;
}
.micro[data-v-aaf909c4]:hover {
        opacity: 0.4;
        background-color: #f8f8f8;
}
.micro.pressed[data-v-aaf909c4]:hover {
        opacity: 0.7;
        background-color: #f8f8f8;
}
.pressed[data-v-aaf909c4] {
        background-color: #f8f8f8;
        /* opacity: 0.85; */
        color: #3a0061;
        /* border: none; */
        border-color: white;
}
button.pressed[data-v-aaf909c4]:hover,
    button.pressed[data-v-aaf909c4]:active {
        background-color: transparent;
        border-color: white;
        color: white;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/BaseDialog.vue?vue&type=style&index=0&id=42965634&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

div[data-v-42965634] {
        position: fixed;
        top: 0;
        left: 0;
        height: 100vh;
        width: 100%;
        background-color: rgba(0, 0, 0, 0.75);
        z-index: 10;
}
dialog[data-v-42965634] {
        position: fixed;
        top: 20vh;
        left: 10%;
        width: 80%;
        z-index: 100;
        border-radius: 12px;
        border: none;
        box-shadow: 0 2px 8px rgba(0, 0, 0, 0.26);
        padding: 0;
        margin: 0;
        overflow: hidden;
}
header[data-v-42965634] {
        background-color: #3a0061;
        color: white;
        width: 100%;
        padding: 1rem;
}
header h2[data-v-42965634] {
        margin: 0;
}
section[data-v-42965634] {
        padding: 1rem;
}
menu[data-v-42965634] {
        padding: 1rem;
        display: flex;
        justify-content: flex-end;
        margin: 0;
}
@media (min-width: 768px) {
dialog[data-v-42965634] {
            left: calc(50% - 20rem);
            width: 40rem;
}
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q2hCLGlCQUFpQjtRQUNqQixZQUFZO1FBQ1osK0JBQStCO1FBQy9CLFdBQVc7UUFDWCw2QkFBNkI7UUFDN0Isa0JBQWtCO1FBQ2xCLFVBQVU7UUFDVixjQUFjO1FBQ2QsNkJBQTZCO0FBQ2pDO0FBRUE7UUFDSSxZQUFZO1FBQ1oseUJBQXlCO0FBQzdCO0FBRUE7UUFDSSxZQUFZO1FBQ1oseUJBQXlCO0FBQzdCO0FBRUE7UUFDSSx5QkFBeUI7UUFDekIsbUJBQW1CO1FBQ25CLGNBQWM7UUFDZCxrQkFBa0I7UUFDbEIsbUJBQW1CO0FBQ3ZCO0FBRUE7O1FBRUksNkJBQTZCO1FBQzdCLG1CQUFtQjtRQUNuQixZQUFZO0FBQ2hCOzs7Ozs7QUNyRkE7UUFDSSxlQUFlO1FBQ2YsTUFBTTtRQUNOLE9BQU87UUFDUCxhQUFhO1FBQ2IsV0FBVztRQUNYLHFDQUFxQztRQUNyQyxXQUFXO0FBQ2Y7QUFFQTtRQUNJLGVBQWU7UUFDZixTQUFTO1FBQ1QsU0FBUztRQUNULFVBQVU7UUFDVixZQUFZO1FBQ1osbUJBQW1CO1FBQ25CLFlBQVk7UUFDWix5Q0FBeUM7UUFDekMsVUFBVTtRQUNWLFNBQVM7UUFDVCxnQkFBZ0I7QUFDcEI7QUFFQTtRQUNJLHlCQUF5QjtRQUN6QixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7QUFDakI7QUFFQTtRQUNJLFNBQVM7QUFDYjtBQUVBO1FBQ0ksYUFBYTtBQUNqQjtBQUVBO1FBQ0ksYUFBYTtRQUNiLGFBQWE7UUFDYix5QkFBeUI7UUFDekIsU0FBUztBQUNiO0FBRUE7QUFDSTtZQUNJLHVCQUF1QjtZQUN2QixZQUFZO0FBQ2hCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL21haW4uY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL1Rhc2tDYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9UYXNrU2VhcmNoLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9CYXNlRHVyYXRpb24udnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL1Rhc2tTZWFyY2hSZXN1bHRDYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9UYXNrU2VhcmNoUmVzdWx0cy52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvVGhlVGltZWxpbmUudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL1RoZUFjdGl2aXRpZXMudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9BcHAudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL0Jhc2VDYXJkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9CYXNlQnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9CYXNlRGlhbG9nLnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJodG1sIHtcbiAgICBmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcbn1cblxuYm9keSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDIuNHJlbTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xufVxuXG5oMSB7XG4gICAgZm9udC1mYW1pbHk6IFwiQ29tZm9ydGFhXCI7XG4gICAgZm9udC1zaXplOiAycmVtO1xuICAgIGNvbG9yOiAjNDQ0O1xuICAgIG1hcmdpbi1ib3R0b206IDAuMDVyZW07XG4gICAgbWFyZ2luLWxlZnQ6IDAuNXJlbTtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbn1cblxuLmxvZ28ge1xuICAgIGNvbG9yOiAjY2NjO1xuICAgIHBhZGRpbmc6IDAgMS41cmVtIDAgMS41cmVtO1xufVxuXG4uYXV0aCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1heC13aWR0aDogNTAlO1xuICAgIGZsb2F0OiByaWdodDtcbiAgICBtYXJnaW46IDAuNXJlbSAxcmVtO1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xufVxuXG4uZmxhc2ggZGl2IHtcbiAgICBtYXJnaW46IDAgMXJlbSAwLjVyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiA3cHg7XG59XG5cbi5tYWluIHtcbiAgICBjbGVhcjogYm90aDtcbiAgICBtYXJnaW46IDAgMXJlbTtcbn1cblxuLnBhZ2Uge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODtcbiAgICBib3JkZXItcmFkaXVzOiA3cHg7XG59XG5cbi5jYXJkIHtcbiAgICBtYXgtd2lkdGg6IDUwJTtcbiAgICBtaW4taGVpZ2h0OiA1MCU7XG4gICAgbWFyZ2luOiAxcmVtIGF1dG87XG59XG5cbi5jYXJkLWhlYWRlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2U4ZThlODtcbn1cblxuYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICB3aWR0aDogMTNweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZmO1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XG4gICAgaGVpZ2h0OiAzcHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogI2VlZTtcbiAgICBib3JkZXItcmFkaXVzOiAzNXB4O1xuICAgIGJvcmRlcjogM3B4IHNvbGlkICNmZmY7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHNpbHZlcjtcbn1cblxuOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIge1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItcmVzaXplciB7XG4gICAgYmFja2dyb3VuZDogI2M4YzhjODtcbn1cblxuZGl2LnJlc2l6YWJsZS1iIHtcbiAgICBoZWlnaHQ6IDEycHggIWltcG9ydGFudDtcbiAgICB3aWR0aDogMjAlICFpbXBvcnRhbnQ7XG4gICAgYm90dG9tOiAtMXB4ICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDUwJSAhaW1wb3J0YW50O1xuICAgIGxlZnQ6IC0xMCUgIWltcG9ydGFudDtcbn1cblxuZGl2LnJlc2l6YWJsZS1iOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYm9yZGVyLWJvdHRvbTogNHB4IGRvdWJsZSB3aGl0ZTtcbn0iLCI8dGVtcGxhdGU+XG4gICAgPHZ1ZS1yZXNpemFibGVcbiAgICAgICAgOmFjdGl2ZT1cIlsnYiddXCJcbiAgICAgICAgOmhlaWdodD1cImhlaWdodFwiXG4gICAgICAgIDptaW4taGVpZ2h0PVwibWluSGVpZ2h0XCJcbiAgICAgICAgOm1heC1oZWlnaHQ9XCJtYXhIZWlnaHRcIlxuICAgICAgICBjbGFzcz1cInRhc2tcIlxuICAgICAgICA6Y2xhc3M9XCJ7XG4gICAgICAgICAgICAnZHVwbGljYWJsZSc6IGlzQWx0UHJlc3NlZCxcbiAgICAgICAgICAgICdkaXNhYmxlZCc6IGRpc2FibGVkLFxuICAgICAgICB9XCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgQHJlc2l6ZTptb3ZlPVwic2V0RGlzcGxheUR1cmF0aW9uKCRldmVudC5oZWlnaHQpXCJcbiAgICAgICAgQHJlc2l6ZTplbmQ9XCJ1cGRhdGVEdXJhdGlvbigkZXZlbnQuaGVpZ2h0KVwiXG4gICAgICAgIEBtb3VzZW1vdmU9XCJjaGVja0FsdFByZXNzZWRcIlxuICAgICAgICA6c3R5bGU9XCJ7IFxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBkZXRhaWxzLmFjdGl2aXR5LmNvbG9yLCBcbiAgICAgICAgICAgIGJvcmRlckNvbG9yOiBkZXRhaWxzLmFjdGl2aXR5LmNvbG9yLCBcbiAgICAgICAgICAgIHdpZHRoOiAnaW5oZXJpdCcgXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJjb250ZW50XCJcbiAgICAgICAgICAgIEBjbGljay5zdG9wPVwiJGVtaXQoJ2VkaXRzdGFydCcpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2aXR5XCI+e3sgZGV0YWlscy5hY3Rpdml0eS5uYW1lIH19PC9kaXY+XG4gICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICB2LWlmPVwiaW5FZGl0ID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgQGRyYWdzdGFydC5wcmV2ZW50XG4gICAgICAgICAgICAgICAgQGtleWRvd24uZW50ZXI9XCJ1cGRhdGVEZXNjcmlwdGlvbigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgQGJsdXI9XCJ1cGRhdGVEZXNjcmlwdGlvbigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgQGtleXVwLmVzYz1cIiRlbWl0KCdlZGl0c3RvcCcpXCJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KGhlaWdodCAtIDMwLCAxNSkgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICByZXNpemU6ICdub25lJ1xuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cImRldGFpbHMuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGRldGFpbHMuZGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8YmFzZS1idXR0b24gOm1vZGU9XCJ7bWljcm86IHRydWUsIHByZXNzZWQ6IHJlcG9ydGVkfVwiIEBkYmxjbGljaz1cInRvZ2dsZVJlcG9ydGVkXCI+PC9iYXNlLWJ1dHRvbj4gLS0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogNTAlOyB0ZXh0LWFsaWduOiByaWdodDtcIj5cbiAgICAgICAgICAgICAgICA8YmFzZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgOm1vZGU9XCJ7IG1pY3JvOiB0cnVlLCBwcmVzc2VkOiByZXBvcnRlZCB9XCJcbiAgICAgICAgICAgICAgICAgICAgQGRibGNsaWNrPVwidG9nZ2xlUmVwb3J0ZWRcIlxuICAgICAgICAgICAgICAgID48L2Jhc2UtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxiYXNlLWR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIG1vZGU9XCJ0aW1lXCJcbiAgICAgICAgICAgICAgICAgICAgOmR1cmF0aW9uPVwidGhpcy5kaXNwbGF5RHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAzcHg7XCJcbiAgICAgICAgICAgICAgICA+PC9iYXNlLWR1cmF0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvdnVlLXJlc2l6YWJsZT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0IFZ1ZVJlc2l6YWJsZSBmcm9tICd2dWUtcmVzaXphYmxlJztcblxuICAgIGNvbnN0IGhlaWdodFVuaXQgPSAzMDtcblxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgVnVlUmVzaXphYmxlXG4gICAgICAgIH0sXG5cbiAgICAgICAgZW1pdDogW1xuICAgICAgICAgICAgJ2VkaXRzdGFydCcsXG4gICAgICAgICAgICAnZWRpdHN0b3AnXG4gICAgICAgIF0sXG5cbiAgICAgICAgcHJvcHM6IFtcbiAgICAgICAgICAgICdkZXRhaWxzJyxcbiAgICAgICAgICAgICdpbkVkaXQnLFxuICAgICAgICAgICAgJ2Rpc2FibGVkJyxcbiAgICAgICAgXSxcblxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IG51bGwsXG4gICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5kZXRhaWxzLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlEdXJhdGlvbjogdGhpcy5kZXRhaWxzLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodFVuaXQ6IGhlaWdodFVuaXQsXG4gICAgICAgICAgICAgICAgcmVwb3J0ZWQ6IHRoaXMuZGV0YWlscy5yZXBvcnRlZCxcbiAgICAgICAgICAgICAgICBpc0FsdFByZXNzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIHdhdGNoOntcbiAgICAgICAgICAgIGluRWRpdCgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbkVkaXQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5kZXNjcmlwdGlvbi5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5kZXNjcmlwdGlvbi5zZWxlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICBzZXREaXNwbGF5RHVyYXRpb24oaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5RHVyYXRpb24gPSB0aGlzLmdldER1cmF0aW9uRnJvbUhlaWdodChoZWlnaHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OyAvLyB1cGRhdGUgaXMgbmVlZGVkIGZvciB2aWV3IHJlYXNvbnNcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldEhlaWdodEZyb21EdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGxldCBoZWlnaHQgPSAwICsgKHRoaXMuaGVpZ2h0VW5pdCAqIGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5taW5IZWlnaHQpIGhlaWdodCA9IE1hdGgubWF4KHRoaXMubWluSGVpZ2h0LCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1heEhlaWdodCkgaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5tYXhIZWlnaHQsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldER1cmF0aW9uRnJvbUhlaWdodChoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gdGhpcy5oZWlnaHRVbml0KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHVwZGF0ZUR1cmF0aW9uKGhlaWdodCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5nZXRIZWlnaHRGcm9tRHVyYXRpb24odGhpcy5kaXNwbGF5RHVyYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheUR1cmF0aW9uICE9PSB0aGlzLmR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHVyYXRpb24gPSB0aGlzLmdldER1cmF0aW9uRnJvbUhlaWdodChoZWlnaHQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLmRldGFpbHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiB0aGlzLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Rhc2tzL3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2tcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHVwZGF0ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gPz8gbnVsbDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB0aGlzLmRldGFpbHMuaWQsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRldGFpbHMuZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YXNrcy91cGRhdGUnLFxuICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdlZGl0c3RvcCcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdG9nZ2xlUmVwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRlZCA9ICF0aGlzLnJlcG9ydGVkO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuZGV0YWlscy5pZCxcbiAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQ6IHRoaXMucmVwb3J0ZWRcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YXNrcy91cGRhdGUnLFxuICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBjaGVja0FsdFByZXNzZWQoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNBbHRQcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuaXNBbHRQcmVzc2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0RnJvbUR1cmF0aW9uKHRoaXMuZGV0YWlscy5kdXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0RnJvbUR1cmF0aW9uKDEuNCk7XG4gICAgICAgICAgICB0aGlzLm1heEhlaWdodCA9IHRoaXMuZ2V0SGVpZ2h0RnJvbUR1cmF0aW9uKDE2KTtcbiAgICAgICAgfVxuICAgIH07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbiAgICB0ZXh0YXJlYSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42NXJlbTtcbiAgICAgICAgY29sb3I6ICM0NDQ7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDIuMnJlbTtcbiAgICB9XG5cbiAgICBpbnB1dFt0eXBlPWNoZWNrYm94XSB7XG4gICAgICAgIG1hcmdpbjogMnB4IDAgMDtcbiAgICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cblxuICAgIC50YXNrIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA3cHggMzVweDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yNik7XG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgICBmb250LXNpemU6IDAuN3JlbTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAwLjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNHJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIH1cblxuICAgIC50YXNrLmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UwZTBlMCAhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjI2KTtcbiAgICB9XG5cbiAgICAudGFzazpob3ZlciB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG5cbiAgICAudGFzay5kdXBsaWNhYmxlOmhvdmVyIHtcbiAgICAgICAgY3Vyc29yOiBjb3B5O1xuICAgIH1cblxuICAgIC50YXNrIGRpdi5jb250ZW50IHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBsaW5lLWhlaWdodDogMC44cmVtO1xuICAgIH1cblxuICAgIC50YXNrIGRpdi5hY3Rpdml0eSB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4O1xuICAgICAgICBmb250LXNpemU6IDAuNjVyZW07XG4gICAgfVxuXG4gICAgLnRhc2suZGlzYWJsZWQgZGl2LmFjdGl2aXR5IHtcbiAgICAgICAgY29sb3I6IGdyYXkgIWltcG9ydGFudDtcbiAgICB9ICAgIFxuXG4gICAgLnRhc2sgZGl2LmFjdGl2aXR5OmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICAudGFzayBzcGFuLmRlc2NyaXB0aW9uIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjY1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMC44NHJlbTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgIH1cblxuICAgIC50YXNrLmRpc2FibGVkIHNwYW4uZGVzY3JpcHRpb24ge1xuICAgICAgICBjb2xvcjogZ3JheSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC50YXNrIHNwYW4uZGVzY3JpcHRpb246aG92ZXIge1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxuXG4gICAgLnRhc2sgZGl2LmZvb3RlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgaGVpZ2h0OiAwLjZyZW07XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8cD5TZWFyY2ggJm5ic3A7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgaWQ9XCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkaWdpdGFsXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzZWFyY2hRdWVyeVN0cmluZ1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgJm5ic3A7IGluICZuYnNwO1xuICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgIGlkPVwiYWN0aXZpdHlGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWwubnVtYmVyPVwiZmlsdGVyQWN0aXZpdHlJZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XCJudWxsXCI+QWxsIGFjdGl2aXRpZXM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIHYtZm9yPVwiYSBpbiBhY3Rpdml0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgOmtleT1cImEuaWRcIlxuICAgICAgICAgICAgICAgICAgICA6dmFsdWU9XCJhLmlkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGEubmFtZSB9fVxuICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBlbWl0czoge1xuICAgICAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YSgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VhcmNoUXVlcnlTdHJpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgZmlsdGVyQWN0aXZpdHlJZDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWFyY2hSZXN1bHRzOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlYXJjaFRpbWVvdXQ6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgICAgICB0YXNrcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVyc1sndGFza3MvYWxsJ107XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhY3Rpdml0aWVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzWydhY3Rpdml0aWVzL2FsbCddO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgICAgc2VhcmNoUXVlcnlTdHJpbmc6IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKHF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaFRpbWVvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaFRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaFJlc3VsdHMocXVlcnksIHRoaXMuZmlsdGVyQWN0aXZpdHlJZCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7IC8vIDEvMiBzZWNvbmQgZGVsYXlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltbWVkaWF0ZTogdHJ1ZVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZmlsdGVyQWN0aXZpdHlJZDoge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoYWN0aXZpdHlJZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlYXJjaFJlc3VsdHModGhpcy5zZWFyY2hRdWVyeVN0cmluZywgYWN0aXZpdHlJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2VhcmNoUmVzdWx0czoge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdyZXN1bHRzJywgcmVzdWx0cyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0YXNrczoge1xuICAgICAgICAgICAgICAgIGhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VhcmNoUmVzdWx0cyh0aGlzLnNlYXJjaFF1ZXJ5U3RyaW5nLCB0aGlzLmZpbHRlckFjdGl2aXR5SWQpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICBtZXRob2RzOiB7XG4gICAgICAgICAgICBhc3luYyB1cGRhdGVTZWFyY2hSZXN1bHRzKHF1ZXJ5LCBhY3Rpdml0eUlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUXVlcnkgPSAhIShxdWVyeSAmJiBxdWVyeS50cmltKCkubGVuZ3RoID49IDMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0FjdGl2aXR5ID0gYWN0aXZpdHlJZCAhPT0gbnVsbCAmJiBhY3Rpdml0eUlkICE9PSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc1F1ZXJ5ICYmICFoYXNBY3Rpdml0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRUYXNrU2VhcmNoUmVzdWx0cyhoYXNRdWVyeSA/IHF1ZXJ5LnRyaW0oKSA6IG51bGwsIGhhc0FjdGl2aXR5ID8gYWN0aXZpdHlJZCA6IG51bGwpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgYXN5bmMgZ2V0VGFza1NlYXJjaFJlc3VsdHMocXVlcnksIGFjdGl2aXR5SWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd0YXNrcy9zZWFyY2gnLCB7IHF1ZXJ5LCBhY3Rpdml0eUlkIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgdGFza3MuZm9yRWFjaCgodGFzaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAocmVzdWx0c1t0aGlzLmdldFByZXZpb3VzTW9uZGF5RGF0ZShuZXcgRGF0ZSh0YXNrLmRhdGUpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKV0gfHw9IFtdKS5wdXNoKHRhc2spO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlc3VsdHMpLmxlbmd0aCA+IDAgPyByZXN1bHRzIDogbnVsbDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnkpIHtcbiAgICAgICAgICAgICAgICAvLyBLZXB0IGZvciBjb21wYXRpYmlsaXR5IGlmIHVzZWQgZWxzZXdoZXJlXG4gICAgICAgICAgICAgICAgaWYgKCFxdWVyeSB8fCBxdWVyeS50cmltKCkubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlYXJjaCBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nIHdpdGggYXQgbGVhc3QgMyBjaGFyYWN0ZXJzJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0UHJldmlvdXNNb25kYXlEYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKChkYXRlLmdldERheSgpICsgNikgJSA3KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgfTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgaW5wdXQjcXVlcnkge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgd2lkdGg6IDE1cmVtO1xuICAgIH1cblxuICAgIHNlbGVjdCNhY3Rpdml0eUZpbHRlciB7XG4gICAgICAgIC8qIGZvbnQtc2l6ZTogMC44cmVtOyAqL1xuICAgICAgICB3aWR0aDogOXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4xNXJlbTtcbiAgICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IHYtaWY9XCJtb2RlID09PSAndGltZSdcIj5cbiAgICAgICAge3sgTWF0aC5mbG9vcihkdXJhdGlvbiAvIDIpIH19PHNtYWxsPjp7eyAoKDYwICogKGR1cmF0aW9uIC8gMiAtIE1hdGguZmxvb3IoZHVyYXRpb24gLyAyKSkpICsgXCJcIikucGFkU3RhcnQoMiwgXCIwXCIpIH19PC9zbWFsbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICAgIHYtZWxzZVxuICAgICAgICBjbGFzcz1cImRpZ2l0YWxcIlxuICAgID5cbiAgICAgICAge3sgZHVyYXRpb24gfX1cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgZHVyYXRpb246IE51bWJlcixcbiAgICAgICAgICAgIG1vZGU6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogJ3RpbWUnXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbiAgICBkaXYge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgfVxuXG4gICAgc21hbGwge1xuICAgICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgIH1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtcmVzdWx0XCJcbiAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogc2VsZWN0ZWQgfVwiXG4gICAgPlxuICAgICAgICA8dGFibGUgY2xhc3M9XCJkYXlzXCI+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPVwiKGRhdGUsIGFycmF5SW5kZXgpIGluIGRhdGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1tZWQ6IGFycmF5SW5kZXggPj0gNSAmJiAhZGF0ZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZzogZ2V0TW9udGgoZGF0ZSkgIT09IG1vbnRoXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPVwidGFzayBpbiB0YXNrc0ZpbHRlckRhdGUoZGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJ0YXNrLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhc2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0YXNrLmFjdGl2aXR5LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRhc2suZHVyYXRpb24gKiAxLjMgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBkYXRlU3RhcnQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0YXNrczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgICAgICBkYXRlcygpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0ID0gRGF0ZS5wYXJzZSh0aGlzLmRhdGVTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9uZURheSA9IDEwMDAgKiA2MCAqIDYwICogMjQ7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpIGluIFswLCAxLCAyLCAzLCA0LCA1LCA2XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZSh0aW1lU3RhcnQgKyBpICogb25lRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVzLnB1c2goZGF0ZS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVzO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBtb250aCgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy50YXNrcykgfHwgdGhpcy50YXNrcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGFza1dpdGhEYXRlID0gdGhpcy50YXNrcy5maW5kKHQgPT4gdCAmJiB0LmRhdGUpO1xuICAgICAgICAgICAgICAgIGlmICghdGFza1dpdGhEYXRlKSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE1vbnRoKHRhc2tXaXRoRGF0ZS5kYXRlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgdGFza3NGaWx0ZXJEYXRlKGRhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXNrc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh0YXNrKSA9PiAodGFzay5kYXRlID09PSBkYXRlKSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBnZXRNb250aChkYXRlU3RyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9udGhOdW0gPSBwYXJzZUludChkYXRlU3RyLnNsaWNlKDUsIDcpLCAxMCk7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obW9udGhOdW0pKSByZXR1cm4gbW9udGhOdW07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgfTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIGRpdi5zZWFyY2gtcmVzdWx0IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAzcmVtO1xuICAgICAgICB3aWR0aDogNnJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCA3cHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDJweCAycHggMnB4IHJnYmEoMCwgMCwgMCwgMC4yNik7XG4gICAgfVxuXG4gICAgZGl2LnNlYXJjaC1yZXN1bHQ6aG92ZXIge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMyNzAwNDE7XG4gICAgICAgIGJvcmRlci1jb2xvcjogIzI3MDA0MTtcbiAgICB9XG5cbiAgICBkaXYuc2VhcmNoLXJlc3VsdC5zZWxlY3RlZCB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xuICAgICAgICBib3gtc2hhZG93OiAxcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMjYpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgfVxuXG4gICAgdGFibGUuZGF5cyB7XG4gICAgICAgIHBhZGRpbmc6IDAuMXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICB9XG5cbiAgICB0ZC5kYXkge1xuICAgICAgICBwYWRkaW5nOiAwLjAxcmVtO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xuICAgICAgICB3aWR0aDogMTclO1xuICAgIH1cblxuICAgIHRkLmRpbW1lZCB7XG4gICAgICAgIHdpZHRoOiA4JTtcbiAgICB9XG5cbiAgICB0ZC5taXNzaW5nIHtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAzcHggN3B4O1xuICAgIH1cblxuICAgIGRpdi50YXNrIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjRweCAycHg7XG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgICBtYXJnaW46IDAuMXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtO1xuICAgIH1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJ0YXNrLXNlYXJjaC1yZXN1bHRzXCI+XG4gICAgICAgIDx0cmFuc2l0aW9uIG5hbWU9XCJmYWRlXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgdi1pZj1cInJlc3VsdHNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLXJlc3VsdHMgZC1mbGV4IGZsZXgtcm93XCJcbiAgICAgICAgICAgICAgICBAd2hlZWwucGFzc2l2ZT1cInNjcm9sbEhvcml6b250YWxseVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICB2LWZvcj1cIihtb250aFJlc3VsdHMsIG1vbnRoKSBpbiByZXN1bHRzU3BsaXRCeU1vbnRocyhyZXN1bHRzKVwiXG4gICAgICAgICAgICAgICAgICAgIDprZXk9XCJtb250aFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW9udGggZC1mbGV4IGZsZXgtcm93XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb250aC1zdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1vbnRoLnNwbGl0KCctJykucG9wKCkgfX08c21hbGw+Lnt7IG1vbnRoLnNwbGl0KCctJykuc2xpY2UoLTIpLnNoaWZ0KCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHVyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFzZS1kdXJhdGlvbiA6ZHVyYXRpb249XCJ0YXNrc0R1cmF0aW9uVG90YWwobW9udGhSZXN1bHRzKVwiPjwvYmFzZS1kdXJhdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHRhc2stc2VhcmNoLXJlc3VsdC1jYXJkXG4gICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj1cIih0YXNrcywgZGF0ZSkgaW4gbW9udGhSZXN1bHRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRlU3RhcnQ9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDp0YXNrcz1cInRhc2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpzZWxlY3RlZD1cInNlbGVjdGVkRGF0ZVN0YXJ0ID09PSBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNldFNlbGVjdGVkRGF0ZVN0YXJ0KGRhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvdGFzay1zZWFyY2gtcmVzdWx0LWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90cmFuc2l0aW9uPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgQmFzZUR1cmF0aW9uIGZyb20gJy4vQmFzZUR1cmF0aW9uLnZ1ZSc7XG4gICAgaW1wb3J0IFRhc2tTZWFyY2hSZXN1bHRDYXJkIGZyb20gJy4vVGFza1NlYXJjaFJlc3VsdENhcmQudnVlJztcblxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgQmFzZUR1cmF0aW9uLFxuICAgICAgICAgICAgVGFza1NlYXJjaFJlc3VsdENhcmRcbiAgICAgICAgfSxcblxuICAgICAgICBlbWl0czoge1xuICAgICAgICAgICAgc2VsZWN0ZWQ6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgcmVzdWx0czoge1xuICAgICAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGRhdGVTdGFydDoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgZGF0YSgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWREYXRlU3RhcnQ6IHRoaXMuZGF0ZVN0YXJ0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcblxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgICAgc2VsZWN0ZWREYXRlU3RhcnQ6IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKGRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0ZWQnLCBkYXRlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZGF0ZVN0YXJ0OiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlcihkYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlID09PSB0aGlzLnNlbGVjdGVkRGF0ZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZERhdGVTdGFydChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWREYXRlU3RhcnQoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgc2V0U2VsZWN0ZWREYXRlU3RhcnQoZGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlU3RhcnQgPSBkYXRlO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdGFza3NEdXJhdGlvblRvdGFsKHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsRHVyYXRpb24gPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YXNrcyBvZiBPYmplY3QudmFsdWVzKHJlc3VsdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFzayBvZiB0YXNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxEdXJhdGlvbiArPSB0YXNrLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsRHVyYXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICByZXN1bHRzU3BsaXRCeU1vbnRocyhyZXN1bHRzSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gcmVzdWx0c0lucHV0ID8/IHRoaXMucmVzdWx0cztcblxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbW9udGhzID0ge307XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt3ZWVrRGF0ZVN0YXJ0LCB0YXNrc10gb2YgT2JqZWN0LmVudHJpZXMocmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhc2tzKSB8fCB0YXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnlNb250aCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFzayBvZiB0YXNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YXNrIHx8ICF0YXNrLmRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGhLZXkgPSB0YXNrLmRhdGUuc2xpY2UoMCwgNyk7IC8vIFlZWVktTU1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFieU1vbnRoW21vbnRoS2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5TW9udGhbbW9udGhLZXldID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5TW9udGhbbW9udGhLZXldLnB1c2godGFzayk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFt5bSwgbW9udGhUYXNrc10gb2YgT2JqZWN0LmVudHJpZXMoYnlNb250aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9udGhUYXNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb250aHNbeW1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhzW3ltXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aHNbeW1dW3dlZWtEYXRlU3RhcnRdID0gbW9udGhUYXNrcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzY3JvbGxIb3Jpem9udGFsbHkoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQgKz0gZXZlbnQuZGVsdGFZICogNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4gICAgZGl2LnNlYXJjaC1yZXN1bHRzIHtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNlZWU7XG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7XG4gICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDtcbiAgICB9XG5cbiAgICBkaXYuc2VhcmNoLXJlc3VsdHM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgaGVpZ2h0OiA4cHg7XG4gICAgfVxuXG4gICAgZGl2LnNlYXJjaC1yZXN1bHRzOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICB9XG5cbiAgICBkaXYuc2VhcmNoLXJlc3VsdHM6Oi13ZWJraXQtc2Nyb2xsYmFyLWJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgZGl2Lm1vbnRoLXN1bW1hcnkge1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjVyZW07XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIH1cblxuICAgIGRpdi5tb250aC1zdW1tYXJ5IGRpdiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgIHBhZGRpbmc6IDAgMC4ycmVtO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgZGl2Lm1vbnRoLXN1bW1hcnkgZGl2LmRhdGUge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG5cbiAgICBkaXYubW9udGgtc3VtbWFyeSBzbWFsbCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43ZW07XG4gICAgfVxuXG4gICAgZGl2Lm1vbnRoLXN1bW1hcnkgZGl2LmR1cmF0aW9uIHtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMnJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG4gICAgICAgIGNvbG9yOiB3aGl0ZTtcbiAgICAgICAgcGFkZGluZzogMC4wNXJlbSAwO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cblxuICAgIC5mYWRlLWVudGVyLWFjdGl2ZSxcbiAgICAuZmFkZS1sZWF2ZS1hY3RpdmUge1xuICAgICAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC4zcyBlYXNlLCBvcGFjaXR5IDAuM3MgZWFzZTtcbiAgICB9XG5cbiAgICAuZmFkZS1lbnRlci1mcm9tLFxuICAgIC5mYWRlLWxlYXZlLXRvIHtcbiAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgIH1cblxuICAgIC5mYWRlLWVudGVyLXRvLFxuICAgIC5mYWRlLWxlYXZlLWZyb20ge1xuICAgICAgICBoZWlnaHQ6IDQuNXJlbTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZS1wYWdlXCI+XG4gICAgICAgIDxoZWFkZXJcbiAgICAgICAgICAgIEBjbGljay5zZWxmPVwic3RvcEVkaXQoKVwiXG4gICAgICAgICAgICBAZHJhZ292ZXIucHJldmVudFxuICAgICAgICAgICAgQGRyb3A9XCJvbkhlYWRlckRyb3BcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxiYXNlLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwic2hpZnREYXRlU3RhcnQoLTcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDptb2RlPVwieyBsZWZ0OiB0cnVlLCBob3ZlcjogbmF2aWdhdGlvbkhvdmVyQWN0aXZlICYmIG5hdmlnYXRpb25Ib3ZlckRpcmVjdGlvbiA8IDAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2VudGVyLnByZXZlbnQ9XCJvbk5hdmlnYXRpb25Ib3ZlclN0YXJ0KC03KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXIucHJldmVudD1cIm9uTmF2aWdhdGlvbkhvdmVyU3RhcnQoLTcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnbGVhdmU9XCJvbk5hdmlnYXRpb25Ib3ZlckVuZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgUHJldlxuICAgICAgICAgICAgICAgICAgICA8L2Jhc2UtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YmFzZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNldERhdGVTdGFydChjdXJyZW50V2Vla0RhdGVTdGFydClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgOm1vZGU9XCJ7IGJvdGg6IHRydWUsIGhvdmVyOiBuYXZpZ2F0aW9uSG92ZXJBY3RpdmUgJiYgbmF2aWdhdGlvbkhvdmVyRGlyZWN0aW9uID09PSAwIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlci5wcmV2ZW50PVwib25OYXZpZ2F0aW9uSG92ZXJTdGFydCgwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXIucHJldmVudD1cIm9uTmF2aWdhdGlvbkhvdmVyU3RhcnQoMClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdsZWF2ZT1cIm9uTmF2aWdhdGlvbkhvdmVyRW5kKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDVweDsgcGFkZGluZy1yaWdodDogNXB4O1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxiPnt7IGN1cnJlbnRXZWVrRGF0ZVN0YXJ0LnNwbGl0KCctJykucG9wKCkgfX08L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+Lnt7IGN1cnJlbnRXZWVrRGF0ZVN0YXJ0LnNwbGl0KCctJykuc2xpY2UoLTIpLnNoaWZ0KCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICA8L2Jhc2UtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YmFzZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNoaWZ0RGF0ZVN0YXJ0KDcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDptb2RlPVwieyByaWdodDogdHJ1ZSwgaG92ZXI6IG5hdmlnYXRpb25Ib3ZlckFjdGl2ZSAmJiBuYXZpZ2F0aW9uSG92ZXJEaXJlY3Rpb24gPiAwIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlci5wcmV2ZW50PVwib25OYXZpZ2F0aW9uSG92ZXJTdGFydCg3KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXIucHJldmVudD1cIm9uTmF2aWdhdGlvbkhvdmVyU3RhcnQoNylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdsZWF2ZT1cIm9uTmF2aWdhdGlvbkhvdmVyRW5kKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICBOZXh0XG4gICAgICAgICAgICAgICAgICAgIDwvYmFzZS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJzXCI+XG4gICAgICAgICAgICAgICAgPHRhc2stc2VhcmNoIEByZXN1bHRzPVwidXBkYXRlU2VhcmNoUmVzdWx0cygkZXZlbnQpXCI+PC90YXNrLXNlYXJjaD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cD5HbyB0byAmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiZGF0ZVN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgPHRhc2stc2VhcmNoLXJlc3VsdHNcbiAgICAgICAgICAgIDpkYXRlLXN0YXJ0PVwiZGF0ZVN0YXJ0XCJcbiAgICAgICAgICAgIDpyZXN1bHRzPVwic2VhcmNoUmVzdWx0c1wiXG4gICAgICAgICAgICBAc2VsZWN0ZWQ9XCJzZXREYXRlU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgID48L3Rhc2stc2VhcmNoLXJlc3VsdHM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lbGluZVwiPlxuICAgICAgICAgICAgPHRhYmxlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkYXlzXCJcbiAgICAgICAgICAgICAgICBAY2xpY2suc2VsZj1cInN0b3BFZGl0KClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9XCIoZGF0ZSwgYXJyYXlJbmRleCkgaW4gZGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbW1lZDogYXJyYXlJbmRleCA+PSA1ICYmICF0YXNrc0R1cmF0aW9uRGF0ZVRvdGFsKGRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZGF0ZS5zcGxpdCgnLScpLnBvcCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPi57eyBkYXRlLnNwbGl0KCctJykuc2xpY2UoLTIpLnNoaWZ0KCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIHYtaWY9XCJuZXcgRGF0ZShkYXRlKS5nZXRGdWxsWWVhcigpICE9PSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKClcIj4ue3sgbmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0ZShkYXRlKS5nZXRGdWxsWWVhcigpIH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJ0YXNrc0R1cmF0aW9uRGF0ZVRvdGFsKGRhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHVyYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiB0YXNrc0R1cmF0aW9uRGF0ZVRvdGFsKGRhdGUpIDwgdGFza3NEdXJhdGlvbkRhdGVEZWFmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYXNlLWR1cmF0aW9uIDpkdXJhdGlvbj1cInRhc2tzRHVyYXRpb25EYXRlVG90YWwoZGF0ZSlcIj48L2Jhc2UtZHVyYXRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi1mb3I9XCIoZGF0ZSwgYXJyYXlJbmRleCkgaW4gZGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbW1lZDogYXJyYXlJbmRleCA+PSA1ICYmICF0YXNrc0R1cmF0aW9uRGF0ZVRvdGFsKGRhdGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LWZvcj1cIih0YXNrLCBhcnJheUluZGV4KSBpbiB0YXNrc0ZpbHRlckRhdGUoZGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRhc2tzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBob3ZlcjogaW5EcmFnICYmIHRvRHJvcCA9PT0gZGF0ZSArICcjJyArIGFycmF5SW5kZXggfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkcm9wPVwib25Ecm9wKCRldmVudCwgZGF0ZSwgYXJyYXlJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ292ZXIucHJldmVudD1cInRvRHJvcCA9IGRhdGUgKyAnIycgKyBhcnJheUluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlci5wcmV2ZW50PVwidG9Ecm9wID0gZGF0ZSArICcjJyArIGFycmF5SW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPVwidG9Ecm9wID0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFzay1jYXJkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGV0YWlscz1cInRhc2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmtleT1cInRhc2suaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmluRWRpdD1cImluRWRpdElkID09PSB0YXNrLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJpbkVkaXRJZCAhPT0gdGFzay5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc1Rhc2tEaXNhYmxlZCh0YXNrKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ3N0YXJ0PVwic3RhcnREcmFnKCRldmVudCwgdGFzaylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVkaXRzdGFydD1cInN0YXJ0RWRpdCh0YXNrLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWRpdHN0b3A9XCJzdG9wRWRpdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGFzay1jYXJkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YXNrc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cInsgaG92ZXI6IGluRHJhZyAmJiB0b0Ryb3AgPT09IGRhdGUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInsgbWluSGVpZ2h0OiAnMi43cmVtJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRyb3A9XCJvbkRyb3AoJGV2ZW50LCBkYXRlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnb3Zlci5wcmV2ZW50PVwidG9Ecm9wID0gZGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnZW50ZXIucHJldmVudD1cInRvRHJvcCA9IGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPVwidG9Ecm9wID0gbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDsrJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgaW1wb3J0IFRhc2tDYXJkIGZyb20gJy4vVGFza0NhcmQudnVlJ1xuICAgIGltcG9ydCBUYXNrU2VhcmNoIGZyb20gJy4vVGFza1NlYXJjaC52dWUnO1xuICAgIGltcG9ydCBUYXNrU2VhcmNoUmVzdWx0cyBmcm9tICcuL1Rhc2tTZWFyY2hSZXN1bHRzLnZ1ZSc7XG5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFRhc2tDYXJkLFxuICAgICAgICAgICAgVGFza1NlYXJjaCxcbiAgICAgICAgICAgIFRhc2tTZWFyY2hSZXN1bHRzLFxuICAgICAgICB9LFxuXG4gICAgICAgIGVtaXRzOiBbXG4gICAgICAgICAgICAnZHJhZ3N0YXJ0JyxcbiAgICAgICAgICAgICdkcm9wJ1xuICAgICAgICBdLFxuXG4gICAgICAgIHByb3BzOiBbXG4gICAgICAgICAgICAnaW5EcmFnJ1xuICAgICAgICBdLFxuXG4gICAgICAgIGRhdGEoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRhc2tzRHVyYXRpb25EYXRlRGVhZmF1bHQ6IDE2LFxuICAgICAgICAgICAgICAgIGN1cnJlbnRXZWVrRGF0ZVN0YXJ0OiB0aGlzLmdldFByZXZpb3VzTW9uZGF5RGF0ZShuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSxcbiAgICAgICAgICAgICAgICBkYXRlU3RhcnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgdG9Ecm9wOiBudWxsLFxuICAgICAgICAgICAgICAgIGluRWRpdElkOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlYXJjaFJlc3VsdHM6IG51bGwsXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkhvdmVyVGltZXI6IG51bGwsXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbkhvdmVyRGlyZWN0aW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25Ib3ZlckFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgICAgIHRhc2tzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzWyd0YXNrcy9hbGwnXVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgodGFza0EsIHRhc2tCKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFza0EuZGF0ZSA9PT0gdGFza0IuZGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrQS5pbmRleCAtIHRhc2tCLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlQSA9IG5ldyBEYXRlKHRhc2tBLmRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVCID0gbmV3IERhdGUodGFza0IuZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVBLmdldFRpbWUoKSAtIGRhdGVCLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhY3Rpdml0aWVzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzWydhY3Rpdml0aWVzL2FsbCddO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZGF0ZXMoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydCA9IERhdGUucGFyc2UodGhpcy5kYXRlU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvbmVEYXkgPSAxMDAwICogNjAgKiA2MCAqIDI0O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaSBpbiBbMCwgMSwgMiwgMywgNCwgNSwgNl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUodGltZVN0YXJ0ICsgaSAqIG9uZURheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlcy5wdXNoKGRhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgICAgZGF0ZVN0YXJ0KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhdGVTdGFydCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlU3RhcnQgPSB0aGlzLmdldFByZXZpb3VzTW9uZGF5RGF0ZShkYXRlKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndGFza3MvZmV0Y2gnLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZTogdGhpcy5nZXRTaGlmdERhdGUodGhpcy5kYXRlU3RhcnQsIC03KSxcbiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZTogdGhpcy5nZXRTaGlmdERhdGUodGhpcy5kYXRlU3RhcnQsIDEzKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaW5EcmFnKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmIChuZXdWYWwgIT09ICd0YXNrJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkhvdmVyRW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG1ldGhvZHM6IHtcbiAgICAgICAgICAgIHRhc2tzRmlsdGVyRGF0ZShkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFza3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodGFzaykgPT4gKHRhc2suZGF0ZSA9PT0gZGF0ZSkpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdGFza3NEdXJhdGlvbkRhdGVUb3RhbChkYXRlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRvdGFsRHVyYXRpb24gPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMudGFza3NcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodGFzaykgPT4gKHRhc2suZGF0ZSA9PT0gZGF0ZSkpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh0YXNrKSA9PiAodG90YWxEdXJhdGlvbiArPSB0YXNrLmR1cmF0aW9uKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsRHVyYXRpb247XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdGFydERyYWcoZXZlbnQsIHRhc2spIHtcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdtb3ZlJztcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgnZnJvbVR5cGUnLCAndGFzaycpO1xuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0YXNrSWQnLCB0YXNrLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdkcmFnc3RhcnQnKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9uRHJvcChldmVudCwgZGF0ZSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuZ2V0TmV3SW5kZXgoZGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgdHlwZSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCdmcm9tVHlwZScpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXNrSWQgPSBwYXJzZUludChldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgndGFza0lkJyksIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kdXBsaWNhdGVUYXNrKGRhdGUsIGluZGV4LCB0YXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlVGFzayhkYXRlLCBpbmRleCwgdGFza0lkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FjdGl2aXR5Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpdml0eUlkID0gcGFyc2VJbnQoZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ2FjdGl2aXR5SWQnKSwgMTApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFRhc2soZGF0ZSwgaW5kZXgsIGFjdGl2aXR5SWQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2Ryb3AnKTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldE5ld0luZGV4KGRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrcyA9IHRoaXMudGFza3NGaWx0ZXJEYXRlKGRhdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YXNrcy5sZW5ndGg7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBhZGRUYXNrKGRhdGUsIGluZGV4LCBhY3Rpdml0eUlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHk6IGFjdGl2aXR5SWQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Rhc2tzL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2tcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGR1cGxpY2F0ZVRhc2soZGF0ZSwgaW5kZXgsIHRhc2tJZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2sgPSB0aGlzLnRhc2tzLmZpbmQoKHRhc2spID0+ICh0YXNrLmlkID09IHRhc2tJZCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tEdXBsaWNhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZpdHk6IHRhc2suYWN0aXZpdHkuaWQsXG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiB0YXNrLmR1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFzay5kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YXNrcy9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrRHVwbGljYXRlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBtb3ZlVGFzayhkYXRlLCBpbmRleCwgdGFza0lkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFzayA9IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZTogZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Rhc2tzL3VwZGF0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZURhdGU6IHRoaXMudGFza3MuZmluZCgodGFzaykgPT4gKHRhc2suaWQgPT0gdGFza0lkKSkuZGF0ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3RhcnRFZGl0KHRhc2tJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5FZGl0SWQgPSB0YXNrSWQ7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdG9wRWRpdCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluRWRpdElkID0gbnVsbDtcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldFNoaWZ0RGF0ZShkYXRlLCBkYXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZGF0ZSkgKyAxMDAwICogNjAgKiA2MCAqIDI0ICogZGF5cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0RhdGUudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzaGlmdERhdGVTdGFydChkYXlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlU3RhcnQgPSB0aGlzLmdldFNoaWZ0RGF0ZSh0aGlzLmRhdGVTdGFydCwgZGF5cyk7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbk5hdmlnYXRpb25Ib3ZlclN0YXJ0KGRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluRHJhZyAhPT0gJ3Rhc2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Ib3ZlckFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSG92ZXJEaXJlY3Rpb24gPSBkaXJlY3Rpb247XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSG92ZXJUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSG92ZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Ib3ZlclRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbkhvdmVyQWN0aXZlICYmIHRoaXMuaW5EcmFnID09PSAndGFzaycgJiYgdGhpcy5uYXZpZ2F0aW9uSG92ZXJEaXJlY3Rpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGVTdGFydCh0aGlzLmN1cnJlbnRXZWVrRGF0ZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdERhdGVTdGFydCh0aGlzLm5hdmlnYXRpb25Ib3ZlckRpcmVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkhvdmVyU3RhcnQodGhpcy5uYXZpZ2F0aW9uSG92ZXJEaXJlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7IC8vIDEgc2Vjb25kXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbk5hdmlnYXRpb25Ib3ZlckVuZCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Ib3ZlckFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkhvdmVyRGlyZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uSG92ZXJUaW1lcikge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5uYXZpZ2F0aW9uSG92ZXJUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkhvdmVyVGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9uSGVhZGVyRHJvcCgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTmF2aWdhdGlvbkhvdmVyRW5kKCk7XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnZHJvcCcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0UHJldmlvdXNNb25kYXlEYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gKChkYXRlLmdldERheSgpICsgNikgJSA3KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzZXREYXRlU3RhcnQoZGF0ZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlU3RhcnQgPSBkYXRlU3RhcnQ7XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB1cGRhdGVTZWFyY2hSZXN1bHRzKHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgaXNUYXNrRGlzYWJsZWQodGFzaykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vbmRheURhdGUgPSB0aGlzLmdldFByZXZpb3VzTW9uZGF5RGF0ZShuZXcgRGF0ZSh0YXNrLmRhdGUpKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcblxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWFyY2hSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VhcmNoUmVzdWx0c1ttb25kYXlEYXRlXSB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLnNlYXJjaFJlc3VsdHNbbW9uZGF5RGF0ZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFJlc3VsdHNbbW9uZGF5RGF0ZV1cbiAgICAgICAgICAgICAgICAgICAgLmV2ZXJ5KChzZWFyY2hUYXNrKSA9PiAoc2VhcmNoVGFzay5pZCAhPT0gdGFzay5pZCkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVkKCkge1xuICAgICAgICAgICAgdGhpcy5zZXREYXRlU3RhcnQodGhpcy5nZXRQcmV2aW91c01vbmRheURhdGUoKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKSk7XG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbiAgICAudGltZWxpbmUtcGFnZSB7XG4gICAgICAgIGhlaWdodDogMTAwdmg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgaGVhZGVyIHtcbiAgICAgICAgaGVpZ2h0OiAzcmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIHRleHQtYWxpZ246IGJhc2VsaW5lO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjVyZW07XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODtcbiAgICB9XG5cbiAgICBoZWFkZXIgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICB9XG5cbiAgICBoZWFkZXIgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICBoZWFkZXIgZGl2LmZpbHRlcnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIC8qIGZvbnQtd2VpZ2h0OiBib2xkOyAqL1xuICAgICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICB9XG5cbiAgICBkaXYudGltZWxpbmUge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgZmxleDogMSAxIGF1dG87IC8qIHRha2UgcmVtYWluaW5nIGhlaWdodCBhdXRvbWF0aWNhbGx5ICovXG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7ICAgLyogYWxsb3cgaW5uZXIgc2Nyb2xsaW5nIGluIGZsZXggY29udGFpbmVyICovXG4gICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7XG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZWVlO1xuICAgIH1cblxuICAgIGRpdi50aW1lbGluZTo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgICAgICB3aWR0aDogOHB4O1xuICAgIH1cblxuICAgIGRpdi50aW1lbGluZTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTBlMGUwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gICAgfVxuXG4gICAgZGl2LnRpbWVsaW5lOjotd2Via2l0LXNjcm9sbGJhci1idXR0b24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIHRhYmxlLmRheXMge1xuICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWluLWhlaWdodDogMTAwJTtcbiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAgICAgdGFibGUtbGF5b3V0OiBmaXhlZDtcbiAgICB9XG5cbiAgICB0YWJsZS5kYXlzIHRoZWFkIHRyIHtcbiAgICAgICAgaGVpZ2h0OiAyLjJyZW07XG4gICAgfVxuXG4gICAgdGguZGF5LFxuICAgIHRkLmRheSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNHJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDtcbiAgICAgICAgd2lkdGg6IDE3JTtcbiAgICB9XG5cbiAgICB0aC5kaW1tZWQsXG4gICAgdGQuZGltbWVkIHtcbiAgICAgICAgd2lkdGg6IDglO1xuICAgIH1cblxuICAgIGRpdi5oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgLyogYm9yZGVyLXRvcDogNHB4IHNvbGlkICNmOGY4Zjg7ICovXG4gICAgICAgIC8qIHBhZGRpbmc6IDAuMnJlbSAwOyAqL1xuICAgICAgICAvKiBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4OyAqL1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgfVxuXG4gICAgZGl2LmhlYWRlciBkaXYge1xuICAgICAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBwYWRkaW5nOiAwIDAuMnJlbTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIGRpdi5oZWFkZXIgZGl2LmZvY3VzIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NCAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGRpdi5oZWFkZXIgZGl2LmRhdGUge1xuICAgICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB9XG5cbiAgICBkaXYuaGVhZGVyIHNtYWxsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjdlbTtcbiAgICB9XG5cbiAgICBkaXYuaGVhZGVyIGRpdi5kdXJhdGlvbiB7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjJyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIHBhZGRpbmc6IDAuMDVyZW0gMDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgfVxuXG4gICAgZGl2LnRhc2tzIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHBhZGRpbmc6IDAgMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcGFkZGluZy10b3A6IDAuNnJlbTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBtaW4taGVpZ2h0OiAxcmVtO1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGNvbG9yOiBzaWx2ZXI7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG5cbiAgICBkaXYuaG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodHllbGxvdztcbiAgICAgICAgLyogYmFja2dyb3VuZC1jb2xvcjogI2ViZmYwMDsgKi9cbiAgICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPGRpdj48YmFzZS1idXR0b24gQGNsaWNrPVwiXCI+QTwvYmFzZS1idXR0b24+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2PjxiYXNlLWJ1dHRvbiBAY2xpY2s9XCJcIj5CPC9iYXNlLWJ1dHRvbj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+PGJhc2UtYnV0dG9uIEBjbGljaz1cIlwiPkM8L2Jhc2UtYnV0dG9uPjwvZGl2PlxuICAgICAgICAgICAgPGRpdj48YmFzZS1idXR0b24gQGNsaWNrPVwiXCI+RDwvYmFzZS1idXR0b24+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2PjxiYXNlLWJ1dHRvbiBAY2xpY2s9XCJcIj5FPC9iYXNlLWJ1dHRvbj48L2Rpdj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibGlzdFwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7IGhvdmVyOiBpbkRyYWcgJiYgdG9Ecm9wID09PSAnbGlzdCcgfVwiXG4gICAgICAgICAgICBAZHJvcD1cIm9uRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgIEBkcmFnb3Zlci5wcmV2ZW50PVwic2V0VG9Ecm9wKClcIlxuICAgICAgICAgICAgQGRyYWdlbnRlci5wcmV2ZW50PVwic2V0VG9Ecm9wKClcIlxuICAgICAgICAgICAgQGRyYWdsZWF2ZT1cInRvRHJvcCA9IG51bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgdi1mb3I9XCJhY3Rpdml0eSBpbiBhY3Rpdml0aWVzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGl2aXR5XCJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7IGJvcmRlckNvbG9yOiBhY3Rpdml0eS5jb2xvciB9XCJcbiAgICAgICAgICAgICAgICA6a2V5PVwiYWN0aXZpdHkuaWRcIlxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxuICAgICAgICAgICAgICAgIEBkcmFnc3RhcnQ9XCJzdGFydERyYWcoJGV2ZW50LCBhY3Rpdml0eSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGFjdGl2aXR5Lm5hbWUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBwcm9wczogW1xuICAgICAgICAgICAgJ2luRHJhZydcbiAgICAgICAgXSxcblxuICAgICAgICBlbWl0czogW1xuICAgICAgICAgICAgJ2RyYWdzdGFydCcsXG4gICAgICAgICAgICAnZHJvcCdcbiAgICAgICAgXSxcblxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0b0Ryb3A6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjb21wdXRlZDoge1xuICAgICAgICAgICAgYWN0aXZpdGllcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuZ2V0dGVyc1snYWN0aXZpdGllcy9hbGwnXTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgc3RhcnREcmFnKGV2ZW50LCBhY3Rpdml0eSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknO1xuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ2NvcHknO1xuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdmcm9tVHlwZScsICdhY3Rpdml0eScpO1xuICAgICAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdhY3Rpdml0eUlkJywgYWN0aXZpdHkuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2RyYWdzdGFydCcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2V0VG9Ecm9wKCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluRHJhZyA9PT0gJ3Rhc2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9Ecm9wID0gJ2xpc3QnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG9uRHJvcChldmVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnZnJvbVR5cGUnKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tJZCA9IHBhcnNlSW50KGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0YXNrSWQnKSwgMTApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVRhc2sodGFza0lkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnZHJvcCcpO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcmVtb3ZlVGFzayh0YXNrSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0YXNrcy9kZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICB0YXNrSWQ6IHRhc2tJZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNyZWF0ZWQoKSB7XG4gICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnYWN0aXZpdGllcy9mZXRjaCcpO1xuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4gICAgaGVhZGVyIHtcbiAgICAgICAgaGVpZ2h0OiAzcmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDAgMC4yNXJlbTtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgIH1cblxuICAgIGlucHV0I3NlYXJjaCB7XG4gICAgICAgIHdpZHRoOiA3cmVtO1xuICAgIH1cblxuICAgIGhlYWRlciBkaXYge1xuICAgICAgICBmb250LXNpemU6IDAuN3JlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjJyZW07XG4gICAgfVxuXG4gICAgZGl2Lmxpc3Qge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIC8qIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7ICovXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gICAgfVxuXG4gICAgZGl2LmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRwaW5rO1xuICAgIH1cblxuICAgIGRpdi5hY3Rpdml0eSB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogN3B4O1xuICAgICAgICBib3gtc2hhZG93OiAwIDJweCAycHggcmdiYSgwLCAwLCAwLCAwLjIwKTtcbiAgICAgICAgYm94LXNpemluZzogY29udGVudC1ib3g7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC42cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjRyZW0gMC41cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAwLjlyZW07XG4gICAgICAgIGNvbG9yOiAjNDQ0O1xuICAgICAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgICAgICBib3JkZXItd2lkdGg6IDBweCAwcHggMHB4IDAuN3JlbTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcbiAgICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGltZWxpbmVcIj5cbiAgICAgICAgICAgIDx0aGUtdGltZWxpbmVcbiAgICAgICAgICAgICAgICA6aW5EcmFnPVwiaW5EcmFnXCJcbiAgICAgICAgICAgICAgICBAZHJhZ3N0YXJ0PVwiaW5EcmFnID0gJ3Rhc2snXCJcbiAgICAgICAgICAgICAgICBAZHJvcD1cImluRHJhZyA9IG51bGxcIlxuICAgICAgICAgICAgPjwvdGhlLXRpbWVsaW5lPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGl2aXRpZXNcIj5cbiAgICAgICAgICAgIDx0aGUtYWN0aXZpdGllc1xuICAgICAgICAgICAgICAgIDppbkRyYWc9XCJpbkRyYWdcIlxuICAgICAgICAgICAgICAgIEBkcmFnc3RhcnQ9XCJpbkRyYWcgPSAnYWN0aXZpdHknXCJcbiAgICAgICAgICAgICAgICBAZHJvcD1cImluRHJhZyA9IG51bGxcIlxuICAgICAgICAgICAgPjwvdGhlLWFjdGl2aXRpZXM+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBpbXBvcnQgQXBpIGZyb20gJy4vYXBpL2FwaS5qcyc7XG4gICAgaW1wb3J0IFJvdXRpbmcgZnJvbSAnZm9zLXJvdXRlcidcblxuICAgIGltcG9ydCBUaGVUaW1lbGluZSBmcm9tICcuL2NvbXBvbmVudHMvVGhlVGltZWxpbmUudnVlJztcbiAgICBpbXBvcnQgVGhlQWN0aXZpdGllcyBmcm9tICcuL2NvbXBvbmVudHMvVGhlQWN0aXZpdGllcy52dWUnO1xuXG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICBUaGVUaW1lbGluZSxcbiAgICAgICAgICAgIFRoZUFjdGl2aXRpZXNcbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhKCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbkRyYWc6IG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBjcmVhdGVkKCkge1xuICAgICAgICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3VzZXJzL2ZldGNoQ3VycmVudFVzZXInKTtcbiAgICAgICAgfSxcblxuICAgICAgICBtb3VudGVkKCkge1xuICAgICAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICAgICAgICAgIEFwaS5nZXQoUm91dGluZy5nZW5lcmF0ZSgnYXBpX3NlY3VyaXR5X2NoZWNrJykpO1xuICAgICAgICAgICAgfSwgNjAgKiAxMDAwKTtcbiAgICAgICAgfSxcbiAgICB9O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cbiAgICBAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3MyP2ZhbWlseT1Sb2JvdG86d2dodEA0MDA7NzAwJmRpc3BsYXk9c3dhcCcpO1xuXG4gICAgKiB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGJvcmRlci13aWR0aDogMXB4O1xuICAgICAgICBib3JkZXItY29sb3I6ICNlZWU7XG4gICAgfVxuXG4gICAgaHRtbCB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjtcbiAgICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgIH1cblxuICAgIGJvZHkge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgaW5wdXQsXG4gICAgc2VsZWN0LFxuICAgIHRleHRhcmVhIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4IDdweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICB9XG5cbiAgICBpbnB1dDpmb2N1cyxcbiAgICBzZWxlY3Q6Zm9jdXMsXG4gICAgdGV4dGFyZWE6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiAxcHggIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAudGltZWxpbmUge1xuICAgICAgICBwYWRkaW5nOiAwIDAgMCAwO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgICB3aWR0aDogODclO1xuICAgIH1cblxuICAgIC5hY3Rpdml0aWVzIHtcbiAgICAgICAgcGFkZGluZzogMCAwIDAgMXJlbTtcbiAgICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICAgIHdpZHRoOiAxMyU7XG4gICAgfVxuXG4gICAgLmRpZ2l0YWwge1xuICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAgICAgICBmb250LXNpemU6IDAuOTVlbTtcbiAgICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIGRpdiB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjYpO1xuICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICBtYXJnaW46IDJyZW0gYXV0bztcbiAgICAgICAgbWF4LXdpZHRoOiA0MHJlbTtcbiAgICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8YnV0dG9uIDpjbGFzcz1cIm1vZGVcIj5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgIDwvYnV0dG9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbiAgICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICAgIHByb3BzOiBbJ21vZGUnXVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIGJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICAgICAgYm9yZGVyOiAwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDE3cHg7XG5cbiAgICAgICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNkZGQ7XG4gICAgICAgIGJvcmRlci10b3A6IDNweCBzb2xpZCAjZWVlO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW0gMC41cmVtIDByZW0gMC41cmVtO1xuXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICBib3gtc2hhZG93OiAwIDJweCAycHggI2VlZTtcbiAgICB9XG5cbiAgICAuaG92ZXIsXG4gICAgYnV0dG9uOmhvdmVyLFxuICAgIGJ1dHRvbjphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjcwMDQxO1xuICAgICAgICBib3JkZXItY29sb3I6ICMyNzAwNDEgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgfVxuXG4gICAgYnV0dG9uOmZvY3VzIHtcbiAgICAgICAgb3V0bGluZTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5mbGF0IHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGNvbG9yOiAjM2EwMDYxO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgfVxuXG4gICAgLmxlZnQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxN3B4IDAgMCAxN3B4O1xuICAgICAgICAvKiBib3JkZXItbGVmdDogMC4ycmVtIHNvbGlkIHNpbHZlcjtcbiAgYm9yZGVyLXJpZ2h0OiAwLjZyZW0gc29saWQgIzk5OTsgKi9cbiAgICAgICAgYm9yZGVyLWxlZnQ6IDAuMXJlbSBzb2xpZCAjZWVlO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDAuM3JlbSBzb2xpZCAjZGRkO1xuICAgIH1cblxuICAgIC5yaWdodCB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMTdweCAxN3B4IDA7XG4gICAgICAgIC8qIGJvcmRlci1sZWZ0OiAwLjZyZW0gc29saWQgc2lsdmVyO1xuICBib3JkZXItcmlnaHQ6IDAuMnJlbSBzb2xpZCAjOTk5OyAqL1xuICAgICAgICBib3JkZXItbGVmdDogMC4zcmVtIHNvbGlkICNlZWU7XG4gICAgICAgIGJvcmRlci1yaWdodDogMC4xcmVtIHNvbGlkICNkZGQ7XG4gICAgfVxuXG4gICAgLmJvdGgge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItbGVmdDogMC4zcmVtIHNvbGlkICNlZWU7XG4gICAgICAgIGJvcmRlci1yaWdodDogMC4zcmVtIHNvbGlkICNkZGQ7XG4gICAgfVxuXG4gICAgLmZsYXQ6aG92ZXIsXG4gICAgLmZsYXQ6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VkZDJmZjtcbiAgICB9XG5cbiAgICAubWljcm8ge1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwO1xuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdGV4dC10b3A7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAwLjVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMDRyZW0gMC4yNXJlbTtcbiAgICAgICAgZm9udC1zaXplOiAwLjRyZW07XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMnB4O1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIC8qIGJvcmRlcjogMC41cHggc29saWQgd2hpdGU7ICovXG4gICAgICAgIGJvcmRlcjogMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMC42cmVtO1xuICAgICAgICB3aWR0aDogNDAlO1xuICAgICAgICBoZWlnaHQ6IDAuNHJlbTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAycHggMnB4ICNmOGY4Zjg7XG4gICAgfVxuXG4gICAgLm1pY3JvOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC40O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICAgIH1cblxuICAgIC5taWNyby5wcmVzc2VkOmhvdmVyIHtcbiAgICAgICAgb3BhY2l0eTogMC43O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOGY4O1xuICAgIH1cblxuICAgIC5wcmVzc2VkIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODtcbiAgICAgICAgLyogb3BhY2l0eTogMC44NTsgKi9cbiAgICAgICAgY29sb3I6ICMzYTAwNjE7XG4gICAgICAgIC8qIGJvcmRlcjogbm9uZTsgKi9cbiAgICAgICAgYm9yZGVyLWNvbG9yOiB3aGl0ZTtcbiAgICB9XG5cbiAgICBidXR0b24ucHJlc3NlZDpob3ZlcixcbiAgICBidXR0b24ucHJlc3NlZDphY3RpdmUge1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB3aGl0ZTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDx0ZWxlcG9ydCB0bz1cImJvZHlcIj5cbiAgICAgICAgPGRpdiBAY2xpY2s9XCIkZW1pdCgnY2xvc2UnKVwiPjwvZGl2PlxuICAgICAgICA8ZGlhbG9nIG9wZW4+XG4gICAgICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgyPnt7IHRpdGxlIH19PC9oMj5cbiAgICAgICAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxtZW51PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxiYXNlLWJ1dHRvbiBAY2xpY2s9XCIkZW1pdCgnY2xvc2UnKVwiPkNsb3NlPC9iYXNlLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgICAgICA8L21lbnU+XG4gICAgICAgIDwvZGlhbG9nPlxuICAgIDwvdGVsZXBvcnQ+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuICAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVtaXRzOiBbJ2Nsb3NlJ10sXG4gICAgfTtcbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxuICAgIGRpdiB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICBoZWlnaHQ6IDEwMHZoO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc1KTtcbiAgICAgICAgei1pbmRleDogMTA7XG4gICAgfVxuXG4gICAgZGlhbG9nIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDIwdmg7XG4gICAgICAgIGxlZnQ6IDEwJTtcbiAgICAgICAgd2lkdGg6IDgwJTtcbiAgICAgICAgei1pbmRleDogMTAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjYpO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuXG4gICAgaGVhZGVyIHtcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzNhMDA2MTtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICB9XG5cbiAgICBoZWFkZXIgaDIge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxuXG4gICAgc2VjdGlvbiB7XG4gICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgfVxuXG4gICAgbWVudSB7XG4gICAgICAgIHBhZGRpbmc6IDFyZW07XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgICAgICAgZGlhbG9nIHtcbiAgICAgICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMjByZW0pO1xuICAgICAgICAgICAgd2lkdGg6IDQwcmVtO1xuICAgICAgICB9XG4gICAgfVxuPC9zdHlsZT4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/